{"version":3,"file":"bin.mjs","names":["make","layer","ServerAuthPolicy","isProviderDriverKind","GROK_DRIVER_KIND","RuntimeMode","DEFAULT_RUNTIME_MODE","ProjectCreatedPayload","ProjectMetaUpdatedPayload","ProjectDeletedPayload","ThreadCreatedPayload","ThreadDeletedPayload","ThreadArchivedPayload","ThreadUnarchivedPayload","ThreadMetaUpdatedPayload","ThreadRuntimeModeSetPayload","ThreadInteractionModeSetPayload","ThreadTurnQueuedPayload","ThreadQueuedTurnUpdatedPayload","ThreadQueuedTurnCancelledPayload","ThreadQueuedTurnDispatchedPayload","ThreadQueuedTurnSteerRequestedPayload","ThreadQueuedTurnSteeredPayload","ThreadQueuedTurnSteerFailedPayload","ThreadRevertedPayload","ThreadSessionSetPayload","ThreadProposedPlanUpsertedPayload","ThreadTurnDiffCompletedPayload","ThreadActivityAppendedPayload","HttpServerResponse","TrimmedNonEmptyStringSchema","RuntimeMode","TrimmedNonEmptyStringSchema","RuntimeMode","ServerConfig","ServerConfig","toPersistenceSqlOrDecodeError","Crypto","toPersistenceSqlOrDecodeError","Crypto","DEFAULT_RUNTIME_MODE","Migration0001","Migration0002","Migration0003","Migration0004","Migration0005","Migration0006","Migration0007","Migration0008","Migration0009","Migration0010","Migration0011","Migration0012","Migration0013","Migration0014","Migration0015","Migration0016","Migration0017","Migration0018","Migration0019","Migration0020","Migration0021","Migration0022","Migration0023","Migration0024","Migration0025","Migration0026","Migration0027","Migration0028","Migration0029","Migration0030","Migration0031","Migration0032","Migration0033","Migration0034","Migration0035","Migration0036","Migration0037","Migration0038","Migration0039","Migration0040","Migration0041","Migration0042","SqlitePersistenceLayerLive","P","decodeJsonString","ServerSettingsJson","isRecord","hasOwn","Net","NodePath","expandHomePath","NetService.NetService","expandHomePath","toPersistenceSqlOrDecodeError","toPersistenceSqlOrDecodeError","ContractsProjectCreatedPayloadSchema","ContractsProjectMetaUpdatedPayloadSchema","ContractsProjectDeletedPayloadSchema","ContractsThreadCreatedPayloadSchema","ContractsThreadArchivedPayloadSchema","ContractsThreadMetaUpdatedPayloadSchema","ContractsThreadRuntimeModeSetPayloadSchema","ContractsThreadInteractionModeSetPayloadSchema","ContractsThreadDeletedPayloadSchema","ContractsThreadUnarchivedPayloadSchema","ContractsThreadMessageSentPayloadSchema","ContractsThreadTurnQueuedPayloadSchema","ContractsThreadQueuedTurnUpdatedPayloadSchema","ContractsThreadQueuedTurnCancelledPayloadSchema","ContractsThreadQueuedTurnDispatchedPayloadSchema","ContractsThreadQueuedTurnSteerRequestedPayloadSchema","ContractsThreadQueuedTurnSteerFailedPayloadSchema","ContractsThreadQueuedTurnSteeredPayloadSchema","ContractsThreadProposedPlanUpsertedPayloadSchema","ContractsThreadSessionSetPayloadSchema","ContractsThreadTurnDiffCompletedPayloadSchema","ContractsThreadRevertedPayloadSchema","ContractsThreadActivityAppendedPayloadSchema","settledTurnStateForSessionStatus","nowIso","Crypto","Crypto","ProjectionThreadQueuedTurnDbRow","RuntimeMode","RuntimeMode","RuntimeMode","ProjectionThreadActivityDbRowSchema","toPersistenceSqlOrDecodeError","ProjectionThreadMessageDbRowSchema","toPersistenceSqlOrDecodeError","imageExtensionFromFileName","sharedImageExtensionFromFileName","toPersistenceSqlOrDecodeError","deriveLocalBranchNameFromRemoteRef","DEFAULT_MAX_OUTPUT_BYTES","make","layer","parseRemoteFetchUrls","ProcessRunner.ProcessRunner","ProcessRunner.layer","expandHomePath","OS","Crypto","SqlitePersistenceLayerLive","path","ExitRuntime","authenticateOwnerSession","videoExtensionFromFileName","sharedVideoExtensionFromFileName","LOOPBACK_HOSTNAMES","requireAuthenticatedRequest","net","clamp","Array","make","layer","asRecord","asTrimmedString","nonEmptyString","makeManualProviderMaintenanceCapabilities","nowIso","truncateText","make","layer","textEncoder","textDecoder","isProviderDriverKind","Crypto","ExternalLauncher.ExternalLauncher","layer","DEFAULT_TIMEOUT_MS","DEFAULT_MAX_OUTPUT_BYTES","OUTPUT_TRUNCATED_MARKER","splitNullSeparatedPaths","commandLabel","DEFAULT_TIMEOUT_MS","make","layer","ProcessRunnerLive","VcsProcess.VcsProcess","make","GitVcsDriverCore.makeGitVcsDriverCore","VcsDriver.VcsDriver","layer","trimOptionalString","DEFAULT_TIMEOUT_MS","errorText","normalizeChangeRequestId","normalizeRepositoryCloneUrls","make","VcsProcess.VcsProcess","SourceControlProvider.sourceBranch","AzureDevOpsPullRequests.decodeAzureDevOpsPullRequestListJson","AzureDevOpsPullRequests.formatAzureDevOpsJsonDecodeError","AzureDevOpsPullRequests.decodeAzureDevOpsPullRequestJson","layer","providerError","SourceControlProviderDiscovery.providerAuth","SourceControlProviderDiscovery.firstSafeAuthLine","SourceControlProviderDiscovery.combinedAuthOutput","discovery","toChangeRequest","make","AzureDevOpsCli.AzureDevOpsCli","SourceControlProvider.sourceControlRefFromInput","layer","SourceControlProvider.SourceControlProvider","trimOptionalString","make","layer","make","VcsProjectConfig.VcsProjectConfig","GitVcsDriver.makeVcsDriverShape","layer","VcsProjectConfig.layer","SourceControlProvider.parseSourceControlOwnerRef","normalizeRepositoryCloneUrls","shouldPreferSshRemote","make","GitVcsDriver.GitVcsDriver","VcsDriverRegistry.VcsDriverRegistry","BitbucketPullRequests.BitbucketPullRequestSchema","SourceControlProvider.sourceBranch","BitbucketPullRequests.BitbucketPullRequestListSchema","BitbucketPullRequests.normalizeBitbucketPullRequestRecord","layer","providerError","toChangeRequest","make","BitbucketApi.BitbucketApi","SourceControlProvider.sourceControlRefFromInput","layer","SourceControlProvider.SourceControlProvider","trimOptionalString","DEFAULT_TIMEOUT_MS","normalizeRepositoryCloneUrls","make","VcsProcess.VcsProcess","GitHubPullRequests.decodeGitHubPullRequestListJson","GitHubPullRequests.formatGitHubJsonDecodeError","GitHubPullRequests.decodeGitHubPullRequestJson","layer","providerError","toChangeRequest","SourceControlProviderDiscovery.combinedAuthOutput","SourceControlProviderDiscovery.providerAuth","SourceControlProviderDiscovery.firstSafeAuthLine","discovery","make","GitHubCli.GitHubCli","GitHubPullRequests.decodeGitHubPullRequestListJson","layer","SourceControlProvider.SourceControlProvider","DEFAULT_TIMEOUT_MS","make","VcsProcess.VcsProcess","GitLabMergeRequests.decodeGitLabMergeRequestListJson","GitLabMergeRequests.formatGitLabJsonDecodeError","GitLabMergeRequests.decodeGitLabMergeRequestJson","layer","SourceControlProviderDiscovery.combinedAuthOutput","SourceControlProviderDiscovery.matchFirst","SourceControlProviderDiscovery.parseCliHost","SourceControlProviderDiscovery.providerAuth","SourceControlProviderDiscovery.firstSafeAuthLine","make","GitLabCli.GitLabCli","SourceControlProvider.sourceControlRefFromInput","layer","SourceControlProvider.SourceControlProvider","VcsProcess.VcsProcess","VcsDriverRegistry.VcsDriverRegistry","SourceControlProviderDiscovery.refineUnknownRemoteProvider","SourceControlProviderDiscovery.probeSourceControlProvider","make","GitHubSourceControlProvider.make","GitLabSourceControlProvider.make","BitbucketSourceControlProvider.make","BitbucketSourceControlProvider.makeDiscovery","AzureDevOpsSourceControlProvider.make","GitHubSourceControlProvider.discovery","GitLabSourceControlProvider.discovery","AzureDevOpsSourceControlProvider.discovery","layer","Crypto","layer","make","layer","layer","GitWorkflowService.GitWorkflowService","make","VcsDriverRegistry.VcsDriverRegistry","layer","readProcessRows","make","layer","make","readProcessRows","layer","make","layer","layer","VcsProcess.VcsProcess","SourceControlProviderRegistry.SourceControlProviderRegistry","SourceControlProviderDiscovery.firstNonEmptyLine","SourceControlProviderDiscovery.detailFromCause","expandHomePath","make","GitVcsDriver.GitVcsDriver","SourceControlProviderRegistry.SourceControlProviderRegistry","nowIso","Crypto","ExternalLauncher.ExternalLauncher","ProviderMaintenanceRunner.ProviderMaintenanceRunner","SourceControlDiscoveryLayer.SourceControlDiscovery","ProcessDiagnostics.ProcessDiagnostics","ProcessResourceMonitor.ProcessResourceMonitor","ExternalLauncher.resolveAvailableEditors","TraceDiagnostics.readTraceDiagnostics","OpenVsxProvider.searchThemes","OpenVsxProvider.previewTheme","OpenVsxProvider.importTheme","AzureDevOpsCli.layer","BitbucketApi.layer","GitHubCli.layer","GitLabCli.layer","GitVcsDriver.layer","VcsProjectConfig.layer","VcsProcess.layer","Crypto","packageJson.version","RuntimeMode","isRecord","toPersistenceSqlOrDecodeError","encodeUnknownJsonString","path","isRecord","isRecord","encodeUnknownJsonStringExit","P","encodeJsonStringForDiagnostics","NetService.NetService","NetService.layer","make","isTextGenerationError","expandHomePath","expandHomePath","PROVIDER","toTitleCaseWords","claudeQuery","nowIso","encodeJsonString","asFiniteNumber","asPlainRecord","encodeUnknownJsonStringExit","PROVIDER","asRecord","encodeJsonStringForDiagnostics","readStringArray","toProcessError","asRuntimeItemId","asRuntimeSubagentId","readString","asRuntimeRequestId","toRequestError","Crypto","DRIVER_KIND","SNAPSHOT_REFRESH_INTERVAL","UPDATE","withInstanceIdentity","encodeJsonString","expandHomePath","ClientNotification","ClientRequest","RequestId","CodexSchema.V1InitializeParams","CodexSchema.V2ThreadStartParams","CodexSchema.V2ThreadResumeParams","CodexSchema.V2ThreadForkParams","CodexSchema.V2ThreadArchiveParams","CodexSchema.V2ThreadDeleteParams","CodexSchema.V2ThreadUnsubscribeParams","CodexSchema.V2ThreadSetNameParams","CodexSchema.V2ThreadGoalSetParams","CodexSchema.V2ThreadGoalGetParams","CodexSchema.V2ThreadGoalClearParams","CodexSchema.V2ThreadMetadataUpdateParams","CodexSchema.V2ThreadUnarchiveParams","CodexSchema.V2ThreadCompactStartParams","CodexSchema.V2ThreadShellCommandParams","CodexSchema.V2ThreadApproveGuardianDeniedActionParams","CodexSchema.V2ThreadRollbackParams","CodexSchema.V2ThreadListParams","CodexSchema.V2ThreadLoadedListParams","CodexSchema.V2ThreadReadParams","CodexSchema.V2ThreadInjectItemsParams","CodexSchema.V2SkillsListParams","CodexSchema.V2SkillsExtraRootsSetParams","CodexSchema.V2HooksListParams","CodexSchema.V2MarketplaceAddParams","CodexSchema.V2MarketplaceRemoveParams","CodexSchema.V2MarketplaceUpgradeParams","CodexSchema.V2PluginListParams","CodexSchema.V2PluginInstalledParams","CodexSchema.V2PluginReadParams","CodexSchema.V2PluginSkillReadParams","CodexSchema.V2PluginShareSaveParams","CodexSchema.V2PluginShareUpdateTargetsParams","CodexSchema.V2PluginShareListParams","CodexSchema.V2PluginShareCheckoutParams","CodexSchema.V2PluginShareDeleteParams","CodexSchema.V2AppsListParams","CodexSchema.V2FsReadFileParams","CodexSchema.V2FsWriteFileParams","CodexSchema.V2FsCreateDirectoryParams","CodexSchema.V2FsGetMetadataParams","CodexSchema.V2FsReadDirectoryParams","CodexSchema.V2FsRemoveParams","CodexSchema.V2FsCopyParams","CodexSchema.V2FsWatchParams","CodexSchema.V2FsUnwatchParams","CodexSchema.V2SkillsConfigWriteParams","CodexSchema.V2PluginInstallParams","CodexSchema.V2PluginUninstallParams","CodexSchema.V2TurnStartParams","CodexSchema.V2TurnSteerParams","CodexSchema.V2TurnInterruptParams","CodexSchema.V2ReviewStartParams","CodexSchema.V2ModelListParams","CodexSchema.V2ModelProviderCapabilitiesReadParams","CodexSchema.V2ExperimentalFeatureListParams","CodexSchema.V2PermissionProfileListParams","CodexSchema.V2ExperimentalFeatureEnablementSetParams","CodexSchema.V2McpServerOauthLoginParams","CodexSchema.V2ListMcpServerStatusParams","CodexSchema.V2McpResourceReadParams","CodexSchema.V2McpServerToolCallParams","CodexSchema.V2WindowsSandboxSetupStartParams","CodexSchema.V2LoginAccountParams","CodexSchema.V2CancelLoginAccountParams","CodexSchema.V2SendAddCreditsNudgeEmailParams","CodexSchema.V2FeedbackUploadParams","CodexSchema.V2CommandExecParams","CodexSchema.V2CommandExecWriteParams","CodexSchema.V2CommandExecTerminateParams","CodexSchema.V2CommandExecResizeParams","CodexSchema.V2ConfigReadParams","CodexSchema.V2ExternalAgentConfigDetectParams","CodexSchema.V2ExternalAgentConfigImportParams","CodexSchema.V2ConfigValueWriteParams","CodexSchema.V2ConfigBatchWriteParams","CodexSchema.V2GetAccountParams","CodexSchema.GetConversationSummaryParams","CodexSchema.GitDiffToRemoteParams","CodexSchema.GetAuthStatusParams","CodexSchema.FuzzyFileSearchParams","CodexSchema.V1InitializeResponse","CodexSchema.V2ThreadStartResponse","CodexSchema.V2ThreadResumeResponse","CodexSchema.V2ThreadForkResponse","CodexSchema.V2ThreadArchiveResponse","CodexSchema.V2ThreadDeleteResponse","CodexSchema.V2ThreadUnsubscribeResponse","CodexSchema.V2ThreadSetNameResponse","CodexSchema.V2ThreadGoalSetResponse","CodexSchema.V2ThreadGoalGetResponse","CodexSchema.V2ThreadGoalClearResponse","CodexSchema.V2ThreadMetadataUpdateResponse","CodexSchema.V2ThreadUnarchiveResponse","CodexSchema.V2ThreadCompactStartResponse","CodexSchema.V2ThreadShellCommandResponse","CodexSchema.V2ThreadApproveGuardianDeniedActionResponse","CodexSchema.V2ThreadRollbackResponse","CodexSchema.V2ThreadListResponse","CodexSchema.V2ThreadLoadedListResponse","CodexSchema.V2ThreadReadResponse","CodexSchema.V2ThreadInjectItemsResponse","CodexSchema.V2SkillsListResponse","CodexSchema.V2SkillsExtraRootsSetResponse","CodexSchema.V2HooksListResponse","CodexSchema.V2MarketplaceAddResponse","CodexSchema.V2MarketplaceRemoveResponse","CodexSchema.V2MarketplaceUpgradeResponse","CodexSchema.V2PluginListResponse","CodexSchema.V2PluginInstalledResponse","CodexSchema.V2PluginReadResponse","CodexSchema.V2PluginSkillReadResponse","CodexSchema.V2PluginShareSaveResponse","CodexSchema.V2PluginShareUpdateTargetsResponse","CodexSchema.V2PluginShareListResponse","CodexSchema.V2PluginShareCheckoutResponse","CodexSchema.V2PluginShareDeleteResponse","CodexSchema.V2AppsListResponse","CodexSchema.V2FsReadFileResponse","CodexSchema.V2FsWriteFileResponse","CodexSchema.V2FsCreateDirectoryResponse","CodexSchema.V2FsGetMetadataResponse","CodexSchema.V2FsReadDirectoryResponse","CodexSchema.V2FsRemoveResponse","CodexSchema.V2FsCopyResponse","CodexSchema.V2FsWatchResponse","CodexSchema.V2FsUnwatchResponse","CodexSchema.V2SkillsConfigWriteResponse","CodexSchema.V2PluginInstallResponse","CodexSchema.V2PluginUninstallResponse","CodexSchema.V2TurnStartResponse","CodexSchema.V2TurnSteerResponse","CodexSchema.V2TurnInterruptResponse","CodexSchema.V2ReviewStartResponse","CodexSchema.V2ModelListResponse","CodexSchema.V2ModelProviderCapabilitiesReadResponse","CodexSchema.V2ExperimentalFeatureListResponse","CodexSchema.V2PermissionProfileListResponse","CodexSchema.V2ExperimentalFeatureEnablementSetResponse","CodexSchema.V2McpServerOauthLoginResponse","CodexSchema.V2McpServerRefreshResponse","CodexSchema.V2ListMcpServerStatusResponse","CodexSchema.V2McpResourceReadResponse","CodexSchema.V2McpServerToolCallResponse","CodexSchema.V2WindowsSandboxSetupStartResponse","CodexSchema.V2WindowsSandboxReadinessResponse","CodexSchema.V2LoginAccountResponse","CodexSchema.V2CancelLoginAccountResponse","CodexSchema.V2LogoutAccountResponse","CodexSchema.V2GetAccountRateLimitsResponse","CodexSchema.V2GetAccountTokenUsageResponse","CodexSchema.V2SendAddCreditsNudgeEmailResponse","CodexSchema.V2FeedbackUploadResponse","CodexSchema.V2CommandExecResponse","CodexSchema.V2CommandExecWriteResponse","CodexSchema.V2CommandExecTerminateResponse","CodexSchema.V2CommandExecResizeResponse","CodexSchema.V2ConfigReadResponse","CodexSchema.V2ExternalAgentConfigDetectResponse","CodexSchema.V2ExternalAgentConfigImportResponse","CodexSchema.V2ConfigWriteResponse","CodexSchema.V2ConfigRequirementsReadResponse","CodexSchema.V2GetAccountResponse","CodexSchema.GetConversationSummaryResponse","CodexSchema.GitDiffToRemoteResponse","CodexSchema.GetAuthStatusResponse","CodexSchema.FuzzyFileSearchResponse","CodexSchema.CommandExecutionRequestApprovalParams","CodexSchema.FileChangeRequestApprovalParams","CodexSchema.ToolRequestUserInputParams","CodexSchema.McpServerElicitationRequestParams","CodexSchema.PermissionsRequestApprovalParams","CodexSchema.DynamicToolCallParams","CodexSchema.ChatgptAuthTokensRefreshParams","CodexSchema.AttestationGenerateParams","CodexSchema.ApplyPatchApprovalParams","CodexSchema.ExecCommandApprovalParams","CodexSchema.CommandExecutionRequestApprovalResponse","CodexSchema.FileChangeRequestApprovalResponse","CodexSchema.ToolRequestUserInputResponse","CodexSchema.McpServerElicitationRequestResponse","CodexSchema.PermissionsRequestApprovalResponse","CodexSchema.DynamicToolCallResponse","CodexSchema.ChatgptAuthTokensRefreshResponse","CodexSchema.AttestationGenerateResponse","CodexSchema.ApplyPatchApprovalResponse","CodexSchema.ExecCommandApprovalResponse","CodexSchema.V2ErrorNotification","CodexSchema.V2ThreadStartedNotification","CodexSchema.V2ThreadStatusChangedNotification","CodexSchema.V2ThreadArchivedNotification","CodexSchema.V2ThreadDeletedNotification","CodexSchema.V2ThreadUnarchivedNotification","CodexSchema.V2ThreadClosedNotification","CodexSchema.V2SkillsChangedNotification","CodexSchema.V2ThreadNameUpdatedNotification","CodexSchema.V2ThreadGoalUpdatedNotification","CodexSchema.V2ThreadGoalClearedNotification","CodexSchema.V2ThreadSettingsUpdatedNotification","CodexSchema.V2ThreadTokenUsageUpdatedNotification","CodexSchema.V2TurnStartedNotification","CodexSchema.V2HookStartedNotification","CodexSchema.V2TurnCompletedNotification","CodexSchema.V2HookCompletedNotification","CodexSchema.V2TurnDiffUpdatedNotification","CodexSchema.V2TurnPlanUpdatedNotification","CodexSchema.V2ItemStartedNotification","CodexSchema.V2ItemGuardianApprovalReviewStartedNotification","CodexSchema.V2ItemGuardianApprovalReviewCompletedNotification","CodexSchema.V2ItemCompletedNotification","CodexSchema.V2RawResponseItemCompletedNotification","CodexSchema.V2AgentMessageDeltaNotification","CodexSchema.V2PlanDeltaNotification","CodexSchema.V2CommandExecOutputDeltaNotification","CodexSchema.V2ProcessOutputDeltaNotification","CodexSchema.V2ProcessExitedNotification","CodexSchema.V2CommandExecutionOutputDeltaNotification","CodexSchema.V2TerminalInteractionNotification","CodexSchema.V2FileChangeOutputDeltaNotification","CodexSchema.V2FileChangePatchUpdatedNotification","CodexSchema.V2ServerRequestResolvedNotification","CodexSchema.V2McpToolCallProgressNotification","CodexSchema.V2McpServerOauthLoginCompletedNotification","CodexSchema.V2McpServerStatusUpdatedNotification","CodexSchema.V2AccountUpdatedNotification","CodexSchema.V2AccountRateLimitsUpdatedNotification","CodexSchema.V2AppListUpdatedNotification","CodexSchema.V2RemoteControlStatusChangedNotification","CodexSchema.V2ExternalAgentConfigImportCompletedNotification","CodexSchema.V2FsChangedNotification","CodexSchema.V2ReasoningSummaryTextDeltaNotification","CodexSchema.V2ReasoningSummaryPartAddedNotification","CodexSchema.V2ReasoningTextDeltaNotification","CodexSchema.V2ContextCompactedNotification","CodexSchema.V2ModelReroutedNotification","CodexSchema.V2ModelVerificationNotification","CodexSchema.V2TurnModerationMetadataNotification","CodexSchema.V2WarningNotification","CodexSchema.V2GuardianWarningNotification","CodexSchema.V2DeprecationNoticeNotification","CodexSchema.V2ConfigWarningNotification","CodexSchema.FuzzyFileSearchSessionUpdatedNotification","CodexSchema.FuzzyFileSearchSessionCompletedNotification","CodexSchema.V2ThreadRealtimeStartedNotification","CodexSchema.V2ThreadRealtimeItemAddedNotification","CodexSchema.V2ThreadRealtimeTranscriptDeltaNotification","CodexSchema.V2ThreadRealtimeTranscriptDoneNotification","CodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification","CodexSchema.V2ThreadRealtimeSdpNotification","CodexSchema.V2ThreadRealtimeErrorNotification","CodexSchema.V2ThreadRealtimeClosedNotification","CodexSchema.V2WindowsWorldWritableWarningNotification","CodexSchema.V2WindowsSandboxSetupCompletedNotification","CodexSchema.V2AccountLoginCompletedNotification","normalizeToRequestError","formatSchemaIssue","JsonRpcId","CodexError.CodexAppServerProtocolParseError","runHandler","CodexError.normalizeToRequestError","JsonRpcId","CodexError.CodexAppServerError","CodexError.CodexAppServerProtocolParseError","CodexError.CodexAppServerTransportError","CodexError.normalizeToRequestError","encoder","makeChildStdio","makeInMemoryStdio","makeTerminationError","CodexError.CodexAppServerTransportError","CodexError.CodexAppServerProcessExitedError","make","CodexRpc.SERVER_REQUEST_PARAMS","CodexRpc.SERVER_REQUEST_RESPONSES","CodexRpc.CLIENT_REQUEST_PARAMS","CodexRpc.CLIENT_REQUEST_RESPONSES","CodexRpc.CLIENT_NOTIFICATION_PARAMS","CodexRpc.SERVER_NOTIFICATION_PARAMS","runHandler","CodexProtocol.makeCodexAppServerPatchedProtocol","layerChildProcess","makeChildStdio","makeTerminationError","CodexSchema.V1InitializeParams","CodexSchema.V1InitializeResponse","CodexSchema.V2AccountLoginCompletedNotification","CodexSchema.V2AccountRateLimitsUpdatedNotification","CodexSchema.V2AccountUpdatedNotification","CodexSchema.V2AgentMessageDeltaNotification","CodexSchema.V2AppListUpdatedNotification","CodexSchema.V2AppsListParams","CodexSchema.V2AppsListResponse","CodexSchema.V2CancelLoginAccountParams","CodexSchema.V2CancelLoginAccountResponse","CodexSchema.V2CommandExecOutputDeltaNotification","CodexSchema.V2CommandExecParams","CodexSchema.V2CommandExecResizeParams","CodexSchema.V2CommandExecResizeResponse","CodexSchema.V2CommandExecResponse","CodexSchema.V2CommandExecTerminateParams","CodexSchema.V2CommandExecTerminateResponse","CodexSchema.V2CommandExecutionOutputDeltaNotification","CodexSchema.V2CommandExecWriteParams","CodexSchema.V2CommandExecWriteResponse","CodexSchema.V2ConfigBatchWriteParams","CodexSchema.V2ConfigReadParams","CodexSchema.V2ConfigReadResponse","CodexSchema.V2ConfigRequirementsReadResponse","CodexSchema.V2ConfigValueWriteParams","CodexSchema.V2ConfigWarningNotification","CodexSchema.V2ConfigWriteResponse","CodexSchema.V2ContextCompactedNotification","CodexSchema.V2DeprecationNoticeNotification","CodexSchema.V2ErrorNotification","CodexSchema.V2ExperimentalFeatureEnablementSetParams","CodexSchema.V2ExperimentalFeatureEnablementSetResponse","CodexSchema.V2ExperimentalFeatureListParams","CodexSchema.V2ExperimentalFeatureListResponse","CodexSchema.V2ExternalAgentConfigDetectParams","CodexSchema.V2ExternalAgentConfigDetectResponse","CodexSchema.V2ExternalAgentConfigImportCompletedNotification","CodexSchema.V2ExternalAgentConfigImportParams","CodexSchema.V2ExternalAgentConfigImportResponse","CodexSchema.V2FeedbackUploadParams","CodexSchema.V2FeedbackUploadResponse","CodexSchema.V2FileChangeOutputDeltaNotification","CodexSchema.V2FileChangePatchUpdatedNotification","CodexSchema.V2FsChangedNotification","CodexSchema.V2FsCopyParams","CodexSchema.V2FsCopyResponse","CodexSchema.V2FsCreateDirectoryParams","CodexSchema.V2FsCreateDirectoryResponse","CodexSchema.V2FsGetMetadataParams","CodexSchema.V2FsGetMetadataResponse","CodexSchema.V2FsReadDirectoryParams","CodexSchema.V2FsReadDirectoryResponse","CodexSchema.V2FsReadFileParams","CodexSchema.V2FsReadFileResponse","CodexSchema.V2FsRemoveParams","CodexSchema.V2FsRemoveResponse","CodexSchema.V2FsUnwatchParams","CodexSchema.V2FsUnwatchResponse","CodexSchema.V2FsWatchParams","CodexSchema.V2FsWatchResponse","CodexSchema.V2FsWriteFileParams","CodexSchema.V2FsWriteFileResponse","CodexSchema.V2GetAccountParams","CodexSchema.V2GetAccountRateLimitsResponse","CodexSchema.V2GetAccountResponse","CodexSchema.V2GetAccountTokenUsageResponse","CodexSchema.V2GuardianWarningNotification","CodexSchema.V2HookCompletedNotification","CodexSchema.V2HooksListParams","CodexSchema.V2HooksListResponse","CodexSchema.V2HookStartedNotification","CodexSchema.V2ItemCompletedNotification","CodexSchema.V2ItemGuardianApprovalReviewCompletedNotification","CodexSchema.V2ItemGuardianApprovalReviewStartedNotification","CodexSchema.V2ItemStartedNotification","CodexSchema.V2ListMcpServerStatusParams","CodexSchema.V2ListMcpServerStatusResponse","CodexSchema.V2LoginAccountParams","CodexSchema.V2LoginAccountResponse","CodexSchema.V2LogoutAccountResponse","CodexSchema.V2MarketplaceAddParams","CodexSchema.V2MarketplaceAddResponse","CodexSchema.V2MarketplaceRemoveParams","CodexSchema.V2MarketplaceRemoveResponse","CodexSchema.V2MarketplaceUpgradeParams","CodexSchema.V2MarketplaceUpgradeResponse","CodexSchema.V2McpResourceReadParams","CodexSchema.V2McpResourceReadResponse","CodexSchema.V2McpServerOauthLoginCompletedNotification","CodexSchema.V2McpServerOauthLoginParams","CodexSchema.V2McpServerOauthLoginResponse","CodexSchema.V2McpServerRefreshResponse","CodexSchema.V2McpServerStatusUpdatedNotification","CodexSchema.V2McpServerToolCallParams","CodexSchema.V2McpServerToolCallResponse","CodexSchema.V2McpToolCallProgressNotification","CodexSchema.V2ModelListParams","CodexSchema.V2ModelListResponse","CodexSchema.V2ModelProviderCapabilitiesReadParams","CodexSchema.V2ModelProviderCapabilitiesReadResponse","CodexSchema.V2ModelReroutedNotification","CodexSchema.V2ModelVerificationNotification","CodexSchema.V2PermissionProfileListParams","CodexSchema.V2PermissionProfileListResponse","CodexSchema.V2PlanDeltaNotification","CodexSchema.V2PluginInstalledParams","CodexSchema.V2PluginInstalledResponse","CodexSchema.V2PluginInstallParams","CodexSchema.V2PluginInstallResponse","CodexSchema.V2PluginListParams","CodexSchema.V2PluginListResponse","CodexSchema.V2PluginReadParams","CodexSchema.V2PluginReadResponse","CodexSchema.V2PluginShareCheckoutParams","CodexSchema.V2PluginShareCheckoutResponse","CodexSchema.V2PluginShareDeleteParams","CodexSchema.V2PluginShareDeleteResponse","CodexSchema.V2PluginShareListParams","CodexSchema.V2PluginShareListResponse","CodexSchema.V2PluginShareSaveParams","CodexSchema.V2PluginShareSaveResponse","CodexSchema.V2PluginShareUpdateTargetsParams","CodexSchema.V2PluginShareUpdateTargetsResponse","CodexSchema.V2PluginSkillReadParams","CodexSchema.V2PluginSkillReadResponse","CodexSchema.V2PluginUninstallParams","CodexSchema.V2PluginUninstallResponse","CodexSchema.V2ProcessExitedNotification","CodexSchema.V2ProcessOutputDeltaNotification","CodexSchema.V2RawResponseItemCompletedNotification","CodexSchema.V2ReasoningSummaryPartAddedNotification","CodexSchema.V2ReasoningSummaryTextDeltaNotification","CodexSchema.V2ReasoningTextDeltaNotification","CodexSchema.V2RemoteControlStatusChangedNotification","CodexSchema.V2ReviewStartParams","CodexSchema.V2ReviewStartResponse","CodexSchema.V2SendAddCreditsNudgeEmailParams","CodexSchema.V2SendAddCreditsNudgeEmailResponse","CodexSchema.V2ServerRequestResolvedNotification","CodexSchema.V2SkillsChangedNotification","CodexSchema.V2SkillsConfigWriteParams","CodexSchema.V2SkillsConfigWriteResponse","CodexSchema.V2SkillsExtraRootsSetParams","CodexSchema.V2SkillsExtraRootsSetResponse","CodexSchema.V2SkillsListParams","CodexSchema.V2SkillsListResponse","CodexSchema.V2TerminalInteractionNotification","CodexSchema.V2ThreadApproveGuardianDeniedActionParams","CodexSchema.V2ThreadApproveGuardianDeniedActionResponse","CodexSchema.V2ThreadArchivedNotification","CodexSchema.V2ThreadArchiveParams","CodexSchema.V2ThreadArchiveResponse","CodexSchema.V2ThreadClosedNotification","CodexSchema.V2ThreadCompactStartParams","CodexSchema.V2ThreadCompactStartResponse","CodexSchema.V2ThreadDeletedNotification","CodexSchema.V2ThreadDeleteParams","CodexSchema.V2ThreadDeleteResponse","CodexSchema.V2ThreadForkParams","CodexSchema.V2ThreadForkResponse","CodexSchema.V2ThreadGoalClearedNotification","CodexSchema.V2ThreadGoalClearParams","CodexSchema.V2ThreadGoalClearResponse","CodexSchema.V2ThreadGoalGetParams","CodexSchema.V2ThreadGoalGetResponse","CodexSchema.V2ThreadGoalSetParams","CodexSchema.V2ThreadGoalSetResponse","CodexSchema.V2ThreadGoalUpdatedNotification","CodexSchema.V2ThreadInjectItemsParams","CodexSchema.V2ThreadInjectItemsResponse","CodexSchema.V2ThreadListParams","CodexSchema.V2ThreadListResponse","CodexSchema.V2ThreadLoadedListParams","CodexSchema.V2ThreadLoadedListResponse","CodexSchema.V2ThreadMetadataUpdateParams","CodexSchema.V2ThreadMetadataUpdateResponse","CodexSchema.V2ThreadNameUpdatedNotification","CodexSchema.V2ThreadReadParams","CodexSchema.V2ThreadReadResponse","CodexSchema.V2ThreadRealtimeClosedNotification","CodexSchema.V2ThreadRealtimeErrorNotification","CodexSchema.V2ThreadRealtimeItemAddedNotification","CodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification","CodexSchema.V2ThreadRealtimeSdpNotification","CodexSchema.V2ThreadRealtimeStartedNotification","CodexSchema.V2ThreadRealtimeTranscriptDeltaNotification","CodexSchema.V2ThreadRealtimeTranscriptDoneNotification","CodexSchema.V2ThreadResumeParams","CodexSchema.V2ThreadResumeResponse","CodexSchema.V2ThreadRollbackParams","CodexSchema.V2ThreadRollbackResponse","CodexSchema.V2ThreadSetNameParams","CodexSchema.V2ThreadSetNameResponse","CodexSchema.V2ThreadSettingsUpdatedNotification","CodexSchema.V2ThreadShellCommandParams","CodexSchema.V2ThreadShellCommandResponse","CodexSchema.V2ThreadStartedNotification","CodexSchema.V2ThreadStartParams","CodexSchema.V2ThreadStartResponse","CodexSchema.V2ThreadStatusChangedNotification","CodexSchema.V2ThreadTokenUsageUpdatedNotification","CodexSchema.V2ThreadUnarchivedNotification","CodexSchema.V2ThreadUnarchiveParams","CodexSchema.V2ThreadUnarchiveResponse","CodexSchema.V2ThreadUnsubscribeParams","CodexSchema.V2ThreadUnsubscribeResponse","CodexSchema.V2TurnCompletedNotification","CodexSchema.V2TurnDiffUpdatedNotification","CodexSchema.V2TurnInterruptParams","CodexSchema.V2TurnInterruptResponse","CodexSchema.V2TurnModerationMetadataNotification","CodexSchema.V2TurnPlanUpdatedNotification","CodexSchema.V2TurnStartedNotification","CodexSchema.V2TurnStartParams","CodexSchema.V2TurnStartResponse","CodexSchema.V2TurnSteerParams","CodexSchema.V2TurnSteerResponse","CodexSchema.V2WarningNotification","CodexSchema.V2WindowsSandboxReadinessResponse","CodexSchema.V2WindowsSandboxSetupCompletedNotification","CodexSchema.V2WindowsSandboxSetupStartParams","CodexSchema.V2WindowsSandboxSetupStartResponse","CodexSchema.V2WindowsWorldWritableWarningNotification","CodexErrors.CodexAppServerSpawnError","packageJson.version","expandHomePath","CodexClient.layerChildProcess","CodexClient.CodexAppServerClient","isRecord","readString","EffectCodexSchema.V2TurnStartResponse","EffectCodexSchema.V2TurnSteerParams","EffectCodexSchema.V2TurnSteerResponse","EffectCodexSchema.V2ThreadStartResponse","PROVIDER","isCodexResumeCursorSchema","EffectCodexSchema.V2TurnStartParams__CollaborationMode","formatSchemaIssue","CodexErrors.CodexAppServerProtocolParseError","expandHomePath","CodexErrors.CodexAppServerSpawnError","CodexClient.layerChildProcess","CodexClient.CodexAppServerClient","Crypto","CodexErrors.CodexAppServerTransportError","CodexRpc.SERVER_NOTIFICATION_METHODS","CodexErrors.CodexAppServerProcessExitedError","CodexErrors.CodexAppServerTransportError","PROVIDER","isRecord","EffectCodexSchema.V2ItemStartedNotification","EffectCodexSchema.V2ItemCompletedNotification","EffectCodexSchema.ServerRequest__ToolRequestUserInputParams","EffectCodexSchema.ToolRequestUserInputParams","EffectCodexSchema.ServerRequest__CommandExecutionRequestApprovalParams","EffectCodexSchema.ServerRequest__FileChangeRequestApprovalParams","EffectCodexSchema.ServerRequest__ApplyPatchApprovalParams","EffectCodexSchema.ServerRequest__ExecCommandApprovalParams","EffectCodexSchema.ServerRequest__DynamicToolCallParams","EffectCodexSchema.V2ThreadStartedNotification","EffectCodexSchema.V2ThreadStatusChangedNotification","EffectCodexSchema.V2ThreadNameUpdatedNotification","EffectCodexSchema.V2ThreadTokenUsageUpdatedNotification","EffectCodexSchema.V2TurnCompletedNotification","EffectCodexSchema.V2TurnPlanUpdatedNotification","EffectCodexSchema.V2TurnDiffUpdatedNotification","EffectCodexSchema.V2RawResponseItemCompletedNotification","EffectCodexSchema.V2PlanDeltaNotification","EffectCodexSchema.V2AgentMessageDeltaNotification","EffectCodexSchema.V2CommandExecutionOutputDeltaNotification","EffectCodexSchema.V2FileChangeOutputDeltaNotification","EffectCodexSchema.V2ReasoningSummaryTextDeltaNotification","EffectCodexSchema.V2ReasoningTextDeltaNotification","EffectCodexSchema.V2McpToolCallProgressNotification","EffectCodexSchema.V2ServerRequestResolvedNotification","EffectCodexSchema.ToolRequestUserInputResponse","EffectCodexSchema.V2ModelReroutedNotification","EffectCodexSchema.V2DeprecationNoticeNotification","EffectCodexSchema.V2ConfigWarningNotification","EffectCodexSchema.V2AccountUpdatedNotification","EffectCodexSchema.V2AccountRateLimitsUpdatedNotification","EffectCodexSchema.V2McpServerOauthLoginCompletedNotification","EffectCodexSchema.V2ThreadRealtimeStartedNotification","EffectCodexSchema.V2ThreadRealtimeItemAddedNotification","EffectCodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification","EffectCodexSchema.V2ThreadRealtimeErrorNotification","EffectCodexSchema.V2ThreadRealtimeClosedNotification","EffectCodexSchema.V2ErrorNotification","EffectCodexSchema.V2WindowsWorldWritableWarningNotification","EffectCodexSchema.V2WindowsSandboxSetupCompletedNotification","Crypto","expandHomePath","DRIVER_KIND","SNAPSHOT_REFRESH_INTERVAL","UPDATE","withInstanceIdentity","Error","AcpSchema.SessionConfigOption","AcpSchema.ErrorCode","AcpError.AcpError","isAcpRequestError","AcpError.AcpRequestError","AcpSchema.SessionNotification","AcpSchema.ElicitationCompleteNotification","RpcSerialization","AcpError.AcpProtocolParseError","AcpError.AcpTransportError","RpcServer","AcpSchema.InitializeRequest","AcpSchema.InitializeResponse","AcpSchema.Error","AcpSchema.AuthenticateRequest","AcpSchema.AuthenticateResponse","AcpSchema.LogoutRequest","AcpSchema.LogoutResponse","AcpSchema.NewSessionRequest","AcpSchema.NewSessionResponse","AcpSchema.LoadSessionRequest","AcpSchema.LoadSessionResponse","AcpSchema.ListSessionsRequest","AcpSchema.ListSessionsResponse","AcpSchema.ForkSessionRequest","AcpSchema.ForkSessionResponse","AcpSchema.ResumeSessionRequest","AcpSchema.ResumeSessionResponse","AcpSchema.CloseSessionRequest","AcpSchema.CloseSessionResponse","AcpSchema.PromptRequest","AcpSchema.PromptResponse","AcpSchema.SetSessionModelRequest","AcpSchema.SetSessionModelResponse","AcpSchema.SetSessionConfigOptionRequest","AcpSchema.SetSessionConfigOptionResponse","AcpSchema.ReadTextFileRequest","AcpSchema.ReadTextFileResponse","AcpSchema.WriteTextFileRequest","AcpSchema.WriteTextFileResponse","AcpSchema.RequestPermissionRequest","AcpSchema.RequestPermissionResponse","AcpSchema.ElicitationRequest","AcpSchema.ElicitationResponse","AcpSchema.CreateTerminalRequest","AcpSchema.CreateTerminalResponse","AcpSchema.TerminalOutputRequest","AcpSchema.TerminalOutputResponse","AcpSchema.ReleaseTerminalRequest","AcpSchema.ReleaseTerminalResponse","AcpSchema.WaitForTerminalExitRequest","AcpSchema.WaitForTerminalExitResponse","AcpSchema.KillTerminalRequest","AcpSchema.KillTerminalResponse","AcpSchema.Error","isAcpRequestError","AcpError.AcpRequestError","AcpError.AcpTransportError","AcpError.AcpProtocolParseError","encoder","AcpError.AcpTransportError","AcpError.AcpProcessExitedError","make","AcpProtocol.makeAcpPatchedProtocol","RpcServer","AcpRpcs.ClientRpcs","AcpRpcs.AgentRpcs","asRecord","asTrimmedString","normalizeCommandValue","extractCommandFromTitle","isRecord","canonicalItemTypeFromAcpToolKind","EffectAcpErrors.AcpSpawnError","EffectAcpClient.layerChildProcess","EffectAcpClient.AcpClient","EffectAcpErrors.AcpTransportError","EffectAcpErrors.AcpRequestError","PROVIDER","EMPTY_CAPABILITIES","NodeOs","isTextGenerationError","EffectAcpErrors.AcpProcessExitedError","EffectAcpErrors.AcpRequestError","isRecord","Crypto","encodeUnknownJsonStringExit","PROVIDER","encodeJsonStringForDiagnostics","settlePendingApprovalsAsCancelled","isRecord","selectAutoApprovedPermissionOption","Crypto","EffectAcpErrors.AcpTransportError","DRIVER_KIND","SNAPSHOT_REFRESH_INTERVAL","UPDATE","withInstanceIdentity","PROVIDER","Crypto","EffectAcpErrors.AcpTransportError","PROVIDER","spawnChildProcess","DRIVER_KIND","SNAPSHOT_REFRESH_INTERVAL","UPDATE","withInstanceIdentity","PROVIDER","nowIso","Crypto","nowIso","nowIso","ProcessRunner.ProcessRunner","ProcessRunner.layer","toTurnId","sameId","isRecord","make","Crypto","nowIso","make","Crypto","make","Crypto","ServerProviderSchema","mergeProviderModels","OS","OS","Crypto","packageJson.version","ProcessRunnerLive","HttpServerRequest","path","NetService.NetService","SqlitePersistenceLayerLive","VcsProjectConfig.layer","AzureDevOpsCli.layer","BitbucketApi.layer","GitHubCli.layer","GitLabCli.layer","GitVcsDriver.layer","TextGeneration.layer","ProcessDiagnostics.layer","ProcessResourceMonitor.layer","TraceDiagnostics.layer","ExternalLauncher.layer","NetService.layer","VcsProcess.layer","NetService.layer","packageJson.version"],"sources":["../../../packages/shared/src/Net.ts","../package.json","../../../packages/contracts/src/baseSchemas.ts","../../../packages/contracts/src/auth.ts","../../../packages/contracts/src/environment.ts","../../../packages/contracts/src/providerInstance.ts","../../../packages/contracts/src/model.ts","../../../packages/contracts/src/orchestration.ts","../../../packages/contracts/src/environmentHttp.ts","../../../packages/contracts/src/desktopBootstrap.ts","../../../packages/contracts/src/remoteAccess.ts","../../../packages/contracts/src/editor.ts","../../../packages/contracts/src/ipc.ts","../../../packages/contracts/src/terminal.ts","../../../packages/contracts/src/transcription.ts","../../../packages/contracts/src/provider.ts","../../../packages/contracts/src/providerRuntime.ts","../../../packages/contracts/src/keybindings.ts","../../../packages/contracts/src/settings.ts","../../../packages/contracts/src/server.ts","../../../packages/contracts/src/push.ts","../../../packages/contracts/src/vcs.ts","../../../packages/contracts/src/sourceControl.ts","../../../packages/contracts/src/git.ts","../../../packages/contracts/src/theme.ts","../../../packages/contracts/src/project.ts","../../../packages/contracts/src/filesystem.ts","../../../packages/contracts/src/rpc.ts","../src/config.ts","../src/persistence/Errors.ts","../src/persistence/Services/AuthPairingLinks.ts","../src/persistence/Layers/AuthPairingLinks.ts","../src/auth/Services/BootstrapCredentialService.ts","../src/auth/Layers/BootstrapCredentialService.ts","../src/auth/Services/ServerSecretStore.ts","../src/auth/Layers/ServerSecretStore.ts","../src/persistence/Services/AuthSessions.ts","../src/persistence/Layers/AuthSessions.ts","../src/auth/Services/SessionCredentialService.ts","../src/auth/utils.ts","../src/auth/Layers/SessionCredentialService.ts","../src/persistence/Migrations/001_OrchestrationEvents.ts","../src/persistence/Migrations/002_OrchestrationCommandReceipts.ts","../src/persistence/Migrations/003_CheckpointDiffBlobs.ts","../src/persistence/Migrations/004_ProviderSessionRuntime.ts","../src/persistence/Migrations/005_Projections.ts","../src/persistence/Migrations/006_ProjectionThreadSessionRuntimeModeColumns.ts","../src/persistence/Migrations/007_ProjectionThreadMessageAttachments.ts","../src/persistence/Migrations/008_ProjectionThreadActivitySequence.ts","../src/persistence/Migrations/009_ProviderSessionRuntimeMode.ts","../src/persistence/Migrations/010_ProjectionThreadsRuntimeMode.ts","../src/persistence/Migrations/011_OrchestrationThreadCreatedRuntimeMode.ts","../src/persistence/Migrations/012_ProjectionThreadsInteractionMode.ts","../src/persistence/Migrations/013_ProjectionThreadProposedPlans.ts","../src/persistence/Migrations/014_ProjectionThreadProposedPlanImplementation.ts","../src/persistence/Migrations/015_ProjectionTurnsSourceProposedPlan.ts","../src/persistence/Migrations/016_CanonicalizeModelSelections.ts","../src/persistence/Migrations/017_ProjectionThreadsArchivedAt.ts","../src/persistence/Migrations/018_ProjectionThreadsArchivedAtIndex.ts","../src/persistence/Migrations/019_ProjectionSnapshotLookupIndexes.ts","../src/persistence/Migrations/020_AuthAccessManagement.ts","../src/persistence/Migrations/021_AuthSessionClientMetadata.ts","../src/persistence/Migrations/022_AuthSessionLastConnectedAt.ts","../src/persistence/Migrations/023_ProjectionThreadShellSummary.ts","../src/persistence/Migrations/024_BackfillProjectionThreadShellSummary.ts","../src/persistence/Migrations/025_CleanupInvalidProjectionPendingApprovals.ts","../src/persistence/Migrations/026_CanonicalizeModelSelectionOptions.ts","../src/persistence/Migrations/027_ProviderSessionRuntimeInstanceId.ts","../src/persistence/Migrations/028_ProjectionThreadSessionInstanceId.ts","../src/persistence/Migrations/029_ProjectionThreadDetailOrderingIndexes.ts","../src/persistence/Migrations/030_ProjectionThreadShellArchiveIndexes.ts","../src/persistence/Migrations/031_WebPushSubscriptions.ts","../src/persistence/Migrations/032_ProjectionThreadQueuedTurns.ts","../src/persistence/Migrations/033_StripImageViewActivityResults.ts","../src/persistence/Migrations/034_CanonicalizeQueuedMessageDispatchTimes.ts","../src/persistence/Migrations/035_CheckpointTurnFileSnapshots.ts","../src/persistence/Migrations/036_ProjectionThreadSubagents.ts","../src/persistence/Migrations/037_ProjectionThreadCreatedBy.ts","../src/persistence/Migrations/038_RestoreAssistantMessageTurnIds.ts","../src/persistence/Migrations/039_ProjectionQueuedTurnSteering.ts","../src/persistence/Migrations/040_ProjectionThreadActivityOrderingExpressionIndex.ts","../src/persistence/Migrations/041_InheritUntouchedLegacyProjectModelDefaults.ts","../src/persistence/Migrations/042_ProjectionQueuedTurnRecoveryConfirmation.ts","../src/persistence/Migrations.ts","../src/persistence/Layers/Sqlite.ts","../src/auth/Services/AuthControlPlane.ts","../src/auth/Layers/AuthControlPlane.ts","../src/cliAuthFormat.ts","../../../packages/shared/src/Struct.ts","../../../packages/shared/src/schemaJson.ts","../../../packages/shared/src/model.ts","../../../packages/shared/src/serverSettings.ts","../src/bootstrap.ts","../src/legacyHomeMigration.ts","../src/legacyHomeMigrationProgress.ts","../../../packages/shared/src/shell.ts","../src/os-jank.ts","../src/cli/config.ts","../src/cli/auth.ts","../src/orchestration/Services/OrchestrationEngine.ts","../src/orchestration/Services/ProjectionSnapshotQuery.ts","../src/persistence/Services/OrchestrationCommandReceipts.ts","../src/persistence/Layers/OrchestrationCommandReceipts.ts","../src/persistence/Services/OrchestrationEventStore.ts","../src/persistence/Layers/OrchestrationEventStore.ts","../src/persistence/Services/TurnFileSnapshots.ts","../src/persistence/Layers/TurnFileSnapshots.ts","../src/observability/Attributes.ts","../src/observability/Metrics.ts","../src/orchestration/Errors.ts","../src/orchestration/commandInvariants.ts","../src/orchestration/Schemas.ts","../src/orchestration/projector.ts","../src/orchestration/decider.ts","../src/orchestration/Services/ProjectionPipeline.ts","../src/orchestration/Layers/OrchestrationEngine.ts","../src/persistence/Services/ProjectionPendingApprovals.ts","../src/persistence/Services/ProjectionProjects.ts","../src/persistence/Services/ProjectionState.ts","../src/persistence/Services/ProjectionThreadActivities.ts","../src/persistence/Services/ProjectionThreadMessages.ts","../src/persistence/Services/ProjectionThreadProposedPlans.ts","../src/persistence/Services/ProjectionThreadQueuedTurns.ts","../src/persistence/Services/ProjectionThreadSessions.ts","../src/persistence/Services/ProjectionTurns.ts","../src/persistence/Services/ProjectionThreads.ts","../src/persistence/Layers/ProjectionPendingApprovals.ts","../src/persistence/Layers/ProjectionProjects.ts","../src/persistence/Layers/ProjectionState.ts","../src/persistence/Layers/ProjectionThreadActivities.ts","../src/persistence/Layers/ProjectionThreadMessages.ts","../src/persistence/Layers/ProjectionThreadProposedPlans.ts","../src/persistence/Layers/ProjectionThreadQueuedTurns.ts","../src/persistence/Layers/ProjectionThreadSessions.ts","../src/persistence/Layers/ProjectionTurns.ts","../src/persistence/Layers/ProjectionThreads.ts","../src/attachmentPaths.ts","../../../packages/shared/src/imageMime.ts","../src/imageMime.ts","../src/attachmentStore.ts","../src/orchestration/Layers/ProjectionPipeline.ts","../src/persistence/Services/ProjectionCheckpoints.ts","../src/project/Services/RepositoryIdentityResolver.ts","../src/orchestration/Layers/ProjectionSnapshotQuery.ts","../src/orchestration/runtimeLayer.ts","../../../packages/shared/src/sourceControl.ts","../../../packages/shared/src/git.ts","../src/stream/collectUint8StreamText.ts","../src/processRunner.ts","../src/project/Layers/RepositoryIdentityResolver.ts","../src/atomicWrite.ts","../../../packages/shared/src/qrCode.ts","../../../packages/tailscale/src/tailscale.ts","../src/auth/Services/ServerAuth.ts","../src/startupAccess.ts","../src/serverRuntimeState.ts","../src/workspace/Services/WorkspacePaths.ts","../src/workspace/Layers/WorkspacePaths.ts","../src/cli/project.ts","../../../packages/shared/src/logging.ts","../../../packages/shared/src/observability.ts","../src/observability/Services/BrowserTraceCollector.ts","../src/project/Services/ProjectFaviconResolver.ts","../../../packages/shared/src/oauthScope.ts","../src/httpCors.ts","../src/auth/http.ts","../src/environment/Services/ServerEnvironment.ts","../../../packages/shared/src/videoMime.ts","../src/videoMime.ts","../src/http.ts","../../../packages/shared/src/orchestrationThreadDetailFingerprint.ts","../../../packages/shared/src/orchestrationThreadDetailEvents.ts","../src/checkpointing/Services/CheckpointDiffQuery.ts","../src/devServerReachability.ts","../../../packages/shared/src/themePreview.ts","../src/theme/openVsxProvider.ts","../../../packages/shared/src/keybindings.ts","../src/keybindings.ts","../src/process/externalLauncher.ts","../../../packages/shared/src/attachmentMime.ts","../src/orchestration/Normalizer.ts","../src/orchestration/ActivityPayloadProjection.ts","../src/observability/RpcInstrumentation.ts","../src/effect/logCauseUnlessInterrupted.ts","../src/provider/Services/ProviderRegistry.ts","../src/provider/Services/ProviderService.ts","../src/provider/providerMaintenanceCommandCoordinator.ts","../../../packages/shared/src/semver.ts","../src/provider/providerMaintenance.ts","../src/provider/providerMaintenanceRunner.ts","../src/serverLifecycleEvents.ts","../src/orchestration/Services/OrchestrationReactor.ts","../src/serverSettings.ts","../src/interactiveServerTerminal.ts","../src/telemetry/Services/AnalyticsService.ts","../src/provider/Services/ProviderSessionReaper.ts","../src/serverRuntimeStartup.ts","../src/terminal/Services/Manager.ts","../src/workspace/Services/WorkspaceEntries.ts","../src/workspace/Services/WorkspaceFileSystem.ts","../src/provider/Services/ProviderInstanceRegistry.ts","../src/textGeneration/TextGeneration.ts","../src/project/Services/ProjectSetupScriptRunner.ts","../src/git/remoteRefs.ts","../src/vcs/GitVcsDriverCore.ts","../src/vcs/VcsProcess.ts","../src/vcs/VcsDriver.ts","../src/vcs/GitVcsDriver.ts","../src/sourceControl/azureDevOpsPullRequests.ts","../src/sourceControl/SourceControlProvider.ts","../src/sourceControl/AzureDevOpsCli.ts","../src/sourceControl/SourceControlProviderDiscovery.ts","../src/sourceControl/AzureDevOpsSourceControlProvider.ts","../src/sourceControl/bitbucketPullRequests.ts","../src/vcs/VcsProjectConfig.ts","../src/vcs/VcsDriverRegistry.ts","../src/sourceControl/BitbucketApi.ts","../src/sourceControl/BitbucketSourceControlProvider.ts","../src/sourceControl/gitHubPullRequests.ts","../src/sourceControl/GitHubCli.ts","../src/sourceControl/gitHubAuthStatus.ts","../src/sourceControl/GitHubSourceControlProvider.ts","../src/sourceControl/gitLabMergeRequests.ts","../src/sourceControl/GitLabCli.ts","../src/sourceControl/gitLabAuthStatus.ts","../src/sourceControl/GitLabSourceControlProvider.ts","../src/sourceControl/SourceControlProviderRegistry.ts","../src/git/GitManager.ts","../src/git/GitWorkflowService.ts","../src/vcs/VcsStatusBroadcaster.ts","../src/vcs/VcsProvisioningService.ts","../src/diagnostics/ProcessDiagnostics.ts","../src/diagnostics/ProcessResourceMonitor.ts","../src/diagnostics/TraceDiagnostics.ts","../src/sourceControl/SourceControlDiscovery.ts","../src/sourceControl/SourceControlRepositoryService.ts","../src/push/Services/WebPushService.ts","../src/ws.ts","../src/telemetry/Identify.ts","../src/telemetry/Layers/AnalyticsService.ts","../src/persistence/Services/ProviderSessionRuntime.ts","../src/provider/Errors.ts","../src/provider/Services/ProviderSessionDirectory.ts","../src/provider/Layers/ProviderSessionDirectory.ts","../src/persistence/Layers/ProviderSessionRuntime.ts","../src/provider/Services/ProviderAdapterRegistry.ts","../src/provider/Layers/ProviderAdapterRegistry.ts","../src/provider/Layers/EventNdjsonLogger.ts","../src/provider/Layers/ProviderEventLoggers.ts","../src/provider/Layers/ProviderService.ts","../../../packages/shared/src/Record.ts","../src/provider/Layers/ProviderSessionReaper.ts","../src/provider/providerSnapshot.ts","../src/provider/opencodeRuntime.ts","../src/checkpointing/Errors.ts","../src/checkpointing/Utils.ts","../src/checkpointing/Services/CheckpointStore.ts","../src/checkpointing/Layers/CheckpointDiffQuery.ts","../src/checkpointing/Layers/CheckpointStore.ts","../src/textGeneration/TextGenerationUtils.ts","../src/textGeneration/TextGenerationPrompts.ts","../src/pathExpansion.ts","../src/provider/Drivers/ClaudeHome.ts","../src/provider/Layers/ClaudeProvider.ts","../src/textGeneration/ClaudeTextGeneration.ts","../../../packages/shared/src/cliArgs.ts","../../../packages/shared/src/rateLimitUsage.ts","../src/provider/attachmentInputs.ts","../src/provider/IndependentThreadTool.ts","../src/provider/Layers/ClaudeAdapter.ts","../src/provider/makeManagedServerProvider.ts","../src/provider/ProviderDriver.ts","../src/provider/ProviderInstanceEnvironment.ts","../src/provider/Drivers/ClaudeDriver.ts","../src/codexModelOptions.ts","../src/textGeneration/CodexTextGeneration.ts","../../../packages/effect-codex-app-server/src/_generated/schema.gen.ts","../../../packages/effect-codex-app-server/src/_generated/meta.gen.ts","../../../packages/effect-codex-app-server/src/errors.ts","../../../packages/effect-codex-app-server/src/_internal/shared.ts","../../../packages/effect-codex-app-server/src/protocol.ts","../../../packages/effect-codex-app-server/src/_internal/stdio.ts","../../../packages/effect-codex-app-server/src/client.ts","../../../packages/effect-codex-app-server/src/_generated/namespaces.gen.ts","../../../packages/shared/src/KeyedCoalescingWorker.ts","../src/process/ManagedChildProcessRegistry.ts","../../../packages/shared/src/childProcess.ts","../src/provider/Layers/CodexProvider.ts","../src/provider/CodexDeveloperInstructions.ts","../src/provider/Layers/CodexChildThreads.ts","../src/provider/Layers/CodexSessionRuntime.ts","../src/provider/Layers/CodexAdapter.ts","../src/provider/Drivers/CodexHomeLayout.ts","../src/provider/Drivers/CodexDriver.ts","../../../packages/effect-acp/src/_generated/schema.gen.ts","../../../packages/effect-acp/src/_generated/meta.gen.ts","../src/provider/acp/CursorAcpExtension.ts","../../../packages/effect-acp/src/errors.ts","../../../packages/effect-acp/src/protocol.ts","../../../packages/effect-acp/src/rpc.ts","../../../packages/effect-acp/src/_internal/shared.ts","../../../packages/effect-acp/src/_internal/stdio.ts","../../../packages/effect-acp/src/client.ts","../src/provider/acp/AcpProcessCleanup.ts","../../../packages/shared/src/toolActivity.ts","../src/provider/acp/AcpRuntimeModel.ts","../src/provider/acp/SalchiAcpMcpServer.ts","../src/provider/acp/AcpSessionRuntime.ts","../src/provider/Layers/CursorProvider.ts","../src/provider/acp/CursorAcpSupport.ts","../src/textGeneration/CursorTextGeneration.ts","../src/provider/acp/AcpAdapterSupport.ts","../src/provider/acp/AcpCoreRuntimeEvents.ts","../src/provider/acp/AcpNativeLogging.ts","../src/provider/Layers/CursorAdapter.ts","../src/provider/Drivers/CursorDriver.ts","../src/provider/acp/GrokAcpSupport.ts","../src/textGeneration/GrokTextGeneration.ts","../src/provider/acp/XAiAcpExtension.ts","../src/provider/Layers/GrokAdapter.ts","../src/provider/Layers/GrokProvider.ts","../src/provider/Drivers/GrokDriver.ts","../src/textGeneration/OpenCodeTextGeneration.ts","../src/provider/Layers/OpenCodeAdapter.ts","../src/provider/Layers/OpenCodeProvider.ts","../src/provider/Drivers/OpenCodeDriver.ts","../src/provider/builtInDrivers.ts","../src/provider/Services/ProviderInstanceRegistryMutator.ts","../src/provider/unavailableProviderSnapshot.ts","../src/provider/Layers/ProviderInstanceRegistryLive.ts","../src/provider/Layers/ProviderInstanceRegistryHydration.ts","../src/terminal/Services/PTY.ts","../src/terminal/Layers/Manager.ts","../src/orchestration/Services/CheckpointReactor.ts","../src/orchestration/Services/ProviderCommandReactor.ts","../src/orchestration/Services/ProviderRuntimeIngestion.ts","../src/orchestration/Services/ThreadDeletionReactor.ts","../src/push/Services/WebPushNotificationReactor.ts","../src/orchestration/Layers/OrchestrationReactor.ts","../src/orchestration/Services/RuntimeReceiptBus.ts","../src/orchestration/Layers/RuntimeReceiptBus.ts","../../../packages/shared/src/DrainableWorker.ts","../src/git/Utils.ts","../../../node_modules/.pnpm/@pierre+diffs@1.3.0-beta.5_patch_hash=ff332e2326703cadcae45de3fea7a013ada1719cfe27cfd5f_3484e535eedd552bf005d5a9d9803249/node_modules/@pierre/diffs/dist/constants.js","../../../node_modules/.pnpm/@pierre+diffs@1.3.0-beta.5_patch_hash=ff332e2326703cadcae45de3fea7a013ada1719cfe27cfd5f_3484e535eedd552bf005d5a9d9803249/node_modules/@pierre/diffs/dist/utils/cleanLastNewline.js","../../../node_modules/.pnpm/@pierre+diffs@1.3.0-beta.5_patch_hash=ff332e2326703cadcae45de3fea7a013ada1719cfe27cfd5f_3484e535eedd552bf005d5a9d9803249/node_modules/@pierre/diffs/dist/utils/detachString.js","../../../node_modules/.pnpm/@pierre+diffs@1.3.0-beta.5_patch_hash=ff332e2326703cadcae45de3fea7a013ada1719cfe27cfd5f_3484e535eedd552bf005d5a9d9803249/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js","../src/checkpointing/Diffs.ts","../src/checkpointing/TouchedPaths.ts","../src/orchestration/Layers/ProviderRuntimeIngestion.ts","../src/orchestration/Layers/ProviderCommandReactor.ts","../src/orchestration/Layers/CheckpointReactor.ts","../src/orchestration/Layers/ThreadDeletionReactor.ts","../src/provider/providerStatusCache.ts","../src/provider/Layers/ProviderRegistry.ts","../src/project/Layers/ProjectFaviconResolver.ts","../../../packages/shared/src/path.ts","../../../packages/shared/src/searchRanking.ts","../src/workspace/Layers/WorkspaceEntries.ts","../src/workspace/Layers/WorkspaceFileSystem.ts","../../../packages/shared/src/projectScripts.ts","../src/project/Layers/ProjectSetupScriptRunner.ts","../src/serverLogger.ts","../src/observability/Layers/Observability.ts","../src/environment/Layers/ServerEnvironmentLabel.ts","../src/environment/Layers/ServerEnvironment.ts","../src/auth/Services/ServerAuthPolicy.ts","../src/auth/Layers/ServerAuthPolicy.ts","../src/auth/scopes.ts","../src/auth/Layers/ServerAuth.ts","../src/diagnostics/WebResumeLog.ts","../src/persistence/Services/WebPushSubscriptions.ts","../src/persistence/Layers/WebPushSubscriptions.ts","../src/push/Layers/WebPushNotificationReactor.ts","../src/push/Layers/WebPushService.ts","../../../packages/shared/src/transcriptionModel.ts","../src/transcription/ManagedWhisperProcessRegistry.ts","../src/transcription/ManagedWhisper.ts","../src/transcription/LocalTranscription.ts","../src/transcription/http.ts","../src/orchestration/http.ts","../src/server.ts","../src/cli/server.ts","../src/cli/root.ts","../src/processShutdownWatchdog.ts","../src/bin.ts"],"sourcesContent":["import * as NodeNet from \"node:net\";\n\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Context from \"effect/Context\";\nimport * as Predicate from \"effect/Predicate\";\n\nexport class NetError extends Data.TaggedError(\"NetError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\nconst isErrnoExceptionWithCode = (\n  cause: unknown,\n): cause is {\n  readonly code: string;\n} =>\n  Predicate.isObject(cause) &&\n  Predicate.hasProperty(cause, \"code\") &&\n  Predicate.isString(cause.code);\n\nconst closeServer = (server: NodeNet.Server) => {\n  try {\n    server.close();\n  } catch {\n    // Ignore close failures during cleanup.\n  }\n};\n\nconst tryReservePort = (port: number): Effect.Effect<number, NetError> =>\n  Effect.callback<number, NetError>((resume) => {\n    const server = NodeNet.createServer();\n    let settled = false;\n\n    const settle = (effect: Effect.Effect<number, NetError>) => {\n      if (settled) return;\n      settled = true;\n      resume(effect);\n    };\n\n    server.unref();\n\n    server.once(\"error\", (cause) => {\n      settle(Effect.fail(new NetError({ message: \"Could not find an available port.\", cause })));\n    });\n\n    server.listen(port, () => {\n      const address = server.address();\n      const resolved = typeof address === \"object\" && address !== null ? address.port : 0;\n      server.close(() => {\n        if (resolved > 0) {\n          settle(Effect.succeed(resolved));\n          return;\n        }\n        settle(Effect.fail(new NetError({ message: \"Could not find an available port.\" })));\n      });\n    });\n\n    return Effect.sync(() => {\n      closeServer(server);\n    });\n  });\n\nexport interface NetServiceShape {\n  /**\n   * Returns true when a TCP server can bind to {host, port}.\n   */\n  readonly canListenOnHost: (port: number, host: string) => Effect.Effect<boolean>;\n\n  /**\n   * Checks loopback availability on both IPv4 and IPv6 localhost addresses.\n   */\n  readonly isPortAvailableOnLoopback: (port: number) => Effect.Effect<boolean>;\n\n  /**\n   * Reserve an ephemeral loopback port and release it immediately.\n   */\n  readonly reserveLoopbackPort: (host?: string) => Effect.Effect<number, NetError>;\n\n  /**\n   * Resolve an available listening port, preferring the provided port first.\n   */\n  readonly findAvailablePort: (preferred: number) => Effect.Effect<number, NetError>;\n}\n\n/**\n * NetService - Service tag for startup networking helpers.\n */\nexport class NetService extends Context.Service<NetService, NetServiceShape>()(\n  \"@salchi/shared/Net/NetService\",\n) {}\n\nexport const make = () => {\n  /**\n   * Returns true when a TCP server can bind to {host, port}.\n   * `EADDRNOTAVAIL` is treated as available so IPv6-absent hosts don't fail\n   * loopback availability checks.\n   */\n  const canListenOnHost = (port: number, host: string): Effect.Effect<boolean> =>\n    Effect.callback<boolean>((resume) => {\n      const server = NodeNet.createServer();\n      let settled = false;\n\n      const settle = (value: boolean) => {\n        if (settled) return;\n        settled = true;\n        resume(Effect.succeed(value));\n      };\n\n      server.unref();\n\n      server.once(\"error\", (cause) => {\n        if (isErrnoExceptionWithCode(cause) && cause.code === \"EADDRNOTAVAIL\") {\n          settle(true);\n          return;\n        }\n        settle(false);\n      });\n\n      server.once(\"listening\", () => {\n        server.close(() => {\n          settle(true);\n        });\n      });\n\n      server.listen({ host, port });\n\n      return Effect.sync(() => {\n        closeServer(server);\n      });\n    });\n\n  /**\n   * Reserve an ephemeral loopback port and release it immediately.\n   * Returns the reserved port number.\n   */\n  const reserveLoopbackPort = (host = \"127.0.0.1\"): Effect.Effect<number, NetError> =>\n    Effect.callback<number, NetError>((resume) => {\n      const probe = NodeNet.createServer();\n      let settled = false;\n\n      const settle = (effect: Effect.Effect<number, NetError>) => {\n        if (settled) return;\n        settled = true;\n        resume(effect);\n      };\n\n      probe.once(\"error\", (cause) => {\n        settle(Effect.fail(new NetError({ message: \"Failed to reserve loopback port\", cause })));\n      });\n\n      probe.listen(0, host, () => {\n        const address = probe.address();\n        const port = typeof address === \"object\" && address !== null ? address.port : 0;\n        probe.close(() => {\n          if (port > 0) {\n            settle(Effect.succeed(port));\n            return;\n          }\n          settle(Effect.fail(new NetError({ message: \"Failed to reserve loopback port\" })));\n        });\n      });\n\n      return Effect.sync(() => {\n        closeServer(probe);\n      });\n    });\n\n  return {\n    canListenOnHost,\n    isPortAvailableOnLoopback: (port) =>\n      Effect.zipWith(\n        canListenOnHost(port, \"127.0.0.1\"),\n        canListenOnHost(port, \"::1\"),\n        (ipv4, ipv6) => ipv4 && ipv6,\n      ),\n    reserveLoopbackPort,\n    findAvailablePort: (preferred) =>\n      Effect.catch(tryReservePort(preferred), () => tryReservePort(0)),\n  } satisfies NetServiceShape;\n};\n\nexport const layer = Layer.sync(NetService, make);\n","","import * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\n\nexport const TrimmedString = Schema.String.pipe(\n  Schema.decodeTo(\n    Schema.String,\n    SchemaTransformation.transformOrFail({\n      decode: (value) => Effect.succeed(value.trim()),\n      encode: (value) => Effect.succeed(value.trim()),\n    }),\n  ),\n);\nexport const TrimmedNonEmptyString = TrimmedString.check(Schema.isNonEmpty());\n\nexport const NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));\nexport const PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));\nexport const PortSchema = Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65535 }));\n\nexport const IsoDateTime = Schema.String;\nexport type IsoDateTime = typeof IsoDateTime.Type;\n\n/** Decode growing wire arrays by dropping elements unknown to this build. */\nexport const ForwardCompatibleArray = <Element extends Schema.Top>(element: Element) => {\n  const decodeElement = Schema.decodeUnknownOption(element as never);\n  return Schema.Array(Schema.Unknown).pipe(\n    Schema.decodeTo(\n      Schema.Array(element),\n      SchemaTransformation.transform<ReadonlyArray<Element[\"Encoded\"]>, ReadonlyArray<unknown>>({\n        decode: (values) =>\n          values.filter((value) => Option.isSome(decodeElement(value))) as ReadonlyArray<\n            Element[\"Encoded\"]\n          >,\n        encode: (values) => values,\n      }),\n    ),\n  );\n};\n\n/**\n * Construct a branded identifier. Enforces non-empty trimmed strings\n */\nconst makeEntityId = <Brand extends string>(brand: Brand) => {\n  return TrimmedNonEmptyString.pipe(Schema.brand(brand));\n};\n\nexport const ThreadId = makeEntityId(\"ThreadId\");\nexport type ThreadId = typeof ThreadId.Type;\nexport const ProjectId = makeEntityId(\"ProjectId\");\nexport type ProjectId = typeof ProjectId.Type;\nexport const EnvironmentId = makeEntityId(\"EnvironmentId\");\nexport type EnvironmentId = typeof EnvironmentId.Type;\nexport const CommandId = makeEntityId(\"CommandId\");\nexport type CommandId = typeof CommandId.Type;\nexport const EventId = makeEntityId(\"EventId\");\nexport type EventId = typeof EventId.Type;\nexport const MessageId = makeEntityId(\"MessageId\");\nexport type MessageId = typeof MessageId.Type;\nexport const TurnId = makeEntityId(\"TurnId\");\nexport type TurnId = typeof TurnId.Type;\nexport const AuthSessionId = makeEntityId(\"AuthSessionId\");\nexport type AuthSessionId = typeof AuthSessionId.Type;\n\nexport const ProviderItemId = makeEntityId(\"ProviderItemId\");\nexport type ProviderItemId = typeof ProviderItemId.Type;\nexport const RuntimeSessionId = makeEntityId(\"RuntimeSessionId\");\nexport type RuntimeSessionId = typeof RuntimeSessionId.Type;\nexport const RuntimeItemId = makeEntityId(\"RuntimeItemId\");\nexport type RuntimeItemId = typeof RuntimeItemId.Type;\nexport const RuntimeRequestId = makeEntityId(\"RuntimeRequestId\");\nexport type RuntimeRequestId = typeof RuntimeRequestId.Type;\nexport const RuntimeTaskId = makeEntityId(\"RuntimeTaskId\");\nexport type RuntimeTaskId = typeof RuntimeTaskId.Type;\nexport const RuntimeSubagentId = makeEntityId(\"RuntimeSubagentId\");\nexport type RuntimeSubagentId = typeof RuntimeSubagentId.Type;\nexport const ApprovalRequestId = makeEntityId(\"ApprovalRequestId\");\nexport type ApprovalRequestId = typeof ApprovalRequestId.Type;\nexport const CheckpointRef = makeEntityId(\"CheckpointRef\");\nexport type CheckpointRef = typeof CheckpointRef.Type;\n","import * as Schema from \"effect/Schema\";\nimport * as HttpApiSchema from \"effect/unstable/httpapi/HttpApiSchema\";\n\nimport { AuthSessionId, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\n/**\n * Declares the server's overall authentication posture.\n *\n * This is a high-level policy label that tells clients how the environment is\n * expected to be accessed, not a transport detail and not an exhaustive list\n * of every accepted credential.\n *\n * Typical usage:\n * - rendered in auth/pairing UI so the user understands what kind of\n *   environment they are connecting to\n * - used by clients to decide whether silent desktop bootstrap is expected or\n *   whether an explicit pairing flow should be shown\n *\n * Meanings:\n * - `desktop-managed-local`: local desktop-managed environment with narrow\n *   trusted bootstrap, intended to avoid login prompts on the same machine\n * - `loopback-browser`: standalone local server intended for browser pairing on\n *   the same machine\n * - `remote-reachable`: environment intended to be reached from other devices\n *   or networks, where explicit pairing/auth is expected\n * - `unsafe-no-auth`: intentionally unauthenticated mode; this is an explicit\n *   unsafe escape hatch, not a normal deployment mode\n */\nexport const ServerAuthPolicy = Schema.Literals([\n  \"desktop-managed-local\",\n  \"loopback-browser\",\n  \"remote-reachable\",\n  \"unsafe-no-auth\",\n]);\nexport type ServerAuthPolicy = typeof ServerAuthPolicy.Type;\n\n/**\n * A credential type that can be exchanged for a real authenticated session.\n *\n * Bootstrap methods are for establishing trust at the start of a connection or\n * pairing flow. They are not the long-lived credential used for ordinary\n * authenticated HTTP / WebSocket traffic after pairing succeeds.\n *\n * Current methods:\n * - `desktop-bootstrap`: a trusted local desktop handoff, used so the desktop\n *   shell can pair the renderer without a login screen\n * - `one-time-token`: a short-lived pairing token, suitable for manual pairing\n *   flows such as `/pair?token=...`\n */\nexport const ServerAuthBootstrapMethod = Schema.Literals([\"desktop-bootstrap\", \"one-time-token\"]);\nexport type ServerAuthBootstrapMethod = typeof ServerAuthBootstrapMethod.Type;\n\n/**\n * A credential type accepted for steady-state authenticated requests after a\n * client has already paired.\n *\n * These methods are used by the server-wide auth layer for privileged HTTP and\n * WebSocket access. They are distinct from bootstrap methods so clients can\n * reason clearly about \"pair first, then use session auth\".\n *\n * Current methods:\n * - `browser-session-cookie`: cookie-backed browser session, used by the web\n *   app after bootstrap/pairing\n * - `bearer-access-token`: scoped token suitable for non-cookie or\n *   non-browser clients\n */\nexport const ServerAuthSessionMethod = Schema.Literals([\n  \"browser-session-cookie\",\n  \"bearer-access-token\",\n  // Backward-compatible name accepted while clients migrate to bearer-access-token.\n  \"bearer-session-token\",\n]);\nexport type ServerAuthSessionMethod = typeof ServerAuthSessionMethod.Type;\n\nexport const AuthSessionRole = Schema.Literals([\"owner\", \"client\"]);\nexport type AuthSessionRole = typeof AuthSessionRole.Type;\n\nexport const AuthOrchestrationReadScope = \"orchestration:read\" as const;\nexport const AuthOrchestrationOperateScope = \"orchestration:operate\" as const;\nexport const AuthTerminalOperateScope = \"terminal:operate\" as const;\nexport const AuthReviewWriteScope = \"review:write\" as const;\nexport const AuthAccessReadScope = \"access:read\" as const;\nexport const AuthAccessWriteScope = \"access:write\" as const;\nexport const AuthRelayReadScope = \"relay:read\" as const;\nexport const AuthRelayWriteScope = \"relay:write\" as const;\nexport const AuthEnvironmentScope = Schema.Literals([\n  AuthOrchestrationReadScope,\n  AuthOrchestrationOperateScope,\n  AuthTerminalOperateScope,\n  AuthReviewWriteScope,\n  AuthAccessReadScope,\n  AuthAccessWriteScope,\n  AuthRelayReadScope,\n  AuthRelayWriteScope,\n]);\nexport type AuthEnvironmentScope = typeof AuthEnvironmentScope.Type;\nexport const AuthEnvironmentScopes = Schema.Array(AuthEnvironmentScope);\nexport type AuthEnvironmentScopes = typeof AuthEnvironmentScopes.Type;\n\nexport const AuthStandardClientScopes = [\n  AuthOrchestrationReadScope,\n  AuthOrchestrationOperateScope,\n  AuthTerminalOperateScope,\n  AuthReviewWriteScope,\n  AuthRelayReadScope,\n] as const;\nexport const AuthAdministrativeScopes = [\n  ...AuthStandardClientScopes,\n  AuthAccessReadScope,\n  AuthAccessWriteScope,\n  AuthRelayWriteScope,\n] as const;\n\nexport const AuthTokenExchangeGrantType =\n  \"urn:ietf:params:oauth:grant-type:token-exchange\" as const;\nexport const AuthAccessTokenType = \"urn:ietf:params:oauth:token-type:access_token\" as const;\nexport const AuthEnvironmentBootstrapTokenType =\n  \"urn:salchi:params:oauth:token-type:environment-bootstrap\" as const;\n\n/**\n * Server-advertised auth capabilities for a specific execution environment.\n *\n * Clients should treat this as the authoritative description of how that\n * environment expects to be paired and how authenticated requests should be\n * made afterward.\n *\n * Field meanings:\n * - `policy`: high-level auth posture for the environment\n * - `bootstrapMethods`: pairing/bootstrap methods the server is currently\n *   willing to accept\n * - `sessionMethods`: authenticated request/session methods the server supports\n *   once pairing is complete\n * - `sessionCookieName`: cookie name clients should expect when\n *   `browser-session-cookie` is in use\n *\n * This descriptor is intentionally capability-oriented. It lets clients choose\n * the right UX without embedding server-specific auth logic or assuming a\n * single access method.\n */\nexport const ServerAuthDescriptor = Schema.Struct({\n  policy: ServerAuthPolicy,\n  bootstrapMethods: Schema.Array(ServerAuthBootstrapMethod),\n  sessionMethods: Schema.Array(ServerAuthSessionMethod),\n  sessionCookieName: TrimmedNonEmptyString,\n});\nexport type ServerAuthDescriptor = typeof ServerAuthDescriptor.Type;\n\nexport const AuthBootstrapInput = Schema.Struct({\n  credential: TrimmedNonEmptyString,\n});\nexport type AuthBootstrapInput = typeof AuthBootstrapInput.Type;\n\nexport const AuthBrowserSessionRequest = AuthBootstrapInput;\nexport type AuthBrowserSessionRequest = typeof AuthBrowserSessionRequest.Type;\n\nexport const AuthBootstrapResult = Schema.Struct({\n  authenticated: Schema.Literal(true),\n  role: AuthSessionRole,\n  scopes: Schema.optionalKey(AuthEnvironmentScopes),\n  sessionMethod: ServerAuthSessionMethod,\n  expiresAt: Schema.DateTimeUtc,\n});\nexport type AuthBootstrapResult = typeof AuthBootstrapResult.Type;\n\nexport const AuthBrowserSessionResult = Schema.Struct({\n  authenticated: Schema.Literal(true),\n  role: AuthSessionRole,\n  scopes: AuthEnvironmentScopes,\n  sessionMethod: ServerAuthSessionMethod,\n  expiresAt: Schema.DateTimeUtc,\n});\nexport type AuthBrowserSessionResult = typeof AuthBrowserSessionResult.Type;\n\nexport const AuthBearerBootstrapResult = Schema.Struct({\n  authenticated: Schema.Literal(true),\n  role: AuthSessionRole,\n  scopes: Schema.optionalKey(AuthEnvironmentScopes),\n  sessionMethod: ServerAuthSessionMethod,\n  expiresAt: Schema.DateTimeUtc,\n  sessionToken: TrimmedNonEmptyString,\n});\nexport type AuthBearerBootstrapResult = typeof AuthBearerBootstrapResult.Type;\n\nexport const AuthAccessTokenResult = Schema.Struct({\n  access_token: TrimmedNonEmptyString,\n  issued_token_type: Schema.Literal(AuthAccessTokenType),\n  token_type: Schema.Literal(\"Bearer\"),\n  expires_in: Schema.Number,\n  scope: TrimmedNonEmptyString,\n});\nexport type AuthAccessTokenResult = typeof AuthAccessTokenResult.Type;\n\nexport const AuthWebSocketTokenResult = Schema.Struct({\n  token: TrimmedNonEmptyString,\n  expiresAt: Schema.DateTimeUtc,\n});\nexport type AuthWebSocketTokenResult = typeof AuthWebSocketTokenResult.Type;\n\nexport const AuthWebSocketTicketResult = Schema.Struct({\n  ticket: TrimmedNonEmptyString,\n  expiresAt: Schema.DateTimeUtc,\n});\nexport type AuthWebSocketTicketResult = typeof AuthWebSocketTicketResult.Type;\n\nexport const AuthPairingCredentialResult = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  credential: TrimmedNonEmptyString,\n  label: Schema.optionalKey(TrimmedNonEmptyString),\n  expiresAt: Schema.DateTimeUtc,\n});\nexport type AuthPairingCredentialResult = typeof AuthPairingCredentialResult.Type;\n\nexport const AuthPairingLink = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  credential: TrimmedNonEmptyString,\n  role: AuthSessionRole,\n  scopes: Schema.optionalKey(AuthEnvironmentScopes),\n  subject: TrimmedNonEmptyString,\n  label: Schema.optionalKey(TrimmedNonEmptyString),\n  createdAt: Schema.DateTimeUtc,\n  expiresAt: Schema.DateTimeUtc,\n});\nexport type AuthPairingLink = typeof AuthPairingLink.Type;\n\nexport const AuthClientMetadataDeviceType = Schema.Literals([\n  \"desktop\",\n  \"mobile\",\n  \"tablet\",\n  \"bot\",\n  \"unknown\",\n]);\nexport type AuthClientMetadataDeviceType = typeof AuthClientMetadataDeviceType.Type;\n\nexport const AuthClientPresentationMetadata = Schema.Struct({\n  label: Schema.optionalKey(TrimmedNonEmptyString),\n  deviceType: Schema.optionalKey(AuthClientMetadataDeviceType),\n  os: Schema.optionalKey(TrimmedNonEmptyString),\n});\nexport type AuthClientPresentationMetadata = typeof AuthClientPresentationMetadata.Type;\n\nexport const AuthTokenExchangeRequest = Schema.Struct({\n  grant_type: Schema.Literal(AuthTokenExchangeGrantType),\n  subject_token: TrimmedNonEmptyString,\n  subject_token_type: Schema.Literal(AuthEnvironmentBootstrapTokenType),\n  requested_token_type: Schema.Literal(AuthAccessTokenType),\n  scope: Schema.optionalKey(TrimmedNonEmptyString),\n  client_label: Schema.optionalKey(TrimmedNonEmptyString),\n  client_device_type: Schema.optionalKey(AuthClientMetadataDeviceType),\n  client_os: Schema.optionalKey(TrimmedNonEmptyString),\n}).pipe(HttpApiSchema.asFormUrlEncoded());\nexport type AuthTokenExchangeRequest = typeof AuthTokenExchangeRequest.Type;\n\nexport const AuthClientMetadata = Schema.Struct({\n  label: Schema.optionalKey(TrimmedNonEmptyString),\n  ipAddress: Schema.optionalKey(TrimmedNonEmptyString),\n  userAgent: Schema.optionalKey(TrimmedNonEmptyString),\n  deviceType: AuthClientMetadataDeviceType,\n  os: Schema.optionalKey(TrimmedNonEmptyString),\n  browser: Schema.optionalKey(TrimmedNonEmptyString),\n});\nexport type AuthClientMetadata = typeof AuthClientMetadata.Type;\n\nexport const AuthClientSession = Schema.Struct({\n  sessionId: AuthSessionId,\n  subject: TrimmedNonEmptyString,\n  role: AuthSessionRole,\n  scopes: Schema.optionalKey(AuthEnvironmentScopes),\n  method: ServerAuthSessionMethod,\n  client: AuthClientMetadata,\n  issuedAt: Schema.DateTimeUtc,\n  expiresAt: Schema.DateTimeUtc,\n  lastConnectedAt: Schema.NullOr(Schema.DateTimeUtc),\n  connected: Schema.Boolean,\n  current: Schema.Boolean,\n});\nexport type AuthClientSession = typeof AuthClientSession.Type;\n\nexport const AuthAccessSnapshot = Schema.Struct({\n  pairingLinks: Schema.Array(AuthPairingLink),\n  clientSessions: Schema.Array(AuthClientSession),\n});\nexport type AuthAccessSnapshot = typeof AuthAccessSnapshot.Type;\n\nexport const AuthAccessStreamSnapshotEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  revision: Schema.Number,\n  type: Schema.Literal(\"snapshot\"),\n  payload: AuthAccessSnapshot,\n});\nexport type AuthAccessStreamSnapshotEvent = typeof AuthAccessStreamSnapshotEvent.Type;\n\nexport const AuthAccessStreamPairingLinkUpsertedEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  revision: Schema.Number,\n  type: Schema.Literal(\"pairingLinkUpserted\"),\n  payload: AuthPairingLink,\n});\nexport type AuthAccessStreamPairingLinkUpsertedEvent =\n  typeof AuthAccessStreamPairingLinkUpsertedEvent.Type;\n\nexport const AuthAccessStreamPairingLinkRemovedEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  revision: Schema.Number,\n  type: Schema.Literal(\"pairingLinkRemoved\"),\n  payload: Schema.Struct({\n    id: TrimmedNonEmptyString,\n  }),\n});\nexport type AuthAccessStreamPairingLinkRemovedEvent =\n  typeof AuthAccessStreamPairingLinkRemovedEvent.Type;\n\nexport class AuthAccessStreamError extends Schema.TaggedErrorClass<AuthAccessStreamError>()(\n  \"AuthAccessStreamError\",\n  {\n    message: Schema.String,\n  },\n) {}\n\nexport class EnvironmentAuthorizationError extends Schema.TaggedErrorClass<EnvironmentAuthorizationError>()(\n  \"EnvironmentAuthorizationError\",\n  {\n    message: Schema.String,\n    requiredScope: AuthEnvironmentScope,\n  },\n) {}\n\nexport const AuthAccessStreamClientUpsertedEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  revision: Schema.Number,\n  type: Schema.Literal(\"clientUpserted\"),\n  payload: AuthClientSession,\n});\nexport type AuthAccessStreamClientUpsertedEvent = typeof AuthAccessStreamClientUpsertedEvent.Type;\n\nexport const AuthAccessStreamClientRemovedEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  revision: Schema.Number,\n  type: Schema.Literal(\"clientRemoved\"),\n  payload: Schema.Struct({\n    sessionId: AuthSessionId,\n  }),\n});\nexport type AuthAccessStreamClientRemovedEvent = typeof AuthAccessStreamClientRemovedEvent.Type;\n\nexport const AuthAccessStreamEvent = Schema.Union([\n  AuthAccessStreamSnapshotEvent,\n  AuthAccessStreamPairingLinkUpsertedEvent,\n  AuthAccessStreamPairingLinkRemovedEvent,\n  AuthAccessStreamClientUpsertedEvent,\n  AuthAccessStreamClientRemovedEvent,\n]);\nexport type AuthAccessStreamEvent = typeof AuthAccessStreamEvent.Type;\n\nexport const AuthRevokePairingLinkInput = Schema.Struct({\n  id: TrimmedNonEmptyString,\n});\nexport type AuthRevokePairingLinkInput = typeof AuthRevokePairingLinkInput.Type;\n\nexport const AuthRevokeClientSessionInput = Schema.Struct({\n  sessionId: AuthSessionId,\n});\nexport type AuthRevokeClientSessionInput = typeof AuthRevokeClientSessionInput.Type;\n\nexport const AuthCreatePairingCredentialInput = Schema.Struct({\n  label: Schema.optionalKey(TrimmedNonEmptyString),\n  scopes: Schema.optionalKey(AuthEnvironmentScopes),\n});\nexport type AuthCreatePairingCredentialInput = typeof AuthCreatePairingCredentialInput.Type;\n\nexport const AuthSessionState = Schema.Struct({\n  authenticated: Schema.Boolean,\n  auth: ServerAuthDescriptor,\n  role: Schema.optionalKey(AuthSessionRole),\n  scopes: Schema.optionalKey(AuthEnvironmentScopes),\n  sessionMethod: Schema.optionalKey(ServerAuthSessionMethod),\n  expiresAt: Schema.optionalKey(Schema.DateTimeUtc),\n});\nexport type AuthSessionState = typeof AuthSessionState.Type;\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { EnvironmentId, ProjectId, ThreadId, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nexport const ExecutionEnvironmentPlatformOs = Schema.Literals([\n  \"darwin\",\n  \"linux\",\n  \"windows\",\n  \"unknown\",\n]);\nexport type ExecutionEnvironmentPlatformOs = typeof ExecutionEnvironmentPlatformOs.Type;\n\nexport const ExecutionEnvironmentPlatformArch = Schema.Literals([\"arm64\", \"x64\", \"other\"]);\nexport type ExecutionEnvironmentPlatformArch = typeof ExecutionEnvironmentPlatformArch.Type;\n\nexport const ExecutionEnvironmentPlatform = Schema.Struct({\n  os: ExecutionEnvironmentPlatformOs,\n  arch: ExecutionEnvironmentPlatformArch,\n});\nexport type ExecutionEnvironmentPlatform = typeof ExecutionEnvironmentPlatform.Type;\n\nexport const ExecutionEnvironmentCapabilities = Schema.Struct({\n  repositoryIdentity: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n});\nexport type ExecutionEnvironmentCapabilities = typeof ExecutionEnvironmentCapabilities.Type;\n\nexport const ExecutionEnvironmentDescriptor = Schema.Struct({\n  environmentId: EnvironmentId,\n  label: TrimmedNonEmptyString,\n  platform: ExecutionEnvironmentPlatform,\n  serverVersion: TrimmedNonEmptyString,\n  capabilities: ExecutionEnvironmentCapabilities,\n});\nexport type ExecutionEnvironmentDescriptor = typeof ExecutionEnvironmentDescriptor.Type;\n\nexport const EnvironmentConnectionState = Schema.Literals([\n  \"connecting\",\n  \"connected\",\n  \"disconnected\",\n  \"error\",\n]);\nexport type EnvironmentConnectionState = typeof EnvironmentConnectionState.Type;\n\nexport const RepositoryIdentityLocator = Schema.Struct({\n  source: Schema.Literal(\"git-remote\"),\n  remoteName: TrimmedNonEmptyString,\n  remoteUrl: TrimmedNonEmptyString,\n});\nexport type RepositoryIdentityLocator = typeof RepositoryIdentityLocator.Type;\n\nexport const RepositoryIdentity = Schema.Struct({\n  canonicalKey: TrimmedNonEmptyString,\n  locator: RepositoryIdentityLocator,\n  rootPath: Schema.optionalKey(TrimmedNonEmptyString),\n  displayName: Schema.optionalKey(TrimmedNonEmptyString),\n  provider: Schema.optionalKey(TrimmedNonEmptyString),\n  owner: Schema.optionalKey(TrimmedNonEmptyString),\n  name: Schema.optionalKey(TrimmedNonEmptyString),\n});\nexport type RepositoryIdentity = typeof RepositoryIdentity.Type;\n\nexport const ScopedProjectRef = Schema.Struct({\n  environmentId: EnvironmentId,\n  projectId: ProjectId,\n});\nexport type ScopedProjectRef = typeof ScopedProjectRef.Type;\n\nexport const ScopedThreadRef = Schema.Struct({\n  environmentId: EnvironmentId,\n  threadId: ThreadId,\n});\nexport type ScopedThreadRef = typeof ScopedThreadRef.Type;\n\nexport const ScopedThreadSessionRef = Schema.Struct({\n  environmentId: EnvironmentId,\n  threadId: ThreadId,\n});\nexport type ScopedThreadSessionRef = typeof ScopedThreadSessionRef.Type;\n","/**\n * Provider-instance contracts.\n *\n * Splits the historical \"provider kind\" concept into two:\n *\n *   - `ProviderDriverKind` is the implementation kind selector (e.g. codex,\n *     claudeAgent, a fork's `ollama`, …). It picks which driver package\n *     handles the protocol, the probe, the adapter, and text generation.\n *\n *   - `ProviderInstanceId` is the routing key (a user-defined slug).\n *     Threads, sessions, runtime events, and persisted bindings reference\n *     instance ids — never driver kinds — so a user can configure multiple\n *     instances of the same driver (e.g. `codex_personal` + `codex_work`),\n *     each with independent driver-specific configuration.\n *\n * Forward/backward compatibility invariant\n * ----------------------------------------\n * `ProviderDriverKind` is intentionally an **open** branded slug, not a closed\n * literal union. The server hosts forks, ships in PRs that add drivers, and\n * users frequently roll between branches and forks. Any of those paths can\n * leave `ServerSettings`, persisted thread state, or session bindings\n * referencing a driver that the currently-running build does not know about.\n *\n * The rule: parsing any of those payloads must always succeed, and the\n * runtime is responsible for marking the unknown driver/instance as\n * \"unavailable\" rather than crashing. Built-in drivers shipped by the core\n * product happens to register in a given build is not part of the contract\n * layer. Driver availability is discovered through the runtime registry.\n *\n * Driver-specific configuration is similarly opaque at the contracts layer:\n * drivers live in (or will be extracted to) their own packages and own their\n * config schemas. The contracts package only knows the envelope.\n *\n * @module providerInstance\n */\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nconst PROVIDER_SLUG_MAX_CHARS = 64;\n/**\n * Slug pattern shared by driver kinds and instance ids — letters, digits,\n * dashes, underscores. The first character must be a letter so slugs remain\n * JS-identifier friendly when used as object keys, log fields, or telemetry\n * attributes. Mixed case is permitted so historical driver kinds (e.g.\n * `claudeAgent`) can be used verbatim during the migration and so external\n * fork authors retain reasonable freedom.\n */\nconst PROVIDER_SLUG_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]*$/;\nconst ENVIRONMENT_VARIABLE_NAME_MAX_CHARS = 128;\nconst ENVIRONMENT_VARIABLE_NAME_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nconst slugSchema = TrimmedNonEmptyString.check(\n  Schema.isMaxLength(PROVIDER_SLUG_MAX_CHARS),\n  Schema.isPattern(PROVIDER_SLUG_PATTERN),\n);\n\n/**\n * `ProviderDriverKind` — open branded slug naming a driver implementation.\n *\n * Constraints (validated at the schema layer):\n *   - starts with a letter\n *   - only letters, digits, `-`, `_` after the first char\n *   - 1..64 characters\n *\n * Notably **not** validated: that the driver is one we know how to load.\n * That check belongs to the runtime registry, which downgrades unknown\n * drivers gracefully (see module docs).\n */\nexport const ProviderDriverKind = slugSchema.pipe(Schema.brand(\"ProviderDriverKind\"));\nexport type ProviderDriverKind = typeof ProviderDriverKind.Type;\n\nconst isProviderDriverKindValue = Schema.is(ProviderDriverKind);\nexport const isProviderDriverKind = (value: unknown): value is ProviderDriverKind =>\n  isProviderDriverKindValue(value);\n\n/**\n * `ProviderInstanceId` — user-defined routing key for a configured provider\n * instance. Same slug rules as `ProviderDriverKind`; branded separately so the\n * type system cannot confuse the two.\n */\nexport const ProviderInstanceId = slugSchema.pipe(Schema.brand(\"ProviderInstanceId\"));\nexport type ProviderInstanceId = typeof ProviderInstanceId.Type;\n\n/**\n * Lightweight reference identifying which driver implements an instance.\n * Carried alongside `ProviderInstanceId` on wire shapes so consumers can\n * branch on driver behavior (icons, capabilities, presentation) without\n * having to look up the instance in the registry.\n */\nexport const ProviderInstanceRef = Schema.Struct({\n  instanceId: ProviderInstanceId,\n  driver: ProviderDriverKind,\n});\nexport type ProviderInstanceRef = typeof ProviderInstanceRef.Type;\n\nexport const ProviderInstanceEnvironmentVariableName = TrimmedNonEmptyString.check(\n  Schema.isMaxLength(ENVIRONMENT_VARIABLE_NAME_MAX_CHARS),\n  Schema.isPattern(ENVIRONMENT_VARIABLE_NAME_PATTERN),\n);\nexport type ProviderInstanceEnvironmentVariableName =\n  typeof ProviderInstanceEnvironmentVariableName.Type;\n\nexport const ProviderInstanceEnvironmentVariable = Schema.Struct({\n  name: ProviderInstanceEnvironmentVariableName,\n  value: Schema.String.pipe(Schema.withDecodingDefault(Effect.succeed(\"\"))),\n  sensitive: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n  valueRedacted: Schema.optionalKey(Schema.Boolean),\n});\nexport type ProviderInstanceEnvironmentVariable = typeof ProviderInstanceEnvironmentVariable.Type;\n\nexport const ProviderInstanceEnvironment = Schema.Array(ProviderInstanceEnvironmentVariable);\nexport type ProviderInstanceEnvironment = typeof ProviderInstanceEnvironment.Type;\n\n/**\n * Envelope shape for a provider instance configuration in `ServerSettings`.\n *\n * `driver` is intentionally accepted as any well-formed slug (see module\n * docs). The driver-specific config payload is left as `Schema.Unknown`;\n * each driver registers its own decoder with the runtime registry, and\n * envelopes for unknown drivers are preserved verbatim so they round-trip\n * across version changes without data loss.\n */\nexport const ProviderInstanceConfig = Schema.Struct({\n  driver: ProviderDriverKind,\n  displayName: Schema.optional(TrimmedNonEmptyString),\n  accentColor: Schema.optional(TrimmedNonEmptyString),\n  environment: Schema.optionalKey(ProviderInstanceEnvironment),\n  enabled: Schema.optionalKey(Schema.Boolean),\n  config: Schema.optionalKey(Schema.Unknown),\n});\nexport type ProviderInstanceConfig = typeof ProviderInstanceConfig.Type;\n\n/**\n * Map shape for `ServerSettings.providerInstances`. Keyed by\n * `ProviderInstanceId`, values are envelopes the registry feeds to drivers.\n */\nexport const ProviderInstanceConfigMap = Schema.Record(ProviderInstanceId, ProviderInstanceConfig);\nexport type ProviderInstanceConfigMap = typeof ProviderInstanceConfigMap.Type;\n\n/**\n * Construct the canonical `ProviderInstanceId` used as a back-compat default\n * for a built-in driver. The legacy single-instance-per-driver world used\n * the driver kind itself as the instance id; preserving that mapping keeps\n * existing persisted threads, bindings, and cache files routable across the\n * migration without rewriting their stored selection payloads.\n */\nexport const defaultInstanceIdForDriver = (driver: ProviderDriverKind): ProviderInstanceId =>\n  ProviderInstanceId.make(driver);\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\nimport { ProviderDriverKind } from \"./providerInstance.ts\";\n\nexport const ProviderOptionDescriptorType = Schema.Literals([\"select\", \"boolean\"]);\nexport type ProviderOptionDescriptorType = typeof ProviderOptionDescriptorType.Type;\n\nexport const ProviderOptionChoice = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  label: TrimmedNonEmptyString,\n  description: Schema.optional(TrimmedNonEmptyString),\n  isDefault: Schema.optional(Schema.Boolean),\n});\nexport type ProviderOptionChoice = typeof ProviderOptionChoice.Type;\n\nconst ProviderOptionDescriptorBase = {\n  id: TrimmedNonEmptyString,\n  label: TrimmedNonEmptyString,\n  description: Schema.optional(TrimmedNonEmptyString),\n} as const;\n\nexport const SelectProviderOptionDescriptor = Schema.Struct({\n  ...ProviderOptionDescriptorBase,\n  type: Schema.Literal(\"select\"),\n  options: Schema.Array(ProviderOptionChoice),\n  currentValue: Schema.optional(TrimmedNonEmptyString),\n  promptInjectedValues: Schema.optional(Schema.Array(TrimmedNonEmptyString)),\n});\nexport type SelectProviderOptionDescriptor = typeof SelectProviderOptionDescriptor.Type;\n\nexport const BooleanProviderOptionDescriptor = Schema.Struct({\n  ...ProviderOptionDescriptorBase,\n  type: Schema.Literal(\"boolean\"),\n  currentValue: Schema.optional(Schema.Boolean),\n});\nexport type BooleanProviderOptionDescriptor = typeof BooleanProviderOptionDescriptor.Type;\n\nexport const ProviderOptionDescriptor = Schema.Union([\n  SelectProviderOptionDescriptor,\n  BooleanProviderOptionDescriptor,\n]);\nexport type ProviderOptionDescriptor = typeof ProviderOptionDescriptor.Type;\n\nexport const ProviderOptionSelectionValue = Schema.Union([TrimmedNonEmptyString, Schema.Boolean]);\nexport type ProviderOptionSelectionValue = typeof ProviderOptionSelectionValue.Type;\n\nexport const ProviderOptionSelection = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  value: ProviderOptionSelectionValue,\n});\nexport type ProviderOptionSelection = typeof ProviderOptionSelection.Type;\n\n/**\n * Legacy on-disk shape for provider option selections, kept readable by the\n * decoder so we can tolerate stored data written before the v3 array shape.\n *\n * Persisted historically as `{ effort: \"max\", fastMode: true, ... }` inside\n * `modelSelection.options`. Migration 026 rewrites stored rows to the\n * canonical array shape, but we still see the legacy form in:\n *   - `settings.json` files from older client builds,\n *   - SQLite databases that have not yet run migration 026,\n *   - any future regression that re-introduces the legacy shape.\n */\nconst LegacyProviderOptionSelectionsObject = Schema.Record(Schema.String, Schema.Unknown);\n\nconst ProviderOptionSelectionsFromLegacyObject = LegacyProviderOptionSelectionsObject.pipe(\n  Schema.decodeTo(\n    Schema.Array(ProviderOptionSelection),\n    SchemaTransformation.transformOrFail({\n      decode: (record) => Effect.succeed(coerceLegacyOptionsObjectToArray(record)),\n      encode: (selections) => Effect.succeed(canonicalSelectionsToLegacyObject(selections)),\n    }),\n  ),\n);\n\n/**\n * Schema for the `options` field of every `ModelSelection` variant.\n *\n * Accepts both:\n *   - the canonical array shape `Array<{ id, value }>` (preferred), and\n *   - the legacy object shape `Record<string, string | boolean | …>` from\n *     pre-migration data.\n *\n * Always normalizes to the canonical array on decode and re-encodes as the\n * canonical array, so any legacy storage gets cleaned up the next time the\n * containing record is written back.\n */\nexport const ProviderOptionSelections = Schema.Union([\n  Schema.Array(ProviderOptionSelection),\n  ProviderOptionSelectionsFromLegacyObject,\n]);\nexport type ProviderOptionSelections = typeof ProviderOptionSelections.Type;\n\nfunction coerceLegacyOptionsObjectToArray(\n  record: Record<string, unknown>,\n): ReadonlyArray<ProviderOptionSelection> {\n  const entries: Array<ProviderOptionSelection> = [];\n  for (const [rawKey, rawValue] of Object.entries(record)) {\n    const id = typeof rawKey === \"string\" ? rawKey.trim() : \"\";\n    if (id.length === 0) continue;\n    if (typeof rawValue === \"string\") {\n      const trimmed = rawValue.trim();\n      if (trimmed.length > 0) entries.push({ id, value: trimmed });\n    } else if (typeof rawValue === \"boolean\") {\n      entries.push({ id, value: rawValue });\n    }\n    // Drop anything else (numbers, null, nested objects/arrays) to match the\n    // permissive normalization performed by migration 026.\n  }\n  return entries;\n}\n\nfunction canonicalSelectionsToLegacyObject(\n  selections: ReadonlyArray<ProviderOptionSelection>,\n): Record<string, string | boolean> {\n  const out: Record<string, string | boolean> = {};\n  for (const { id, value } of selections) {\n    out[id] = value;\n  }\n  return out;\n}\n\nexport const ModelCapabilities = Schema.Struct({\n  optionDescriptors: Schema.optional(Schema.Array(ProviderOptionDescriptor)),\n});\nexport type ModelCapabilities = typeof ModelCapabilities.Type;\n\nconst CODEX_DRIVER_KIND = ProviderDriverKind.make(\"codex\");\nconst CLAUDE_DRIVER_KIND = ProviderDriverKind.make(\"claudeAgent\");\nconst CURSOR_DRIVER_KIND = ProviderDriverKind.make(\"cursor\");\nconst GROK_DRIVER_KIND = ProviderDriverKind.make(\"grok\");\nconst OPENCODE_DRIVER_KIND = ProviderDriverKind.make(\"opencode\");\n\nexport const DEFAULT_MODEL = \"gpt-5.6-sol\";\n\n/**\n * Codex default-model preference, most preferred first. The provider snapshot\n * marks the first available built-in model in this list as the default and\n * falls back to Codex's own `isDefault` flag when none are available.\n */\nexport const PREFERRED_DEFAULT_CODEX_MODELS: ReadonlyArray<string> = [\n  \"gpt-5.6-sol\",\n  \"gpt-5.6-terra\",\n];\nexport const DEFAULT_GIT_TEXT_GENERATION_MODEL = \"gpt-5.6-luna\";\nexport const DEFAULT_GIT_TEXT_GENERATION_REASONING_EFFORT = \"low\";\n\nexport const DEFAULT_MODEL_BY_PROVIDER: Partial<Record<ProviderDriverKind, string>> = {\n  [CODEX_DRIVER_KIND]: DEFAULT_MODEL,\n  [CLAUDE_DRIVER_KIND]: \"claude-sonnet-4-6\",\n  [CURSOR_DRIVER_KIND]: \"auto\",\n  [GROK_DRIVER_KIND]: \"grok-build\",\n  [OPENCODE_DRIVER_KIND]: \"openai/gpt-5\",\n};\n\n/** Per-provider text generation model defaults. */\nexport const DEFAULT_GIT_TEXT_GENERATION_MODEL_BY_PROVIDER: Partial<\n  Record<ProviderDriverKind, string>\n> = {\n  [CODEX_DRIVER_KIND]: DEFAULT_GIT_TEXT_GENERATION_MODEL,\n  [CLAUDE_DRIVER_KIND]: \"claude-haiku-4-5\",\n  [CURSOR_DRIVER_KIND]: \"composer-2\",\n  [OPENCODE_DRIVER_KIND]: \"openai/gpt-5\",\n};\n\nexport const MODEL_SLUG_ALIASES_BY_PROVIDER: Partial<\n  Record<ProviderDriverKind, Record<string, string>>\n> = {\n  [CODEX_DRIVER_KIND]: {\n    \"5.6-sol\": \"gpt-5.6-sol\",\n    \"5.6-terra\": \"gpt-5.6-terra\",\n    \"5.6-luna\": \"gpt-5.6-luna\",\n    \"gpt-5-codex\": \"gpt-5.4\",\n    \"5.4\": \"gpt-5.4\",\n    \"5.3\": \"gpt-5.3-codex\",\n    \"gpt-5.3\": \"gpt-5.3-codex\",\n    \"5.3-spark\": \"gpt-5.3-codex-spark\",\n    \"gpt-5.3-spark\": \"gpt-5.3-codex-spark\",\n  },\n  [CLAUDE_DRIVER_KIND]: {\n    fable: \"claude-fable-5\",\n    \"fable-5\": \"claude-fable-5\",\n    \"claude-fable\": \"claude-fable-5\",\n    opus: \"claude-opus-5\",\n    \"opus-5\": \"claude-opus-5\",\n    \"opus-4.8\": \"claude-opus-4-8\",\n    \"claude-opus-4.8\": \"claude-opus-4-8\",\n    \"opus-4.7\": \"claude-opus-4-7\",\n    \"claude-opus-4.7\": \"claude-opus-4-7\",\n    \"opus-4.6\": \"claude-opus-4-6\",\n    \"claude-opus-4.6\": \"claude-opus-4-6\",\n    \"claude-opus-4-6-20251117\": \"claude-opus-4-6\",\n    sonnet: \"claude-sonnet-4-6\",\n    \"sonnet-4.6\": \"claude-sonnet-4-6\",\n    \"claude-sonnet-4.6\": \"claude-sonnet-4-6\",\n    \"claude-sonnet-4-6-20251117\": \"claude-sonnet-4-6\",\n    haiku: \"claude-haiku-4-5\",\n    \"haiku-4.5\": \"claude-haiku-4-5\",\n    \"claude-haiku-4.5\": \"claude-haiku-4-5\",\n    \"claude-haiku-4-5-20251001\": \"claude-haiku-4-5\",\n  },\n  [CURSOR_DRIVER_KIND]: {\n    composer: \"composer-2\",\n    \"composer-1.5\": \"composer-1.5\",\n    \"composer-1\": \"composer-1.5\",\n    \"opus-4.6-thinking\": \"claude-opus-4-6\",\n    \"opus-4.6\": \"claude-opus-4-6\",\n    \"sonnet-4.6-thinking\": \"claude-sonnet-4-6\",\n    \"sonnet-4.6\": \"claude-sonnet-4-6\",\n    \"opus-4.5-thinking\": \"claude-opus-4-5\",\n    \"opus-4.5\": \"claude-opus-4-5\",\n  },\n  [OPENCODE_DRIVER_KIND]: {},\n};\n\n// ── Provider display names ────────────────────────────────────────────\n\nexport const PROVIDER_DISPLAY_NAMES: Partial<Record<ProviderDriverKind, string>> = {\n  [CODEX_DRIVER_KIND]: \"Codex\",\n  [CLAUDE_DRIVER_KIND]: \"Claude\",\n  [CURSOR_DRIVER_KIND]: \"Cursor\",\n  [GROK_DRIVER_KIND]: \"Grok\",\n  [OPENCODE_DRIVER_KIND]: \"OpenCode\",\n};\n","import * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\nimport * as Struct from \"effect/Struct\";\nimport { ProviderOptionSelections } from \"./model.ts\";\nimport { RepositoryIdentity } from \"./environment.ts\";\nimport {\n  ApprovalRequestId,\n  CheckpointRef,\n  CommandId,\n  EventId,\n  IsoDateTime,\n  MessageId,\n  NonNegativeInt,\n  PositiveInt,\n  ProjectId,\n  ProviderItemId,\n  ThreadId,\n  TrimmedNonEmptyString,\n  TurnId,\n} from \"./baseSchemas.ts\";\nimport { ProviderInstanceId } from \"./providerInstance.ts\";\n\nexport const ORCHESTRATION_WS_METHODS = {\n  dispatchCommand: \"orchestration.dispatchCommand\",\n  getTurnDiff: \"orchestration.getTurnDiff\",\n  getFullThreadDiff: \"orchestration.getFullThreadDiff\",\n  probeSync: \"orchestration.probeSync\",\n  replayEvents: \"orchestration.replayEvents\",\n  reconcileThreadDetail: \"orchestration.reconcileThreadDetail\",\n  getArchivedShellSnapshot: \"orchestration.getArchivedShellSnapshot\",\n  getThreadDetailPage: \"orchestration.getThreadDetailPage\",\n  subscribeShell: \"orchestration.subscribeShell\",\n  subscribeThread: \"orchestration.subscribeThread\",\n} as const;\n\nexport const ProviderApprovalPolicy = Schema.Literals([\n  \"untrusted\",\n  \"on-failure\",\n  \"on-request\",\n  \"never\",\n]);\nexport type ProviderApprovalPolicy = typeof ProviderApprovalPolicy.Type;\nexport const ProviderSandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\nexport type ProviderSandboxMode = typeof ProviderSandboxMode.Type;\n\n/**\n * `ModelSelection` — selection of a model on a configured provider instance.\n *\n * The routing key is `instanceId` (a user-defined slug identifying one\n * configured provider instance). Drivers, credentials, working-directory\n * bindings, and any other per-instance state are recovered from the\n * runtime registry via the instance id.\n *\n * Wire legacy: persisted selections produced before the driver/instance\n * split carried a `provider: <driver-id>` field instead. The schema absorbs\n * that shape via a pre-decoding transform — `{provider, model}` is promoted\n * to `{instanceId: defaultInstanceIdForDriver(provider), model}`. No\n * post-decode compatibility code lives in the runtime; the transform is the\n * only compat surface.\n */\nconst ModelSelectionWire = Schema.Struct({\n  instanceId: ProviderInstanceId,\n  model: TrimmedNonEmptyString,\n  options: Schema.optionalKey(ProviderOptionSelections),\n});\n\n// Source shape for persisted legacy payloads. Fields are typed as\n// `Schema.Unknown` so malformed drafts still make it into the transform and\n// fail validation through the target schema (with proper error messages)\n// rather than at the source-struct layer where the error is less actionable.\nconst ModelSelectionSource = Schema.Struct({\n  provider: Schema.optional(Schema.Unknown),\n  instanceId: Schema.optional(Schema.Unknown),\n  model: Schema.Unknown,\n  options: Schema.optional(Schema.Unknown),\n});\n\nexport const ModelSelection = ModelSelectionSource.pipe(\n  Schema.decodeTo(\n    ModelSelectionWire,\n    SchemaTransformation.transformOrFail({\n      decode: (raw) => {\n        // Resolve the routing key: prefer an explicit `instanceId`; fall\n        // back to promoting the legacy `provider` slug (the canonical\n        // `defaultInstanceIdForDriver` mapping) so persisted rollout-era\n        // payloads decode without data loss. The target schema brands the\n        // string as `ProviderInstanceId`.\n        const instanceIdSource =\n          raw.instanceId !== undefined\n            ? raw.instanceId\n            : typeof raw.provider === \"string\"\n              ? raw.provider\n              : undefined;\n        const base: Record<string, unknown> = {\n          instanceId: instanceIdSource,\n          model: raw.model,\n        };\n        if (raw.options !== undefined) base.options = raw.options;\n        return Effect.succeed(base as typeof ModelSelectionWire.Encoded);\n      },\n      encode: (value) => {\n        const base: Record<string, unknown> = {\n          model: value.model,\n          instanceId: value.instanceId,\n        };\n        if (value.options !== undefined) base.options = value.options;\n        return Effect.succeed(base as typeof ModelSelectionSource.Encoded);\n      },\n    }),\n  ),\n);\nexport type ModelSelection = typeof ModelSelection.Type;\n\nexport const RuntimeMode = Schema.Literals([\n  \"approval-required\",\n  \"auto-accept-edits\",\n  \"full-access\",\n]);\nexport type RuntimeMode = typeof RuntimeMode.Type;\nexport const DEFAULT_RUNTIME_MODE: RuntimeMode = \"full-access\";\nexport const ProviderInteractionMode = Schema.Literals([\"default\", \"plan\"]);\nexport type ProviderInteractionMode = typeof ProviderInteractionMode.Type;\nexport const DEFAULT_PROVIDER_INTERACTION_MODE: ProviderInteractionMode = \"default\";\nexport const ProviderRequestKind = Schema.Literals([\"command\", \"file-read\", \"file-change\"]);\nexport type ProviderRequestKind = typeof ProviderRequestKind.Type;\nexport const AssistantDeliveryMode = Schema.Literals([\"buffered\", \"streaming\"]);\nexport type AssistantDeliveryMode = typeof AssistantDeliveryMode.Type;\nexport const ProviderApprovalDecision = Schema.Literals([\n  \"accept\",\n  \"acceptForSession\",\n  \"decline\",\n  \"cancel\",\n]);\nexport type ProviderApprovalDecision = typeof ProviderApprovalDecision.Type;\nexport const ProviderUserInputAnswers = Schema.Record(Schema.String, Schema.Unknown);\nexport type ProviderUserInputAnswers = typeof ProviderUserInputAnswers.Type;\n\nexport const PROVIDER_SEND_TURN_MAX_INPUT_CHARS = 120_000;\nexport const PROVIDER_SEND_TURN_MAX_ATTACHMENTS = 8;\nexport const PROVIDER_SEND_TURN_MAX_IMAGE_BYTES = 10 * 1024 * 1024;\nexport const PROVIDER_SEND_TURN_MAX_PDF_BYTES = 10 * 1024 * 1024;\nexport const CHAT_IMAGE_ATTACHMENT_MAX_BYTES = 64 * 1024 * 1024;\nconst PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS = 14_000_000;\nexport const PROVIDER_SEND_TURN_MAX_PDF_DATA_URL_CHARS =\n  PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS;\nconst CHAT_ATTACHMENT_ID_MAX_CHARS = 128;\n// Correlation id is command id by design in this model.\nexport const CorrelationId = CommandId;\nexport type CorrelationId = typeof CorrelationId.Type;\n\nconst ChatAttachmentId = TrimmedNonEmptyString.check(\n  Schema.isMaxLength(CHAT_ATTACHMENT_ID_MAX_CHARS),\n  Schema.isPattern(/^[a-z0-9_-]+$/i),\n);\nexport type ChatAttachmentId = typeof ChatAttachmentId.Type;\n\nexport const ChatImageAttachment = Schema.Struct({\n  type: Schema.Literal(\"image\"),\n  id: ChatAttachmentId,\n  name: TrimmedNonEmptyString.check(Schema.isMaxLength(255)),\n  mimeType: TrimmedNonEmptyString.check(Schema.isMaxLength(100), Schema.isPattern(/^image\\//i)),\n  sizeBytes: NonNegativeInt.check(Schema.isLessThanOrEqualTo(CHAT_IMAGE_ATTACHMENT_MAX_BYTES)),\n});\nexport type ChatImageAttachment = typeof ChatImageAttachment.Type;\n\nexport const ChatPdfAttachment = Schema.Struct({\n  type: Schema.Literal(\"pdf\"),\n  id: ChatAttachmentId,\n  name: TrimmedNonEmptyString.check(Schema.isMaxLength(255)),\n  mimeType: Schema.Literal(\"application/pdf\"),\n  sizeBytes: NonNegativeInt.check(Schema.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_PDF_BYTES)),\n});\nexport type ChatPdfAttachment = typeof ChatPdfAttachment.Type;\n\nexport const UploadChatImageAttachment = Schema.Struct({\n  type: Schema.Literal(\"image\"),\n  name: TrimmedNonEmptyString.check(Schema.isMaxLength(255)),\n  mimeType: TrimmedNonEmptyString.check(Schema.isMaxLength(100), Schema.isPattern(/^image\\//i)),\n  sizeBytes: NonNegativeInt.check(Schema.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES)),\n  dataUrl: TrimmedNonEmptyString.check(\n    Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS),\n  ),\n});\nexport type UploadChatImageAttachment = typeof UploadChatImageAttachment.Type;\n\nexport const UploadChatPdfAttachment = Schema.Struct({\n  type: Schema.Literal(\"pdf\"),\n  name: TrimmedNonEmptyString.check(Schema.isMaxLength(255)),\n  mimeType: Schema.Literal(\"application/pdf\"),\n  sizeBytes: NonNegativeInt.check(Schema.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_PDF_BYTES)),\n  dataUrl: TrimmedNonEmptyString.check(\n    Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_PDF_DATA_URL_CHARS),\n  ),\n});\nexport type UploadChatPdfAttachment = typeof UploadChatPdfAttachment.Type;\n\nexport const ChatAttachment = Schema.Union([ChatImageAttachment, ChatPdfAttachment]);\nexport type ChatAttachment = typeof ChatAttachment.Type;\nexport const UploadChatAttachment = Schema.Union([\n  UploadChatImageAttachment,\n  UploadChatPdfAttachment,\n]);\nexport type UploadChatAttachment = typeof UploadChatAttachment.Type;\n\nexport const ProjectScriptIcon = Schema.Literals([\n  \"play\",\n  \"test\",\n  \"lint\",\n  \"configure\",\n  \"build\",\n  \"debug\",\n]);\nexport type ProjectScriptIcon = typeof ProjectScriptIcon.Type;\n\nexport const ProjectScript = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  command: TrimmedNonEmptyString,\n  icon: ProjectScriptIcon,\n  runOnWorktreeCreate: Schema.Boolean,\n});\nexport type ProjectScript = typeof ProjectScript.Type;\n\nexport const OrchestrationProject = Schema.Struct({\n  id: ProjectId,\n  title: TrimmedNonEmptyString,\n  workspaceRoot: TrimmedNonEmptyString,\n  repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)),\n  defaultModelSelection: Schema.NullOr(ModelSelection),\n  scripts: Schema.Array(ProjectScript),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n  deletedAt: Schema.NullOr(IsoDateTime),\n});\nexport type OrchestrationProject = typeof OrchestrationProject.Type;\n\nexport const OrchestrationMessageRole = Schema.Literals([\"user\", \"assistant\", \"system\"]);\nexport type OrchestrationMessageRole = typeof OrchestrationMessageRole.Type;\n\nexport const OrchestrationMessage = Schema.Struct({\n  id: MessageId,\n  role: OrchestrationMessageRole,\n  text: Schema.String,\n  attachments: Schema.optional(Schema.Array(ChatAttachment)),\n  turnId: Schema.NullOr(TurnId),\n  streaming: Schema.Boolean,\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationMessage = typeof OrchestrationMessage.Type;\n\nexport const OrchestrationProposedPlanId = TrimmedNonEmptyString;\nexport type OrchestrationProposedPlanId = typeof OrchestrationProposedPlanId.Type;\n\nexport const OrchestrationProposedPlan = Schema.Struct({\n  id: OrchestrationProposedPlanId,\n  turnId: Schema.NullOr(TurnId),\n  planMarkdown: TrimmedNonEmptyString,\n  implementedAt: Schema.NullOr(IsoDateTime).pipe(Schema.withDecodingDefault(Effect.succeed(null))),\n  implementationThreadId: Schema.NullOr(ThreadId).pipe(\n    Schema.withDecodingDefault(Effect.succeed(null)),\n  ),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationProposedPlan = typeof OrchestrationProposedPlan.Type;\n\nconst SourceProposedPlanReference = Schema.Struct({\n  threadId: ThreadId,\n  planId: OrchestrationProposedPlanId,\n});\n\nconst RecoveryConfirmationRequired = Schema.Boolean.pipe(\n  Schema.withDecodingDefaultKey(Effect.succeed(false)),\n  Schema.withConstructorDefault(Effect.succeed(false)),\n);\n\nexport const OrchestrationQueuedTurn = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  role: Schema.Literal(\"user\"),\n  text: Schema.String,\n  attachments: Schema.Array(ChatAttachment),\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_RUNTIME_MODE))),\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  steering: Schema.optional(\n    Schema.Struct({\n      expectedTurnId: TurnId,\n      requestedAt: IsoDateTime,\n    }),\n  ),\n  recoveryConfirmationRequired: RecoveryConfirmationRequired,\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationQueuedTurn = typeof OrchestrationQueuedTurn.Type;\n\nexport const OrchestrationSessionStatus = Schema.Literals([\n  \"idle\",\n  \"starting\",\n  \"running\",\n  \"ready\",\n  \"interrupted\",\n  \"stopped\",\n  \"error\",\n]);\nexport type OrchestrationSessionStatus = typeof OrchestrationSessionStatus.Type;\n\nexport const OrchestrationSession = Schema.Struct({\n  threadId: ThreadId,\n  status: OrchestrationSessionStatus,\n  providerName: Schema.NullOr(TrimmedNonEmptyString),\n  providerInstanceId: Schema.optional(ProviderInstanceId),\n  runtimeMode: RuntimeMode.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_RUNTIME_MODE))),\n  activeTurnId: Schema.NullOr(TurnId),\n  lastError: Schema.NullOr(TrimmedNonEmptyString),\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationSession = typeof OrchestrationSession.Type;\n\nexport const OrchestrationCheckpointFile = Schema.Struct({\n  path: TrimmedNonEmptyString,\n  kind: TrimmedNonEmptyString,\n  additions: NonNegativeInt,\n  deletions: NonNegativeInt,\n});\nexport type OrchestrationCheckpointFile = typeof OrchestrationCheckpointFile.Type;\n\nexport const OrchestrationCheckpointStatus = Schema.Literals([\"ready\", \"missing\", \"error\"]);\nexport type OrchestrationCheckpointStatus = typeof OrchestrationCheckpointStatus.Type;\n\nexport const OrchestrationCheckpointAttribution = Schema.Literals([\n  \"edit-snapshots\",\n  \"touched-paths\",\n  \"unattributed\",\n]);\nexport type OrchestrationCheckpointAttribution = typeof OrchestrationCheckpointAttribution.Type;\n\nexport const OrchestrationCheckpointSummary = Schema.Struct({\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n  checkpointRef: CheckpointRef,\n  status: OrchestrationCheckpointStatus,\n  files: Schema.Array(OrchestrationCheckpointFile),\n  attribution: OrchestrationCheckpointAttribution.pipe(\n    Schema.withDecodingDefault(Effect.succeed(\"unattributed\")),\n  ),\n  assistantMessageId: Schema.NullOr(MessageId),\n  completedAt: IsoDateTime,\n});\nexport type OrchestrationCheckpointSummary = typeof OrchestrationCheckpointSummary.Type;\n\nexport const OrchestrationThreadActivityTone = Schema.Literals([\n  \"info\",\n  \"tool\",\n  \"approval\",\n  \"error\",\n]);\nexport type OrchestrationThreadActivityTone = typeof OrchestrationThreadActivityTone.Type;\n\nexport const OrchestrationThreadActivity = Schema.Struct({\n  id: EventId,\n  tone: OrchestrationThreadActivityTone,\n  kind: TrimmedNonEmptyString,\n  summary: TrimmedNonEmptyString,\n  payload: Schema.Unknown,\n  turnId: Schema.NullOr(TurnId),\n  sequence: Schema.optional(NonNegativeInt),\n  createdAt: IsoDateTime,\n});\nexport type OrchestrationThreadActivity = typeof OrchestrationThreadActivity.Type;\n\nconst OrchestrationLatestTurnState = Schema.Literals([\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"error\",\n]);\nexport type OrchestrationLatestTurnState = typeof OrchestrationLatestTurnState.Type;\n\nexport const OrchestrationLatestTurn = Schema.Struct({\n  turnId: TurnId,\n  state: OrchestrationLatestTurnState,\n  requestedAt: IsoDateTime,\n  startedAt: Schema.NullOr(IsoDateTime),\n  completedAt: Schema.NullOr(IsoDateTime),\n  assistantMessageId: Schema.NullOr(MessageId),\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n});\nexport type OrchestrationLatestTurn = typeof OrchestrationLatestTurn.Type;\n\nconst DefaultedParentThreadId = Schema.NullOr(ThreadId).pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(null)),\n  Schema.withConstructorDefault(Effect.succeed(null)),\n);\nconst DefaultedCreatedByThreadId = Schema.NullOr(ThreadId).pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(null)),\n  Schema.withConstructorDefault(Effect.succeed(null)),\n);\nconst DefaultedSubagentText = Schema.NullOr(TrimmedNonEmptyString).pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(null)),\n  Schema.withConstructorDefault(Effect.succeed(null)),\n);\nconst DefaultedHiddenFromThreadList = Schema.Boolean.pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(false)),\n  Schema.withConstructorDefault(Effect.succeed(false)),\n);\n\nexport const OrchestrationThread = Schema.Struct({\n  id: ThreadId,\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  modelSelection: ModelSelection,\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  parentThreadId: DefaultedParentThreadId,\n  createdByThreadId: DefaultedCreatedByThreadId,\n  subagentKind: DefaultedSubagentText,\n  subagentNickname: DefaultedSubagentText,\n  subagentRole: DefaultedSubagentText,\n  hiddenFromThreadList: DefaultedHiddenFromThreadList,\n  branch: Schema.NullOr(TrimmedNonEmptyString),\n  worktreePath: Schema.NullOr(TrimmedNonEmptyString),\n  latestTurn: Schema.NullOr(OrchestrationLatestTurn),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n  archivedAt: Schema.NullOr(IsoDateTime).pipe(Schema.withDecodingDefault(Effect.succeed(null))),\n  deletedAt: Schema.NullOr(IsoDateTime),\n  messages: Schema.Array(OrchestrationMessage),\n  queuedTurns: Schema.Array(OrchestrationQueuedTurn).pipe(\n    Schema.withDecodingDefault(Effect.succeed([])),\n  ),\n  proposedPlans: Schema.Array(OrchestrationProposedPlan).pipe(\n    Schema.withDecodingDefault(Effect.succeed([])),\n  ),\n  activities: Schema.Array(OrchestrationThreadActivity),\n  checkpoints: Schema.Array(OrchestrationCheckpointSummary),\n  session: Schema.NullOr(OrchestrationSession),\n});\nexport type OrchestrationThread = typeof OrchestrationThread.Type;\n\nexport const OrchestrationReadModel = Schema.Struct({\n  snapshotSequence: NonNegativeInt,\n  projects: Schema.Array(OrchestrationProject),\n  threads: Schema.Array(OrchestrationThread),\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationReadModel = typeof OrchestrationReadModel.Type;\n\nexport const OrchestrationProjectShell = Schema.Struct({\n  id: ProjectId,\n  title: TrimmedNonEmptyString,\n  workspaceRoot: TrimmedNonEmptyString,\n  repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)),\n  defaultModelSelection: Schema.NullOr(ModelSelection),\n  scripts: Schema.Array(ProjectScript),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationProjectShell = typeof OrchestrationProjectShell.Type;\n\nexport const OrchestrationThreadShell = Schema.Struct({\n  id: ThreadId,\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  modelSelection: ModelSelection,\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  parentThreadId: DefaultedParentThreadId,\n  createdByThreadId: DefaultedCreatedByThreadId,\n  subagentKind: DefaultedSubagentText,\n  subagentNickname: DefaultedSubagentText,\n  subagentRole: DefaultedSubagentText,\n  hiddenFromThreadList: DefaultedHiddenFromThreadList,\n  branch: Schema.NullOr(TrimmedNonEmptyString),\n  worktreePath: Schema.NullOr(TrimmedNonEmptyString),\n  latestTurn: Schema.NullOr(OrchestrationLatestTurn),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n  archivedAt: Schema.NullOr(IsoDateTime).pipe(Schema.withDecodingDefault(Effect.succeed(null))),\n  session: Schema.NullOr(OrchestrationSession),\n  latestUserMessageAt: Schema.NullOr(IsoDateTime),\n  hasPendingApprovals: Schema.Boolean,\n  hasPendingUserInput: Schema.Boolean,\n  hasActionableProposedPlan: Schema.Boolean,\n});\nexport type OrchestrationThreadShell = typeof OrchestrationThreadShell.Type;\n\nexport const OrchestrationShellSnapshot = Schema.Struct({\n  snapshotSequence: NonNegativeInt,\n  projects: Schema.Array(OrchestrationProjectShell),\n  threads: Schema.Array(OrchestrationThreadShell),\n  updatedAt: IsoDateTime,\n});\nexport type OrchestrationShellSnapshot = typeof OrchestrationShellSnapshot.Type;\n\nexport const OrchestrationShellStreamEvent = Schema.Union([\n  Schema.Struct({\n    kind: Schema.Literal(\"project-upserted\"),\n    sequence: NonNegativeInt,\n    project: OrchestrationProjectShell,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"project-removed\"),\n    sequence: NonNegativeInt,\n    projectId: ProjectId,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"thread-upserted\"),\n    sequence: NonNegativeInt,\n    thread: OrchestrationThreadShell,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"thread-removed\"),\n    sequence: NonNegativeInt,\n    threadId: ThreadId,\n  }),\n]);\nexport type OrchestrationShellStreamEvent = typeof OrchestrationShellStreamEvent.Type;\n\nexport const OrchestrationShellStreamItem = Schema.Union([\n  Schema.Struct({\n    kind: Schema.Literal(\"snapshot\"),\n    snapshot: OrchestrationShellSnapshot,\n  }),\n  OrchestrationShellStreamEvent,\n]);\nexport type OrchestrationShellStreamItem = typeof OrchestrationShellStreamItem.Type;\n\nexport const ORCHESTRATION_THREAD_DETAIL_PAGE_LIMIT_MAX = 500;\n\nconst OrchestrationThreadDetailPageLimit = PositiveInt.check(\n  Schema.isLessThanOrEqualTo(ORCHESTRATION_THREAD_DETAIL_PAGE_LIMIT_MAX),\n);\n\nexport const OrchestrationThreadDetailPageCursor = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  createdAt: IsoDateTime,\n  sequence: Schema.optional(Schema.NullOr(NonNegativeInt)),\n  checkpointTurnCount: Schema.optional(NonNegativeInt),\n});\nexport type OrchestrationThreadDetailPageCursor = typeof OrchestrationThreadDetailPageCursor.Type;\n\nexport const OrchestrationThreadDetailPageCursors = Schema.Struct({\n  messages: Schema.optional(OrchestrationThreadDetailPageCursor),\n  proposedPlans: Schema.optional(OrchestrationThreadDetailPageCursor),\n  activities: Schema.optional(OrchestrationThreadDetailPageCursor),\n  checkpoints: Schema.optional(OrchestrationThreadDetailPageCursor),\n});\nexport type OrchestrationThreadDetailPageCursors = typeof OrchestrationThreadDetailPageCursors.Type;\n\nexport const OrchestrationThreadDetailPageLimits = Schema.Struct({\n  messages: Schema.optional(OrchestrationThreadDetailPageLimit),\n  proposedPlans: Schema.optional(OrchestrationThreadDetailPageLimit),\n  activities: Schema.optional(OrchestrationThreadDetailPageLimit),\n  checkpoints: Schema.optional(OrchestrationThreadDetailPageLimit),\n});\nexport type OrchestrationThreadDetailPageLimits = typeof OrchestrationThreadDetailPageLimits.Type;\n\nexport const OrchestrationThreadDetailPageRequest = Schema.Struct({\n  before: Schema.optional(OrchestrationThreadDetailPageCursors),\n  limits: Schema.optional(OrchestrationThreadDetailPageLimits),\n});\nexport type OrchestrationThreadDetailPageRequest = typeof OrchestrationThreadDetailPageRequest.Type;\n\nconst OrchestrationThreadDetailCollectionPageInfo = Schema.Struct({\n  hasMoreBefore: Schema.Boolean,\n  startCursor: Schema.NullOr(OrchestrationThreadDetailPageCursor),\n});\n\nconst emptyThreadDetailCollectionPageInfo = {\n  hasMoreBefore: false,\n  startCursor: null,\n} as const;\n\nexport const EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO = {\n  messages: emptyThreadDetailCollectionPageInfo,\n  proposedPlans: emptyThreadDetailCollectionPageInfo,\n  activities: emptyThreadDetailCollectionPageInfo,\n  checkpoints: emptyThreadDetailCollectionPageInfo,\n} as const;\n\nexport const OrchestrationThreadDetailPageInfo = Schema.Struct({\n  messages: OrchestrationThreadDetailCollectionPageInfo,\n  proposedPlans: OrchestrationThreadDetailCollectionPageInfo,\n  activities: OrchestrationThreadDetailCollectionPageInfo,\n  checkpoints: OrchestrationThreadDetailCollectionPageInfo,\n});\nexport type OrchestrationThreadDetailPageInfo = typeof OrchestrationThreadDetailPageInfo.Type;\n\nexport const OrchestrationSubscribeThreadInput = Schema.Struct({\n  threadId: ThreadId,\n  page: Schema.optional(OrchestrationThreadDetailPageRequest),\n});\nexport type OrchestrationSubscribeThreadInput = typeof OrchestrationSubscribeThreadInput.Type;\n\nexport const OrchestrationGetThreadDetailPageInput = Schema.Struct({\n  threadId: ThreadId,\n  page: OrchestrationThreadDetailPageRequest,\n});\nexport type OrchestrationGetThreadDetailPageInput =\n  typeof OrchestrationGetThreadDetailPageInput.Type;\n\nexport const OrchestrationThreadDetailSnapshot = Schema.Struct({\n  snapshotSequence: NonNegativeInt,\n  thread: OrchestrationThread,\n  pageInfo: OrchestrationThreadDetailPageInfo.pipe(\n    Schema.withDecodingDefault(Effect.succeed(EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO)),\n  ),\n});\nexport type OrchestrationThreadDetailSnapshot = typeof OrchestrationThreadDetailSnapshot.Type;\n\nexport const OrchestrationThreadDetailFingerprint = Schema.Struct({\n  version: Schema.Literal(1),\n  value: TrimmedNonEmptyString,\n});\nexport type OrchestrationThreadDetailFingerprint = typeof OrchestrationThreadDetailFingerprint.Type;\n\nexport const ProjectCreateCommand = Schema.Struct({\n  type: Schema.Literal(\"project.create\"),\n  commandId: CommandId,\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  workspaceRoot: TrimmedNonEmptyString,\n  createWorkspaceRootIfMissing: Schema.optional(Schema.Boolean),\n  defaultModelSelection: Schema.optional(Schema.NullOr(ModelSelection)),\n  createdAt: IsoDateTime,\n});\n\nconst ProjectMetaUpdateCommand = Schema.Struct({\n  type: Schema.Literal(\"project.meta.update\"),\n  commandId: CommandId,\n  projectId: ProjectId,\n  title: Schema.optional(TrimmedNonEmptyString),\n  workspaceRoot: Schema.optional(TrimmedNonEmptyString),\n  defaultModelSelection: Schema.optional(Schema.NullOr(ModelSelection)),\n  scripts: Schema.optional(Schema.Array(ProjectScript)),\n});\n\nconst ProjectDeleteCommand = Schema.Struct({\n  type: Schema.Literal(\"project.delete\"),\n  commandId: CommandId,\n  projectId: ProjectId,\n  force: Schema.optional(Schema.Boolean),\n});\n\nconst ThreadCreateCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.create\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  modelSelection: ModelSelection,\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  parentThreadId: DefaultedParentThreadId,\n  createdByThreadId: DefaultedCreatedByThreadId,\n  subagentKind: DefaultedSubagentText,\n  subagentNickname: DefaultedSubagentText,\n  subagentRole: DefaultedSubagentText,\n  hiddenFromThreadList: DefaultedHiddenFromThreadList,\n  branch: Schema.NullOr(TrimmedNonEmptyString),\n  worktreePath: Schema.NullOr(TrimmedNonEmptyString),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadDeleteCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.delete\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n});\n\nconst ThreadArchiveCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.archive\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n});\n\nconst ThreadUnarchiveCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.unarchive\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n});\n\nconst ThreadMetaUpdateCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.meta.update\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  title: Schema.optional(TrimmedNonEmptyString),\n  modelSelection: Schema.optional(ModelSelection),\n  branch: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  worktreePath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n});\n\nconst ThreadRuntimeModeSetCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.runtime-mode.set\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  runtimeMode: RuntimeMode,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadInteractionModeSetCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.interaction-mode.set\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  interactionMode: ProviderInteractionMode,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadTurnStartBootstrapCreateThread = Schema.Struct({\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  modelSelection: ModelSelection,\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode,\n  branch: Schema.NullOr(TrimmedNonEmptyString),\n  worktreePath: Schema.NullOr(TrimmedNonEmptyString),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadTurnStartBootstrapPrepareWorktree = Schema.Struct({\n  projectCwd: TrimmedNonEmptyString,\n  baseBranch: TrimmedNonEmptyString,\n  branch: Schema.optional(TrimmedNonEmptyString),\n});\n\nconst ThreadTurnStartBootstrap = Schema.Struct({\n  createThread: Schema.optional(ThreadTurnStartBootstrapCreateThread),\n  prepareWorktree: Schema.optional(ThreadTurnStartBootstrapPrepareWorktree),\n  runSetupScript: Schema.optional(Schema.Boolean),\n});\n\nexport type ThreadTurnStartBootstrap = typeof ThreadTurnStartBootstrap.Type;\n\nexport const ThreadTurnStartCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.start\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  message: Schema.Struct({\n    messageId: MessageId,\n    role: Schema.Literal(\"user\"),\n    text: Schema.String,\n    attachments: Schema.Array(ChatAttachment),\n  }),\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_RUNTIME_MODE))),\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  bootstrap: Schema.optional(ThreadTurnStartBootstrap),\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  createdAt: IsoDateTime,\n});\n\nconst ClientThreadTurnStartCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.start\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  message: Schema.Struct({\n    messageId: MessageId,\n    role: Schema.Literal(\"user\"),\n    text: Schema.String,\n    attachments: Schema.Array(UploadChatAttachment),\n  }),\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode,\n  bootstrap: Schema.optional(ThreadTurnStartBootstrap),\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  createdAt: IsoDateTime,\n});\n\nexport const ThreadTurnQueueCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.queue\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  message: Schema.Struct({\n    messageId: MessageId,\n    role: Schema.Literal(\"user\"),\n    text: Schema.String,\n    attachments: Schema.Array(ChatAttachment),\n  }),\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_RUNTIME_MODE))),\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  createdAt: IsoDateTime,\n});\nexport type ThreadTurnQueueCommand = typeof ThreadTurnQueueCommand.Type;\n\nconst ClientThreadTurnQueueCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.queue\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  message: Schema.Struct({\n    messageId: MessageId,\n    role: Schema.Literal(\"user\"),\n    text: Schema.String,\n    attachments: Schema.Array(UploadChatAttachment),\n  }),\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode,\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnCancelCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.cancel\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnConfirmCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.confirm\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnUpdateCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.update\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  text: Schema.String,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnSteerCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.steer\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  expectedTurnId: TurnId,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadTurnInterruptCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.interrupt\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  turnId: Schema.optional(TurnId),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadApprovalRespondCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.approval.respond\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  requestId: ApprovalRequestId,\n  decision: ProviderApprovalDecision,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadUserInputRespondCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.user-input.respond\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  requestId: ApprovalRequestId,\n  answers: ProviderUserInputAnswers,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadCheckpointRevertCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.checkpoint.revert\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  turnCount: NonNegativeInt,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadSessionStopCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.session.stop\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  createdAt: IsoDateTime,\n});\n\nconst DispatchableClientOrchestrationCommand = Schema.Union([\n  ProjectCreateCommand,\n  ProjectMetaUpdateCommand,\n  ProjectDeleteCommand,\n  ThreadCreateCommand,\n  ThreadDeleteCommand,\n  ThreadArchiveCommand,\n  ThreadUnarchiveCommand,\n  ThreadMetaUpdateCommand,\n  ThreadRuntimeModeSetCommand,\n  ThreadInteractionModeSetCommand,\n  ThreadTurnStartCommand,\n  ThreadTurnQueueCommand,\n  ThreadQueuedTurnUpdateCommand,\n  ThreadQueuedTurnCancelCommand,\n  ThreadQueuedTurnConfirmCommand,\n  ThreadQueuedTurnSteerCommand,\n  ThreadTurnInterruptCommand,\n  ThreadApprovalRespondCommand,\n  ThreadUserInputRespondCommand,\n  ThreadCheckpointRevertCommand,\n  ThreadSessionStopCommand,\n]);\nexport type DispatchableClientOrchestrationCommand =\n  typeof DispatchableClientOrchestrationCommand.Type;\n\nexport const ClientOrchestrationCommand = Schema.Union([\n  ProjectCreateCommand,\n  ProjectMetaUpdateCommand,\n  ProjectDeleteCommand,\n  ThreadCreateCommand,\n  ThreadDeleteCommand,\n  ThreadArchiveCommand,\n  ThreadUnarchiveCommand,\n  ThreadMetaUpdateCommand,\n  ThreadRuntimeModeSetCommand,\n  ThreadInteractionModeSetCommand,\n  ClientThreadTurnStartCommand,\n  ClientThreadTurnQueueCommand,\n  ThreadQueuedTurnUpdateCommand,\n  ThreadQueuedTurnCancelCommand,\n  ThreadQueuedTurnConfirmCommand,\n  ThreadQueuedTurnSteerCommand,\n  ThreadTurnInterruptCommand,\n  ThreadApprovalRespondCommand,\n  ThreadUserInputRespondCommand,\n  ThreadCheckpointRevertCommand,\n  ThreadSessionStopCommand,\n]);\nexport type ClientOrchestrationCommand = typeof ClientOrchestrationCommand.Type;\n\nconst ThreadSessionSetCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.session.set\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  session: OrchestrationSession,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadMessageAssistantDeltaCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.message.assistant.delta\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  delta: Schema.String,\n  turnId: Schema.optional(TurnId),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadMessageAssistantCompleteCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.message.assistant.complete\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  turnId: Schema.optional(TurnId),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadMessageAttachmentsAddCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.message.attachments.add\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  role: OrchestrationMessageRole,\n  attachments: Schema.Array(ChatAttachment),\n  turnId: Schema.optional(TurnId),\n  createdAt: IsoDateTime,\n});\n\nconst ThreadProposedPlanUpsertCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.proposed-plan.upsert\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  proposedPlan: OrchestrationProposedPlan,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadTurnDiffCompleteCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.diff.complete\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  turnId: TurnId,\n  completedAt: IsoDateTime,\n  checkpointRef: CheckpointRef,\n  status: OrchestrationCheckpointStatus,\n  files: Schema.Array(OrchestrationCheckpointFile),\n  attribution: Schema.optional(OrchestrationCheckpointAttribution),\n  assistantMessageId: Schema.optional(MessageId),\n  checkpointTurnCount: NonNegativeInt,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadActivityAppendCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.activity.append\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  activity: OrchestrationThreadActivity,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadRevertCompleteCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.revert.complete\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  turnCount: NonNegativeInt,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnDispatchCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.dispatch\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadTurnHoldForRecoveryCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.turn.hold-for-recovery\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  message: Schema.Struct({\n    messageId: MessageId,\n    role: Schema.Literal(\"user\"),\n    text: Schema.String,\n    attachments: Schema.Array(ChatAttachment),\n  }),\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode,\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  requestedAt: IsoDateTime,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnSteerCompleteCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.steer.complete\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  turnId: TurnId,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadQueuedTurnSteerFailCommand = Schema.Struct({\n  type: Schema.Literal(\"thread.queued-turn.steer.fail\"),\n  commandId: CommandId,\n  threadId: ThreadId,\n  messageId: MessageId,\n  expectedTurnId: TurnId,\n  detail: Schema.String,\n  createdAt: IsoDateTime,\n});\n\nconst InternalOrchestrationCommand = Schema.Union([\n  ThreadSessionSetCommand,\n  ThreadMessageAssistantDeltaCommand,\n  ThreadMessageAssistantCompleteCommand,\n  ThreadMessageAttachmentsAddCommand,\n  ThreadProposedPlanUpsertCommand,\n  ThreadTurnDiffCompleteCommand,\n  ThreadActivityAppendCommand,\n  ThreadRevertCompleteCommand,\n  ThreadTurnHoldForRecoveryCommand,\n  ThreadQueuedTurnDispatchCommand,\n  ThreadQueuedTurnSteerCompleteCommand,\n  ThreadQueuedTurnSteerFailCommand,\n]);\nexport type InternalOrchestrationCommand = typeof InternalOrchestrationCommand.Type;\n\nexport const OrchestrationCommand = Schema.Union([\n  DispatchableClientOrchestrationCommand,\n  InternalOrchestrationCommand,\n]);\nexport type OrchestrationCommand = typeof OrchestrationCommand.Type;\n\nexport const OrchestrationEventType = Schema.Literals([\n  \"project.created\",\n  \"project.meta-updated\",\n  \"project.deleted\",\n  \"thread.created\",\n  \"thread.deleted\",\n  \"thread.archived\",\n  \"thread.unarchived\",\n  \"thread.meta-updated\",\n  \"thread.runtime-mode-set\",\n  \"thread.interaction-mode-set\",\n  \"thread.message-sent\",\n  \"thread.turn-queued\",\n  \"thread.queued-turn-updated\",\n  \"thread.queued-turn-cancelled\",\n  \"thread.queued-turn-dispatched\",\n  \"thread.queued-turn-steer-requested\",\n  \"thread.queued-turn-steer-failed\",\n  \"thread.queued-turn-steered\",\n  \"thread.turn-start-requested\",\n  \"thread.turn-interrupt-requested\",\n  \"thread.approval-response-requested\",\n  \"thread.user-input-response-requested\",\n  \"thread.checkpoint-revert-requested\",\n  \"thread.reverted\",\n  \"thread.session-stop-requested\",\n  \"thread.session-set\",\n  \"thread.proposed-plan-upserted\",\n  \"thread.turn-diff-completed\",\n  \"thread.activity-appended\",\n]);\nexport type OrchestrationEventType = typeof OrchestrationEventType.Type;\n\nexport const OrchestrationAggregateKind = Schema.Literals([\"project\", \"thread\"]);\nexport type OrchestrationAggregateKind = typeof OrchestrationAggregateKind.Type;\nexport const OrchestrationActorKind = Schema.Literals([\"client\", \"server\", \"provider\"]);\n\nexport const ProjectCreatedPayload = Schema.Struct({\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  workspaceRoot: TrimmedNonEmptyString,\n  repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)),\n  defaultModelSelection: Schema.NullOr(ModelSelection),\n  scripts: Schema.Array(ProjectScript),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\n\nexport const ProjectMetaUpdatedPayload = Schema.Struct({\n  projectId: ProjectId,\n  title: Schema.optional(TrimmedNonEmptyString),\n  workspaceRoot: Schema.optional(TrimmedNonEmptyString),\n  repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)),\n  defaultModelSelection: Schema.optional(Schema.NullOr(ModelSelection)),\n  scripts: Schema.optional(Schema.Array(ProjectScript)),\n  updatedAt: IsoDateTime,\n});\n\nexport const ProjectDeletedPayload = Schema.Struct({\n  projectId: ProjectId,\n  deletedAt: IsoDateTime,\n});\n\nexport const ThreadCreatedPayload = Schema.Struct({\n  threadId: ThreadId,\n  projectId: ProjectId,\n  title: TrimmedNonEmptyString,\n  modelSelection: ModelSelection,\n  runtimeMode: RuntimeMode.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_RUNTIME_MODE))),\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  parentThreadId: DefaultedParentThreadId,\n  createdByThreadId: DefaultedCreatedByThreadId,\n  subagentKind: DefaultedSubagentText,\n  subagentNickname: DefaultedSubagentText,\n  subagentRole: DefaultedSubagentText,\n  hiddenFromThreadList: DefaultedHiddenFromThreadList,\n  branch: Schema.NullOr(TrimmedNonEmptyString),\n  worktreePath: Schema.NullOr(TrimmedNonEmptyString),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadDeletedPayload = Schema.Struct({\n  threadId: ThreadId,\n  deletedAt: IsoDateTime,\n});\n\nexport const ThreadArchivedPayload = Schema.Struct({\n  threadId: ThreadId,\n  archivedAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadUnarchivedPayload = Schema.Struct({\n  threadId: ThreadId,\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadMetaUpdatedPayload = Schema.Struct({\n  threadId: ThreadId,\n  title: Schema.optional(TrimmedNonEmptyString),\n  modelSelection: Schema.optional(ModelSelection),\n  branch: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  worktreePath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadRuntimeModeSetPayload = Schema.Struct({\n  threadId: ThreadId,\n  runtimeMode: RuntimeMode,\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadInteractionModeSetPayload = Schema.Struct({\n  threadId: ThreadId,\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadMessageSentPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  role: OrchestrationMessageRole,\n  text: Schema.String,\n  attachments: Schema.optional(Schema.Array(ChatAttachment)),\n  turnId: Schema.NullOr(TurnId),\n  streaming: Schema.Boolean,\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\n\nexport const ThreadTurnStartRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  modelSelection: Schema.optional(ModelSelection),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  runtimeMode: RuntimeMode.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_RUNTIME_MODE))),\n  interactionMode: ProviderInteractionMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_PROVIDER_INTERACTION_MODE)),\n  ),\n  sourceProposedPlan: Schema.optional(SourceProposedPlanReference),\n  createdAt: IsoDateTime,\n});\n\nexport const ThreadTurnQueuedPayload = OrchestrationQueuedTurn;\nexport type ThreadTurnQueuedPayload = typeof ThreadTurnQueuedPayload.Type;\n\nexport const ThreadQueuedTurnUpdatedPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  text: Schema.String,\n  updatedAt: IsoDateTime,\n});\nexport type ThreadQueuedTurnUpdatedPayload = typeof ThreadQueuedTurnUpdatedPayload.Type;\n\nexport const ThreadQueuedTurnCancelledPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  recoveryConfirmationRequired: RecoveryConfirmationRequired,\n  cancelledAt: IsoDateTime,\n});\nexport type ThreadQueuedTurnCancelledPayload = typeof ThreadQueuedTurnCancelledPayload.Type;\n\nexport const ThreadQueuedTurnDispatchedPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  dispatchedAt: IsoDateTime,\n});\nexport type ThreadQueuedTurnDispatchedPayload = typeof ThreadQueuedTurnDispatchedPayload.Type;\n\nexport const ThreadQueuedTurnSteerRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  expectedTurnId: TurnId,\n  createdAt: IsoDateTime,\n});\nexport type ThreadQueuedTurnSteerRequestedPayload =\n  typeof ThreadQueuedTurnSteerRequestedPayload.Type;\n\nexport const ThreadQueuedTurnSteeredPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  turnId: TurnId,\n  steeredAt: IsoDateTime,\n});\nexport type ThreadQueuedTurnSteeredPayload = typeof ThreadQueuedTurnSteeredPayload.Type;\n\nexport const ThreadQueuedTurnSteerFailedPayload = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  expectedTurnId: TurnId,\n  failedAt: IsoDateTime,\n});\nexport type ThreadQueuedTurnSteerFailedPayload = typeof ThreadQueuedTurnSteerFailedPayload.Type;\n\nexport const ThreadTurnInterruptRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  turnId: Schema.optional(TurnId),\n  createdAt: IsoDateTime,\n});\n\nexport const ThreadApprovalResponseRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  requestId: ApprovalRequestId,\n  decision: ProviderApprovalDecision,\n  createdAt: IsoDateTime,\n});\n\nconst ThreadUserInputResponseRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  requestId: ApprovalRequestId,\n  answers: ProviderUserInputAnswers,\n  createdAt: IsoDateTime,\n});\n\nexport const ThreadCheckpointRevertRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  turnCount: NonNegativeInt,\n  createdAt: IsoDateTime,\n});\n\nexport const ThreadRevertedPayload = Schema.Struct({\n  threadId: ThreadId,\n  turnCount: NonNegativeInt,\n});\n\nexport const ThreadSessionStopRequestedPayload = Schema.Struct({\n  threadId: ThreadId,\n  createdAt: IsoDateTime,\n});\n\nexport const ThreadSessionSetPayload = Schema.Struct({\n  threadId: ThreadId,\n  session: OrchestrationSession,\n});\n\nexport const ThreadProposedPlanUpsertedPayload = Schema.Struct({\n  threadId: ThreadId,\n  proposedPlan: OrchestrationProposedPlan,\n});\n\nexport const ThreadTurnDiffCompletedPayload = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n  checkpointRef: CheckpointRef,\n  status: OrchestrationCheckpointStatus,\n  files: Schema.Array(OrchestrationCheckpointFile),\n  attribution: OrchestrationCheckpointAttribution.pipe(\n    Schema.withDecodingDefault(Effect.succeed(\"unattributed\")),\n  ),\n  assistantMessageId: Schema.NullOr(MessageId),\n  completedAt: IsoDateTime,\n});\n\nexport const ThreadActivityAppendedPayload = Schema.Struct({\n  threadId: ThreadId,\n  activity: OrchestrationThreadActivity,\n});\n\nexport const OrchestrationEventMetadata = Schema.Struct({\n  providerTurnId: Schema.optional(TrimmedNonEmptyString),\n  providerItemId: Schema.optional(ProviderItemId),\n  adapterKey: Schema.optional(TrimmedNonEmptyString),\n  requestId: Schema.optional(ApprovalRequestId),\n  ingestedAt: Schema.optional(IsoDateTime),\n});\nexport type OrchestrationEventMetadata = typeof OrchestrationEventMetadata.Type;\n\nconst EventBaseFields = {\n  sequence: NonNegativeInt,\n  eventId: EventId,\n  aggregateKind: OrchestrationAggregateKind,\n  aggregateId: Schema.Union([ProjectId, ThreadId]),\n  occurredAt: IsoDateTime,\n  commandId: Schema.NullOr(CommandId),\n  causationEventId: Schema.NullOr(EventId),\n  correlationId: Schema.NullOr(CommandId),\n  metadata: OrchestrationEventMetadata,\n} as const;\n\nexport const OrchestrationEvent = Schema.Union([\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"project.created\"),\n    payload: ProjectCreatedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"project.meta-updated\"),\n    payload: ProjectMetaUpdatedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"project.deleted\"),\n    payload: ProjectDeletedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.created\"),\n    payload: ThreadCreatedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.deleted\"),\n    payload: ThreadDeletedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.archived\"),\n    payload: ThreadArchivedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.unarchived\"),\n    payload: ThreadUnarchivedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.meta-updated\"),\n    payload: ThreadMetaUpdatedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.runtime-mode-set\"),\n    payload: ThreadRuntimeModeSetPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.interaction-mode-set\"),\n    payload: ThreadInteractionModeSetPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.message-sent\"),\n    payload: ThreadMessageSentPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.turn-queued\"),\n    payload: ThreadTurnQueuedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.queued-turn-updated\"),\n    payload: ThreadQueuedTurnUpdatedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.queued-turn-cancelled\"),\n    payload: ThreadQueuedTurnCancelledPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.queued-turn-dispatched\"),\n    payload: ThreadQueuedTurnDispatchedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.queued-turn-steer-requested\"),\n    payload: ThreadQueuedTurnSteerRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.queued-turn-steer-failed\"),\n    payload: ThreadQueuedTurnSteerFailedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.queued-turn-steered\"),\n    payload: ThreadQueuedTurnSteeredPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.turn-start-requested\"),\n    payload: ThreadTurnStartRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.turn-interrupt-requested\"),\n    payload: ThreadTurnInterruptRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.approval-response-requested\"),\n    payload: ThreadApprovalResponseRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.user-input-response-requested\"),\n    payload: ThreadUserInputResponseRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.checkpoint-revert-requested\"),\n    payload: ThreadCheckpointRevertRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.reverted\"),\n    payload: ThreadRevertedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.session-stop-requested\"),\n    payload: ThreadSessionStopRequestedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.session-set\"),\n    payload: ThreadSessionSetPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.proposed-plan-upserted\"),\n    payload: ThreadProposedPlanUpsertedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.turn-diff-completed\"),\n    payload: ThreadTurnDiffCompletedPayload,\n  }),\n  Schema.Struct({\n    ...EventBaseFields,\n    type: Schema.Literal(\"thread.activity-appended\"),\n    payload: ThreadActivityAppendedPayload,\n  }),\n]);\nexport type OrchestrationEvent = typeof OrchestrationEvent.Type;\n\nexport const OrchestrationThreadStreamItem = Schema.Union([\n  Schema.Struct({\n    kind: Schema.Literal(\"snapshot\"),\n    snapshot: OrchestrationThreadDetailSnapshot,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"event\"),\n    event: OrchestrationEvent,\n  }),\n]);\nexport type OrchestrationThreadStreamItem = typeof OrchestrationThreadStreamItem.Type;\n\nexport const OrchestrationCommandReceiptStatus = Schema.Literals([\"accepted\", \"rejected\"]);\nexport type OrchestrationCommandReceiptStatus = typeof OrchestrationCommandReceiptStatus.Type;\n\nexport const TurnCountRange = Schema.Struct({\n  fromTurnCount: NonNegativeInt,\n  toTurnCount: NonNegativeInt,\n}).check(\n  Schema.makeFilter(\n    (input) =>\n      input.fromTurnCount <= input.toTurnCount ||\n      new SchemaIssue.InvalidValue(Option.some(input.fromTurnCount), {\n        message: \"fromTurnCount must be less than or equal to toTurnCount\",\n      }),\n    { identifier: \"OrchestrationTurnDiffRange\" },\n  ),\n);\n\nexport const ThreadTurnDiff = TurnCountRange.mapFields(\n  Struct.assign({\n    threadId: ThreadId,\n    diff: Schema.String,\n  }),\n  { unsafePreserveChecks: true },\n);\n\nexport const ProviderSessionRuntimeStatus = Schema.Literals([\n  \"starting\",\n  \"running\",\n  \"stopped\",\n  \"error\",\n]);\nexport type ProviderSessionRuntimeStatus = typeof ProviderSessionRuntimeStatus.Type;\n\nconst ProjectionThreadTurnStatus = Schema.Literals([\n  \"running\",\n  \"completed\",\n  \"interrupted\",\n  \"error\",\n]);\nexport type ProjectionThreadTurnStatus = typeof ProjectionThreadTurnStatus.Type;\n\nconst ProjectionCheckpointRow = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n  checkpointRef: CheckpointRef,\n  status: OrchestrationCheckpointStatus,\n  files: Schema.Array(OrchestrationCheckpointFile),\n  attribution: OrchestrationCheckpointAttribution.pipe(\n    Schema.withDecodingDefault(Effect.succeed(\"unattributed\")),\n  ),\n  assistantMessageId: Schema.NullOr(MessageId),\n  completedAt: IsoDateTime,\n});\nexport type ProjectionCheckpointRow = typeof ProjectionCheckpointRow.Type;\n\nexport const ProjectionPendingApprovalStatus = Schema.Literals([\"pending\", \"resolved\"]);\nexport type ProjectionPendingApprovalStatus = typeof ProjectionPendingApprovalStatus.Type;\n\nexport const ProjectionPendingApprovalDecision = Schema.NullOr(ProviderApprovalDecision);\nexport type ProjectionPendingApprovalDecision = typeof ProjectionPendingApprovalDecision.Type;\n\nexport const DispatchResult = Schema.Struct({\n  sequence: NonNegativeInt,\n});\nexport type DispatchResult = typeof DispatchResult.Type;\n\nexport const OrchestrationGetTurnDiffInput = TurnCountRange.mapFields(\n  Struct.assign({\n    threadId: ThreadId,\n    ignoreWhitespace: Schema.optionalKey(Schema.Boolean),\n  }),\n  { unsafePreserveChecks: true },\n);\nexport type OrchestrationGetTurnDiffInput = typeof OrchestrationGetTurnDiffInput.Type;\n\nexport const OrchestrationGetTurnDiffResult = ThreadTurnDiff;\nexport type OrchestrationGetTurnDiffResult = typeof OrchestrationGetTurnDiffResult.Type;\n\nexport const OrchestrationGetFullThreadDiffInput = Schema.Struct({\n  threadId: ThreadId,\n  toTurnCount: NonNegativeInt,\n  ignoreWhitespace: Schema.optionalKey(Schema.Boolean),\n});\nexport type OrchestrationGetFullThreadDiffInput = typeof OrchestrationGetFullThreadDiffInput.Type;\n\nexport const OrchestrationGetFullThreadDiffResult = ThreadTurnDiff;\nexport type OrchestrationGetFullThreadDiffResult = typeof OrchestrationGetFullThreadDiffResult.Type;\n\nexport const OrchestrationReplayEventsInput = Schema.Struct({\n  fromSequenceExclusive: NonNegativeInt,\n});\nexport type OrchestrationReplayEventsInput = typeof OrchestrationReplayEventsInput.Type;\n\nconst OrchestrationReplayEventsResult = Schema.Array(OrchestrationEvent);\nexport type OrchestrationReplayEventsResult = typeof OrchestrationReplayEventsResult.Type;\n\nexport const OrchestrationProbeSyncInput = Schema.Struct({\n  clientSequence: NonNegativeInt,\n});\nexport type OrchestrationProbeSyncInput = typeof OrchestrationProbeSyncInput.Type;\n\nexport const OrchestrationProbeSyncResult = Schema.Struct({\n  clientSequence: NonNegativeInt,\n  serverSequence: NonNegativeInt,\n  behind: Schema.Boolean,\n});\nexport type OrchestrationProbeSyncResult = typeof OrchestrationProbeSyncResult.Type;\n\nexport const OrchestrationReconcileThreadDetailInput = Schema.Struct({\n  threadId: ThreadId,\n  clientSequence: Schema.NullOr(NonNegativeInt),\n  verifiedSequence: Schema.NullOr(NonNegativeInt),\n  verifiedFingerprint: Schema.NullOr(OrchestrationThreadDetailFingerprint),\n  page: Schema.optional(OrchestrationThreadDetailPageRequest),\n});\nexport type OrchestrationReconcileThreadDetailInput =\n  typeof OrchestrationReconcileThreadDetailInput.Type;\n\nexport const OrchestrationReconcileThreadDetailSnapshotReason = Schema.Literals([\n  \"missing-client-verification\",\n  \"unverified-client-cursor\",\n  \"fingerprint-mismatch\",\n  \"too-many-events\",\n]);\nexport type OrchestrationReconcileThreadDetailSnapshotReason =\n  typeof OrchestrationReconcileThreadDetailSnapshotReason.Type;\n\nexport const OrchestrationReconcileThreadDetailResult = Schema.Union([\n  Schema.Struct({\n    kind: Schema.Literal(\"current\"),\n    serverSequence: NonNegativeInt,\n    serverFingerprint: OrchestrationThreadDetailFingerprint,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"events\"),\n    serverSequence: NonNegativeInt,\n    serverFingerprint: OrchestrationThreadDetailFingerprint,\n    events: Schema.Array(OrchestrationEvent),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"snapshot\"),\n    reason: OrchestrationReconcileThreadDetailSnapshotReason,\n    serverSequence: NonNegativeInt,\n    serverFingerprint: OrchestrationThreadDetailFingerprint,\n    snapshot: OrchestrationThreadDetailSnapshot,\n  }),\n]);\nexport type OrchestrationReconcileThreadDetailResult =\n  typeof OrchestrationReconcileThreadDetailResult.Type;\n\nexport const OrchestrationRpcSchemas = {\n  dispatchCommand: {\n    input: ClientOrchestrationCommand,\n    output: DispatchResult,\n  },\n  getTurnDiff: {\n    input: OrchestrationGetTurnDiffInput,\n    output: OrchestrationGetTurnDiffResult,\n  },\n  getFullThreadDiff: {\n    input: OrchestrationGetFullThreadDiffInput,\n    output: OrchestrationGetFullThreadDiffResult,\n  },\n  replayEvents: {\n    input: OrchestrationReplayEventsInput,\n    output: OrchestrationReplayEventsResult,\n  },\n  reconcileThreadDetail: {\n    input: OrchestrationReconcileThreadDetailInput,\n    output: OrchestrationReconcileThreadDetailResult,\n  },\n  probeSync: {\n    input: OrchestrationProbeSyncInput,\n    output: OrchestrationProbeSyncResult,\n  },\n  getArchivedShellSnapshot: {\n    input: Schema.Struct({}),\n    output: OrchestrationShellSnapshot,\n  },\n  getThreadDetailPage: {\n    input: OrchestrationGetThreadDetailPageInput,\n    output: OrchestrationThreadDetailSnapshot,\n  },\n  subscribeThread: {\n    input: OrchestrationSubscribeThreadInput,\n    output: OrchestrationThreadStreamItem,\n  },\n  subscribeShell: {\n    input: Schema.Struct({}),\n    output: OrchestrationShellStreamItem,\n  },\n} as const;\n\nexport class OrchestrationGetSnapshotError extends Schema.TaggedErrorClass<OrchestrationGetSnapshotError>()(\n  \"OrchestrationGetSnapshotError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport class OrchestrationDispatchCommandError extends Schema.TaggedErrorClass<OrchestrationDispatchCommandError>()(\n  \"OrchestrationDispatchCommandError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport class OrchestrationGetTurnDiffError extends Schema.TaggedErrorClass<OrchestrationGetTurnDiffError>()(\n  \"OrchestrationGetTurnDiffError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport class OrchestrationGetFullThreadDiffError extends Schema.TaggedErrorClass<OrchestrationGetFullThreadDiffError>()(\n  \"OrchestrationGetFullThreadDiffError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport class OrchestrationReplayEventsError extends Schema.TaggedErrorClass<OrchestrationReplayEventsError>()(\n  \"OrchestrationReplayEventsError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n","import * as Context from \"effect/Context\";\nimport type * as DateTime from \"effect/DateTime\";\nimport * as Schema from \"effect/Schema\";\nimport * as HttpApi from \"effect/unstable/httpapi/HttpApi\";\nimport * as HttpApiEndpoint from \"effect/unstable/httpapi/HttpApiEndpoint\";\nimport * as HttpApiGroup from \"effect/unstable/httpapi/HttpApiGroup\";\nimport * as HttpApiMiddleware from \"effect/unstable/httpapi/HttpApiMiddleware\";\nimport * as HttpServerRespondable from \"effect/unstable/http/HttpServerRespondable\";\nimport * as HttpServerResponse from \"effect/unstable/http/HttpServerResponse\";\n\nimport {\n  AuthAccessTokenResult,\n  AuthBrowserSessionRequest,\n  AuthBrowserSessionResult,\n  AuthClientSession,\n  AuthCreatePairingCredentialInput,\n  AuthPairingCredentialResult,\n  AuthPairingLink,\n  AuthRevokeClientSessionInput,\n  AuthRevokePairingLinkInput,\n  AuthEnvironmentScope,\n  AuthTokenExchangeRequest,\n  AuthSessionState,\n  AuthWebSocketTicketResult,\n  ServerAuthSessionMethod,\n} from \"./auth.ts\";\nimport { AuthSessionId, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\nimport { ExecutionEnvironmentDescriptor } from \"./environment.ts\";\nimport {\n  ClientOrchestrationCommand,\n  DispatchResult,\n  OrchestrationReadModel,\n} from \"./orchestration.ts\";\n\nconst OptionalBearerHeaders = Schema.Struct({\n  authorization: Schema.optionalKey(Schema.String),\n});\n\nexport const EnvironmentRequestInvalidReason = Schema.Literals([\n  \"invalid_scope\",\n  \"scope_not_granted\",\n  \"invalid_command\",\n]);\nexport type EnvironmentRequestInvalidReason = typeof EnvironmentRequestInvalidReason.Type;\n\nexport const EnvironmentAuthInvalidReason = Schema.Literals([\n  \"missing_credential\",\n  \"invalid_credential\",\n]);\nexport type EnvironmentAuthInvalidReason = typeof EnvironmentAuthInvalidReason.Type;\n\nexport const EnvironmentOperationForbiddenReason = Schema.Literals([\n  \"current_session_revoke_not_allowed\",\n]);\nexport type EnvironmentOperationForbiddenReason = typeof EnvironmentOperationForbiddenReason.Type;\n\nexport const EnvironmentInternalErrorReason = Schema.Literals([\n  \"bootstrap_validation_failed\",\n  \"browser_session_issuance_failed\",\n  \"browser_session_cookie_failed\",\n  \"access_token_issuance_failed\",\n  \"websocket_ticket_issuance_failed\",\n  \"pairing_credential_issuance_failed\",\n  \"pairing_links_load_failed\",\n  \"pairing_link_revoke_failed\",\n  \"client_sessions_load_failed\",\n  \"client_session_revoke_failed\",\n  \"orchestration_snapshot_failed\",\n  \"orchestration_dispatch_failed\",\n  \"internal_error\",\n]);\nexport type EnvironmentInternalErrorReason = typeof EnvironmentInternalErrorReason.Type;\n\nexport class EnvironmentRequestInvalidError extends Schema.TaggedErrorClass<EnvironmentRequestInvalidError>()(\n  \"EnvironmentRequestInvalidError\",\n  {\n    code: Schema.Literal(\"invalid_request\"),\n    reason: EnvironmentRequestInvalidReason,\n    traceId: TrimmedNonEmptyString,\n  },\n  { httpApiStatus: 400 },\n) {\n  [HttpServerRespondable.symbol]() {\n    return HttpServerResponse.schemaJson(EnvironmentRequestInvalidError)(this, { status: 400 });\n  }\n}\n\nexport class EnvironmentAuthInvalidError extends Schema.TaggedErrorClass<EnvironmentAuthInvalidError>()(\n  \"EnvironmentAuthInvalidError\",\n  {\n    code: Schema.Literal(\"auth_invalid\"),\n    reason: EnvironmentAuthInvalidReason,\n    traceId: TrimmedNonEmptyString,\n  },\n  { httpApiStatus: 401 },\n) {\n  [HttpServerRespondable.symbol]() {\n    return HttpServerResponse.schemaJson(EnvironmentAuthInvalidError)(this, { status: 401 });\n  }\n}\n\nexport class EnvironmentScopeRequiredError extends Schema.TaggedErrorClass<EnvironmentScopeRequiredError>()(\n  \"EnvironmentScopeRequiredError\",\n  {\n    code: Schema.Literal(\"insufficient_scope\"),\n    requiredScope: AuthEnvironmentScope,\n    traceId: TrimmedNonEmptyString,\n  },\n  { httpApiStatus: 403 },\n) {\n  [HttpServerRespondable.symbol]() {\n    return HttpServerResponse.schemaJson(EnvironmentScopeRequiredError)(this, { status: 403 });\n  }\n}\n\nexport class EnvironmentOperationForbiddenError extends Schema.TaggedErrorClass<EnvironmentOperationForbiddenError>()(\n  \"EnvironmentOperationForbiddenError\",\n  {\n    code: Schema.Literal(\"operation_forbidden\"),\n    reason: EnvironmentOperationForbiddenReason,\n    traceId: TrimmedNonEmptyString,\n  },\n  { httpApiStatus: 403 },\n) {\n  [HttpServerRespondable.symbol]() {\n    return HttpServerResponse.schemaJson(EnvironmentOperationForbiddenError)(this, { status: 403 });\n  }\n}\n\nexport class EnvironmentInternalError extends Schema.TaggedErrorClass<EnvironmentInternalError>()(\n  \"EnvironmentInternalError\",\n  {\n    code: Schema.Literal(\"internal_error\"),\n    reason: EnvironmentInternalErrorReason,\n    traceId: TrimmedNonEmptyString,\n  },\n  { httpApiStatus: 500 },\n) {\n  [HttpServerRespondable.symbol]() {\n    return HttpServerResponse.schemaJson(EnvironmentInternalError)(this, { status: 500 });\n  }\n}\n\nexport const EnvironmentHttpCommonError = Schema.Union([\n  EnvironmentRequestInvalidError,\n  EnvironmentAuthInvalidError,\n  EnvironmentScopeRequiredError,\n  EnvironmentOperationForbiddenError,\n  EnvironmentInternalError,\n]);\nexport type EnvironmentHttpCommonError = typeof EnvironmentHttpCommonError.Type;\n\nconst EnvironmentAuthenticationErrors = [\n  EnvironmentAuthInvalidError,\n  EnvironmentInternalError,\n] as const;\nconst EnvironmentSessionCreationErrors = [\n  EnvironmentAuthInvalidError,\n  EnvironmentInternalError,\n] as const;\nconst EnvironmentTokenExchangeErrors = [\n  EnvironmentRequestInvalidError,\n  EnvironmentAuthInvalidError,\n  EnvironmentInternalError,\n] as const;\nconst EnvironmentScopedOperationErrors = [\n  EnvironmentScopeRequiredError,\n  EnvironmentInternalError,\n] as const;\nconst EnvironmentPairingCredentialErrors = [\n  EnvironmentRequestInvalidError,\n  ...EnvironmentScopedOperationErrors,\n] as const;\nconst EnvironmentSessionRevokeErrors = [\n  EnvironmentScopeRequiredError,\n  EnvironmentOperationForbiddenError,\n  EnvironmentInternalError,\n] as const;\nconst EnvironmentOrchestrationSnapshotErrors = [\n  EnvironmentScopeRequiredError,\n  EnvironmentInternalError,\n] as const;\nconst EnvironmentOrchestrationDispatchErrors = [\n  EnvironmentRequestInvalidError,\n  EnvironmentScopeRequiredError,\n  EnvironmentInternalError,\n] as const;\n\nexport interface EnvironmentSessionPrincipalShape {\n  readonly sessionId: AuthSessionId;\n  readonly subject: string;\n  readonly method: ServerAuthSessionMethod;\n  readonly scopes: ReadonlySet<AuthEnvironmentScope>;\n  readonly expiresAt?: DateTime.DateTime;\n}\n\nexport class EnvironmentAuthenticatedPrincipal extends Context.Service<\n  EnvironmentAuthenticatedPrincipal,\n  EnvironmentSessionPrincipalShape\n>()(\"@salchi/contracts/environmentHttp/EnvironmentAuthenticatedPrincipal\") {}\n\nexport class EnvironmentAuthenticatedAuth extends HttpApiMiddleware.Service<\n  EnvironmentAuthenticatedAuth,\n  { provides: EnvironmentAuthenticatedPrincipal }\n>()(\"EnvironmentAuthenticatedAuth\", {\n  error: EnvironmentAuthenticationErrors,\n}) {}\n\nexport const AuthPairingLinkRevokeResult = Schema.Struct({\n  revoked: Schema.Boolean,\n});\nexport type AuthPairingLinkRevokeResult = typeof AuthPairingLinkRevokeResult.Type;\n\nexport const AuthClientSessionRevokeResult = Schema.Struct({\n  revoked: Schema.Boolean,\n});\nexport type AuthClientSessionRevokeResult = typeof AuthClientSessionRevokeResult.Type;\n\nexport const AuthOtherClientSessionsRevokeResult = Schema.Struct({\n  revokedCount: Schema.Number,\n});\nexport type AuthOtherClientSessionsRevokeResult = typeof AuthOtherClientSessionsRevokeResult.Type;\n\nexport class EnvironmentMetadataHttpApi extends HttpApiGroup.make(\"metadata\").add(\n  HttpApiEndpoint.get(\"descriptor\", \"/.well-known/salchi/environment\", {\n    success: ExecutionEnvironmentDescriptor,\n  }),\n) {}\n\nexport class EnvironmentAuthHttpApi extends HttpApiGroup.make(\"auth\")\n  .add(\n    HttpApiEndpoint.get(\"session\", \"/api/auth/session\", {\n      headers: OptionalBearerHeaders,\n      success: AuthSessionState,\n      error: [EnvironmentInternalError],\n    }),\n  )\n  .add(\n    HttpApiEndpoint.post(\"browserSession\", \"/api/auth/browser-session\", {\n      payload: AuthBrowserSessionRequest,\n      success: AuthBrowserSessionResult,\n      error: EnvironmentSessionCreationErrors,\n    }),\n  )\n  .add(\n    HttpApiEndpoint.post(\"token\", \"/oauth/token\", {\n      payload: AuthTokenExchangeRequest,\n      success: AuthAccessTokenResult,\n      error: EnvironmentTokenExchangeErrors,\n    }),\n  )\n  .add(\n    HttpApiEndpoint.post(\"webSocketTicket\", \"/api/auth/websocket-ticket\", {\n      headers: OptionalBearerHeaders,\n      success: AuthWebSocketTicketResult,\n      error: [EnvironmentInternalError],\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.post(\"pairingCredential\", \"/api/auth/pairing-token\", {\n      headers: OptionalBearerHeaders,\n      payload: AuthCreatePairingCredentialInput,\n      success: AuthPairingCredentialResult,\n      error: EnvironmentPairingCredentialErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.get(\"pairingLinks\", \"/api/auth/pairing-links\", {\n      headers: OptionalBearerHeaders,\n      success: Schema.Array(AuthPairingLink),\n      error: EnvironmentScopedOperationErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.post(\"revokePairingLink\", \"/api/auth/pairing-links/revoke\", {\n      headers: OptionalBearerHeaders,\n      payload: AuthRevokePairingLinkInput,\n      success: AuthPairingLinkRevokeResult,\n      error: EnvironmentScopedOperationErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.get(\"clients\", \"/api/auth/clients\", {\n      headers: OptionalBearerHeaders,\n      success: Schema.Array(AuthClientSession),\n      error: EnvironmentScopedOperationErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.post(\"revokeClient\", \"/api/auth/clients/revoke\", {\n      headers: OptionalBearerHeaders,\n      payload: AuthRevokeClientSessionInput,\n      success: AuthClientSessionRevokeResult,\n      error: EnvironmentSessionRevokeErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.post(\"revokeOtherClients\", \"/api/auth/clients/revoke-others\", {\n      headers: OptionalBearerHeaders,\n      success: AuthOtherClientSessionsRevokeResult,\n      error: EnvironmentScopedOperationErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  ) {}\n\nexport class EnvironmentOrchestrationHttpApi extends HttpApiGroup.make(\"orchestration\")\n  .add(\n    HttpApiEndpoint.get(\"snapshot\", \"/api/orchestration/snapshot\", {\n      headers: OptionalBearerHeaders,\n      success: OrchestrationReadModel,\n      error: EnvironmentOrchestrationSnapshotErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  )\n  .add(\n    HttpApiEndpoint.post(\"dispatch\", \"/api/orchestration/dispatch\", {\n      headers: OptionalBearerHeaders,\n      payload: ClientOrchestrationCommand,\n      success: DispatchResult,\n      error: EnvironmentOrchestrationDispatchErrors,\n    }).middleware(EnvironmentAuthenticatedAuth),\n  ) {}\n\nexport class EnvironmentHttpApi extends HttpApi.make(\"environment\")\n  .add(EnvironmentMetadataHttpApi)\n  .add(EnvironmentAuthHttpApi)\n  .add(EnvironmentOrchestrationHttpApi) {}\n","import * as Schema from \"effect/Schema\";\n\nimport { PortSchema } from \"./baseSchemas.ts\";\n\nexport const DesktopBackendBootstrap = Schema.Struct({\n  mode: Schema.Literal(\"desktop\"),\n  noBrowser: Schema.Boolean,\n  port: PortSchema,\n  salchiHome: Schema.String,\n  host: Schema.String,\n  desktopBootstrapToken: Schema.String,\n  tailscaleServeEnabled: Schema.Boolean,\n  tailscaleServePort: PortSchema,\n  otlpTracesUrl: Schema.optional(Schema.String),\n  otlpMetricsUrl: Schema.optional(Schema.String),\n});\n\nexport type DesktopBackendBootstrap = typeof DesktopBackendBootstrap.Type;\n","import * as Schema from \"effect/Schema\";\n\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nexport const AdvertisedEndpointProviderKind = Schema.Literals([\n  \"core\",\n  \"private-network\",\n  \"tunnel\",\n  \"manual\",\n]);\nexport type AdvertisedEndpointProviderKind = typeof AdvertisedEndpointProviderKind.Type;\n\nexport const AdvertisedEndpointReachability = Schema.Literals([\n  \"loopback\",\n  \"lan\",\n  \"private-network\",\n  \"public\",\n]);\nexport type AdvertisedEndpointReachability = typeof AdvertisedEndpointReachability.Type;\n\nexport const AdvertisedEndpointHostedHttpsCompatibility = Schema.Literals([\n  \"compatible\",\n  \"mixed-content-blocked\",\n  \"requires-configuration\",\n  \"unknown\",\n]);\nexport type AdvertisedEndpointHostedHttpsCompatibility =\n  typeof AdvertisedEndpointHostedHttpsCompatibility.Type;\n\nexport const AdvertisedEndpointStatus = Schema.Literals([\"available\", \"unavailable\", \"unknown\"]);\nexport type AdvertisedEndpointStatus = typeof AdvertisedEndpointStatus.Type;\n\nexport const AdvertisedEndpointSource = Schema.Literals([\n  \"desktop-core\",\n  \"desktop-addon\",\n  \"server\",\n  \"user\",\n]);\nexport type AdvertisedEndpointSource = typeof AdvertisedEndpointSource.Type;\n\nexport const AdvertisedEndpointProvider = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  label: TrimmedNonEmptyString,\n  kind: AdvertisedEndpointProviderKind,\n  isAddon: Schema.Boolean,\n});\nexport type AdvertisedEndpointProvider = typeof AdvertisedEndpointProvider.Type;\n\nexport const AdvertisedEndpointCompatibility = Schema.Struct({\n  hostedHttpsApp: AdvertisedEndpointHostedHttpsCompatibility,\n  desktopApp: Schema.Literals([\"compatible\", \"unknown\"]),\n});\nexport type AdvertisedEndpointCompatibility = typeof AdvertisedEndpointCompatibility.Type;\n\nexport const AdvertisedEndpoint = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  label: TrimmedNonEmptyString,\n  provider: AdvertisedEndpointProvider,\n  httpBaseUrl: TrimmedNonEmptyString,\n  wsBaseUrl: TrimmedNonEmptyString,\n  reachability: AdvertisedEndpointReachability,\n  compatibility: AdvertisedEndpointCompatibility,\n  source: AdvertisedEndpointSource,\n  status: AdvertisedEndpointStatus,\n  isDefault: Schema.optional(Schema.Boolean),\n  description: Schema.optional(TrimmedNonEmptyString),\n});\nexport type AdvertisedEndpoint = typeof AdvertisedEndpoint.Type;\n","import * as Schema from \"effect/Schema\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nexport const EditorLaunchStyle = Schema.Literals([\"direct-path\", \"goto\", \"line-column\"]);\nexport type EditorLaunchStyle = typeof EditorLaunchStyle.Type;\n\ntype EditorDefinition = {\n  readonly id: string;\n  readonly label: string;\n  readonly commands: readonly [string, ...string[]] | null;\n  readonly baseArgs?: readonly string[];\n  readonly launchStyle: EditorLaunchStyle;\n};\n\nexport const EDITORS = [\n  { id: \"cursor\", label: \"Cursor\", commands: [\"cursor\"], launchStyle: \"goto\" },\n  { id: \"trae\", label: \"Trae\", commands: [\"trae\"], launchStyle: \"goto\" },\n  { id: \"kiro\", label: \"Kiro\", commands: [\"kiro\"], baseArgs: [\"ide\"], launchStyle: \"goto\" },\n  { id: \"vscode\", label: \"VS Code\", commands: [\"code\"], launchStyle: \"goto\" },\n  {\n    id: \"vscode-insiders\",\n    label: \"VS Code Insiders\",\n    commands: [\"code-insiders\"],\n    launchStyle: \"goto\",\n  },\n  { id: \"vscodium\", label: \"VSCodium\", commands: [\"codium\"], launchStyle: \"goto\" },\n  { id: \"zed\", label: \"Zed\", commands: [\"zed\", \"zeditor\"], launchStyle: \"direct-path\" },\n  { id: \"antigravity\", label: \"Antigravity\", commands: [\"agy\"], launchStyle: \"goto\" },\n  { id: \"idea\", label: \"IntelliJ IDEA\", commands: [\"idea\"], launchStyle: \"line-column\" },\n  { id: \"aqua\", label: \"Aqua\", commands: [\"aqua\"], launchStyle: \"line-column\" },\n  { id: \"clion\", label: \"CLion\", commands: [\"clion\"], launchStyle: \"line-column\" },\n  { id: \"datagrip\", label: \"DataGrip\", commands: [\"datagrip\"], launchStyle: \"line-column\" },\n  { id: \"dataspell\", label: \"DataSpell\", commands: [\"dataspell\"], launchStyle: \"line-column\" },\n  { id: \"goland\", label: \"GoLand\", commands: [\"goland\"], launchStyle: \"line-column\" },\n  { id: \"phpstorm\", label: \"PhpStorm\", commands: [\"phpstorm\"], launchStyle: \"line-column\" },\n  { id: \"pycharm\", label: \"PyCharm\", commands: [\"pycharm\"], launchStyle: \"line-column\" },\n  { id: \"rider\", label: \"Rider\", commands: [\"rider\"], launchStyle: \"line-column\" },\n  { id: \"rubymine\", label: \"RubyMine\", commands: [\"rubymine\"], launchStyle: \"line-column\" },\n  { id: \"rustrover\", label: \"RustRover\", commands: [\"rustrover\"], launchStyle: \"line-column\" },\n  { id: \"webstorm\", label: \"WebStorm\", commands: [\"webstorm\"], launchStyle: \"line-column\" },\n  { id: \"file-manager\", label: \"File Manager\", commands: null, launchStyle: \"direct-path\" },\n] as const satisfies ReadonlyArray<EditorDefinition>;\n\nexport const EditorId = Schema.Literals(EDITORS.map((e) => e.id));\nexport type EditorId = typeof EditorId.Type;\n\nexport const LaunchEditorInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  editor: EditorId,\n});\nexport type LaunchEditorInput = typeof LaunchEditorInput.Type;\n\nexport class ExternalLauncherError extends Schema.TaggedErrorClass<ExternalLauncherError>()(\n  \"ExternalLauncherError\",\n  {\n    message: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n","import type {\n  VcsSwitchRefInput,\n  VcsSwitchRefResult,\n  VcsCreateRefInput,\n  GitPreparePullRequestThreadInput,\n  GitPreparePullRequestThreadResult,\n  GitPullRequestRefInput,\n  VcsCreateWorktreeInput,\n  VcsCreateWorktreeResult,\n  VcsInitInput,\n  VcsListRefsInput,\n  VcsListRefsResult,\n  VcsPullInput,\n  VcsPullResult,\n  VcsRevertUnstagedFilesInput,\n  VcsRemoveWorktreeInput,\n  VcsStageFilesInput,\n  VcsWorkingTreeDiffInput,\n  VcsWorkingTreeDiffResult,\n  GitResolvePullRequestResult,\n  VcsStatusInput,\n  VcsStatusLocalResult,\n  VcsStatusResult,\n  VcsUnstageFilesInput,\n  VcsCreateRefResult,\n} from \"./git.ts\";\nimport type { FilesystemBrowseInput, FilesystemBrowseResult } from \"./filesystem.ts\";\nimport type {\n  ProjectSearchEntriesInput,\n  ProjectSearchEntriesResult,\n  ProjectListDirectoryEntriesInput,\n  ProjectListDirectoryEntriesResult,\n  ProjectReadFileInput,\n  ProjectReadFileResult,\n  ProjectWriteFileInput,\n  ProjectWriteFileResult,\n  ProjectDeleteEntryInput,\n  ProjectDeleteEntryResult,\n} from \"./project.ts\";\nimport type { ProviderDriverKind, ProviderInstanceId } from \"./providerInstance.ts\";\nimport type {\n  ServerConfig,\n  ServerProbeDevServerUrlInput,\n  ServerProbeDevServerUrlResult,\n  ServerProcessDiagnosticsResult,\n  ServerProcessResourceHistoryInput,\n  ServerProcessResourceHistoryResult,\n  ServerProviderUpdateInput,\n  ServerProviderUpdatedPayload,\n  ServerRemoveKeybindingResult,\n  ServerSignalProcessInput,\n  ServerSignalProcessResult,\n  ServerTraceDiagnosticsResult,\n  ServerUpsertKeybindingResult,\n} from \"./server.ts\";\nimport type {\n  ServerPushConfig,\n  ServerPushSendResult,\n  ServerPushSubscriptionStatus,\n  ServerRegisterPushSubscriptionInput,\n  ServerSendTestPushNotificationInput,\n  ServerUnregisterPushSubscriptionInput,\n} from \"./push.ts\";\nimport type {\n  ThemeImportInput,\n  ThemeImportResult,\n  ThemePreviewResult,\n  ThemeSearchInput,\n  ThemeSearchResult,\n} from \"./theme.ts\";\nimport type {\n  TerminalClearInput,\n  TerminalCloseInput,\n  TerminalEvent,\n  TerminalOpenInput,\n  TerminalResizeInput,\n  TerminalRestartInput,\n  TerminalSnapshotInput,\n  TerminalSessionSnapshot,\n  TerminalWriteInput,\n} from \"./terminal.ts\";\nimport type { ServerRemoveKeybindingInput, ServerUpsertKeybindingInput } from \"./server.ts\";\nimport * as Schema from \"effect/Schema\";\nimport type {\n  ClientOrchestrationCommand,\n  OrchestrationGetThreadDetailPageInput,\n  OrchestrationGetFullThreadDiffInput,\n  OrchestrationGetFullThreadDiffResult,\n  OrchestrationReconcileThreadDetailInput,\n  OrchestrationReconcileThreadDetailResult,\n  OrchestrationThreadDetailSnapshot,\n  OrchestrationGetTurnDiffInput,\n  OrchestrationGetTurnDiffResult,\n  OrchestrationShellSnapshot,\n  OrchestrationShellStreamItem,\n  OrchestrationSubscribeThreadInput,\n  OrchestrationThreadStreamItem,\n} from \"./orchestration.ts\";\nimport { EnvironmentId } from \"./baseSchemas.ts\";\nimport { AuthAccessTokenResult, AuthSessionState, AuthWebSocketTicketResult } from \"./auth.ts\";\nimport { AdvertisedEndpoint } from \"./remoteAccess.ts\";\nimport { EditorId } from \"./editor.ts\";\nimport { ExecutionEnvironmentDescriptor } from \"./environment.ts\";\nimport type { ClientSettings, ServerSettings, ServerSettingsPatch } from \"./settings.ts\";\nimport type {\n  SourceControlCloneRepositoryInput,\n  SourceControlCloneRepositoryResult,\n  SourceControlDiscoveryResult,\n  SourceControlPublishRepositoryInput,\n  SourceControlPublishRepositoryResult,\n  SourceControlRepositoryInfo,\n  SourceControlRepositoryLookupInput,\n} from \"./sourceControl.ts\";\n\nexport interface ContextMenuItem<T extends string = string> {\n  id: T;\n  label: string;\n  destructive?: boolean;\n  disabled?: boolean;\n  /** Renders as a non-interactive section header label. Web fallback only — stripped on desktop native menus. */\n  header?: boolean;\n  /** Icon keyword resolved by the web fallback. Stripped on desktop native menus. */\n  icon?: string;\n  children?: readonly ContextMenuItem<T>[];\n}\n\nexport interface ContextMenuItemSchemaType {\n  readonly id: string;\n  readonly label: string;\n  readonly destructive?: boolean;\n  readonly disabled?: boolean;\n  readonly header?: boolean;\n  readonly icon?: string;\n  readonly children?: readonly ContextMenuItemSchemaType[];\n}\n\nexport const ContextMenuItemSchema: Schema.Codec<ContextMenuItemSchemaType> = Schema.Struct({\n  id: Schema.String,\n  label: Schema.String,\n  destructive: Schema.optionalKey(Schema.Boolean),\n  disabled: Schema.optionalKey(Schema.Boolean),\n  header: Schema.optionalKey(Schema.Boolean),\n  icon: Schema.optionalKey(Schema.String),\n  children: Schema.optionalKey(\n    Schema.Array(\n      Schema.suspend((): Schema.Codec<ContextMenuItemSchemaType> => ContextMenuItemSchema),\n    ),\n  ),\n});\n\nexport type DesktopUpdateStatus =\n  | \"disabled\"\n  | \"idle\"\n  | \"checking\"\n  | \"up-to-date\"\n  | \"available\"\n  | \"downloading\"\n  | \"downloaded\"\n  | \"error\";\n\nexport type DesktopRuntimeArch = \"arm64\" | \"x64\" | \"other\";\nexport type DesktopTheme = \"light\" | \"dark\" | \"system\";\nexport type DesktopUpdateChannel = \"latest\" | \"nightly\";\nexport type DesktopAppStageLabel = \"Alpha\" | \"Dev\" | \"Nightly\";\n\nexport const DesktopUpdateStatusSchema = Schema.Literals([\n  \"disabled\",\n  \"idle\",\n  \"checking\",\n  \"up-to-date\",\n  \"available\",\n  \"downloading\",\n  \"downloaded\",\n  \"error\",\n]);\nexport const DesktopRuntimeArchSchema = Schema.Literals([\"arm64\", \"x64\", \"other\"]);\nexport const DesktopThemeSchema = Schema.Literals([\"light\", \"dark\", \"system\"]);\nexport const DesktopUpdateChannelSchema = Schema.Literals([\"latest\", \"nightly\"]);\nexport const DesktopAppStageLabelSchema = Schema.Literals([\"Alpha\", \"Dev\", \"Nightly\"]);\n\nexport interface DesktopAppBranding {\n  baseName: string;\n  stageLabel: DesktopAppStageLabel;\n  displayName: string;\n}\n\nexport const DesktopAppBrandingSchema = Schema.Struct({\n  baseName: Schema.String,\n  stageLabel: DesktopAppStageLabelSchema,\n  displayName: Schema.String,\n});\n\nexport interface DesktopRuntimeInfo {\n  hostArch: DesktopRuntimeArch;\n  appArch: DesktopRuntimeArch;\n  runningUnderArm64Translation: boolean;\n}\n\nexport const DesktopRuntimeInfoSchema = Schema.Struct({\n  hostArch: DesktopRuntimeArchSchema,\n  appArch: DesktopRuntimeArchSchema,\n  runningUnderArm64Translation: Schema.Boolean,\n});\n\nexport interface DesktopUpdateState {\n  enabled: boolean;\n  status: DesktopUpdateStatus;\n  channel: DesktopUpdateChannel;\n  currentVersion: string;\n  hostArch: DesktopRuntimeArch;\n  appArch: DesktopRuntimeArch;\n  runningUnderArm64Translation: boolean;\n  availableVersion: string | null;\n  downloadedVersion: string | null;\n  downloadPercent: number | null;\n  checkedAt: string | null;\n  message: string | null;\n  errorContext: \"check\" | \"download\" | \"install\" | null;\n  canRetry: boolean;\n}\n\nexport const DesktopUpdateStateSchema = Schema.Struct({\n  enabled: Schema.Boolean,\n  status: DesktopUpdateStatusSchema,\n  channel: DesktopUpdateChannelSchema,\n  currentVersion: Schema.String,\n  hostArch: DesktopRuntimeArchSchema,\n  appArch: DesktopRuntimeArchSchema,\n  runningUnderArm64Translation: Schema.Boolean,\n  availableVersion: Schema.NullOr(Schema.String),\n  downloadedVersion: Schema.NullOr(Schema.String),\n  downloadPercent: Schema.NullOr(Schema.Number),\n  checkedAt: Schema.NullOr(Schema.String),\n  message: Schema.NullOr(Schema.String),\n  errorContext: Schema.NullOr(Schema.Literals([\"check\", \"download\", \"install\"])),\n  canRetry: Schema.Boolean,\n});\n\nexport interface DesktopUpdateActionResult {\n  accepted: boolean;\n  completed: boolean;\n  state: DesktopUpdateState;\n}\n\nexport const DesktopUpdateActionResultSchema = Schema.Struct({\n  accepted: Schema.Boolean,\n  completed: Schema.Boolean,\n  state: DesktopUpdateStateSchema,\n});\n\nexport interface DesktopUpdateCheckResult {\n  checked: boolean;\n  state: DesktopUpdateState;\n}\n\nexport const DesktopUpdateCheckResultSchema = Schema.Struct({\n  checked: Schema.Boolean,\n  state: DesktopUpdateStateSchema,\n});\n\nexport interface DesktopEnvironmentBootstrap {\n  label: string;\n  httpBaseUrl: string | null;\n  wsBaseUrl: string | null;\n  bootstrapToken?: string;\n}\n\nexport const DesktopEnvironmentBootstrapSchema = Schema.Struct({\n  label: Schema.String,\n  httpBaseUrl: Schema.NullOr(Schema.String),\n  wsBaseUrl: Schema.NullOr(Schema.String),\n  bootstrapToken: Schema.optionalKey(Schema.String),\n});\n\nexport const DesktopSshEnvironmentTargetSchema = Schema.Struct({\n  alias: Schema.String,\n  hostname: Schema.String,\n  username: Schema.NullOr(Schema.String),\n  port: Schema.NullOr(Schema.Number),\n});\nexport type DesktopSshEnvironmentTarget = typeof DesktopSshEnvironmentTargetSchema.Type;\n\nexport type DesktopSshHostSource = \"ssh-config\" | \"known-hosts\";\nexport const DesktopSshHostSourceSchema = Schema.Literals([\"ssh-config\", \"known-hosts\"]);\n\nexport interface DesktopDiscoveredSshHost extends DesktopSshEnvironmentTarget {\n  source: DesktopSshHostSource;\n}\n\nexport const DesktopDiscoveredSshHostSchema = Schema.Struct({\n  alias: Schema.String,\n  hostname: Schema.String,\n  username: Schema.NullOr(Schema.String),\n  port: Schema.NullOr(Schema.Number),\n  source: DesktopSshHostSourceSchema,\n});\n\nexport interface DesktopSshEnvironmentBootstrap {\n  target: DesktopSshEnvironmentTarget;\n  httpBaseUrl: string;\n  wsBaseUrl: string;\n  pairingToken: string | null;\n  remotePort?: number;\n  remoteServerKind?: \"external\" | \"managed\";\n}\n\nexport const DesktopSshEnvironmentBootstrapSchema = Schema.Struct({\n  target: DesktopSshEnvironmentTargetSchema,\n  httpBaseUrl: Schema.String,\n  wsBaseUrl: Schema.String,\n  pairingToken: Schema.NullOr(Schema.String),\n  remotePort: Schema.optionalKey(Schema.Number),\n  remoteServerKind: Schema.optionalKey(Schema.Literals([\"external\", \"managed\"])),\n});\n\nexport interface DesktopSshPasswordPromptRequest {\n  requestId: string;\n  destination: string;\n  username: string | null;\n  prompt: string;\n  expiresAt: string;\n}\n\nexport const DesktopSshPasswordPromptRequestSchema = Schema.Struct({\n  requestId: Schema.String,\n  destination: Schema.String,\n  username: Schema.NullOr(Schema.String),\n  prompt: Schema.String,\n  expiresAt: Schema.String,\n});\n\nexport const DesktopSshPasswordPromptCancelledType = \"ssh-password-prompt-cancelled\" as const;\n\nexport const DesktopSshPasswordPromptCancelledResultSchema = Schema.Struct({\n  type: Schema.Literal(DesktopSshPasswordPromptCancelledType),\n  message: Schema.String,\n});\n\nexport const DesktopSshEnvironmentEnsureOptionsSchema = Schema.Struct({\n  issuePairingToken: Schema.optionalKey(Schema.Boolean),\n});\n\nexport const DesktopSshEnvironmentEnsureInputSchema = Schema.Struct({\n  target: DesktopSshEnvironmentTargetSchema,\n  options: Schema.optionalKey(DesktopSshEnvironmentEnsureOptionsSchema),\n});\n\nexport const DesktopSshEnvironmentEnsureResultSchema = Schema.Union([\n  DesktopSshEnvironmentBootstrapSchema,\n  DesktopSshPasswordPromptCancelledResultSchema,\n]);\n\nexport const DesktopSshHttpBaseUrlInputSchema = Schema.Struct({\n  httpBaseUrl: Schema.String,\n});\n\nexport const DesktopSshBearerRequestInputSchema = Schema.Struct({\n  httpBaseUrl: Schema.String,\n  bearerToken: Schema.String,\n});\n\nexport const DesktopSshBearerBootstrapInputSchema = Schema.Struct({\n  httpBaseUrl: Schema.String,\n  credential: Schema.String,\n});\n\nexport const DesktopSshPasswordPromptResolutionInputSchema = Schema.Struct({\n  requestId: Schema.String,\n  password: Schema.NullOr(Schema.String),\n});\n\nexport const PersistedSavedEnvironmentRecordSchema = Schema.Struct({\n  environmentId: EnvironmentId,\n  label: Schema.String,\n  wsBaseUrl: Schema.String,\n  httpBaseUrl: Schema.String,\n  createdAt: Schema.String,\n  lastConnectedAt: Schema.NullOr(Schema.String),\n  desktopSsh: Schema.optionalKey(DesktopSshEnvironmentTargetSchema),\n});\nexport type PersistedSavedEnvironmentRecord = typeof PersistedSavedEnvironmentRecordSchema.Type;\n\nexport type DesktopServerExposureMode = \"local-only\" | \"network-accessible\";\n\nexport const DesktopServerExposureModeSchema = Schema.Literals([\n  \"local-only\",\n  \"network-accessible\",\n]);\n\nexport interface DesktopServerExposureState {\n  mode: DesktopServerExposureMode;\n  endpointUrl: string | null;\n  advertisedHost: string | null;\n  tailscaleServeEnabled: boolean;\n  tailscaleServePort: number;\n}\n\nexport const DesktopServerExposureStateSchema = Schema.Struct({\n  mode: DesktopServerExposureModeSchema,\n  endpointUrl: Schema.NullOr(Schema.String),\n  advertisedHost: Schema.NullOr(Schema.String),\n  tailscaleServeEnabled: Schema.Boolean,\n  tailscaleServePort: Schema.Number,\n});\n\nexport interface PickFolderOptions {\n  initialPath?: string | null;\n}\n\nexport const PickFolderOptionsSchema = Schema.Struct({\n  initialPath: Schema.optionalKey(Schema.NullOr(Schema.String)),\n});\n\nexport interface DesktopBridge {\n  getAppBranding: () => DesktopAppBranding | null;\n  getLocalEnvironmentBootstrap: () => DesktopEnvironmentBootstrap | null;\n  getClientSettings: () => Promise<ClientSettings | null>;\n  setClientSettings: (settings: ClientSettings) => Promise<void>;\n  getSavedEnvironmentRegistry: () => Promise<readonly PersistedSavedEnvironmentRecord[]>;\n  setSavedEnvironmentRegistry: (\n    records: readonly PersistedSavedEnvironmentRecord[],\n  ) => Promise<void>;\n  getSavedEnvironmentSecret: (environmentId: EnvironmentId) => Promise<string | null>;\n  setSavedEnvironmentSecret: (environmentId: EnvironmentId, secret: string) => Promise<boolean>;\n  removeSavedEnvironmentSecret: (environmentId: EnvironmentId) => Promise<void>;\n  discoverSshHosts: () => Promise<readonly DesktopDiscoveredSshHost[]>;\n  ensureSshEnvironment: (\n    target: DesktopSshEnvironmentTarget,\n    options?: { issuePairingToken?: boolean },\n  ) => Promise<DesktopSshEnvironmentBootstrap>;\n  disconnectSshEnvironment: (target: DesktopSshEnvironmentTarget) => Promise<void>;\n  fetchSshEnvironmentDescriptor: (httpBaseUrl: string) => Promise<ExecutionEnvironmentDescriptor>;\n  bootstrapSshBearerSession: (\n    httpBaseUrl: string,\n    credential: string,\n  ) => Promise<AuthAccessTokenResult>;\n  fetchSshSessionState: (httpBaseUrl: string, bearerToken: string) => Promise<AuthSessionState>;\n  issueSshWebSocketTicket: (\n    httpBaseUrl: string,\n    bearerToken: string,\n  ) => Promise<AuthWebSocketTicketResult>;\n  onSshPasswordPrompt: (listener: (request: DesktopSshPasswordPromptRequest) => void) => () => void;\n  resolveSshPasswordPrompt: (requestId: string, password: string | null) => Promise<void>;\n  getServerExposureState: () => Promise<DesktopServerExposureState>;\n  setServerExposureMode: (mode: DesktopServerExposureMode) => Promise<DesktopServerExposureState>;\n  setTailscaleServeEnabled: (input: {\n    readonly enabled: boolean;\n    readonly port?: number;\n  }) => Promise<DesktopServerExposureState>;\n  getAdvertisedEndpoints: () => Promise<readonly AdvertisedEndpoint[]>;\n  pickFolder: (options?: PickFolderOptions) => Promise<string | null>;\n  confirm: (message: string) => Promise<boolean>;\n  setTheme: (theme: DesktopTheme) => Promise<void>;\n  showContextMenu: <T extends string>(\n    items: readonly ContextMenuItem<T>[],\n    position?: { x: number; y: number },\n  ) => Promise<T | null>;\n  openExternal: (url: string) => Promise<boolean>;\n  forceReload: () => Promise<void>;\n  onMenuAction: (listener: (action: string) => void) => () => void;\n  getUpdateState: () => Promise<DesktopUpdateState>;\n  setUpdateChannel: (channel: DesktopUpdateChannel) => Promise<DesktopUpdateState>;\n  checkForUpdate: () => Promise<DesktopUpdateCheckResult>;\n  downloadUpdate: () => Promise<DesktopUpdateActionResult>;\n  installUpdate: () => Promise<DesktopUpdateActionResult>;\n  onUpdateState: (listener: (state: DesktopUpdateState) => void) => () => void;\n}\n\n/**\n * APIs bound to the local app shell, not to any particular backend environment.\n *\n * These capabilities describe the desktop/browser host that the user is\n * currently running: dialogs, editor/external-link opening, context menus, and\n * app-level settings/config access. They must not be used as a proxy for\n * \"whatever environment the user is targeting\", because in a multi-environment\n * world the local shell and a selected backend environment are distinct\n * concepts.\n */\nexport interface LocalApi {\n  dialogs: {\n    pickFolder: (options?: PickFolderOptions) => Promise<string | null>;\n    confirm: (message: string) => Promise<boolean>;\n  };\n  shell: {\n    openInEditor: (cwd: string, editor: EditorId) => Promise<void>;\n    openExternal: (url: string) => Promise<void>;\n  };\n  contextMenu: {\n    show: <T extends string>(\n      items: readonly ContextMenuItem<T>[],\n      position?: { x: number; y: number },\n    ) => Promise<T | null>;\n  };\n  persistence: {\n    getClientSettings: () => Promise<ClientSettings | null>;\n    setClientSettings: (settings: ClientSettings) => Promise<void>;\n    getSavedEnvironmentRegistry: () => Promise<readonly PersistedSavedEnvironmentRecord[]>;\n    setSavedEnvironmentRegistry: (\n      records: readonly PersistedSavedEnvironmentRecord[],\n    ) => Promise<void>;\n    getSavedEnvironmentSecret: (environmentId: EnvironmentId) => Promise<string | null>;\n    setSavedEnvironmentSecret: (environmentId: EnvironmentId, secret: string) => Promise<boolean>;\n    removeSavedEnvironmentSecret: (environmentId: EnvironmentId) => Promise<void>;\n  };\n  server: {\n    getConfig: () => Promise<ServerConfig>;\n    /**\n     * Refresh provider snapshots. When `input.instanceId` is supplied only that\n     * configured instance is probed; otherwise every configured instance is\n     * refreshed (legacy untargeted refresh).\n     */\n    refreshProviders: (input?: {\n      readonly instanceId?: ProviderInstanceId;\n    }) => Promise<ServerProviderUpdatedPayload>;\n    refreshUsageLimits: () => Promise<{\n      readonly accountRateLimits: ReadonlyArray<{\n        readonly providerInstanceId: ProviderInstanceId;\n        readonly provider: ProviderDriverKind;\n        readonly rateLimits: unknown;\n      }>;\n    }>;\n    /**\n     * Starts or attaches to a server-owned provider update job. Terminal\n     * success/failure is observed later through provider status updates.\n     */\n    updateProvider: (input: ServerProviderUpdateInput) => Promise<ServerProviderUpdatedPayload>;\n    upsertKeybinding: (input: ServerUpsertKeybindingInput) => Promise<ServerUpsertKeybindingResult>;\n    removeKeybinding: (input: ServerRemoveKeybindingInput) => Promise<ServerRemoveKeybindingResult>;\n    getSettings: () => Promise<ServerSettings>;\n    updateSettings: (patch: ServerSettingsPatch) => Promise<ServerSettings>;\n    discoverSourceControl: () => Promise<SourceControlDiscoveryResult>;\n    getTraceDiagnostics: () => Promise<ServerTraceDiagnosticsResult>;\n    getProcessDiagnostics: () => Promise<ServerProcessDiagnosticsResult>;\n    getProcessResourceHistory: (\n      input: ServerProcessResourceHistoryInput,\n    ) => Promise<ServerProcessResourceHistoryResult>;\n    signalProcess: (input: ServerSignalProcessInput) => Promise<ServerSignalProcessResult>;\n    getPushConfig: () => Promise<ServerPushConfig>;\n    registerPushSubscription: (\n      input: ServerRegisterPushSubscriptionInput,\n    ) => Promise<ServerPushSubscriptionStatus>;\n    unregisterPushSubscription: (\n      input: ServerUnregisterPushSubscriptionInput,\n    ) => Promise<ServerPushSubscriptionStatus>;\n    sendTestPushNotification: (\n      input: ServerSendTestPushNotificationInput,\n    ) => Promise<ServerPushSendResult>;\n  };\n  themes: {\n    search: (input: ThemeSearchInput) => Promise<ThemeSearchResult>;\n    preview: (input: ThemeImportInput) => Promise<ThemePreviewResult>;\n    import: (input: ThemeImportInput) => Promise<ThemeImportResult>;\n  };\n}\n\n/**\n * APIs bound to a specific backend environment connection.\n *\n * These operations must always be routed with explicit environment context.\n * They represent remote stateful capabilities such as orchestration, terminal,\n * project, VCS, and provider operations. In multi-environment mode, each environment gets\n * its own instance of this surface, and callers should resolve it by\n * `environmentId` rather than reaching through the local desktop bridge.\n */\nexport interface EnvironmentApi {\n  terminal: {\n    open: (input: typeof TerminalOpenInput.Encoded) => Promise<TerminalSessionSnapshot>;\n    write: (input: typeof TerminalWriteInput.Encoded) => Promise<void>;\n    resize: (input: typeof TerminalResizeInput.Encoded) => Promise<void>;\n    clear: (input: typeof TerminalClearInput.Encoded) => Promise<void>;\n    snapshot: (input: typeof TerminalSnapshotInput.Encoded) => Promise<TerminalSessionSnapshot>;\n    restart: (input: typeof TerminalRestartInput.Encoded) => Promise<TerminalSessionSnapshot>;\n    close: (input: typeof TerminalCloseInput.Encoded) => Promise<void>;\n    onEvent: (callback: (event: TerminalEvent) => void) => () => void;\n  };\n  projects: {\n    searchEntries: (input: ProjectSearchEntriesInput) => Promise<ProjectSearchEntriesResult>;\n    listDirectoryEntries: (\n      input: ProjectListDirectoryEntriesInput,\n    ) => Promise<ProjectListDirectoryEntriesResult>;\n    readFile: (input: ProjectReadFileInput) => Promise<ProjectReadFileResult>;\n    writeFile: (input: ProjectWriteFileInput) => Promise<ProjectWriteFileResult>;\n    deleteEntry: (input: ProjectDeleteEntryInput) => Promise<ProjectDeleteEntryResult>;\n  };\n  filesystem: {\n    browse: (input: FilesystemBrowseInput) => Promise<FilesystemBrowseResult>;\n  };\n  sourceControl: {\n    lookupRepository: (\n      input: SourceControlRepositoryLookupInput,\n    ) => Promise<SourceControlRepositoryInfo>;\n    cloneRepository: (\n      input: SourceControlCloneRepositoryInput,\n    ) => Promise<SourceControlCloneRepositoryResult>;\n    publishRepository: (\n      input: SourceControlPublishRepositoryInput,\n    ) => Promise<SourceControlPublishRepositoryResult>;\n  };\n  vcs: {\n    listRefs: (input: VcsListRefsInput) => Promise<VcsListRefsResult>;\n    createWorktree: (input: VcsCreateWorktreeInput) => Promise<VcsCreateWorktreeResult>;\n    removeWorktree: (input: VcsRemoveWorktreeInput) => Promise<void>;\n    createRef: (input: VcsCreateRefInput) => Promise<VcsCreateRefResult>;\n    switchRef: (input: VcsSwitchRefInput) => Promise<VcsSwitchRefResult>;\n    init: (input: VcsInitInput) => Promise<void>;\n    pull: (input: VcsPullInput) => Promise<VcsPullResult>;\n    stageFiles: (input: VcsStageFilesInput) => Promise<VcsStatusLocalResult>;\n    unstageFiles: (input: VcsUnstageFilesInput) => Promise<VcsStatusLocalResult>;\n    revertUnstagedFiles: (input: VcsRevertUnstagedFilesInput) => Promise<VcsStatusLocalResult>;\n    getWorkingTreeDiff: (input: VcsWorkingTreeDiffInput) => Promise<VcsWorkingTreeDiffResult>;\n    refreshStatus: (input: VcsStatusInput) => Promise<VcsStatusResult>;\n    onStatus: (\n      input: VcsStatusInput,\n      callback: (status: VcsStatusResult) => void,\n      options?: {\n        onResubscribe?: () => void;\n      },\n    ) => () => void;\n  };\n  git: {\n    resolvePullRequest: (input: GitPullRequestRefInput) => Promise<GitResolvePullRequestResult>;\n    preparePullRequestThread: (\n      input: GitPreparePullRequestThreadInput,\n    ) => Promise<GitPreparePullRequestThreadResult>;\n  };\n  server: {\n    probeDevServerUrl: (\n      input: ServerProbeDevServerUrlInput,\n    ) => Promise<ServerProbeDevServerUrlResult>;\n  };\n  orchestration: {\n    dispatchCommand: (command: ClientOrchestrationCommand) => Promise<{ sequence: number }>;\n    getTurnDiff: (input: OrchestrationGetTurnDiffInput) => Promise<OrchestrationGetTurnDiffResult>;\n    getFullThreadDiff: (\n      input: OrchestrationGetFullThreadDiffInput,\n    ) => Promise<OrchestrationGetFullThreadDiffResult>;\n    getThreadDetailPage: (\n      input: OrchestrationGetThreadDetailPageInput,\n    ) => Promise<OrchestrationThreadDetailSnapshot>;\n    reconcileThreadDetail: (\n      input: OrchestrationReconcileThreadDetailInput,\n    ) => Promise<OrchestrationReconcileThreadDetailResult>;\n    getArchivedShellSnapshot: () => Promise<OrchestrationShellSnapshot>;\n    subscribeShell: (\n      callback: (event: OrchestrationShellStreamItem) => void,\n      options?: {\n        onResubscribe?: () => void;\n      },\n    ) => () => void;\n    subscribeThread: (\n      input: OrchestrationSubscribeThreadInput,\n      callback: (event: OrchestrationThreadStreamItem) => void,\n      options?: {\n        onResubscribe?: () => void;\n      },\n    ) => () => void;\n  };\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nexport const DEFAULT_TERMINAL_ID = \"default\";\n\nconst TrimmedNonEmptyStringSchema = TrimmedNonEmptyString;\nconst TerminalColsSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).check(\n  Schema.isLessThanOrEqualTo(1000),\n);\nconst TerminalRowsSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).check(\n  Schema.isLessThanOrEqualTo(500),\n);\nconst TerminalIdSchema = TrimmedNonEmptyStringSchema.check(Schema.isMaxLength(128));\nconst TerminalEnvKeySchema = Schema.String.check(\n  Schema.isPattern(/^[A-Za-z_][A-Za-z0-9_]*$/),\n).check(Schema.isMaxLength(128));\nconst isTerminalEnvKey = Schema.is(TerminalEnvKeySchema);\nconst TerminalEnvValueSchema = Schema.String.check(Schema.isMaxLength(8_192));\nconst TerminalEnvSchema = Schema.Record(Schema.String, TerminalEnvValueSchema).check(\n  Schema.makeFilter((env) => {\n    const invalidKey = Object.keys(env).find((key) => !isTerminalEnvKey(key));\n    return invalidKey === undefined\n      ? undefined\n      : {\n          path: [invalidKey],\n          issue: \"Invalid terminal environment variable name\",\n        };\n  }),\n  Schema.isMaxProperties(128),\n);\n\nconst TerminalIdWithDefaultSchema = TerminalIdSchema.pipe(\n  Schema.withDecodingDefault(Effect.succeed(DEFAULT_TERMINAL_ID)),\n);\n\nexport const TerminalThreadInput = Schema.Struct({\n  threadId: TrimmedNonEmptyStringSchema,\n});\nexport type TerminalThreadInput = typeof TerminalThreadInput.Type;\n\nconst TerminalSessionInput = Schema.Struct({\n  ...TerminalThreadInput.fields,\n  terminalId: TerminalIdWithDefaultSchema,\n});\nexport type TerminalSessionInput = Schema.Codec.Encoded<typeof TerminalSessionInput>;\n\nexport const TerminalOpenInput = Schema.Struct({\n  ...TerminalSessionInput.fields,\n  cwd: TrimmedNonEmptyStringSchema,\n  worktreePath: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  cols: Schema.optional(TerminalColsSchema),\n  rows: Schema.optional(TerminalRowsSchema),\n  env: Schema.optional(TerminalEnvSchema),\n});\nexport type TerminalOpenInput = Schema.Codec.Encoded<typeof TerminalOpenInput>;\n\nexport const TerminalWriteInput = Schema.Struct({\n  ...TerminalSessionInput.fields,\n  data: Schema.String.check(Schema.isNonEmpty()).check(Schema.isMaxLength(65_536)),\n});\nexport type TerminalWriteInput = Schema.Codec.Encoded<typeof TerminalWriteInput>;\n\nexport const TerminalResizeInput = Schema.Struct({\n  ...TerminalSessionInput.fields,\n  cols: TerminalColsSchema,\n  rows: TerminalRowsSchema,\n});\nexport type TerminalResizeInput = Schema.Codec.Encoded<typeof TerminalResizeInput>;\n\nexport const TerminalClearInput = TerminalSessionInput;\nexport type TerminalClearInput = Schema.Codec.Encoded<typeof TerminalClearInput>;\n\nexport const TerminalSnapshotInput = TerminalSessionInput;\nexport type TerminalSnapshotInput = Schema.Codec.Encoded<typeof TerminalSnapshotInput>;\n\nexport const TerminalRestartInput = Schema.Struct({\n  ...TerminalSessionInput.fields,\n  cwd: TrimmedNonEmptyStringSchema,\n  worktreePath: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  cols: TerminalColsSchema,\n  rows: TerminalRowsSchema,\n  env: Schema.optional(TerminalEnvSchema),\n});\nexport type TerminalRestartInput = Schema.Codec.Encoded<typeof TerminalRestartInput>;\n\nexport const TerminalCloseInput = Schema.Struct({\n  ...TerminalThreadInput.fields,\n  terminalId: Schema.optional(TerminalIdSchema),\n  deleteHistory: Schema.optional(Schema.Boolean),\n});\nexport type TerminalCloseInput = typeof TerminalCloseInput.Type;\n\nexport const TerminalSessionStatus = Schema.Literals([\"starting\", \"running\", \"exited\", \"error\"]);\nexport type TerminalSessionStatus = typeof TerminalSessionStatus.Type;\n\nexport const TerminalSessionSnapshot = Schema.Struct({\n  threadId: Schema.String.check(Schema.isNonEmpty()),\n  terminalId: Schema.String.check(Schema.isNonEmpty()),\n  cwd: Schema.String.check(Schema.isNonEmpty()),\n  worktreePath: Schema.NullOr(TrimmedNonEmptyStringSchema),\n  status: TerminalSessionStatus,\n  pid: Schema.NullOr(Schema.Int.check(Schema.isGreaterThan(0))),\n  history: Schema.String,\n  exitCode: Schema.NullOr(Schema.Int),\n  exitSignal: Schema.NullOr(Schema.Int),\n  updatedAt: Schema.String,\n});\nexport type TerminalSessionSnapshot = typeof TerminalSessionSnapshot.Type;\n\nconst TerminalEventBaseSchema = Schema.Struct({\n  threadId: Schema.String.check(Schema.isNonEmpty()),\n  terminalId: Schema.String.check(Schema.isNonEmpty()),\n  createdAt: Schema.String,\n});\n\nconst TerminalStartedEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"started\"),\n  snapshot: TerminalSessionSnapshot,\n});\n\nconst TerminalOutputEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"output\"),\n  data: Schema.String,\n});\n\nconst TerminalExitedEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"exited\"),\n  exitCode: Schema.NullOr(Schema.Int),\n  exitSignal: Schema.NullOr(Schema.Int),\n});\n\nconst TerminalErrorEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"error\"),\n  message: Schema.String.check(Schema.isNonEmpty()),\n});\n\nconst TerminalClearedEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"cleared\"),\n});\n\nconst TerminalRestartedEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"restarted\"),\n  snapshot: TerminalSessionSnapshot,\n});\n\nconst TerminalActivityEvent = Schema.Struct({\n  ...TerminalEventBaseSchema.fields,\n  type: Schema.Literal(\"activity\"),\n  hasRunningSubprocess: Schema.Boolean,\n});\n\nexport const TerminalEvent = Schema.Union([\n  TerminalStartedEvent,\n  TerminalOutputEvent,\n  TerminalExitedEvent,\n  TerminalErrorEvent,\n  TerminalClearedEvent,\n  TerminalRestartedEvent,\n  TerminalActivityEvent,\n]);\nexport type TerminalEvent = typeof TerminalEvent.Type;\n\nexport class TerminalCwdError extends Schema.TaggedErrorClass<TerminalCwdError>()(\n  \"TerminalCwdError\",\n  {\n    cwd: Schema.String,\n    reason: Schema.Literals([\"notFound\", \"notDirectory\", \"statFailed\"]),\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message() {\n    if (this.reason === \"notDirectory\") {\n      return `Terminal cwd is not a directory: ${this.cwd}`;\n    }\n    if (this.reason === \"notFound\") {\n      return `Terminal cwd does not exist: ${this.cwd}`;\n    }\n    const causeMessage =\n      this.cause !== undefined &&\n      this.cause !== null &&\n      typeof this.cause === \"object\" &&\n      \"message\" in this.cause\n        ? this.cause.message\n        : undefined;\n    return typeof causeMessage === \"string\" && causeMessage.length > 0\n      ? `Failed to access terminal cwd: ${this.cwd} (${causeMessage})`\n      : `Failed to access terminal cwd: ${this.cwd}`;\n  }\n}\n\nexport class TerminalHistoryError extends Schema.TaggedErrorClass<TerminalHistoryError>()(\n  \"TerminalHistoryError\",\n  {\n    operation: Schema.Literals([\"read\", \"truncate\", \"migrate\"]),\n    threadId: Schema.String,\n    terminalId: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message() {\n    return `Failed to ${this.operation} terminal history for thread: ${this.threadId}, terminal: ${this.terminalId}`;\n  }\n}\n\nexport class TerminalSessionLookupError extends Schema.TaggedErrorClass<TerminalSessionLookupError>()(\n  \"TerminalSessionLookupError\",\n  {\n    threadId: Schema.String,\n    terminalId: Schema.String,\n  },\n) {\n  override get message() {\n    return `Unknown terminal thread: ${this.threadId}, terminal: ${this.terminalId}`;\n  }\n}\n\nexport class TerminalNotRunningError extends Schema.TaggedErrorClass<TerminalNotRunningError>()(\n  \"TerminalNotRunningError\",\n  {\n    threadId: Schema.String,\n    terminalId: Schema.String,\n  },\n) {\n  override get message() {\n    return `Terminal is not running for thread: ${this.threadId}, terminal: ${this.terminalId}`;\n  }\n}\n\nexport const TerminalError = Schema.Union([\n  TerminalCwdError,\n  TerminalHistoryError,\n  TerminalSessionLookupError,\n  TerminalNotRunningError,\n]);\nexport type TerminalError = typeof TerminalError.Type;\n","import * as Schema from \"effect/Schema\";\n\nexport const TRANSCRIPTION_STATUS_ROUTE_PATH = \"/api/transcription/status\";\nexport const TRANSCRIPTION_ROUTE_PATH = \"/api/transcription\";\n\nexport const TRANSCRIPTION_AUDIO_MAX_BYTES = 8 * 1024 * 1024;\nexport const TRANSCRIPTION_MAX_RECORDING_MS = 2 * 60 * 1000;\n\nexport const TranscriptionModel = Schema.Literals([\"tiny.en\", \"base.en\", \"small.en\"]);\nexport type TranscriptionModel = typeof TranscriptionModel.Type;\nexport const DEFAULT_TRANSCRIPTION_MODEL: TranscriptionModel = \"small.en\";\n\nexport const TranscriptionStatusState = Schema.Literals([\n  \"unavailable\",\n  \"checking\",\n  \"downloading-runtime\",\n  \"downloading-model\",\n  \"starting\",\n  \"ready\",\n  \"error\",\n]);\nexport type TranscriptionStatusState = typeof TranscriptionStatusState.Type;\n\nexport const TranscriptionStatus = Schema.Struct({\n  configured: Schema.Boolean,\n  state: TranscriptionStatusState,\n  downloadedBytes: Schema.NullOr(Schema.Number),\n  totalBytes: Schema.NullOr(Schema.Number),\n  message: Schema.NullOr(Schema.String),\n});\nexport type TranscriptionStatus = typeof TranscriptionStatus.Type;\n\nexport const TranscriptionResult = Schema.Struct({\n  text: Schema.String,\n});\nexport type TranscriptionResult = typeof TranscriptionResult.Type;\n\nexport const TranscriptionErrorCode = Schema.Literals([\n  \"not_configured\",\n  \"invalid_audio\",\n  \"audio_too_large\",\n  \"transcription_failed\",\n]);\nexport type TranscriptionErrorCode = typeof TranscriptionErrorCode.Type;\n\nexport const TranscriptionErrorResponse = Schema.Struct({\n  code: TranscriptionErrorCode,\n  error: Schema.String,\n});\nexport type TranscriptionErrorResponse = typeof TranscriptionErrorResponse.Type;\n","import * as Schema from \"effect/Schema\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\nimport {\n  ApprovalRequestId,\n  EventId,\n  IsoDateTime,\n  MessageId,\n  ProviderItemId,\n  ThreadId,\n  TurnId,\n} from \"./baseSchemas.ts\";\nimport {\n  ChatAttachment,\n  ModelSelection,\n  PROVIDER_SEND_TURN_MAX_ATTACHMENTS,\n  PROVIDER_SEND_TURN_MAX_INPUT_CHARS,\n  ProviderApprovalDecision,\n  ProviderApprovalPolicy,\n  ProviderInteractionMode,\n  ProviderRequestKind,\n  ProviderSandboxMode,\n  ProviderUserInputAnswers,\n  RuntimeMode,\n} from \"./orchestration.ts\";\nimport { ProviderInstanceId, ProviderDriverKind } from \"./providerInstance.ts\";\n\nconst ProviderSessionStatus = Schema.Literals([\n  \"connecting\",\n  \"ready\",\n  \"running\",\n  \"error\",\n  \"closed\",\n]);\n\nexport const ProviderSession = Schema.Struct({\n  provider: ProviderDriverKind,\n  // Optional during the driver/instance migration. Once every producer\n  // populates it (post-slice-4), routing flips to instance-id-only and the\n  // legacy `provider` field is removed.\n  providerInstanceId: Schema.optional(ProviderInstanceId),\n  status: ProviderSessionStatus,\n  runtimeMode: RuntimeMode,\n  cwd: Schema.optional(TrimmedNonEmptyString),\n  model: Schema.optional(TrimmedNonEmptyString),\n  threadId: ThreadId,\n  resumeCursor: Schema.optional(Schema.Unknown),\n  activeTurnId: Schema.optional(TurnId),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n  lastError: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ProviderSession = typeof ProviderSession.Type;\n\nexport const ProviderSessionStartInput = Schema.Struct({\n  threadId: ThreadId,\n  provider: Schema.optional(ProviderDriverKind),\n  // See ProviderSession for the migration story.\n  providerInstanceId: Schema.optional(ProviderInstanceId),\n  cwd: Schema.optional(TrimmedNonEmptyString),\n  modelSelection: Schema.optional(ModelSelection),\n  resumeCursor: Schema.optional(Schema.Unknown),\n  approvalPolicy: Schema.optional(ProviderApprovalPolicy),\n  sandboxMode: Schema.optional(ProviderSandboxMode),\n  runtimeMode: RuntimeMode,\n});\nexport type ProviderSessionStartInput = typeof ProviderSessionStartInput.Type;\n\nexport const ProviderSendTurnInput = Schema.Struct({\n  threadId: ThreadId,\n  input: Schema.optional(\n    TrimmedNonEmptyString.check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_INPUT_CHARS)),\n  ),\n  attachments: Schema.optional(\n    Schema.Array(ChatAttachment).check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_ATTACHMENTS)),\n  ),\n  modelSelection: Schema.optional(ModelSelection),\n  interactionMode: Schema.optional(ProviderInteractionMode),\n});\nexport type ProviderSendTurnInput = typeof ProviderSendTurnInput.Type;\n\nexport const ProviderSteerTurnInput = Schema.Struct({\n  threadId: ThreadId,\n  expectedTurnId: TurnId,\n  messageId: MessageId,\n  input: Schema.optional(\n    TrimmedNonEmptyString.check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_INPUT_CHARS)),\n  ),\n  attachments: Schema.optional(\n    Schema.Array(ChatAttachment).check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_ATTACHMENTS)),\n  ),\n});\nexport type ProviderSteerTurnInput = typeof ProviderSteerTurnInput.Type;\n\nexport const ProviderTurnStartResult = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  resumeCursor: Schema.optional(Schema.Unknown),\n});\nexport type ProviderTurnStartResult = typeof ProviderTurnStartResult.Type;\n\nexport const ProviderInterruptTurnInput = Schema.Struct({\n  threadId: ThreadId,\n  turnId: Schema.optional(TurnId),\n});\nexport type ProviderInterruptTurnInput = typeof ProviderInterruptTurnInput.Type;\n\nexport const ProviderStopSessionInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ProviderStopSessionInput = typeof ProviderStopSessionInput.Type;\n\nexport const ProviderRespondToRequestInput = Schema.Struct({\n  threadId: ThreadId,\n  requestId: ApprovalRequestId,\n  decision: ProviderApprovalDecision,\n});\nexport type ProviderRespondToRequestInput = typeof ProviderRespondToRequestInput.Type;\n\nexport const ProviderRespondToUserInputInput = Schema.Struct({\n  threadId: ThreadId,\n  requestId: ApprovalRequestId,\n  answers: ProviderUserInputAnswers,\n});\nexport type ProviderRespondToUserInputInput = typeof ProviderRespondToUserInputInput.Type;\n\nconst ProviderEventKind = Schema.Literals([\"session\", \"notification\", \"request\", \"error\"]);\n\nexport const ProviderEvent = Schema.Struct({\n  id: EventId,\n  kind: ProviderEventKind,\n  provider: ProviderDriverKind,\n  // See ProviderSession for the migration story.\n  providerInstanceId: Schema.optional(ProviderInstanceId),\n  threadId: ThreadId,\n  createdAt: IsoDateTime,\n  method: TrimmedNonEmptyString,\n  message: Schema.optional(TrimmedNonEmptyString),\n  turnId: Schema.optional(TurnId),\n  itemId: Schema.optional(ProviderItemId),\n  requestId: Schema.optional(ApprovalRequestId),\n  requestKind: Schema.optional(ProviderRequestKind),\n  textDelta: Schema.optional(Schema.String),\n  payload: Schema.optional(Schema.Unknown),\n});\nexport type ProviderEvent = typeof ProviderEvent.Type;\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { ModelSelection, ProviderInteractionMode, RuntimeMode } from \"./orchestration.ts\";\nimport {\n  EventId,\n  IsoDateTime,\n  MessageId,\n  NonNegativeInt,\n  ProviderItemId,\n  PositiveInt,\n  RuntimeItemId,\n  RuntimeRequestId,\n  RuntimeSubagentId,\n  RuntimeTaskId,\n  ThreadId,\n  TrimmedNonEmptyString,\n  TurnId,\n} from \"./baseSchemas.ts\";\nimport { ProviderInstanceId, ProviderDriverKind } from \"./providerInstance.ts\";\n\nconst TrimmedNonEmptyStringSchema = TrimmedNonEmptyString;\nconst UnknownRecordSchema = Schema.Record(Schema.String, Schema.Unknown);\n\nconst RuntimeEventRawSource = Schema.Union([\n  Schema.Literal(\"codex.app-server.notification\"),\n  Schema.Literal(\"codex.app-server.request\"),\n  Schema.Literal(\"codex.eventmsg\"),\n  Schema.Literal(\"claude.sdk.message\"),\n  Schema.Literal(\"claude.sdk.permission\"),\n  Schema.Literal(\"claude.oauth.usage\"),\n  Schema.Literal(\"claude.statusline\"),\n  Schema.Literal(\"codex.sdk.thread-event\"),\n  Schema.Literal(\"opencode.sdk.event\"),\n  Schema.Literal(\"acp.jsonrpc\"),\n  Schema.TemplateLiteral([\"acp.\", Schema.String, \".extension\"]),\n]);\nexport type RuntimeEventRawSource = typeof RuntimeEventRawSource.Type;\n\nexport const RuntimeEventRaw = Schema.Struct({\n  source: RuntimeEventRawSource,\n  method: Schema.optional(TrimmedNonEmptyStringSchema),\n  messageType: Schema.optional(TrimmedNonEmptyStringSchema),\n  payload: Schema.Unknown,\n});\nexport type RuntimeEventRaw = typeof RuntimeEventRaw.Type;\n\nconst ProviderRequestId = TrimmedNonEmptyStringSchema;\nexport type ProviderRequestId = typeof ProviderRequestId.Type;\n\nconst ProviderRefs = Schema.Struct({\n  providerTurnId: Schema.optional(TrimmedNonEmptyStringSchema),\n  providerItemId: Schema.optional(ProviderItemId),\n  providerRequestId: Schema.optional(ProviderRequestId),\n});\nexport type ProviderRefs = typeof ProviderRefs.Type;\n\nconst RuntimeSessionState = Schema.Literals([\n  \"starting\",\n  \"ready\",\n  \"running\",\n  \"waiting\",\n  \"stopped\",\n  \"error\",\n]);\nexport type RuntimeSessionState = typeof RuntimeSessionState.Type;\n\nconst RuntimeThreadState = Schema.Literals([\n  \"active\",\n  \"idle\",\n  \"archived\",\n  \"closed\",\n  \"compacted\",\n  \"error\",\n]);\nexport type RuntimeThreadState = typeof RuntimeThreadState.Type;\n\nconst RuntimeTurnState = Schema.Literals([\"completed\", \"failed\", \"interrupted\", \"cancelled\"]);\nexport type RuntimeTurnState = typeof RuntimeTurnState.Type;\n\nconst RuntimePlanStepStatus = Schema.Literals([\"pending\", \"inProgress\", \"completed\"]);\nexport type RuntimePlanStepStatus = typeof RuntimePlanStepStatus.Type;\n\nconst RuntimeItemStatus = Schema.Literals([\"inProgress\", \"completed\", \"failed\", \"declined\"]);\nexport type RuntimeItemStatus = typeof RuntimeItemStatus.Type;\n\nconst RuntimeContentStreamKind = Schema.Literals([\n  \"assistant_text\",\n  \"reasoning_text\",\n  \"reasoning_summary_text\",\n  \"plan_text\",\n  \"command_output\",\n  \"file_change_output\",\n  \"unknown\",\n]);\nexport type RuntimeContentStreamKind = typeof RuntimeContentStreamKind.Type;\n\nconst RuntimeSessionExitKind = Schema.Literals([\"graceful\", \"error\"]);\nexport type RuntimeSessionExitKind = typeof RuntimeSessionExitKind.Type;\n\nconst RuntimeErrorClass = Schema.Literals([\n  \"provider_error\",\n  \"transport_error\",\n  \"permission_error\",\n  \"validation_error\",\n  \"unknown\",\n]);\nexport type RuntimeErrorClass = typeof RuntimeErrorClass.Type;\n\nexport const TOOL_LIFECYCLE_ITEM_TYPES = [\n  \"command_execution\",\n  \"file_change\",\n  \"mcp_tool_call\",\n  \"dynamic_tool_call\",\n  \"collab_agent_tool_call\",\n  \"web_search\",\n  \"image_view\",\n] as const;\n\nexport const ToolLifecycleItemType = Schema.Literals(TOOL_LIFECYCLE_ITEM_TYPES);\nexport type ToolLifecycleItemType = typeof ToolLifecycleItemType.Type;\n\nexport function isToolLifecycleItemType(value: string): value is ToolLifecycleItemType {\n  return TOOL_LIFECYCLE_ITEM_TYPES.includes(value as ToolLifecycleItemType);\n}\n\nexport const CanonicalItemType = Schema.Literals([\n  \"user_message\",\n  \"assistant_message\",\n  \"reasoning\",\n  \"plan\",\n  ...TOOL_LIFECYCLE_ITEM_TYPES,\n  \"review_entered\",\n  \"review_exited\",\n  \"context_compaction\",\n  \"error\",\n  \"unknown\",\n]);\nexport type CanonicalItemType = typeof CanonicalItemType.Type;\n\nexport const CanonicalRequestType = Schema.Literals([\n  \"command_execution_approval\",\n  \"file_read_approval\",\n  \"file_change_approval\",\n  \"apply_patch_approval\",\n  \"exec_command_approval\",\n  \"tool_user_input\",\n  \"dynamic_tool_call\",\n  \"auth_tokens_refresh\",\n  \"unknown\",\n]);\nexport type CanonicalRequestType = typeof CanonicalRequestType.Type;\n\nconst ProviderRuntimeEventType = Schema.Literals([\n  \"session.started\",\n  \"session.configured\",\n  \"session.state.changed\",\n  \"session.exited\",\n  \"thread.started\",\n  \"thread.independent.created\",\n  \"thread.state.changed\",\n  \"thread.metadata.updated\",\n  \"thread.token-usage.updated\",\n  \"thread.realtime.started\",\n  \"thread.realtime.item-added\",\n  \"thread.realtime.audio.delta\",\n  \"thread.realtime.error\",\n  \"thread.realtime.closed\",\n  \"turn.started\",\n  \"turn.completed\",\n  \"turn.aborted\",\n  \"turn.plan.updated\",\n  \"turn.proposed.delta\",\n  \"turn.proposed.completed\",\n  \"turn.diff.updated\",\n  \"item.started\",\n  \"item.updated\",\n  \"item.completed\",\n  \"content.delta\",\n  \"request.opened\",\n  \"request.resolved\",\n  \"user-input.requested\",\n  \"user-input.resolved\",\n  \"task.started\",\n  \"task.progress\",\n  \"task.completed\",\n  \"subagent.started\",\n  \"subagent.updated\",\n  \"subagent.completed\",\n  \"hook.started\",\n  \"hook.progress\",\n  \"hook.completed\",\n  \"tool.progress\",\n  \"tool.summary\",\n  \"auth.status\",\n  \"account.updated\",\n  \"account.rate-limits.updated\",\n  \"mcp.status.updated\",\n  \"mcp.oauth.completed\",\n  \"model.rerouted\",\n  \"config.warning\",\n  \"deprecation.notice\",\n  \"files.persisted\",\n  \"image.generated\",\n  \"tool.denied\",\n  \"runtime.warning\",\n  \"runtime.error\",\n]);\nexport type ProviderRuntimeEventType = typeof ProviderRuntimeEventType.Type;\n\nconst SessionStartedType = Schema.Literal(\"session.started\");\nconst SessionConfiguredType = Schema.Literal(\"session.configured\");\nconst SessionStateChangedType = Schema.Literal(\"session.state.changed\");\nconst SessionExitedType = Schema.Literal(\"session.exited\");\nconst ThreadStartedType = Schema.Literal(\"thread.started\");\nconst ThreadIndependentCreatedType = Schema.Literal(\"thread.independent.created\");\nconst ThreadStateChangedType = Schema.Literal(\"thread.state.changed\");\nconst ThreadMetadataUpdatedType = Schema.Literal(\"thread.metadata.updated\");\nconst ThreadTokenUsageUpdatedType = Schema.Literal(\"thread.token-usage.updated\");\nconst ThreadRealtimeStartedType = Schema.Literal(\"thread.realtime.started\");\nconst ThreadRealtimeItemAddedType = Schema.Literal(\"thread.realtime.item-added\");\nconst ThreadRealtimeAudioDeltaType = Schema.Literal(\"thread.realtime.audio.delta\");\nconst ThreadRealtimeErrorType = Schema.Literal(\"thread.realtime.error\");\nconst ThreadRealtimeClosedType = Schema.Literal(\"thread.realtime.closed\");\nconst TurnStartedType = Schema.Literal(\"turn.started\");\nconst TurnCompletedType = Schema.Literal(\"turn.completed\");\nconst TurnAbortedType = Schema.Literal(\"turn.aborted\");\nconst TurnPlanUpdatedType = Schema.Literal(\"turn.plan.updated\");\nconst TurnProposedDeltaType = Schema.Literal(\"turn.proposed.delta\");\nconst TurnProposedCompletedType = Schema.Literal(\"turn.proposed.completed\");\nconst TurnDiffUpdatedType = Schema.Literal(\"turn.diff.updated\");\nconst ItemStartedType = Schema.Literal(\"item.started\");\nconst ItemUpdatedType = Schema.Literal(\"item.updated\");\nconst ItemCompletedType = Schema.Literal(\"item.completed\");\nconst ContentDeltaType = Schema.Literal(\"content.delta\");\nconst RequestOpenedType = Schema.Literal(\"request.opened\");\nconst RequestResolvedType = Schema.Literal(\"request.resolved\");\nconst UserInputRequestedType = Schema.Literal(\"user-input.requested\");\nconst UserInputResolvedType = Schema.Literal(\"user-input.resolved\");\nconst TaskStartedType = Schema.Literal(\"task.started\");\nconst TaskProgressType = Schema.Literal(\"task.progress\");\nconst TaskCompletedType = Schema.Literal(\"task.completed\");\nconst SubagentStartedType = Schema.Literal(\"subagent.started\");\nconst SubagentUpdatedType = Schema.Literal(\"subagent.updated\");\nconst SubagentCompletedType = Schema.Literal(\"subagent.completed\");\nconst HookStartedType = Schema.Literal(\"hook.started\");\nconst HookProgressType = Schema.Literal(\"hook.progress\");\nconst HookCompletedType = Schema.Literal(\"hook.completed\");\nconst ToolProgressType = Schema.Literal(\"tool.progress\");\nconst ToolSummaryType = Schema.Literal(\"tool.summary\");\nconst AuthStatusType = Schema.Literal(\"auth.status\");\nconst AccountUpdatedType = Schema.Literal(\"account.updated\");\nconst AccountRateLimitsUpdatedType = Schema.Literal(\"account.rate-limits.updated\");\nconst McpStatusUpdatedType = Schema.Literal(\"mcp.status.updated\");\nconst McpOauthCompletedType = Schema.Literal(\"mcp.oauth.completed\");\nconst ModelReroutedType = Schema.Literal(\"model.rerouted\");\nconst ConfigWarningType = Schema.Literal(\"config.warning\");\nconst DeprecationNoticeType = Schema.Literal(\"deprecation.notice\");\nconst FilesPersistedType = Schema.Literal(\"files.persisted\");\nconst ImageGeneratedType = Schema.Literal(\"image.generated\");\nconst ToolDeniedType = Schema.Literal(\"tool.denied\");\nconst RuntimeWarningType = Schema.Literal(\"runtime.warning\");\nconst RuntimeErrorType = Schema.Literal(\"runtime.error\");\n\nconst ProviderRuntimeEventBase = Schema.Struct({\n  eventId: EventId,\n  provider: ProviderDriverKind,\n  // Optional during the driver/instance migration. See providerInstance.ts\n  // for the routing-key-vs-driver-id distinction. Once every emitter\n  // populates it (post-slice-4), routing flips to instance-id-only.\n  providerInstanceId: Schema.optional(ProviderInstanceId),\n  threadId: ThreadId,\n  createdAt: IsoDateTime,\n  turnId: Schema.optional(TurnId),\n  itemId: Schema.optional(RuntimeItemId),\n  requestId: Schema.optional(RuntimeRequestId),\n  providerRefs: Schema.optional(ProviderRefs),\n  raw: Schema.optional(RuntimeEventRaw),\n});\nexport type ProviderRuntimeEventBase = typeof ProviderRuntimeEventBase.Type;\n\nconst SessionStartedPayload = Schema.Struct({\n  message: Schema.optional(TrimmedNonEmptyStringSchema),\n  resume: Schema.optional(Schema.Unknown),\n});\nexport type SessionStartedPayload = typeof SessionStartedPayload.Type;\n\nconst SessionConfiguredPayload = Schema.Struct({\n  config: UnknownRecordSchema,\n});\nexport type SessionConfiguredPayload = typeof SessionConfiguredPayload.Type;\n\nconst SessionStateChangedPayload = Schema.Struct({\n  state: RuntimeSessionState,\n  reason: Schema.optional(TrimmedNonEmptyStringSchema),\n  detail: Schema.optional(Schema.Unknown),\n});\nexport type SessionStateChangedPayload = typeof SessionStateChangedPayload.Type;\n\nconst SessionExitedPayload = Schema.Struct({\n  reason: Schema.optional(TrimmedNonEmptyStringSchema),\n  recoverable: Schema.optional(Schema.Boolean),\n  exitKind: Schema.optional(RuntimeSessionExitKind),\n});\nexport type SessionExitedPayload = typeof SessionExitedPayload.Type;\n\nconst ThreadStartedPayload = Schema.Struct({\n  providerThreadId: Schema.optional(TrimmedNonEmptyStringSchema),\n  providerParentThreadId: Schema.optional(TrimmedNonEmptyStringSchema),\n  parentThreadId: Schema.optional(ThreadId),\n  subagentKind: Schema.optional(TrimmedNonEmptyStringSchema),\n  subagentNickname: Schema.optional(TrimmedNonEmptyStringSchema),\n  subagentRole: Schema.optional(TrimmedNonEmptyStringSchema),\n  subagentPath: Schema.optional(TrimmedNonEmptyStringSchema),\n  hiddenFromThreadList: Schema.optional(Schema.Boolean),\n});\nexport type ThreadStartedPayload = typeof ThreadStartedPayload.Type;\n\nconst ThreadIndependentCreatedPayload = Schema.Struct({\n  threadId: ThreadId,\n  title: TrimmedNonEmptyStringSchema,\n  initialPrompt: Schema.optional(TrimmedNonEmptyStringSchema),\n  initialMessageId: Schema.optional(MessageId),\n  titleSeed: Schema.optional(TrimmedNonEmptyStringSchema),\n  modelSelection: Schema.optional(ModelSelection),\n  runtimeMode: Schema.optional(RuntimeMode),\n  interactionMode: Schema.optional(ProviderInteractionMode),\n  branch: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  worktreePath: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  workspaceRoot: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  createdByThreadId: Schema.optional(ThreadId),\n  originThreadId: Schema.optional(ThreadId),\n  providerThreadId: Schema.optional(TrimmedNonEmptyStringSchema),\n  sourceItemId: Schema.optional(RuntimeItemId),\n});\nexport type ThreadIndependentCreatedPayload = typeof ThreadIndependentCreatedPayload.Type;\n\nconst ThreadStateChangedPayload = Schema.Struct({\n  state: RuntimeThreadState,\n  detail: Schema.optional(Schema.Unknown),\n});\nexport type ThreadStateChangedPayload = typeof ThreadStateChangedPayload.Type;\n\nconst ThreadMetadataUpdatedPayload = Schema.Struct({\n  name: Schema.optional(TrimmedNonEmptyStringSchema),\n  metadata: Schema.optional(UnknownRecordSchema),\n});\nexport type ThreadMetadataUpdatedPayload = typeof ThreadMetadataUpdatedPayload.Type;\n\nexport const ThreadTokenUsageSnapshot = Schema.Struct({\n  usedTokens: NonNegativeInt,\n  totalProcessedTokens: Schema.optional(NonNegativeInt),\n  maxTokens: Schema.optional(PositiveInt),\n  inputTokens: Schema.optional(NonNegativeInt),\n  cachedInputTokens: Schema.optional(NonNegativeInt),\n  outputTokens: Schema.optional(NonNegativeInt),\n  reasoningOutputTokens: Schema.optional(NonNegativeInt),\n  lastUsedTokens: Schema.optional(NonNegativeInt),\n  lastInputTokens: Schema.optional(NonNegativeInt),\n  lastCachedInputTokens: Schema.optional(NonNegativeInt),\n  lastOutputTokens: Schema.optional(NonNegativeInt),\n  lastReasoningOutputTokens: Schema.optional(NonNegativeInt),\n  toolUses: Schema.optional(NonNegativeInt),\n  durationMs: Schema.optional(NonNegativeInt),\n  compactsAutomatically: Schema.optional(Schema.Boolean),\n  costUsd: Schema.optional(Schema.Number),\n});\nexport type ThreadTokenUsageSnapshot = typeof ThreadTokenUsageSnapshot.Type;\n\nconst ThreadTokenUsageUpdatedPayload = Schema.Struct({\n  usage: ThreadTokenUsageSnapshot,\n});\nexport type ThreadTokenUsageUpdatedPayload = typeof ThreadTokenUsageUpdatedPayload.Type;\n\nconst ThreadRealtimeStartedPayload = Schema.Struct({\n  realtimeSessionId: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type ThreadRealtimeStartedPayload = typeof ThreadRealtimeStartedPayload.Type;\n\nconst ThreadRealtimeItemAddedPayload = Schema.Struct({\n  item: Schema.Unknown,\n});\nexport type ThreadRealtimeItemAddedPayload = typeof ThreadRealtimeItemAddedPayload.Type;\n\nconst ThreadRealtimeAudioDeltaPayload = Schema.Struct({\n  audio: Schema.Unknown,\n});\nexport type ThreadRealtimeAudioDeltaPayload = typeof ThreadRealtimeAudioDeltaPayload.Type;\n\nconst ThreadRealtimeErrorPayload = Schema.Struct({\n  message: TrimmedNonEmptyStringSchema,\n});\nexport type ThreadRealtimeErrorPayload = typeof ThreadRealtimeErrorPayload.Type;\n\nconst ThreadRealtimeClosedPayload = Schema.Struct({\n  reason: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type ThreadRealtimeClosedPayload = typeof ThreadRealtimeClosedPayload.Type;\n\nconst TurnStartedPayload = Schema.Struct({\n  model: Schema.optional(TrimmedNonEmptyStringSchema),\n  effort: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type TurnStartedPayload = typeof TurnStartedPayload.Type;\n\nconst TurnCompletedPayload = Schema.Struct({\n  state: RuntimeTurnState,\n  stopReason: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  usage: Schema.optional(Schema.Unknown),\n  modelUsage: Schema.optional(UnknownRecordSchema),\n  totalCostUsd: Schema.optional(Schema.Number),\n  errorMessage: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type TurnCompletedPayload = typeof TurnCompletedPayload.Type;\n\nconst TurnAbortedPayload = Schema.Struct({\n  reason: TrimmedNonEmptyStringSchema,\n});\nexport type TurnAbortedPayload = typeof TurnAbortedPayload.Type;\n\nconst RuntimePlanStep = Schema.Struct({\n  step: TrimmedNonEmptyStringSchema,\n  status: RuntimePlanStepStatus,\n});\nexport type RuntimePlanStep = typeof RuntimePlanStep.Type;\n\nconst TurnPlanUpdatedPayload = Schema.Struct({\n  explanation: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  plan: Schema.Array(RuntimePlanStep),\n});\nexport type TurnPlanUpdatedPayload = typeof TurnPlanUpdatedPayload.Type;\n\nconst TurnProposedDeltaPayload = Schema.Struct({\n  delta: Schema.String,\n});\nexport type TurnProposedDeltaPayload = typeof TurnProposedDeltaPayload.Type;\n\nconst TurnProposedCompletedPayload = Schema.Struct({\n  planMarkdown: TrimmedNonEmptyStringSchema,\n});\nexport type TurnProposedCompletedPayload = typeof TurnProposedCompletedPayload.Type;\n\nconst TurnDiffUpdatedPayload = Schema.Struct({\n  unifiedDiff: Schema.String,\n});\nexport type TurnDiffUpdatedPayload = typeof TurnDiffUpdatedPayload.Type;\n\nexport const ItemLifecyclePayload = Schema.Struct({\n  itemType: CanonicalItemType,\n  status: Schema.optional(RuntimeItemStatus),\n  title: Schema.optional(TrimmedNonEmptyStringSchema),\n  detail: Schema.optional(TrimmedNonEmptyStringSchema),\n  data: Schema.optional(Schema.Unknown),\n});\nexport type ItemLifecyclePayload = typeof ItemLifecyclePayload.Type;\n\nconst ContentDeltaPayload = Schema.Struct({\n  streamKind: RuntimeContentStreamKind,\n  delta: Schema.String,\n  contentIndex: Schema.optional(Schema.Int),\n  summaryIndex: Schema.optional(Schema.Int),\n});\nexport type ContentDeltaPayload = typeof ContentDeltaPayload.Type;\n\nconst RequestOpenedPayload = Schema.Struct({\n  requestType: CanonicalRequestType,\n  detail: Schema.optional(TrimmedNonEmptyStringSchema),\n  args: Schema.optional(Schema.Unknown),\n});\nexport type RequestOpenedPayload = typeof RequestOpenedPayload.Type;\n\nconst RequestResolvedPayload = Schema.Struct({\n  requestType: CanonicalRequestType,\n  decision: Schema.optional(TrimmedNonEmptyStringSchema),\n  resolution: Schema.optional(Schema.Unknown),\n});\nexport type RequestResolvedPayload = typeof RequestResolvedPayload.Type;\n\nconst UserInputQuestionOption = Schema.Struct({\n  label: TrimmedNonEmptyStringSchema,\n  description: TrimmedNonEmptyStringSchema,\n});\nexport type UserInputQuestionOption = typeof UserInputQuestionOption.Type;\n\nexport const UserInputQuestion = Schema.Struct({\n  id: TrimmedNonEmptyStringSchema,\n  header: TrimmedNonEmptyStringSchema,\n  question: TrimmedNonEmptyStringSchema,\n  options: Schema.Array(UserInputQuestionOption),\n  multiSelect: Schema.optional(Schema.Boolean).pipe(\n    Schema.withConstructorDefault(Effect.succeed(false)),\n  ),\n});\nexport type UserInputQuestion = typeof UserInputQuestion.Type;\n\nconst UserInputRequestedPayload = Schema.Struct({\n  questions: Schema.Array(UserInputQuestion),\n});\nexport type UserInputRequestedPayload = typeof UserInputRequestedPayload.Type;\n\nconst UserInputResolvedPayload = Schema.Struct({\n  answers: UnknownRecordSchema,\n});\nexport type UserInputResolvedPayload = typeof UserInputResolvedPayload.Type;\n\nconst TaskStartedPayload = Schema.Struct({\n  taskId: RuntimeTaskId,\n  description: Schema.optional(TrimmedNonEmptyStringSchema),\n  taskType: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type TaskStartedPayload = typeof TaskStartedPayload.Type;\n\nconst TaskProgressPayload = Schema.Struct({\n  taskId: RuntimeTaskId,\n  description: TrimmedNonEmptyStringSchema,\n  summary: Schema.optional(TrimmedNonEmptyStringSchema),\n  usage: Schema.optional(Schema.Unknown),\n  lastToolName: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type TaskProgressPayload = typeof TaskProgressPayload.Type;\n\nconst TaskCompletedPayload = Schema.Struct({\n  taskId: RuntimeTaskId,\n  status: Schema.Literals([\"completed\", \"failed\", \"stopped\"]),\n  summary: Schema.optional(TrimmedNonEmptyStringSchema),\n  usage: Schema.optional(Schema.Unknown),\n});\nexport type TaskCompletedPayload = typeof TaskCompletedPayload.Type;\n\nconst RuntimeSubagentStatus = Schema.Literals([\n  \"starting\",\n  \"running\",\n  \"completed\",\n  \"failed\",\n  \"stopped\",\n  \"interrupted\",\n]);\nexport type RuntimeSubagentStatus = typeof RuntimeSubagentStatus.Type;\n\nconst RuntimeSubagentCommonPayload = {\n  subagentId: RuntimeSubagentId,\n  providerThreadId: Schema.optional(TrimmedNonEmptyStringSchema),\n  parentTurnId: Schema.optional(TurnId),\n  sourceItemId: Schema.optional(RuntimeItemId),\n  role: Schema.optional(TrimmedNonEmptyStringSchema),\n  nickname: Schema.optional(TrimmedNonEmptyStringSchema),\n  model: Schema.optional(TrimmedNonEmptyStringSchema),\n  prompt: Schema.optional(TrimmedNonEmptyStringSchema),\n  summary: Schema.optional(TrimmedNonEmptyStringSchema),\n  usage: Schema.optional(Schema.Unknown),\n};\n\nconst SubagentStartedPayload = Schema.Struct({\n  ...RuntimeSubagentCommonPayload,\n  status: Schema.optional(RuntimeSubagentStatus),\n});\nexport type SubagentStartedPayload = typeof SubagentStartedPayload.Type;\n\nconst SubagentUpdatedPayload = Schema.Struct({\n  ...RuntimeSubagentCommonPayload,\n  status: Schema.optional(RuntimeSubagentStatus),\n  description: Schema.optional(TrimmedNonEmptyStringSchema),\n  lastToolName: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type SubagentUpdatedPayload = typeof SubagentUpdatedPayload.Type;\n\nconst SubagentCompletedPayload = Schema.Struct({\n  ...RuntimeSubagentCommonPayload,\n  status: Schema.Literals([\"completed\", \"failed\", \"stopped\", \"interrupted\"]),\n  error: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type SubagentCompletedPayload = typeof SubagentCompletedPayload.Type;\n\nconst HookStartedPayload = Schema.Struct({\n  hookId: TrimmedNonEmptyStringSchema,\n  hookName: TrimmedNonEmptyStringSchema,\n  hookEvent: TrimmedNonEmptyStringSchema,\n});\nexport type HookStartedPayload = typeof HookStartedPayload.Type;\n\nconst HookProgressPayload = Schema.Struct({\n  hookId: TrimmedNonEmptyStringSchema,\n  output: Schema.optional(Schema.String),\n  stdout: Schema.optional(Schema.String),\n  stderr: Schema.optional(Schema.String),\n});\nexport type HookProgressPayload = typeof HookProgressPayload.Type;\n\nconst HookCompletedPayload = Schema.Struct({\n  hookId: TrimmedNonEmptyStringSchema,\n  outcome: Schema.Literals([\"success\", \"error\", \"cancelled\"]),\n  output: Schema.optional(Schema.String),\n  stdout: Schema.optional(Schema.String),\n  stderr: Schema.optional(Schema.String),\n  exitCode: Schema.optional(Schema.Int),\n});\nexport type HookCompletedPayload = typeof HookCompletedPayload.Type;\n\nconst ToolProgressPayload = Schema.Struct({\n  toolUseId: Schema.optional(TrimmedNonEmptyStringSchema),\n  toolName: Schema.optional(TrimmedNonEmptyStringSchema),\n  summary: Schema.optional(TrimmedNonEmptyStringSchema),\n  elapsedSeconds: Schema.optional(Schema.Number),\n});\nexport type ToolProgressPayload = typeof ToolProgressPayload.Type;\n\nconst ToolSummaryPayload = Schema.Struct({\n  summary: TrimmedNonEmptyStringSchema,\n  precedingToolUseIds: Schema.optional(Schema.Array(TrimmedNonEmptyStringSchema)),\n});\nexport type ToolSummaryPayload = typeof ToolSummaryPayload.Type;\n\nconst AuthStatusPayload = Schema.Struct({\n  isAuthenticating: Schema.optional(Schema.Boolean),\n  output: Schema.optional(Schema.Array(Schema.String)),\n  error: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type AuthStatusPayload = typeof AuthStatusPayload.Type;\n\nconst AccountUpdatedPayload = Schema.Struct({\n  account: Schema.Unknown,\n});\nexport type AccountUpdatedPayload = typeof AccountUpdatedPayload.Type;\n\nconst AccountRateLimitsUpdatedPayload = Schema.Struct({\n  rateLimits: Schema.Unknown,\n});\nexport type AccountRateLimitsUpdatedPayload = typeof AccountRateLimitsUpdatedPayload.Type;\n\nconst McpStatusUpdatedPayload = Schema.Struct({\n  status: Schema.Unknown,\n});\nexport type McpStatusUpdatedPayload = typeof McpStatusUpdatedPayload.Type;\n\nconst McpOauthCompletedPayload = Schema.Struct({\n  success: Schema.Boolean,\n  name: Schema.optional(TrimmedNonEmptyStringSchema),\n  error: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type McpOauthCompletedPayload = typeof McpOauthCompletedPayload.Type;\n\nconst ModelReroutedPayload = Schema.Struct({\n  fromModel: TrimmedNonEmptyStringSchema,\n  toModel: TrimmedNonEmptyStringSchema,\n  reason: TrimmedNonEmptyStringSchema,\n});\nexport type ModelReroutedPayload = typeof ModelReroutedPayload.Type;\n\nconst ConfigWarningPayload = Schema.Struct({\n  summary: TrimmedNonEmptyStringSchema,\n  details: Schema.optional(TrimmedNonEmptyStringSchema),\n  path: Schema.optional(TrimmedNonEmptyStringSchema),\n  range: Schema.optional(Schema.Unknown),\n});\nexport type ConfigWarningPayload = typeof ConfigWarningPayload.Type;\n\nconst DeprecationNoticePayload = Schema.Struct({\n  summary: TrimmedNonEmptyStringSchema,\n  details: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type DeprecationNoticePayload = typeof DeprecationNoticePayload.Type;\n\nconst FilesPersistedPayload = Schema.Struct({\n  files: Schema.Array(\n    Schema.Struct({\n      filename: TrimmedNonEmptyStringSchema,\n      fileId: TrimmedNonEmptyStringSchema,\n    }),\n  ),\n  failed: Schema.optional(\n    Schema.Array(\n      Schema.Struct({\n        filename: TrimmedNonEmptyStringSchema,\n        error: TrimmedNonEmptyStringSchema,\n      }),\n    ),\n  ),\n});\nexport type FilesPersistedPayload = typeof FilesPersistedPayload.Type;\n\nconst ImageGeneratedPayload = Schema.Struct({\n  dataUrl: TrimmedNonEmptyStringSchema,\n  name: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type ImageGeneratedPayload = typeof ImageGeneratedPayload.Type;\n\nconst ToolDeniedPayload = Schema.Struct({\n  toolName: TrimmedNonEmptyStringSchema,\n  toolUseId: Schema.optional(TrimmedNonEmptyStringSchema),\n  reason: Schema.optional(TrimmedNonEmptyStringSchema),\n  agentId: Schema.optional(TrimmedNonEmptyStringSchema),\n});\nexport type ToolDeniedPayload = typeof ToolDeniedPayload.Type;\n\nconst RuntimeWarningPayload = Schema.Struct({\n  message: TrimmedNonEmptyStringSchema,\n  detail: Schema.optional(Schema.Unknown),\n});\nexport type RuntimeWarningPayload = typeof RuntimeWarningPayload.Type;\n\nconst RuntimeErrorPayload = Schema.Struct({\n  message: TrimmedNonEmptyStringSchema,\n  class: Schema.optional(RuntimeErrorClass),\n  detail: Schema.optional(Schema.Unknown),\n});\nexport type RuntimeErrorPayload = typeof RuntimeErrorPayload.Type;\n\nconst ProviderRuntimeSessionStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SessionStartedType,\n  payload: SessionStartedPayload,\n});\nexport type ProviderRuntimeSessionStartedEvent = typeof ProviderRuntimeSessionStartedEvent.Type;\n\nconst ProviderRuntimeSessionConfiguredEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SessionConfiguredType,\n  payload: SessionConfiguredPayload,\n});\nexport type ProviderRuntimeSessionConfiguredEvent =\n  typeof ProviderRuntimeSessionConfiguredEvent.Type;\n\nconst ProviderRuntimeSessionStateChangedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SessionStateChangedType,\n  payload: SessionStateChangedPayload,\n});\nexport type ProviderRuntimeSessionStateChangedEvent =\n  typeof ProviderRuntimeSessionStateChangedEvent.Type;\n\nconst ProviderRuntimeSessionExitedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SessionExitedType,\n  payload: SessionExitedPayload,\n});\nexport type ProviderRuntimeSessionExitedEvent = typeof ProviderRuntimeSessionExitedEvent.Type;\n\nconst ProviderRuntimeThreadStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadStartedType,\n  payload: ThreadStartedPayload,\n});\nexport type ProviderRuntimeThreadStartedEvent = typeof ProviderRuntimeThreadStartedEvent.Type;\n\nconst ProviderRuntimeThreadIndependentCreatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadIndependentCreatedType,\n  payload: ThreadIndependentCreatedPayload,\n});\nexport type ProviderRuntimeThreadIndependentCreatedEvent =\n  typeof ProviderRuntimeThreadIndependentCreatedEvent.Type;\n\nconst ProviderRuntimeThreadStateChangedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadStateChangedType,\n  payload: ThreadStateChangedPayload,\n});\nexport type ProviderRuntimeThreadStateChangedEvent =\n  typeof ProviderRuntimeThreadStateChangedEvent.Type;\n\nconst ProviderRuntimeThreadMetadataUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadMetadataUpdatedType,\n  payload: ThreadMetadataUpdatedPayload,\n});\nexport type ProviderRuntimeThreadMetadataUpdatedEvent =\n  typeof ProviderRuntimeThreadMetadataUpdatedEvent.Type;\n\nconst ProviderRuntimeThreadTokenUsageUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadTokenUsageUpdatedType,\n  payload: ThreadTokenUsageUpdatedPayload,\n});\nexport type ProviderRuntimeThreadTokenUsageUpdatedEvent =\n  typeof ProviderRuntimeThreadTokenUsageUpdatedEvent.Type;\n\nconst ProviderRuntimeThreadRealtimeStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadRealtimeStartedType,\n  payload: ThreadRealtimeStartedPayload,\n});\nexport type ProviderRuntimeThreadRealtimeStartedEvent =\n  typeof ProviderRuntimeThreadRealtimeStartedEvent.Type;\n\nconst ProviderRuntimeThreadRealtimeItemAddedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadRealtimeItemAddedType,\n  payload: ThreadRealtimeItemAddedPayload,\n});\nexport type ProviderRuntimeThreadRealtimeItemAddedEvent =\n  typeof ProviderRuntimeThreadRealtimeItemAddedEvent.Type;\n\nconst ProviderRuntimeThreadRealtimeAudioDeltaEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadRealtimeAudioDeltaType,\n  payload: ThreadRealtimeAudioDeltaPayload,\n});\nexport type ProviderRuntimeThreadRealtimeAudioDeltaEvent =\n  typeof ProviderRuntimeThreadRealtimeAudioDeltaEvent.Type;\n\nconst ProviderRuntimeThreadRealtimeErrorEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadRealtimeErrorType,\n  payload: ThreadRealtimeErrorPayload,\n});\nexport type ProviderRuntimeThreadRealtimeErrorEvent =\n  typeof ProviderRuntimeThreadRealtimeErrorEvent.Type;\n\nconst ProviderRuntimeThreadRealtimeClosedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ThreadRealtimeClosedType,\n  payload: ThreadRealtimeClosedPayload,\n});\nexport type ProviderRuntimeThreadRealtimeClosedEvent =\n  typeof ProviderRuntimeThreadRealtimeClosedEvent.Type;\n\nconst ProviderRuntimeTurnStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnStartedType,\n  payload: TurnStartedPayload,\n});\nexport type ProviderRuntimeTurnStartedEvent = typeof ProviderRuntimeTurnStartedEvent.Type;\n\nconst ProviderRuntimeTurnCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnCompletedType,\n  payload: TurnCompletedPayload,\n});\nexport type ProviderRuntimeTurnCompletedEvent = typeof ProviderRuntimeTurnCompletedEvent.Type;\n\nconst ProviderRuntimeTurnAbortedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnAbortedType,\n  payload: TurnAbortedPayload,\n});\nexport type ProviderRuntimeTurnAbortedEvent = typeof ProviderRuntimeTurnAbortedEvent.Type;\n\nconst ProviderRuntimeTurnPlanUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnPlanUpdatedType,\n  payload: TurnPlanUpdatedPayload,\n});\nexport type ProviderRuntimeTurnPlanUpdatedEvent = typeof ProviderRuntimeTurnPlanUpdatedEvent.Type;\n\nconst ProviderRuntimeTurnProposedDeltaEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnProposedDeltaType,\n  payload: TurnProposedDeltaPayload,\n});\nexport type ProviderRuntimeTurnProposedDeltaEvent =\n  typeof ProviderRuntimeTurnProposedDeltaEvent.Type;\n\nconst ProviderRuntimeTurnProposedCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnProposedCompletedType,\n  payload: TurnProposedCompletedPayload,\n});\nexport type ProviderRuntimeTurnProposedCompletedEvent =\n  typeof ProviderRuntimeTurnProposedCompletedEvent.Type;\n\nconst ProviderRuntimeTurnDiffUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TurnDiffUpdatedType,\n  payload: TurnDiffUpdatedPayload,\n});\nexport type ProviderRuntimeTurnDiffUpdatedEvent = typeof ProviderRuntimeTurnDiffUpdatedEvent.Type;\n\nconst ProviderRuntimeItemStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ItemStartedType,\n  payload: ItemLifecyclePayload,\n});\nexport type ProviderRuntimeItemStartedEvent = typeof ProviderRuntimeItemStartedEvent.Type;\n\nconst ProviderRuntimeItemUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ItemUpdatedType,\n  payload: ItemLifecyclePayload,\n});\nexport type ProviderRuntimeItemUpdatedEvent = typeof ProviderRuntimeItemUpdatedEvent.Type;\n\nconst ProviderRuntimeItemCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ItemCompletedType,\n  payload: ItemLifecyclePayload,\n});\nexport type ProviderRuntimeItemCompletedEvent = typeof ProviderRuntimeItemCompletedEvent.Type;\n\nconst ProviderRuntimeContentDeltaEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ContentDeltaType,\n  payload: ContentDeltaPayload,\n});\nexport type ProviderRuntimeContentDeltaEvent = typeof ProviderRuntimeContentDeltaEvent.Type;\n\nconst ProviderRuntimeRequestOpenedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: RequestOpenedType,\n  payload: RequestOpenedPayload,\n});\nexport type ProviderRuntimeRequestOpenedEvent = typeof ProviderRuntimeRequestOpenedEvent.Type;\n\nconst ProviderRuntimeRequestResolvedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: RequestResolvedType,\n  payload: RequestResolvedPayload,\n});\nexport type ProviderRuntimeRequestResolvedEvent = typeof ProviderRuntimeRequestResolvedEvent.Type;\n\nconst ProviderRuntimeUserInputRequestedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: UserInputRequestedType,\n  payload: UserInputRequestedPayload,\n});\nexport type ProviderRuntimeUserInputRequestedEvent =\n  typeof ProviderRuntimeUserInputRequestedEvent.Type;\n\nconst ProviderRuntimeUserInputResolvedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: UserInputResolvedType,\n  payload: UserInputResolvedPayload,\n});\nexport type ProviderRuntimeUserInputResolvedEvent =\n  typeof ProviderRuntimeUserInputResolvedEvent.Type;\n\nconst ProviderRuntimeTaskStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TaskStartedType,\n  payload: TaskStartedPayload,\n});\nexport type ProviderRuntimeTaskStartedEvent = typeof ProviderRuntimeTaskStartedEvent.Type;\n\nconst ProviderRuntimeTaskProgressEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TaskProgressType,\n  payload: TaskProgressPayload,\n});\nexport type ProviderRuntimeTaskProgressEvent = typeof ProviderRuntimeTaskProgressEvent.Type;\n\nconst ProviderRuntimeTaskCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: TaskCompletedType,\n  payload: TaskCompletedPayload,\n});\nexport type ProviderRuntimeTaskCompletedEvent = typeof ProviderRuntimeTaskCompletedEvent.Type;\n\nconst ProviderRuntimeSubagentStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SubagentStartedType,\n  payload: SubagentStartedPayload,\n});\nexport type ProviderRuntimeSubagentStartedEvent = typeof ProviderRuntimeSubagentStartedEvent.Type;\n\nconst ProviderRuntimeSubagentUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SubagentUpdatedType,\n  payload: SubagentUpdatedPayload,\n});\nexport type ProviderRuntimeSubagentUpdatedEvent = typeof ProviderRuntimeSubagentUpdatedEvent.Type;\n\nconst ProviderRuntimeSubagentCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: SubagentCompletedType,\n  payload: SubagentCompletedPayload,\n});\nexport type ProviderRuntimeSubagentCompletedEvent =\n  typeof ProviderRuntimeSubagentCompletedEvent.Type;\n\nconst ProviderRuntimeHookStartedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: HookStartedType,\n  payload: HookStartedPayload,\n});\nexport type ProviderRuntimeHookStartedEvent = typeof ProviderRuntimeHookStartedEvent.Type;\n\nconst ProviderRuntimeHookProgressEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: HookProgressType,\n  payload: HookProgressPayload,\n});\nexport type ProviderRuntimeHookProgressEvent = typeof ProviderRuntimeHookProgressEvent.Type;\n\nconst ProviderRuntimeHookCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: HookCompletedType,\n  payload: HookCompletedPayload,\n});\nexport type ProviderRuntimeHookCompletedEvent = typeof ProviderRuntimeHookCompletedEvent.Type;\n\nconst ProviderRuntimeToolProgressEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ToolProgressType,\n  payload: ToolProgressPayload,\n});\nexport type ProviderRuntimeToolProgressEvent = typeof ProviderRuntimeToolProgressEvent.Type;\n\nconst ProviderRuntimeToolSummaryEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ToolSummaryType,\n  payload: ToolSummaryPayload,\n});\nexport type ProviderRuntimeToolSummaryEvent = typeof ProviderRuntimeToolSummaryEvent.Type;\n\nconst ProviderRuntimeAuthStatusEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: AuthStatusType,\n  payload: AuthStatusPayload,\n});\nexport type ProviderRuntimeAuthStatusEvent = typeof ProviderRuntimeAuthStatusEvent.Type;\n\nconst ProviderRuntimeAccountUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: AccountUpdatedType,\n  payload: AccountUpdatedPayload,\n});\nexport type ProviderRuntimeAccountUpdatedEvent = typeof ProviderRuntimeAccountUpdatedEvent.Type;\n\nconst ProviderRuntimeAccountRateLimitsUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: AccountRateLimitsUpdatedType,\n  payload: AccountRateLimitsUpdatedPayload,\n});\nexport type ProviderRuntimeAccountRateLimitsUpdatedEvent =\n  typeof ProviderRuntimeAccountRateLimitsUpdatedEvent.Type;\n\nconst ProviderRuntimeMcpStatusUpdatedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: McpStatusUpdatedType,\n  payload: McpStatusUpdatedPayload,\n});\nexport type ProviderRuntimeMcpStatusUpdatedEvent = typeof ProviderRuntimeMcpStatusUpdatedEvent.Type;\n\nconst ProviderRuntimeMcpOauthCompletedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: McpOauthCompletedType,\n  payload: McpOauthCompletedPayload,\n});\nexport type ProviderRuntimeMcpOauthCompletedEvent =\n  typeof ProviderRuntimeMcpOauthCompletedEvent.Type;\n\nconst ProviderRuntimeModelReroutedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ModelReroutedType,\n  payload: ModelReroutedPayload,\n});\nexport type ProviderRuntimeModelReroutedEvent = typeof ProviderRuntimeModelReroutedEvent.Type;\n\nconst ProviderRuntimeConfigWarningEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ConfigWarningType,\n  payload: ConfigWarningPayload,\n});\nexport type ProviderRuntimeConfigWarningEvent = typeof ProviderRuntimeConfigWarningEvent.Type;\n\nconst ProviderRuntimeDeprecationNoticeEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: DeprecationNoticeType,\n  payload: DeprecationNoticePayload,\n});\nexport type ProviderRuntimeDeprecationNoticeEvent =\n  typeof ProviderRuntimeDeprecationNoticeEvent.Type;\n\nconst ProviderRuntimeFilesPersistedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: FilesPersistedType,\n  payload: FilesPersistedPayload,\n});\nexport type ProviderRuntimeFilesPersistedEvent = typeof ProviderRuntimeFilesPersistedEvent.Type;\n\nconst ProviderRuntimeImageGeneratedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ImageGeneratedType,\n  payload: ImageGeneratedPayload,\n});\nexport type ProviderRuntimeImageGeneratedEvent = typeof ProviderRuntimeImageGeneratedEvent.Type;\n\nconst ProviderRuntimeToolDeniedEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: ToolDeniedType,\n  payload: ToolDeniedPayload,\n});\nexport type ProviderRuntimeToolDeniedEvent = typeof ProviderRuntimeToolDeniedEvent.Type;\n\nconst ProviderRuntimeWarningEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: RuntimeWarningType,\n  payload: RuntimeWarningPayload,\n});\nexport type ProviderRuntimeWarningEvent = typeof ProviderRuntimeWarningEvent.Type;\n\nconst ProviderRuntimeErrorEvent = Schema.Struct({\n  ...ProviderRuntimeEventBase.fields,\n  type: RuntimeErrorType,\n  payload: RuntimeErrorPayload,\n});\nexport type ProviderRuntimeErrorEvent = typeof ProviderRuntimeErrorEvent.Type;\n\nexport const ProviderRuntimeEventV2 = Schema.Union([\n  ProviderRuntimeSessionStartedEvent,\n  ProviderRuntimeSessionConfiguredEvent,\n  ProviderRuntimeSessionStateChangedEvent,\n  ProviderRuntimeSessionExitedEvent,\n  ProviderRuntimeThreadStartedEvent,\n  ProviderRuntimeThreadIndependentCreatedEvent,\n  ProviderRuntimeThreadStateChangedEvent,\n  ProviderRuntimeThreadMetadataUpdatedEvent,\n  ProviderRuntimeThreadTokenUsageUpdatedEvent,\n  ProviderRuntimeThreadRealtimeStartedEvent,\n  ProviderRuntimeThreadRealtimeItemAddedEvent,\n  ProviderRuntimeThreadRealtimeAudioDeltaEvent,\n  ProviderRuntimeThreadRealtimeErrorEvent,\n  ProviderRuntimeThreadRealtimeClosedEvent,\n  ProviderRuntimeTurnStartedEvent,\n  ProviderRuntimeTurnCompletedEvent,\n  ProviderRuntimeTurnAbortedEvent,\n  ProviderRuntimeTurnPlanUpdatedEvent,\n  ProviderRuntimeTurnProposedDeltaEvent,\n  ProviderRuntimeTurnProposedCompletedEvent,\n  ProviderRuntimeTurnDiffUpdatedEvent,\n  ProviderRuntimeItemStartedEvent,\n  ProviderRuntimeItemUpdatedEvent,\n  ProviderRuntimeItemCompletedEvent,\n  ProviderRuntimeContentDeltaEvent,\n  ProviderRuntimeRequestOpenedEvent,\n  ProviderRuntimeRequestResolvedEvent,\n  ProviderRuntimeUserInputRequestedEvent,\n  ProviderRuntimeUserInputResolvedEvent,\n  ProviderRuntimeTaskStartedEvent,\n  ProviderRuntimeTaskProgressEvent,\n  ProviderRuntimeTaskCompletedEvent,\n  ProviderRuntimeSubagentStartedEvent,\n  ProviderRuntimeSubagentUpdatedEvent,\n  ProviderRuntimeSubagentCompletedEvent,\n  ProviderRuntimeHookStartedEvent,\n  ProviderRuntimeHookProgressEvent,\n  ProviderRuntimeHookCompletedEvent,\n  ProviderRuntimeToolProgressEvent,\n  ProviderRuntimeToolSummaryEvent,\n  ProviderRuntimeAuthStatusEvent,\n  ProviderRuntimeAccountUpdatedEvent,\n  ProviderRuntimeAccountRateLimitsUpdatedEvent,\n  ProviderRuntimeMcpStatusUpdatedEvent,\n  ProviderRuntimeMcpOauthCompletedEvent,\n  ProviderRuntimeModelReroutedEvent,\n  ProviderRuntimeConfigWarningEvent,\n  ProviderRuntimeDeprecationNoticeEvent,\n  ProviderRuntimeFilesPersistedEvent,\n  ProviderRuntimeImageGeneratedEvent,\n  ProviderRuntimeToolDeniedEvent,\n  ProviderRuntimeWarningEvent,\n  ProviderRuntimeErrorEvent,\n]);\nexport type ProviderRuntimeEventV2 = typeof ProviderRuntimeEventV2.Type;\n\nexport const ProviderRuntimeEvent = ProviderRuntimeEventV2;\nexport type ProviderRuntimeEvent = ProviderRuntimeEventV2;\n\n// Compatibility aliases for call sites still importing legacy names.\nconst ProviderRuntimeMessageDeltaEvent = ProviderRuntimeContentDeltaEvent;\nexport type ProviderRuntimeMessageDeltaEvent = ProviderRuntimeContentDeltaEvent;\nconst ProviderRuntimeMessageCompletedEvent = ProviderRuntimeItemCompletedEvent;\nexport type ProviderRuntimeMessageCompletedEvent = ProviderRuntimeItemCompletedEvent;\nconst ProviderRuntimeToolStartedEvent = ProviderRuntimeItemStartedEvent;\nexport type ProviderRuntimeToolStartedEvent = ProviderRuntimeItemStartedEvent;\nconst ProviderRuntimeToolCompletedEvent = ProviderRuntimeItemCompletedEvent;\nexport type ProviderRuntimeToolCompletedEvent = ProviderRuntimeItemCompletedEvent;\nconst ProviderRuntimeApprovalRequestedEvent = ProviderRuntimeRequestOpenedEvent;\nexport type ProviderRuntimeApprovalRequestedEvent = ProviderRuntimeRequestOpenedEvent;\nconst ProviderRuntimeApprovalResolvedEvent = ProviderRuntimeRequestResolvedEvent;\nexport type ProviderRuntimeApprovalResolvedEvent = ProviderRuntimeRequestResolvedEvent;\n\n// Legacy helper aliases retained for adapters/tests.\nconst ProviderRuntimeToolKind = Schema.Literals([\"command\", \"file-read\", \"file-change\", \"other\"]);\nexport type ProviderRuntimeToolKind = typeof ProviderRuntimeToolKind.Type;\n\nexport const ProviderRuntimeTurnStatus = RuntimeTurnState;\nexport type ProviderRuntimeTurnStatus = RuntimeTurnState;\n","import * as Schema from \"effect/Schema\";\nimport { TrimmedString } from \"./baseSchemas.ts\";\n\nexport const MAX_KEYBINDING_VALUE_LENGTH = 64;\nexport const MAX_KEYBINDING_WHEN_LENGTH = 256;\nexport const MAX_WHEN_EXPRESSION_DEPTH = 64;\nexport const MAX_SCRIPT_ID_LENGTH = 24;\nexport const MAX_KEYBINDINGS_COUNT = 256;\n\nexport const THREAD_JUMP_KEYBINDING_COMMANDS = [\n  \"thread.jump.1\",\n  \"thread.jump.2\",\n  \"thread.jump.3\",\n  \"thread.jump.4\",\n  \"thread.jump.5\",\n  \"thread.jump.6\",\n  \"thread.jump.7\",\n  \"thread.jump.8\",\n  \"thread.jump.9\",\n] as const;\nexport type ThreadJumpKeybindingCommand = (typeof THREAD_JUMP_KEYBINDING_COMMANDS)[number];\n\nexport const MODEL_PICKER_JUMP_KEYBINDING_COMMANDS = [\n  \"modelPicker.jump.1\",\n  \"modelPicker.jump.2\",\n  \"modelPicker.jump.3\",\n  \"modelPicker.jump.4\",\n  \"modelPicker.jump.5\",\n  \"modelPicker.jump.6\",\n  \"modelPicker.jump.7\",\n  \"modelPicker.jump.8\",\n  \"modelPicker.jump.9\",\n] as const;\nexport type ModelPickerJumpKeybindingCommand =\n  (typeof MODEL_PICKER_JUMP_KEYBINDING_COMMANDS)[number];\n\nexport const THREAD_KEYBINDING_COMMANDS = [\n  \"thread.previous\",\n  \"thread.next\",\n  ...THREAD_JUMP_KEYBINDING_COMMANDS,\n] as const;\nexport type ThreadKeybindingCommand = (typeof THREAD_KEYBINDING_COMMANDS)[number];\n\nexport const MODEL_PICKER_KEYBINDING_COMMANDS = [\n  \"modelPicker.toggle\",\n  ...MODEL_PICKER_JUMP_KEYBINDING_COMMANDS,\n] as const;\nexport type ModelPickerKeybindingCommand = (typeof MODEL_PICKER_KEYBINDING_COMMANDS)[number];\n\nconst STATIC_KEYBINDING_COMMANDS = [\n  \"terminal.toggle\",\n  \"terminal.split\",\n  \"terminal.new\",\n  \"terminal.close\",\n  \"diff.toggle\",\n  \"sourceControl.toggle\",\n  \"commandPalette.toggle\",\n  \"chat.new\",\n  \"chat.newLocal\",\n  \"editor.openFavorite\",\n  ...MODEL_PICKER_KEYBINDING_COMMANDS,\n  ...THREAD_KEYBINDING_COMMANDS,\n] as const;\n\nexport const SCRIPT_RUN_COMMAND_PATTERN = Schema.TemplateLiteral([\n  Schema.Literal(\"script.\"),\n  Schema.NonEmptyString.check(\n    Schema.isMaxLength(MAX_SCRIPT_ID_LENGTH),\n    Schema.isPattern(/^[a-z0-9][a-z0-9-]*$/),\n  ),\n  Schema.Literal(\".run\"),\n]);\n\nexport const KeybindingCommand = Schema.Union([\n  Schema.Literals(STATIC_KEYBINDING_COMMANDS),\n  SCRIPT_RUN_COMMAND_PATTERN,\n]);\nexport type KeybindingCommand = typeof KeybindingCommand.Type;\n\nexport const KeybindingValue = TrimmedString.check(\n  Schema.isMinLength(1),\n  Schema.isMaxLength(MAX_KEYBINDING_VALUE_LENGTH),\n);\n\nexport const KeybindingWhen = TrimmedString.check(\n  Schema.isMinLength(1),\n  Schema.isMaxLength(MAX_KEYBINDING_WHEN_LENGTH),\n);\nexport const KeybindingRule = Schema.Struct({\n  key: KeybindingValue,\n  command: KeybindingCommand,\n  when: Schema.optional(KeybindingWhen),\n});\nexport type KeybindingRule = typeof KeybindingRule.Type;\n\nexport const KeybindingsConfig = Schema.Array(KeybindingRule).check(\n  Schema.isMaxLength(MAX_KEYBINDINGS_COUNT),\n);\nexport type KeybindingsConfig = typeof KeybindingsConfig.Type;\n\nexport const KeybindingShortcut = Schema.Struct({\n  key: KeybindingValue,\n  metaKey: Schema.Boolean,\n  ctrlKey: Schema.Boolean,\n  shiftKey: Schema.Boolean,\n  altKey: Schema.Boolean,\n  modKey: Schema.Boolean,\n});\nexport type KeybindingShortcut = typeof KeybindingShortcut.Type;\n\nconst KeybindingWhenNodeRef = Schema.suspend(\n  (): Schema.Codec<KeybindingWhenNode> => KeybindingWhenNode,\n);\nexport const KeybindingWhenNode = Schema.Union([\n  Schema.Struct({\n    type: Schema.Literal(\"identifier\"),\n    name: Schema.NonEmptyString,\n  }),\n  Schema.Struct({\n    type: Schema.Literal(\"not\"),\n    node: KeybindingWhenNodeRef,\n  }),\n  Schema.Struct({\n    type: Schema.Literal(\"and\"),\n    left: KeybindingWhenNodeRef,\n    right: KeybindingWhenNodeRef,\n  }),\n  Schema.Struct({\n    type: Schema.Literal(\"or\"),\n    left: KeybindingWhenNodeRef,\n    right: KeybindingWhenNodeRef,\n  }),\n]);\nexport type KeybindingWhenNode =\n  | { type: \"identifier\"; name: string }\n  | { type: \"not\"; node: KeybindingWhenNode }\n  | { type: \"and\"; left: KeybindingWhenNode; right: KeybindingWhenNode }\n  | { type: \"or\"; left: KeybindingWhenNode; right: KeybindingWhenNode };\n\nexport const ResolvedKeybindingRule = Schema.Struct({\n  command: KeybindingCommand,\n  shortcut: KeybindingShortcut,\n  whenAst: Schema.optional(KeybindingWhenNode),\n}).annotate({ parseOptions: { onExcessProperty: \"ignore\" } });\nexport type ResolvedKeybindingRule = typeof ResolvedKeybindingRule.Type;\n\nexport const ResolvedKeybindingsConfig = Schema.Array(ResolvedKeybindingRule).check(\n  Schema.isMaxLength(MAX_KEYBINDINGS_COUNT),\n);\nexport type ResolvedKeybindingsConfig = typeof ResolvedKeybindingsConfig.Type;\n\nexport class KeybindingsConfigError extends Schema.TaggedErrorClass<KeybindingsConfigError>()(\n  \"KeybindingsConfigParseError\",\n  {\n    configPath: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Unable to parse keybindings config at ${this.configPath}: ${this.detail}`;\n  }\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Duration from \"effect/Duration\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\nimport { NonNegativeInt, TrimmedNonEmptyString, TrimmedString } from \"./baseSchemas.ts\";\nimport {\n  DEFAULT_GIT_TEXT_GENERATION_MODEL,\n  DEFAULT_GIT_TEXT_GENERATION_REASONING_EFFORT,\n  ProviderOptionSelections,\n} from \"./model.ts\";\nimport { ModelSelection } from \"./orchestration.ts\";\nimport { ProviderInstanceConfig, ProviderInstanceId } from \"./providerInstance.ts\";\nimport { DEFAULT_TRANSCRIPTION_MODEL, TranscriptionModel } from \"./transcription.ts\";\n\n// ── Client Settings (local-only) ───────────────────────────────\n\nexport const TimestampFormat = Schema.Literals([\"locale\", \"12-hour\", \"24-hour\"]);\nexport type TimestampFormat = typeof TimestampFormat.Type;\nexport const DEFAULT_TIMESTAMP_FORMAT: TimestampFormat = \"locale\";\n\nexport const SidebarProjectSortOrder = Schema.Literals([\"updated_at\", \"created_at\", \"manual\"]);\nexport type SidebarProjectSortOrder = typeof SidebarProjectSortOrder.Type;\nexport const DEFAULT_SIDEBAR_PROJECT_SORT_ORDER: SidebarProjectSortOrder = \"updated_at\";\n\nexport const SidebarThreadSortOrder = Schema.Literals([\"updated_at\", \"created_at\"]);\nexport type SidebarThreadSortOrder = typeof SidebarThreadSortOrder.Type;\nexport const DEFAULT_SIDEBAR_THREAD_SORT_ORDER: SidebarThreadSortOrder = \"updated_at\";\n\nexport const SidebarProjectGroupingMode = Schema.Literals([\n  \"repository\",\n  \"repository_path\",\n  \"separate\",\n]);\nexport type SidebarProjectGroupingMode = typeof SidebarProjectGroupingMode.Type;\nexport const DEFAULT_SIDEBAR_PROJECT_GROUPING_MODE: SidebarProjectGroupingMode = \"repository\";\nexport const MIN_SIDEBAR_THREAD_PREVIEW_COUNT = 1;\nexport const MAX_SIDEBAR_THREAD_PREVIEW_COUNT = 15;\nexport const SidebarThreadPreviewCount = Schema.Int.check(\n  Schema.isBetween({\n    minimum: MIN_SIDEBAR_THREAD_PREVIEW_COUNT,\n    maximum: MAX_SIDEBAR_THREAD_PREVIEW_COUNT,\n  }),\n);\nexport type SidebarThreadPreviewCount = typeof SidebarThreadPreviewCount.Type;\nexport const DEFAULT_SIDEBAR_THREAD_PREVIEW_COUNT: SidebarThreadPreviewCount = 6;\n\nexport const ImportedColorThemeReference = Schema.Struct({\n  id: TrimmedNonEmptyString,\n  label: TrimmedNonEmptyString,\n  type: Schema.Literals([\"light\", \"dark\"]),\n  namespace: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  version: TrimmedNonEmptyString,\n});\nexport type ImportedColorThemeReference = typeof ImportedColorThemeReference.Type;\n\nexport const CURRENT_CLIENT_SETTINGS_VERSION = 1;\n\nexport const ClientSettingsSchema = Schema.Struct({\n  clientSettingsVersion: NonNegativeInt.pipe(Schema.withDecodingDefault(Effect.succeed(0))),\n  autoOpenPlanSidebar: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n  confirmThreadArchive: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n  confirmThreadDelete: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(true))),\n  dismissedProviderUpdateNotificationKeys: Schema.Array(TrimmedNonEmptyString).pipe(\n    Schema.withDecodingDefault(Effect.succeed([])),\n  ),\n  diffIgnoreWhitespace: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(true))),\n  diffWordWrap: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n  // Model favorites. Historically keyed by provider kind, now\n  // widened to `ProviderInstanceId` so users can favorite a specific model\n  // on a custom provider instance (e.g. \"Codex Personal · gpt-5\") without\n  // the UI collapsing it into the same bucket as the default Codex. The\n  // widening is backward-compatible by construction: prior provider-kind\n  // strings satisfy the `ProviderInstanceId` slug schema, so previously\n  // persisted favorites decode unchanged and continue to point at the\n  // default instance for their kind (because `defaultInstanceIdForDriver(kind)`\n  // uses the same slug). The field name is kept as `provider` for storage\n  // stability; new call sites should treat the value as an instance id.\n  favorites: Schema.Array(\n    Schema.Struct({\n      provider: ProviderInstanceId,\n      model: TrimmedNonEmptyString,\n    }),\n  ).pipe(Schema.withDecodingDefault(Effect.succeed([]))),\n  providerModelPreferences: Schema.Record(\n    ProviderInstanceId,\n    Schema.Struct({\n      hiddenModels: Schema.Array(Schema.String).pipe(\n        Schema.withDecodingDefault(Effect.succeed([])),\n      ),\n      modelOrder: Schema.Array(Schema.String).pipe(Schema.withDecodingDefault(Effect.succeed([]))),\n    }),\n  ).pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n  sidebarProjectGroupingMode: SidebarProjectGroupingMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_SIDEBAR_PROJECT_GROUPING_MODE)),\n  ),\n  sidebarProjectGroupingOverrides: Schema.Record(\n    TrimmedNonEmptyString,\n    SidebarProjectGroupingMode,\n  ).pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n  sidebarProjectSortOrder: SidebarProjectSortOrder.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_SIDEBAR_PROJECT_SORT_ORDER)),\n  ),\n  sidebarThreadSortOrder: SidebarThreadSortOrder.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_SIDEBAR_THREAD_SORT_ORDER)),\n  ),\n  sidebarThreadPreviewCount: SidebarThreadPreviewCount.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_SIDEBAR_THREAD_PREVIEW_COUNT)),\n  ),\n  timestampFormat: TimestampFormat.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_TIMESTAMP_FORMAT)),\n  ),\n  // Legacy local color-theme fields. ServerSettings is now authoritative, but\n  // these remain decodable so existing browser-local values can be migrated.\n  colorThemeLight: Schema.String.pipe(Schema.withDecodingDefault(Effect.succeed(\"default\"))),\n  colorThemeDark: Schema.String.pipe(Schema.withDecodingDefault(Effect.succeed(\"default\"))),\n  importedThemes: Schema.Array(ImportedColorThemeReference).pipe(\n    Schema.withDecodingDefault(Effect.succeed([])),\n  ),\n});\nexport type ClientSettings = typeof ClientSettingsSchema.Type;\n\nexport const DEFAULT_CLIENT_SETTINGS: ClientSettings = {\n  ...Schema.decodeSync(ClientSettingsSchema)({}),\n  clientSettingsVersion: CURRENT_CLIENT_SETTINGS_VERSION,\n};\n\n// ── Server Settings (server-authoritative) ────────────────────\n\nexport const ThreadEnvMode = Schema.Literals([\"local\", \"worktree\"]);\nexport type ThreadEnvMode = typeof ThreadEnvMode.Type;\n\n// Light/dark/system appearance mode. Server-authoritative so the mode follows\n// every browser connected to this Salchi server, in lockstep with the color\n// theme id pair below.\nexport const ThemeMode = Schema.Literals([\"light\", \"dark\", \"system\"]);\nexport type ThemeMode = typeof ThemeMode.Type;\n\nconst makeBinaryPathSetting = (fallback: string) =>\n  TrimmedString.pipe(\n    Schema.decodeTo(\n      Schema.String,\n      SchemaTransformation.transformOrFail({\n        decode: (value) => Effect.succeed(value || fallback),\n        encode: (value) => Effect.succeed(value),\n      }),\n    ),\n    Schema.withDecodingDefault(Effect.succeed(fallback)),\n  );\n\nexport type ProviderSettingsFormControl = \"text\" | \"password\" | \"textarea\" | \"switch\";\n\nexport interface ProviderSettingsFormAnnotation {\n  readonly control?: ProviderSettingsFormControl | undefined;\n  readonly placeholder?: string | undefined;\n  readonly hidden?: boolean | undefined;\n  readonly clearWhenEmpty?: \"omit\" | \"persist\" | undefined;\n}\n\nexport interface ProviderSettingsFormSchemaAnnotation {\n  readonly order?: readonly string[] | undefined;\n}\n\ndeclare module \"effect/Schema\" {\n  namespace Annotations {\n    interface Annotations {\n      readonly providerSettingsForm?: ProviderSettingsFormAnnotation | undefined;\n      readonly providerSettingsFormSchema?: ProviderSettingsFormSchemaAnnotation | undefined;\n    }\n  }\n}\n\nexport type ProviderSettingsOrder<Fields extends Schema.Struct.Fields> = readonly Extract<\n  keyof Fields,\n  string\n>[];\n\nexport function makeProviderSettingsSchema<const Fields extends Schema.Struct.Fields>(\n  fields: Fields,\n  options?: {\n    readonly order?: ProviderSettingsOrder<Fields> | undefined;\n  },\n): Schema.Struct<Fields> {\n  return Schema.Struct(fields).pipe(\n    Schema.annotate({\n      providerSettingsFormSchema:\n        options?.order === undefined ? undefined : { order: options.order },\n    }),\n  );\n}\n\nexport const CodexSettings = makeProviderSettingsSchema(\n  {\n    enabled: Schema.Boolean.pipe(\n      Schema.withDecodingDefault(Effect.succeed(true)),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n    binaryPath: makeBinaryPathSetting(\"codex\").pipe(\n      Schema.annotateKey({\n        title: \"Binary path\",\n        description: \"Path to the Codex binary used by this instance.\",\n        providerSettingsForm: { placeholder: \"codex\", clearWhenEmpty: \"omit\" },\n      }),\n    ),\n    homePath: TrimmedString.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"CODEX_HOME path\",\n        description: \"Custom Codex home and config directory.\",\n        providerSettingsForm: {\n          placeholder: \"~/.codex\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n    shadowHomePath: TrimmedString.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"Shadow home path\",\n        description:\n          \"Account-specific Codex home. Keeps auth.json separate while sharing state from CODEX_HOME.\",\n        providerSettingsForm: {\n          placeholder: \"~/.codex-salchi/personal\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n    customModels: Schema.Array(Schema.String).pipe(\n      Schema.withDecodingDefault(Effect.succeed([])),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n  },\n  {\n    order: [\"binaryPath\", \"homePath\", \"shadowHomePath\"],\n  },\n);\nexport type CodexSettings = typeof CodexSettings.Type;\n\nexport const ClaudeSettings = makeProviderSettingsSchema(\n  {\n    enabled: Schema.Boolean.pipe(\n      Schema.withDecodingDefault(Effect.succeed(true)),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n    binaryPath: makeBinaryPathSetting(\"claude\").pipe(\n      Schema.annotateKey({\n        title: \"Binary path\",\n        description: \"Path to the Claude binary used by this instance.\",\n        providerSettingsForm: { placeholder: \"claude\", clearWhenEmpty: \"omit\" },\n      }),\n    ),\n    homePath: TrimmedString.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"Claude HOME path\",\n        description:\n          \"Custom HOME used when running this Claude instance. Keeps .claude.json and .claude separate.\",\n        providerSettingsForm: { placeholder: \"~\", clearWhenEmpty: \"omit\" },\n      }),\n    ),\n    customModels: Schema.Array(Schema.String).pipe(\n      Schema.withDecodingDefault(Effect.succeed([])),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n    launchArgs: Schema.String.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"Launch arguments\",\n        description: \"Additional CLI arguments passed on session start.\",\n        providerSettingsForm: {\n          placeholder: \"e.g. --chrome\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n  },\n  {\n    order: [\"binaryPath\", \"homePath\", \"launchArgs\"],\n  },\n);\nexport type ClaudeSettings = typeof ClaudeSettings.Type;\n\nexport const CursorSettings = makeProviderSettingsSchema(\n  {\n    enabled: Schema.Boolean.pipe(\n      Schema.withDecodingDefault(Effect.succeed(false)),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n    binaryPath: makeBinaryPathSetting(\"agent\").pipe(\n      Schema.annotateKey({\n        title: \"Binary path\",\n        description: \"Path to the Cursor agent binary.\",\n        providerSettingsForm: { placeholder: \"agent\", clearWhenEmpty: \"omit\" },\n      }),\n    ),\n    apiEndpoint: TrimmedString.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"API endpoint\",\n        description: \"Override the Cursor API endpoint for this instance.\",\n        providerSettingsForm: {\n          placeholder: \"https://...\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n    customModels: Schema.Array(Schema.String).pipe(\n      Schema.withDecodingDefault(Effect.succeed([])),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n  },\n  {\n    order: [\"binaryPath\", \"apiEndpoint\"],\n  },\n);\nexport type CursorSettings = typeof CursorSettings.Type;\n\nexport const GrokSettings = makeProviderSettingsSchema(\n  {\n    enabled: Schema.Boolean.pipe(\n      Schema.withDecodingDefault(Effect.succeed(true)),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n    binaryPath: makeBinaryPathSetting(\"grok\").pipe(\n      Schema.annotateKey({\n        title: \"Binary path\",\n        description: \"Path to the Grok CLI binary.\",\n        providerSettingsForm: { placeholder: \"grok\", clearWhenEmpty: \"omit\" },\n      }),\n    ),\n    customModels: Schema.Array(Schema.String).pipe(\n      Schema.withDecodingDefault(Effect.succeed([])),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n  },\n  {\n    order: [\"binaryPath\"],\n  },\n);\nexport type GrokSettings = typeof GrokSettings.Type;\n\nexport const OpenCodeSettings = makeProviderSettingsSchema(\n  {\n    enabled: Schema.Boolean.pipe(\n      Schema.withDecodingDefault(Effect.succeed(true)),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n    binaryPath: makeBinaryPathSetting(\"opencode\").pipe(\n      Schema.annotateKey({\n        title: \"Binary path\",\n        description: \"Path to the OpenCode binary.\",\n        providerSettingsForm: {\n          placeholder: \"opencode\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n    serverUrl: TrimmedString.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"Server URL\",\n        description: \"Leave blank to let Salchi spawn the server when needed.\",\n        providerSettingsForm: {\n          placeholder: \"http://127.0.0.1:4096\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n    serverPassword: TrimmedString.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"\")),\n      Schema.annotateKey({\n        title: \"Server password\",\n        description: \"Stored in plain text on disk.\",\n        providerSettingsForm: {\n          control: \"password\",\n          placeholder: \"Optional\",\n          clearWhenEmpty: \"omit\",\n        },\n      }),\n    ),\n    customModels: Schema.Array(Schema.String).pipe(\n      Schema.withDecodingDefault(Effect.succeed([])),\n      Schema.annotateKey({ providerSettingsForm: { hidden: true } }),\n    ),\n  },\n  {\n    order: [\"binaryPath\", \"serverUrl\", \"serverPassword\"],\n  },\n);\nexport type OpenCodeSettings = typeof OpenCodeSettings.Type;\n\nexport const ObservabilitySettings = Schema.Struct({\n  otlpTracesUrl: TrimmedString.pipe(Schema.withDecodingDefault(Effect.succeed(\"\"))),\n  otlpMetricsUrl: TrimmedString.pipe(Schema.withDecodingDefault(Effect.succeed(\"\"))),\n});\nexport type ObservabilitySettings = typeof ObservabilitySettings.Type;\n\nexport const DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL = Duration.seconds(30);\n\nexport const ServerSettings = Schema.Struct({\n  enableAssistantStreaming: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n  automaticGitFetchInterval: Schema.DurationFromMillis.pipe(\n    Schema.withDecodingDefault(\n      Effect.succeed(Duration.toMillis(DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL)),\n    ),\n  ),\n  defaultThreadEnvMode: ThreadEnvMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(\"local\" as const satisfies ThreadEnvMode)),\n  ),\n  addProjectBaseDirectory: TrimmedString.pipe(Schema.withDecodingDefault(Effect.succeed(\"\"))),\n  transcriptionModel: TranscriptionModel.pipe(\n    Schema.withDecodingDefault(Effect.succeed(DEFAULT_TRANSCRIPTION_MODEL)),\n  ),\n  textGenerationModelSelection: ModelSelection.pipe(\n    Schema.withDecodingDefault(\n      Effect.succeed({\n        instanceId: ProviderInstanceId.make(\"codex\"),\n        model: DEFAULT_GIT_TEXT_GENERATION_MODEL,\n        options: [\n          {\n            id: \"reasoningEffort\",\n            value: DEFAULT_GIT_TEXT_GENERATION_REASONING_EFFORT,\n          },\n        ],\n      }),\n    ),\n  ),\n  // Appearance mode (light/dark/system). Server-authoritative so a mode chosen\n  // on one device follows the user to every other connected browser.\n  themeMode: ThemeMode.pipe(\n    Schema.withDecodingDefault(Effect.succeed(\"system\" as const satisfies ThemeMode)),\n  ),\n  // Color theme selection (light/dark mode each pick a VS Code theme id, or\n  // \"default\" for the built-in palette). Server-authoritative so the selection\n  // follows every browser connected to this Salchi server.\n  colorThemeLight: Schema.String.pipe(Schema.withDecodingDefault(Effect.succeed(\"default\"))),\n  colorThemeDark: Schema.String.pipe(Schema.withDecodingDefault(Effect.succeed(\"default\"))),\n  // Lightweight references to imported (Open VSX) themes so any device can\n  // re-fetch the colors for a synced selection. No color data is stored here.\n  importedThemes: Schema.Array(ImportedColorThemeReference).pipe(\n    Schema.withDecodingDefault(Effect.succeed([])),\n  ),\n\n  // Legacy single-instance-per-driver settings. Continues to be the source\n  // of truth until `providerInstances` (below) lands per-driver migration\n  // shims and the server starts hydrating instances from it. Driver-specific\n  // schemas live here for the duration of the migration; once each driver\n  // owns its config in its own package, this struct shrinks to nothing and\n  // is removed entirely.\n  providers: Schema.Struct({\n    codex: CodexSettings.pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n    claudeAgent: ClaudeSettings.pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n    cursor: CursorSettings.pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n    grok: GrokSettings.pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n    opencode: OpenCodeSettings.pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n  }).pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n  // New driver-agnostic instance map. Keyed by `ProviderInstanceId`; values\n  // are `ProviderInstanceConfig` envelopes. The driver-specific config blob\n  // is `Schema.Unknown` at this layer so envelopes with unknown drivers\n  // (forks, downgrades, in-flight PR branches) round-trip without loss.\n  // See providerInstance.ts for the forward/backward compatibility invariant.\n  providerInstances: Schema.Record(ProviderInstanceId, ProviderInstanceConfig).pipe(\n    Schema.withDecodingDefault(Effect.succeed({})),\n  ),\n  observability: ObservabilitySettings.pipe(Schema.withDecodingDefault(Effect.succeed({}))),\n});\nexport type ServerSettings = typeof ServerSettings.Type;\n\nexport const DEFAULT_SERVER_SETTINGS: ServerSettings = Schema.decodeSync(ServerSettings)({});\n\nexport class ServerSettingsError extends Schema.TaggedErrorClass<ServerSettingsError>()(\n  \"ServerSettingsError\",\n  {\n    settingsPath: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Server settings error at ${this.settingsPath}: ${this.detail}`;\n  }\n}\n\n// ── Unified type ─────────────────────────────────────────────────────\n\nexport type UnifiedSettings = ServerSettings & ClientSettings;\nexport const DEFAULT_UNIFIED_SETTINGS: UnifiedSettings = {\n  ...DEFAULT_SERVER_SETTINGS,\n  ...DEFAULT_CLIENT_SETTINGS,\n};\n\n// ── Server Settings Patch (replace with a Schema.deepPartial if available) ──────────────────────────────────────────\n\nconst ModelSelectionPatch = Schema.Struct({\n  instanceId: Schema.optionalKey(ProviderInstanceId),\n  model: Schema.optionalKey(TrimmedNonEmptyString),\n  options: Schema.optionalKey(ProviderOptionSelections),\n});\n\nconst CodexSettingsPatch = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Boolean),\n  binaryPath: Schema.optionalKey(TrimmedString),\n  homePath: Schema.optionalKey(TrimmedString),\n  shadowHomePath: Schema.optionalKey(TrimmedString),\n  customModels: Schema.optionalKey(Schema.Array(Schema.String)),\n});\n\nconst ClaudeSettingsPatch = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Boolean),\n  binaryPath: Schema.optionalKey(TrimmedString),\n  homePath: Schema.optionalKey(TrimmedString),\n  customModels: Schema.optionalKey(Schema.Array(Schema.String)),\n  launchArgs: Schema.optionalKey(TrimmedString),\n});\n\nconst CursorSettingsPatch = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Boolean),\n  binaryPath: Schema.optionalKey(TrimmedString),\n  apiEndpoint: Schema.optionalKey(TrimmedString),\n  customModels: Schema.optionalKey(Schema.Array(Schema.String)),\n});\n\nconst GrokSettingsPatch = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Boolean),\n  binaryPath: Schema.optionalKey(TrimmedString),\n  customModels: Schema.optionalKey(Schema.Array(Schema.String)),\n});\n\nconst OpenCodeSettingsPatch = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Boolean),\n  binaryPath: Schema.optionalKey(TrimmedString),\n  serverUrl: Schema.optionalKey(TrimmedString),\n  serverPassword: Schema.optionalKey(TrimmedString),\n  customModels: Schema.optionalKey(Schema.Array(Schema.String)),\n});\n\nexport const ServerSettingsPatch = Schema.Struct({\n  // Server settings\n  enableAssistantStreaming: Schema.optionalKey(Schema.Boolean),\n  automaticGitFetchInterval: Schema.optionalKey(Schema.DurationFromMillis),\n  defaultThreadEnvMode: Schema.optionalKey(ThreadEnvMode),\n  addProjectBaseDirectory: Schema.optionalKey(TrimmedString),\n  transcriptionModel: Schema.optionalKey(TranscriptionModel),\n  textGenerationModelSelection: Schema.optionalKey(ModelSelectionPatch),\n  themeMode: Schema.optionalKey(ThemeMode),\n  colorThemeLight: Schema.optionalKey(Schema.String),\n  colorThemeDark: Schema.optionalKey(Schema.String),\n  importedThemes: Schema.optionalKey(Schema.Array(ImportedColorThemeReference)),\n  observability: Schema.optionalKey(\n    Schema.Struct({\n      otlpTracesUrl: Schema.optionalKey(TrimmedString),\n      otlpMetricsUrl: Schema.optionalKey(TrimmedString),\n    }),\n  ),\n  providers: Schema.optionalKey(\n    Schema.Struct({\n      codex: Schema.optionalKey(CodexSettingsPatch),\n      claudeAgent: Schema.optionalKey(ClaudeSettingsPatch),\n      cursor: Schema.optionalKey(CursorSettingsPatch),\n      grok: Schema.optionalKey(GrokSettingsPatch),\n      opencode: Schema.optionalKey(OpenCodeSettingsPatch),\n    }),\n  ),\n  // Whole-map replacement for the new instance config. Patching individual\n  // entries is intentionally out of scope: the map is small, and partial\n  // patches risk leaving driver-specific config in a half-merged state.\n  // The web UI sends a fully-formed map every time it edits this field.\n  providerInstances: Schema.optionalKey(Schema.Record(ProviderInstanceId, ProviderInstanceConfig)),\n});\nexport type ServerSettingsPatch = typeof ServerSettingsPatch.Type;\n\nexport const ClientSettingsPatch = Schema.Struct({\n  clientSettingsVersion: Schema.optionalKey(NonNegativeInt),\n  autoOpenPlanSidebar: Schema.optionalKey(Schema.Boolean),\n  confirmThreadArchive: Schema.optionalKey(Schema.Boolean),\n  confirmThreadDelete: Schema.optionalKey(Schema.Boolean),\n  diffIgnoreWhitespace: Schema.optionalKey(Schema.Boolean),\n  diffWordWrap: Schema.optionalKey(Schema.Boolean),\n  favorites: Schema.optionalKey(\n    Schema.Array(\n      Schema.Struct({\n        provider: ProviderInstanceId,\n        model: TrimmedNonEmptyString,\n      }),\n    ),\n  ),\n  providerModelPreferences: Schema.optionalKey(\n    Schema.Record(\n      ProviderInstanceId,\n      Schema.Struct({\n        hiddenModels: Schema.Array(Schema.String).pipe(\n          Schema.withDecodingDefault(Effect.succeed([])),\n        ),\n        modelOrder: Schema.Array(Schema.String).pipe(\n          Schema.withDecodingDefault(Effect.succeed([])),\n        ),\n      }),\n    ),\n  ),\n  sidebarProjectGroupingMode: Schema.optionalKey(SidebarProjectGroupingMode),\n  sidebarProjectGroupingOverrides: Schema.optionalKey(\n    Schema.Record(TrimmedNonEmptyString, SidebarProjectGroupingMode),\n  ),\n  sidebarProjectSortOrder: Schema.optionalKey(SidebarProjectSortOrder),\n  sidebarThreadSortOrder: Schema.optionalKey(SidebarThreadSortOrder),\n  sidebarThreadPreviewCount: Schema.optionalKey(SidebarThreadPreviewCount),\n  timestampFormat: Schema.optionalKey(TimestampFormat),\n});\nexport type ClientSettingsPatch = typeof ClientSettingsPatch.Type;\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { ExecutionEnvironmentDescriptor } from \"./environment.ts\";\nimport { ServerAuthDescriptor } from \"./auth.ts\";\nimport {\n  ForwardCompatibleArray,\n  IsoDateTime,\n  NonNegativeInt,\n  PositiveInt,\n  ProjectId,\n  ThreadId,\n  TrimmedNonEmptyString,\n} from \"./baseSchemas.ts\";\nimport {\n  KeybindingCommand,\n  KeybindingValue,\n  KeybindingWhen,\n  ResolvedKeybindingsConfig,\n} from \"./keybindings.ts\";\nimport { EditorId } from \"./editor.ts\";\nimport { ModelCapabilities } from \"./model.ts\";\nimport { ProviderDriverKind, ProviderInstanceId } from \"./providerInstance.ts\";\nimport { ServerSettings } from \"./settings.ts\";\n\nconst KeybindingsMalformedConfigIssue = Schema.Struct({\n  kind: Schema.Literal(\"keybindings.malformed-config\"),\n  message: TrimmedNonEmptyString,\n});\n\nconst KeybindingsInvalidEntryIssue = Schema.Struct({\n  kind: Schema.Literal(\"keybindings.invalid-entry\"),\n  message: TrimmedNonEmptyString,\n  index: Schema.Number,\n});\n\nexport const ServerConfigIssue = Schema.Union([\n  KeybindingsMalformedConfigIssue,\n  KeybindingsInvalidEntryIssue,\n]);\nexport type ServerConfigIssue = typeof ServerConfigIssue.Type;\n\nconst ServerConfigIssues = Schema.Array(ServerConfigIssue);\n\nexport const ServerProviderState = Schema.Literals([\"ready\", \"warning\", \"error\", \"disabled\"]);\nexport type ServerProviderState = typeof ServerProviderState.Type;\n\nexport const ServerProviderAuthStatus = Schema.Literals([\n  \"authenticated\",\n  \"unauthenticated\",\n  \"unknown\",\n]);\nexport type ServerProviderAuthStatus = typeof ServerProviderAuthStatus.Type;\n\nexport const ServerProviderAuth = Schema.Struct({\n  status: ServerProviderAuthStatus,\n  type: Schema.optional(TrimmedNonEmptyString),\n  label: Schema.optional(TrimmedNonEmptyString),\n  email: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ServerProviderAuth = typeof ServerProviderAuth.Type;\n\nexport const ServerProviderModel = Schema.Struct({\n  slug: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  shortName: Schema.optional(TrimmedNonEmptyString),\n  subProvider: Schema.optional(TrimmedNonEmptyString),\n  isCustom: Schema.Boolean,\n  isDefault: Schema.optional(Schema.Boolean),\n  capabilities: Schema.NullOr(ModelCapabilities),\n});\nexport type ServerProviderModel = typeof ServerProviderModel.Type;\n\nexport const ServerProviderSlashCommandInput = Schema.Struct({\n  hint: TrimmedNonEmptyString,\n});\nexport type ServerProviderSlashCommandInput = typeof ServerProviderSlashCommandInput.Type;\n\nexport const ServerProviderSlashCommand = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  description: Schema.optional(TrimmedNonEmptyString),\n  input: Schema.optional(ServerProviderSlashCommandInput),\n});\nexport type ServerProviderSlashCommand = typeof ServerProviderSlashCommand.Type;\n\nexport const ServerProviderSkill = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  description: Schema.optional(TrimmedNonEmptyString),\n  path: TrimmedNonEmptyString,\n  scope: Schema.optional(TrimmedNonEmptyString),\n  enabled: Schema.Boolean,\n  displayName: Schema.optional(TrimmedNonEmptyString),\n  shortDescription: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ServerProviderSkill = typeof ServerProviderSkill.Type;\n\n/**\n * Availability of a configured provider instance from the runtime's POV.\n *\n *  - `available` — the build ships this driver and an instance is wired\n *    up. Default for legacy snapshots produced from the closed\n *    `ServerSettings.providers` map.\n *  - `unavailable` — the user's `ServerSettings.providerInstances` (or a\n *    persisted thread / session binding) references a driver this build\n *    doesn't ship. Common after rolling back from a fork or PR branch\n *    that introduced a new driver. The snapshot is preserved so the UI\n *    can render \"missing driver\" affordances and so the data round-trips\n *    when the user moves back to the fork.\n *\n * Snapshots with `availability: \"unavailable\"` MUST set\n * `installed: false` and `enabled: false`; the runtime refuses turn\n * starts against them with a structured error.\n */\nexport const ServerProviderAvailability = Schema.Literals([\"available\", \"unavailable\"]);\nexport type ServerProviderAvailability = typeof ServerProviderAvailability.Type;\n\nexport const ServerProviderContinuation = Schema.Struct({\n  groupKey: TrimmedNonEmptyString,\n});\nexport type ServerProviderContinuation = typeof ServerProviderContinuation.Type;\n\nexport const ServerProviderVersionAdvisoryStatus = Schema.Literals([\n  \"unknown\",\n  \"current\",\n  \"behind_latest\",\n]);\nexport type ServerProviderVersionAdvisoryStatus = typeof ServerProviderVersionAdvisoryStatus.Type;\n\nexport const ServerProviderVersionAdvisory = Schema.Struct({\n  status: ServerProviderVersionAdvisoryStatus,\n  currentVersion: Schema.NullOr(TrimmedNonEmptyString),\n  latestVersion: Schema.NullOr(TrimmedNonEmptyString),\n  updateCommand: Schema.NullOr(TrimmedNonEmptyString),\n  canUpdate: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(false))),\n  checkedAt: Schema.NullOr(IsoDateTime),\n  message: Schema.NullOr(TrimmedNonEmptyString),\n});\nexport type ServerProviderVersionAdvisory = typeof ServerProviderVersionAdvisory.Type;\n\nexport const ServerProviderUpdateStatus = Schema.Literals([\n  \"idle\",\n  \"queued\",\n  \"running\",\n  \"succeeded\",\n  \"failed\",\n  \"unchanged\",\n]);\nexport type ServerProviderUpdateStatus = typeof ServerProviderUpdateStatus.Type;\n\nexport const ServerProviderUpdateState = Schema.Struct({\n  status: ServerProviderUpdateStatus,\n  startedAt: Schema.NullOr(IsoDateTime),\n  finishedAt: Schema.NullOr(IsoDateTime),\n  message: Schema.NullOr(TrimmedNonEmptyString),\n  output: Schema.NullOr(Schema.String.check(Schema.isMaxLength(10_000))),\n});\nexport type ServerProviderUpdateState = typeof ServerProviderUpdateState.Type;\n\nexport const ServerProvider = Schema.Struct({\n  // Routing key for the configured instance this snapshot represents. This\n  // is the only stable identity consumers may use for provider routing.\n  instanceId: ProviderInstanceId,\n  // Open driver kind slug that selects the implementation handling this\n  // instance. It is metadata/capability context, not a routing key.\n  driver: ProviderDriverKind,\n  displayName: Schema.optional(TrimmedNonEmptyString),\n  accentColor: Schema.optional(TrimmedNonEmptyString),\n  badgeLabel: Schema.optional(TrimmedNonEmptyString),\n  continuation: Schema.optional(ServerProviderContinuation),\n  showInteractionModeToggle: Schema.optional(Schema.Boolean),\n  requiresNewThreadForModelChange: Schema.optional(Schema.Boolean),\n  enabled: Schema.Boolean,\n  installed: Schema.Boolean,\n  version: Schema.NullOr(TrimmedNonEmptyString),\n  status: ServerProviderState,\n  auth: ServerProviderAuth,\n  checkedAt: IsoDateTime,\n  message: Schema.optional(TrimmedNonEmptyString),\n  // Optional for back-compat: every legacy producer omits this field and\n  // an absent value is interpreted as `\"available\"` by consumers (see\n  // `isProviderAvailable`). New `ProviderInstanceRegistry` outputs set it\n  // explicitly so the UI can render unavailable shadows from\n  // `ServerSettings.providerInstances`.\n  availability: Schema.optional(ServerProviderAvailability),\n  // Human-readable reason populated when `availability === \"unavailable\"`.\n  // Surfaces in the UI alongside the missing-driver affordance.\n  unavailableReason: Schema.optional(TrimmedNonEmptyString),\n  models: Schema.Array(ServerProviderModel),\n  slashCommands: Schema.Array(ServerProviderSlashCommand).pipe(\n    Schema.withDecodingDefault(Effect.succeed([])),\n  ),\n  skills: Schema.Array(ServerProviderSkill).pipe(Schema.withDecodingDefault(Effect.succeed([]))),\n  versionAdvisory: Schema.optionalKey(ServerProviderVersionAdvisory),\n  updateState: Schema.optionalKey(ServerProviderUpdateState),\n});\nexport type ServerProvider = typeof ServerProvider.Type;\n\n// A newer server may add provider state variants that an older client cannot\n// render. Keep the remaining providers usable instead of rejecting config.\nexport const ServerProviders = ForwardCompatibleArray(ServerProvider);\nexport type ServerProviders = typeof ServerProviders.Type;\n\n/**\n * Treat the optional `availability` as \"available\" when absent. This is\n * the rule legacy producers (which omit the field) and new producers\n * (which set it explicitly) agree on so consumers never have to thread\n * `?? \"available\"` defaults through their code paths.\n */\nexport const isProviderAvailable = (snapshot: ServerProvider): boolean =>\n  snapshot.availability !== \"unavailable\";\n\nexport const ServerObservability = Schema.Struct({\n  logsDirectoryPath: TrimmedNonEmptyString,\n  localTracingEnabled: Schema.Boolean,\n  otlpTracesUrl: Schema.optional(TrimmedNonEmptyString),\n  otlpTracesEnabled: Schema.Boolean,\n  otlpMetricsUrl: Schema.optional(TrimmedNonEmptyString),\n  otlpMetricsEnabled: Schema.Boolean,\n});\nexport type ServerObservability = typeof ServerObservability.Type;\n\nexport const ServerTraceDiagnosticsErrorKind = Schema.Literals([\n  \"trace-file-not-found\",\n  \"trace-file-read-failed\",\n]);\nexport type ServerTraceDiagnosticsErrorKind = typeof ServerTraceDiagnosticsErrorKind.Type;\n\nexport const ServerTraceDiagnosticsSpanSummary = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  count: NonNegativeInt,\n  failureCount: NonNegativeInt,\n  totalDurationMs: Schema.Number,\n  averageDurationMs: Schema.Number,\n  maxDurationMs: Schema.Number,\n});\nexport type ServerTraceDiagnosticsSpanSummary = typeof ServerTraceDiagnosticsSpanSummary.Type;\n\nexport const ServerTraceDiagnosticsFailureSummary = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  cause: TrimmedNonEmptyString,\n  count: NonNegativeInt,\n  lastSeenAt: Schema.DateTimeUtc,\n  traceId: TrimmedNonEmptyString,\n  spanId: TrimmedNonEmptyString,\n});\nexport type ServerTraceDiagnosticsFailureSummary = typeof ServerTraceDiagnosticsFailureSummary.Type;\n\nexport const ServerTraceDiagnosticsRecentFailure = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  cause: TrimmedNonEmptyString,\n  durationMs: Schema.Number,\n  endedAt: Schema.DateTimeUtc,\n  traceId: TrimmedNonEmptyString,\n  spanId: TrimmedNonEmptyString,\n});\nexport type ServerTraceDiagnosticsRecentFailure = typeof ServerTraceDiagnosticsRecentFailure.Type;\n\nexport const ServerTraceDiagnosticsSpanOccurrence = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  durationMs: Schema.Number,\n  endedAt: Schema.DateTimeUtc,\n  traceId: TrimmedNonEmptyString,\n  spanId: TrimmedNonEmptyString,\n});\nexport type ServerTraceDiagnosticsSpanOccurrence = typeof ServerTraceDiagnosticsSpanOccurrence.Type;\n\nexport const ServerTraceDiagnosticsLogEvent = Schema.Struct({\n  spanName: TrimmedNonEmptyString,\n  level: TrimmedNonEmptyString,\n  message: TrimmedNonEmptyString,\n  seenAt: Schema.DateTimeUtc,\n  traceId: TrimmedNonEmptyString,\n  spanId: TrimmedNonEmptyString,\n});\nexport type ServerTraceDiagnosticsLogEvent = typeof ServerTraceDiagnosticsLogEvent.Type;\n\nexport const ServerTraceDiagnosticsResult = Schema.Struct({\n  traceFilePath: TrimmedNonEmptyString,\n  scannedFilePaths: Schema.Array(TrimmedNonEmptyString),\n  readAt: Schema.DateTimeUtc,\n  recordCount: NonNegativeInt,\n  parseErrorCount: NonNegativeInt,\n  firstSpanAt: Schema.Option(Schema.DateTimeUtc),\n  lastSpanAt: Schema.Option(Schema.DateTimeUtc),\n  failureCount: NonNegativeInt,\n  interruptionCount: NonNegativeInt,\n  slowSpanThresholdMs: NonNegativeInt,\n  slowSpanCount: NonNegativeInt,\n  logLevelCounts: Schema.Record(TrimmedNonEmptyString, NonNegativeInt),\n  topSpansByCount: Schema.Array(ServerTraceDiagnosticsSpanSummary),\n  slowestSpans: Schema.Array(ServerTraceDiagnosticsSpanOccurrence),\n  commonFailures: Schema.Array(ServerTraceDiagnosticsFailureSummary),\n  latestFailures: Schema.Array(ServerTraceDiagnosticsRecentFailure),\n  latestWarningAndErrorLogs: Schema.Array(ServerTraceDiagnosticsLogEvent),\n  partialFailure: Schema.Option(Schema.Boolean),\n  error: Schema.Option(\n    Schema.Struct({\n      kind: ServerTraceDiagnosticsErrorKind,\n      message: TrimmedNonEmptyString,\n    }),\n  ),\n});\nexport type ServerTraceDiagnosticsResult = typeof ServerTraceDiagnosticsResult.Type;\n\nexport const ServerProcessSignal = Schema.Literals([\"SIGINT\", \"SIGKILL\"]);\nexport type ServerProcessSignal = typeof ServerProcessSignal.Type;\n\nexport const ServerProcessDiagnosticsEntry = Schema.Struct({\n  pid: PositiveInt,\n  ppid: NonNegativeInt,\n  pgid: Schema.Option(Schema.Int),\n  status: TrimmedNonEmptyString,\n  cpuPercent: Schema.Number,\n  rssBytes: NonNegativeInt,\n  elapsed: TrimmedNonEmptyString,\n  command: TrimmedNonEmptyString,\n  depth: NonNegativeInt,\n  childPids: Schema.Array(PositiveInt),\n});\nexport type ServerProcessDiagnosticsEntry = typeof ServerProcessDiagnosticsEntry.Type;\n\nexport const ServerProcessDiagnosticsResult = Schema.Struct({\n  serverPid: PositiveInt,\n  readAt: Schema.DateTimeUtc,\n  processCount: NonNegativeInt,\n  totalRssBytes: NonNegativeInt,\n  totalCpuPercent: Schema.Number,\n  processes: Schema.Array(ServerProcessDiagnosticsEntry),\n  error: Schema.Option(\n    Schema.Struct({\n      message: TrimmedNonEmptyString,\n    }),\n  ),\n});\nexport type ServerProcessDiagnosticsResult = typeof ServerProcessDiagnosticsResult.Type;\n\nexport const ServerProcessResourceHistoryInput = Schema.Struct({\n  windowMs: NonNegativeInt,\n  bucketMs: NonNegativeInt,\n});\nexport type ServerProcessResourceHistoryInput = typeof ServerProcessResourceHistoryInput.Type;\n\nexport const ServerProcessResourceHistoryBucket = Schema.Struct({\n  startedAt: Schema.DateTimeUtc,\n  endedAt: Schema.DateTimeUtc,\n  avgCpuPercent: Schema.Number,\n  maxCpuPercent: Schema.Number,\n  maxRssBytes: NonNegativeInt,\n  maxProcessCount: NonNegativeInt,\n});\nexport type ServerProcessResourceHistoryBucket = typeof ServerProcessResourceHistoryBucket.Type;\n\nexport const ServerProcessResourceHistorySummary = Schema.Struct({\n  processKey: TrimmedNonEmptyString,\n  pid: PositiveInt,\n  ppid: NonNegativeInt,\n  command: TrimmedNonEmptyString,\n  depth: NonNegativeInt,\n  isServerRoot: Schema.Boolean,\n  firstSeenAt: Schema.DateTimeUtc,\n  lastSeenAt: Schema.DateTimeUtc,\n  currentCpuPercent: Schema.Number,\n  avgCpuPercent: Schema.Number,\n  maxCpuPercent: Schema.Number,\n  cpuSecondsApprox: Schema.Number,\n  currentRssBytes: NonNegativeInt,\n  maxRssBytes: NonNegativeInt,\n  sampleCount: NonNegativeInt,\n});\nexport type ServerProcessResourceHistorySummary = typeof ServerProcessResourceHistorySummary.Type;\n\nexport const ServerProcessResourceHistoryResult = Schema.Struct({\n  readAt: Schema.DateTimeUtc,\n  windowMs: NonNegativeInt,\n  bucketMs: NonNegativeInt,\n  sampleIntervalMs: NonNegativeInt,\n  retainedSampleCount: NonNegativeInt,\n  totalCpuSecondsApprox: Schema.Number,\n  buckets: Schema.Array(ServerProcessResourceHistoryBucket),\n  topProcesses: Schema.Array(ServerProcessResourceHistorySummary),\n  error: Schema.Option(\n    Schema.Struct({\n      message: TrimmedNonEmptyString,\n    }),\n  ),\n});\nexport type ServerProcessResourceHistoryResult = typeof ServerProcessResourceHistoryResult.Type;\n\nexport const ServerSignalProcessInput = Schema.Struct({\n  pid: PositiveInt,\n  signal: ServerProcessSignal,\n});\nexport type ServerSignalProcessInput = typeof ServerSignalProcessInput.Type;\n\nexport const ServerSignalProcessResult = Schema.Struct({\n  pid: PositiveInt,\n  signal: ServerProcessSignal,\n  signaled: Schema.Boolean,\n  message: Schema.Option(TrimmedNonEmptyString),\n});\nexport type ServerSignalProcessResult = typeof ServerSignalProcessResult.Type;\n\nexport const ServerProbeDevServerUrlInput = Schema.Struct({\n  url: TrimmedNonEmptyString,\n});\nexport type ServerProbeDevServerUrlInput = typeof ServerProbeDevServerUrlInput.Type;\n\nexport const ServerProbeDevServerUrlResult = Schema.Struct({\n  reachable: Schema.Boolean,\n});\nexport type ServerProbeDevServerUrlResult = typeof ServerProbeDevServerUrlResult.Type;\n\nexport const ServerConfig = Schema.Struct({\n  environment: ExecutionEnvironmentDescriptor,\n  auth: ServerAuthDescriptor,\n  cwd: TrimmedNonEmptyString,\n  keybindingsConfigPath: TrimmedNonEmptyString,\n  keybindings: ResolvedKeybindingsConfig,\n  issues: ServerConfigIssues,\n  providers: ServerProviders,\n  availableEditors: Schema.Array(EditorId),\n  observability: ServerObservability,\n  settings: ServerSettings,\n});\nexport type ServerConfig = typeof ServerConfig.Type;\n\nconst ServerUpsertKeybindingReplaceTarget = Schema.Struct({\n  key: KeybindingValue,\n  command: KeybindingCommand,\n  when: Schema.optional(KeybindingWhen),\n});\n\nexport const ServerUpsertKeybindingInput = Schema.Struct({\n  key: KeybindingValue,\n  command: KeybindingCommand,\n  when: Schema.optional(KeybindingWhen),\n  replace: Schema.optional(ServerUpsertKeybindingReplaceTarget),\n});\nexport type ServerUpsertKeybindingInput = typeof ServerUpsertKeybindingInput.Type;\n\nexport const ServerRemoveKeybindingInput = ServerUpsertKeybindingReplaceTarget;\nexport type ServerRemoveKeybindingInput = typeof ServerRemoveKeybindingInput.Type;\n\nexport const ServerUpsertKeybindingResult = Schema.Struct({\n  keybindings: ResolvedKeybindingsConfig,\n  issues: ServerConfigIssues,\n});\nexport type ServerUpsertKeybindingResult = typeof ServerUpsertKeybindingResult.Type;\n\nexport const ServerRemoveKeybindingResult = ServerUpsertKeybindingResult;\nexport type ServerRemoveKeybindingResult = typeof ServerRemoveKeybindingResult.Type;\n\nexport const ServerConfigUpdatedPayload = Schema.Struct({\n  issues: ServerConfigIssues,\n  providers: ServerProviders,\n  settings: Schema.optional(ServerSettings),\n});\nexport type ServerConfigUpdatedPayload = typeof ServerConfigUpdatedPayload.Type;\n\nexport const ServerConfigKeybindingsUpdatedPayload = Schema.Struct({\n  keybindings: ResolvedKeybindingsConfig,\n  issues: ServerConfigIssues,\n});\nexport type ServerConfigKeybindingsUpdatedPayload =\n  typeof ServerConfigKeybindingsUpdatedPayload.Type;\n\nexport const ServerConfigProviderStatusesPayload = Schema.Struct({\n  providers: ServerProviders,\n});\nexport type ServerConfigProviderStatusesPayload = typeof ServerConfigProviderStatusesPayload.Type;\n\nexport const ServerConfigSettingsUpdatedPayload = Schema.Struct({\n  settings: ServerSettings,\n});\nexport type ServerConfigSettingsUpdatedPayload = typeof ServerConfigSettingsUpdatedPayload.Type;\n\nexport const ServerConfigStreamSnapshotEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  type: Schema.Literal(\"snapshot\"),\n  config: ServerConfig,\n});\nexport type ServerConfigStreamSnapshotEvent = typeof ServerConfigStreamSnapshotEvent.Type;\n\nexport const ServerConfigStreamKeybindingsUpdatedEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  type: Schema.Literal(\"keybindingsUpdated\"),\n  payload: ServerConfigKeybindingsUpdatedPayload,\n});\nexport type ServerConfigStreamKeybindingsUpdatedEvent =\n  typeof ServerConfigStreamKeybindingsUpdatedEvent.Type;\n\nexport const ServerConfigStreamProviderStatusesEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  type: Schema.Literal(\"providerStatuses\"),\n  payload: ServerConfigProviderStatusesPayload,\n});\nexport type ServerConfigStreamProviderStatusesEvent =\n  typeof ServerConfigStreamProviderStatusesEvent.Type;\n\nexport const ServerConfigStreamSettingsUpdatedEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  type: Schema.Literal(\"settingsUpdated\"),\n  payload: ServerConfigSettingsUpdatedPayload,\n});\nexport type ServerConfigStreamSettingsUpdatedEvent =\n  typeof ServerConfigStreamSettingsUpdatedEvent.Type;\n\nexport const ServerConfigStreamEvent = Schema.Union([\n  ServerConfigStreamSnapshotEvent,\n  ServerConfigStreamKeybindingsUpdatedEvent,\n  ServerConfigStreamProviderStatusesEvent,\n  ServerConfigStreamSettingsUpdatedEvent,\n]);\nexport type ServerConfigStreamEvent = typeof ServerConfigStreamEvent.Type;\n\nexport const ServerLifecycleReadyPayload = Schema.Struct({\n  at: IsoDateTime,\n  environment: ExecutionEnvironmentDescriptor,\n});\nexport type ServerLifecycleReadyPayload = typeof ServerLifecycleReadyPayload.Type;\n\nexport const ServerLifecycleWelcomePayload = Schema.Struct({\n  environment: ExecutionEnvironmentDescriptor,\n  cwd: TrimmedNonEmptyString,\n  projectName: TrimmedNonEmptyString,\n  serverBootId: Schema.optional(TrimmedNonEmptyString),\n  bootstrapProjectId: Schema.optional(ProjectId),\n  bootstrapThreadId: Schema.optional(ThreadId),\n});\nexport type ServerLifecycleWelcomePayload = typeof ServerLifecycleWelcomePayload.Type;\n\nexport const ServerLifecycleStreamWelcomeEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  sequence: NonNegativeInt,\n  type: Schema.Literal(\"welcome\"),\n  payload: ServerLifecycleWelcomePayload,\n});\nexport type ServerLifecycleStreamWelcomeEvent = typeof ServerLifecycleStreamWelcomeEvent.Type;\n\nexport const ServerLifecycleStreamReadyEvent = Schema.Struct({\n  version: Schema.Literal(1),\n  sequence: NonNegativeInt,\n  type: Schema.Literal(\"ready\"),\n  payload: ServerLifecycleReadyPayload,\n});\nexport type ServerLifecycleStreamReadyEvent = typeof ServerLifecycleStreamReadyEvent.Type;\n\nexport const ServerLifecycleStreamEvent = Schema.Union([\n  ServerLifecycleStreamWelcomeEvent,\n  ServerLifecycleStreamReadyEvent,\n]);\nexport type ServerLifecycleStreamEvent = typeof ServerLifecycleStreamEvent.Type;\n\nexport const ServerProviderUpdatedPayload = Schema.Struct({\n  providers: ServerProviders,\n});\nexport type ServerProviderUpdatedPayload = typeof ServerProviderUpdatedPayload.Type;\n\nexport const ServerProviderUpdateInput = Schema.Struct({\n  provider: ProviderDriverKind,\n  instanceId: Schema.optionalKey(ProviderInstanceId),\n});\nexport type ServerProviderUpdateInput = typeof ServerProviderUpdateInput.Type;\n\nexport class ServerProviderUpdateError extends Schema.TaggedErrorClass<ServerProviderUpdateError>()(\n  \"ServerProviderUpdateError\",\n  {\n    provider: ProviderDriverKind,\n    reason: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider update failed for ${this.provider}: ${this.reason}`;\n  }\n}\n","import * as Schema from \"effect/Schema\";\n\nimport { AuthSessionId, NonNegativeInt, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nexport const WebPushSubscriptionKeys = Schema.Struct({\n  p256dh: TrimmedNonEmptyString,\n  auth: TrimmedNonEmptyString,\n});\nexport type WebPushSubscriptionKeys = typeof WebPushSubscriptionKeys.Type;\n\nexport const WebPushSubscriptionJson = Schema.Struct({\n  endpoint: TrimmedNonEmptyString,\n  expirationTime: Schema.NullOr(NonNegativeInt),\n  keys: WebPushSubscriptionKeys,\n});\nexport type WebPushSubscriptionJson = typeof WebPushSubscriptionJson.Type;\n\nexport const ServerPushNotificationPayload = Schema.Struct({\n  title: TrimmedNonEmptyString,\n  body: Schema.optional(TrimmedNonEmptyString),\n  url: Schema.optional(TrimmedNonEmptyString),\n  tag: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ServerPushNotificationPayload = typeof ServerPushNotificationPayload.Type;\n\nexport const ServerPushConfig = Schema.Struct({\n  supported: Schema.Boolean,\n  publicVapidKey: Schema.NullOr(TrimmedNonEmptyString),\n});\nexport type ServerPushConfig = typeof ServerPushConfig.Type;\n\nexport const ServerPushSubscriptionStatus = Schema.Struct({\n  subscribed: Schema.Boolean,\n  endpoint: Schema.NullOr(TrimmedNonEmptyString),\n});\nexport type ServerPushSubscriptionStatus = typeof ServerPushSubscriptionStatus.Type;\n\nexport const ServerRegisterPushSubscriptionInput = Schema.Struct({\n  subscription: WebPushSubscriptionJson,\n  userAgent: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ServerRegisterPushSubscriptionInput = typeof ServerRegisterPushSubscriptionInput.Type;\n\nexport const ServerUnregisterPushSubscriptionInput = Schema.Struct({\n  endpoint: TrimmedNonEmptyString,\n});\nexport type ServerUnregisterPushSubscriptionInput =\n  typeof ServerUnregisterPushSubscriptionInput.Type;\n\nexport const ServerSendTestPushNotificationInput = Schema.Struct({\n  endpoint: TrimmedNonEmptyString,\n});\nexport type ServerSendTestPushNotificationInput = typeof ServerSendTestPushNotificationInput.Type;\n\nexport const ServerPushSendResult = Schema.Struct({\n  sentCount: NonNegativeInt,\n  failedCount: NonNegativeInt,\n  lastFailureDetail: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ServerPushSendResult = typeof ServerPushSendResult.Type;\n\nexport const ServerPushSubscriptionRecord = Schema.Struct({\n  endpoint: TrimmedNonEmptyString,\n  sessionId: AuthSessionId,\n  p256dh: TrimmedNonEmptyString,\n  auth: TrimmedNonEmptyString,\n  expirationTime: Schema.NullOr(NonNegativeInt),\n  userAgent: Schema.NullOr(TrimmedNonEmptyString),\n  createdAt: Schema.DateTimeUtc,\n  updatedAt: Schema.DateTimeUtc,\n  lastSuccessfulPushAt: Schema.NullOr(Schema.DateTimeUtc),\n  lastFailedPushAt: Schema.NullOr(Schema.DateTimeUtc),\n  failureCount: NonNegativeInt,\n  disabledAt: Schema.NullOr(Schema.DateTimeUtc),\n});\nexport type ServerPushSubscriptionRecord = typeof ServerPushSubscriptionRecord.Type;\n\nexport class ServerPushNotificationError extends Schema.TaggedErrorClass<ServerPushNotificationError>()(\n  \"ServerPushNotificationError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `${this.operation}: ${this.detail}`;\n  }\n}\n","import * as Schema from \"effect/Schema\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nexport const VcsDriverKind = Schema.Literals([\"git\", \"jj\", \"unknown\"]);\nexport type VcsDriverKind = typeof VcsDriverKind.Type;\n\nexport const VcsFreshnessSource = Schema.Literals([\n  \"live-local\",\n  \"cached-local\",\n  \"cached-remote\",\n  \"explicit-remote\",\n]);\nexport type VcsFreshnessSource = typeof VcsFreshnessSource.Type;\n\nexport const VcsFreshness = Schema.Struct({\n  source: VcsFreshnessSource,\n  observedAt: Schema.DateTimeUtc,\n  expiresAt: Schema.Option(Schema.DateTimeUtc),\n});\nexport type VcsFreshness = typeof VcsFreshness.Type;\n\nexport const VcsDriverCapabilities = Schema.Struct({\n  kind: VcsDriverKind,\n  supportsWorktrees: Schema.Boolean,\n  supportsBookmarks: Schema.Boolean,\n  supportsAtomicSnapshot: Schema.Boolean,\n  supportsPushDefaultRemote: Schema.Boolean,\n  ignoreClassifier: Schema.Literals([\"native\", \"git-compatible-fallback\"]),\n});\nexport type VcsDriverCapabilities = typeof VcsDriverCapabilities.Type;\n\nexport const VcsRepositoryIdentity = Schema.Struct({\n  kind: VcsDriverKind,\n  rootPath: TrimmedNonEmptyString,\n  metadataPath: Schema.NullOr(TrimmedNonEmptyString),\n  freshness: VcsFreshness,\n});\nexport type VcsRepositoryIdentity = typeof VcsRepositoryIdentity.Type;\n\nexport const VcsListWorkspaceFilesResult = Schema.Struct({\n  paths: Schema.Array(TrimmedNonEmptyString),\n  ignoredPaths: Schema.optional(Schema.Array(TrimmedNonEmptyString)),\n  truncated: Schema.Boolean,\n  freshness: VcsFreshness,\n});\nexport type VcsListWorkspaceFilesResult = typeof VcsListWorkspaceFilesResult.Type;\n\nexport const VcsRemote = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  url: TrimmedNonEmptyString,\n  pushUrl: Schema.Option(TrimmedNonEmptyString),\n  isPrimary: Schema.Boolean,\n});\nexport type VcsRemote = typeof VcsRemote.Type;\n\nexport const VcsListRemotesResult = Schema.Struct({\n  remotes: Schema.Array(VcsRemote),\n  freshness: VcsFreshness,\n});\nexport type VcsListRemotesResult = typeof VcsListRemotesResult.Type;\n\nexport interface VcsProcessErrorContext {\n  readonly operation: string;\n  readonly command: string;\n  readonly cwd: string;\n}\n\nexport interface VcsProcessSpawnFailure {\n  readonly cause: unknown;\n}\n\nexport interface VcsProcessStdinFailure {\n  readonly cause: unknown;\n}\n\nexport interface VcsProcessReadFailure {\n  readonly stream: \"stdout\" | \"stderr\" | \"exitCode\";\n  readonly cause: unknown;\n}\n\nexport interface VcsProcessOutputLimitFailure {\n  readonly stream: \"stdout\" | \"stderr\";\n  readonly maxBytes: number;\n}\n\nexport interface VcsProcessTimeoutFailure {\n  readonly timeoutMs: number;\n}\n\nexport class VcsProcessSpawnError extends Schema.TaggedErrorClass<VcsProcessSpawnError>()(\n  \"VcsProcessSpawnError\",\n  {\n    operation: Schema.String,\n    command: Schema.String,\n    cwd: Schema.String,\n    cause: Schema.Defect(),\n  },\n) {\n  override get message(): string {\n    return `VCS process failed to spawn in ${this.operation}: ${this.command} (${this.cwd})`;\n  }\n\n  static fromProcessSpawnError(context: VcsProcessErrorContext, error: VcsProcessSpawnFailure) {\n    return new VcsProcessSpawnError({\n      ...context,\n      cause: error.cause,\n    });\n  }\n}\n\nexport class VcsProcessExitError extends Schema.TaggedErrorClass<VcsProcessExitError>()(\n  \"VcsProcessExitError\",\n  {\n    operation: Schema.String,\n    command: Schema.String,\n    cwd: Schema.String,\n    exitCode: Schema.Number,\n    detail: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `VCS process failed in ${this.operation}: ${this.command} (${this.cwd}) exited with ${this.exitCode} - ${this.detail}`;\n  }\n}\n\nexport class VcsProcessTimeoutError extends Schema.TaggedErrorClass<VcsProcessTimeoutError>()(\n  \"VcsProcessTimeoutError\",\n  {\n    operation: Schema.String,\n    command: Schema.String,\n    cwd: Schema.String,\n    timeoutMs: Schema.Number,\n  },\n) {\n  override get message(): string {\n    return `VCS process timed out in ${this.operation}: ${this.command} (${this.cwd}) after ${this.timeoutMs}ms`;\n  }\n\n  static fromProcessTimeoutError(context: VcsProcessErrorContext, error: VcsProcessTimeoutFailure) {\n    return new VcsProcessTimeoutError({\n      ...context,\n      timeoutMs: error.timeoutMs,\n    });\n  }\n}\n\nexport class VcsOutputDecodeError extends Schema.TaggedErrorClass<VcsOutputDecodeError>()(\n  \"VcsOutputDecodeError\",\n  {\n    operation: Schema.String,\n    command: Schema.String,\n    cwd: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `VCS output decode failed in ${this.operation}: ${this.command} (${this.cwd}) - ${this.detail}`;\n  }\n\n  static fromProcessStdinError(context: VcsProcessErrorContext, error: VcsProcessStdinFailure) {\n    return new VcsOutputDecodeError({\n      ...context,\n      detail: \"failed to write process stdin\",\n      cause: error.cause,\n    });\n  }\n\n  static fromProcessReadError(context: VcsProcessErrorContext, error: VcsProcessReadFailure) {\n    return new VcsOutputDecodeError({\n      ...context,\n      detail:\n        error.stream === \"exitCode\"\n          ? \"failed to read process exit code\"\n          : `failed to read process ${error.stream}`,\n      cause: error.cause,\n    });\n  }\n\n  static fromProcessOutputLimitError(\n    context: VcsProcessErrorContext,\n    error: VcsProcessOutputLimitFailure,\n  ) {\n    return new VcsOutputDecodeError({\n      ...context,\n      detail: `process ${error.stream} exceeded ${error.maxBytes} bytes`,\n    });\n  }\n\n  static missingExitCode(context: VcsProcessErrorContext) {\n    return new VcsOutputDecodeError({\n      ...context,\n      detail: \"process completed without an exit code\",\n    });\n  }\n}\n\nexport class VcsRepositoryDetectionError extends Schema.TaggedErrorClass<VcsRepositoryDetectionError>()(\n  \"VcsRepositoryDetectionError\",\n  {\n    operation: Schema.String,\n    cwd: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `VCS repository detection failed in ${this.operation}: ${this.cwd} - ${this.detail}`;\n  }\n}\n\nexport class VcsUnsupportedOperationError extends Schema.TaggedErrorClass<VcsUnsupportedOperationError>()(\n  \"VcsUnsupportedOperationError\",\n  {\n    operation: Schema.String,\n    kind: VcsDriverKind,\n    detail: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `VCS operation is unsupported for ${this.kind} in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport const VcsError = Schema.Union([\n  VcsProcessSpawnError,\n  VcsProcessExitError,\n  VcsProcessTimeoutError,\n  VcsOutputDecodeError,\n  VcsRepositoryDetectionError,\n  VcsUnsupportedOperationError,\n]);\nexport type VcsError = typeof VcsError.Type;\n","import * as Schema from \"effect/Schema\";\nimport { PositiveInt, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\nimport { VcsDriverKind } from \"./vcs.ts\";\n\nexport const SourceControlProviderKind = Schema.Literals([\n  \"github\",\n  \"gitlab\",\n  \"azure-devops\",\n  \"bitbucket\",\n  \"unknown\",\n]);\nexport type SourceControlProviderKind = typeof SourceControlProviderKind.Type;\n\nexport const SourceControlProviderInfo = Schema.Struct({\n  kind: SourceControlProviderKind,\n  name: TrimmedNonEmptyString,\n  baseUrl: Schema.String,\n});\nexport type SourceControlProviderInfo = typeof SourceControlProviderInfo.Type;\n\nexport const ChangeRequestState = Schema.Literals([\"open\", \"closed\", \"merged\"]);\nexport type ChangeRequestState = typeof ChangeRequestState.Type;\n\nexport const ChangeRequest = Schema.Struct({\n  provider: SourceControlProviderKind,\n  number: PositiveInt,\n  title: TrimmedNonEmptyString,\n  url: Schema.String,\n  baseRefName: TrimmedNonEmptyString,\n  headRefName: TrimmedNonEmptyString,\n  state: ChangeRequestState,\n  updatedAt: Schema.Option(Schema.DateTimeUtc),\n  isCrossRepository: Schema.optional(Schema.Boolean),\n  headRepositoryNameWithOwner: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  headRepositoryOwnerLogin: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n});\nexport type ChangeRequest = typeof ChangeRequest.Type;\n\nexport const SourceControlRepositoryCloneUrls = Schema.Struct({\n  nameWithOwner: TrimmedNonEmptyString,\n  url: TrimmedNonEmptyString,\n  sshUrl: TrimmedNonEmptyString,\n});\nexport type SourceControlRepositoryCloneUrls = typeof SourceControlRepositoryCloneUrls.Type;\n\nexport const SourceControlRepositoryVisibility = Schema.Literals([\"private\", \"public\"]);\nexport type SourceControlRepositoryVisibility = typeof SourceControlRepositoryVisibility.Type;\n\nexport const SourceControlCloneProtocol = Schema.Literals([\"auto\", \"ssh\", \"https\"]);\nexport type SourceControlCloneProtocol = typeof SourceControlCloneProtocol.Type;\n\nexport const SourceControlRepositoryInfo = Schema.Struct({\n  provider: SourceControlProviderKind,\n  nameWithOwner: TrimmedNonEmptyString,\n  url: TrimmedNonEmptyString,\n  sshUrl: TrimmedNonEmptyString,\n});\nexport type SourceControlRepositoryInfo = typeof SourceControlRepositoryInfo.Type;\n\nexport const SourceControlRepositoryLookupInput = Schema.Struct({\n  provider: SourceControlProviderKind,\n  repository: TrimmedNonEmptyString,\n  cwd: Schema.optional(TrimmedNonEmptyString),\n});\nexport type SourceControlRepositoryLookupInput = typeof SourceControlRepositoryLookupInput.Type;\n\nexport const SourceControlCloneRepositoryInput = Schema.Struct({\n  provider: Schema.optional(SourceControlProviderKind),\n  repository: Schema.optional(TrimmedNonEmptyString),\n  remoteUrl: Schema.optional(TrimmedNonEmptyString),\n  destinationPath: TrimmedNonEmptyString,\n  protocol: Schema.optional(SourceControlCloneProtocol),\n});\nexport type SourceControlCloneRepositoryInput = typeof SourceControlCloneRepositoryInput.Type;\n\nexport const SourceControlCloneRepositoryResult = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  remoteUrl: TrimmedNonEmptyString,\n  repository: Schema.NullOr(SourceControlRepositoryInfo),\n});\nexport type SourceControlCloneRepositoryResult = typeof SourceControlCloneRepositoryResult.Type;\n\nexport const SourceControlPublishRepositoryInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  provider: SourceControlProviderKind,\n  repository: TrimmedNonEmptyString,\n  visibility: SourceControlRepositoryVisibility,\n  remoteName: Schema.optional(TrimmedNonEmptyString),\n  protocol: Schema.optional(SourceControlCloneProtocol),\n});\nexport type SourceControlPublishRepositoryInput = typeof SourceControlPublishRepositoryInput.Type;\n\nexport const SourceControlPublishStatus = Schema.Literals([\"pushed\", \"remote_added\"]);\nexport type SourceControlPublishStatus = typeof SourceControlPublishStatus.Type;\n\nexport const SourceControlPublishRepositoryResult = Schema.Struct({\n  repository: SourceControlRepositoryInfo,\n  remoteName: TrimmedNonEmptyString,\n  remoteUrl: TrimmedNonEmptyString,\n  branch: TrimmedNonEmptyString,\n  upstreamBranch: Schema.optional(TrimmedNonEmptyString),\n  status: SourceControlPublishStatus,\n});\nexport type SourceControlPublishRepositoryResult = typeof SourceControlPublishRepositoryResult.Type;\n\nexport const SourceControlDiscoveryStatus = Schema.Literals([\"available\", \"missing\"]);\nexport type SourceControlDiscoveryStatus = typeof SourceControlDiscoveryStatus.Type;\n\nexport const SourceControlProviderAuthStatus = Schema.Literals([\n  \"authenticated\",\n  \"unauthenticated\",\n  \"unknown\",\n]);\nexport type SourceControlProviderAuthStatus = typeof SourceControlProviderAuthStatus.Type;\n\nexport const SourceControlProviderAuth = Schema.Struct({\n  status: SourceControlProviderAuthStatus,\n  account: Schema.Option(TrimmedNonEmptyString),\n  host: Schema.Option(TrimmedNonEmptyString),\n  detail: Schema.Option(TrimmedNonEmptyString),\n});\nexport type SourceControlProviderAuth = typeof SourceControlProviderAuth.Type;\n\nconst SourceControlDiscoverySharedFields = {\n  label: TrimmedNonEmptyString,\n  executable: Schema.optional(TrimmedNonEmptyString),\n  status: SourceControlDiscoveryStatus,\n  version: Schema.Option(TrimmedNonEmptyString),\n  installHint: TrimmedNonEmptyString,\n  detail: Schema.Option(TrimmedNonEmptyString),\n} as const;\n\nexport const VcsDiscoveryItem = Schema.Struct({\n  kind: VcsDriverKind,\n  implemented: Schema.Boolean,\n  ...SourceControlDiscoverySharedFields,\n});\nexport type VcsDiscoveryItem = typeof VcsDiscoveryItem.Type;\n\nexport const SourceControlProviderDiscoveryItem = Schema.Struct({\n  kind: SourceControlProviderKind,\n  ...SourceControlDiscoverySharedFields,\n  auth: SourceControlProviderAuth,\n});\nexport type SourceControlProviderDiscoveryItem = typeof SourceControlProviderDiscoveryItem.Type;\n\nexport const SourceControlDiscoveryResult = Schema.Struct({\n  versionControlSystems: Schema.Array(VcsDiscoveryItem),\n  sourceControlProviders: Schema.Array(SourceControlProviderDiscoveryItem),\n});\nexport type SourceControlDiscoveryResult = typeof SourceControlDiscoveryResult.Type;\n\nexport class SourceControlProviderError extends Schema.TaggedErrorClass<SourceControlProviderError>()(\n  \"SourceControlProviderError\",\n  {\n    provider: SourceControlProviderKind,\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Source control provider ${this.provider} failed in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport class SourceControlRepositoryError extends Schema.TaggedErrorClass<SourceControlRepositoryError>()(\n  \"SourceControlRepositoryError\",\n  {\n    provider: SourceControlProviderKind,\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Source control repository operation ${this.operation} failed for ${this.provider}: ${this.detail}`;\n  }\n}\n","import * as Schema from \"effect/Schema\";\nimport { NonNegativeInt, PositiveInt, ThreadId, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\nimport { SourceControlProviderError, SourceControlProviderInfo } from \"./sourceControl.ts\";\nimport { VcsDriverKind } from \"./vcs.ts\";\n\nconst TrimmedNonEmptyStringSchema = TrimmedNonEmptyString;\nconst GIT_LIST_BRANCHES_MAX_LIMIT = 200;\n\n// Domain Types\n\nexport const GitStackedAction = Schema.Literals([\n  \"commit\",\n  \"push\",\n  \"create_pr\",\n  \"commit_push\",\n  \"commit_push_pr\",\n]);\nexport type GitStackedAction = typeof GitStackedAction.Type;\nexport const VcsWorkingTreeDiffTarget = Schema.Literals([\"unstaged\", \"staged\", \"all\"]);\nexport type VcsWorkingTreeDiffTarget = typeof VcsWorkingTreeDiffTarget.Type;\nexport const GenerateCommitMessageTarget = Schema.Literals([\"commit\", \"staged\"]);\nexport type GenerateCommitMessageTarget = typeof GenerateCommitMessageTarget.Type;\nexport const GitActionProgressPhase = Schema.Literals([\"branch\", \"commit\", \"push\", \"pr\"]);\nexport type GitActionProgressPhase = typeof GitActionProgressPhase.Type;\nexport const GitActionProgressKind = Schema.Literals([\n  \"action_started\",\n  \"phase_started\",\n  \"hook_started\",\n  \"hook_output\",\n  \"hook_finished\",\n  \"action_finished\",\n  \"action_failed\",\n]);\nexport type GitActionProgressKind = typeof GitActionProgressKind.Type;\nexport const GitActionProgressStream = Schema.Literals([\"stdout\", \"stderr\"]);\nexport type GitActionProgressStream = typeof GitActionProgressStream.Type;\nconst GitCommitStepStatus = Schema.Literals([\n  \"created\",\n  \"skipped_no_changes\",\n  \"skipped_not_requested\",\n]);\nconst GitPushStepStatus = Schema.Literals([\n  \"pushed\",\n  \"skipped_not_requested\",\n  \"skipped_up_to_date\",\n]);\nconst GitBranchStepStatus = Schema.Literals([\"created\", \"skipped_not_requested\"]);\nconst GitPrStepStatus = Schema.Literals([\"created\", \"opened_existing\", \"skipped_not_requested\"]);\nconst VcsStatusChangeRequestState = Schema.Literals([\"open\", \"closed\", \"merged\"]);\nconst GitPullRequestReference = TrimmedNonEmptyStringSchema;\nconst GitPullRequestState = Schema.Literals([\"open\", \"closed\", \"merged\"]);\nconst GitPreparePullRequestThreadMode = Schema.Literals([\"local\", \"worktree\"]);\nexport const GitRunStackedActionToastRunAction = Schema.Struct({\n  kind: GitStackedAction,\n});\nexport type GitRunStackedActionToastRunAction = typeof GitRunStackedActionToastRunAction.Type;\nconst GitRunStackedActionToastCta = Schema.Union([\n  Schema.Struct({\n    kind: Schema.Literal(\"none\"),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"open_pr\"),\n    label: TrimmedNonEmptyStringSchema,\n    url: Schema.String,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"run_action\"),\n    label: TrimmedNonEmptyStringSchema,\n    action: GitRunStackedActionToastRunAction,\n  }),\n]);\nexport type GitRunStackedActionToastCta = typeof GitRunStackedActionToastCta.Type;\nconst GitRunStackedActionToast = Schema.Struct({\n  title: TrimmedNonEmptyStringSchema,\n  description: Schema.optional(TrimmedNonEmptyStringSchema),\n  cta: GitRunStackedActionToastCta,\n});\nexport type GitRunStackedActionToast = typeof GitRunStackedActionToast.Type;\n\nexport const VcsRef = Schema.Struct({\n  name: TrimmedNonEmptyStringSchema,\n  isRemote: Schema.optional(Schema.Boolean),\n  remoteName: Schema.optional(TrimmedNonEmptyStringSchema),\n  current: Schema.Boolean,\n  isDefault: Schema.Boolean,\n  worktreePath: TrimmedNonEmptyStringSchema.pipe(Schema.NullOr),\n});\nexport type VcsRef = typeof VcsRef.Type;\n\nexport const VcsWorkingTreeFileStatus = Schema.Literals([\n  \"modified\",\n  \"added\",\n  \"deleted\",\n  \"renamed\",\n  \"copied\",\n  \"untracked\",\n  \"conflicted\",\n]);\nexport type VcsWorkingTreeFileStatus = typeof VcsWorkingTreeFileStatus.Type;\n\nconst VcsWorktree = Schema.Struct({\n  path: TrimmedNonEmptyStringSchema,\n  refName: TrimmedNonEmptyStringSchema,\n});\nconst GitResolvedPullRequest = Schema.Struct({\n  number: PositiveInt,\n  title: TrimmedNonEmptyStringSchema,\n  url: Schema.String,\n  baseBranch: TrimmedNonEmptyStringSchema,\n  headBranch: TrimmedNonEmptyStringSchema,\n  state: GitPullRequestState,\n});\nexport type GitResolvedPullRequest = typeof GitResolvedPullRequest.Type;\n\n// RPC Inputs\n\nexport const VcsStatusInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n});\nexport type VcsStatusInput = typeof VcsStatusInput.Type;\n\nexport const VcsPullInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n});\nexport type VcsPullInput = typeof VcsPullInput.Type;\n\nexport const VcsWorkingTreeDiffInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  target: VcsWorkingTreeDiffTarget,\n  ignoreWhitespace: Schema.optional(Schema.Boolean),\n  filePaths: Schema.optional(\n    Schema.Array(TrimmedNonEmptyStringSchema).check(Schema.isMinLength(1)),\n  ),\n});\nexport type VcsWorkingTreeDiffInput = typeof VcsWorkingTreeDiffInput.Type;\n\nexport const GitRunStackedActionInput = Schema.Struct({\n  actionId: TrimmedNonEmptyStringSchema,\n  cwd: TrimmedNonEmptyStringSchema,\n  action: GitStackedAction,\n  commitMessage: Schema.optional(TrimmedNonEmptyStringSchema.check(Schema.isMaxLength(10_000))),\n  featureBranch: Schema.optional(Schema.Boolean),\n  filePaths: Schema.optional(\n    Schema.Array(TrimmedNonEmptyStringSchema).check(Schema.isMinLength(1)),\n  ),\n});\nexport type GitRunStackedActionInput = typeof GitRunStackedActionInput.Type;\n\nexport const GenerateCommitMessageInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  filePaths: Schema.optional(\n    Schema.Array(TrimmedNonEmptyStringSchema).check(Schema.isMinLength(1)),\n  ),\n  target: Schema.optional(GenerateCommitMessageTarget),\n});\nexport type GenerateCommitMessageInput = typeof GenerateCommitMessageInput.Type;\n\nexport const VcsStageFilesInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  filePaths: Schema.Array(TrimmedNonEmptyStringSchema).check(Schema.isMinLength(1)),\n});\nexport type VcsStageFilesInput = typeof VcsStageFilesInput.Type;\n\nexport const VcsUnstageFilesInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  filePaths: Schema.Array(TrimmedNonEmptyStringSchema).check(Schema.isMinLength(1)),\n});\nexport type VcsUnstageFilesInput = typeof VcsUnstageFilesInput.Type;\n\nexport const VcsRevertUnstagedFilesInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  filePaths: Schema.Array(TrimmedNonEmptyStringSchema).check(Schema.isMinLength(1)),\n});\nexport type VcsRevertUnstagedFilesInput = typeof VcsRevertUnstagedFilesInput.Type;\n\nexport const VcsListRefsInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  query: Schema.optional(TrimmedNonEmptyStringSchema.check(Schema.isMaxLength(256))),\n  cursor: Schema.optional(NonNegativeInt),\n  limit: Schema.optional(\n    PositiveInt.check(Schema.isLessThanOrEqualTo(GIT_LIST_BRANCHES_MAX_LIMIT)),\n  ),\n});\nexport type VcsListRefsInput = typeof VcsListRefsInput.Type;\n\nexport const VcsCreateWorktreeInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  refName: TrimmedNonEmptyStringSchema,\n  newRefName: Schema.optional(TrimmedNonEmptyStringSchema),\n  path: Schema.NullOr(TrimmedNonEmptyStringSchema),\n});\nexport type VcsCreateWorktreeInput = typeof VcsCreateWorktreeInput.Type;\n\nexport const GitPullRequestRefInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  reference: GitPullRequestReference,\n});\nexport type GitPullRequestRefInput = typeof GitPullRequestRefInput.Type;\n\nexport const GitPreparePullRequestThreadInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  reference: GitPullRequestReference,\n  mode: GitPreparePullRequestThreadMode,\n  threadId: Schema.optional(ThreadId),\n});\nexport type GitPreparePullRequestThreadInput = typeof GitPreparePullRequestThreadInput.Type;\n\nexport const VcsRemoveWorktreeInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  path: TrimmedNonEmptyStringSchema,\n  force: Schema.optional(Schema.Boolean),\n});\nexport type VcsRemoveWorktreeInput = typeof VcsRemoveWorktreeInput.Type;\n\nexport const VcsCreateRefInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  refName: TrimmedNonEmptyStringSchema,\n  switchRef: Schema.optional(Schema.Boolean),\n});\nexport type VcsCreateRefInput = typeof VcsCreateRefInput.Type;\n\nexport const VcsCreateRefResult = Schema.Struct({\n  refName: TrimmedNonEmptyStringSchema,\n});\nexport type VcsCreateRefResult = typeof VcsCreateRefResult.Type;\n\nexport const VcsSwitchRefInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  refName: TrimmedNonEmptyStringSchema,\n});\nexport type VcsSwitchRefInput = typeof VcsSwitchRefInput.Type;\n\nexport const VcsInitInput = Schema.Struct({\n  cwd: TrimmedNonEmptyStringSchema,\n  kind: Schema.optional(VcsDriverKind),\n});\nexport type VcsInitInput = typeof VcsInitInput.Type;\n\n// RPC Results\n\nconst VcsStatusChangeRequest = Schema.Struct({\n  number: PositiveInt,\n  title: TrimmedNonEmptyStringSchema,\n  url: Schema.String,\n  baseRef: TrimmedNonEmptyStringSchema,\n  headRef: TrimmedNonEmptyStringSchema,\n  state: VcsStatusChangeRequestState,\n});\n\nconst VcsWorkingTreeFile = Schema.Struct({\n  path: TrimmedNonEmptyStringSchema,\n  status: VcsWorkingTreeFileStatus,\n  insertions: NonNegativeInt,\n  deletions: NonNegativeInt,\n});\n\nexport const VcsWorkingTreeChangeSet = Schema.Struct({\n  files: Schema.Array(VcsWorkingTreeFile),\n  insertions: NonNegativeInt,\n  deletions: NonNegativeInt,\n});\nexport type VcsWorkingTreeChangeSet = typeof VcsWorkingTreeChangeSet.Type;\n\nconst VcsStatusLocalShape = {\n  isRepo: Schema.Boolean,\n  sourceControlProvider: Schema.optional(SourceControlProviderInfo),\n  hasPrimaryRemote: Schema.Boolean,\n  isDefaultRef: Schema.Boolean,\n  refName: Schema.NullOr(TrimmedNonEmptyStringSchema),\n  hasWorkingTreeChanges: Schema.Boolean,\n  workingTree: Schema.Struct({\n    files: Schema.Array(VcsWorkingTreeFile),\n    insertions: NonNegativeInt,\n    deletions: NonNegativeInt,\n    staged: VcsWorkingTreeChangeSet,\n    unstaged: VcsWorkingTreeChangeSet,\n  }),\n};\n\nconst VcsStatusRemoteShape = {\n  hasUpstream: Schema.Boolean,\n  aheadCount: NonNegativeInt,\n  behindCount: NonNegativeInt,\n  aheadOfDefaultCount: Schema.optional(NonNegativeInt),\n  pr: Schema.NullOr(VcsStatusChangeRequest),\n};\n\nexport const VcsStatusLocalResult = Schema.Struct(VcsStatusLocalShape);\nexport type VcsStatusLocalResult = typeof VcsStatusLocalResult.Type;\n\nexport const VcsStatusRemoteResult = Schema.Struct(VcsStatusRemoteShape);\nexport type VcsStatusRemoteResult = typeof VcsStatusRemoteResult.Type;\n\nexport const VcsStatusResult = Schema.Struct({\n  ...VcsStatusLocalShape,\n  ...VcsStatusRemoteShape,\n});\nexport type VcsStatusResult = typeof VcsStatusResult.Type;\n\nexport const VcsWorkingTreeDiffResult = Schema.Struct({\n  diff: Schema.String,\n});\nexport type VcsWorkingTreeDiffResult = typeof VcsWorkingTreeDiffResult.Type;\n\nexport const VcsStatusStreamEvent = Schema.Union([\n  Schema.TaggedStruct(\"snapshot\", {\n    local: VcsStatusLocalResult,\n    remote: Schema.NullOr(VcsStatusRemoteResult),\n  }),\n  Schema.TaggedStruct(\"localUpdated\", {\n    local: VcsStatusLocalResult,\n  }),\n  Schema.TaggedStruct(\"remoteUpdated\", {\n    remote: Schema.NullOr(VcsStatusRemoteResult),\n  }),\n]);\nexport type VcsStatusStreamEvent = typeof VcsStatusStreamEvent.Type;\n\nexport const VcsListRefsResult = Schema.Struct({\n  refs: Schema.Array(VcsRef),\n  isRepo: Schema.Boolean,\n  hasPrimaryRemote: Schema.Boolean,\n  nextCursor: NonNegativeInt.pipe(Schema.NullOr),\n  totalCount: NonNegativeInt,\n});\nexport type VcsListRefsResult = typeof VcsListRefsResult.Type;\n\nexport const VcsCreateWorktreeResult = Schema.Struct({\n  worktree: VcsWorktree,\n});\nexport type VcsCreateWorktreeResult = typeof VcsCreateWorktreeResult.Type;\n\nexport const GitResolvePullRequestResult = Schema.Struct({\n  pullRequest: GitResolvedPullRequest,\n});\nexport type GitResolvePullRequestResult = typeof GitResolvePullRequestResult.Type;\n\nexport const GitPreparePullRequestThreadResult = Schema.Struct({\n  pullRequest: GitResolvedPullRequest,\n  branch: TrimmedNonEmptyStringSchema,\n  worktreePath: TrimmedNonEmptyStringSchema.pipe(Schema.NullOr),\n});\nexport type GitPreparePullRequestThreadResult = typeof GitPreparePullRequestThreadResult.Type;\n\nexport const VcsSwitchRefResult = Schema.Struct({\n  refName: Schema.NullOr(TrimmedNonEmptyStringSchema),\n});\nexport type VcsSwitchRefResult = typeof VcsSwitchRefResult.Type;\n\nexport const GitRunStackedActionResult = Schema.Struct({\n  action: GitStackedAction,\n  branch: Schema.Struct({\n    status: GitBranchStepStatus,\n    name: Schema.optional(TrimmedNonEmptyStringSchema),\n  }),\n  commit: Schema.Struct({\n    status: GitCommitStepStatus,\n    commitSha: Schema.optional(TrimmedNonEmptyStringSchema),\n    subject: Schema.optional(TrimmedNonEmptyStringSchema),\n  }),\n  push: Schema.Struct({\n    status: GitPushStepStatus,\n    branch: Schema.optional(TrimmedNonEmptyStringSchema),\n    upstreamBranch: Schema.optional(TrimmedNonEmptyStringSchema),\n    setUpstream: Schema.optional(Schema.Boolean),\n  }),\n  pr: Schema.Struct({\n    status: GitPrStepStatus,\n    url: Schema.optional(Schema.String),\n    number: Schema.optional(PositiveInt),\n    baseBranch: Schema.optional(TrimmedNonEmptyStringSchema),\n    headBranch: Schema.optional(TrimmedNonEmptyStringSchema),\n    title: Schema.optional(TrimmedNonEmptyStringSchema),\n  }),\n  toast: GitRunStackedActionToast,\n});\nexport type GitRunStackedActionResult = typeof GitRunStackedActionResult.Type;\n\nexport const GenerateCommitMessageResult = Schema.Struct({\n  subject: TrimmedNonEmptyStringSchema,\n  body: Schema.String,\n  commitMessage: TrimmedNonEmptyStringSchema,\n});\nexport type GenerateCommitMessageResult = typeof GenerateCommitMessageResult.Type;\n\nexport const VcsPullResult = Schema.Struct({\n  status: Schema.Literals([\"pulled\", \"skipped_up_to_date\"]),\n  refName: TrimmedNonEmptyStringSchema,\n  upstreamRef: TrimmedNonEmptyStringSchema.pipe(Schema.NullOr),\n});\nexport type VcsPullResult = typeof VcsPullResult.Type;\n\n// RPC / domain errors\nexport class GitCommandError extends Schema.TaggedErrorClass<GitCommandError>()(\"GitCommandError\", {\n  operation: Schema.String,\n  command: Schema.String,\n  cwd: Schema.String,\n  detail: Schema.String,\n  cause: Schema.optional(Schema.Defect()),\n}) {\n  override get message(): string {\n    return `Git command failed in ${this.operation}: ${this.command} (${this.cwd}) - ${this.detail}`;\n  }\n}\n\nexport class TextGenerationError extends Schema.TaggedErrorClass<TextGenerationError>()(\n  \"TextGenerationError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Text generation failed in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport class GitManagerError extends Schema.TaggedErrorClass<GitManagerError>()(\"GitManagerError\", {\n  operation: Schema.String,\n  detail: Schema.String,\n  cause: Schema.optional(Schema.Defect()),\n}) {\n  override get message(): string {\n    return `Git manager failed in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport const GitManagerServiceError = Schema.Union([\n  GitManagerError,\n  GitCommandError,\n  SourceControlProviderError,\n  TextGenerationError,\n]);\nexport type GitManagerServiceError = typeof GitManagerServiceError.Type;\n\nconst GitActionProgressBase = Schema.Struct({\n  actionId: TrimmedNonEmptyStringSchema,\n  cwd: TrimmedNonEmptyStringSchema,\n  action: GitStackedAction,\n});\n\nconst GitActionStartedEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"action_started\"),\n  phases: Schema.Array(GitActionProgressPhase),\n});\nconst GitActionPhaseStartedEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"phase_started\"),\n  phase: GitActionProgressPhase,\n  label: TrimmedNonEmptyStringSchema,\n});\nconst GitActionHookStartedEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"hook_started\"),\n  hookName: TrimmedNonEmptyStringSchema,\n});\nconst GitActionHookOutputEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"hook_output\"),\n  hookName: Schema.NullOr(TrimmedNonEmptyStringSchema),\n  stream: GitActionProgressStream,\n  text: TrimmedNonEmptyStringSchema,\n});\nconst GitActionHookFinishedEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"hook_finished\"),\n  hookName: TrimmedNonEmptyStringSchema,\n  exitCode: Schema.NullOr(Schema.Int),\n  durationMs: Schema.NullOr(NonNegativeInt),\n});\nconst GitActionFinishedEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"action_finished\"),\n  result: GitRunStackedActionResult,\n});\nconst GitActionFailedEvent = Schema.Struct({\n  ...GitActionProgressBase.fields,\n  kind: Schema.Literal(\"action_failed\"),\n  phase: Schema.NullOr(GitActionProgressPhase),\n  message: TrimmedNonEmptyStringSchema,\n});\n\nexport const GitActionProgressEvent = Schema.Union([\n  GitActionStartedEvent,\n  GitActionPhaseStartedEvent,\n  GitActionHookStartedEvent,\n  GitActionHookOutputEvent,\n  GitActionHookFinishedEvent,\n  GitActionFinishedEvent,\n  GitActionFailedEvent,\n]);\nexport type GitActionProgressEvent = typeof GitActionProgressEvent.Type;\n","import * as Schema from \"effect/Schema\";\n\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\n/**\n * Schemas for the VS Code theme provider. The app maps VS Code themes onto its\n * design tokens (see apps/web/src/themeMapping.ts); these contracts cover the\n * server-side provider that searches and imports themes from the Open VSX\n * registry (https://open-vsx.org).\n */\n\nexport const ThemeColorMode = Schema.Literals([\"light\", \"dark\"]);\nexport type ThemeColorMode = typeof ThemeColorMode.Type;\n\nexport const ThemeTokenColor = Schema.Struct({\n  scope: Schema.optional(Schema.Union([Schema.String, Schema.Array(Schema.String)])),\n  settings: Schema.Struct({\n    foreground: Schema.optional(Schema.String),\n  }),\n});\nexport type ThemeTokenColor = typeof ThemeTokenColor.Type;\n\n/** A single theme contributed by an extension, normalized for the client. */\nexport const ImportedTheme = Schema.Struct({\n  /** Synthetic stable id: `<namespace>.<name>/<theme label>`. */\n  id: TrimmedNonEmptyString,\n  label: TrimmedNonEmptyString,\n  type: ThemeColorMode,\n  /** Workbench color map (`editor.background` -> `#rrggbb[aa]`). */\n  colors: Schema.Record(Schema.String, Schema.String),\n  /** TextMate token color rules used for previews when workbench colors are sparse. */\n  tokenColors: Schema.optional(Schema.Array(ThemeTokenColor)),\n});\nexport type ImportedTheme = typeof ImportedTheme.Type;\n\n// ── Search ────────────────────────────────────────────────────\n\nexport const ThemeSortBy = Schema.Literals([\"relevance\", \"downloadCount\"]);\nexport type ThemeSortBy = typeof ThemeSortBy.Type;\n\nexport const ThemeSearchInput = Schema.Struct({\n  query: Schema.optional(Schema.String),\n  /** Page size; the server clamps this to a sane maximum. */\n  size: Schema.optional(Schema.Int),\n  /** Zero-based Open VSX result offset for category browsing. */\n  offset: Schema.optional(Schema.Int),\n  /** Overrides the default Open VSX sort order (relevance for queries, downloads otherwise). */\n  sortBy: Schema.optional(ThemeSortBy),\n});\nexport type ThemeSearchInput = typeof ThemeSearchInput.Type;\n\nexport const ThemeSearchItem = Schema.Struct({\n  namespace: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  version: TrimmedNonEmptyString,\n  displayName: TrimmedNonEmptyString,\n  description: Schema.optional(Schema.String),\n  downloadCount: Schema.optional(Schema.Int),\n});\nexport type ThemeSearchItem = typeof ThemeSearchItem.Type;\n\nexport const ThemeSearchResult = Schema.Struct({\n  items: Schema.Array(ThemeSearchItem),\n  offset: Schema.Int,\n  size: Schema.Int,\n  totalSize: Schema.Int,\n});\nexport type ThemeSearchResult = typeof ThemeSearchResult.Type;\n\n// ── Preview / Import ───────────────────────────────────────────\n\nexport const ThemeImportInput = Schema.Struct({\n  namespace: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  /** Defaults to the latest published version when omitted. */\n  version: Schema.optional(TrimmedNonEmptyString),\n});\nexport type ThemeImportInput = typeof ThemeImportInput.Type;\n\n/** A normalized contributed theme returned by preview and import operations. */\nexport const ThemePreviewTheme = ImportedTheme;\nexport type ThemePreviewTheme = typeof ThemePreviewTheme.Type;\n\nexport const ThemePreviewResult = Schema.Struct({\n  namespace: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  version: TrimmedNonEmptyString,\n  themes: Schema.Array(ThemePreviewTheme),\n});\nexport type ThemePreviewResult = typeof ThemePreviewResult.Type;\n\nexport const ThemeImportResult = Schema.Struct({\n  namespace: TrimmedNonEmptyString,\n  name: TrimmedNonEmptyString,\n  version: TrimmedNonEmptyString,\n  /** An extension may contribute several themes (e.g. light + dark variants). */\n  themes: Schema.Array(ImportedTheme),\n});\nexport type ThemeImportResult = typeof ThemeImportResult.Type;\n\n// ── Errors ────────────────────────────────────────────────────\n\nexport class ThemeProviderError extends Schema.TaggedErrorClass<ThemeProviderError>()(\n  \"ThemeProviderError\",\n  {\n    operation: Schema.Literals([\"search\", \"preview\", \"import\"]),\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Theme provider failed in ${this.operation}: ${this.detail}`;\n  }\n}\n","import * as Schema from \"effect/Schema\";\nimport { NonNegativeInt, PositiveInt, TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nconst PROJECT_SEARCH_ENTRIES_MAX_LIMIT = 200;\nconst PROJECT_LIST_DIRECTORY_ENTRIES_MAX_LIMIT = 500;\nconst PROJECT_LIST_DIRECTORY_PATH_MAX_LENGTH = 512;\nconst PROJECT_WRITE_FILE_PATH_MAX_LENGTH = 512;\nconst PROJECT_READ_FILE_PATH_MAX_LENGTH = 512;\nconst PROJECT_DELETE_ENTRY_PATH_MAX_LENGTH = 512;\n\nexport const ProjectSearchEntriesInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  query: TrimmedNonEmptyString.check(Schema.isMaxLength(256)),\n  limit: PositiveInt.check(Schema.isLessThanOrEqualTo(PROJECT_SEARCH_ENTRIES_MAX_LIMIT)),\n});\nexport type ProjectSearchEntriesInput = typeof ProjectSearchEntriesInput.Type;\n\nconst ProjectEntryKind = Schema.Literals([\"file\", \"directory\"]);\n\nexport const ProjectEntry = Schema.Struct({\n  path: TrimmedNonEmptyString,\n  kind: ProjectEntryKind,\n  parentPath: Schema.optional(TrimmedNonEmptyString),\n  ignored: Schema.optional(Schema.Boolean),\n});\nexport type ProjectEntry = typeof ProjectEntry.Type;\n\nexport const ProjectSearchEntriesResult = Schema.Struct({\n  entries: Schema.Array(ProjectEntry),\n  truncated: Schema.Boolean,\n});\nexport type ProjectSearchEntriesResult = typeof ProjectSearchEntriesResult.Type;\n\nexport class ProjectSearchEntriesError extends Schema.TaggedErrorClass<ProjectSearchEntriesError>()(\n  \"ProjectSearchEntriesError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport const ProjectListDirectoryEntriesInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  directoryPath: Schema.optional(\n    TrimmedNonEmptyString.check(Schema.isMaxLength(PROJECT_LIST_DIRECTORY_PATH_MAX_LENGTH)),\n  ),\n  limit: PositiveInt.check(Schema.isLessThanOrEqualTo(PROJECT_LIST_DIRECTORY_ENTRIES_MAX_LIMIT)),\n});\nexport type ProjectListDirectoryEntriesInput = typeof ProjectListDirectoryEntriesInput.Type;\n\nexport const ProjectListDirectoryEntriesResult = Schema.Struct({\n  entries: Schema.Array(ProjectEntry),\n  truncated: Schema.Boolean,\n});\nexport type ProjectListDirectoryEntriesResult = typeof ProjectListDirectoryEntriesResult.Type;\n\nexport class ProjectListDirectoryEntriesError extends Schema.TaggedErrorClass<ProjectListDirectoryEntriesError>()(\n  \"ProjectListDirectoryEntriesError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport const ProjectReadFileInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  relativePath: TrimmedNonEmptyString.check(Schema.isMaxLength(PROJECT_READ_FILE_PATH_MAX_LENGTH)),\n});\nexport type ProjectReadFileInput = typeof ProjectReadFileInput.Type;\n\nexport const ProjectReadFileResult = Schema.Struct({\n  relativePath: TrimmedNonEmptyString,\n  contents: Schema.String,\n  truncated: Schema.Boolean,\n  sizeBytes: NonNegativeInt,\n});\nexport type ProjectReadFileResult = typeof ProjectReadFileResult.Type;\n\nexport class ProjectReadFileError extends Schema.TaggedErrorClass<ProjectReadFileError>()(\n  \"ProjectReadFileError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport const ProjectWriteFileInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  relativePath: TrimmedNonEmptyString.check(Schema.isMaxLength(PROJECT_WRITE_FILE_PATH_MAX_LENGTH)),\n  contents: Schema.String,\n});\nexport type ProjectWriteFileInput = typeof ProjectWriteFileInput.Type;\n\nexport const ProjectWriteFileResult = Schema.Struct({\n  relativePath: TrimmedNonEmptyString,\n});\nexport type ProjectWriteFileResult = typeof ProjectWriteFileResult.Type;\n\nexport class ProjectWriteFileError extends Schema.TaggedErrorClass<ProjectWriteFileError>()(\n  \"ProjectWriteFileError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport const ProjectDeleteEntryInput = Schema.Struct({\n  cwd: TrimmedNonEmptyString,\n  relativePath: TrimmedNonEmptyString.check(\n    Schema.isMaxLength(PROJECT_DELETE_ENTRY_PATH_MAX_LENGTH),\n  ),\n});\nexport type ProjectDeleteEntryInput = typeof ProjectDeleteEntryInput.Type;\n\nexport const ProjectDeleteEntryResult = Schema.Struct({\n  relativePath: TrimmedNonEmptyString,\n});\nexport type ProjectDeleteEntryResult = typeof ProjectDeleteEntryResult.Type;\n\nexport class ProjectDeleteEntryError extends Schema.TaggedErrorClass<ProjectDeleteEntryError>()(\n  \"ProjectDeleteEntryError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n","import * as Schema from \"effect/Schema\";\nimport { TrimmedNonEmptyString } from \"./baseSchemas.ts\";\n\nconst FILESYSTEM_PATH_MAX_LENGTH = 512;\n\nexport const FilesystemBrowseInput = Schema.Struct({\n  partialPath: TrimmedNonEmptyString.check(Schema.isMaxLength(FILESYSTEM_PATH_MAX_LENGTH)),\n  cwd: Schema.optional(TrimmedNonEmptyString.check(Schema.isMaxLength(FILESYSTEM_PATH_MAX_LENGTH))),\n});\nexport type FilesystemBrowseInput = typeof FilesystemBrowseInput.Type;\n\nexport const FilesystemBrowseEntry = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  fullPath: TrimmedNonEmptyString,\n});\nexport type FilesystemBrowseEntry = typeof FilesystemBrowseEntry.Type;\n\nexport const FilesystemBrowseResult = Schema.Struct({\n  parentPath: TrimmedNonEmptyString,\n  entries: Schema.Array(FilesystemBrowseEntry),\n});\nexport type FilesystemBrowseResult = typeof FilesystemBrowseResult.Type;\n\nexport class FilesystemBrowseError extends Schema.TaggedErrorClass<FilesystemBrowseError>()(\n  \"FilesystemBrowseError\",\n  {\n    message: TrimmedNonEmptyString,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n","import * as Schema from \"effect/Schema\";\nimport * as Rpc from \"effect/unstable/rpc/Rpc\";\nimport * as RpcGroup from \"effect/unstable/rpc/RpcGroup\";\n\nimport { ExternalLauncherError, LaunchEditorInput } from \"./editor.ts\";\nimport { AuthAccessStreamEvent } from \"./auth.ts\";\nimport {\n  FilesystemBrowseInput,\n  FilesystemBrowseResult,\n  FilesystemBrowseError,\n} from \"./filesystem.ts\";\nimport {\n  GitActionProgressEvent,\n  GenerateCommitMessageInput,\n  GenerateCommitMessageResult,\n  VcsSwitchRefInput,\n  VcsSwitchRefResult,\n  GitCommandError,\n  VcsCreateRefInput,\n  VcsCreateRefResult,\n  VcsCreateWorktreeInput,\n  VcsCreateWorktreeResult,\n  VcsInitInput,\n  VcsListRefsInput,\n  VcsListRefsResult,\n  GitManagerServiceError,\n  GitPreparePullRequestThreadInput,\n  GitPreparePullRequestThreadResult,\n  VcsPullInput,\n  GitPullRequestRefInput,\n  VcsPullResult,\n  VcsRemoveWorktreeInput,\n  GitResolvePullRequestResult,\n  GitRunStackedActionInput,\n  VcsWorkingTreeDiffInput,\n  VcsWorkingTreeDiffResult,\n  VcsStatusInput,\n  VcsStatusLocalResult,\n  VcsStatusResult,\n  VcsStatusStreamEvent,\n  VcsRevertUnstagedFilesInput,\n  VcsStageFilesInput,\n  VcsUnstageFilesInput,\n} from \"./git.ts\";\nimport { KeybindingsConfigError } from \"./keybindings.ts\";\nimport {\n  ClientOrchestrationCommand,\n  ORCHESTRATION_WS_METHODS,\n  OrchestrationDispatchCommandError,\n  OrchestrationGetFullThreadDiffError,\n  OrchestrationGetFullThreadDiffInput,\n  OrchestrationGetSnapshotError,\n  OrchestrationGetTurnDiffError,\n  OrchestrationGetTurnDiffInput,\n  OrchestrationReplayEventsError,\n  OrchestrationReplayEventsInput,\n  OrchestrationRpcSchemas,\n} from \"./orchestration.ts\";\nimport { ProviderDriverKind, ProviderInstanceId } from \"./providerInstance.ts\";\nimport {\n  ProjectSearchEntriesError,\n  ProjectSearchEntriesInput,\n  ProjectSearchEntriesResult,\n  ProjectListDirectoryEntriesError,\n  ProjectListDirectoryEntriesInput,\n  ProjectListDirectoryEntriesResult,\n  ProjectReadFileError,\n  ProjectReadFileInput,\n  ProjectReadFileResult,\n  ProjectWriteFileError,\n  ProjectWriteFileInput,\n  ProjectWriteFileResult,\n  ProjectDeleteEntryError,\n  ProjectDeleteEntryInput,\n  ProjectDeleteEntryResult,\n} from \"./project.ts\";\nimport {\n  TerminalClearInput,\n  TerminalCloseInput,\n  TerminalError,\n  TerminalEvent,\n  TerminalOpenInput,\n  TerminalResizeInput,\n  TerminalRestartInput,\n  TerminalSnapshotInput,\n  TerminalSessionSnapshot,\n  TerminalWriteInput,\n} from \"./terminal.ts\";\nimport {\n  ServerConfigStreamEvent,\n  ServerConfig,\n  ServerProviderUpdateError,\n  ServerProviderUpdateInput,\n  ServerLifecycleStreamEvent,\n  ServerRemoveKeybindingInput,\n  ServerRemoveKeybindingResult,\n  ServerProviderUpdatedPayload,\n  ServerTraceDiagnosticsResult,\n  ServerProcessDiagnosticsResult,\n  ServerProcessResourceHistoryInput,\n  ServerProcessResourceHistoryResult,\n  ServerProbeDevServerUrlInput,\n  ServerProbeDevServerUrlResult,\n  ServerSignalProcessInput,\n  ServerSignalProcessResult,\n  ServerUpsertKeybindingInput,\n  ServerUpsertKeybindingResult,\n} from \"./server.ts\";\nimport {\n  ServerPushConfig,\n  ServerPushNotificationError,\n  ServerPushSendResult,\n  ServerPushSubscriptionStatus,\n  ServerRegisterPushSubscriptionInput,\n  ServerSendTestPushNotificationInput,\n  ServerUnregisterPushSubscriptionInput,\n} from \"./push.ts\";\nimport { ServerSettings, ServerSettingsError, ServerSettingsPatch } from \"./settings.ts\";\nimport {\n  SourceControlCloneRepositoryInput,\n  SourceControlCloneRepositoryResult,\n  SourceControlDiscoveryResult,\n  SourceControlPublishRepositoryInput,\n  SourceControlPublishRepositoryResult,\n  SourceControlRepositoryError,\n  SourceControlRepositoryInfo,\n  SourceControlRepositoryLookupInput,\n} from \"./sourceControl.ts\";\nimport {\n  ThemeImportInput,\n  ThemeImportResult,\n  ThemePreviewResult,\n  ThemeProviderError,\n  ThemeSearchInput,\n  ThemeSearchResult,\n} from \"./theme.ts\";\nimport { VcsError } from \"./vcs.ts\";\n\nexport const WS_METHODS = {\n  // Project registry methods\n  projectsList: \"projects.list\",\n  projectsAdd: \"projects.add\",\n  projectsRemove: \"projects.remove\",\n  projectsSearchEntries: \"projects.searchEntries\",\n  projectsListDirectoryEntries: \"projects.listDirectoryEntries\",\n  projectsReadFile: \"projects.readFile\",\n  projectsWriteFile: \"projects.writeFile\",\n  projectsDeleteEntry: \"projects.deleteEntry\",\n\n  // Shell methods\n  shellOpenInEditor: \"shell.openInEditor\",\n\n  // Filesystem methods\n  filesystemBrowse: \"filesystem.browse\",\n\n  // VCS methods\n  vcsPull: \"vcs.pull\",\n  vcsRefreshStatus: \"vcs.refreshStatus\",\n  vcsStageFiles: \"vcs.stageFiles\",\n  vcsUnstageFiles: \"vcs.unstageFiles\",\n  vcsRevertUnstagedFiles: \"vcs.revertUnstagedFiles\",\n  vcsGetWorkingTreeDiff: \"vcs.getWorkingTreeDiff\",\n  vcsListRefs: \"vcs.listRefs\",\n  vcsCreateWorktree: \"vcs.createWorktree\",\n  vcsRemoveWorktree: \"vcs.removeWorktree\",\n  vcsCreateRef: \"vcs.createRef\",\n  vcsSwitchRef: \"vcs.switchRef\",\n  vcsInit: \"vcs.init\",\n\n  // Git workflow methods\n  gitRunStackedAction: \"git.runStackedAction\",\n  gitGenerateCommitMessage: \"git.generateCommitMessage\",\n  gitResolvePullRequest: \"git.resolvePullRequest\",\n  gitPreparePullRequestThread: \"git.preparePullRequestThread\",\n\n  // Terminal methods\n  terminalOpen: \"terminal.open\",\n  terminalWrite: \"terminal.write\",\n  terminalResize: \"terminal.resize\",\n  terminalClear: \"terminal.clear\",\n  terminalSnapshot: \"terminal.snapshot\",\n  terminalRestart: \"terminal.restart\",\n  terminalClose: \"terminal.close\",\n\n  // Server meta\n  serverGetConfig: \"server.getConfig\",\n  serverRefreshProviders: \"server.refreshProviders\",\n  serverRefreshUsageLimits: \"server.refreshUsageLimits\",\n  serverUpdateProvider: \"server.updateProvider\",\n  serverUpsertKeybinding: \"server.upsertKeybinding\",\n  serverRemoveKeybinding: \"server.removeKeybinding\",\n  serverGetSettings: \"server.getSettings\",\n  serverUpdateSettings: \"server.updateSettings\",\n  serverDiscoverSourceControl: \"server.discoverSourceControl\",\n  serverGetTraceDiagnostics: \"server.getTraceDiagnostics\",\n  serverGetProcessDiagnostics: \"server.getProcessDiagnostics\",\n  serverGetProcessResourceHistory: \"server.getProcessResourceHistory\",\n  serverSignalProcess: \"server.signalProcess\",\n  serverProbeDevServerUrl: \"server.probeDevServerUrl\",\n  serverGetPushConfig: \"server.getPushConfig\",\n  serverRegisterPushSubscription: \"server.registerPushSubscription\",\n  serverUnregisterPushSubscription: \"server.unregisterPushSubscription\",\n  serverSendTestPushNotification: \"server.sendTestPushNotification\",\n\n  // Theme provider methods\n  themesSearch: \"themes.search\",\n  themesPreview: \"themes.preview\",\n  themesImport: \"themes.import\",\n\n  // Source control methods\n  sourceControlLookupRepository: \"sourceControl.lookupRepository\",\n  sourceControlCloneRepository: \"sourceControl.cloneRepository\",\n  sourceControlPublishRepository: \"sourceControl.publishRepository\",\n\n  // Streaming subscriptions\n  subscribeVcsStatus: \"subscribeVcsStatus\",\n  subscribeTerminalEvents: \"subscribeTerminalEvents\",\n  subscribeServerConfig: \"subscribeServerConfig\",\n  subscribeServerLifecycle: \"subscribeServerLifecycle\",\n  subscribeAuthAccess: \"subscribeAuthAccess\",\n} as const;\n\nexport const WsServerUpsertKeybindingRpc = Rpc.make(WS_METHODS.serverUpsertKeybinding, {\n  payload: ServerUpsertKeybindingInput,\n  success: ServerUpsertKeybindingResult,\n  error: KeybindingsConfigError,\n});\n\nexport const WsServerRemoveKeybindingRpc = Rpc.make(WS_METHODS.serverRemoveKeybinding, {\n  payload: ServerRemoveKeybindingInput,\n  success: ServerRemoveKeybindingResult,\n  error: KeybindingsConfigError,\n});\n\nexport const WsServerGetConfigRpc = Rpc.make(WS_METHODS.serverGetConfig, {\n  payload: Schema.Struct({}),\n  success: ServerConfig,\n  error: Schema.Union([KeybindingsConfigError, ServerSettingsError]),\n});\n\nexport const WsServerRefreshProvidersRpc = Rpc.make(WS_METHODS.serverRefreshProviders, {\n  payload: Schema.Struct({\n    /**\n     * When supplied, only refresh this specific provider instance. When\n     * omitted, refresh all configured instances — the legacy `refresh()`\n     * behaviour retained for transports that still dispatch untargeted\n     * refreshes.\n     */\n    instanceId: Schema.optional(ProviderInstanceId),\n  }),\n  success: ServerProviderUpdatedPayload,\n});\n\nexport const WsServerRefreshUsageLimitsAccountRateLimit = Schema.Struct({\n  providerInstanceId: ProviderInstanceId,\n  provider: ProviderDriverKind,\n  rateLimits: Schema.Unknown,\n});\n\nexport const WsServerRefreshUsageLimitsRpc = Rpc.make(WS_METHODS.serverRefreshUsageLimits, {\n  payload: Schema.Struct({}),\n  success: Schema.Struct({\n    accountRateLimits: Schema.Array(WsServerRefreshUsageLimitsAccountRateLimit),\n  }),\n});\n\nexport const WsServerUpdateProviderRpc = Rpc.make(WS_METHODS.serverUpdateProvider, {\n  /**\n   * Starts or attaches to a server-owned provider update job. The response is\n   * an acknowledgement with current provider snapshots; terminal update\n   * results are delivered later through provider status updates.\n   */\n  payload: ServerProviderUpdateInput,\n  success: ServerProviderUpdatedPayload,\n  error: ServerProviderUpdateError,\n});\n\nexport const WsServerGetSettingsRpc = Rpc.make(WS_METHODS.serverGetSettings, {\n  payload: Schema.Struct({}),\n  success: ServerSettings,\n  error: ServerSettingsError,\n});\n\nexport const WsServerUpdateSettingsRpc = Rpc.make(WS_METHODS.serverUpdateSettings, {\n  payload: Schema.Struct({ patch: ServerSettingsPatch }),\n  success: ServerSettings,\n  error: ServerSettingsError,\n});\n\nexport const WsServerDiscoverSourceControlRpc = Rpc.make(WS_METHODS.serverDiscoverSourceControl, {\n  payload: Schema.Struct({}),\n  success: SourceControlDiscoveryResult,\n});\n\nexport const WsServerGetTraceDiagnosticsRpc = Rpc.make(WS_METHODS.serverGetTraceDiagnostics, {\n  payload: Schema.Struct({}),\n  success: ServerTraceDiagnosticsResult,\n});\n\nexport const WsServerGetProcessDiagnosticsRpc = Rpc.make(WS_METHODS.serverGetProcessDiagnostics, {\n  payload: Schema.Struct({}),\n  success: ServerProcessDiagnosticsResult,\n});\n\nexport const WsServerGetProcessResourceHistoryRpc = Rpc.make(\n  WS_METHODS.serverGetProcessResourceHistory,\n  {\n    payload: ServerProcessResourceHistoryInput,\n    success: ServerProcessResourceHistoryResult,\n  },\n);\n\nexport const WsServerSignalProcessRpc = Rpc.make(WS_METHODS.serverSignalProcess, {\n  payload: ServerSignalProcessInput,\n  success: ServerSignalProcessResult,\n});\n\nexport const WsServerProbeDevServerUrlRpc = Rpc.make(WS_METHODS.serverProbeDevServerUrl, {\n  payload: ServerProbeDevServerUrlInput,\n  success: ServerProbeDevServerUrlResult,\n});\n\nexport const WsServerGetPushConfigRpc = Rpc.make(WS_METHODS.serverGetPushConfig, {\n  payload: Schema.Struct({}),\n  success: ServerPushConfig,\n  error: ServerPushNotificationError,\n});\n\nexport const WsServerRegisterPushSubscriptionRpc = Rpc.make(\n  WS_METHODS.serverRegisterPushSubscription,\n  {\n    payload: ServerRegisterPushSubscriptionInput,\n    success: ServerPushSubscriptionStatus,\n    error: ServerPushNotificationError,\n  },\n);\n\nexport const WsServerUnregisterPushSubscriptionRpc = Rpc.make(\n  WS_METHODS.serverUnregisterPushSubscription,\n  {\n    payload: ServerUnregisterPushSubscriptionInput,\n    success: ServerPushSubscriptionStatus,\n    error: ServerPushNotificationError,\n  },\n);\n\nexport const WsServerSendTestPushNotificationRpc = Rpc.make(\n  WS_METHODS.serverSendTestPushNotification,\n  {\n    payload: ServerSendTestPushNotificationInput,\n    success: ServerPushSendResult,\n    error: ServerPushNotificationError,\n  },\n);\n\nexport const WsThemesSearchRpc = Rpc.make(WS_METHODS.themesSearch, {\n  payload: ThemeSearchInput,\n  success: ThemeSearchResult,\n  error: ThemeProviderError,\n});\n\nexport const WsThemesPreviewRpc = Rpc.make(WS_METHODS.themesPreview, {\n  payload: ThemeImportInput,\n  success: ThemePreviewResult,\n  error: ThemeProviderError,\n});\n\nexport const WsThemesImportRpc = Rpc.make(WS_METHODS.themesImport, {\n  payload: ThemeImportInput,\n  success: ThemeImportResult,\n  error: ThemeProviderError,\n});\n\nexport const WsSourceControlLookupRepositoryRpc = Rpc.make(\n  WS_METHODS.sourceControlLookupRepository,\n  {\n    payload: SourceControlRepositoryLookupInput,\n    success: SourceControlRepositoryInfo,\n    error: SourceControlRepositoryError,\n  },\n);\n\nexport const WsSourceControlCloneRepositoryRpc = Rpc.make(WS_METHODS.sourceControlCloneRepository, {\n  payload: SourceControlCloneRepositoryInput,\n  success: SourceControlCloneRepositoryResult,\n  error: SourceControlRepositoryError,\n});\n\nexport const WsSourceControlPublishRepositoryRpc = Rpc.make(\n  WS_METHODS.sourceControlPublishRepository,\n  {\n    payload: SourceControlPublishRepositoryInput,\n    success: SourceControlPublishRepositoryResult,\n    error: SourceControlRepositoryError,\n  },\n);\n\nexport const WsProjectsSearchEntriesRpc = Rpc.make(WS_METHODS.projectsSearchEntries, {\n  payload: ProjectSearchEntriesInput,\n  success: ProjectSearchEntriesResult,\n  error: ProjectSearchEntriesError,\n});\n\nexport const WsProjectsListDirectoryEntriesRpc = Rpc.make(WS_METHODS.projectsListDirectoryEntries, {\n  payload: ProjectListDirectoryEntriesInput,\n  success: ProjectListDirectoryEntriesResult,\n  error: ProjectListDirectoryEntriesError,\n});\n\nexport const WsProjectsReadFileRpc = Rpc.make(WS_METHODS.projectsReadFile, {\n  payload: ProjectReadFileInput,\n  success: ProjectReadFileResult,\n  error: ProjectReadFileError,\n});\n\nexport const WsProjectsWriteFileRpc = Rpc.make(WS_METHODS.projectsWriteFile, {\n  payload: ProjectWriteFileInput,\n  success: ProjectWriteFileResult,\n  error: ProjectWriteFileError,\n});\n\nexport const WsProjectsDeleteEntryRpc = Rpc.make(WS_METHODS.projectsDeleteEntry, {\n  payload: ProjectDeleteEntryInput,\n  success: ProjectDeleteEntryResult,\n  error: ProjectDeleteEntryError,\n});\n\nexport const WsShellOpenInEditorRpc = Rpc.make(WS_METHODS.shellOpenInEditor, {\n  payload: LaunchEditorInput,\n  error: ExternalLauncherError,\n});\n\nexport const WsFilesystemBrowseRpc = Rpc.make(WS_METHODS.filesystemBrowse, {\n  payload: FilesystemBrowseInput,\n  success: FilesystemBrowseResult,\n  error: FilesystemBrowseError,\n});\n\nexport const WsSubscribeVcsStatusRpc = Rpc.make(WS_METHODS.subscribeVcsStatus, {\n  payload: VcsStatusInput,\n  success: VcsStatusStreamEvent,\n  error: GitManagerServiceError,\n  stream: true,\n});\n\nexport const WsVcsPullRpc = Rpc.make(WS_METHODS.vcsPull, {\n  payload: VcsPullInput,\n  success: VcsPullResult,\n  error: GitCommandError,\n});\n\nexport const WsVcsRefreshStatusRpc = Rpc.make(WS_METHODS.vcsRefreshStatus, {\n  payload: VcsStatusInput,\n  success: VcsStatusResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsVcsStageFilesRpc = Rpc.make(WS_METHODS.vcsStageFiles, {\n  payload: VcsStageFilesInput,\n  success: VcsStatusLocalResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsVcsUnstageFilesRpc = Rpc.make(WS_METHODS.vcsUnstageFiles, {\n  payload: VcsUnstageFilesInput,\n  success: VcsStatusLocalResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsVcsRevertUnstagedFilesRpc = Rpc.make(WS_METHODS.vcsRevertUnstagedFiles, {\n  payload: VcsRevertUnstagedFilesInput,\n  success: VcsStatusLocalResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsVcsGetWorkingTreeDiffRpc = Rpc.make(WS_METHODS.vcsGetWorkingTreeDiff, {\n  payload: VcsWorkingTreeDiffInput,\n  success: VcsWorkingTreeDiffResult,\n  error: GitCommandError,\n});\n\nexport const WsGitRunStackedActionRpc = Rpc.make(WS_METHODS.gitRunStackedAction, {\n  payload: GitRunStackedActionInput,\n  success: GitActionProgressEvent,\n  error: GitManagerServiceError,\n  stream: true,\n});\n\nexport const WsGitGenerateCommitMessageRpc = Rpc.make(WS_METHODS.gitGenerateCommitMessage, {\n  payload: GenerateCommitMessageInput,\n  success: GenerateCommitMessageResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsGitResolvePullRequestRpc = Rpc.make(WS_METHODS.gitResolvePullRequest, {\n  payload: GitPullRequestRefInput,\n  success: GitResolvePullRequestResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsGitPreparePullRequestThreadRpc = Rpc.make(WS_METHODS.gitPreparePullRequestThread, {\n  payload: GitPreparePullRequestThreadInput,\n  success: GitPreparePullRequestThreadResult,\n  error: GitManagerServiceError,\n});\n\nexport const WsVcsListRefsRpc = Rpc.make(WS_METHODS.vcsListRefs, {\n  payload: VcsListRefsInput,\n  success: VcsListRefsResult,\n  error: GitCommandError,\n});\n\nexport const WsVcsCreateWorktreeRpc = Rpc.make(WS_METHODS.vcsCreateWorktree, {\n  payload: VcsCreateWorktreeInput,\n  success: VcsCreateWorktreeResult,\n  error: GitCommandError,\n});\n\nexport const WsVcsRemoveWorktreeRpc = Rpc.make(WS_METHODS.vcsRemoveWorktree, {\n  payload: VcsRemoveWorktreeInput,\n  error: GitCommandError,\n});\n\nexport const WsVcsCreateRefRpc = Rpc.make(WS_METHODS.vcsCreateRef, {\n  payload: VcsCreateRefInput,\n  success: VcsCreateRefResult,\n  error: GitCommandError,\n});\n\nexport const WsVcsSwitchRefRpc = Rpc.make(WS_METHODS.vcsSwitchRef, {\n  payload: VcsSwitchRefInput,\n  success: VcsSwitchRefResult,\n  error: GitCommandError,\n});\n\nexport const WsVcsInitRpc = Rpc.make(WS_METHODS.vcsInit, {\n  payload: VcsInitInput,\n  error: VcsError,\n});\n\nexport const WsTerminalOpenRpc = Rpc.make(WS_METHODS.terminalOpen, {\n  payload: TerminalOpenInput,\n  success: TerminalSessionSnapshot,\n  error: TerminalError,\n});\n\nexport const WsTerminalWriteRpc = Rpc.make(WS_METHODS.terminalWrite, {\n  payload: TerminalWriteInput,\n  error: TerminalError,\n});\n\nexport const WsTerminalResizeRpc = Rpc.make(WS_METHODS.terminalResize, {\n  payload: TerminalResizeInput,\n  error: TerminalError,\n});\n\nexport const WsTerminalClearRpc = Rpc.make(WS_METHODS.terminalClear, {\n  payload: TerminalClearInput,\n  error: TerminalError,\n});\n\nexport const WsTerminalSnapshotRpc = Rpc.make(WS_METHODS.terminalSnapshot, {\n  payload: TerminalSnapshotInput,\n  success: TerminalSessionSnapshot,\n  error: TerminalError,\n});\n\nexport const WsTerminalRestartRpc = Rpc.make(WS_METHODS.terminalRestart, {\n  payload: TerminalRestartInput,\n  success: TerminalSessionSnapshot,\n  error: TerminalError,\n});\n\nexport const WsTerminalCloseRpc = Rpc.make(WS_METHODS.terminalClose, {\n  payload: TerminalCloseInput,\n  error: TerminalError,\n});\n\nexport const WsOrchestrationDispatchCommandRpc = Rpc.make(\n  ORCHESTRATION_WS_METHODS.dispatchCommand,\n  {\n    payload: ClientOrchestrationCommand,\n    success: OrchestrationRpcSchemas.dispatchCommand.output,\n    error: OrchestrationDispatchCommandError,\n  },\n);\n\nexport const WsOrchestrationGetTurnDiffRpc = Rpc.make(ORCHESTRATION_WS_METHODS.getTurnDiff, {\n  payload: OrchestrationGetTurnDiffInput,\n  success: OrchestrationRpcSchemas.getTurnDiff.output,\n  error: OrchestrationGetTurnDiffError,\n});\n\nexport const WsOrchestrationGetFullThreadDiffRpc = Rpc.make(\n  ORCHESTRATION_WS_METHODS.getFullThreadDiff,\n  {\n    payload: OrchestrationGetFullThreadDiffInput,\n    success: OrchestrationRpcSchemas.getFullThreadDiff.output,\n    error: OrchestrationGetFullThreadDiffError,\n  },\n);\n\nexport const WsOrchestrationReplayEventsRpc = Rpc.make(ORCHESTRATION_WS_METHODS.replayEvents, {\n  payload: OrchestrationReplayEventsInput,\n  success: OrchestrationRpcSchemas.replayEvents.output,\n  error: OrchestrationReplayEventsError,\n});\n\nexport const WsOrchestrationReconcileThreadDetailRpc = Rpc.make(\n  ORCHESTRATION_WS_METHODS.reconcileThreadDetail,\n  {\n    payload: OrchestrationRpcSchemas.reconcileThreadDetail.input,\n    success: OrchestrationRpcSchemas.reconcileThreadDetail.output,\n    error: OrchestrationGetSnapshotError,\n  },\n);\n\nexport const WsOrchestrationProbeSyncRpc = Rpc.make(ORCHESTRATION_WS_METHODS.probeSync, {\n  payload: OrchestrationRpcSchemas.probeSync.input,\n  success: OrchestrationRpcSchemas.probeSync.output,\n  error: OrchestrationGetSnapshotError,\n});\n\nexport const WsOrchestrationGetArchivedShellSnapshotRpc = Rpc.make(\n  ORCHESTRATION_WS_METHODS.getArchivedShellSnapshot,\n  {\n    payload: OrchestrationRpcSchemas.getArchivedShellSnapshot.input,\n    success: OrchestrationRpcSchemas.getArchivedShellSnapshot.output,\n    error: OrchestrationGetSnapshotError,\n  },\n);\n\nexport const WsOrchestrationGetThreadDetailPageRpc = Rpc.make(\n  ORCHESTRATION_WS_METHODS.getThreadDetailPage,\n  {\n    payload: OrchestrationRpcSchemas.getThreadDetailPage.input,\n    success: OrchestrationRpcSchemas.getThreadDetailPage.output,\n    error: OrchestrationGetSnapshotError,\n  },\n);\n\nexport const WsOrchestrationSubscribeShellRpc = Rpc.make(ORCHESTRATION_WS_METHODS.subscribeShell, {\n  payload: OrchestrationRpcSchemas.subscribeShell.input,\n  success: OrchestrationRpcSchemas.subscribeShell.output,\n  error: OrchestrationGetSnapshotError,\n  stream: true,\n});\n\nexport const WsOrchestrationSubscribeThreadRpc = Rpc.make(\n  ORCHESTRATION_WS_METHODS.subscribeThread,\n  {\n    payload: OrchestrationRpcSchemas.subscribeThread.input,\n    success: OrchestrationRpcSchemas.subscribeThread.output,\n    error: OrchestrationGetSnapshotError,\n    stream: true,\n  },\n);\n\nexport const WsSubscribeTerminalEventsRpc = Rpc.make(WS_METHODS.subscribeTerminalEvents, {\n  payload: Schema.Struct({}),\n  success: TerminalEvent,\n  stream: true,\n});\n\nexport const WsSubscribeServerConfigRpc = Rpc.make(WS_METHODS.subscribeServerConfig, {\n  payload: Schema.Struct({}),\n  success: ServerConfigStreamEvent,\n  error: Schema.Union([KeybindingsConfigError, ServerSettingsError]),\n  stream: true,\n});\n\nexport const WsSubscribeServerLifecycleRpc = Rpc.make(WS_METHODS.subscribeServerLifecycle, {\n  payload: Schema.Struct({}),\n  success: ServerLifecycleStreamEvent,\n  stream: true,\n});\n\nexport const WsSubscribeAuthAccessRpc = Rpc.make(WS_METHODS.subscribeAuthAccess, {\n  payload: Schema.Struct({}),\n  success: AuthAccessStreamEvent,\n  stream: true,\n});\n\nexport const WsRpcGroup = RpcGroup.make(\n  WsServerGetConfigRpc,\n  WsServerRefreshProvidersRpc,\n  WsServerRefreshUsageLimitsRpc,\n  WsServerUpdateProviderRpc,\n  WsServerUpsertKeybindingRpc,\n  WsServerRemoveKeybindingRpc,\n  WsServerGetSettingsRpc,\n  WsServerUpdateSettingsRpc,\n  WsServerDiscoverSourceControlRpc,\n  WsServerGetTraceDiagnosticsRpc,\n  WsServerGetProcessDiagnosticsRpc,\n  WsServerGetProcessResourceHistoryRpc,\n  WsServerSignalProcessRpc,\n  WsServerProbeDevServerUrlRpc,\n  WsServerGetPushConfigRpc,\n  WsServerRegisterPushSubscriptionRpc,\n  WsServerUnregisterPushSubscriptionRpc,\n  WsServerSendTestPushNotificationRpc,\n  WsThemesSearchRpc,\n  WsThemesPreviewRpc,\n  WsThemesImportRpc,\n  WsSourceControlLookupRepositoryRpc,\n  WsSourceControlCloneRepositoryRpc,\n  WsSourceControlPublishRepositoryRpc,\n  WsProjectsSearchEntriesRpc,\n  WsProjectsListDirectoryEntriesRpc,\n  WsProjectsReadFileRpc,\n  WsProjectsWriteFileRpc,\n  WsProjectsDeleteEntryRpc,\n  WsShellOpenInEditorRpc,\n  WsFilesystemBrowseRpc,\n  WsSubscribeVcsStatusRpc,\n  WsVcsPullRpc,\n  WsVcsRefreshStatusRpc,\n  WsVcsStageFilesRpc,\n  WsVcsUnstageFilesRpc,\n  WsVcsRevertUnstagedFilesRpc,\n  WsVcsGetWorkingTreeDiffRpc,\n  WsGitRunStackedActionRpc,\n  WsGitGenerateCommitMessageRpc,\n  WsGitResolvePullRequestRpc,\n  WsGitPreparePullRequestThreadRpc,\n  WsVcsListRefsRpc,\n  WsVcsCreateWorktreeRpc,\n  WsVcsRemoveWorktreeRpc,\n  WsVcsCreateRefRpc,\n  WsVcsSwitchRefRpc,\n  WsVcsInitRpc,\n  WsTerminalOpenRpc,\n  WsTerminalWriteRpc,\n  WsTerminalResizeRpc,\n  WsTerminalClearRpc,\n  WsTerminalSnapshotRpc,\n  WsTerminalRestartRpc,\n  WsTerminalCloseRpc,\n  WsSubscribeTerminalEventsRpc,\n  WsSubscribeServerConfigRpc,\n  WsSubscribeServerLifecycleRpc,\n  WsSubscribeAuthAccessRpc,\n  WsOrchestrationDispatchCommandRpc,\n  WsOrchestrationGetTurnDiffRpc,\n  WsOrchestrationGetFullThreadDiffRpc,\n  WsOrchestrationProbeSyncRpc,\n  WsOrchestrationReplayEventsRpc,\n  WsOrchestrationReconcileThreadDetailRpc,\n  WsOrchestrationGetArchivedShellSnapshotRpc,\n  WsOrchestrationGetThreadDetailPageRpc,\n  WsOrchestrationSubscribeShellRpc,\n  WsOrchestrationSubscribeThreadRpc,\n);\n","/**\n * ServerConfig - Runtime configuration services.\n *\n * Defines process-level server configuration and networking helpers used by\n * startup and runtime layers.\n *\n * @module ServerConfig\n */\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as LogLevel from \"effect/LogLevel\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\n\nexport const DEFAULT_PORT = 3773;\n\nexport const RuntimeMode = Schema.Literals([\"web\", \"desktop\"]);\nexport type RuntimeMode = typeof RuntimeMode.Type;\n\nexport const StartupPresentation = Schema.Literals([\"browser\", \"headless\"]);\nexport type StartupPresentation = typeof StartupPresentation.Type;\n\n/**\n * ServerDerivedPaths - Derived paths from the base directory.\n */\nexport interface ServerDerivedPaths {\n  readonly stateDir: string;\n  readonly dbPath: string;\n  readonly keybindingsConfigPath: string;\n  readonly settingsPath: string;\n  readonly providerStatusCacheDir: string;\n  readonly worktreesDir: string;\n  readonly attachmentsDir: string;\n  readonly logsDir: string;\n  readonly serverLogPath: string;\n  readonly serverTracePath: string;\n  readonly providerLogsDir: string;\n  readonly providerEventLogPath: string;\n  readonly terminalLogsDir: string;\n  readonly anonymousIdPath: string;\n  readonly environmentIdPath: string;\n  readonly serverRuntimeStatePath: string;\n  readonly secretsDir: string;\n}\n\n/**\n * ServerConfigShape - Process/runtime configuration required by the server.\n */\nexport interface ServerConfigShape extends ServerDerivedPaths {\n  readonly logLevel: LogLevel.LogLevel;\n  readonly traceMinLevel: LogLevel.LogLevel;\n  readonly traceTimingEnabled: boolean;\n  readonly traceBatchWindowMs: number;\n  readonly traceMaxBytes: number;\n  readonly traceMaxFiles: number;\n  readonly otlpTracesUrl: string | undefined;\n  readonly otlpMetricsUrl: string | undefined;\n  readonly otlpExportIntervalMs: number;\n  readonly otlpServiceName: string;\n  readonly mode: RuntimeMode;\n  readonly port: number;\n  readonly host: string | undefined;\n  readonly cwd: string;\n  readonly baseDir: string;\n  readonly staticDir: string | undefined;\n  readonly devUrl: URL | undefined;\n  readonly noBrowser: boolean;\n  readonly startupPresentation: StartupPresentation;\n  readonly desktopBootstrapToken: string | undefined;\n  readonly autoBootstrapProjectFromCwd: boolean;\n  readonly logWebSocketEvents: boolean;\n  readonly tailscaleServeEnabled: boolean;\n  readonly tailscaleServePort: number;\n  readonly whisperServerUrl: URL | undefined;\n  readonly whisperAutoProvision: boolean;\n}\n\nexport const deriveServerPaths = Effect.fn(function* (\n  baseDir: ServerConfigShape[\"baseDir\"],\n  devUrl: ServerConfigShape[\"devUrl\"],\n): Effect.fn.Return<ServerDerivedPaths, never, Path.Path> {\n  const { join } = yield* Path.Path;\n  const stateDir = join(baseDir, devUrl !== undefined ? \"dev\" : \"userdata\");\n  const dbPath = join(stateDir, \"state.sqlite\");\n  const attachmentsDir = join(stateDir, \"attachments\");\n  const logsDir = join(stateDir, \"logs\");\n  const providerLogsDir = join(logsDir, \"provider\");\n  const providerStatusCacheDir = join(baseDir, \"caches\");\n  return {\n    stateDir,\n    dbPath,\n    keybindingsConfigPath: join(stateDir, \"keybindings.json\"),\n    settingsPath: join(stateDir, \"settings.json\"),\n    providerStatusCacheDir,\n    worktreesDir: join(baseDir, \"worktrees\"),\n    attachmentsDir,\n    logsDir,\n    serverLogPath: join(logsDir, \"server.log\"),\n    serverTracePath: join(logsDir, \"server.trace.ndjson\"),\n    providerLogsDir,\n    providerEventLogPath: join(providerLogsDir, \"events.log\"),\n    terminalLogsDir: join(logsDir, \"terminals\"),\n    anonymousIdPath: join(stateDir, \"anonymous-id\"),\n    environmentIdPath: join(stateDir, \"environment-id\"),\n    serverRuntimeStatePath: join(stateDir, \"server-runtime.json\"),\n    secretsDir: join(stateDir, \"secrets\"),\n  };\n});\n\nexport const ensureServerDirectories = Effect.fn(function* (derivedPaths: ServerDerivedPaths) {\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  yield* Effect.all(\n    [\n      fs.makeDirectory(derivedPaths.stateDir, { recursive: true }),\n      fs.makeDirectory(derivedPaths.logsDir, { recursive: true }),\n      fs.makeDirectory(derivedPaths.providerLogsDir, { recursive: true }),\n      fs.makeDirectory(derivedPaths.terminalLogsDir, { recursive: true }),\n      fs.makeDirectory(derivedPaths.attachmentsDir, { recursive: true }),\n      fs.makeDirectory(derivedPaths.worktreesDir, { recursive: true }),\n      fs.makeDirectory(path.dirname(derivedPaths.keybindingsConfigPath), { recursive: true }),\n      fs.makeDirectory(path.dirname(derivedPaths.settingsPath), { recursive: true }),\n      fs.makeDirectory(derivedPaths.providerStatusCacheDir, { recursive: true }),\n      fs.makeDirectory(path.dirname(derivedPaths.anonymousIdPath), { recursive: true }),\n      fs.makeDirectory(path.dirname(derivedPaths.serverRuntimeStatePath), { recursive: true }),\n    ],\n    { concurrency: \"unbounded\" },\n  );\n});\n\n/**\n * ServerConfig - Service tag for server runtime configuration.\n */\nexport class ServerConfig extends Context.Service<ServerConfig, ServerConfigShape>()(\n  \"salchi/config/ServerConfig\",\n) {\n  static readonly layerTest = (cwd: string, baseDirOrPrefix: string | { prefix: string }) =>\n    Layer.effect(\n      ServerConfig,\n      Effect.gen(function* () {\n        const devUrl = undefined;\n\n        const fs = yield* FileSystem.FileSystem;\n        const baseDir =\n          typeof baseDirOrPrefix === \"string\"\n            ? baseDirOrPrefix\n            : yield* fs.makeTempDirectoryScoped({ prefix: baseDirOrPrefix.prefix });\n        const derivedPaths = yield* deriveServerPaths(baseDir, devUrl);\n        yield* ensureServerDirectories(derivedPaths);\n\n        return {\n          logLevel: \"Error\",\n          traceMinLevel: \"Info\",\n          traceTimingEnabled: true,\n          traceBatchWindowMs: 200,\n          traceMaxBytes: 10 * 1024 * 1024,\n          traceMaxFiles: 10,\n          otlpTracesUrl: undefined,\n          otlpMetricsUrl: undefined,\n          otlpExportIntervalMs: 10_000,\n          otlpServiceName: \"salchi-server\",\n          cwd,\n          baseDir,\n          ...derivedPaths,\n          mode: \"web\",\n          autoBootstrapProjectFromCwd: false,\n          logWebSocketEvents: false,\n          tailscaleServeEnabled: false,\n          tailscaleServePort: 443,\n          whisperServerUrl: undefined,\n          whisperAutoProvision: false,\n          port: 0,\n          host: undefined,\n          desktopBootstrapToken: undefined,\n          staticDir: undefined,\n          devUrl,\n          noBrowser: false,\n          startupPresentation: \"browser\",\n        } satisfies ServerConfigShape;\n      }),\n    );\n}\n\nexport const resolveStaticDir = Effect.fn(function* () {\n  const { join, resolve } = yield* Path.Path;\n  const { exists } = yield* FileSystem.FileSystem;\n  const bundledClient = resolve(join(import.meta.dirname, \"client\"));\n  const bundledStat = yield* exists(join(bundledClient, \"index.html\")).pipe(\n    Effect.orElseSucceed(() => false),\n  );\n  if (bundledStat) {\n    return bundledClient;\n  }\n\n  const monorepoClient = resolve(join(import.meta.dirname, \"../../web/dist\"));\n  const monorepoStat = yield* exists(join(monorepoClient, \"index.html\")).pipe(\n    Effect.orElseSucceed(() => false),\n  );\n  if (monorepoStat) {\n    return monorepoClient;\n  }\n  return undefined;\n});\n","import * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\n\n// Core Persistence Errors\n\nexport class PersistenceSqlError extends Schema.TaggedErrorClass<PersistenceSqlError>()(\n  \"PersistenceSqlError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `SQL error in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport class PersistenceDecodeError extends Schema.TaggedErrorClass<PersistenceDecodeError>()(\n  \"PersistenceDecodeError\",\n  {\n    operation: Schema.String,\n    issue: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Decode error in ${this.operation}: ${this.issue}`;\n  }\n}\nconst isPersistenceSqlError = Schema.is(PersistenceSqlError);\nconst isPersistenceDecodeError = Schema.is(PersistenceDecodeError);\n\nexport function toPersistenceSqlError(operation: string) {\n  return (cause: unknown): PersistenceSqlError =>\n    new PersistenceSqlError({\n      operation,\n      detail: `Failed to execute ${operation}`,\n      cause,\n    });\n}\n\nexport function toPersistenceDecodeError(operation: string) {\n  return (error: Schema.SchemaError): PersistenceDecodeError =>\n    new PersistenceDecodeError({\n      operation,\n      issue: SchemaIssue.makeFormatterDefault()(error.issue),\n      cause: error,\n    });\n}\n\nexport function toPersistenceDecodeCauseError(operation: string) {\n  return (cause: unknown): PersistenceDecodeError =>\n    new PersistenceDecodeError({\n      operation,\n      issue: `Failed to execute ${operation}`,\n      cause,\n    });\n}\n\nexport const isPersistenceError = (u: unknown) =>\n  isPersistenceSqlError(u) || isPersistenceDecodeError(u);\n\n// Provider Session Repository Errors\n\nexport class ProviderSessionRepositoryValidationError extends Schema.TaggedErrorClass<ProviderSessionRepositoryValidationError>()(\n  \"ProviderSessionRepositoryValidationError\",\n  {\n    operation: Schema.String,\n    issue: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider session repository validation failed in ${this.operation}: ${this.issue}`;\n  }\n}\n\nexport class ProviderSessionRepositoryPersistenceError extends Schema.TaggedErrorClass<ProviderSessionRepositoryPersistenceError>()(\n  \"ProviderSessionRepositoryPersistenceError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider session repository persistence error in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport type OrchestrationEventStoreError = PersistenceSqlError | PersistenceDecodeError;\n\nexport type ProviderSessionRepositoryError =\n  | ProviderSessionRepositoryValidationError\n  | ProviderSessionRepositoryPersistenceError;\n\nexport type OrchestrationCommandReceiptRepositoryError =\n  | PersistenceSqlError\n  | PersistenceDecodeError;\n\nexport type ProviderSessionRuntimeRepositoryError = PersistenceSqlError | PersistenceDecodeError;\nexport type AuthPairingLinkRepositoryError = PersistenceSqlError | PersistenceDecodeError;\nexport type AuthSessionRepositoryError = PersistenceSqlError | PersistenceDecodeError;\nexport type WebPushSubscriptionRepositoryError = PersistenceSqlError | PersistenceDecodeError;\n\nexport type ProjectionRepositoryError = PersistenceSqlError | PersistenceDecodeError;\n","import * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { AuthPairingLinkRepositoryError } from \"../Errors.ts\";\n\nexport const AuthPairingLinkRecord = Schema.Struct({\n  id: Schema.String,\n  credential: Schema.String,\n  method: Schema.Literals([\"desktop-bootstrap\", \"one-time-token\"]),\n  role: Schema.Literals([\"owner\", \"client\"]),\n  subject: Schema.String,\n  label: Schema.NullOr(Schema.String),\n  createdAt: Schema.DateTimeUtcFromString,\n  expiresAt: Schema.DateTimeUtcFromString,\n  consumedAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n  revokedAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n});\nexport type AuthPairingLinkRecord = typeof AuthPairingLinkRecord.Type;\n\nexport const CreateAuthPairingLinkInput = Schema.Struct({\n  id: Schema.String,\n  credential: Schema.String,\n  method: Schema.Literals([\"desktop-bootstrap\", \"one-time-token\"]),\n  role: Schema.Literals([\"owner\", \"client\"]),\n  subject: Schema.String,\n  label: Schema.NullOr(Schema.String),\n  createdAt: Schema.DateTimeUtcFromString,\n  expiresAt: Schema.DateTimeUtcFromString,\n});\nexport type CreateAuthPairingLinkInput = typeof CreateAuthPairingLinkInput.Type;\n\nexport const ConsumeAuthPairingLinkInput = Schema.Struct({\n  credential: Schema.String,\n  consumedAt: Schema.DateTimeUtcFromString,\n  now: Schema.DateTimeUtcFromString,\n});\nexport type ConsumeAuthPairingLinkInput = typeof ConsumeAuthPairingLinkInput.Type;\n\nexport const ListActiveAuthPairingLinksInput = Schema.Struct({\n  now: Schema.DateTimeUtcFromString,\n});\nexport type ListActiveAuthPairingLinksInput = typeof ListActiveAuthPairingLinksInput.Type;\n\nexport const RevokeAuthPairingLinkInput = Schema.Struct({\n  id: Schema.String,\n  revokedAt: Schema.DateTimeUtcFromString,\n});\nexport type RevokeAuthPairingLinkInput = typeof RevokeAuthPairingLinkInput.Type;\n\nexport const GetAuthPairingLinkByCredentialInput = Schema.Struct({\n  credential: Schema.String,\n});\nexport type GetAuthPairingLinkByCredentialInput = typeof GetAuthPairingLinkByCredentialInput.Type;\n\nexport interface AuthPairingLinkRepositoryShape {\n  readonly create: (\n    input: CreateAuthPairingLinkInput,\n  ) => Effect.Effect<void, AuthPairingLinkRepositoryError>;\n  readonly consumeAvailable: (\n    input: ConsumeAuthPairingLinkInput,\n  ) => Effect.Effect<Option.Option<AuthPairingLinkRecord>, AuthPairingLinkRepositoryError>;\n  readonly listActive: (\n    input: ListActiveAuthPairingLinksInput,\n  ) => Effect.Effect<ReadonlyArray<AuthPairingLinkRecord>, AuthPairingLinkRepositoryError>;\n  readonly revoke: (\n    input: RevokeAuthPairingLinkInput,\n  ) => Effect.Effect<boolean, AuthPairingLinkRepositoryError>;\n  readonly getByCredential: (\n    input: GetAuthPairingLinkByCredentialInput,\n  ) => Effect.Effect<Option.Option<AuthPairingLinkRecord>, AuthPairingLinkRepositoryError>;\n}\n\nexport class AuthPairingLinkRepository extends Context.Service<\n  AuthPairingLinkRepository,\n  AuthPairingLinkRepositoryShape\n>()(\"salchi/persistence/Services/AuthPairingLinks/AuthPairingLinkRepository\") {}\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  toPersistenceDecodeError,\n  toPersistenceSqlError,\n  type AuthPairingLinkRepositoryError,\n} from \"../Errors.ts\";\nimport {\n  AuthPairingLinkRecord,\n  AuthPairingLinkRepository,\n  type AuthPairingLinkRepositoryShape,\n  ConsumeAuthPairingLinkInput,\n  CreateAuthPairingLinkInput,\n  GetAuthPairingLinkByCredentialInput,\n  ListActiveAuthPairingLinksInput,\n  RevokeAuthPairingLinkInput,\n} from \"../Services/AuthPairingLinks.ts\";\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown): AuthPairingLinkRepositoryError =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeAuthPairingLinkRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const createPairingLinkRow = SqlSchema.void({\n    Request: CreateAuthPairingLinkInput,\n    execute: (input) =>\n      sql`\n        INSERT INTO auth_pairing_links (\n          id,\n          credential,\n          method,\n          role,\n          subject,\n          label,\n          created_at,\n          expires_at,\n          consumed_at,\n          revoked_at\n        )\n        VALUES (\n          ${input.id},\n          ${input.credential},\n          ${input.method},\n          ${input.role},\n          ${input.subject},\n          ${input.label},\n          ${input.createdAt},\n          ${input.expiresAt},\n          NULL,\n          NULL\n        )\n      `,\n  });\n\n  const consumeAvailablePairingLinkRow = SqlSchema.findOneOption({\n    Request: ConsumeAuthPairingLinkInput,\n    Result: AuthPairingLinkRecord,\n    execute: ({ credential, consumedAt, now }) =>\n      sql`\n        UPDATE auth_pairing_links\n        SET consumed_at = ${consumedAt}\n        WHERE credential = ${credential}\n          AND revoked_at IS NULL\n          AND consumed_at IS NULL\n          AND expires_at > ${now}\n        RETURNING\n          id AS \"id\",\n          credential AS \"credential\",\n          method AS \"method\",\n          role AS \"role\",\n          subject AS \"subject\",\n          label AS \"label\",\n          created_at AS \"createdAt\",\n          expires_at AS \"expiresAt\",\n          consumed_at AS \"consumedAt\",\n          revoked_at AS \"revokedAt\"\n      `,\n  });\n\n  const listActivePairingLinkRows = SqlSchema.findAll({\n    Request: ListActiveAuthPairingLinksInput,\n    Result: AuthPairingLinkRecord,\n    execute: ({ now }) =>\n      sql`\n        SELECT\n          id AS \"id\",\n          credential AS \"credential\",\n          method AS \"method\",\n          role AS \"role\",\n          subject AS \"subject\",\n          label AS \"label\",\n          created_at AS \"createdAt\",\n          expires_at AS \"expiresAt\",\n          consumed_at AS \"consumedAt\",\n          revoked_at AS \"revokedAt\"\n        FROM auth_pairing_links\n        WHERE revoked_at IS NULL\n          AND consumed_at IS NULL\n          AND expires_at > ${now}\n        ORDER BY created_at DESC, id DESC\n      `,\n  });\n\n  const revokePairingLinkRow = SqlSchema.findAll({\n    Request: RevokeAuthPairingLinkInput,\n    Result: Schema.Struct({ id: Schema.String }),\n    execute: ({ id, revokedAt }) =>\n      sql`\n        UPDATE auth_pairing_links\n        SET revoked_at = ${revokedAt}\n        WHERE id = ${id}\n          AND revoked_at IS NULL\n          AND consumed_at IS NULL\n        RETURNING id AS \"id\"\n      `,\n  });\n\n  const getPairingLinkRowByCredential = SqlSchema.findOneOption({\n    Request: GetAuthPairingLinkByCredentialInput,\n    Result: AuthPairingLinkRecord,\n    execute: ({ credential }) =>\n      sql`\n        SELECT\n          id AS \"id\",\n          credential AS \"credential\",\n          method AS \"method\",\n          role AS \"role\",\n          subject AS \"subject\",\n          label AS \"label\",\n          created_at AS \"createdAt\",\n          expires_at AS \"expiresAt\",\n          consumed_at AS \"consumedAt\",\n          revoked_at AS \"revokedAt\"\n        FROM auth_pairing_links\n        WHERE credential = ${credential}\n      `,\n  });\n\n  const create: AuthPairingLinkRepositoryShape[\"create\"] = (input) =>\n    createPairingLinkRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthPairingLinkRepository.create:query\",\n          \"AuthPairingLinkRepository.create:encodeRequest\",\n        ),\n      ),\n    );\n\n  const consumeAvailable: AuthPairingLinkRepositoryShape[\"consumeAvailable\"] = (input) =>\n    consumeAvailablePairingLinkRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthPairingLinkRepository.consumeAvailable:query\",\n          \"AuthPairingLinkRepository.consumeAvailable:decodeRow\",\n        ),\n      ),\n    );\n\n  const listActive: AuthPairingLinkRepositoryShape[\"listActive\"] = (input) =>\n    listActivePairingLinkRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthPairingLinkRepository.listActive:query\",\n          \"AuthPairingLinkRepository.listActive:decodeRows\",\n        ),\n      ),\n    );\n\n  const revoke: AuthPairingLinkRepositoryShape[\"revoke\"] = (input) =>\n    revokePairingLinkRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthPairingLinkRepository.revoke:query\",\n          \"AuthPairingLinkRepository.revoke:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) => rows.length > 0),\n    );\n\n  const getByCredential: AuthPairingLinkRepositoryShape[\"getByCredential\"] = (input) =>\n    getPairingLinkRowByCredential(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthPairingLinkRepository.getByCredential:query\",\n          \"AuthPairingLinkRepository.getByCredential:decodeRow\",\n        ),\n      ),\n    );\n\n  return {\n    create,\n    consumeAvailable,\n    listActive,\n    revoke,\n    getByCredential,\n  } satisfies AuthPairingLinkRepositoryShape;\n});\n\nexport const AuthPairingLinkRepositoryLive = Layer.effect(\n  AuthPairingLinkRepository,\n  makeAuthPairingLinkRepository,\n);\n","import type { AuthPairingLink, ServerAuthBootstrapMethod } from \"@salchi/contracts\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\n\nexport type BootstrapCredentialRole = \"owner\" | \"client\";\n\nexport interface BootstrapGrant {\n  readonly method: ServerAuthBootstrapMethod;\n  readonly role: BootstrapCredentialRole;\n  readonly subject: string;\n  readonly label?: string;\n  readonly expiresAt: DateTime.DateTime;\n}\n\nexport class BootstrapCredentialError extends Data.TaggedError(\"BootstrapCredentialError\")<{\n  readonly message: string;\n  readonly status?: 401 | 500;\n  readonly cause?: unknown;\n}> {}\n\nexport interface IssuedBootstrapCredential {\n  readonly id: string;\n  readonly credential: string;\n  readonly label?: string;\n  readonly expiresAt: DateTime.Utc;\n}\n\nexport type BootstrapCredentialChange =\n  | {\n      readonly type: \"pairingLinkUpserted\";\n      readonly pairingLink: AuthPairingLink;\n    }\n  | {\n      readonly type: \"pairingLinkRemoved\";\n      readonly id: string;\n    };\n\nexport interface BootstrapCredentialServiceShape {\n  readonly issueOneTimeToken: (input?: {\n    readonly ttl?: Duration.Duration;\n    readonly role?: BootstrapCredentialRole;\n    readonly subject?: string;\n    readonly label?: string;\n  }) => Effect.Effect<IssuedBootstrapCredential, BootstrapCredentialError>;\n  readonly listActive: () => Effect.Effect<\n    ReadonlyArray<AuthPairingLink>,\n    BootstrapCredentialError\n  >;\n  readonly streamChanges: Stream.Stream<BootstrapCredentialChange>;\n  readonly revoke: (id: string) => Effect.Effect<boolean, BootstrapCredentialError>;\n  readonly consume: (credential: string) => Effect.Effect<BootstrapGrant, BootstrapCredentialError>;\n}\n\nexport class BootstrapCredentialService extends Context.Service<\n  BootstrapCredentialService,\n  BootstrapCredentialServiceShape\n>()(\"salchi/auth/Services/BootstrapCredentialService\") {}\n","import type { AuthPairingLink } from \"@salchi/contracts\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Stream from \"effect/Stream\";\nimport * as Option from \"effect/Option\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { AuthPairingLinkRepositoryLive } from \"../../persistence/Layers/AuthPairingLinks.ts\";\nimport { AuthPairingLinkRepository } from \"../../persistence/Services/AuthPairingLinks.ts\";\nimport {\n  BootstrapCredentialError,\n  BootstrapCredentialService,\n  type BootstrapCredentialChange,\n  type BootstrapCredentialServiceShape,\n  type BootstrapGrant,\n  type IssuedBootstrapCredential,\n} from \"../Services/BootstrapCredentialService.ts\";\n\ninterface StoredBootstrapGrant extends BootstrapGrant {\n  readonly remainingUses: number | \"unbounded\";\n}\n\ntype ConsumeResult =\n  | {\n      readonly _tag: \"error\";\n      readonly reason: \"not-found\" | \"expired\";\n      readonly error: BootstrapCredentialError;\n    }\n  | {\n      readonly _tag: \"success\";\n      readonly grant: BootstrapGrant;\n    };\n\nconst DEFAULT_ONE_TIME_TOKEN_TTL_MINUTES = Duration.minutes(5);\nconst PAIRING_TOKEN_ALPHABET = \"23456789ABCDEFGHJKLMNPQRSTUVWXYZ\";\nconst PAIRING_TOKEN_LENGTH = 12;\n\nconst generatePairingToken = (): string => {\n  const randomBytes = crypto.getRandomValues(new Uint8Array(PAIRING_TOKEN_LENGTH));\n\n  return Array.from(randomBytes, (value) => PAIRING_TOKEN_ALPHABET[value & 31]).join(\"\");\n};\n\nexport const makeBootstrapCredentialService = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const config = yield* ServerConfig;\n  const pairingLinks = yield* AuthPairingLinkRepository;\n  const seededGrantsRef = yield* Ref.make(new Map<string, StoredBootstrapGrant>());\n  const changesPubSub = yield* PubSub.unbounded<BootstrapCredentialChange>();\n\n  const invalidBootstrapCredentialError = (message: string) =>\n    new BootstrapCredentialError({\n      message,\n      status: 401,\n    });\n\n  const internalBootstrapCredentialError = (message: string, cause: unknown) =>\n    new BootstrapCredentialError({\n      message,\n      status: 500,\n      cause,\n    });\n\n  const seedGrant = (credential: string, grant: StoredBootstrapGrant) =>\n    Ref.update(seededGrantsRef, (current) => {\n      const next = new Map(current);\n      next.set(credential, grant);\n      return next;\n    });\n\n  const emitUpsert = (pairingLink: AuthPairingLink) =>\n    PubSub.publish(changesPubSub, {\n      type: \"pairingLinkUpserted\",\n      pairingLink,\n    }).pipe(Effect.asVoid);\n\n  const emitRemoved = (id: string) =>\n    PubSub.publish(changesPubSub, {\n      type: \"pairingLinkRemoved\",\n      id,\n    }).pipe(Effect.asVoid);\n\n  if (config.desktopBootstrapToken) {\n    const now = yield* DateTime.now;\n    yield* seedGrant(config.desktopBootstrapToken, {\n      method: \"desktop-bootstrap\",\n      role: \"owner\",\n      subject: \"desktop-bootstrap\",\n      expiresAt: DateTime.add(now, {\n        milliseconds: Duration.toMillis(DEFAULT_ONE_TIME_TOKEN_TTL_MINUTES),\n      }),\n      remainingUses: 1,\n    });\n  }\n\n  const toBootstrapCredentialError = (message: string) => (cause: unknown) =>\n    internalBootstrapCredentialError(message, cause);\n\n  const listActive: BootstrapCredentialServiceShape[\"listActive\"] = () =>\n    Effect.gen(function* () {\n      const now = yield* DateTime.now;\n      const rows = yield* pairingLinks.listActive({ now });\n\n      return rows.map((row) =>\n        row.label\n          ? ({\n              id: row.id,\n              credential: row.credential,\n              role: row.role,\n              subject: row.subject,\n              label: row.label,\n              createdAt: row.createdAt,\n              expiresAt: row.expiresAt,\n            } satisfies AuthPairingLink)\n          : ({\n              id: row.id,\n              credential: row.credential,\n              role: row.role,\n              subject: row.subject,\n              createdAt: row.createdAt,\n              expiresAt: row.expiresAt,\n            } satisfies AuthPairingLink),\n      );\n    }).pipe(Effect.mapError(toBootstrapCredentialError(\"Failed to load active pairing links.\")));\n\n  const revoke: BootstrapCredentialServiceShape[\"revoke\"] = (id) =>\n    Effect.gen(function* () {\n      const revokedAt = yield* DateTime.now;\n      const revoked = yield* pairingLinks.revoke({\n        id,\n        revokedAt,\n      });\n      if (revoked) {\n        yield* emitRemoved(id);\n      }\n      return revoked;\n    }).pipe(Effect.mapError(toBootstrapCredentialError(\"Failed to revoke pairing link.\")));\n\n  const issueOneTimeToken: BootstrapCredentialServiceShape[\"issueOneTimeToken\"] = (input) =>\n    Effect.gen(function* () {\n      const id = yield* crypto.randomUUIDv4;\n      const credential = generatePairingToken();\n      const ttl = input?.ttl ?? DEFAULT_ONE_TIME_TOKEN_TTL_MINUTES;\n      const now = yield* DateTime.now;\n      const expiresAt = DateTime.add(now, { milliseconds: Duration.toMillis(ttl) });\n      const issued: IssuedBootstrapCredential = {\n        id,\n        credential,\n        ...(input?.label ? { label: input.label } : {}),\n        expiresAt,\n      };\n      yield* pairingLinks.create({\n        id,\n        credential,\n        method: \"one-time-token\",\n        role: input?.role ?? \"client\",\n        subject: input?.subject ?? \"one-time-token\",\n        label: input?.label ?? null,\n        createdAt: now,\n        expiresAt: expiresAt,\n      });\n      yield* emitUpsert({\n        id,\n        credential,\n        role: input?.role ?? \"client\",\n        subject: input?.subject ?? \"one-time-token\",\n        ...(input?.label ? { label: input.label } : {}),\n        createdAt: now,\n        expiresAt,\n      });\n      return issued;\n    }).pipe(Effect.mapError(toBootstrapCredentialError(\"Failed to issue pairing credential.\")));\n\n  const consume: BootstrapCredentialServiceShape[\"consume\"] = (credential) =>\n    Effect.gen(function* () {\n      const now = yield* DateTime.now;\n      const seededResult: ConsumeResult = yield* Ref.modify(\n        seededGrantsRef,\n        (current): readonly [ConsumeResult, Map<string, StoredBootstrapGrant>] => {\n          const grant = current.get(credential);\n          if (!grant) {\n            return [\n              {\n                _tag: \"error\",\n                reason: \"not-found\",\n                error: invalidBootstrapCredentialError(\"Unknown bootstrap credential.\"),\n              },\n              current,\n            ];\n          }\n\n          const next = new Map(current);\n          if (DateTime.isGreaterThanOrEqualTo(now, grant.expiresAt)) {\n            next.delete(credential);\n            return [\n              {\n                _tag: \"error\",\n                reason: \"expired\",\n                error: invalidBootstrapCredentialError(\"Bootstrap credential expired.\"),\n              },\n              next,\n            ];\n          }\n\n          const remainingUses = grant.remainingUses;\n          if (typeof remainingUses === \"number\") {\n            if (remainingUses <= 1) {\n              next.delete(credential);\n            } else {\n              next.set(credential, {\n                ...grant,\n                remainingUses: remainingUses - 1,\n              });\n            }\n          }\n\n          return [\n            {\n              _tag: \"success\",\n              grant: {\n                method: grant.method,\n                role: grant.role,\n                subject: grant.subject,\n                ...(grant.label ? { label: grant.label } : {}),\n                expiresAt: grant.expiresAt,\n              } satisfies BootstrapGrant,\n            },\n            next,\n          ];\n        },\n      );\n\n      if (seededResult._tag === \"success\") {\n        return seededResult.grant;\n      }\n      if (seededResult.reason !== \"not-found\") {\n        return yield* seededResult.error;\n      }\n\n      const consumed = yield* pairingLinks.consumeAvailable({\n        credential,\n        consumedAt: now,\n        now,\n      });\n\n      if (Option.isSome(consumed)) {\n        yield* emitRemoved(consumed.value.id);\n        return {\n          method: consumed.value.method,\n          role: consumed.value.role,\n          subject: consumed.value.subject,\n          ...(consumed.value.label ? { label: consumed.value.label } : {}),\n          expiresAt: consumed.value.expiresAt,\n        } satisfies BootstrapGrant;\n      }\n\n      const matching = yield* pairingLinks.getByCredential({ credential });\n      if (Option.isNone(matching)) {\n        return yield* invalidBootstrapCredentialError(\"Unknown bootstrap credential.\");\n      }\n\n      if (matching.value.revokedAt !== null) {\n        return yield* invalidBootstrapCredentialError(\n          \"Bootstrap credential is no longer available.\",\n        );\n      }\n\n      if (matching.value.consumedAt !== null) {\n        return yield* invalidBootstrapCredentialError(\"Unknown bootstrap credential.\");\n      }\n\n      if (DateTime.isGreaterThanOrEqualTo(now, matching.value.expiresAt)) {\n        return yield* invalidBootstrapCredentialError(\"Bootstrap credential expired.\");\n      }\n\n      return yield* invalidBootstrapCredentialError(\"Bootstrap credential is no longer available.\");\n    }).pipe(\n      Effect.mapError((cause) =>\n        cause instanceof BootstrapCredentialError\n          ? cause\n          : internalBootstrapCredentialError(\"Failed to consume bootstrap credential.\", cause),\n      ),\n    );\n\n  return {\n    issueOneTimeToken,\n    listActive,\n    get streamChanges() {\n      return Stream.fromPubSub(changesPubSub);\n    },\n    revoke,\n    consume,\n  } satisfies BootstrapCredentialServiceShape;\n});\n\nexport const BootstrapCredentialServiceLive = Layer.effect(\n  BootstrapCredentialService,\n  makeBootstrapCredentialService,\n).pipe(Layer.provideMerge(AuthPairingLinkRepositoryLive));\n","import * as Data from \"effect/Data\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport class SecretStoreError extends Data.TaggedError(\"SecretStoreError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\nexport interface ServerSecretStoreShape {\n  readonly get: (name: string) => Effect.Effect<Uint8Array | null, SecretStoreError>;\n  readonly set: (name: string, value: Uint8Array) => Effect.Effect<void, SecretStoreError>;\n  readonly getOrCreateRandom: (\n    name: string,\n    bytes: number,\n  ) => Effect.Effect<Uint8Array, SecretStoreError>;\n  readonly remove: (name: string) => Effect.Effect<void, SecretStoreError>;\n}\n\nexport class ServerSecretStore extends Context.Service<ServerSecretStore, ServerSecretStoreShape>()(\n  \"salchi/auth/Services/ServerSecretStore\",\n) {}\n","import * as Crypto from \"node:crypto\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as PlatformError from \"effect/PlatformError\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport {\n  SecretStoreError,\n  ServerSecretStore,\n  type ServerSecretStoreShape,\n} from \"../Services/ServerSecretStore.ts\";\n\nexport const makeServerSecretStore = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const serverConfig = yield* ServerConfig;\n\n  yield* fileSystem.makeDirectory(serverConfig.secretsDir, { recursive: true });\n  yield* fileSystem.chmod(serverConfig.secretsDir, 0o700).pipe(\n    Effect.mapError(\n      (cause) =>\n        new SecretStoreError({\n          message: `Failed to secure secrets directory ${serverConfig.secretsDir}.`,\n          cause,\n        }),\n    ),\n  );\n\n  const resolveSecretPath = (name: string) => path.join(serverConfig.secretsDir, `${name}.bin`);\n\n  const isPlatformError = (u: unknown): u is PlatformError.PlatformError =>\n    Predicate.isTagged(u, \"PlatformError\");\n\n  const get: ServerSecretStoreShape[\"get\"] = (name) =>\n    fileSystem.readFile(resolveSecretPath(name)).pipe(\n      Effect.map((bytes) => Uint8Array.from(bytes)),\n      Effect.catch((cause) =>\n        cause.reason._tag === \"NotFound\"\n          ? Effect.succeed(null)\n          : Effect.fail(\n              new SecretStoreError({\n                message: `Failed to read secret ${name}.`,\n                cause,\n              }),\n            ),\n      ),\n    );\n\n  const set: ServerSecretStoreShape[\"set\"] = (name, value) => {\n    const secretPath = resolveSecretPath(name);\n    const tempPath = `${secretPath}.${Crypto.randomUUID()}.tmp`;\n    return Effect.gen(function* () {\n      yield* fileSystem.writeFile(tempPath, value);\n      yield* fileSystem.chmod(tempPath, 0o600);\n      yield* fileSystem.rename(tempPath, secretPath);\n      yield* fileSystem.chmod(secretPath, 0o600);\n    }).pipe(\n      Effect.catch((cause) =>\n        fileSystem.remove(tempPath).pipe(\n          Effect.ignore,\n          Effect.flatMap(() =>\n            Effect.fail(\n              new SecretStoreError({\n                message: `Failed to persist secret ${name}.`,\n                cause,\n              }),\n            ),\n          ),\n        ),\n      ),\n    );\n  };\n\n  const create: ServerSecretStoreShape[\"set\"] = (name, value) => {\n    const secretPath = resolveSecretPath(name);\n    return Effect.scoped(\n      Effect.gen(function* () {\n        const file = yield* fileSystem.open(secretPath, {\n          flag: \"wx\",\n          mode: 0o600,\n        });\n        yield* file.writeAll(value);\n        yield* file.sync;\n        yield* fileSystem.chmod(secretPath, 0o600);\n      }),\n    ).pipe(\n      Effect.mapError(\n        (cause) =>\n          new SecretStoreError({\n            message: `Failed to persist secret ${name}.`,\n            cause,\n          }),\n      ),\n    );\n  };\n\n  const getOrCreateRandom: ServerSecretStoreShape[\"getOrCreateRandom\"] = (name, bytes) =>\n    get(name).pipe(\n      Effect.flatMap((existing) => {\n        if (existing) {\n          return Effect.succeed(existing);\n        }\n\n        const generated = Crypto.randomBytes(bytes);\n        return create(name, generated).pipe(\n          Effect.as(Uint8Array.from(generated)),\n          Effect.catchTag(\"SecretStoreError\", (error) =>\n            isPlatformError(error.cause) && error.cause.reason._tag === \"AlreadyExists\"\n              ? get(name).pipe(\n                  Effect.flatMap((created) =>\n                    created !== null\n                      ? Effect.succeed(created)\n                      : Effect.fail(\n                          new SecretStoreError({\n                            message: `Failed to read secret ${name} after concurrent creation.`,\n                          }),\n                        ),\n                  ),\n                )\n              : Effect.fail(error),\n          ),\n        );\n      }),\n    );\n\n  const remove: ServerSecretStoreShape[\"remove\"] = (name) =>\n    fileSystem.remove(resolveSecretPath(name)).pipe(\n      Effect.catch((cause) =>\n        cause.reason._tag === \"NotFound\"\n          ? Effect.void\n          : Effect.fail(\n              new SecretStoreError({\n                message: `Failed to remove secret ${name}.`,\n                cause,\n              }),\n            ),\n      ),\n    );\n\n  return {\n    get,\n    set,\n    getOrCreateRandom,\n    remove,\n  } satisfies ServerSecretStoreShape;\n});\n\nexport const ServerSecretStoreLive = Layer.effect(ServerSecretStore, makeServerSecretStore);\n","import { AuthClientMetadataDeviceType, AuthSessionId } from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { AuthSessionRepositoryError } from \"../Errors.ts\";\n\nexport const AuthSessionClientMetadataRecord = Schema.Struct({\n  label: Schema.NullOr(Schema.String),\n  ipAddress: Schema.NullOr(Schema.String),\n  userAgent: Schema.NullOr(Schema.String),\n  deviceType: AuthClientMetadataDeviceType,\n  os: Schema.NullOr(Schema.String),\n  browser: Schema.NullOr(Schema.String),\n});\nexport type AuthSessionClientMetadataRecord = typeof AuthSessionClientMetadataRecord.Type;\n\nexport const AuthSessionRecord = Schema.Struct({\n  sessionId: AuthSessionId,\n  subject: Schema.String,\n  role: Schema.Literals([\"owner\", \"client\"]),\n  method: Schema.Literals([\n    \"browser-session-cookie\",\n    \"bearer-access-token\",\n    \"bearer-session-token\",\n  ]),\n  client: AuthSessionClientMetadataRecord,\n  issuedAt: Schema.DateTimeUtcFromString,\n  expiresAt: Schema.DateTimeUtcFromString,\n  lastConnectedAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n  revokedAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n});\nexport type AuthSessionRecord = typeof AuthSessionRecord.Type;\n\nexport const CreateAuthSessionInput = Schema.Struct({\n  sessionId: AuthSessionId,\n  subject: Schema.String,\n  role: Schema.Literals([\"owner\", \"client\"]),\n  method: Schema.Literals([\n    \"browser-session-cookie\",\n    \"bearer-access-token\",\n    \"bearer-session-token\",\n  ]),\n  client: AuthSessionClientMetadataRecord,\n  issuedAt: Schema.DateTimeUtcFromString,\n  expiresAt: Schema.DateTimeUtcFromString,\n});\nexport type CreateAuthSessionInput = typeof CreateAuthSessionInput.Type;\n\nexport const GetAuthSessionByIdInput = Schema.Struct({\n  sessionId: AuthSessionId,\n});\nexport type GetAuthSessionByIdInput = typeof GetAuthSessionByIdInput.Type;\n\nexport const ListActiveAuthSessionsInput = Schema.Struct({\n  now: Schema.DateTimeUtcFromString,\n});\nexport type ListActiveAuthSessionsInput = typeof ListActiveAuthSessionsInput.Type;\n\nexport const RevokeAuthSessionInput = Schema.Struct({\n  sessionId: AuthSessionId,\n  revokedAt: Schema.DateTimeUtcFromString,\n});\nexport type RevokeAuthSessionInput = typeof RevokeAuthSessionInput.Type;\n\nexport const RevokeOtherAuthSessionsInput = Schema.Struct({\n  currentSessionId: AuthSessionId,\n  revokedAt: Schema.DateTimeUtcFromString,\n});\nexport type RevokeOtherAuthSessionsInput = typeof RevokeOtherAuthSessionsInput.Type;\n\nexport const SetAuthSessionLastConnectedAtInput = Schema.Struct({\n  sessionId: AuthSessionId,\n  lastConnectedAt: Schema.DateTimeUtcFromString,\n});\nexport type SetAuthSessionLastConnectedAtInput = typeof SetAuthSessionLastConnectedAtInput.Type;\n\nexport interface AuthSessionRepositoryShape {\n  readonly create: (\n    input: CreateAuthSessionInput,\n  ) => Effect.Effect<void, AuthSessionRepositoryError>;\n  readonly getById: (\n    input: GetAuthSessionByIdInput,\n  ) => Effect.Effect<Option.Option<AuthSessionRecord>, AuthSessionRepositoryError>;\n  readonly listActive: (\n    input: ListActiveAuthSessionsInput,\n  ) => Effect.Effect<ReadonlyArray<AuthSessionRecord>, AuthSessionRepositoryError>;\n  readonly revoke: (\n    input: RevokeAuthSessionInput,\n  ) => Effect.Effect<boolean, AuthSessionRepositoryError>;\n  readonly revokeAllExcept: (\n    input: RevokeOtherAuthSessionsInput,\n  ) => Effect.Effect<ReadonlyArray<AuthSessionId>, AuthSessionRepositoryError>;\n  readonly setLastConnectedAt: (\n    input: SetAuthSessionLastConnectedAtInput,\n  ) => Effect.Effect<void, AuthSessionRepositoryError>;\n}\n\nexport class AuthSessionRepository extends Context.Service<\n  AuthSessionRepository,\n  AuthSessionRepositoryShape\n>()(\"salchi/persistence/Services/AuthSessions/AuthSessionRepository\") {}\n","import { AuthSessionId } from \"@salchi/contracts\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  toPersistenceDecodeError,\n  toPersistenceSqlError,\n  type AuthSessionRepositoryError,\n} from \"../Errors.ts\";\nimport {\n  AuthSessionRecord,\n  AuthSessionRepository,\n  type AuthSessionRepositoryShape,\n  CreateAuthSessionInput,\n  GetAuthSessionByIdInput,\n  ListActiveAuthSessionsInput,\n  RevokeAuthSessionInput,\n  RevokeOtherAuthSessionsInput,\n  SetAuthSessionLastConnectedAtInput,\n} from \"../Services/AuthSessions.ts\";\n\nconst AuthSessionDbRow = Schema.Struct({\n  sessionId: AuthSessionId,\n  subject: Schema.String,\n  role: Schema.Literals([\"owner\", \"client\"]),\n  method: Schema.Literals([\n    \"browser-session-cookie\",\n    \"bearer-access-token\",\n    \"bearer-session-token\",\n  ]),\n  clientLabel: Schema.NullOr(Schema.String),\n  clientIpAddress: Schema.NullOr(Schema.String),\n  clientUserAgent: Schema.NullOr(Schema.String),\n  clientDeviceType: Schema.Literals([\"desktop\", \"mobile\", \"tablet\", \"bot\", \"unknown\"]),\n  clientOs: Schema.NullOr(Schema.String),\n  clientBrowser: Schema.NullOr(Schema.String),\n  issuedAt: Schema.DateTimeUtcFromString,\n  expiresAt: Schema.DateTimeUtcFromString,\n  lastConnectedAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n  revokedAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n});\n\nfunction toAuthSessionRecord(row: typeof AuthSessionDbRow.Type): AuthSessionRecord {\n  return {\n    sessionId: row.sessionId,\n    subject: row.subject,\n    role: row.role,\n    method: row.method,\n    client: {\n      label: row.clientLabel,\n      ipAddress: row.clientIpAddress,\n      userAgent: row.clientUserAgent,\n      deviceType: row.clientDeviceType,\n      os: row.clientOs,\n      browser: row.clientBrowser,\n    },\n    issuedAt: row.issuedAt,\n    expiresAt: row.expiresAt,\n    lastConnectedAt: row.lastConnectedAt,\n    revokedAt: row.revokedAt,\n  };\n}\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown): AuthSessionRepositoryError =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeAuthSessionRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const createSessionRow = SqlSchema.void({\n    Request: CreateAuthSessionInput,\n    execute: (input) =>\n      sql`\n        INSERT INTO auth_sessions (\n          session_id,\n          subject,\n          role,\n          method,\n          client_label,\n          client_ip_address,\n          client_user_agent,\n          client_device_type,\n          client_os,\n          client_browser,\n          issued_at,\n          expires_at,\n          revoked_at\n        )\n        VALUES (\n          ${input.sessionId},\n          ${input.subject},\n          ${input.role},\n          ${input.method},\n          ${input.client.label},\n          ${input.client.ipAddress},\n          ${input.client.userAgent},\n          ${input.client.deviceType},\n          ${input.client.os},\n          ${input.client.browser},\n          ${input.issuedAt},\n          ${input.expiresAt},\n          NULL\n        )\n      `,\n  });\n\n  const getSessionRowById = SqlSchema.findOneOption({\n    Request: GetAuthSessionByIdInput,\n    Result: AuthSessionDbRow,\n    execute: ({ sessionId }) =>\n      sql`\n        SELECT\n          session_id AS \"sessionId\",\n          subject AS \"subject\",\n          role AS \"role\",\n          method AS \"method\",\n          client_label AS \"clientLabel\",\n          client_ip_address AS \"clientIpAddress\",\n          client_user_agent AS \"clientUserAgent\",\n          client_device_type AS \"clientDeviceType\",\n          client_os AS \"clientOs\",\n          client_browser AS \"clientBrowser\",\n          issued_at AS \"issuedAt\",\n          expires_at AS \"expiresAt\",\n          last_connected_at AS \"lastConnectedAt\",\n          revoked_at AS \"revokedAt\"\n        FROM auth_sessions\n        WHERE session_id = ${sessionId}\n      `,\n  });\n\n  const listActiveSessionRows = SqlSchema.findAll({\n    Request: ListActiveAuthSessionsInput,\n    Result: AuthSessionDbRow,\n    execute: ({ now }) =>\n      sql`\n        SELECT\n          session_id AS \"sessionId\",\n          subject AS \"subject\",\n          role AS \"role\",\n          method AS \"method\",\n          client_label AS \"clientLabel\",\n          client_ip_address AS \"clientIpAddress\",\n          client_user_agent AS \"clientUserAgent\",\n          client_device_type AS \"clientDeviceType\",\n          client_os AS \"clientOs\",\n          client_browser AS \"clientBrowser\",\n          issued_at AS \"issuedAt\",\n          expires_at AS \"expiresAt\",\n          last_connected_at AS \"lastConnectedAt\",\n          revoked_at AS \"revokedAt\"\n        FROM auth_sessions\n        WHERE revoked_at IS NULL\n          AND expires_at > ${now}\n        ORDER BY issued_at DESC, session_id DESC\n      `,\n  });\n\n  const setLastConnectedAtRow = SqlSchema.void({\n    Request: SetAuthSessionLastConnectedAtInput,\n    execute: ({ sessionId, lastConnectedAt }) =>\n      sql`\n        UPDATE auth_sessions\n        SET last_connected_at = ${lastConnectedAt}\n        WHERE session_id = ${sessionId}\n          AND revoked_at IS NULL\n      `,\n  });\n\n  const revokeSessionRows = SqlSchema.findAll({\n    Request: RevokeAuthSessionInput,\n    Result: Schema.Struct({ sessionId: AuthSessionId }),\n    execute: ({ sessionId, revokedAt }) =>\n      sql`\n        UPDATE auth_sessions\n        SET revoked_at = ${revokedAt}\n        WHERE session_id = ${sessionId}\n          AND revoked_at IS NULL\n        RETURNING session_id AS \"sessionId\"\n      `,\n  });\n\n  const revokeOtherSessionRows = SqlSchema.findAll({\n    Request: RevokeOtherAuthSessionsInput,\n    Result: Schema.Struct({ sessionId: AuthSessionId }),\n    execute: ({ currentSessionId, revokedAt }) =>\n      sql`\n        UPDATE auth_sessions\n        SET revoked_at = ${revokedAt}\n        WHERE session_id <> ${currentSessionId}\n          AND revoked_at IS NULL\n        RETURNING session_id AS \"sessionId\"\n      `,\n  });\n\n  const create: AuthSessionRepositoryShape[\"create\"] = (input) =>\n    createSessionRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthSessionRepository.create:query\",\n          \"AuthSessionRepository.create:encodeRequest\",\n        ),\n      ),\n    );\n\n  const getById: AuthSessionRepositoryShape[\"getById\"] = (input) =>\n    getSessionRowById(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthSessionRepository.getById:query\",\n          \"AuthSessionRepository.getById:decodeRow\",\n        ),\n      ),\n      Effect.flatMap((rowOption) =>\n        Option.match(rowOption, {\n          onNone: () => Effect.succeed(Option.none()),\n          onSome: (row) => Effect.succeed(Option.some(toAuthSessionRecord(row))),\n        }),\n      ),\n    );\n\n  const listActive: AuthSessionRepositoryShape[\"listActive\"] = (input) =>\n    listActiveSessionRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthSessionRepository.listActive:query\",\n          \"AuthSessionRepository.listActive:decodeRows\",\n        ),\n      ),\n      Effect.flatMap((rows) => Effect.succeed(rows.map((row) => toAuthSessionRecord(row)))),\n    );\n\n  const revoke: AuthSessionRepositoryShape[\"revoke\"] = (input) =>\n    revokeSessionRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthSessionRepository.revoke:query\",\n          \"AuthSessionRepository.revoke:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) => rows.length > 0),\n    );\n\n  const revokeAllExcept: AuthSessionRepositoryShape[\"revokeAllExcept\"] = (input) =>\n    revokeOtherSessionRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthSessionRepository.revokeAllExcept:query\",\n          \"AuthSessionRepository.revokeAllExcept:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) => rows.map((row) => row.sessionId)),\n    );\n\n  const setLastConnectedAt: AuthSessionRepositoryShape[\"setLastConnectedAt\"] = (input) =>\n    setLastConnectedAtRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"AuthSessionRepository.setLastConnectedAt:query\",\n          \"AuthSessionRepository.setLastConnectedAt:encodeRequest\",\n        ),\n      ),\n    );\n\n  return {\n    create,\n    getById,\n    listActive,\n    revoke,\n    revokeAllExcept,\n    setLastConnectedAt,\n  } satisfies AuthSessionRepositoryShape;\n});\n\nexport const AuthSessionRepositoryLive = Layer.effect(\n  AuthSessionRepository,\n  makeAuthSessionRepository,\n);\n","import type {\n  AuthClientMetadata,\n  AuthClientSession,\n  AuthSessionId,\n  ServerAuthSessionMethod,\n} from \"@salchi/contracts\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\n\nexport type SessionRole = \"owner\" | \"client\";\n\nexport interface IssuedSession {\n  readonly sessionId: AuthSessionId;\n  readonly token: string;\n  readonly method: ServerAuthSessionMethod;\n  readonly client: AuthClientMetadata;\n  readonly expiresAt: DateTime.DateTime;\n  readonly role: SessionRole;\n}\n\nexport interface VerifiedSession {\n  readonly sessionId: AuthSessionId;\n  readonly token: string;\n  readonly method: ServerAuthSessionMethod;\n  readonly client: AuthClientMetadata;\n  readonly expiresAt?: DateTime.DateTime;\n  readonly subject: string;\n  readonly role: SessionRole;\n}\n\nexport type SessionCredentialChange =\n  | {\n      readonly type: \"clientUpserted\";\n      readonly clientSession: AuthClientSession;\n    }\n  | {\n      readonly type: \"clientRemoved\";\n      readonly sessionId: AuthSessionId;\n    };\n\nexport class SessionCredentialError extends Data.TaggedError(\"SessionCredentialError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\nexport interface SessionCredentialServiceShape {\n  readonly cookieName: string;\n  readonly issue: (input?: {\n    readonly ttl?: Duration.Duration;\n    readonly subject?: string;\n    readonly method?: ServerAuthSessionMethod;\n    readonly role?: SessionRole;\n    readonly client?: AuthClientMetadata;\n  }) => Effect.Effect<IssuedSession, SessionCredentialError>;\n  readonly verify: (token: string) => Effect.Effect<VerifiedSession, SessionCredentialError>;\n  readonly issueWebSocketToken: (\n    sessionId: AuthSessionId,\n    input?: {\n      readonly ttl?: Duration.Duration;\n    },\n  ) => Effect.Effect<\n    {\n      readonly token: string;\n      readonly expiresAt: DateTime.DateTime;\n    },\n    SessionCredentialError\n  >;\n  readonly verifyWebSocketToken: (\n    token: string,\n  ) => Effect.Effect<VerifiedSession, SessionCredentialError>;\n  readonly listActive: () => Effect.Effect<\n    ReadonlyArray<AuthClientSession>,\n    SessionCredentialError\n  >;\n  readonly streamChanges: Stream.Stream<SessionCredentialChange>;\n  readonly revoke: (sessionId: AuthSessionId) => Effect.Effect<boolean, SessionCredentialError>;\n  readonly revokeAllExcept: (\n    sessionId: AuthSessionId,\n  ) => Effect.Effect<number, SessionCredentialError>;\n  readonly markConnected: (sessionId: AuthSessionId) => Effect.Effect<void, never>;\n  readonly markDisconnected: (sessionId: AuthSessionId) => Effect.Effect<void, never>;\n}\n\nexport class SessionCredentialService extends Context.Service<\n  SessionCredentialService,\n  SessionCredentialServiceShape\n>()(\"salchi/auth/Services/SessionCredentialService\") {}\n","import type { AuthClientMetadata, AuthClientMetadataDeviceType } from \"@salchi/contracts\";\nimport type * as HttpServerRequest from \"effect/unstable/http/HttpServerRequest\";\nimport * as Crypto from \"node:crypto\";\n\nconst SESSION_COOKIE_NAME = \"salchi_session\";\n\nexport function resolveSessionCookieName(input: {\n  readonly mode: \"web\" | \"desktop\";\n  readonly port: number;\n}): string {\n  if (input.mode !== \"desktop\") {\n    return SESSION_COOKIE_NAME;\n  }\n\n  return `${SESSION_COOKIE_NAME}_${input.port}`;\n}\n\nexport function base64UrlEncode(input: string | Uint8Array): string {\n  const buffer = typeof input === \"string\" ? Buffer.from(input, \"utf8\") : Buffer.from(input);\n  return buffer.toString(\"base64url\");\n}\n\nexport function base64UrlDecodeUtf8(input: string): string {\n  return Buffer.from(input, \"base64url\").toString(\"utf8\");\n}\n\nexport function signPayload(payload: string, secret: Uint8Array): string {\n  return Crypto.createHmac(\"sha256\", Buffer.from(secret)).update(payload).digest(\"base64url\");\n}\n\nexport function timingSafeEqualBase64Url(left: string, right: string): boolean {\n  const leftBuffer = Buffer.from(left, \"base64url\");\n  const rightBuffer = Buffer.from(right, \"base64url\");\n  if (leftBuffer.length !== rightBuffer.length) {\n    return false;\n  }\n  return Crypto.timingSafeEqual(leftBuffer, rightBuffer);\n}\n\nfunction normalizeNonEmptyString(value: string | null | undefined): string | undefined {\n  if (typeof value !== \"string\") {\n    return undefined;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeIpAddress(value: string | null | undefined): string | undefined {\n  const normalized = normalizeNonEmptyString(value);\n  if (!normalized) {\n    return undefined;\n  }\n  return normalized.startsWith(\"::ffff:\") ? normalized.slice(\"::ffff:\".length) : normalized;\n}\n\nfunction inferDeviceType(userAgent: string | undefined): AuthClientMetadataDeviceType {\n  if (!userAgent) {\n    return \"unknown\";\n  }\n\n  const normalized = userAgent.toLowerCase();\n  if (/bot|crawler|spider|slurp|curl|wget/.test(normalized)) {\n    return \"bot\";\n  }\n  if (/ipad|tablet/.test(normalized)) {\n    return \"tablet\";\n  }\n  if (/iphone|android.+mobile|mobile/.test(normalized)) {\n    return \"mobile\";\n  }\n  return \"desktop\";\n}\n\nfunction inferBrowser(userAgent: string | undefined): string | undefined {\n  if (!userAgent) {\n    return undefined;\n  }\n  const normalized = userAgent.toLowerCase();\n  if (/edg\\//.test(normalized)) return \"Edge\";\n  if (/opr\\//.test(normalized)) return \"Opera\";\n  if (/firefox\\//.test(normalized)) return \"Firefox\";\n  if (/electron\\//.test(normalized)) return \"Electron\";\n  if (/chrome\\//.test(normalized) || /crios\\//.test(normalized)) return \"Chrome\";\n  if (/safari\\//.test(normalized) && !/chrome\\//.test(normalized)) return \"Safari\";\n  return undefined;\n}\n\nfunction inferOs(userAgent: string | undefined): string | undefined {\n  if (!userAgent) {\n    return undefined;\n  }\n  const normalized = userAgent.toLowerCase();\n  if (/iphone|ipad|ipod/.test(normalized)) return \"iOS\";\n  if (/android/.test(normalized)) return \"Android\";\n  if (/mac os x|macintosh/.test(normalized)) return \"macOS\";\n  if (/windows nt/.test(normalized)) return \"Windows\";\n  if (/linux/.test(normalized)) return \"Linux\";\n  return undefined;\n}\n\nfunction readRemoteAddressFromSource(source: unknown): string | undefined {\n  if (!source || typeof source !== \"object\") {\n    return undefined;\n  }\n\n  const candidate = source as {\n    readonly remoteAddress?: string | null;\n    readonly socket?: {\n      readonly remoteAddress?: string | null;\n    };\n  };\n\n  return normalizeIpAddress(candidate.socket?.remoteAddress ?? candidate.remoteAddress);\n}\n\nexport function deriveAuthClientMetadata(input: {\n  readonly request: HttpServerRequest.HttpServerRequest;\n  readonly label?: string;\n}): AuthClientMetadata {\n  const userAgent = normalizeNonEmptyString(input.request.headers[\"user-agent\"]);\n  const ipAddress = readRemoteAddressFromSource(input.request.source);\n  const os = inferOs(userAgent);\n  const browser = inferBrowser(userAgent);\n  return {\n    ...(input.label ? { label: input.label } : {}),\n    ...(ipAddress ? { ipAddress } : {}),\n    ...(userAgent ? { userAgent } : {}),\n    deviceType: inferDeviceType(userAgent),\n    ...(os ? { os } : {}),\n    ...(browser ? { browser } : {}),\n  };\n}\n","import { AuthSessionId, type AuthClientMetadata, type AuthClientSession } from \"@salchi/contracts\";\nimport * as Clock from \"effect/Clock\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport * as Option from \"effect/Option\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { AuthSessionRepositoryLive } from \"../../persistence/Layers/AuthSessions.ts\";\nimport { AuthSessionRepository } from \"../../persistence/Services/AuthSessions.ts\";\nimport { ServerSecretStore } from \"../Services/ServerSecretStore.ts\";\nimport {\n  SessionCredentialError,\n  SessionCredentialService,\n  type IssuedSession,\n  type SessionCredentialChange,\n  type SessionCredentialServiceShape,\n  type VerifiedSession,\n} from \"../Services/SessionCredentialService.ts\";\nimport {\n  base64UrlDecodeUtf8,\n  base64UrlEncode,\n  resolveSessionCookieName,\n  signPayload,\n  timingSafeEqualBase64Url,\n} from \"../utils.ts\";\n\nconst SIGNING_SECRET_NAME = \"server-signing-key\";\nconst DEFAULT_SESSION_TTL = Duration.days(30);\nconst DEFAULT_WEBSOCKET_TOKEN_TTL = Duration.minutes(5);\n\nconst SessionClaims = Schema.Struct({\n  v: Schema.Literal(1),\n  kind: Schema.Literal(\"session\"),\n  sid: AuthSessionId,\n  sub: Schema.String,\n  role: Schema.Literals([\"owner\", \"client\"]),\n  method: Schema.Literals([\n    \"browser-session-cookie\",\n    \"bearer-access-token\",\n    \"bearer-session-token\",\n  ]),\n  iat: Schema.Number,\n  exp: Schema.Number,\n});\ntype SessionClaims = typeof SessionClaims.Type;\n\nconst WebSocketClaims = Schema.Struct({\n  v: Schema.Literal(1),\n  kind: Schema.Literal(\"websocket\"),\n  sid: AuthSessionId,\n  iat: Schema.Number,\n  exp: Schema.Number,\n});\ntype WebSocketClaims = typeof WebSocketClaims.Type;\n\nconst decodeSessionClaims = Schema.decodeUnknownEffect(Schema.fromJsonString(SessionClaims));\nconst decodeWebSocketClaims = Schema.decodeUnknownEffect(Schema.fromJsonString(WebSocketClaims));\n\nfunction createDefaultClientMetadata(): AuthClientMetadata {\n  return {\n    deviceType: \"unknown\",\n  };\n}\n\nfunction toClientMetadata(record: {\n  readonly label: string | null;\n  readonly ipAddress: string | null;\n  readonly userAgent: string | null;\n  readonly deviceType: AuthClientMetadata[\"deviceType\"];\n  readonly os: string | null;\n  readonly browser: string | null;\n}): AuthClientMetadata {\n  return {\n    ...(record.label ? { label: record.label } : {}),\n    ...(record.ipAddress ? { ipAddress: record.ipAddress } : {}),\n    ...(record.userAgent ? { userAgent: record.userAgent } : {}),\n    deviceType: record.deviceType,\n    ...(record.os ? { os: record.os } : {}),\n    ...(record.browser ? { browser: record.browser } : {}),\n  };\n}\n\nfunction toAuthClientSession(input: Omit<AuthClientSession, \"current\">): AuthClientSession {\n  return {\n    ...input,\n    current: false,\n  };\n}\n\nexport const makeSessionCredentialService = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const serverConfig = yield* ServerConfig;\n  const secretStore = yield* ServerSecretStore;\n  const authSessions = yield* AuthSessionRepository;\n  const signingSecret = yield* secretStore.getOrCreateRandom(SIGNING_SECRET_NAME, 32);\n  const connectedSessionsRef = yield* Ref.make(new Map<string, number>());\n  const changesPubSub = yield* PubSub.unbounded<SessionCredentialChange>();\n  const cookieName = resolveSessionCookieName({\n    mode: serverConfig.mode,\n    port: serverConfig.port,\n  });\n\n  const toSessionCredentialError = (message: string) => (cause: unknown) =>\n    new SessionCredentialError({\n      message,\n      cause,\n    });\n\n  const emitUpsert = (clientSession: AuthClientSession) =>\n    PubSub.publish(changesPubSub, {\n      type: \"clientUpserted\",\n      clientSession,\n    }).pipe(Effect.asVoid);\n\n  const emitRemoved = (sessionId: AuthSessionId) =>\n    PubSub.publish(changesPubSub, {\n      type: \"clientRemoved\",\n      sessionId,\n    }).pipe(Effect.asVoid);\n\n  const loadActiveSession = (sessionId: AuthSessionId) =>\n    Effect.gen(function* () {\n      const row = yield* authSessions.getById({ sessionId });\n      if (Option.isNone(row) || row.value.revokedAt !== null) {\n        return Option.none<AuthClientSession>();\n      }\n\n      const connectedSessions = yield* Ref.get(connectedSessionsRef);\n      return Option.some(\n        toAuthClientSession({\n          sessionId: row.value.sessionId,\n          subject: row.value.subject,\n          role: row.value.role,\n          method: row.value.method,\n          client: toClientMetadata(row.value.client),\n          issuedAt: row.value.issuedAt,\n          expiresAt: row.value.expiresAt,\n          lastConnectedAt: row.value.lastConnectedAt,\n          connected: connectedSessions.has(row.value.sessionId),\n        }),\n      );\n    });\n\n  const markConnected: SessionCredentialServiceShape[\"markConnected\"] = (sessionId) =>\n    Ref.modify(connectedSessionsRef, (current) => {\n      const next = new Map(current);\n      const wasDisconnected = !next.has(sessionId);\n      next.set(sessionId, (next.get(sessionId) ?? 0) + 1);\n      return [wasDisconnected, next] as const;\n    }).pipe(\n      Effect.flatMap((wasDisconnected) =>\n        wasDisconnected\n          ? DateTime.now.pipe(\n              Effect.flatMap((lastConnectedAt) =>\n                authSessions.setLastConnectedAt({\n                  sessionId,\n                  lastConnectedAt,\n                }),\n              ),\n            )\n          : Effect.void,\n      ),\n      Effect.flatMap(() => loadActiveSession(sessionId)),\n      Effect.flatMap((session) =>\n        Option.isSome(session) ? emitUpsert(session.value) : Effect.void,\n      ),\n      Effect.catchCause((cause) =>\n        Effect.logError(\"Failed to publish connected-session auth update.\").pipe(\n          Effect.annotateLogs({\n            sessionId,\n            cause,\n          }),\n        ),\n      ),\n    );\n\n  const markDisconnected: SessionCredentialServiceShape[\"markDisconnected\"] = (sessionId) =>\n    Ref.update(connectedSessionsRef, (current) => {\n      const next = new Map(current);\n      const remaining = (next.get(sessionId) ?? 0) - 1;\n      if (remaining > 0) {\n        next.set(sessionId, remaining);\n      } else {\n        next.delete(sessionId);\n      }\n      return next;\n    }).pipe(\n      Effect.flatMap(() => loadActiveSession(sessionId)),\n      Effect.flatMap((session) =>\n        Option.isSome(session) ? emitUpsert(session.value) : Effect.void,\n      ),\n      Effect.catchCause((cause) =>\n        Effect.logError(\"Failed to publish disconnected-session auth update.\").pipe(\n          Effect.annotateLogs({\n            sessionId,\n            cause,\n          }),\n        ),\n      ),\n    );\n\n  const encodeClaims = Schema.encodeEffect(Schema.fromJsonString(SessionClaims));\n  const issue: SessionCredentialServiceShape[\"issue\"] = (input) =>\n    Effect.gen(function* () {\n      const sessionId = AuthSessionId.make(yield* crypto.randomUUIDv4);\n      const issuedAt = yield* DateTime.now;\n      const expiresAt = DateTime.add(issuedAt, {\n        milliseconds: Duration.toMillis(input?.ttl ?? DEFAULT_SESSION_TTL),\n      });\n      const claims: SessionClaims = {\n        v: 1,\n        kind: \"session\",\n        sid: sessionId,\n        sub: input?.subject ?? \"browser\",\n        role: input?.role ?? \"client\",\n        method: input?.method ?? \"browser-session-cookie\",\n        iat: issuedAt.epochMilliseconds,\n        exp: expiresAt.epochMilliseconds,\n      };\n\n      const encodedPayload = yield* encodeClaims(claims).pipe(\n        Effect.map(base64UrlEncode),\n        Effect.mapError(\n          (cause) => new SessionCredentialError({ message: \"Failed to encode claims\", cause }),\n        ),\n      );\n      const signature = signPayload(encodedPayload, signingSecret);\n      const client = input?.client ?? createDefaultClientMetadata();\n      yield* authSessions.create({\n        sessionId,\n        subject: claims.sub,\n        role: claims.role,\n        method: claims.method,\n        client: {\n          label: client.label ?? null,\n          ipAddress: client.ipAddress ?? null,\n          userAgent: client.userAgent ?? null,\n          deviceType: client.deviceType,\n          os: client.os ?? null,\n          browser: client.browser ?? null,\n        },\n        issuedAt,\n        expiresAt,\n      });\n      yield* emitUpsert(\n        toAuthClientSession({\n          sessionId,\n          subject: claims.sub,\n          role: claims.role,\n          method: claims.method,\n          client,\n          issuedAt,\n          expiresAt,\n          lastConnectedAt: null,\n          connected: false,\n        }),\n      );\n\n      return {\n        sessionId,\n        token: `${encodedPayload}.${signature}`,\n        method: claims.method,\n        client,\n        expiresAt: expiresAt,\n        role: claims.role,\n      } satisfies IssuedSession;\n    }).pipe(Effect.mapError(toSessionCredentialError(\"Failed to issue session credential.\")));\n\n  const verify: SessionCredentialServiceShape[\"verify\"] = (token) =>\n    Effect.gen(function* () {\n      const [encodedPayload, signature] = token.split(\".\");\n      if (!encodedPayload || !signature) {\n        return yield* new SessionCredentialError({\n          message: \"Malformed session token.\",\n        });\n      }\n\n      const expectedSignature = signPayload(encodedPayload, signingSecret);\n      if (!timingSafeEqualBase64Url(signature, expectedSignature)) {\n        return yield* new SessionCredentialError({\n          message: \"Invalid session token signature.\",\n        });\n      }\n\n      const claims = yield* decodeSessionClaims(base64UrlDecodeUtf8(encodedPayload)).pipe(\n        Effect.mapError(\n          (cause) =>\n            new SessionCredentialError({\n              message: \"Invalid session token payload.\",\n              cause,\n            }),\n        ),\n      );\n\n      const now = yield* Clock.currentTimeMillis;\n      if (claims.exp <= now) {\n        return yield* new SessionCredentialError({\n          message: \"Session token expired.\",\n        });\n      }\n\n      const row = yield* authSessions.getById({ sessionId: claims.sid });\n      if (Option.isNone(row)) {\n        return yield* new SessionCredentialError({\n          message: \"Unknown session token.\",\n        });\n      }\n      if (row.value.revokedAt !== null) {\n        return yield* new SessionCredentialError({\n          message: \"Session token revoked.\",\n        });\n      }\n\n      const expiresAt = DateTime.make(claims.exp);\n      if (Option.isNone(expiresAt)) {\n        return yield* new SessionCredentialError({\n          message: \"Invalid `exp` claim\",\n        });\n      }\n\n      return {\n        sessionId: claims.sid,\n        token,\n        method: claims.method,\n        client: toClientMetadata(row.value.client),\n        expiresAt: expiresAt.value,\n        subject: claims.sub,\n        role: claims.role,\n      } satisfies VerifiedSession;\n    }).pipe(\n      Effect.mapError((cause) =>\n        cause instanceof SessionCredentialError\n          ? cause\n          : new SessionCredentialError({\n              message: \"Failed to verify session credential.\",\n              cause,\n            }),\n      ),\n    );\n\n  const encodeWsClaims = Schema.encodeEffect(Schema.fromJsonString(WebSocketClaims));\n  const issueWebSocketToken: SessionCredentialServiceShape[\"issueWebSocketToken\"] = (\n    sessionId,\n    input,\n  ) =>\n    Effect.gen(function* () {\n      const issuedAt = yield* DateTime.now;\n      const expiresAt = DateTime.add(issuedAt, {\n        milliseconds: Duration.toMillis(input?.ttl ?? DEFAULT_WEBSOCKET_TOKEN_TTL),\n      });\n      const claims: WebSocketClaims = {\n        v: 1,\n        kind: \"websocket\",\n        sid: sessionId,\n        iat: issuedAt.epochMilliseconds,\n        exp: expiresAt.epochMilliseconds,\n      };\n      const encodedPayload = yield* encodeWsClaims(claims).pipe(\n        Effect.map(base64UrlEncode),\n        Effect.mapError(\n          (cause) => new SessionCredentialError({ message: \"Failed to encode claims\", cause }),\n        ),\n      );\n      const signature = signPayload(encodedPayload, signingSecret);\n      return {\n        token: `${encodedPayload}.${signature}`,\n        expiresAt,\n      };\n    }).pipe(Effect.mapError(toSessionCredentialError(\"Failed to issue websocket token.\")));\n\n  const verifyWebSocketToken: SessionCredentialServiceShape[\"verifyWebSocketToken\"] = (token) =>\n    Effect.gen(function* () {\n      const [encodedPayload, signature] = token.split(\".\");\n      if (!encodedPayload || !signature) {\n        return yield* new SessionCredentialError({\n          message: \"Malformed websocket token.\",\n        });\n      }\n\n      const expectedSignature = signPayload(encodedPayload, signingSecret);\n      if (!timingSafeEqualBase64Url(signature, expectedSignature)) {\n        return yield* new SessionCredentialError({\n          message: \"Invalid websocket token signature.\",\n        });\n      }\n\n      const claims = yield* decodeWebSocketClaims(base64UrlDecodeUtf8(encodedPayload)).pipe(\n        Effect.mapError(\n          (cause) =>\n            new SessionCredentialError({\n              message: \"Invalid websocket token payload.\",\n              cause,\n            }),\n        ),\n      );\n\n      const now = yield* Clock.currentTimeMillis;\n      if (claims.exp <= now) {\n        return yield* new SessionCredentialError({\n          message: \"Websocket token expired.\",\n        });\n      }\n\n      const row = yield* authSessions.getById({ sessionId: claims.sid });\n      if (Option.isNone(row)) {\n        return yield* new SessionCredentialError({\n          message: \"Unknown websocket session.\",\n        });\n      }\n      if (row.value.expiresAt.epochMilliseconds <= now) {\n        return yield* new SessionCredentialError({\n          message: \"Websocket session expired.\",\n        });\n      }\n      if (row.value.revokedAt !== null) {\n        return yield* new SessionCredentialError({\n          message: \"Websocket session revoked.\",\n        });\n      }\n\n      return {\n        sessionId: row.value.sessionId,\n        token,\n        method: row.value.method,\n        client: toClientMetadata(row.value.client),\n        expiresAt: row.value.expiresAt,\n        subject: row.value.subject,\n        role: row.value.role,\n      } satisfies VerifiedSession;\n    }).pipe(\n      Effect.mapError((cause) =>\n        cause instanceof SessionCredentialError\n          ? cause\n          : new SessionCredentialError({\n              message: \"Failed to verify websocket token.\",\n              cause,\n            }),\n      ),\n    );\n\n  const listActive: SessionCredentialServiceShape[\"listActive\"] = () =>\n    Effect.gen(function* () {\n      const now = yield* DateTime.now;\n      const connectedSessions = yield* Ref.get(connectedSessionsRef);\n      const rows = yield* authSessions.listActive({ now });\n\n      return rows.map((row) =>\n        toAuthClientSession({\n          sessionId: row.sessionId,\n          subject: row.subject,\n          role: row.role,\n          method: row.method,\n          client: toClientMetadata(row.client),\n          issuedAt: row.issuedAt,\n          expiresAt: row.expiresAt,\n          lastConnectedAt: row.lastConnectedAt,\n          connected: connectedSessions.has(row.sessionId),\n        }),\n      );\n    }).pipe(Effect.mapError(toSessionCredentialError(\"Failed to list active sessions.\")));\n\n  const revoke: SessionCredentialServiceShape[\"revoke\"] = (sessionId) =>\n    Effect.gen(function* () {\n      const revokedAt = yield* DateTime.now;\n      const revoked = yield* authSessions.revoke({\n        sessionId,\n        revokedAt,\n      });\n      if (revoked) {\n        yield* Ref.update(connectedSessionsRef, (current) => {\n          const next = new Map(current);\n          next.delete(sessionId);\n          return next;\n        });\n        yield* emitRemoved(sessionId);\n      }\n      return revoked;\n    }).pipe(Effect.mapError(toSessionCredentialError(\"Failed to revoke session.\")));\n\n  const revokeAllExcept: SessionCredentialServiceShape[\"revokeAllExcept\"] = (sessionId) =>\n    Effect.gen(function* () {\n      const revokedAt = yield* DateTime.now;\n      const revokedSessionIds = yield* authSessions.revokeAllExcept({\n        currentSessionId: sessionId,\n        revokedAt,\n      });\n      if (revokedSessionIds.length > 0) {\n        yield* Ref.update(connectedSessionsRef, (current) => {\n          const next = new Map(current);\n          for (const revokedSessionId of revokedSessionIds) {\n            next.delete(revokedSessionId);\n          }\n          return next;\n        });\n        yield* Effect.forEach(\n          revokedSessionIds,\n          (revokedSessionId) => emitRemoved(revokedSessionId),\n          {\n            concurrency: \"unbounded\",\n            discard: true,\n          },\n        );\n      }\n      return revokedSessionIds.length;\n    }).pipe(Effect.mapError(toSessionCredentialError(\"Failed to revoke other sessions.\")));\n\n  return {\n    cookieName,\n    issue,\n    verify,\n    issueWebSocketToken,\n    verifyWebSocketToken,\n    listActive,\n    get streamChanges() {\n      return Stream.fromPubSub(changesPubSub);\n    },\n    revoke,\n    revokeAllExcept,\n    markConnected,\n    markDisconnected,\n  } satisfies SessionCredentialServiceShape;\n});\n\nexport const SessionCredentialServiceLive = Layer.effect(\n  SessionCredentialService,\n  makeSessionCredentialService,\n).pipe(Layer.provideMerge(AuthSessionRepositoryLive));\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS orchestration_events (\n      sequence INTEGER PRIMARY KEY AUTOINCREMENT,\n      event_id TEXT NOT NULL UNIQUE,\n      aggregate_kind TEXT NOT NULL,\n      stream_id TEXT NOT NULL,\n      stream_version INTEGER NOT NULL,\n      event_type TEXT NOT NULL,\n      occurred_at TEXT NOT NULL,\n      command_id TEXT,\n      causation_event_id TEXT,\n      correlation_id TEXT,\n      actor_kind TEXT NOT NULL,\n      payload_json TEXT NOT NULL,\n      metadata_json TEXT NOT NULL\n    )\n  `;\n\n  yield* sql`\n    CREATE UNIQUE INDEX IF NOT EXISTS idx_orch_events_stream_version\n    ON orchestration_events(aggregate_kind, stream_id, stream_version)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_orch_events_stream_sequence\n    ON orchestration_events(aggregate_kind, stream_id, sequence)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_orch_events_command_id\n    ON orchestration_events(command_id)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_orch_events_correlation_id\n    ON orchestration_events(correlation_id)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS orchestration_command_receipts (\n      command_id TEXT PRIMARY KEY,\n      aggregate_kind TEXT NOT NULL,\n      aggregate_id TEXT NOT NULL,\n      accepted_at TEXT NOT NULL,\n      result_sequence INTEGER NOT NULL,\n      status TEXT NOT NULL,\n      error TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_orch_command_receipts_aggregate\n    ON orchestration_command_receipts(aggregate_kind, aggregate_id)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_orch_command_receipts_sequence\n    ON orchestration_command_receipts(result_sequence)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS checkpoint_diff_blobs (\n      thread_id TEXT NOT NULL,\n      from_turn_count INTEGER NOT NULL,\n      to_turn_count INTEGER NOT NULL,\n      diff TEXT NOT NULL,\n      created_at TEXT NOT NULL,\n      UNIQUE (thread_id, from_turn_count, to_turn_count)\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_checkpoint_diff_blobs_thread_to_turn\n    ON checkpoint_diff_blobs(thread_id, to_turn_count)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS provider_session_runtime (\n      thread_id TEXT PRIMARY KEY,\n      provider_name TEXT NOT NULL,\n      adapter_key TEXT NOT NULL,\n      runtime_mode TEXT NOT NULL DEFAULT 'full-access',\n      status TEXT NOT NULL,\n      last_seen_at TEXT NOT NULL,\n      resume_cursor_json TEXT,\n      runtime_payload_json TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_provider_session_runtime_status\n    ON provider_session_runtime(status)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_provider_session_runtime_provider\n    ON provider_session_runtime(provider_name)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_projects (\n      project_id TEXT PRIMARY KEY,\n      title TEXT NOT NULL,\n      workspace_root TEXT NOT NULL,\n      default_model TEXT,\n      scripts_json TEXT NOT NULL,\n      created_at TEXT NOT NULL,\n      updated_at TEXT NOT NULL,\n      deleted_at TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_threads (\n      thread_id TEXT PRIMARY KEY,\n      project_id TEXT NOT NULL,\n      title TEXT NOT NULL,\n      model TEXT NOT NULL,\n      branch TEXT,\n      worktree_path TEXT,\n      latest_turn_id TEXT,\n      created_at TEXT NOT NULL,\n      updated_at TEXT NOT NULL,\n      deleted_at TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_thread_messages (\n      message_id TEXT PRIMARY KEY,\n      thread_id TEXT NOT NULL,\n      turn_id TEXT,\n      role TEXT NOT NULL,\n      text TEXT NOT NULL,\n      is_streaming INTEGER NOT NULL,\n      created_at TEXT NOT NULL,\n      updated_at TEXT NOT NULL\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_thread_activities (\n      activity_id TEXT PRIMARY KEY,\n      thread_id TEXT NOT NULL,\n      turn_id TEXT,\n      tone TEXT NOT NULL,\n      kind TEXT NOT NULL,\n      summary TEXT NOT NULL,\n      payload_json TEXT NOT NULL,\n      created_at TEXT NOT NULL\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_thread_sessions (\n      thread_id TEXT PRIMARY KEY,\n      status TEXT NOT NULL,\n      provider_name TEXT,\n      provider_session_id TEXT,\n      provider_thread_id TEXT,\n      active_turn_id TEXT,\n      last_error TEXT,\n      updated_at TEXT NOT NULL\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_turns (\n      row_id INTEGER PRIMARY KEY AUTOINCREMENT,\n      thread_id TEXT NOT NULL,\n      turn_id TEXT,\n      pending_message_id TEXT,\n      assistant_message_id TEXT,\n      state TEXT NOT NULL,\n      requested_at TEXT NOT NULL,\n      started_at TEXT,\n      completed_at TEXT,\n      checkpoint_turn_count INTEGER,\n      checkpoint_ref TEXT,\n      checkpoint_status TEXT,\n      checkpoint_files_json TEXT NOT NULL,\n      UNIQUE (thread_id, turn_id),\n      UNIQUE (thread_id, checkpoint_turn_count)\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_pending_approvals (\n      request_id TEXT PRIMARY KEY,\n      thread_id TEXT NOT NULL,\n      turn_id TEXT,\n      status TEXT NOT NULL,\n      decision TEXT,\n      created_at TEXT NOT NULL,\n      resolved_at TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_state (\n      projector TEXT PRIMARY KEY,\n      last_applied_sequence INTEGER NOT NULL,\n      updated_at TEXT NOT NULL\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_projects_updated_at\n    ON projection_projects(updated_at)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_project_id\n    ON projection_threads(project_id)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_messages_thread_created\n    ON projection_thread_messages(thread_id, created_at)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_activities_thread_created\n    ON projection_thread_activities(thread_id, created_at)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_sessions_provider_session\n    ON projection_thread_sessions(provider_session_id)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_turns_thread_requested\n    ON projection_turns(thread_id, requested_at)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_turns_thread_checkpoint_completed\n    ON projection_turns(thread_id, checkpoint_turn_count, completed_at)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_pending_approvals_thread_status\n    ON projection_pending_approvals(thread_id, status)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nconst DEFAULT_RUNTIME_MODE = \"full-access\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n      ALTER TABLE projection_thread_sessions\n      ADD COLUMN runtime_mode TEXT NOT NULL DEFAULT 'full-access'\n    `;\n\n  yield* sql`\n    UPDATE projection_thread_sessions\n    SET runtime_mode = ${DEFAULT_RUNTIME_MODE}\n    WHERE runtime_mode IS NULL\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_thread_messages\n    ADD COLUMN attachments_json TEXT\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_thread_activities\n    ADD COLUMN sequence INTEGER\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_activities_thread_sequence\n    ON projection_thread_activities(thread_id, sequence)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.asVoid(SqlClient.SqlClient);\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN runtime_mode TEXT NOT NULL DEFAULT 'full-access'\n  `;\n\n  yield* sql`\n    UPDATE projection_threads\n    SET runtime_mode = 'full-access'\n    WHERE runtime_mode IS NULL\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_set(payload_json, '$.runtimeMode', 'full-access')\n    WHERE event_type = 'thread.created'\n      AND json_type(payload_json, '$.runtimeMode') IS NULL\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN interaction_mode TEXT NOT NULL DEFAULT 'default'\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_thread_proposed_plans (\n      plan_id TEXT PRIMARY KEY,\n      thread_id TEXT NOT NULL,\n      turn_id TEXT,\n      plan_markdown TEXT NOT NULL,\n      created_at TEXT NOT NULL,\n      updated_at TEXT NOT NULL\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_proposed_plans_thread_created\n    ON projection_thread_proposed_plans(thread_id, created_at)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_thread_proposed_plans\n    ADD COLUMN implemented_at TEXT\n  `;\n\n  yield* sql`\n    ALTER TABLE projection_thread_proposed_plans\n    ADD COLUMN implementation_thread_id TEXT\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_turns\n    ADD COLUMN source_proposed_plan_thread_id TEXT\n  `;\n\n  yield* sql`\n    ALTER TABLE projection_turns\n    ADD COLUMN source_proposed_plan_id TEXT\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_projects\n    ADD COLUMN default_model_selection_json TEXT\n  `;\n\n  yield* sql`\n    UPDATE projection_projects\n    SET default_model_selection_json = CASE\n      WHEN default_model IS NULL THEN NULL\n      ELSE json_object(\n        'provider',\n        CASE\n          WHEN lower(default_model) LIKE '%claude%' THEN 'claudeAgent'\n          ELSE 'codex'\n        END,\n        'model',\n        default_model\n      )\n    END\n    WHERE default_model_selection_json IS NULL\n  `;\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN model_selection_json TEXT\n  `;\n\n  yield* sql`\n    UPDATE projection_threads\n    SET model_selection_json = json_object(\n      'provider',\n      COALESCE(\n        (\n          SELECT provider_name\n          FROM projection_thread_sessions\n          WHERE projection_thread_sessions.thread_id = projection_threads.thread_id\n        ),\n        CASE\n          WHEN lower(model) LIKE '%claude%' THEN 'claudeAgent'\n          ELSE 'codex'\n        END,\n        'codex'\n      ),\n      'model',\n      model\n    )\n    WHERE model_selection_json IS NULL\n  `;\n\n  yield* sql`\n    ALTER TABLE projection_projects\n    DROP COLUMN default_model\n  `;\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    DROP COLUMN model\n  `;\n\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = CASE\n      WHEN json_type(payload_json, '$.defaultModel') = 'null' THEN json_remove(\n        json_set(payload_json, '$.defaultModelSelection', json('null')),\n        '$.defaultProvider',\n        '$.defaultModel',\n        '$.defaultModelOptions'\n      )\n      ELSE json_remove(\n        json_set(\n          payload_json,\n          '$.defaultModelSelection',\n          json_patch(\n            json_object(\n              'provider',\n              CASE\n                WHEN json_extract(payload_json, '$.defaultProvider') IS NOT NULL\n                THEN json_extract(payload_json, '$.defaultProvider')\n                WHEN lower(json_extract(payload_json, '$.defaultModel')) LIKE '%claude%'\n                THEN 'claudeAgent'\n                ELSE 'codex'\n              END,\n              'model',\n              json_extract(payload_json, '$.defaultModel')\n            ),\n              CASE\n                WHEN json_type(payload_json, '$.defaultModelOptions') IS NULL THEN '{}'\n                WHEN json_type(payload_json, '$.defaultModelOptions.codex') IS NOT NULL\n                  OR json_type(payload_json, '$.defaultModelOptions.claudeAgent') IS NOT NULL\n                THEN CASE\n                  WHEN (\n                  CASE\n                    WHEN json_extract(payload_json, '$.defaultProvider') IS NOT NULL\n                    THEN json_extract(payload_json, '$.defaultProvider')\n                    WHEN lower(json_extract(payload_json, '$.defaultModel')) LIKE '%claude%'\n                    THEN 'claudeAgent'\n                    ELSE 'codex'\n                    END\n                  ) = 'claudeAgent'\n                  THEN CASE\n                    WHEN json_type(payload_json, '$.defaultModelOptions.claudeAgent') IS NOT NULL\n                    THEN json_object(\n                      'options',\n                      json(json_extract(payload_json, '$.defaultModelOptions.claudeAgent'))\n                    )\n                    WHEN json_type(payload_json, '$.defaultModelOptions.codex') IS NOT NULL\n                    THEN json_object(\n                      'options',\n                      json(json_extract(payload_json, '$.defaultModelOptions.codex'))\n                    )\n                    ELSE '{}'\n                  END\n                  ELSE CASE\n                    WHEN json_type(payload_json, '$.defaultModelOptions.codex') IS NOT NULL\n                    THEN json_object(\n                      'options',\n                      json(json_extract(payload_json, '$.defaultModelOptions.codex'))\n                    )\n                    WHEN json_type(payload_json, '$.defaultModelOptions.claudeAgent') IS NOT NULL\n                    THEN json_object(\n                      'options',\n                      json(json_extract(payload_json, '$.defaultModelOptions.claudeAgent'))\n                    )\n                    ELSE '{}'\n                  END\n                END\n              ELSE json_object(\n                'options',\n                json(json_extract(payload_json, '$.defaultModelOptions'))\n              )\n            END\n          )\n        ),\n        '$.defaultProvider',\n        '$.defaultModel',\n        '$.defaultModelOptions'\n      )\n    END\n    WHERE event_type IN ('project.created', 'project.meta-updated')\n      AND json_type(payload_json, '$.defaultModelSelection') IS NULL\n      AND json_type(payload_json, '$.defaultModel') IS NOT NULL\n  `;\n\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_remove(\n      json_set(\n        payload_json,\n        '$.modelSelection',\n        json_patch(\n          json_object(\n            'provider',\n            CASE\n              WHEN json_extract(payload_json, '$.provider') IS NOT NULL\n              THEN json_extract(payload_json, '$.provider')\n              WHEN lower(json_extract(payload_json, '$.model')) LIKE '%claude%'\n              THEN 'claudeAgent'\n              ELSE 'codex'\n            END,\n            'model',\n            json_extract(payload_json, '$.model')\n          ),\n          CASE\n            WHEN json_type(payload_json, '$.modelOptions') IS NULL THEN '{}'\n            WHEN json_type(payload_json, '$.modelOptions.codex') IS NOT NULL\n              OR json_type(payload_json, '$.modelOptions.claudeAgent') IS NOT NULL\n            THEN CASE\n              WHEN (\n                CASE\n                  WHEN json_extract(payload_json, '$.provider') IS NOT NULL\n                  THEN json_extract(payload_json, '$.provider')\n                  WHEN lower(json_extract(payload_json, '$.model')) LIKE '%claude%'\n                  THEN 'claudeAgent'\n                  ELSE 'codex'\n                  END\n              ) = 'claudeAgent'\n              THEN CASE\n                WHEN json_type(payload_json, '$.modelOptions.claudeAgent') IS NOT NULL\n                THEN json_object(\n                  'options',\n                  json(json_extract(payload_json, '$.modelOptions.claudeAgent'))\n                )\n                WHEN json_type(payload_json, '$.modelOptions.codex') IS NOT NULL\n                THEN json_object(\n                  'options',\n                  json(json_extract(payload_json, '$.modelOptions.codex'))\n                )\n                ELSE '{}'\n              END\n              ELSE CASE\n                WHEN json_type(payload_json, '$.modelOptions.codex') IS NOT NULL\n                THEN json_object(\n                  'options',\n                  json(json_extract(payload_json, '$.modelOptions.codex'))\n                )\n                WHEN json_type(payload_json, '$.modelOptions.claudeAgent') IS NOT NULL\n                THEN json_object(\n                  'options',\n                  json(json_extract(payload_json, '$.modelOptions.claudeAgent'))\n                )\n                ELSE '{}'\n              END\n            END\n            ELSE json_object('options', json(json_extract(payload_json, '$.modelOptions')))\n          END\n        )\n      ),\n      '$.provider',\n      '$.model',\n      '$.modelOptions'\n    )\n    WHERE event_type IN ('thread.created', 'thread.meta-updated', 'thread.turn-start-requested')\n      AND json_type(payload_json, '$.modelSelection') IS NULL\n      AND json_type(payload_json, '$.model') IS NOT NULL\n  `;\n\n  // Backfill thread.created events that predate the model field entirely\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_set(\n      payload_json,\n      '$.modelSelection',\n      json(json_object('provider', 'codex', 'model', 'gpt-5.4'))\n    )\n    WHERE event_type = 'thread.created'\n      AND json_type(payload_json, '$.modelSelection') IS NULL\n      AND json_type(payload_json, '$.model') IS NULL\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n  const columns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(projection_threads)\n  `;\n\n  if (columns.some((column) => column.name === \"archived_at\")) {\n    return;\n  }\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN archived_at TEXT\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_project_archived_at\n    ON projection_threads(project_id, archived_at)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_projects_workspace_root_deleted_at\n    ON projection_projects(workspace_root, deleted_at)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_project_deleted_created\n    ON projection_threads(project_id, deleted_at, created_at)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS auth_pairing_links (\n      id TEXT PRIMARY KEY,\n      credential TEXT NOT NULL UNIQUE,\n      method TEXT NOT NULL,\n      role TEXT NOT NULL,\n      subject TEXT NOT NULL,\n      created_at TEXT NOT NULL,\n      expires_at TEXT NOT NULL,\n      consumed_at TEXT,\n      revoked_at TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_auth_pairing_links_active\n    ON auth_pairing_links(revoked_at, consumed_at, expires_at)\n  `;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS auth_sessions (\n      session_id TEXT PRIMARY KEY,\n      subject TEXT NOT NULL,\n      role TEXT NOT NULL,\n      method TEXT NOT NULL,\n      issued_at TEXT NOT NULL,\n      expires_at TEXT NOT NULL,\n      revoked_at TEXT\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_auth_sessions_active\n    ON auth_sessions(revoked_at, expires_at, issued_at)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const pairingLinkColumns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(auth_pairing_links)\n  `;\n  if (!pairingLinkColumns.some((column) => column.name === \"label\")) {\n    yield* sql`\n      ALTER TABLE auth_pairing_links\n      ADD COLUMN label TEXT\n    `;\n  }\n\n  const sessionColumns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(auth_sessions)\n  `;\n\n  if (!sessionColumns.some((column) => column.name === \"client_label\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN client_label TEXT\n    `;\n  }\n\n  if (!sessionColumns.some((column) => column.name === \"client_ip_address\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN client_ip_address TEXT\n    `;\n  }\n\n  if (!sessionColumns.some((column) => column.name === \"client_user_agent\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN client_user_agent TEXT\n    `;\n  }\n\n  if (!sessionColumns.some((column) => column.name === \"client_device_type\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN client_device_type TEXT NOT NULL DEFAULT 'unknown'\n    `;\n  }\n\n  if (!sessionColumns.some((column) => column.name === \"client_os\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN client_os TEXT\n    `;\n  }\n\n  if (!sessionColumns.some((column) => column.name === \"client_browser\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN client_browser TEXT\n    `;\n  }\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const sessionColumns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(auth_sessions)\n  `;\n\n  if (!sessionColumns.some((column) => column.name === \"last_connected_at\")) {\n    yield* sql`\n      ALTER TABLE auth_sessions\n      ADD COLUMN last_connected_at TEXT\n    `;\n  }\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN latest_user_message_at TEXT\n  `.pipe(Effect.catch(() => Effect.void));\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN pending_approval_count INTEGER NOT NULL DEFAULT 0\n  `.pipe(Effect.catch(() => Effect.void));\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN pending_user_input_count INTEGER NOT NULL DEFAULT 0\n  `.pipe(Effect.catch(() => Effect.void));\n\n  yield* sql`\n    ALTER TABLE projection_threads\n    ADD COLUMN has_actionable_proposed_plan INTEGER NOT NULL DEFAULT 0\n  `.pipe(Effect.catch(() => Effect.void));\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    INSERT OR IGNORE INTO projection_pending_approvals (\n      request_id,\n      thread_id,\n      turn_id,\n      status,\n      decision,\n      created_at,\n      resolved_at\n    )\n    SELECT\n      requested.request_id,\n      requested.thread_id,\n      requested.turn_id,\n      'pending',\n      NULL,\n      requested.created_at,\n      NULL\n    FROM (\n      SELECT\n        json_extract(payload_json, '$.requestId') AS request_id,\n        thread_id,\n        turn_id,\n        created_at,\n        ROW_NUMBER() OVER (\n          PARTITION BY json_extract(payload_json, '$.requestId')\n          ORDER BY created_at ASC, activity_id ASC\n        ) AS row_number\n      FROM projection_thread_activities\n      WHERE kind = 'approval.requested'\n        AND json_extract(payload_json, '$.requestId') IS NOT NULL\n    ) AS requested\n    WHERE requested.row_number = 1\n  `;\n\n  yield* sql`\n    WITH latest_resolutions AS (\n      SELECT\n        resolved.request_id,\n        resolved.resolved_at,\n        resolved.decision\n      FROM (\n        SELECT\n          json_extract(payload_json, '$.requestId') AS request_id,\n          created_at AS resolved_at,\n          CASE\n            WHEN json_extract(payload_json, '$.decision') IN (\n              'accept',\n              'acceptForSession',\n              'decline',\n              'cancel'\n            )\n            THEN json_extract(payload_json, '$.decision')\n            ELSE NULL\n          END AS decision,\n          ROW_NUMBER() OVER (\n            PARTITION BY json_extract(payload_json, '$.requestId')\n            ORDER BY created_at DESC, activity_id DESC\n          ) AS row_number\n        FROM projection_thread_activities\n        WHERE kind = 'approval.resolved'\n          AND json_extract(payload_json, '$.requestId') IS NOT NULL\n      ) AS resolved\n      WHERE resolved.row_number = 1\n    )\n    UPDATE projection_pending_approvals\n    SET\n      status = 'resolved',\n      decision = (\n        SELECT latest_resolutions.decision\n        FROM latest_resolutions\n        WHERE latest_resolutions.request_id = projection_pending_approvals.request_id\n      ),\n      resolved_at = (\n        SELECT latest_resolutions.resolved_at\n        FROM latest_resolutions\n        WHERE latest_resolutions.request_id = projection_pending_approvals.request_id\n      )\n    WHERE EXISTS (\n      SELECT 1\n      FROM latest_resolutions\n      WHERE latest_resolutions.request_id = projection_pending_approvals.request_id\n    )\n  `;\n\n  yield* sql`\n    WITH latest_response_events AS (\n      SELECT\n        response.request_id,\n        response.resolved_at,\n        response.decision\n      FROM (\n        SELECT\n          json_extract(payload_json, '$.requestId') AS request_id,\n          occurred_at AS resolved_at,\n          CASE\n            WHEN json_extract(payload_json, '$.decision') IN (\n              'accept',\n              'acceptForSession',\n              'decline',\n              'cancel'\n            )\n            THEN json_extract(payload_json, '$.decision')\n            ELSE NULL\n          END AS decision,\n          ROW_NUMBER() OVER (\n            PARTITION BY json_extract(payload_json, '$.requestId')\n            ORDER BY occurred_at DESC, sequence DESC\n          ) AS row_number\n        FROM orchestration_events\n        WHERE event_type = 'thread.approval-response-requested'\n          AND json_extract(payload_json, '$.requestId') IS NOT NULL\n      ) AS response\n      WHERE response.row_number = 1\n    )\n    UPDATE projection_pending_approvals\n    SET\n      status = 'resolved',\n      decision = (\n        SELECT latest_response_events.decision\n        FROM latest_response_events\n        WHERE latest_response_events.request_id = projection_pending_approvals.request_id\n      ),\n      resolved_at = (\n        SELECT latest_response_events.resolved_at\n        FROM latest_response_events\n        WHERE latest_response_events.request_id = projection_pending_approvals.request_id\n      )\n    WHERE EXISTS (\n      SELECT 1\n      FROM latest_response_events\n      WHERE latest_response_events.request_id = projection_pending_approvals.request_id\n    )\n  `;\n\n  yield* sql`\n    WITH latest_stale_failures AS (\n      SELECT\n        failure.request_id,\n        failure.resolved_at\n      FROM (\n        SELECT\n          json_extract(payload_json, '$.requestId') AS request_id,\n          created_at AS resolved_at,\n          ROW_NUMBER() OVER (\n            PARTITION BY json_extract(payload_json, '$.requestId')\n            ORDER BY created_at DESC, activity_id DESC\n          ) AS row_number\n        FROM projection_thread_activities\n        WHERE kind = 'provider.approval.respond.failed'\n          AND json_extract(payload_json, '$.requestId') IS NOT NULL\n          AND (\n            lower(COALESCE(json_extract(payload_json, '$.detail'), ''))\n              LIKE '%stale pending approval request%'\n            OR lower(COALESCE(json_extract(payload_json, '$.detail'), ''))\n              LIKE '%unknown pending approval request%'\n            OR lower(COALESCE(json_extract(payload_json, '$.detail'), ''))\n              LIKE '%unknown pending permission request%'\n          )\n      ) AS failure\n      WHERE failure.row_number = 1\n    )\n    UPDATE projection_pending_approvals\n    SET\n      status = 'resolved',\n      decision = NULL,\n      resolved_at = (\n        SELECT latest_stale_failures.resolved_at\n        FROM latest_stale_failures\n        WHERE latest_stale_failures.request_id = projection_pending_approvals.request_id\n      )\n    WHERE status = 'pending'\n      AND EXISTS (\n        SELECT 1\n        FROM latest_stale_failures\n        WHERE latest_stale_failures.request_id = projection_pending_approvals.request_id\n      )\n  `;\n\n  yield* sql`\n    UPDATE projection_threads\n    SET\n      latest_user_message_at = (\n        SELECT MAX(message.created_at)\n        FROM projection_thread_messages AS message\n        WHERE message.thread_id = projection_threads.thread_id\n          AND message.role = 'user'\n      ),\n      pending_approval_count = COALESCE((\n        SELECT COUNT(*)\n        FROM projection_pending_approvals\n        WHERE projection_pending_approvals.thread_id = projection_threads.thread_id\n          AND projection_pending_approvals.status = 'pending'\n      ), 0),\n      pending_user_input_count = COALESCE((\n        WITH latest_user_input_states AS (\n          SELECT\n            latest.request_id,\n            latest.kind,\n            latest.detail\n          FROM (\n            SELECT\n              json_extract(activity.payload_json, '$.requestId') AS request_id,\n              activity.kind,\n              lower(COALESCE(json_extract(activity.payload_json, '$.detail'), '')) AS detail,\n              ROW_NUMBER() OVER (\n                PARTITION BY json_extract(activity.payload_json, '$.requestId')\n                ORDER BY activity.created_at DESC, activity.activity_id DESC\n              ) AS row_number\n            FROM projection_thread_activities AS activity\n            WHERE activity.thread_id = projection_threads.thread_id\n              AND json_extract(activity.payload_json, '$.requestId') IS NOT NULL\n              AND activity.kind IN (\n                'user-input.requested',\n                'user-input.resolved',\n                'provider.user-input.respond.failed'\n              )\n          ) AS latest\n          WHERE latest.row_number = 1\n        )\n        SELECT COUNT(*)\n        FROM latest_user_input_states\n        WHERE latest_user_input_states.kind = 'user-input.requested'\n          OR (\n            latest_user_input_states.kind = 'provider.user-input.respond.failed'\n            AND latest_user_input_states.detail NOT LIKE '%stale pending user-input request%'\n            AND latest_user_input_states.detail NOT LIKE '%unknown pending user-input request%'\n          )\n      ), 0),\n      has_actionable_proposed_plan = COALESCE((\n        SELECT CASE\n          WHEN projection_threads.latest_turn_id IS NOT NULL\n            AND EXISTS (\n              SELECT 1\n              FROM projection_thread_proposed_plans AS latest_turn_plan_exists\n              WHERE latest_turn_plan_exists.thread_id = projection_threads.thread_id\n                AND latest_turn_plan_exists.turn_id = projection_threads.latest_turn_id\n            )\n            THEN CASE\n              WHEN (\n                SELECT latest_turn_plan.implemented_at\n                FROM projection_thread_proposed_plans AS latest_turn_plan\n                WHERE latest_turn_plan.thread_id = projection_threads.thread_id\n                  AND latest_turn_plan.turn_id = projection_threads.latest_turn_id\n                ORDER BY latest_turn_plan.updated_at DESC, latest_turn_plan.plan_id DESC\n                LIMIT 1\n              ) IS NULL\n                THEN 1\n                ELSE 0\n              END\n          WHEN EXISTS (\n            SELECT 1\n            FROM projection_thread_proposed_plans AS any_plan\n            WHERE any_plan.thread_id = projection_threads.thread_id\n          )\n            THEN CASE\n              WHEN (\n                SELECT latest_plan.implemented_at\n                FROM projection_thread_proposed_plans AS latest_plan\n                WHERE latest_plan.thread_id = projection_threads.thread_id\n                ORDER BY latest_plan.updated_at DESC, latest_plan.plan_id DESC\n                LIMIT 1\n              ) IS NULL\n                THEN 1\n                ELSE 0\n              END\n          ELSE 0\n        END\n      ), 0)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    DELETE FROM projection_pending_approvals\n    WHERE NOT EXISTS (\n      SELECT 1\n      FROM projection_thread_activities AS activity\n      WHERE activity.kind = 'approval.requested'\n        AND json_extract(activity.payload_json, '$.requestId')\n          = projection_pending_approvals.request_id\n    )\n  `;\n\n  yield* sql`\n    UPDATE projection_threads\n    SET pending_approval_count = COALESCE((\n      SELECT COUNT(*)\n      FROM projection_pending_approvals\n      WHERE projection_pending_approvals.thread_id = projection_threads.thread_id\n        AND projection_pending_approvals.status = 'pending'\n    ), 0)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\n/**\n * Canonicalize `modelSelection.options` / `defaultModelSelection.options` from\n * the legacy object shape (`{ effort: \"max\", fastMode: true, ... }`) to the\n * current array-of-selections shape (`[{ id: \"effort\", value: \"max\" }, ...]`).\n *\n * Migration 016 introduced `modelSelection` with `options` stored as a\n * per-provider object. Later the schema was reshaped so that options are a\n * generic `Array<{ id, value }>` of user-selected option entries. Stored rows\n * from before the reshape still have the object shape and fail to decode.\n *\n * For each value in the legacy object:\n *   - string values are kept if non-empty after trim\n *   - boolean values are always kept (true | false)\n *   - any other value type (number, null, nested object/array) is dropped,\n *     matching the permissive client-side normalizer in composerDraftStore.\n *\n * Touched storage:\n *   - `projection_threads.model_selection_json.options`\n *   - `projection_projects.default_model_selection_json.options`\n *   - `orchestration_events.payload_json.$.modelSelection.options`\n *     (thread.created | thread.meta-updated | thread.turn-start-requested)\n *   - `orchestration_events.payload_json.$.defaultModelSelection.options`\n *     (project.created | project.meta-updated)\n */\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    UPDATE projection_threads\n    SET model_selection_json = json_set(\n      model_selection_json,\n      '$.options',\n      (\n        SELECT json_group_array(\n          json_object(\n            'id', key,\n            'value',\n            CASE type\n              WHEN 'true' THEN json('true')\n              WHEN 'false' THEN json('false')\n              ELSE atom\n            END\n          )\n        )\n        FROM json_each(json_extract(model_selection_json, '$.options'))\n        WHERE (type = 'text' AND trim(coalesce(atom, '')) != '')\n           OR type IN ('true', 'false')\n      )\n    )\n    WHERE model_selection_json IS NOT NULL\n      AND json_type(model_selection_json, '$.options') = 'object'\n  `;\n\n  yield* sql`\n    UPDATE projection_projects\n    SET default_model_selection_json = json_set(\n      default_model_selection_json,\n      '$.options',\n      (\n        SELECT json_group_array(\n          json_object(\n            'id', key,\n            'value',\n            CASE type\n              WHEN 'true' THEN json('true')\n              WHEN 'false' THEN json('false')\n              ELSE atom\n            END\n          )\n        )\n        FROM json_each(json_extract(default_model_selection_json, '$.options'))\n        WHERE (type = 'text' AND trim(coalesce(atom, '')) != '')\n           OR type IN ('true', 'false')\n      )\n    )\n    WHERE default_model_selection_json IS NOT NULL\n      AND json_type(default_model_selection_json, '$.options') = 'object'\n  `;\n\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_set(\n      payload_json,\n      '$.modelSelection.options',\n      (\n        SELECT json_group_array(\n          json_object(\n            'id', key,\n            'value',\n            CASE type\n              WHEN 'true' THEN json('true')\n              WHEN 'false' THEN json('false')\n              ELSE atom\n            END\n          )\n        )\n        FROM json_each(json_extract(payload_json, '$.modelSelection.options'))\n        WHERE (type = 'text' AND trim(coalesce(atom, '')) != '')\n           OR type IN ('true', 'false')\n      )\n    )\n    WHERE event_type IN (\n      'thread.created',\n      'thread.meta-updated',\n      'thread.turn-start-requested'\n    )\n      AND json_type(payload_json, '$.modelSelection.options') = 'object'\n  `;\n\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_set(\n      payload_json,\n      '$.defaultModelSelection.options',\n      (\n        SELECT json_group_array(\n          json_object(\n            'id', key,\n            'value',\n            CASE type\n              WHEN 'true' THEN json('true')\n              WHEN 'false' THEN json('false')\n              ELSE atom\n            END\n          )\n        )\n        FROM json_each(json_extract(payload_json, '$.defaultModelSelection.options'))\n        WHERE (type = 'text' AND trim(coalesce(atom, '')) != '')\n           OR type IN ('true', 'false')\n      )\n    )\n    WHERE event_type IN ('project.created', 'project.meta-updated')\n      AND json_type(payload_json, '$.defaultModelSelection.options') = 'object'\n  `;\n});\n","/**\n * Adds the nullable `provider_instance_id` routing column to\n * `provider_session_runtime`.\n *\n * Slice D of the provider-array refactor splits \"driver kind\" from\n * \"configured instance\". Existing rows have only the driver name in\n * `provider_name`; new rows additionally carry the user-defined instance\n * routing key. The column remains nullable so legacy rows can still decode;\n * the persistence boundary is responsible for materializing a concrete\n * instance id before any hot routing path sees the binding.\n *\n * The column is nullable on purpose — backfilling it during the migration\n * would require knowing which configured instance \"owned\" each historical\n * session, and that mapping is ambiguous when the user later configures\n * multiple instances of the same driver. Keeping that compatibility at the\n * persistence boundary keeps the fallback out of active routing code.\n */\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const columns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(provider_session_runtime)\n  `;\n  if (!columns.some((column) => column.name === \"provider_instance_id\")) {\n    yield* sql`\n      ALTER TABLE provider_session_runtime\n      ADD COLUMN provider_instance_id TEXT\n    `;\n  }\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_provider_session_runtime_instance\n    ON provider_session_runtime(provider_instance_id)\n  `;\n});\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as Effect from \"effect/Effect\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const columns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(projection_thread_sessions)\n  `;\n  if (!columns.some((column) => column.name === \"provider_instance_id\")) {\n    yield* sql`\n      ALTER TABLE projection_thread_sessions\n      ADD COLUMN provider_instance_id TEXT\n    `;\n  }\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_sessions_instance\n    ON projection_thread_sessions(provider_instance_id)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_activities_thread_sequence_created_id\n    ON projection_thread_activities(thread_id, sequence, created_at, activity_id)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_messages_thread_created_id\n    ON projection_thread_messages(thread_id, created_at, message_id)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_shell_active\n    ON projection_threads(deleted_at, archived_at, project_id, created_at, thread_id)\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_shell_archived\n    ON projection_threads(deleted_at, archived_at, project_id, thread_id)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS web_push_subscriptions (\n      endpoint TEXT PRIMARY KEY,\n      session_id TEXT NOT NULL,\n      p256dh TEXT NOT NULL,\n      auth TEXT NOT NULL,\n      expiration_time INTEGER,\n      user_agent TEXT,\n      created_at TEXT NOT NULL,\n      updated_at TEXT NOT NULL,\n      last_successful_push_at TEXT,\n      last_failed_push_at TEXT,\n      failure_count INTEGER NOT NULL DEFAULT 0,\n      disabled_at TEXT,\n      FOREIGN KEY(session_id) REFERENCES auth_sessions(session_id) ON DELETE CASCADE\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_web_push_subscriptions_active\n    ON web_push_subscriptions(disabled_at, session_id, updated_at)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS projection_thread_queued_turns (\n      message_id TEXT PRIMARY KEY,\n      thread_id TEXT NOT NULL,\n      role TEXT NOT NULL,\n      text TEXT NOT NULL,\n      attachments_json TEXT NOT NULL,\n      model_selection_json TEXT,\n      title_seed TEXT,\n      runtime_mode TEXT NOT NULL,\n      interaction_mode TEXT NOT NULL,\n      source_proposed_plan_thread_id TEXT,\n      source_proposed_plan_id TEXT,\n      created_at TEXT NOT NULL,\n      updated_at TEXT NOT NULL,\n      FOREIGN KEY(thread_id) REFERENCES projection_threads(thread_id) ON DELETE CASCADE\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_queued_turns_thread_created\n    ON projection_thread_queued_turns(thread_id, created_at, message_id)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    UPDATE projection_thread_activities\n    SET payload_json = json_remove(\n      payload_json,\n      '$.data.result',\n      '$.data.item.result'\n    )\n    WHERE kind IN ('tool.completed', 'tool.updated')\n      AND json_extract(payload_json, '$.itemType') = 'image_view'\n      AND (\n        json_type(payload_json, '$.data.result') IS NOT NULL\n        OR json_type(payload_json, '$.data.item.result') IS NOT NULL\n      )\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    DROP TABLE IF EXISTS queued_message_dispatch_time_repair_candidates\n  `;\n\n  yield* sql`\n    CREATE TEMP TABLE queued_message_dispatch_time_repair_candidates AS\n    SELECT\n      message_event.event_id AS message_event_id,\n      json_extract(message_event.payload_json, '$.threadId') AS thread_id,\n      json_extract(message_event.payload_json, '$.messageId') AS message_id,\n      json_extract(dispatch_event.payload_json, '$.dispatchedAt') AS dispatched_at\n    FROM orchestration_events AS message_event\n    INNER JOIN orchestration_events AS dispatch_event\n      ON dispatch_event.event_id = message_event.causation_event_id\n     AND dispatch_event.event_type = 'thread.queued-turn-dispatched'\n    WHERE message_event.event_type = 'thread.message-sent'\n      AND json_extract(message_event.payload_json, '$.role') = 'user'\n      AND json_extract(message_event.payload_json, '$.threadId') = message_event.stream_id\n      AND json_extract(dispatch_event.payload_json, '$.threadId') =\n        json_extract(message_event.payload_json, '$.threadId')\n      AND json_extract(dispatch_event.payload_json, '$.messageId') =\n        json_extract(message_event.payload_json, '$.messageId')\n      AND json_extract(message_event.payload_json, '$.createdAt') IS NOT NULL\n      AND json_extract(message_event.payload_json, '$.updatedAt') IS NOT NULL\n      AND json_extract(dispatch_event.payload_json, '$.dispatchedAt') IS NOT NULL\n      AND json_extract(message_event.payload_json, '$.createdAt') !=\n        json_extract(message_event.payload_json, '$.updatedAt')\n  `;\n\n  yield* sql`\n    UPDATE projection_thread_messages\n    SET created_at = (\n      SELECT candidate.dispatched_at\n      FROM queued_message_dispatch_time_repair_candidates AS candidate\n      WHERE candidate.thread_id = projection_thread_messages.thread_id\n        AND candidate.message_id = projection_thread_messages.message_id\n      LIMIT 1\n    )\n    WHERE EXISTS (\n      SELECT 1\n      FROM queued_message_dispatch_time_repair_candidates AS candidate\n      WHERE candidate.thread_id = projection_thread_messages.thread_id\n        AND candidate.message_id = projection_thread_messages.message_id\n        AND candidate.dispatched_at != projection_thread_messages.created_at\n    )\n  `;\n\n  yield* sql`\n    UPDATE projection_threads\n    SET latest_user_message_at = (\n      SELECT MAX(message.created_at)\n      FROM projection_thread_messages AS message\n      WHERE message.thread_id = projection_threads.thread_id\n        AND message.role = 'user'\n    )\n    WHERE thread_id IN (\n      SELECT thread_id\n      FROM queued_message_dispatch_time_repair_candidates\n    )\n  `;\n\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_set(\n      payload_json,\n      '$.createdAt',\n      (\n        SELECT candidate.dispatched_at\n        FROM queued_message_dispatch_time_repair_candidates AS candidate\n        WHERE candidate.message_event_id = orchestration_events.event_id\n        LIMIT 1\n      )\n    )\n    WHERE event_id IN (\n      SELECT message_event_id\n      FROM queued_message_dispatch_time_repair_candidates\n    )\n  `;\n\n  yield* sql`\n    DROP TABLE IF EXISTS queued_message_dispatch_time_repair_candidates\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    CREATE TABLE IF NOT EXISTS checkpoint_turn_file_snapshots (\n      thread_id TEXT NOT NULL,\n      turn_id TEXT NOT NULL,\n      path TEXT NOT NULL,\n      blob_sha TEXT,\n      deleted INTEGER NOT NULL DEFAULT 0,\n      updated_at TEXT NOT NULL,\n      PRIMARY KEY (thread_id, turn_id, path)\n    )\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_checkpoint_turn_file_snapshots_thread_turn\n    ON checkpoint_turn_file_snapshots(thread_id, turn_id)\n  `;\n\n  const columns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(projection_turns)\n  `;\n  if (!columns.some((column) => column.name === \"checkpoint_attribution\")) {\n    yield* sql`\n      ALTER TABLE projection_turns\n      ADD COLUMN checkpoint_attribution TEXT\n    `;\n  }\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const columns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(projection_threads)\n  `;\n  const columnNames = new Set(columns.map((column) => column.name));\n\n  if (!columnNames.has(\"parent_thread_id\")) {\n    yield* sql`\n      ALTER TABLE projection_threads\n      ADD COLUMN parent_thread_id TEXT\n    `;\n  }\n\n  if (!columnNames.has(\"subagent_kind\")) {\n    yield* sql`\n      ALTER TABLE projection_threads\n      ADD COLUMN subagent_kind TEXT\n    `;\n  }\n\n  if (!columnNames.has(\"subagent_nickname\")) {\n    yield* sql`\n      ALTER TABLE projection_threads\n      ADD COLUMN subagent_nickname TEXT\n    `;\n  }\n\n  if (!columnNames.has(\"subagent_role\")) {\n    yield* sql`\n      ALTER TABLE projection_threads\n      ADD COLUMN subagent_role TEXT\n    `;\n  }\n\n  if (!columnNames.has(\"hidden_from_thread_list\")) {\n    yield* sql`\n      ALTER TABLE projection_threads\n      ADD COLUMN hidden_from_thread_list INTEGER NOT NULL DEFAULT 0\n    `;\n  }\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_parent\n    ON projection_threads(project_id, parent_thread_id, created_at, thread_id)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n  const columns = yield* sql<{ readonly name: string }>`\n    PRAGMA table_info(projection_threads)\n  `;\n  const columnNames = new Set(columns.map((column) => column.name));\n\n  if (!columnNames.has(\"created_by_thread_id\")) {\n    yield* sql`\n      ALTER TABLE projection_threads\n      ADD COLUMN created_by_thread_id TEXT\n    `;\n  }\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_threads_created_by\n    ON projection_threads(project_id, created_by_thread_id, created_at, thread_id)\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    DROP TABLE IF EXISTS assistant_message_turn_repair_candidates\n  `;\n\n  yield* sql`\n    CREATE TEMP TABLE assistant_message_turn_repair_candidates AS\n    WITH candidate_events AS (\n      SELECT\n        json_extract(payload_json, '$.threadId') AS thread_id,\n        json_extract(payload_json, '$.messageId') AS message_id,\n        json_extract(payload_json, '$.turnId') AS turn_id,\n        stream_version\n      FROM orchestration_events\n      WHERE event_type = 'thread.message-sent'\n        AND json_extract(payload_json, '$.role') = 'assistant'\n        AND json_extract(payload_json, '$.turnId') IS NOT NULL\n        AND json_extract(payload_json, '$.threadId') IS NOT NULL\n        AND json_extract(payload_json, '$.messageId') IS NOT NULL\n    ),\n    ranked_candidate_events AS (\n      SELECT\n        thread_id,\n        message_id,\n        turn_id,\n        ROW_NUMBER() OVER (\n          PARTITION BY thread_id, message_id\n          ORDER BY stream_version DESC\n        ) AS candidate_rank\n      FROM candidate_events\n    )\n    SELECT\n      thread_id,\n      message_id,\n      turn_id\n    FROM ranked_candidate_events\n    WHERE candidate_rank = 1\n  `;\n\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_assistant_message_turn_repair_candidates\n    ON assistant_message_turn_repair_candidates(thread_id, message_id)\n  `;\n\n  yield* sql`\n    UPDATE projection_thread_messages\n    SET turn_id = (\n      SELECT candidate.turn_id\n      FROM assistant_message_turn_repair_candidates AS candidate\n      WHERE candidate.thread_id = projection_thread_messages.thread_id\n        AND candidate.message_id = projection_thread_messages.message_id\n      LIMIT 1\n    )\n    WHERE role = 'assistant'\n      AND turn_id IS NULL\n      AND EXISTS (\n        SELECT 1\n        FROM assistant_message_turn_repair_candidates AS candidate\n        WHERE candidate.thread_id = projection_thread_messages.thread_id\n          AND candidate.message_id = projection_thread_messages.message_id\n      )\n  `;\n\n  yield* sql`\n    DROP TABLE IF EXISTS assistant_message_turn_repair_candidates\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_thread_queued_turns\n    ADD COLUMN steering_expected_turn_id TEXT\n  `;\n\n  yield* sql`\n    ALTER TABLE projection_thread_queued_turns\n    ADD COLUMN steering_requested_at TEXT\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport const PROJECTION_THREAD_ACTIVITY_ORDERING_INDEX =\n  \"idx_projection_thread_activities_thread_ordering\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  // Keep this expression in lockstep with ProjectionSnapshotQuery's activity ordering. The\n  // previous sequence index could filter by thread, but SQLite still had to sort every matching\n  // activity into a temporary B-tree because NULL sequences are explicitly ordered last.\n  yield* sql`\n    CREATE INDEX IF NOT EXISTS idx_projection_thread_activities_thread_ordering\n    ON projection_thread_activities(\n      thread_id,\n      (CASE WHEN sequence IS NULL THEN 0 ELSE 1 END) DESC,\n      sequence DESC,\n      created_at DESC,\n      activity_id DESC\n    )\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\n/**\n * Project creation used to materialize the then-current Codex default\n * (`gpt-5.4`) into every project. That made a system default indistinguishable\n * from a durable user preference and kept selecting 5.4 after Codex's default\n * moved on.\n *\n * A later project.meta-updated event containing `defaultModelSelection` is our\n * evidence that the value was explicitly edited, including an explicit edit\n * back to 5.4 or to null. Those projects are intentionally left untouched.\n * Thread selections are historical records and are never rewritten here.\n */\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    UPDATE projection_projects\n    SET default_model_selection_json = NULL\n    WHERE coalesce(\n        json_extract(default_model_selection_json, '$.instanceId'),\n        json_extract(default_model_selection_json, '$.provider')\n      ) = 'codex'\n      AND json_extract(default_model_selection_json, '$.model') = 'gpt-5.4'\n      AND EXISTS (\n        SELECT 1\n        FROM orchestration_events AS created\n        WHERE created.aggregate_kind = 'project'\n          AND created.stream_id = projection_projects.project_id\n          AND created.event_type = 'project.created'\n          AND coalesce(\n              json_extract(created.payload_json, '$.defaultModelSelection.instanceId'),\n              json_extract(created.payload_json, '$.defaultModelSelection.provider')\n            ) = 'codex'\n          AND json_extract(created.payload_json, '$.defaultModelSelection.model') = 'gpt-5.4'\n          AND NOT EXISTS (\n            SELECT 1\n            FROM orchestration_events AS later\n            WHERE later.aggregate_kind = created.aggregate_kind\n              AND later.stream_id = created.stream_id\n              AND later.stream_version > created.stream_version\n              AND later.event_type = 'project.meta-updated'\n              AND json_type(later.payload_json, '$.defaultModelSelection') IS NOT NULL\n          )\n      )\n  `;\n\n  // Keep event history rebuild-safe: a projection replay must see inheritance\n  // at project creation rather than restoring the legacy materialized default.\n  yield* sql`\n    UPDATE orchestration_events\n    SET payload_json = json_set(\n      payload_json,\n      '$.defaultModelSelection',\n      json('null')\n    )\n    WHERE aggregate_kind = 'project'\n      AND event_type = 'project.created'\n      AND coalesce(\n          json_extract(payload_json, '$.defaultModelSelection.instanceId'),\n          json_extract(payload_json, '$.defaultModelSelection.provider')\n        ) = 'codex'\n      AND json_extract(payload_json, '$.defaultModelSelection.model') = 'gpt-5.4'\n      AND NOT EXISTS (\n        SELECT 1\n        FROM orchestration_events AS later\n        WHERE later.aggregate_kind = orchestration_events.aggregate_kind\n          AND later.stream_id = orchestration_events.stream_id\n          AND later.stream_version > orchestration_events.stream_version\n          AND later.event_type = 'project.meta-updated'\n          AND json_type(later.payload_json, '$.defaultModelSelection') IS NOT NULL\n      )\n  `;\n});\n","import * as Effect from \"effect/Effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nexport default Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  yield* sql`\n    ALTER TABLE projection_thread_queued_turns\n    ADD COLUMN recovery_confirmation_required INTEGER NOT NULL DEFAULT 0\n  `;\n});\n","/**\n * MigrationsLive - Migration runner with inline loader\n *\n * Uses Migrator.make with fromRecord to define migrations inline.\n * All migrations are statically imported - no dynamic file system loading.\n *\n * Migrations run automatically when the MigrationLayer is provided,\n * ensuring the database schema is always up-to-date before the application starts.\n */\n\nimport * as Migrator from \"effect/unstable/sql/Migrator\";\nimport * as Layer from \"effect/Layer\";\nimport * as Effect from \"effect/Effect\";\n\n// Import all migrations statically\nimport Migration0001 from \"./Migrations/001_OrchestrationEvents.ts\";\nimport Migration0002 from \"./Migrations/002_OrchestrationCommandReceipts.ts\";\nimport Migration0003 from \"./Migrations/003_CheckpointDiffBlobs.ts\";\nimport Migration0004 from \"./Migrations/004_ProviderSessionRuntime.ts\";\nimport Migration0005 from \"./Migrations/005_Projections.ts\";\nimport Migration0006 from \"./Migrations/006_ProjectionThreadSessionRuntimeModeColumns.ts\";\nimport Migration0007 from \"./Migrations/007_ProjectionThreadMessageAttachments.ts\";\nimport Migration0008 from \"./Migrations/008_ProjectionThreadActivitySequence.ts\";\nimport Migration0009 from \"./Migrations/009_ProviderSessionRuntimeMode.ts\";\nimport Migration0010 from \"./Migrations/010_ProjectionThreadsRuntimeMode.ts\";\nimport Migration0011 from \"./Migrations/011_OrchestrationThreadCreatedRuntimeMode.ts\";\nimport Migration0012 from \"./Migrations/012_ProjectionThreadsInteractionMode.ts\";\nimport Migration0013 from \"./Migrations/013_ProjectionThreadProposedPlans.ts\";\nimport Migration0014 from \"./Migrations/014_ProjectionThreadProposedPlanImplementation.ts\";\nimport Migration0015 from \"./Migrations/015_ProjectionTurnsSourceProposedPlan.ts\";\nimport Migration0016 from \"./Migrations/016_CanonicalizeModelSelections.ts\";\nimport Migration0017 from \"./Migrations/017_ProjectionThreadsArchivedAt.ts\";\nimport Migration0018 from \"./Migrations/018_ProjectionThreadsArchivedAtIndex.ts\";\nimport Migration0019 from \"./Migrations/019_ProjectionSnapshotLookupIndexes.ts\";\nimport Migration0020 from \"./Migrations/020_AuthAccessManagement.ts\";\nimport Migration0021 from \"./Migrations/021_AuthSessionClientMetadata.ts\";\nimport Migration0022 from \"./Migrations/022_AuthSessionLastConnectedAt.ts\";\nimport Migration0023 from \"./Migrations/023_ProjectionThreadShellSummary.ts\";\nimport Migration0024 from \"./Migrations/024_BackfillProjectionThreadShellSummary.ts\";\nimport Migration0025 from \"./Migrations/025_CleanupInvalidProjectionPendingApprovals.ts\";\nimport Migration0026 from \"./Migrations/026_CanonicalizeModelSelectionOptions.ts\";\nimport Migration0027 from \"./Migrations/027_ProviderSessionRuntimeInstanceId.ts\";\nimport Migration0028 from \"./Migrations/028_ProjectionThreadSessionInstanceId.ts\";\nimport Migration0029 from \"./Migrations/029_ProjectionThreadDetailOrderingIndexes.ts\";\nimport Migration0030 from \"./Migrations/030_ProjectionThreadShellArchiveIndexes.ts\";\nimport Migration0031 from \"./Migrations/031_WebPushSubscriptions.ts\";\nimport Migration0032 from \"./Migrations/032_ProjectionThreadQueuedTurns.ts\";\nimport Migration0033 from \"./Migrations/033_StripImageViewActivityResults.ts\";\nimport Migration0034 from \"./Migrations/034_CanonicalizeQueuedMessageDispatchTimes.ts\";\nimport Migration0035 from \"./Migrations/035_CheckpointTurnFileSnapshots.ts\";\nimport Migration0036 from \"./Migrations/036_ProjectionThreadSubagents.ts\";\nimport Migration0037 from \"./Migrations/037_ProjectionThreadCreatedBy.ts\";\nimport Migration0038 from \"./Migrations/038_RestoreAssistantMessageTurnIds.ts\";\nimport Migration0039 from \"./Migrations/039_ProjectionQueuedTurnSteering.ts\";\nimport Migration0040 from \"./Migrations/040_ProjectionThreadActivityOrderingExpressionIndex.ts\";\nimport Migration0041 from \"./Migrations/041_InheritUntouchedLegacyProjectModelDefaults.ts\";\nimport Migration0042 from \"./Migrations/042_ProjectionQueuedTurnRecoveryConfirmation.ts\";\n\n/**\n * Migration loader with all migrations defined inline.\n *\n * Key format: \"{id}_{name}\" where:\n * - id: numeric migration ID (determines execution order)\n * - name: descriptive name for the migration\n *\n * Uses Migrator.fromRecord which parses the key format and\n * returns migrations sorted by ID.\n */\nexport const migrationEntries = [\n  [1, \"OrchestrationEvents\", Migration0001],\n  [2, \"OrchestrationCommandReceipts\", Migration0002],\n  [3, \"CheckpointDiffBlobs\", Migration0003],\n  [4, \"ProviderSessionRuntime\", Migration0004],\n  [5, \"Projections\", Migration0005],\n  [6, \"ProjectionThreadSessionRuntimeModeColumns\", Migration0006],\n  [7, \"ProjectionThreadMessageAttachments\", Migration0007],\n  [8, \"ProjectionThreadActivitySequence\", Migration0008],\n  [9, \"ProviderSessionRuntimeMode\", Migration0009],\n  [10, \"ProjectionThreadsRuntimeMode\", Migration0010],\n  [11, \"OrchestrationThreadCreatedRuntimeMode\", Migration0011],\n  [12, \"ProjectionThreadsInteractionMode\", Migration0012],\n  [13, \"ProjectionThreadProposedPlans\", Migration0013],\n  [14, \"ProjectionThreadProposedPlanImplementation\", Migration0014],\n  [15, \"ProjectionTurnsSourceProposedPlan\", Migration0015],\n  [16, \"CanonicalizeModelSelections\", Migration0016],\n  [17, \"ProjectionThreadsArchivedAt\", Migration0017],\n  [18, \"ProjectionThreadsArchivedAtIndex\", Migration0018],\n  [19, \"ProjectionSnapshotLookupIndexes\", Migration0019],\n  [20, \"AuthAccessManagement\", Migration0020],\n  [21, \"AuthSessionClientMetadata\", Migration0021],\n  [22, \"AuthSessionLastConnectedAt\", Migration0022],\n  [23, \"ProjectionThreadShellSummary\", Migration0023],\n  [24, \"BackfillProjectionThreadShellSummary\", Migration0024],\n  [25, \"CleanupInvalidProjectionPendingApprovals\", Migration0025],\n  [26, \"CanonicalizeModelSelectionOptions\", Migration0026],\n  [27, \"ProviderSessionRuntimeInstanceId\", Migration0027],\n  [28, \"ProjectionThreadSessionInstanceId\", Migration0028],\n  [29, \"ProjectionThreadDetailOrderingIndexes\", Migration0029],\n  [30, \"ProjectionThreadShellArchiveIndexes\", Migration0030],\n  [31, \"WebPushSubscriptions\", Migration0031],\n  [32, \"ProjectionThreadQueuedTurns\", Migration0032],\n  [33, \"StripImageViewActivityResults\", Migration0033],\n  [34, \"CanonicalizeQueuedMessageDispatchTimes\", Migration0034],\n  [35, \"CheckpointTurnFileSnapshots\", Migration0035],\n  [36, \"ProjectionThreadSubagents\", Migration0036],\n  [37, \"ProjectionThreadCreatedBy\", Migration0037],\n  [38, \"RestoreAssistantMessageTurnIds\", Migration0038],\n  [39, \"ProjectionQueuedTurnSteering\", Migration0039],\n  [40, \"ProjectionThreadActivityOrderingExpressionIndex\", Migration0040],\n  [41, \"InheritUntouchedLegacyProjectModelDefaults\", Migration0041],\n  [42, \"ProjectionQueuedTurnRecoveryConfirmation\", Migration0042],\n] as const;\n\nexport const makeMigrationLoader = (throughId?: number) =>\n  Migrator.fromRecord(\n    Object.fromEntries(\n      migrationEntries\n        .filter(([id]) => throughId === undefined || id <= throughId)\n        .map(([id, name, migration]) => [`${id}_${name}`, migration]),\n    ),\n  );\n\n/**\n * Migrator run function - no schema dumping needed\n * Uses the base Migrator.make without platform dependencies\n */\nconst run = Migrator.make({});\n\nexport interface RunMigrationsOptions {\n  readonly toMigrationInclusive?: number | undefined;\n}\n\n/**\n * Run all pending migrations.\n *\n * Creates the migrations tracking table (effect_sql_migrations) if it doesn't exist,\n * then runs any migrations with ID greater than the latest recorded migration.\n *\n * Returns array of [id, name] tuples for migrations that were run.\n *\n * @returns Effect containing array of executed migrations\n */\nexport const runMigrations = Effect.fn(\"runMigrations\")(function* ({\n  toMigrationInclusive,\n}: RunMigrationsOptions = {}) {\n  yield* Effect.log(\n    toMigrationInclusive === undefined\n      ? \"Running all migrations...\"\n      : `Running migrations 1 through ${toMigrationInclusive}...`,\n  );\n  const executedMigrations = yield* run({ loader: makeMigrationLoader(toMigrationInclusive) });\n  yield* Effect.log(\"Migrations ran successfully\").pipe(\n    Effect.annotateLogs({ migrations: executedMigrations.map(([id, name]) => `${id}_${name}`) }),\n  );\n  return executedMigrations;\n});\n\n/**\n * Layer that runs migrations when the layer is built.\n *\n * Use this to ensure migrations run before your application starts.\n * Migrations are run automatically - no separate script is needed.\n *\n * @example\n * ```typescript\n * import { MigrationsLive } from \"@acme/db/Migrations\"\n * import * as SqliteClient from \"@acme/db/SqliteClient\"\n *\n * // Migrations run automatically when SqliteClient is provided\n * const AppLayer = MigrationsLive.pipe(\n *   Layer.provideMerge(SqliteClient.layer({ filename: \"database.sqlite\" }))\n * )\n * ```\n */\nexport const MigrationsLive = Layer.effectDiscard(runMigrations());\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nimport { runMigrations } from \"../Migrations.ts\";\nimport { ServerConfig } from \"../../config.ts\";\n\ntype RuntimeSqliteLayerConfig = {\n  readonly filename: string;\n  readonly spanAttributes?: Record<string, unknown>;\n};\n\ntype Loader = {\n  layer: (config: RuntimeSqliteLayerConfig) => Layer.Layer<SqlClient.SqlClient>;\n};\nconst defaultSqliteClientLoaders = {\n  bun: () => import(\"@effect/sql-sqlite-bun/SqliteClient\"),\n  node: () => import(\"../NodeSqliteClient.ts\"),\n} satisfies Record<string, () => Promise<Loader>>;\n\nconst makeRuntimeSqliteLayer = Effect.fn(\"makeRuntimeSqliteLayer\")(function* (\n  config: RuntimeSqliteLayerConfig,\n) {\n  const runtime = process.versions.bun !== undefined ? \"bun\" : \"node\";\n  const loader = defaultSqliteClientLoaders[runtime];\n  const clientModule = yield* Effect.promise<Loader>(loader);\n  return clientModule.layer(config);\n}, Layer.unwrap);\n\nconst setup = Layer.effectDiscard(\n  Effect.gen(function* () {\n    const sql = yield* SqlClient.SqlClient;\n    yield* sql`PRAGMA journal_mode = WAL;`;\n    yield* sql`PRAGMA foreign_keys = ON;`;\n    yield* runMigrations();\n  }),\n);\n\nexport const makeSqlitePersistenceLive = Effect.fn(\"makeSqlitePersistenceLive\")(function* (\n  dbPath: string,\n) {\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  yield* fs.makeDirectory(path.dirname(dbPath), { recursive: true });\n\n  return Layer.provideMerge(\n    setup,\n    makeRuntimeSqliteLayer({\n      filename: dbPath,\n      spanAttributes: {\n        \"db.name\": path.basename(dbPath),\n        \"service.name\": \"salchi-server\",\n      },\n    }),\n  );\n}, Layer.unwrap);\n\nexport const SqlitePersistenceMemory = Layer.provideMerge(\n  setup,\n  makeRuntimeSqliteLayer({ filename: \":memory:\" }),\n);\n\nexport const layerConfig = Layer.unwrap(\n  Effect.map(Effect.service(ServerConfig), ({ dbPath }) => makeSqlitePersistenceLive(dbPath)),\n);\n","import type {\n  AuthClientMetadata,\n  AuthClientSession,\n  AuthPairingLink,\n  AuthSessionId,\n} from \"@salchi/contracts\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Context from \"effect/Context\";\nimport type { SessionRole } from \"./SessionCredentialService.ts\";\n\nexport const DEFAULT_SESSION_SUBJECT = \"cli-issued-session\";\n\nexport interface IssuedPairingLink {\n  readonly id: string;\n  readonly credential: string;\n  readonly role: SessionRole;\n  readonly subject: string;\n  readonly label?: string;\n  readonly createdAt: DateTime.Utc;\n  readonly expiresAt: DateTime.Utc;\n}\n\nexport interface IssuedBearerSession {\n  readonly sessionId: AuthSessionId;\n  readonly token: string;\n  readonly method: \"bearer-access-token\";\n  readonly role: SessionRole;\n  readonly subject: string;\n  readonly client: AuthClientMetadata;\n  readonly expiresAt: DateTime.Utc;\n}\n\nexport class AuthControlPlaneError extends Data.TaggedError(\"AuthControlPlaneError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\nexport interface AuthControlPlaneShape {\n  readonly createPairingLink: (input?: {\n    readonly ttl?: Duration.Duration;\n    readonly label?: string;\n    readonly role?: SessionRole;\n    readonly subject?: string;\n  }) => Effect.Effect<IssuedPairingLink, AuthControlPlaneError>;\n  readonly listPairingLinks: (input?: {\n    readonly role?: SessionRole;\n    readonly excludeSubjects?: ReadonlyArray<string>;\n  }) => Effect.Effect<ReadonlyArray<AuthPairingLink>, AuthControlPlaneError>;\n  readonly revokePairingLink: (id: string) => Effect.Effect<boolean, AuthControlPlaneError>;\n  readonly issueSession: (input?: {\n    readonly ttl?: Duration.Duration;\n    readonly subject?: string;\n    readonly role?: SessionRole;\n    readonly label?: string;\n  }) => Effect.Effect<IssuedBearerSession, AuthControlPlaneError>;\n  readonly listSessions: () => Effect.Effect<\n    ReadonlyArray<AuthClientSession>,\n    AuthControlPlaneError\n  >;\n  readonly revokeSession: (\n    sessionId: AuthSessionId,\n  ) => Effect.Effect<boolean, AuthControlPlaneError>;\n  readonly revokeOtherSessionsExcept: (\n    sessionId: AuthSessionId,\n  ) => Effect.Effect<number, AuthControlPlaneError>;\n}\n\nexport class AuthControlPlane extends Context.Service<AuthControlPlane, AuthControlPlaneShape>()(\n  \"salchi/auth/Services/AuthControlPlane\",\n) {}\n","import type { AuthClientSession, AuthPairingLink } from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { BootstrapCredentialServiceLive } from \"./BootstrapCredentialService.ts\";\nimport { ServerSecretStoreLive } from \"./ServerSecretStore.ts\";\nimport { SessionCredentialServiceLive } from \"./SessionCredentialService.ts\";\nimport { BootstrapCredentialService } from \"../Services/BootstrapCredentialService.ts\";\nimport { SessionCredentialService } from \"../Services/SessionCredentialService.ts\";\nimport { layerConfig as SqlitePersistenceLayerLive } from \"../../persistence/Layers/Sqlite.ts\";\nimport {\n  AuthControlPlane,\n  AuthControlPlaneError,\n  DEFAULT_SESSION_SUBJECT,\n} from \"../Services/AuthControlPlane.ts\";\nimport type {\n  AuthControlPlaneShape,\n  IssuedBearerSession,\n  IssuedPairingLink,\n} from \"../Services/AuthControlPlane.ts\";\n\nconst bySessionPriority = (left: AuthClientSession, right: AuthClientSession) => {\n  if (left.role !== right.role) {\n    return left.role === \"owner\" ? -1 : 1;\n  }\n  if (left.connected !== right.connected) {\n    return left.connected ? -1 : 1;\n  }\n  return right.issuedAt.epochMilliseconds - left.issuedAt.epochMilliseconds;\n};\n\nconst toAuthControlPlaneError =\n  (message: string) =>\n  (cause: unknown): AuthControlPlaneError =>\n    new AuthControlPlaneError({\n      message,\n      cause,\n    });\n\nexport const makeAuthControlPlane = Effect.gen(function* () {\n  const bootstrapCredentials = yield* BootstrapCredentialService;\n  const sessions = yield* SessionCredentialService;\n\n  const createPairingLink: AuthControlPlaneShape[\"createPairingLink\"] = (input) =>\n    Effect.gen(function* () {\n      const createdAt = yield* DateTime.now;\n      const issued = yield* bootstrapCredentials.issueOneTimeToken({\n        role: input?.role ?? \"client\",\n        subject: input?.subject ?? \"one-time-token\",\n        ...(input?.ttl ? { ttl: input.ttl } : {}),\n        ...(input?.label ? { label: input.label } : {}),\n      });\n      return {\n        id: issued.id,\n        credential: issued.credential,\n        role: input?.role ?? \"client\",\n        subject: input?.subject ?? \"one-time-token\",\n        ...(issued.label ? { label: issued.label } : {}),\n        createdAt: DateTime.toUtc(createdAt),\n        expiresAt: DateTime.toUtc(issued.expiresAt),\n      } satisfies IssuedPairingLink;\n    }).pipe(Effect.mapError(toAuthControlPlaneError(\"Failed to create pairing link.\")));\n\n  const listPairingLinks: AuthControlPlaneShape[\"listPairingLinks\"] = (input) =>\n    bootstrapCredentials.listActive().pipe(\n      Effect.map((pairingLinks) => {\n        const activeLinks: Array<AuthPairingLink> = [];\n        for (const pairingLink of pairingLinks) {\n          if (input?.role && pairingLink.role !== input.role) {\n            continue;\n          }\n          if (input?.excludeSubjects?.includes(pairingLink.subject)) {\n            continue;\n          }\n          activeLinks.push(\n            pairingLink.label\n              ? ({\n                  id: pairingLink.id,\n                  credential: pairingLink.credential,\n                  role: pairingLink.role,\n                  subject: pairingLink.subject,\n                  label: pairingLink.label,\n                  createdAt: pairingLink.createdAt,\n                  expiresAt: pairingLink.expiresAt,\n                } satisfies AuthPairingLink)\n              : ({\n                  id: pairingLink.id,\n                  credential: pairingLink.credential,\n                  role: pairingLink.role,\n                  subject: pairingLink.subject,\n                  createdAt: pairingLink.createdAt,\n                  expiresAt: pairingLink.expiresAt,\n                } satisfies AuthPairingLink),\n          );\n        }\n        return activeLinks.toSorted(\n          (left, right) => right.createdAt.epochMilliseconds - left.createdAt.epochMilliseconds,\n        );\n      }),\n      Effect.mapError(toAuthControlPlaneError(\"Failed to list pairing links.\")),\n    );\n\n  const revokePairingLink: AuthControlPlaneShape[\"revokePairingLink\"] = (id) =>\n    bootstrapCredentials\n      .revoke(id)\n      .pipe(Effect.mapError(toAuthControlPlaneError(\"Failed to revoke pairing link.\")));\n\n  const issueSession: AuthControlPlaneShape[\"issueSession\"] = (input) =>\n    sessions\n      .issue({\n        subject: input?.subject ?? DEFAULT_SESSION_SUBJECT,\n        method: \"bearer-access-token\",\n        role: input?.role ?? \"owner\",\n        client: {\n          ...(input?.label ? { label: input.label } : {}),\n          deviceType: \"bot\",\n        },\n        ...(input?.ttl ? { ttl: input.ttl } : {}),\n      })\n      .pipe(\n        Effect.flatMap((issued) => {\n          if (issued.method !== \"bearer-access-token\") {\n            return Effect.fail(\n              new AuthControlPlaneError({\n                message: \"CLI session issuance produced an unexpected session method.\",\n              }),\n            );\n          }\n\n          return Effect.succeed({\n            sessionId: issued.sessionId,\n            token: issued.token,\n            method: \"bearer-access-token\" as const,\n            role: issued.role,\n            subject: input?.subject ?? DEFAULT_SESSION_SUBJECT,\n            client: issued.client,\n            expiresAt: DateTime.toUtc(issued.expiresAt),\n          } satisfies IssuedBearerSession);\n        }),\n        Effect.mapError(toAuthControlPlaneError(\"Failed to issue session token.\")),\n      );\n\n  const listSessions: AuthControlPlaneShape[\"listSessions\"] = () =>\n    sessions.listActive().pipe(\n      Effect.map((activeSessions) => activeSessions.toSorted(bySessionPriority)),\n      Effect.mapError(toAuthControlPlaneError(\"Failed to list sessions.\")),\n    );\n\n  const revokeSession: AuthControlPlaneShape[\"revokeSession\"] = (sessionId) =>\n    sessions\n      .revoke(sessionId)\n      .pipe(Effect.mapError(toAuthControlPlaneError(\"Failed to revoke session.\")));\n\n  const revokeOtherSessionsExcept: AuthControlPlaneShape[\"revokeOtherSessionsExcept\"] = (\n    sessionId,\n  ) =>\n    sessions\n      .revokeAllExcept(sessionId)\n      .pipe(Effect.mapError(toAuthControlPlaneError(\"Failed to revoke other sessions.\")));\n\n  return {\n    createPairingLink,\n    listPairingLinks,\n    revokePairingLink,\n    issueSession,\n    listSessions,\n    revokeSession,\n    revokeOtherSessionsExcept,\n  } satisfies AuthControlPlaneShape;\n});\n\nexport const AuthCoreLive = Layer.mergeAll(\n  BootstrapCredentialServiceLive,\n  SessionCredentialServiceLive,\n);\n\nexport const AuthStorageLive = Layer.mergeAll(ServerSecretStoreLive, SqlitePersistenceLayerLive);\n\nexport const AuthRuntimeLive = AuthCoreLive.pipe(Layer.provideMerge(AuthStorageLive));\n\nexport const AuthControlPlaneLive = Layer.effect(AuthControlPlane, makeAuthControlPlane);\n\nexport const AuthControlPlaneRuntimeLive = AuthControlPlaneLive.pipe(\n  Layer.provideMerge(AuthRuntimeLive),\n);\n","import type { AuthClientMetadata, AuthClientSession, AuthPairingLink } from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\n\nimport type { IssuedBearerSession, IssuedPairingLink } from \"./auth/Services/AuthControlPlane.ts\";\n\nconst newline = \"\\n\";\n\nfunction serializeOptionalFields(values: ReadonlyArray<string | null | undefined>) {\n  return values.filter((value): value is string => typeof value === \"string\" && value.length > 0);\n}\n\nfunction formatClientMetadata(metadata: AuthClientMetadata): string {\n  const details = serializeOptionalFields([\n    metadata.label,\n    metadata.deviceType !== \"unknown\" ? metadata.deviceType : undefined,\n    metadata.os,\n    metadata.browser,\n    metadata.ipAddress,\n  ]);\n  return details.length > 0 ? details.join(\" | \") : \"unlabeled client\";\n}\n\nfunction toIsoString(value: DateTime.DateTime | DateTime.Utc): string {\n  return DateTime.formatIso(DateTime.toUtc(value));\n}\n\nexport function formatIssuedPairingCredential(\n  credential: IssuedPairingLink,\n  options?: {\n    readonly json?: boolean;\n    readonly baseUrl?: string;\n  },\n): string {\n  const pairUrl =\n    options?.baseUrl != null && options.baseUrl.length > 0\n      ? (() => {\n          const url = new URL(\"/pair\", options.baseUrl);\n          url.searchParams.delete(\"token\");\n          url.hash = new URLSearchParams([[\"token\", credential.credential]]).toString();\n          return url.toString();\n        })()\n      : undefined;\n\n  if (options?.json) {\n    return `${JSON.stringify(\n      {\n        id: credential.id,\n        credential: credential.credential,\n        ...(credential.label ? { label: credential.label } : {}),\n        role: credential.role,\n        expiresAt: toIsoString(credential.expiresAt),\n        ...(pairUrl ? { pairUrl } : {}),\n      },\n      null,\n      2,\n    )}${newline}`;\n  }\n\n  return (\n    [\n      `Issued client pairing token ${credential.id}.`,\n      `Token: ${credential.credential}`,\n      ...(pairUrl ? [`Pair URL: ${pairUrl}`] : []),\n      `Expires at: ${credential.expiresAt}`,\n    ].join(newline) + newline\n  );\n}\n\nexport function formatPairingCredentialList(\n  credentials: ReadonlyArray<AuthPairingLink>,\n  options?: {\n    readonly json?: boolean;\n  },\n): string {\n  if (options?.json) {\n    return `${JSON.stringify(\n      credentials.map((credential) => ({\n        id: credential.id,\n        ...(credential.label ? { label: credential.label } : {}),\n        role: credential.role,\n        createdAt: toIsoString(credential.createdAt),\n        expiresAt: toIsoString(credential.expiresAt),\n      })),\n      null,\n      2,\n    )}${newline}`;\n  }\n\n  if (credentials.length === 0) {\n    return `No active pairing credentials.${newline}`;\n  }\n\n  return (\n    credentials\n      .map((credential) =>\n        [\n          `${credential.id}${credential.label ? ` (${credential.label})` : \"\"}`,\n          `  role: ${credential.role}`,\n          `  created: ${toIsoString(credential.createdAt)}`,\n          `  expires: ${toIsoString(credential.expiresAt)}`,\n        ].join(newline),\n      )\n      .join(`${newline}${newline}`) + newline\n  );\n}\n\nexport function formatIssuedSession(\n  session: IssuedBearerSession,\n  options?: {\n    readonly json?: boolean;\n    readonly tokenOnly?: boolean;\n  },\n): string {\n  if (options?.tokenOnly) {\n    return `${session.token}${newline}`;\n  }\n\n  if (options?.json) {\n    return `${JSON.stringify(\n      {\n        sessionId: session.sessionId,\n        token: session.token,\n        method: session.method,\n        role: session.role,\n        subject: session.subject,\n        client: session.client,\n        expiresAt: toIsoString(session.expiresAt),\n      },\n      null,\n      2,\n    )}${newline}`;\n  }\n\n  return (\n    [\n      `Issued ${session.role} bearer session ${session.sessionId}.`,\n      `Token: ${session.token}`,\n      `Subject: ${session.subject}`,\n      `Client: ${formatClientMetadata(session.client)}`,\n      `Expires at: ${toIsoString(session.expiresAt)}`,\n    ].join(newline) + newline\n  );\n}\n\nexport function formatSessionList(\n  sessions: ReadonlyArray<AuthClientSession>,\n  options?: {\n    readonly json?: boolean;\n  },\n): string {\n  if (options?.json) {\n    return `${JSON.stringify(\n      sessions.map((session) => ({\n        sessionId: session.sessionId,\n        method: session.method,\n        role: session.role,\n        subject: session.subject,\n        client: session.client,\n        connected: session.connected,\n        issuedAt: toIsoString(session.issuedAt),\n        expiresAt: toIsoString(session.expiresAt),\n        lastConnectedAt: session.lastConnectedAt ? toIsoString(session.lastConnectedAt) : null,\n      })),\n      null,\n      2,\n    )}${newline}`;\n  }\n\n  if (sessions.length === 0) {\n    return `No active sessions.${newline}`;\n  }\n\n  return (\n    sessions\n      .map((session) =>\n        [\n          `${session.sessionId} [${session.role}]${session.connected ? \" connected\" : \"\"}`,\n          `  method: ${session.method}`,\n          `  subject: ${session.subject}`,\n          `  client: ${formatClientMetadata(session.client)}`,\n          `  issued: ${toIsoString(session.issuedAt)}`,\n          `  last connected: ${\n            session.lastConnectedAt ? toIsoString(session.lastConnectedAt) : \"never\"\n          }`,\n          `  expires: ${toIsoString(session.expiresAt)}`,\n        ].join(newline),\n      )\n      .join(`${newline}${newline}`) + newline\n  );\n}\n","import * as P from \"effect/Predicate\";\n\nexport type DeepPartial<T> = T extends readonly (infer U)[]\n  ? readonly DeepPartial<U>[]\n  : T extends object\n    ? { [K in keyof T]?: DeepPartial<T[K]> }\n    : T;\n\nexport function deepMerge<T extends Record<string, unknown>>(current: T, patch: DeepPartial<T>): T {\n  if (!P.isObject(current) || !P.isObject(patch)) {\n    return patch as T;\n  }\n\n  const next = { ...current } as Record<string, unknown>;\n  for (const [key, value] of Object.entries(patch)) {\n    if (value === undefined) continue;\n\n    const existing = next[key];\n    next[key] = P.isObject(existing) && P.isObject(value) ? deepMerge(existing, value) : value;\n  }\n\n  return next as T;\n}\n","import * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaGetter from \"effect/SchemaGetter\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\n\nexport const decodeJsonResult = <S extends Schema.Codec<unknown, unknown, never, never>>(\n  schema: S,\n) => {\n  const decode = Schema.decodeExit(Schema.fromJsonString(schema));\n  return (input: string) => {\n    const result = decode(input);\n    if (Exit.isFailure(result)) {\n      return Result.fail(result.cause);\n    }\n    return Result.succeed(result.value);\n  };\n};\n\nexport const decodeUnknownJsonResult = <S extends Schema.Codec<unknown, unknown, never, never>>(\n  schema: S,\n) => {\n  const decode = Schema.decodeUnknownExit(Schema.fromJsonString(schema));\n  return (input: unknown) => {\n    const result = decode(input);\n    if (Exit.isFailure(result)) {\n      return Result.fail(result.cause);\n    }\n    return Result.succeed(result.value);\n  };\n};\n\nexport const formatSchemaError = (cause: Cause.Cause<Schema.SchemaError>) => {\n  const squashed = Cause.squash(cause);\n  return Schema.isSchemaError(squashed)\n    ? SchemaIssue.makeFormatterDefault()(squashed.issue)\n    : Cause.pretty(cause);\n};\n\n/**\n * A `Getter` that parses a lenient JSON string (tolerating trailing commas\n * and JS-style comments) into an unknown value.\n *\n * Mirrors `SchemaGetter.parseJson()` but strips JSONC syntax before parsing.\n */\nconst decodeJsonString = Schema.decodeEffect(Schema.UnknownFromJsonString);\n\nconst parseLenientJsonGetter = SchemaGetter.onSome((input: string) => {\n  // Strip single-line comments - alternation preserves quoted strings.\n  let stripped = input.replace(\n    /(\"(?:[^\"\\\\]|\\\\.)*\")|\\/\\/[^\\n]*/g,\n    (match, stringLiteral: string | undefined) => (stringLiteral ? match : \"\"),\n  );\n\n  // Strip multi-line comments.\n  stripped = stripped.replace(\n    /(\"(?:[^\"\\\\]|\\\\.)*\")|\\/\\*[\\s\\S]*?\\*\\//g,\n    (match, stringLiteral: string | undefined) => (stringLiteral ? match : \"\"),\n  );\n\n  // Strip trailing commas before `}` or `]`.\n  stripped = stripped.replace(/,(\\s*[}\\]])/g, \"$1\");\n\n  return decodeJsonString(stripped).pipe(\n    Effect.map(Option.some),\n    Effect.mapError(\n      (error) => new SchemaIssue.InvalidValue(Option.some(input), { message: String(error) }),\n    ),\n  );\n});\n\n/**\n * Schema transformation: lenient JSONC string ↔ unknown.\n *\n * Same API as `SchemaTransformation.fromJsonString`, but the decode side\n * strips trailing commas and JS-style comments before parsing.\n * Encoding produces strict JSON via `JSON.stringify`.\n */\nexport const fromLenientJsonString = new SchemaTransformation.Transformation(\n  parseLenientJsonGetter,\n  SchemaGetter.stringifyJson(),\n);\n\nexport const prettyJsonString = SchemaGetter.parseJson<string>().compose(\n  SchemaGetter.stringifyJson({ space: 2 }),\n);\n\n/**\n * Build a schema that decodes a lenient JSON string into `A`.\n *\n * Drop-in replacement for `Schema.fromJsonString(schema)` that tolerates\n * trailing commas and comments in the input.\n */\nexport const fromLenientJson = <S extends Schema.Top>(schema: S) =>\n  Schema.String.pipe(Schema.decodeTo(schema, fromLenientJsonString));\n\nexport function extractJsonObject(raw: string): string {\n  const trimmed = raw.trim();\n  if (trimmed.length === 0) {\n    return trimmed;\n  }\n\n  const start = trimmed.indexOf(\"{\");\n  if (start < 0) {\n    return trimmed;\n  }\n\n  let depth = 0;\n  let inString = false;\n  let escaping = false;\n  for (let index = start; index < trimmed.length; index += 1) {\n    const char = trimmed[index];\n    if (inString) {\n      if (escaping) {\n        escaping = false;\n      } else if (char === \"\\\\\") {\n        escaping = true;\n      } else if (char === '\"') {\n        inString = false;\n      }\n      continue;\n    }\n\n    if (char === '\"') {\n      inString = true;\n      continue;\n    }\n\n    if (char === \"{\") {\n      depth += 1;\n      continue;\n    }\n\n    if (char === \"}\") {\n      depth -= 1;\n      if (depth === 0) {\n        return trimmed.slice(start, index + 1);\n      }\n    }\n  }\n\n  return trimmed.slice(start);\n}\n\n/**\n * Build a JSON string schema that encodes with stable 2-space formatting.\n *\n * Decode behavior matches `Schema.fromJsonString(schema)`. Encode behavior\n * keeps the transformation schema-based while preserving human-readable JSON.\n */\nexport const fromJsonStringPretty = <S extends Schema.Top>(schema: S) =>\n  Schema.fromJsonString(schema).pipe(\n    Schema.encode({\n      decode: prettyJsonString,\n      encode: prettyJsonString,\n    }),\n  );\n","import {\n  DEFAULT_MODEL,\n  DEFAULT_MODEL_BY_PROVIDER,\n  MODEL_SLUG_ALIASES_BY_PROVIDER,\n  type ModelCapabilities,\n  type ModelSelection,\n  ProviderDriverKind,\n  ProviderInstanceId,\n  type ProviderOptionDescriptor,\n  type ProviderOptionSelection,\n} from \"@salchi/contracts\";\n\nconst DEFAULT_PROVIDER_DRIVER_KIND = ProviderDriverKind.make(\"codex\");\n\nexport interface SelectableModelOption {\n  slug: string;\n  name: string;\n}\n\nexport function createModelCapabilities(input: {\n  optionDescriptors: ReadonlyArray<ProviderOptionDescriptor>;\n}): ModelCapabilities {\n  return {\n    optionDescriptors: input.optionDescriptors.map(cloneDescriptor),\n  };\n}\n\nfunction getRawSelectionValueById(\n  selections: ReadonlyArray<ProviderOptionSelection> | null | undefined,\n  id: string,\n): string | boolean | undefined {\n  const selection = selections?.find((candidate) => candidate.id === id);\n  return selection?.value;\n}\n\nexport function getProviderOptionSelectionValue(\n  selections: ReadonlyArray<ProviderOptionSelection> | null | undefined,\n  id: string,\n): string | boolean | undefined {\n  return getRawSelectionValueById(selections, id);\n}\n\nexport function getProviderOptionStringSelectionValue(\n  selections: ReadonlyArray<ProviderOptionSelection> | null | undefined,\n  id: string,\n): string | undefined {\n  const value = getProviderOptionSelectionValue(selections, id);\n  return typeof value === \"string\" ? value : undefined;\n}\n\nexport function getProviderOptionBooleanSelectionValue(\n  selections: ReadonlyArray<ProviderOptionSelection> | null | undefined,\n  id: string,\n): boolean | undefined {\n  const value = getProviderOptionSelectionValue(selections, id);\n  return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function getModelSelectionOptionValue(\n  modelSelection: ModelSelection | null | undefined,\n  id: string,\n): string | boolean | undefined {\n  return getProviderOptionSelectionValue(modelSelection?.options, id);\n}\n\nexport function getModelSelectionStringOptionValue(\n  modelSelection: ModelSelection | null | undefined,\n  id: string,\n): string | undefined {\n  return getProviderOptionStringSelectionValue(modelSelection?.options, id);\n}\n\nexport function getModelSelectionBooleanOptionValue(\n  modelSelection: ModelSelection | null | undefined,\n  id: string,\n): boolean | undefined {\n  return getProviderOptionBooleanSelectionValue(modelSelection?.options, id);\n}\n\nfunction resolveDescriptorChoiceValue(\n  descriptor: Extract<ProviderOptionDescriptor, { type: \"select\" }>,\n  raw: string | null | undefined,\n): string | undefined {\n  const trimmed = trimOrNull(raw);\n  if (!trimmed) {\n    return descriptor.currentValue ?? descriptor.options.find((option) => option.isDefault)?.id;\n  }\n  if (descriptor.options.length === 0) {\n    return trimmed;\n  }\n  if (\n    descriptor.promptInjectedValues?.includes(trimmed) &&\n    descriptor.options.some((option) => option.id === trimmed)\n  ) {\n    return descriptor.options.find((option) => option.isDefault)?.id;\n  }\n  if (descriptor.options.some((option) => option.id === trimmed)) {\n    return trimmed;\n  }\n  return descriptor.currentValue ?? descriptor.options.find((option) => option.isDefault)?.id;\n}\n\nfunction cloneDescriptor(descriptor: ProviderOptionDescriptor): ProviderOptionDescriptor {\n  return descriptor.type === \"select\"\n    ? {\n        ...descriptor,\n        options: [...descriptor.options],\n        ...(descriptor.promptInjectedValues\n          ? { promptInjectedValues: [...descriptor.promptInjectedValues] }\n          : {}),\n      }\n    : { ...descriptor };\n}\n\nfunction cloneSelection(selection: ProviderOptionSelection): ProviderOptionSelection {\n  return { ...selection };\n}\n\nfunction withDescriptorCurrentValue(\n  descriptor: ProviderOptionDescriptor,\n  rawCurrentValue: string | boolean | undefined,\n): ProviderOptionDescriptor {\n  if (descriptor.type === \"boolean\") {\n    if (typeof rawCurrentValue === \"boolean\") {\n      return {\n        ...descriptor,\n        currentValue: rawCurrentValue,\n      };\n    }\n    return descriptor;\n  }\n  const currentValue =\n    typeof rawCurrentValue === \"string\"\n      ? resolveDescriptorChoiceValue(descriptor, rawCurrentValue)\n      : resolveDescriptorChoiceValue(descriptor, descriptor.currentValue);\n  if (!currentValue) {\n    const { currentValue: _unusedCurrentValue, ...rest } = descriptor;\n    return rest;\n  }\n  return {\n    ...descriptor,\n    currentValue,\n  };\n}\n\nexport function getProviderOptionDescriptors(input: {\n  caps: ModelCapabilities;\n  selections?: ReadonlyArray<ProviderOptionSelection> | null | undefined;\n}): ReadonlyArray<ProviderOptionDescriptor> {\n  const { caps, selections } = input;\n  const baseDescriptors = (caps.optionDescriptors ?? []).map(cloneDescriptor);\n\n  return baseDescriptors.map((descriptor) =>\n    withDescriptorCurrentValue(\n      descriptor,\n      getRawSelectionValueById(selections, descriptor.id) ?? descriptor.currentValue,\n    ),\n  );\n}\n\nexport function getProviderOptionCurrentValue(\n  descriptor: ProviderOptionDescriptor | null | undefined,\n): string | boolean | undefined {\n  if (!descriptor) {\n    return undefined;\n  }\n  if (descriptor.type === \"boolean\") {\n    return descriptor.currentValue;\n  }\n  if (descriptor.currentValue) {\n    return descriptor.currentValue;\n  }\n  return descriptor.options.find((option) => option.isDefault)?.id;\n}\n\nexport function getProviderOptionCurrentLabel(\n  descriptor: ProviderOptionDescriptor | null | undefined,\n): string | undefined {\n  if (!descriptor) {\n    return undefined;\n  }\n  if (descriptor.type === \"boolean\") {\n    return typeof descriptor.currentValue === \"boolean\"\n      ? descriptor.currentValue\n        ? \"On\"\n        : \"Off\"\n      : undefined;\n  }\n  const currentValue = getProviderOptionCurrentValue(descriptor);\n  if (typeof currentValue !== \"string\") {\n    return undefined;\n  }\n  return descriptor.options.find((option) => option.id === currentValue)?.label;\n}\n\nexport function buildProviderOptionSelectionsFromDescriptors(\n  descriptors: ReadonlyArray<ProviderOptionDescriptor> | null | undefined,\n): Array<ProviderOptionSelection> | undefined {\n  if (!descriptors || descriptors.length === 0) {\n    return undefined;\n  }\n\n  const nextSelections: Array<ProviderOptionSelection> = [];\n\n  for (const descriptor of descriptors) {\n    const value = getProviderOptionCurrentValue(descriptor);\n    if (typeof value === \"string\" || typeof value === \"boolean\") {\n      nextSelections.push({ id: descriptor.id, value });\n    }\n  }\n\n  return nextSelections.length > 0 ? nextSelections : undefined;\n}\n\nexport function getModelSelectionOptionDescriptors(\n  modelSelection: ModelSelection | null | undefined,\n  caps?: ModelCapabilities | null | undefined,\n): ReadonlyArray<ProviderOptionDescriptor> {\n  if (!modelSelection) {\n    return [];\n  }\n  if (!caps) {\n    return [];\n  }\n  return getProviderOptionDescriptors({\n    caps,\n    selections: modelSelection.options,\n  });\n}\n\nexport function isClaudeUltrathinkPrompt(text: string | null | undefined): boolean {\n  return typeof text === \"string\" && /\\bultrathink\\b/i.test(text);\n}\n\nexport function normalizeModelSlug(\n  model: string | null | undefined,\n  provider: ProviderDriverKind = DEFAULT_PROVIDER_DRIVER_KIND,\n): string | null {\n  if (typeof model !== \"string\") {\n    return null;\n  }\n\n  const trimmed = model.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  const aliases = MODEL_SLUG_ALIASES_BY_PROVIDER[provider] ?? {};\n  const aliased = Object.prototype.hasOwnProperty.call(aliases, trimmed)\n    ? aliases[trimmed]\n    : undefined;\n  return typeof aliased === \"string\" ? aliased : trimmed;\n}\n\nexport function resolveSelectableModel(\n  provider: ProviderDriverKind,\n  value: string | null | undefined,\n  options: ReadonlyArray<SelectableModelOption>,\n): string | null {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  const direct = options.find((option) => option.slug === trimmed);\n  if (direct) {\n    return direct.slug;\n  }\n\n  const byName = options.find((option) => option.name.toLowerCase() === trimmed.toLowerCase());\n  if (byName) {\n    return byName.slug;\n  }\n\n  const normalized = normalizeModelSlug(trimmed, provider);\n  if (!normalized) {\n    return null;\n  }\n\n  const resolved = options.find((option) => option.slug === normalized);\n  return resolved ? resolved.slug : null;\n}\n\nfunction resolveModelSlug(model: string | null | undefined, provider: ProviderDriverKind): string {\n  const normalized = normalizeModelSlug(model, provider);\n  if (!normalized) {\n    return DEFAULT_MODEL_BY_PROVIDER[provider] ?? DEFAULT_MODEL;\n  }\n  return normalized;\n}\n\nexport function resolveModelSlugForProvider(\n  provider: ProviderDriverKind,\n  model: string | null | undefined,\n): string {\n  return resolveModelSlug(model, provider);\n}\n\n/** Trim a string, returning null for empty/missing values. */\nexport function trimOrNull<T extends string>(value: T | null | undefined): T | null {\n  if (typeof value !== \"string\") return null;\n  const trimmed = value.trim() as T;\n  return trimmed || null;\n}\n\nfunction cloneSelections(\n  selections: ReadonlyArray<ProviderOptionSelection>,\n): Array<ProviderOptionSelection> {\n  return selections.map(cloneSelection);\n}\n\nexport function createModelSelection(\n  instanceId: ProviderInstanceId,\n  model: string,\n  options?: ReadonlyArray<ProviderOptionSelection> | null,\n): ModelSelection {\n  const selections = options ? cloneSelections(options) : [];\n  const base: ModelSelection = {\n    instanceId,\n    model,\n  };\n  return selections.length > 0 ? { ...base, options: selections } : base;\n}\n\n/**\n * Returns the effort value if it is a prompt-injected value according to\n * any select descriptor in the given capabilities, or null otherwise.\n *\n * Unlike a single `find`, this checks every descriptor so that the\n * correct descriptor's `promptInjectedValues` list is consulted even when\n * multiple select descriptors exist.\n */\nexport function resolvePromptInjectedEffort(\n  caps: ModelCapabilities,\n  rawEffort: string | null | undefined,\n): string | null {\n  const trimmed = trimOrNull(rawEffort);\n  if (!trimmed) return null;\n  const descriptors = getProviderOptionDescriptors({ caps });\n  for (const descriptor of descriptors) {\n    if (descriptor.type === \"select\" && descriptor.promptInjectedValues?.includes(trimmed)) {\n      return trimmed;\n    }\n  }\n  return null;\n}\n\nexport function applyClaudePromptEffortPrefix(\n  text: string,\n  effort: string | null | undefined,\n): string {\n  const trimmed = text.trim();\n  if (!trimmed) {\n    return trimmed;\n  }\n  if (effort !== \"ultrathink\") {\n    return trimmed;\n  }\n  if (trimmed.startsWith(\"Ultrathink:\")) {\n    return trimmed;\n  }\n  return `Ultrathink:\\n${trimmed}`;\n}\n","import {\n  ServerSettings,\n  type ProviderInstanceConfig,\n  type ProviderInstanceConfigMap,\n  type ServerSettingsPatch,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport { deepMerge } from \"./Struct.ts\";\nimport { fromLenientJson } from \"./schemaJson.ts\";\nimport { createModelSelection } from \"./model.ts\";\n\nconst ServerSettingsJson = fromLenientJson(ServerSettings);\nconst decodeServerSettingsJson = Schema.decodeUnknownOption(ServerSettingsJson);\n\nconst BUILT_IN_PROVIDER_DRIVERS_WITH_LEGACY_ENABLED = new Set<string>([\n  \"codex\",\n  \"claudeAgent\",\n  \"cursor\",\n  \"opencode\",\n]);\n\nexport interface PersistedServerObservabilitySettings {\n  readonly otlpTracesUrl: string | undefined;\n  readonly otlpMetricsUrl: string | undefined;\n}\n\nexport function normalizePersistedServerSettingString(\n  value: string | null | undefined,\n): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function extractPersistedServerObservabilitySettings(input: {\n  readonly observability?: {\n    readonly otlpTracesUrl?: string;\n    readonly otlpMetricsUrl?: string;\n  };\n}): PersistedServerObservabilitySettings {\n  return {\n    otlpTracesUrl: normalizePersistedServerSettingString(input.observability?.otlpTracesUrl),\n    otlpMetricsUrl: normalizePersistedServerSettingString(input.observability?.otlpMetricsUrl),\n  };\n}\n\nexport function parsePersistedServerObservabilitySettings(\n  raw: string,\n): PersistedServerObservabilitySettings {\n  const decoded = decodeServerSettingsJson(raw);\n  if (Option.isSome(decoded)) {\n    return extractPersistedServerObservabilitySettings(decoded.value);\n  }\n  return { otlpTracesUrl: undefined, otlpMetricsUrl: undefined };\n}\n\nfunction shouldReplaceTextGenerationModelSelection(\n  patch: ServerSettingsPatch[\"textGenerationModelSelection\"] | undefined,\n): boolean {\n  return Boolean(patch && (patch.instanceId !== undefined || patch.model !== undefined));\n}\n\nfunction mergeModelSelectionOptionsById(input: {\n  current: ReadonlyArray<{ readonly id: string; readonly value: string | boolean }> | undefined;\n  patch: ReadonlyArray<{ readonly id: string; readonly value: string | boolean }> | undefined;\n}): Array<{ id: string; value: string | boolean }> | undefined {\n  if (input.patch === undefined) {\n    return input.current ? [...input.current] : undefined;\n  }\n  if (input.patch.length === 0) {\n    return undefined;\n  }\n\n  const merged = new Map((input.current ?? []).map((selection) => [selection.id, selection.value]));\n  for (const selection of input.patch) {\n    merged.set(selection.id, selection.value);\n  }\n  return [...merged.entries()].map(([id, value]) => ({ id, value }));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction hasOwn(record: Record<string, unknown>, key: string): boolean {\n  return Object.prototype.hasOwnProperty.call(record, key);\n}\n\nexport function normalizeProviderInstanceConfigForPersistence(\n  instance: ProviderInstanceConfig,\n): ProviderInstanceConfig {\n  if (\n    instance.enabled === undefined ||\n    !BUILT_IN_PROVIDER_DRIVERS_WITH_LEGACY_ENABLED.has(String(instance.driver)) ||\n    !isRecord(instance.config) ||\n    !hasOwn(instance.config, \"enabled\")\n  ) {\n    return instance;\n  }\n\n  const { enabled: _legacyEnabled, ...configWithoutLegacyEnabled } = instance.config;\n  return {\n    ...instance,\n    config: configWithoutLegacyEnabled,\n  } satisfies ProviderInstanceConfig;\n}\n\nexport function normalizeProviderInstanceConfigMapForPersistence(\n  providerInstances: ProviderInstanceConfigMap,\n): ProviderInstanceConfigMap {\n  const entries = Object.entries(providerInstances);\n  let changed = false;\n  const normalizedEntries = entries.map(([instanceId, instance]) => {\n    const normalized = normalizeProviderInstanceConfigForPersistence(instance);\n    if (normalized !== instance) {\n      changed = true;\n    }\n    return [instanceId, normalized] as const;\n  });\n\n  return changed\n    ? (Object.fromEntries(normalizedEntries) as ProviderInstanceConfigMap)\n    : providerInstances;\n}\n\n/**\n * Applies a server settings patch while treating textGenerationModelSelection as\n * replace-on-provider/model updates. This prevents stale nested options from\n * surviving a reset patch that intentionally omits options.\n */\nexport function applyServerSettingsPatch(\n  current: ServerSettings,\n  patch: ServerSettingsPatch,\n): ServerSettings {\n  const selectionPatch = patch.textGenerationModelSelection;\n  const { automaticGitFetchInterval, importedThemes, ...patchForMerge } = patch;\n  const next = deepMerge(current, patchForMerge);\n  const nextWithReplacements = {\n    ...next,\n    ...(importedThemes !== undefined ? { importedThemes } : {}),\n    ...(patch.providerInstances !== undefined\n      ? {\n          providerInstances: normalizeProviderInstanceConfigMapForPersistence(\n            patch.providerInstances,\n          ),\n        }\n      : {}),\n    ...(automaticGitFetchInterval !== undefined ? { automaticGitFetchInterval } : {}),\n  };\n  if (!selectionPatch) {\n    return nextWithReplacements;\n  }\n\n  const instanceId = selectionPatch.instanceId ?? current.textGenerationModelSelection.instanceId;\n  const model = selectionPatch.model ?? current.textGenerationModelSelection.model;\n  const options = shouldReplaceTextGenerationModelSelection(selectionPatch)\n    ? selectionPatch.options\n    : mergeModelSelectionOptionsById({\n        current: current.textGenerationModelSelection.options,\n        patch: selectionPatch.options,\n      });\n\n  return {\n    ...nextWithReplacements,\n    textGenerationModelSelection: createModelSelection(instanceId, model, options),\n  };\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport * as NFS from \"node:fs\";\nimport * as Net from \"node:net\";\nimport * as readline from \"node:readline\";\nimport type { Readable } from \"node:stream\";\n\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport { decodeJsonResult } from \"@salchi/shared/schemaJson\";\n\nclass BootstrapError extends Data.TaggedError(\"BootstrapError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\nexport const readBootstrapEnvelope = Effect.fn(\"readBootstrapEnvelope\")(function* <A, I>(\n  schema: Schema.Codec<A, I>,\n  fd: number,\n  options?: {\n    timeoutMs?: number;\n  },\n): Effect.fn.Return<Option.Option<A>, BootstrapError> {\n  const fdReady = yield* isFdReady(fd);\n  if (!fdReady) return Option.none();\n\n  const stream = yield* makeBootstrapInputStream(fd);\n\n  const timeoutMs = options?.timeoutMs ?? 1000;\n\n  return yield* Effect.callback<Option.Option<A>, BootstrapError>((resume) => {\n    const input = readline.createInterface({\n      input: stream,\n      crlfDelay: Infinity,\n    });\n\n    const cleanup = () => {\n      stream.removeListener(\"error\", handleError);\n      input.removeListener(\"line\", handleLine);\n      input.removeListener(\"close\", handleClose);\n      input.close();\n      stream.destroy();\n    };\n\n    const handleError = (error: Error) => {\n      if (isUnavailableBootstrapFdError(error)) {\n        resume(Effect.succeedNone);\n        return;\n      }\n      resume(\n        Effect.fail(\n          new BootstrapError({\n            message: \"Failed to read bootstrap envelope.\",\n            cause: error,\n          }),\n        ),\n      );\n    };\n\n    const handleLine = (line: string) => {\n      const parsed = decodeJsonResult(schema)(line);\n      if (Result.isSuccess(parsed)) {\n        resume(Effect.succeedSome(parsed.success));\n      } else {\n        resume(\n          Effect.fail(\n            new BootstrapError({\n              message: \"Failed to decode bootstrap envelope.\",\n              cause: parsed.failure,\n            }),\n          ),\n        );\n      }\n    };\n\n    const handleClose = () => {\n      resume(Effect.succeedNone);\n    };\n\n    stream.once(\"error\", handleError);\n    input.once(\"line\", handleLine);\n    input.once(\"close\", handleClose);\n\n    return Effect.sync(cleanup);\n  }).pipe(Effect.timeoutOption(timeoutMs), Effect.map(Option.flatten));\n});\n\nconst isUnavailableBootstrapFdError = Predicate.compose(\n  Predicate.hasProperty(\"code\"),\n  (_) => _.code === \"EBADF\" || _.code === \"ENOENT\",\n);\n\nconst isFdReady = (fd: number) =>\n  Effect.try({\n    try: () => NFS.fstatSync(fd),\n    catch: (error) =>\n      new BootstrapError({\n        message: \"Failed to stat bootstrap fd.\",\n        cause: error,\n      }),\n  }).pipe(\n    Effect.as(true),\n    Effect.catchIf(\n      (error) => isUnavailableBootstrapFdError(error.cause),\n      () => Effect.succeed(false),\n    ),\n  );\n\nconst makeBootstrapInputStream = (fd: number) =>\n  Effect.try<Readable, BootstrapError>({\n    try: () => {\n      const fdPath = resolveFdPath(fd);\n      if (fdPath === undefined) {\n        return makeDirectBootstrapStream(fd);\n      }\n\n      let streamFd: number | undefined;\n      try {\n        streamFd = NFS.openSync(fdPath, \"r\");\n        return NFS.createReadStream(\"\", {\n          fd: streamFd,\n          encoding: \"utf8\",\n          autoClose: true,\n        });\n      } catch (error) {\n        if (isBootstrapFdPathDuplicationError(error)) {\n          if (streamFd !== undefined) {\n            NFS.closeSync(streamFd);\n          }\n          return makeDirectBootstrapStream(fd);\n        }\n        throw error;\n      }\n    },\n    catch: (error) =>\n      new BootstrapError({\n        message: \"Failed to duplicate bootstrap fd.\",\n        cause: error,\n      }),\n  });\n\nconst makeDirectBootstrapStream = (fd: number): Readable => {\n  try {\n    return NFS.createReadStream(\"\", {\n      fd,\n      encoding: \"utf8\",\n      autoClose: true,\n    });\n  } catch {\n    const stream = new Net.Socket({\n      fd,\n      readable: true,\n      writable: false,\n    });\n    stream.setEncoding(\"utf8\");\n    return stream;\n  }\n};\n\nconst isBootstrapFdPathDuplicationError = Predicate.compose(\n  Predicate.hasProperty(\"code\"),\n  (_) => _.code === \"ENXIO\" || _.code === \"EINVAL\" || _.code === \"EPERM\",\n);\n\nexport function resolveFdPath(\n  fd: number,\n  platform: NodeJS.Platform = process.platform,\n): string | undefined {\n  if (platform === \"linux\") {\n    return `/proc/self/fd/${fd}`;\n  }\n  if (platform === \"win32\") {\n    return undefined;\n  }\n  return `/dev/fd/${fd}`;\n}\n","import * as NodeOS from \"node:os\";\n\nimport * as Clock from \"effect/Clock\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as PlatformError from \"effect/PlatformError\";\n\nimport type {\n  LegacyHomeMigrationProgress,\n  LegacyHomeMigrationProgressListener,\n  LegacyHomeMigrationSource,\n} from \"./legacyHomeMigrationProgress.ts\";\n\nexport const LEGACY_T3_HOME_DIRECTORY = \".t3\";\nexport const SALCHI_HOME_DIRECTORY = \".salchi\";\nexport const LEGACY_HOME_MIGRATION_MARKER = \".t3-home-migration-complete\";\n\nexport type LegacyHomeMigrationResult =\n  | { readonly status: \"skipped-custom-home\" }\n  | { readonly status: \"already-complete\" }\n  | { readonly status: \"initialized-without-legacy-home\" }\n  | {\n      readonly status: \"migrated\";\n      readonly legacyHome: string;\n      readonly salchiHome: string;\n      readonly previousSalchiHomeBackup: string | undefined;\n    };\n\nexport interface LegacyHomeMigrationOptions {\n  readonly homeDirectory?: string;\n  readonly onProgress?: LegacyHomeMigrationProgressListener;\n}\n\ninterface MigrationDirectory {\n  readonly relativePath: string;\n  readonly mode: number;\n}\n\ninterface MigrationTree {\n  readonly rootMode: number;\n  readonly directories: ReadonlyArray<MigrationDirectory>;\n  readonly files: ReadonlyArray<string>;\n}\n\nconst notifyProgress = (\n  listener: LegacyHomeMigrationProgressListener | undefined,\n  progress: LegacyHomeMigrationProgress,\n) =>\n  Effect.sync(() => {\n    try {\n      listener?.(progress);\n    } catch {\n      // Presentation must never be able to make a durable migration fail.\n    }\n  });\n\nconst relativePathDepth = (relativePath: string): number => relativePath.split(/[/\\\\]/).length;\n\nconst scanMigrationTree = Effect.fn(\"legacyHomeMigration.scanTree\")(function* (\n  sourceRoot: string,\n  source: LegacyHomeMigrationSource,\n  onProgress: LegacyHomeMigrationProgressListener | undefined,\n) {\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  yield* notifyProgress(onProgress, { phase: \"scanning\", source });\n\n  const rootInfo = yield* fs.stat(sourceRoot);\n  const relativePaths = yield* fs.readDirectory(sourceRoot, { recursive: true });\n  const entries = yield* Effect.forEach(\n    relativePaths,\n    (relativePath) =>\n      Effect.gen(function* () {\n        const sourcePath = path.join(sourceRoot, relativePath);\n        const symbolicLink = yield* fs.readLink(sourcePath).pipe(\n          Effect.match({\n            onFailure: () => false,\n            onSuccess: () => true,\n          }),\n        );\n        if (symbolicLink) {\n          return { relativePath, directory: false } as const;\n        }\n\n        const info = yield* fs.stat(sourcePath);\n        return { relativePath, directory: info.type === \"Directory\", mode: info.mode } as const;\n      }),\n    { concurrency: 32 },\n  );\n\n  return {\n    rootMode: rootInfo.mode,\n    directories: entries\n      .filter((entry) => entry.directory)\n      .map((entry) => ({ relativePath: entry.relativePath, mode: entry.mode ?? 0o700 }))\n      .toSorted(\n        (left, right) =>\n          relativePathDepth(left.relativePath) - relativePathDepth(right.relativePath),\n      ),\n    files: entries.filter((entry) => !entry.directory).map((entry) => entry.relativePath),\n  } satisfies MigrationTree;\n});\n\nconst isBlockedPath = (path: string, blockedPaths: ReadonlySet<string>): boolean => {\n  for (const blockedPath of blockedPaths) {\n    if (\n      path === blockedPath ||\n      path.startsWith(`${blockedPath}/`) ||\n      path.startsWith(`${blockedPath}\\\\`)\n    ) {\n      return true;\n    }\n  }\n  return false;\n};\n\nconst copyMigrationTree = Effect.fn(\"legacyHomeMigration.copyTree\")(function* (\n  sourceRoot: string,\n  destinationRoot: string,\n  tree: MigrationTree,\n  options: {\n    readonly overwrite: boolean;\n    readonly blockedPaths: ReadonlySet<string>;\n    readonly onFileProcessed: (relativePath: string) => Effect.Effect<void>;\n  },\n) {\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const blockedPaths = new Set(options.blockedPaths);\n\n  const destinationRootExists = yield* fs.exists(destinationRoot);\n  if (!destinationRootExists) {\n    yield* fs.makeDirectory(destinationRoot, { recursive: true, mode: tree.rootMode });\n  }\n  if (options.overwrite || !destinationRootExists) {\n    yield* fs.chmod(destinationRoot, tree.rootMode);\n  }\n\n  for (const directory of tree.directories) {\n    const { relativePath } = directory;\n    if (isBlockedPath(relativePath, blockedPaths)) {\n      continue;\n    }\n\n    const destinationPath = path.join(destinationRoot, relativePath);\n    if (yield* fs.exists(destinationPath)) {\n      const destinationInfo = yield* fs.stat(destinationPath);\n      if (destinationInfo.type !== \"Directory\") {\n        blockedPaths.add(relativePath);\n      }\n      continue;\n    }\n    yield* fs.makeDirectory(destinationPath, { recursive: true, mode: directory.mode });\n    yield* fs.chmod(destinationPath, directory.mode);\n  }\n\n  yield* Effect.forEach(\n    tree.files,\n    (relativePath) =>\n      Effect.gen(function* () {\n        if (!isBlockedPath(relativePath, blockedPaths)) {\n          const sourcePath = path.join(sourceRoot, relativePath);\n          const destinationPath = path.join(destinationRoot, relativePath);\n          const destinationExists = yield* fs.exists(destinationPath);\n          if (options.overwrite || !destinationExists) {\n            yield* fs.copy(sourcePath, destinationPath, {\n              overwrite: options.overwrite,\n              preserveTimestamps: true,\n            });\n          }\n        }\n        yield* options.onFileProcessed(relativePath);\n      }),\n    { concurrency: 8, discard: true },\n  );\n});\n\nconst nextAvailableSiblingPath = Effect.fn(\"legacyHomeMigration.nextAvailableSiblingPath\")(\n  function* (homeDirectory: string, basename: string) {\n    const fs = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const now = yield* Clock.currentTimeMillis;\n    const seed = `${basename}-${String(process.pid)}-${String(now)}`;\n\n    for (let suffix = 0; ; suffix += 1) {\n      const candidate = path.join(homeDirectory, suffix === 0 ? seed : `${seed}-${String(suffix)}`);\n      if (!(yield* fs.exists(candidate))) {\n        return candidate;\n      }\n    }\n  },\n);\n\nconst writeMigrationMarker = Effect.fn(\"legacyHomeMigration.writeMarker\")(function* (\n  markerPath: string,\n  message: string,\n) {\n  const fs = yield* FileSystem.FileSystem;\n  yield* fs.writeFileString(markerPath, `${message}\\n`);\n});\n\n/**\n * Copies the legacy default `~/.t3` home into the default `~/.salchi` home.\n *\n * The source is intentionally retained so older T3 Code installations can\n * continue to use it. When a Salchi home already exists, legacy files win\n * conflicts, Salchi-only files are retained, and the previous Salchi tree is\n * kept as a sibling backup.\n */\nexport const migrateLegacyT3Home = Effect.fn(\"legacyHomeMigration.migrate\")(function* (\n  baseDir: string,\n  options: LegacyHomeMigrationOptions = {},\n): Effect.fn.Return<\n  LegacyHomeMigrationResult,\n  PlatformError.PlatformError,\n  FileSystem.FileSystem | Path.Path\n> {\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const homeDirectory = options.homeDirectory ?? NodeOS.homedir();\n  const legacyHome = path.resolve(path.join(homeDirectory, LEGACY_T3_HOME_DIRECTORY));\n  const salchiHome = path.resolve(path.join(homeDirectory, SALCHI_HOME_DIRECTORY));\n\n  if (path.resolve(baseDir) !== salchiHome) {\n    return { status: \"skipped-custom-home\" };\n  }\n\n  const markerPath = path.join(salchiHome, LEGACY_HOME_MIGRATION_MARKER);\n  if (yield* fs.exists(markerPath)) {\n    return { status: \"already-complete\" };\n  }\n\n  const legacyHomeExists = yield* fs.exists(legacyHome);\n  if (!legacyHomeExists) {\n    yield* fs.makeDirectory(salchiHome, { recursive: true });\n    yield* writeMigrationMarker(\n      markerPath,\n      \"Salchi initialized without a legacy ~/.t3 home to migrate.\",\n    );\n    return { status: \"initialized-without-legacy-home\" };\n  }\n\n  yield* Effect.logInfo(\"Migrating legacy T3 Code home to Salchi\", {\n    legacyHome,\n    salchiHome,\n  });\n\n  const salchiHomeExists = yield* fs.exists(salchiHome);\n  const stagingPath = yield* nextAvailableSiblingPath(homeDirectory, \".salchi-t3-migration\");\n  const previousSalchiHomeBackup = salchiHomeExists\n    ? yield* nextAvailableSiblingPath(homeDirectory, \".salchi-before-t3-migration\")\n    : undefined;\n\n  let completedFiles = 0;\n  let totalFiles = 0;\n\n  const migration = Effect.gen(function* () {\n    const legacyTree = yield* scanMigrationTree(legacyHome, \"legacy\", options.onProgress);\n    const salchiTree = salchiHomeExists\n      ? yield* scanMigrationTree(salchiHome, \"salchi\", options.onProgress)\n      : undefined;\n    totalFiles = legacyTree.files.length + (salchiTree?.files.length ?? 0);\n\n    const recordFileProcessed = (source: LegacyHomeMigrationSource) => (relativePath: string) =>\n      Effect.sync(() => {\n        completedFiles += 1;\n        try {\n          options.onProgress?.({\n            phase: \"copying\",\n            source,\n            completedFiles,\n            totalFiles,\n            currentPath: relativePath,\n          });\n        } catch {\n          // Presentation must never be able to make a durable migration fail.\n        }\n      });\n\n    const prepareStaging = Effect.gen(function* () {\n      yield* copyMigrationTree(legacyHome, stagingPath, legacyTree, {\n        overwrite: true,\n        blockedPaths: new Set(),\n        onFileProcessed: recordFileProcessed(\"legacy\"),\n      });\n      if (salchiTree !== undefined) {\n        yield* copyMigrationTree(salchiHome, stagingPath, salchiTree, {\n          overwrite: false,\n          blockedPaths: new Set(legacyTree.files),\n          onFileProcessed: recordFileProcessed(\"salchi\"),\n        });\n      }\n      yield* writeMigrationMarker(\n        path.join(stagingPath, LEGACY_HOME_MIGRATION_MARKER),\n        `Copied from ${legacyHome}. The legacy home was retained.`,\n      );\n    }).pipe(\n      Effect.tapError(() =>\n        fs.remove(stagingPath, { recursive: true, force: true }).pipe(Effect.ignore),\n      ),\n    );\n\n    yield* prepareStaging;\n    yield* notifyProgress(options.onProgress, {\n      phase: \"finalizing\",\n      completedFiles,\n      totalFiles,\n    });\n\n    if (previousSalchiHomeBackup !== undefined) {\n      yield* fs.rename(salchiHome, previousSalchiHomeBackup);\n      const swapExit = yield* Effect.exit(fs.rename(stagingPath, salchiHome));\n      if (Exit.isFailure(swapExit)) {\n        const restoreExit = yield* Effect.exit(fs.rename(previousSalchiHomeBackup, salchiHome));\n        if (Exit.isFailure(restoreExit)) {\n          yield* Effect.logError(\"Failed to restore the previous Salchi home after migration\", {\n            salchiHome,\n            previousSalchiHomeBackup,\n          });\n        }\n        return yield* Effect.failCause(swapExit.cause);\n      }\n    } else {\n      yield* fs\n        .rename(stagingPath, salchiHome)\n        .pipe(\n          Effect.tapError(() =>\n            fs.remove(stagingPath, { recursive: true, force: true }).pipe(Effect.ignore),\n          ),\n        );\n    }\n\n    yield* notifyProgress(options.onProgress, { phase: \"complete\", totalFiles });\n\n    return {\n      status: \"migrated\",\n      legacyHome,\n      salchiHome,\n      previousSalchiHomeBackup,\n    } as const;\n  }).pipe(\n    Effect.tapError(() =>\n      notifyProgress(options.onProgress, {\n        phase: \"failed\",\n        completedFiles,\n        totalFiles,\n      }),\n    ),\n  );\n\n  const result = yield* migration;\n\n  yield* Effect.logInfo(\"Legacy T3 Code home migration completed\", {\n    legacyHome,\n    salchiHome,\n    previousSalchiHomeBackup,\n  });\n\n  return result;\n});\n","export type LegacyHomeMigrationSource = \"legacy\" | \"salchi\";\n\nexport type LegacyHomeMigrationProgress =\n  | {\n      readonly phase: \"scanning\";\n      readonly source: LegacyHomeMigrationSource;\n    }\n  | {\n      readonly phase: \"copying\";\n      readonly source: LegacyHomeMigrationSource;\n      readonly completedFiles: number;\n      readonly totalFiles: number;\n      readonly currentPath: string;\n    }\n  | {\n      readonly phase: \"finalizing\";\n      readonly completedFiles: number;\n      readonly totalFiles: number;\n    }\n  | {\n      readonly phase: \"complete\";\n      readonly totalFiles: number;\n    }\n  | {\n      readonly phase: \"failed\";\n      readonly completedFiles: number;\n      readonly totalFiles: number;\n    };\n\nexport type LegacyHomeMigrationProgressListener = (progress: LegacyHomeMigrationProgress) => void;\n\nexport interface LegacyHomeMigrationProgressOutput {\n  readonly isTTY?: boolean;\n  readonly write: (text: string) => unknown;\n}\n\nconst progressBar = (completed: number, total: number, width = 24): string => {\n  const ratio = total === 0 ? 1 : Math.min(1, Math.max(0, completed / total));\n  const filled = Math.round(ratio * width);\n  return `[${\"█\".repeat(filled)}${\"░\".repeat(width - filled)}]`;\n};\n\nconst abbreviatePath = (value: string, maxLength = 48): string =>\n  value.length <= maxLength ? value : `…${value.slice(-(maxLength - 1))}`;\n\nexport const formatLegacyHomeMigrationProgress = (\n  progress: LegacyHomeMigrationProgress,\n): string => {\n  switch (progress.phase) {\n    case \"scanning\":\n      return progress.source === \"legacy\"\n        ? \"Migrating T3 data: scanning ~/.t3…\"\n        : \"Migrating T3 data: scanning existing ~/.salchi data…\";\n    case \"copying\": {\n      const percent =\n        progress.totalFiles === 0\n          ? 100\n          : Math.floor((progress.completedFiles / progress.totalFiles) * 100);\n      const remaining = Math.max(0, progress.totalFiles - progress.completedFiles);\n      const operation = progress.source === \"legacy\" ? \"copying T3 data\" : \"merging Salchi data\";\n      return [\n        `Migrating T3 data ${progressBar(progress.completedFiles, progress.totalFiles)}`,\n        `${String(percent).padStart(3, \" \")}%`,\n        `${String(progress.completedFiles)}/${String(progress.totalFiles)} files`,\n        `${String(remaining)} remaining`,\n        operation,\n        abbreviatePath(progress.currentPath),\n      ].join(\" • \");\n    }\n    case \"finalizing\":\n      return `Migrating T3 data: finalizing ${String(progress.completedFiles)}/${String(progress.totalFiles)} files…`;\n    case \"complete\":\n      return `Migrating T3 data: complete • ${String(progress.totalFiles)} files processed.`;\n    case \"failed\":\n      return `Migrating T3 data: failed after ${String(progress.completedFiles)}/${String(progress.totalFiles)} files.`;\n  }\n};\n\nconst shouldAlwaysRender = (progress: LegacyHomeMigrationProgress): boolean =>\n  progress.phase !== \"copying\" || progress.completedFiles === progress.totalFiles;\n\n/**\n * Writes an in-place progress bar for terminals and sparse milestone lines for\n * redirected output. The callback is intentionally synchronous so migration\n * progress cannot outlive or reorder the file operation it describes.\n */\nexport const createLegacyHomeMigrationProgressReporter = (\n  output: LegacyHomeMigrationProgressOutput = process.stderr,\n): LegacyHomeMigrationProgressListener => {\n  let lastLineLength = 0;\n  let lastTtyCompletedFiles = -1;\n  let lastNonTtyBucket = -1;\n  let lastPhase: LegacyHomeMigrationProgress[\"phase\"] | undefined;\n\n  return (progress) => {\n    if (output.isTTY) {\n      if (progress.phase === \"copying\" && !shouldAlwaysRender(progress)) {\n        const updateInterval = Math.max(1, Math.ceil(progress.totalFiles / 200));\n        if (progress.completedFiles - lastTtyCompletedFiles < updateInterval) {\n          return;\n        }\n        lastTtyCompletedFiles = progress.completedFiles;\n      }\n\n      const line = formatLegacyHomeMigrationProgress(progress);\n      output.write(`\\r${line.padEnd(lastLineLength, \" \")}`);\n      lastLineLength = line.length;\n      if (progress.phase === \"complete\" || progress.phase === \"failed\") {\n        output.write(\"\\n\");\n        lastLineLength = 0;\n      }\n      return;\n    }\n\n    const bucket =\n      progress.phase === \"copying\" && progress.totalFiles > 0\n        ? Math.floor((progress.completedFiles / progress.totalFiles) * 10)\n        : -1;\n    if (\n      progress.phase === lastPhase &&\n      progress.phase === \"copying\" &&\n      bucket === lastNonTtyBucket &&\n      !shouldAlwaysRender(progress)\n    ) {\n      return;\n    }\n\n    output.write(`${formatLegacyHomeMigrationProgress(progress)}\\n`);\n    lastPhase = progress.phase;\n    lastNonTtyBucket = bucket;\n  };\n};\n","// @effect-diagnostics nodeBuiltinImport:off\nimport * as NodeOS from \"node:os\";\nimport { execFileSync } from \"node:child_process\";\nimport { accessSync, constants, statSync } from \"node:fs\";\nimport * as NodePath from \"node:path\";\nimport { extname, join } from \"node:path\";\n\nconst PATH_CAPTURE_START = \"__SALCHI_PATH_START__\";\nconst PATH_CAPTURE_END = \"__SALCHI_PATH_END__\";\nconst SHELL_ENV_NAME_PATTERN = /^[A-Z0-9_]+$/;\nconst WINDOWS_PATH_DELIMITER = \";\";\nconst POSIX_PATH_DELIMITER = \":\";\nconst WINDOWS_SHELL_CANDIDATES = [\"pwsh.exe\", \"powershell.exe\"] as const;\nconst WINDOWS_SHELL_META_CHARS = /([()\\][%!^\"`<>&|;, *?])/g;\n\ntype ExecFileSyncLike = (\n  file: string,\n  args: ReadonlyArray<string>,\n  options: { encoding: \"utf8\"; timeout: number },\n) => string;\n\nexport interface CommandAvailabilityOptions {\n  readonly platform?: NodeJS.Platform;\n  readonly env?: NodeJS.ProcessEnv;\n  readonly extendEnv?: boolean;\n}\n\nexport interface WindowsEnvironmentProbeOptions {\n  readonly loadProfile?: boolean;\n}\n\nexport interface ResolvedSpawnCommand {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly shell: boolean;\n}\n\n/**\n * Escapes a single argument for `cmd.exe` shell mode (`spawn(..., { shell: true })`\n * on Windows). Node joins the command and arguments with spaces before handing\n * the command line to `cmd.exe`, so dynamic values need to survive both cmd\n * parsing and the target process' argv parsing.\n */\nfunction escapeWindowsShellArg(arg: string): string {\n  let escaped = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n  escaped = escaped.replace(/(\\\\*)$/, \"$1$1\");\n  escaped = `\"${escaped}\"`;\n  return escaped.replace(WINDOWS_SHELL_META_CHARS, \"^$1\");\n}\n\nfunction sanitizeShellModeArgsForPlatform(\n  args: ReadonlyArray<string>,\n  platform: NodeJS.Platform,\n): Array<string> {\n  return platform === \"win32\" ? args.map(escapeWindowsShellArg) : [...args];\n}\n\nfunction trimNonEmpty(value: string | null | undefined): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction readUserLoginShell(): string | undefined {\n  try {\n    return trimNonEmpty(NodeOS.userInfo().shell);\n  } catch {\n    return undefined;\n  }\n}\n\nexport function listLoginShellCandidates(\n  platform: NodeJS.Platform,\n  shell: string | undefined,\n  userShell = readUserLoginShell(),\n): ReadonlyArray<string> {\n  const fallbackShell =\n    platform === \"darwin\" ? \"/bin/zsh\" : platform === \"linux\" ? \"/bin/bash\" : undefined;\n  const seen = new Set<string>();\n  const candidates: string[] = [];\n\n  for (const candidate of [trimNonEmpty(shell), trimNonEmpty(userShell), fallbackShell]) {\n    if (!candidate || seen.has(candidate)) {\n      continue;\n    }\n    seen.add(candidate);\n    candidates.push(candidate);\n  }\n\n  return candidates;\n}\n\nexport function extractPathFromShellOutput(output: string): string | null {\n  const startIndex = output.indexOf(PATH_CAPTURE_START);\n  if (startIndex === -1) return null;\n\n  const valueStartIndex = startIndex + PATH_CAPTURE_START.length;\n  const endIndex = output.indexOf(PATH_CAPTURE_END, valueStartIndex);\n  if (endIndex === -1) return null;\n\n  const pathValue = output.slice(valueStartIndex, endIndex).trim();\n  return pathValue.length > 0 ? pathValue : null;\n}\n\nexport function readPathFromLoginShell(\n  shell: string,\n  execFile: ExecFileSyncLike = execFileSync,\n): string | undefined {\n  return readEnvironmentFromLoginShell(shell, [\"PATH\"], execFile).PATH;\n}\n\nexport function readPathFromLaunchctl(\n  execFile: ExecFileSyncLike = execFileSync,\n): string | undefined {\n  try {\n    return trimNonEmpty(\n      execFile(\"/bin/launchctl\", [\"getenv\", \"PATH\"], {\n        encoding: \"utf8\",\n        timeout: 2000,\n      }),\n    );\n  } catch {\n    return undefined;\n  }\n}\n\nexport function mergePathEntries(\n  preferredPath: string | undefined,\n  inheritedPath: string | undefined,\n  platform: NodeJS.Platform,\n): string | undefined {\n  const delimiter = platform === \"win32\" ? \";\" : \":\";\n  const merged: string[] = [];\n  const seen = new Set<string>();\n\n  for (const pathValue of [preferredPath, inheritedPath]) {\n    if (!pathValue) continue;\n    for (const entry of pathValue.split(delimiter)) {\n      const trimmedEntry = entry.trim();\n      if (!trimmedEntry || seen.has(trimmedEntry)) {\n        continue;\n      }\n      seen.add(trimmedEntry);\n      merged.push(trimmedEntry);\n    }\n  }\n\n  return merged.length > 0 ? merged.join(delimiter) : undefined;\n}\n\nfunction envCaptureStart(name: string): string {\n  return `__SALCHI_ENV_${name}_START__`;\n}\n\nfunction envCaptureEnd(name: string): string {\n  return `__SALCHI_ENV_${name}_END__`;\n}\n\nfunction buildEnvironmentCaptureCommand(names: ReadonlyArray<string>): string {\n  return names\n    .map((name) => {\n      if (!SHELL_ENV_NAME_PATTERN.test(name)) {\n        throw new Error(`Unsupported environment variable name: ${name}`);\n      }\n\n      return [\n        `printf '%s\\\\n' '${envCaptureStart(name)}'`,\n        `printenv ${name} || true`,\n        `printf '%s\\\\n' '${envCaptureEnd(name)}'`,\n      ].join(\"; \");\n    })\n    .join(\"; \");\n}\n\nfunction buildWindowsEnvironmentCaptureCommand(names: ReadonlyArray<string>): string {\n  return [\n    \"$ErrorActionPreference = 'Stop'\",\n    ...names.flatMap((name) => {\n      if (!SHELL_ENV_NAME_PATTERN.test(name)) {\n        throw new Error(`Unsupported environment variable name: ${name}`);\n      }\n\n      return [\n        `Write-Output '${envCaptureStart(name)}'`,\n        `$value = [Environment]::GetEnvironmentVariable('${name}')`,\n        \"if ($null -ne $value -and $value.Length -gt 0) { Write-Output $value }\",\n        `Write-Output '${envCaptureEnd(name)}'`,\n      ];\n    }),\n  ].join(\"; \");\n}\n\nfunction extractEnvironmentValue(output: string, name: string): string | undefined {\n  const startMarker = envCaptureStart(name);\n  const endMarker = envCaptureEnd(name);\n  const startIndex = output.indexOf(startMarker);\n  if (startIndex === -1) return undefined;\n\n  const valueStartIndex = startIndex + startMarker.length;\n  const endIndex = output.indexOf(endMarker, valueStartIndex);\n  if (endIndex === -1) return undefined;\n\n  const value = output\n    .slice(valueStartIndex, endIndex)\n    .replace(/^\\r?\\n/, \"\")\n    .replace(/\\r?\\n$/, \"\");\n\n  return value.length > 0 ? value : undefined;\n}\n\nexport type ShellEnvironmentReader = (\n  shell: string,\n  names: ReadonlyArray<string>,\n  execFile?: ExecFileSyncLike,\n) => Partial<Record<string, string>>;\n\nexport const readEnvironmentFromLoginShell: ShellEnvironmentReader = (\n  shell,\n  names,\n  execFile = execFileSync,\n) => {\n  if (names.length === 0) {\n    return {};\n  }\n\n  const output = execFile(shell, [\"-ilc\", buildEnvironmentCaptureCommand(names)], {\n    encoding: \"utf8\",\n    timeout: 5000,\n  });\n\n  const environment: Partial<Record<string, string>> = {};\n  for (const name of names) {\n    const value = extractEnvironmentValue(output, name);\n    if (value !== undefined) {\n      environment[name] = value;\n    }\n  }\n\n  return environment;\n};\n\nexport type WindowsShellEnvironmentReader = (\n  names: ReadonlyArray<string>,\n  options?: WindowsEnvironmentProbeOptions,\n) => Partial<Record<string, string>>;\n\nexport function readEnvironmentFromWindowsShell(\n  names: ReadonlyArray<string>,\n  execFile?: ExecFileSyncLike,\n): Partial<Record<string, string>>;\nexport function readEnvironmentFromWindowsShell(\n  names: ReadonlyArray<string>,\n  options?: WindowsEnvironmentProbeOptions,\n  execFile?: ExecFileSyncLike,\n): Partial<Record<string, string>>;\nexport function readEnvironmentFromWindowsShell(\n  names: ReadonlyArray<string>,\n  optionsOrExecFile?: WindowsEnvironmentProbeOptions | ExecFileSyncLike,\n  maybeExecFile?: ExecFileSyncLike,\n): Partial<Record<string, string>> {\n  if (names.length === 0) {\n    return {};\n  }\n\n  const options =\n    typeof optionsOrExecFile === \"function\"\n      ? ({} satisfies WindowsEnvironmentProbeOptions)\n      : (optionsOrExecFile ?? {});\n  const execFile: ExecFileSyncLike =\n    typeof optionsOrExecFile === \"function\"\n      ? optionsOrExecFile\n      : (maybeExecFile ?? (execFileSync as ExecFileSyncLike));\n  const command = buildWindowsEnvironmentCaptureCommand(names);\n  const args = [\n    \"-NoLogo\",\n    ...(options.loadProfile ? ([] as const) : ([\"-NoProfile\"] as const)),\n    \"-NonInteractive\",\n    \"-Command\",\n    command,\n  ];\n  for (const shell of WINDOWS_SHELL_CANDIDATES) {\n    try {\n      const output = execFile(shell, args, { encoding: \"utf8\", timeout: 5000 });\n\n      const environment: Partial<Record<string, string>> = {};\n      for (const name of names) {\n        const value = extractEnvironmentValue(output, name);\n        if (value !== undefined) {\n          environment[name] = value;\n        }\n      }\n      return environment;\n    } catch {\n      continue;\n    }\n  }\n\n  return {};\n}\n\nfunction stripWrappingQuotes(value: string): string {\n  return value.replace(/^\"+|\"+$/g, \"\");\n}\n\nfunction pathDelimiterForPlatform(platform: NodeJS.Platform): string {\n  return platform === \"win32\" ? WINDOWS_PATH_DELIMITER : POSIX_PATH_DELIMITER;\n}\n\nfunction normalizePathEntryForComparison(entry: string, platform: NodeJS.Platform): string {\n  const normalized = stripWrappingQuotes(entry.trim());\n  return platform === \"win32\" ? normalized.toLowerCase() : normalized;\n}\n\nexport function mergePathValues(\n  preferredPath: string | undefined,\n  inheritedPath: string | undefined,\n  platform: NodeJS.Platform,\n): string | undefined {\n  const delimiter = pathDelimiterForPlatform(platform);\n  const merged: string[] = [];\n  const seen = new Set<string>();\n\n  for (const rawValue of [preferredPath, inheritedPath]) {\n    if (!rawValue) continue;\n\n    for (const entry of rawValue.split(delimiter)) {\n      const trimmed = entry.trim();\n      if (trimmed.length === 0) continue;\n\n      const normalized = normalizePathEntryForComparison(trimmed, platform);\n      if (normalized.length === 0 || seen.has(normalized)) continue;\n\n      seen.add(normalized);\n      merged.push(trimmed);\n    }\n  }\n\n  return merged.length > 0 ? merged.join(delimiter) : undefined;\n}\n\nfunction readEnvPath(env: NodeJS.ProcessEnv): string | undefined {\n  return env.PATH ?? env.Path ?? env.path;\n}\n\nfunction resolvePathEnvironmentVariable(env: NodeJS.ProcessEnv): string {\n  return readEnvPath(env) ?? \"\";\n}\n\nfunction resolveWindowsPathExtensions(env: NodeJS.ProcessEnv): ReadonlyArray<string> {\n  const rawValue = env.PATHEXT;\n  const fallback = [\".COM\", \".EXE\", \".BAT\", \".CMD\"];\n  if (!rawValue) return fallback;\n\n  const parsed: string[] = [];\n  for (const entry of rawValue.split(\";\")) {\n    const trimmed = entry.trim();\n    if (trimmed.length === 0) continue;\n    parsed.push(trimmed.startsWith(\".\") ? trimmed.toUpperCase() : `.${trimmed.toUpperCase()}`);\n  }\n  return parsed.length > 0 ? Array.from(new Set(parsed)) : fallback;\n}\n\nfunction resolveCommandCandidates(\n  command: string,\n  platform: NodeJS.Platform,\n  windowsPathExtensions: ReadonlyArray<string>,\n): ReadonlyArray<string> {\n  if (platform !== \"win32\") return [command];\n  const extension = extname(command);\n  const normalizedExtension = extension.toUpperCase();\n\n  if (extension.length > 0 && windowsPathExtensions.includes(normalizedExtension)) {\n    const commandWithoutExtension = command.slice(0, -extension.length);\n    return Array.from(\n      new Set([\n        command,\n        `${commandWithoutExtension}${normalizedExtension}`,\n        `${commandWithoutExtension}${normalizedExtension.toLowerCase()}`,\n      ]),\n    );\n  }\n\n  const candidates: string[] = [];\n  for (const candidateExtension of windowsPathExtensions) {\n    candidates.push(`${command}${candidateExtension}`);\n    candidates.push(`${command}${candidateExtension.toLowerCase()}`);\n  }\n  return Array.from(new Set(candidates));\n}\n\nfunction isExecutableFile(\n  filePath: string,\n  platform: NodeJS.Platform,\n  windowsPathExtensions: ReadonlyArray<string>,\n): boolean {\n  try {\n    const stat = statSync(filePath);\n    if (!stat.isFile()) return false;\n    if (platform === \"win32\") {\n      const extension = extname(filePath);\n      if (extension.length === 0) return false;\n      return windowsPathExtensions.includes(extension.toUpperCase());\n    }\n    accessSync(filePath, constants.X_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function resolveCommandPath(\n  command: string,\n  options: CommandAvailabilityOptions = {},\n): string | null {\n  const platform = options.platform ?? process.platform;\n  const env = options.env ?? process.env;\n  const windowsPathExtensions = platform === \"win32\" ? resolveWindowsPathExtensions(env) : [];\n  const commandCandidates = resolveCommandCandidates(command, platform, windowsPathExtensions);\n\n  if (command.includes(\"/\") || command.includes(\"\\\\\")) {\n    for (const candidate of commandCandidates) {\n      if (isExecutableFile(candidate, platform, windowsPathExtensions)) {\n        return candidate;\n      }\n    }\n    return null;\n  }\n\n  const pathValue = resolvePathEnvironmentVariable(env);\n  if (pathValue.length === 0) return null;\n  const pathEntries: string[] = [];\n  for (const entry of pathValue.split(pathDelimiterForPlatform(platform))) {\n    const pathEntry = stripWrappingQuotes(entry.trim());\n    if (pathEntry.length > 0) {\n      pathEntries.push(pathEntry);\n    }\n  }\n\n  for (const pathEntry of pathEntries) {\n    for (const candidate of commandCandidates) {\n      const candidatePath = join(pathEntry, candidate);\n      if (isExecutableFile(candidatePath, platform, windowsPathExtensions)) {\n        return candidatePath;\n      }\n    }\n  }\n  return null;\n}\n\nfunction resolveSpawnEnvironment(options: CommandAvailabilityOptions): NodeJS.ProcessEnv {\n  if (options.env === undefined) return process.env;\n  if (options.extendEnv) return { ...process.env, ...options.env };\n  return options.env;\n}\n\nexport function resolveSpawnCommand(\n  command: string,\n  args: ReadonlyArray<string>,\n  options: CommandAvailabilityOptions = {},\n): ResolvedSpawnCommand {\n  const platform = options.platform ?? process.platform;\n  if (platform !== \"win32\") {\n    return { command, args: [...args], shell: false };\n  }\n\n  const env = resolveSpawnEnvironment(options);\n  const resolvedCommand = resolveCommandPath(command, { platform, env }) ?? command;\n  const extension = NodePath.win32.extname(resolvedCommand).toLowerCase();\n  if (extension !== \".cmd\" && extension !== \".bat\") {\n    return { command: resolvedCommand, args: [...args], shell: false };\n  }\n\n  return {\n    command: escapeWindowsShellArg(resolvedCommand),\n    args: sanitizeShellModeArgsForPlatform(args, platform),\n    shell: true,\n  };\n}\n\nexport function isCommandAvailable(\n  command: string,\n  options: CommandAvailabilityOptions = {},\n): boolean {\n  return resolveCommandPath(command, options) !== null;\n}\n\nexport function resolveKnownWindowsCliDirs(env: NodeJS.ProcessEnv): ReadonlyArray<string> {\n  const appData = env.APPDATA?.trim();\n  const localAppData = env.LOCALAPPDATA?.trim();\n  const userProfile = env.USERPROFILE?.trim();\n\n  return [\n    ...(appData ? [`${appData}\\\\npm`] : []),\n    ...(localAppData ? [`${localAppData}\\\\Programs\\\\nodejs`, `${localAppData}\\\\Volta\\\\bin`] : []),\n    ...(localAppData ? [`${localAppData}\\\\pnpm`] : []),\n    ...(userProfile ? [`${userProfile}\\\\.bun\\\\bin`, `${userProfile}\\\\scoop\\\\shims`] : []),\n  ];\n}\n\nexport interface WindowsEnvironmentResolverOptions {\n  readonly readEnvironment?: WindowsShellEnvironmentReader;\n  readonly commandAvailable?: typeof isCommandAvailable;\n}\n\nfunction readWindowsEnvironmentSafely(\n  readEnvironment: WindowsShellEnvironmentReader,\n  names: ReadonlyArray<string>,\n  options?: WindowsEnvironmentProbeOptions,\n): Partial<Record<string, string>> {\n  try {\n    return readEnvironment(names, options);\n  } catch {\n    return {};\n  }\n}\n\nfunction mergeWindowsEnv(\n  currentEnv: NodeJS.ProcessEnv,\n  patch: Partial<Record<string, string>>,\n): NodeJS.ProcessEnv {\n  const nextEnv: NodeJS.ProcessEnv = { ...currentEnv };\n  for (const [key, value] of Object.entries(patch)) {\n    if (value !== undefined) {\n      nextEnv[key] = value;\n    }\n  }\n  return nextEnv;\n}\n\nexport function resolveWindowsEnvironment(\n  env: NodeJS.ProcessEnv,\n  options: WindowsEnvironmentResolverOptions = {},\n): Partial<NodeJS.ProcessEnv> {\n  const readEnvironment = options.readEnvironment ?? readEnvironmentFromWindowsShell;\n  const commandAvailable = options.commandAvailable ?? isCommandAvailable;\n  const inheritedPath = readEnvPath(env);\n  const shellPath = readWindowsEnvironmentSafely(readEnvironment, [\"PATH\"], {\n    loadProfile: false,\n  }).PATH;\n  const mergedPath = mergePathValues(shellPath, inheritedPath, \"win32\");\n  const knownCliPath = resolveKnownWindowsCliDirs(env).join(WINDOWS_PATH_DELIMITER);\n  const baselinePath = mergePathValues(knownCliPath, mergedPath, \"win32\");\n  const baselinePatch: Partial<NodeJS.ProcessEnv> = baselinePath ? { PATH: baselinePath } : {};\n  const baselineEnv = mergeWindowsEnv(env, baselinePatch);\n\n  if (commandAvailable(\"node\", { platform: \"win32\", env: baselineEnv })) {\n    return baselinePatch;\n  }\n\n  const profiledEnvironment = readWindowsEnvironmentSafely(\n    readEnvironment,\n    [\"PATH\", \"FNM_DIR\", \"FNM_MULTISHELL_PATH\"],\n    { loadProfile: true },\n  );\n  const profiledPath = mergePathValues(profiledEnvironment.PATH, baselinePath, \"win32\");\n  const profiledPatch: Partial<NodeJS.ProcessEnv> = {\n    ...(profiledPath ? { PATH: profiledPath } : {}),\n    ...(profiledEnvironment.FNM_DIR ? { FNM_DIR: profiledEnvironment.FNM_DIR } : {}),\n    ...(profiledEnvironment.FNM_MULTISHELL_PATH\n      ? { FNM_MULTISHELL_PATH: profiledEnvironment.FNM_MULTISHELL_PATH }\n      : {}),\n  };\n  return Object.keys(profiledPatch).length > 0\n    ? { ...baselinePatch, ...profiledPatch }\n    : baselinePatch;\n}\n","import * as NodeOS from \"node:os\";\nimport * as Effect from \"effect/Effect\";\nimport * as Path from \"effect/Path\";\nimport {\n  readPathFromLoginShell,\n  readEnvironmentFromWindowsShell,\n  resolveWindowsEnvironment,\n  type CommandAvailabilityOptions,\n  type WindowsShellEnvironmentReader,\n  listLoginShellCandidates,\n  mergePathEntries,\n  readPathFromLaunchctl,\n} from \"@salchi/shared/shell\";\n\ntype WindowsCommandAvailabilityChecker = (\n  command: string,\n  options?: CommandAvailabilityOptions,\n) => boolean;\n\nfunction logPathHydrationWarning(message: string, error?: unknown): void {\n  process.stderr.write(\n    `[server] ${message} ${error instanceof Error ? error.message : (error ?? \"\")}\\n`,\n  );\n}\n\nexport function fixPath(\n  options: {\n    env?: NodeJS.ProcessEnv;\n    platform?: NodeJS.Platform;\n    readPath?: typeof readPathFromLoginShell;\n    readWindowsEnvironment?: WindowsShellEnvironmentReader;\n    isWindowsCommandAvailable?: WindowsCommandAvailabilityChecker;\n    readLaunchctlPath?: typeof readPathFromLaunchctl;\n    userShell?: string;\n    logWarning?: (message: string, error?: unknown) => void;\n  } = {},\n): void {\n  const platform = options.platform ?? process.platform;\n  const env = options.env ?? process.env;\n  const logWarning = options.logWarning ?? logPathHydrationWarning;\n  const readPath = options.readPath ?? readPathFromLoginShell;\n\n  try {\n    if (platform === \"win32\") {\n      const repairedEnvironment = resolveWindowsEnvironment(env, {\n        readEnvironment: options.readWindowsEnvironment ?? readEnvironmentFromWindowsShell,\n        ...(options.isWindowsCommandAvailable\n          ? { commandAvailable: options.isWindowsCommandAvailable }\n          : {}),\n      });\n      for (const [key, value] of Object.entries(repairedEnvironment)) {\n        if (value !== undefined) {\n          env[key] = value;\n        }\n      }\n      return;\n    }\n\n    if (platform !== \"darwin\" && platform !== \"linux\") return;\n\n    let shellPath: string | undefined;\n    for (const shell of listLoginShellCandidates(platform, env.SHELL, options.userShell)) {\n      try {\n        shellPath = readPath(shell);\n      } catch (error) {\n        logWarning(`Failed to read PATH from login shell ${shell}.`, error);\n      }\n\n      if (shellPath) {\n        break;\n      }\n    }\n\n    const launchctlPath =\n      platform === \"darwin\" && !shellPath\n        ? (options.readLaunchctlPath ?? readPathFromLaunchctl)()\n        : undefined;\n    const mergedPath = mergePathEntries(shellPath ?? launchctlPath, env.PATH, platform);\n    if (mergedPath) {\n      env.PATH = mergedPath;\n    }\n  } catch (error) {\n    logWarning(\"Failed to hydrate PATH from the user environment.\", error);\n  }\n}\n\nexport const expandHomePath = Effect.fn(function* (input: string) {\n  const { join } = yield* Path.Path;\n  if (input === \"~\") {\n    return NodeOS.homedir();\n  }\n  if (input.startsWith(\"~/\") || input.startsWith(\"~\\\\\")) {\n    return join(NodeOS.homedir(), input.slice(2));\n  }\n  return input;\n});\n\nexport const resolveBaseDir = Effect.fn(function* (raw: string | undefined) {\n  const { join, resolve } = yield* Path.Path;\n  if (!raw || raw.trim().length === 0) {\n    return join(NodeOS.homedir(), \".salchi\");\n  }\n  return resolve(yield* expandHomePath(raw.trim()));\n});\n","import * as NetService from \"@salchi/shared/Net\";\nimport { parsePersistedServerObservabilitySettings } from \"@salchi/shared/serverSettings\";\nimport { DesktopBackendBootstrap, PortSchema } from \"@salchi/contracts\";\nimport * as Config from \"effect/Config\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as LogLevel from \"effect/LogLevel\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\nimport { Argument, Flag } from \"effect/unstable/cli\";\n\nimport { readBootstrapEnvelope } from \"../bootstrap.ts\";\nimport {\n  DEFAULT_PORT,\n  deriveServerPaths,\n  ensureServerDirectories,\n  resolveStaticDir,\n  RuntimeMode,\n  type ServerConfigShape,\n  type StartupPresentation,\n} from \"../config.ts\";\nimport { migrateLegacyT3Home } from \"../legacyHomeMigration.ts\";\nimport { createLegacyHomeMigrationProgressReporter } from \"../legacyHomeMigrationProgress.ts\";\nimport { expandHomePath, resolveBaseDir } from \"../os-jank.ts\";\n\nexport const modeFlag = Flag.choice(\"mode\", RuntimeMode.literals).pipe(\n  Flag.withDescription(\"Runtime mode. `desktop` keeps loopback defaults unless overridden.\"),\n  Flag.optional,\n);\nexport const portFlag = Flag.integer(\"port\").pipe(\n  Flag.withSchema(PortSchema),\n  Flag.withDescription(\"Port for the HTTP/WebSocket server.\"),\n  Flag.optional,\n);\nexport const hostFlag = Flag.string(\"host\").pipe(\n  Flag.withDescription(\"Host/interface to bind (for example 127.0.0.1, 0.0.0.0, or a Tailnet IP).\"),\n  Flag.optional,\n);\nexport const baseDirFlag = Flag.string(\"base-dir\").pipe(\n  Flag.withDescription(\"Base directory path (equivalent to SALCHI_HOME).\"),\n  Flag.optional,\n);\nexport const devUrlFlag = Flag.string(\"dev-url\").pipe(\n  Flag.withSchema(Schema.URLFromString),\n  Flag.withDescription(\"Dev web URL to proxy/redirect to (equivalent to VITE_DEV_SERVER_URL).\"),\n  Flag.optional,\n);\nexport const noBrowserFlag = Flag.boolean(\"no-browser\").pipe(\n  Flag.withDescription(\"Disable automatic browser opening.\"),\n  Flag.optional,\n);\nexport const bootstrapFdFlag = Flag.integer(\"bootstrap-fd\").pipe(\n  Flag.withSchema(Schema.Int),\n  Flag.withDescription(\"Read one-time bootstrap secrets from the given file descriptor.\"),\n  Flag.optional,\n);\nexport const autoBootstrapProjectFromCwdFlag = Flag.boolean(\"auto-bootstrap-project-from-cwd\").pipe(\n  Flag.withDescription(\n    \"Create a project for the current working directory on startup when missing.\",\n  ),\n  Flag.optional,\n);\nexport const logWebSocketEventsFlag = Flag.boolean(\"log-websocket-events\").pipe(\n  Flag.withDescription(\n    \"Emit server-side logs for outbound WebSocket push traffic (equivalent to SALCHI_LOG_WS_EVENTS).\",\n  ),\n  Flag.withAlias(\"log-ws-events\"),\n  Flag.optional,\n);\nexport const tailscaleServeFlag = Flag.boolean(\"tailscale-serve\").pipe(\n  Flag.withDescription(\n    \"Configure Tailscale Serve to expose this backend over HTTPS on the Tailnet.\",\n  ),\n  Flag.optional,\n);\nexport const tailscaleServePortFlag = Flag.integer(\"tailscale-serve-port\").pipe(\n  Flag.withSchema(PortSchema),\n  Flag.withDescription(\"HTTPS port for Tailscale Serve when --tailscale-serve is enabled.\"),\n  Flag.optional,\n);\n\nconst EnvServerConfig = Config.all({\n  logLevel: Config.logLevel(\"SALCHI_LOG_LEVEL\").pipe(Config.withDefault(\"Info\")),\n  traceMinLevel: Config.logLevel(\"SALCHI_TRACE_MIN_LEVEL\").pipe(Config.withDefault(\"Info\")),\n  traceTimingEnabled: Config.boolean(\"SALCHI_TRACE_TIMING_ENABLED\").pipe(Config.withDefault(true)),\n  traceFile: Config.string(\"SALCHI_TRACE_FILE\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  traceMaxBytes: Config.int(\"SALCHI_TRACE_MAX_BYTES\").pipe(Config.withDefault(10 * 1024 * 1024)),\n  traceMaxFiles: Config.int(\"SALCHI_TRACE_MAX_FILES\").pipe(Config.withDefault(10)),\n  traceBatchWindowMs: Config.int(\"SALCHI_TRACE_BATCH_WINDOW_MS\").pipe(Config.withDefault(200)),\n  otlpTracesUrl: Config.string(\"SALCHI_OTLP_TRACES_URL\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  otlpMetricsUrl: Config.string(\"SALCHI_OTLP_METRICS_URL\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  otlpExportIntervalMs: Config.int(\"SALCHI_OTLP_EXPORT_INTERVAL_MS\").pipe(\n    Config.withDefault(10_000),\n  ),\n  otlpServiceName: Config.string(\"SALCHI_OTLP_SERVICE_NAME\").pipe(\n    Config.withDefault(\"salchi-server\"),\n  ),\n  mode: Config.schema(RuntimeMode, \"SALCHI_MODE\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  port: Config.port(\"SALCHI_PORT\").pipe(Config.option, Config.map(Option.getOrUndefined)),\n  host: Config.string(\"SALCHI_HOST\").pipe(Config.option, Config.map(Option.getOrUndefined)),\n  salchiHome: Config.string(\"SALCHI_HOME\").pipe(Config.option, Config.map(Option.getOrUndefined)),\n  devUrl: Config.url(\"VITE_DEV_SERVER_URL\").pipe(Config.option, Config.map(Option.getOrUndefined)),\n  noBrowser: Config.boolean(\"SALCHI_NO_BROWSER\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  bootstrapFd: Config.int(\"SALCHI_BOOTSTRAP_FD\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  autoBootstrapProjectFromCwd: Config.boolean(\"SALCHI_AUTO_BOOTSTRAP_PROJECT_FROM_CWD\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  logWebSocketEvents: Config.boolean(\"SALCHI_LOG_WS_EVENTS\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  tailscaleServeEnabled: Config.boolean(\"SALCHI_TAILSCALE_SERVE\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  tailscaleServePort: Config.port(\"SALCHI_TAILSCALE_SERVE_PORT\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  whisperServerUrl: Config.url(\"SALCHI_WHISPER_SERVER_URL\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  whisperAutoProvision: Config.boolean(\"SALCHI_WHISPER_AUTO_PROVISION\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n});\n\nexport interface CliServerFlags {\n  readonly mode: Option.Option<RuntimeMode>;\n  readonly port: Option.Option<number>;\n  readonly host: Option.Option<string>;\n  readonly baseDir: Option.Option<string>;\n  readonly cwd: Option.Option<string>;\n  readonly devUrl: Option.Option<URL>;\n  readonly noBrowser: Option.Option<boolean>;\n  readonly bootstrapFd: Option.Option<number>;\n  readonly autoBootstrapProjectFromCwd: Option.Option<boolean>;\n  readonly logWebSocketEvents: Option.Option<boolean>;\n  readonly tailscaleServeEnabled: Option.Option<boolean>;\n  readonly tailscaleServePort: Option.Option<number>;\n}\n\nexport interface CliAuthLocationFlags {\n  readonly baseDir: Option.Option<string>;\n  readonly devUrl?: Option.Option<URL>;\n}\n\nexport const sharedServerLocationFlags = {\n  baseDir: baseDirFlag,\n  devUrl: devUrlFlag,\n} as const;\n\nexport const projectLocationFlags = {\n  baseDir: baseDirFlag,\n} as const;\n\nexport const sharedServerCommandFlags = {\n  mode: modeFlag,\n  port: portFlag,\n  host: hostFlag,\n  baseDir: baseDirFlag,\n  cwd: Argument.string(\"cwd\").pipe(\n    Argument.withDescription(\n      \"Working directory for provider sessions (defaults to the current directory).\",\n    ),\n    Argument.optional,\n  ),\n  devUrl: devUrlFlag,\n  noBrowser: noBrowserFlag,\n  bootstrapFd: bootstrapFdFlag,\n  autoBootstrapProjectFromCwd: autoBootstrapProjectFromCwdFlag,\n  logWebSocketEvents: logWebSocketEventsFlag,\n  tailscaleServeEnabled: tailscaleServeFlag,\n  tailscaleServePort: tailscaleServePortFlag,\n} as const;\n\nexport const authLocationFlags = sharedServerLocationFlags;\n\nconst resolveOptionPrecedence = <Value>(\n  ...values: ReadonlyArray<Option.Option<Value>>\n): Option.Option<Value> => Option.firstSomeOf(values);\n\nconst loadPersistedObservabilitySettings = Effect.fn(function* (settingsPath: string) {\n  const fs = yield* FileSystem.FileSystem;\n  const exists = yield* fs.exists(settingsPath).pipe(Effect.orElseSucceed(() => false));\n  if (!exists) {\n    return { otlpTracesUrl: undefined, otlpMetricsUrl: undefined };\n  }\n\n  const raw = yield* fs.readFileString(settingsPath).pipe(Effect.orElseSucceed(() => \"\"));\n  return parsePersistedServerObservabilitySettings(raw);\n});\n\nexport const resolveServerConfig = (\n  flags: CliServerFlags,\n  cliLogLevel: Option.Option<LogLevel.LogLevel>,\n  options?: {\n    readonly startupPresentation?: StartupPresentation;\n    readonly forceAutoBootstrapProjectFromCwd?: boolean;\n    readonly defaultHost?: string;\n    readonly defaultTailscaleServeEnabled?: boolean;\n    readonly defaultTailscaleServePort?: number;\n  },\n) =>\n  Effect.gen(function* () {\n    const { findAvailablePort } = yield* NetService.NetService;\n    const path = yield* Path.Path;\n    const fs = yield* FileSystem.FileSystem;\n    const env = yield* EnvServerConfig;\n    const normalizedFlags = {\n      mode: flags.mode ?? Option.none(),\n      port: flags.port ?? Option.none(),\n      host: flags.host ?? Option.none(),\n      baseDir: flags.baseDir ?? Option.none(),\n      cwd: flags.cwd ?? Option.none(),\n      devUrl: flags.devUrl ?? Option.none(),\n      noBrowser: flags.noBrowser ?? Option.none(),\n      bootstrapFd: flags.bootstrapFd ?? Option.none(),\n      autoBootstrapProjectFromCwd: flags.autoBootstrapProjectFromCwd ?? Option.none(),\n      logWebSocketEvents: flags.logWebSocketEvents ?? Option.none(),\n      tailscaleServeEnabled: flags.tailscaleServeEnabled ?? Option.none(),\n      tailscaleServePort: flags.tailscaleServePort ?? Option.none(),\n    } satisfies CliServerFlags;\n    const bootstrapFd = Option.getOrUndefined(normalizedFlags.bootstrapFd) ?? env.bootstrapFd;\n    const bootstrapEnvelope =\n      bootstrapFd !== undefined\n        ? yield* readBootstrapEnvelope(DesktopBackendBootstrap, bootstrapFd)\n        : Option.none();\n    const bootstrap = Option.getOrUndefined(bootstrapEnvelope);\n\n    const mode: RuntimeMode = Option.getOrElse(\n      resolveOptionPrecedence(\n        normalizedFlags.mode,\n        Option.fromUndefinedOr(env.mode),\n        Option.fromUndefinedOr(bootstrap?.mode),\n      ),\n      () => \"web\",\n    );\n\n    const port = yield* Option.match(\n      resolveOptionPrecedence(\n        normalizedFlags.port,\n        Option.fromUndefinedOr(env.port),\n        Option.fromUndefinedOr(bootstrap?.port),\n      ),\n      {\n        onSome: (value) => Effect.succeed(value),\n        onNone: () => {\n          if (mode === \"desktop\") {\n            return Effect.succeed(DEFAULT_PORT);\n          }\n          return findAvailablePort(DEFAULT_PORT);\n        },\n      },\n    );\n    const devUrl = Option.getOrElse(\n      resolveOptionPrecedence(normalizedFlags.devUrl, Option.fromUndefinedOr(env.devUrl)),\n      () => undefined,\n    );\n    const baseDir = yield* resolveBaseDir(\n      Option.getOrUndefined(\n        resolveOptionPrecedence(\n          normalizedFlags.baseDir,\n          Option.fromUndefinedOr(env.salchiHome),\n          Option.fromUndefinedOr(bootstrap?.salchiHome),\n        ),\n      ),\n    );\n    yield* migrateLegacyT3Home(baseDir, {\n      onProgress: createLegacyHomeMigrationProgressReporter(),\n    });\n    const rawCwd = Option.getOrElse(normalizedFlags.cwd, () => process.cwd());\n    const cwd = path.resolve(yield* expandHomePath(rawCwd.trim()));\n    yield* fs.makeDirectory(cwd, { recursive: true });\n    const derivedPaths = yield* deriveServerPaths(baseDir, devUrl);\n    yield* ensureServerDirectories(derivedPaths);\n    const persistedObservabilitySettings = yield* loadPersistedObservabilitySettings(\n      derivedPaths.settingsPath,\n    );\n    const serverTracePath = env.traceFile ?? derivedPaths.serverTracePath;\n    yield* fs.makeDirectory(path.dirname(serverTracePath), { recursive: true });\n    const startupPresentation = options?.startupPresentation ?? \"browser\";\n    const isHeadlessStartup = startupPresentation === \"headless\";\n    const noBrowser = Option.getOrElse(\n      resolveOptionPrecedence(\n        isHeadlessStartup ? Option.some(true) : Option.none(),\n        normalizedFlags.noBrowser,\n        Option.fromUndefinedOr(env.noBrowser),\n        Option.fromUndefinedOr(bootstrap?.noBrowser),\n      ),\n      () => true,\n    );\n    const desktopBootstrapToken = bootstrap?.desktopBootstrapToken;\n    const autoBootstrapProjectFromCwd = Option.getOrElse(\n      resolveOptionPrecedence(\n        Option.fromUndefinedOr(options?.forceAutoBootstrapProjectFromCwd),\n        isHeadlessStartup ? Option.some(false) : Option.none(),\n        normalizedFlags.autoBootstrapProjectFromCwd,\n        Option.fromUndefinedOr(env.autoBootstrapProjectFromCwd),\n      ),\n      () => mode === \"web\",\n    );\n    const logWebSocketEvents = Option.getOrElse(\n      resolveOptionPrecedence(\n        normalizedFlags.logWebSocketEvents,\n        Option.fromUndefinedOr(env.logWebSocketEvents),\n      ),\n      () => Boolean(devUrl),\n    );\n    const tailscaleServeEnabled = Option.getOrElse(\n      resolveOptionPrecedence(\n        normalizedFlags.tailscaleServeEnabled,\n        Option.fromUndefinedOr(env.tailscaleServeEnabled),\n        Option.fromUndefinedOr(options?.defaultTailscaleServeEnabled),\n        Option.fromUndefinedOr(bootstrap?.tailscaleServeEnabled),\n      ),\n      () => false,\n    );\n    const tailscaleServePort = Option.getOrElse(\n      resolveOptionPrecedence(\n        normalizedFlags.tailscaleServePort,\n        Option.fromUndefinedOr(env.tailscaleServePort),\n        Option.fromUndefinedOr(options?.defaultTailscaleServePort),\n        Option.fromUndefinedOr(bootstrap?.tailscaleServePort),\n      ),\n      () => 443,\n    );\n    const staticDir = devUrl ? undefined : yield* resolveStaticDir();\n    const host = Option.getOrElse(\n      resolveOptionPrecedence(\n        normalizedFlags.host,\n        Option.fromUndefinedOr(env.host),\n        Option.fromUndefinedOr(options?.defaultHost),\n        Option.fromUndefinedOr(tailscaleServeEnabled ? \"127.0.0.1\" : undefined),\n        Option.fromUndefinedOr(bootstrap?.host),\n      ),\n      () => (mode === \"desktop\" ? \"127.0.0.1\" : undefined),\n    );\n    const logLevel = Option.getOrElse(cliLogLevel, () => env.logLevel);\n\n    const config: ServerConfigShape = {\n      logLevel,\n      traceMinLevel: env.traceMinLevel,\n      traceTimingEnabled: env.traceTimingEnabled,\n      traceBatchWindowMs: env.traceBatchWindowMs,\n      traceMaxBytes: env.traceMaxBytes,\n      traceMaxFiles: env.traceMaxFiles,\n      otlpTracesUrl:\n        env.otlpTracesUrl ??\n        bootstrap?.otlpTracesUrl ??\n        persistedObservabilitySettings.otlpTracesUrl,\n      otlpMetricsUrl:\n        env.otlpMetricsUrl ??\n        bootstrap?.otlpMetricsUrl ??\n        persistedObservabilitySettings.otlpMetricsUrl,\n      otlpExportIntervalMs: env.otlpExportIntervalMs,\n      otlpServiceName: env.otlpServiceName,\n      mode,\n      port,\n      cwd,\n      baseDir,\n      ...derivedPaths,\n      serverTracePath,\n      host,\n      staticDir,\n      devUrl,\n      noBrowser,\n      startupPresentation,\n      desktopBootstrapToken,\n      autoBootstrapProjectFromCwd,\n      logWebSocketEvents,\n      tailscaleServeEnabled,\n      tailscaleServePort,\n      whisperServerUrl: env.whisperServerUrl,\n      whisperAutoProvision: env.whisperAutoProvision ?? true,\n    };\n\n    return config;\n  });\n\nexport const resolveCliAuthConfig = (\n  flags: CliAuthLocationFlags,\n  cliLogLevel: Option.Option<LogLevel.LogLevel>,\n) =>\n  resolveServerConfig(\n    {\n      mode: Option.none(),\n      port: Option.none(),\n      host: Option.none(),\n      baseDir: flags.baseDir,\n      cwd: Option.none(),\n      devUrl: flags.devUrl ?? Option.none(),\n      noBrowser: Option.none(),\n      bootstrapFd: Option.none(),\n      autoBootstrapProjectFromCwd: Option.none(),\n      logWebSocketEvents: Option.none(),\n      tailscaleServeEnabled: Option.none(),\n      tailscaleServePort: Option.none(),\n    },\n    cliLogLevel,\n  );\n\nconst DurationShorthandPattern = /^(?<value>\\d+)(?<unit>ms|s|m|h|d|w)$/i;\n\nconst parseDurationInput = (value: string): Duration.Duration | null => {\n  const trimmed = value.trim();\n  if (trimmed.length === 0) return null;\n\n  const shorthand = DurationShorthandPattern.exec(trimmed);\n  const normalizedInput = shorthand?.groups\n    ? (() => {\n        const amountText = shorthand.groups.value;\n        const unitText = shorthand.groups.unit;\n        if (typeof amountText !== \"string\" || typeof unitText !== \"string\") {\n          return null;\n        }\n\n        const amount = Number.parseInt(amountText, 10);\n        if (!Number.isFinite(amount)) return null;\n\n        switch (unitText.toLowerCase()) {\n          case \"ms\":\n            return `${amount} millis`;\n          case \"s\":\n            return `${amount} seconds`;\n          case \"m\":\n            return `${amount} minutes`;\n          case \"h\":\n            return `${amount} hours`;\n          case \"d\":\n            return `${amount} days`;\n          case \"w\":\n            return `${amount} weeks`;\n          default:\n            return null;\n        }\n      })()\n    : (trimmed as Duration.Input);\n\n  if (normalizedInput === null) return null;\n\n  const decoded = Duration.fromInput(normalizedInput as Duration.Input);\n  return Option.isSome(decoded) ? decoded.value : null;\n};\n\nexport const DurationFromString = Schema.String.pipe(\n  Schema.decodeTo(\n    Schema.Duration,\n    SchemaTransformation.transformOrFail({\n      decode: (value) => {\n        const duration = parseDurationInput(value);\n        if (duration !== null) {\n          return Effect.succeed(duration);\n        }\n        return Effect.fail(\n          new SchemaIssue.InvalidValue(Option.some(value), {\n            message: \"Invalid duration. Use values like 5m, 1h, 30d, or 15 minutes.\",\n          }),\n        );\n      },\n      encode: (duration) => Effect.succeed(Duration.format(duration)),\n    }),\n  ),\n);\n","import { AuthSessionId } from \"@salchi/contracts\";\nimport * as Console from \"effect/Console\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as References from \"effect/References\";\nimport { Argument, Command, Flag, GlobalFlag } from \"effect/unstable/cli\";\n\nimport { AuthControlPlaneRuntimeLive } from \"../auth/Layers/AuthControlPlane.ts\";\nimport { AuthControlPlane } from \"../auth/Services/AuthControlPlane.ts\";\nimport type { AuthControlPlaneShape } from \"../auth/Services/AuthControlPlane.ts\";\nimport {\n  formatIssuedPairingCredential,\n  formatIssuedSession,\n  formatPairingCredentialList,\n  formatSessionList,\n} from \"../cliAuthFormat.ts\";\nimport { ServerConfig } from \"../config.ts\";\nimport {\n  authLocationFlags,\n  type CliAuthLocationFlags,\n  DurationFromString,\n  resolveCliAuthConfig,\n} from \"./config.ts\";\n\nconst runWithAuthControlPlane = <A, E>(\n  flags: CliAuthLocationFlags,\n  run: (authControlPlane: AuthControlPlaneShape) => Effect.Effect<A, E>,\n  options?: {\n    readonly quietLogs?: boolean;\n  },\n) =>\n  Effect.gen(function* () {\n    const logLevel = yield* GlobalFlag.LogLevel;\n    const config = yield* resolveCliAuthConfig(flags, logLevel);\n    const minimumLogLevel = options?.quietLogs ? \"Error\" : config.logLevel;\n    return yield* Effect.gen(function* () {\n      const authControlPlane = yield* AuthControlPlane;\n      return yield* run(authControlPlane);\n    }).pipe(\n      Effect.provide(\n        Layer.mergeAll(AuthControlPlaneRuntimeLive).pipe(\n          Layer.provide(Layer.succeed(ServerConfig, config)),\n          Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)),\n        ),\n      ),\n    );\n  });\n\nconst ttlFlag = Flag.string(\"ttl\").pipe(\n  Flag.withSchema(DurationFromString),\n  Flag.withDescription(\"TTL, for example `5m`, `1h`, `30d`, or `15 minutes`.\"),\n  Flag.optional,\n);\n\nconst jsonFlag = Flag.boolean(\"json\").pipe(\n  Flag.withDescription(\"Emit JSON instead of human-readable output.\"),\n  Flag.withDefault(false),\n);\n\nconst sessionRoleFlag = Flag.choice(\"role\", [\"owner\", \"client\"]).pipe(\n  Flag.withDescription(\"Role for the issued bearer session.\"),\n  Flag.withDefault(\"owner\"),\n);\n\nconst labelFlag = Flag.string(\"label\").pipe(\n  Flag.withDescription(\"Optional human-readable label.\"),\n  Flag.optional,\n);\n\nconst subjectFlag = Flag.string(\"subject\").pipe(\n  Flag.withDescription(\"Optional session subject.\"),\n  Flag.optional,\n);\n\nconst baseUrlFlag = Flag.string(\"base-url\").pipe(\n  Flag.withDescription(\"Optional public base URL used to print a ready `/pair#token=...` link.\"),\n  Flag.optional,\n);\n\nconst tokenOnlyFlag = Flag.boolean(\"token-only\").pipe(\n  Flag.withDescription(\"Print only the issued bearer token.\"),\n  Flag.withDefault(false),\n);\n\nconst pairingCreateCommand = Command.make(\"create\", {\n  ...authLocationFlags,\n  ttl: ttlFlag,\n  label: labelFlag,\n  baseUrl: baseUrlFlag,\n  json: jsonFlag,\n}).pipe(\n  Command.withDescription(\"Issue a new client pairing token.\"),\n  Command.withHandler((flags) =>\n    runWithAuthControlPlane(\n      flags,\n      (authControlPlane) =>\n        Effect.gen(function* () {\n          const issued = yield* authControlPlane.createPairingLink({\n            role: \"client\",\n            subject: \"one-time-token\",\n            ...(Option.isSome(flags.ttl) ? { ttl: flags.ttl.value } : {}),\n            ...(Option.isSome(flags.label) ? { label: flags.label.value } : {}),\n          });\n          const output = formatIssuedPairingCredential(issued, {\n            json: flags.json,\n            ...(Option.isSome(flags.baseUrl) ? { baseUrl: flags.baseUrl.value } : {}),\n          });\n          yield* Console.log(output);\n        }),\n      {\n        quietLogs: flags.json,\n      },\n    ),\n  ),\n);\n\nconst pairingListCommand = Command.make(\"list\", {\n  ...authLocationFlags,\n  json: jsonFlag,\n}).pipe(\n  Command.withDescription(\"List active client pairing tokens without revealing their secrets.\"),\n  Command.withHandler((flags) =>\n    runWithAuthControlPlane(\n      flags,\n      (authControlPlane) =>\n        Effect.gen(function* () {\n          const pairingLinks = yield* authControlPlane.listPairingLinks({ role: \"client\" });\n          yield* Console.log(formatPairingCredentialList(pairingLinks, { json: flags.json }));\n        }),\n      {\n        quietLogs: flags.json,\n      },\n    ),\n  ),\n);\n\nconst pairingRevokeCommand = Command.make(\"revoke\", {\n  ...authLocationFlags,\n  id: Argument.string(\"id\").pipe(Argument.withDescription(\"Pairing credential id to revoke.\")),\n}).pipe(\n  Command.withDescription(\"Revoke an active client pairing token.\"),\n  Command.withHandler((flags) =>\n    runWithAuthControlPlane(flags, (authControlPlane) =>\n      Effect.gen(function* () {\n        const revoked = yield* authControlPlane.revokePairingLink(flags.id);\n        yield* Console.log(\n          revoked\n            ? `Revoked pairing credential ${flags.id}.\\n`\n            : `No active pairing credential found for ${flags.id}.\\n`,\n        );\n      }),\n    ),\n  ),\n);\n\nconst pairingCommand = Command.make(\"pairing\").pipe(\n  Command.withDescription(\"Manage one-time client pairing tokens.\"),\n  Command.withSubcommands([pairingCreateCommand, pairingListCommand, pairingRevokeCommand]),\n);\n\nconst sessionIssueCommand = Command.make(\"issue\", {\n  ...authLocationFlags,\n  ttl: ttlFlag,\n  role: sessionRoleFlag,\n  label: labelFlag,\n  subject: subjectFlag,\n  tokenOnly: tokenOnlyFlag,\n  json: jsonFlag,\n}).pipe(\n  Command.withDescription(\"Issue a bearer session token for headless or remote clients.\"),\n  Command.withHandler((flags) =>\n    runWithAuthControlPlane(\n      flags,\n      (authControlPlane) =>\n        Effect.gen(function* () {\n          const issued = yield* authControlPlane.issueSession({\n            role: flags.role,\n            ...(Option.isSome(flags.ttl) ? { ttl: flags.ttl.value } : {}),\n            ...(Option.isSome(flags.label) ? { label: flags.label.value } : {}),\n            ...(Option.isSome(flags.subject) ? { subject: flags.subject.value } : {}),\n          });\n          yield* Console.log(\n            formatIssuedSession(issued, {\n              json: flags.json,\n              tokenOnly: flags.tokenOnly,\n            }),\n          );\n        }),\n      {\n        quietLogs: flags.json || flags.tokenOnly,\n      },\n    ),\n  ),\n);\n\nconst sessionListCommand = Command.make(\"list\", {\n  ...authLocationFlags,\n  json: jsonFlag,\n}).pipe(\n  Command.withDescription(\"List active sessions without revealing bearer tokens.\"),\n  Command.withHandler((flags) =>\n    runWithAuthControlPlane(\n      flags,\n      (authControlPlane) =>\n        Effect.gen(function* () {\n          const sessions = yield* authControlPlane.listSessions();\n          yield* Console.log(formatSessionList(sessions, { json: flags.json }));\n        }),\n      {\n        quietLogs: flags.json,\n      },\n    ),\n  ),\n);\n\nconst sessionRevokeCommand = Command.make(\"revoke\", {\n  ...authLocationFlags,\n  sessionId: Argument.string(\"session-id\").pipe(\n    Argument.withDescription(\"Session id to revoke.\"),\n    Argument.withSchema(AuthSessionId),\n  ),\n}).pipe(\n  Command.withDescription(\"Revoke an active session.\"),\n  Command.withHandler((flags) =>\n    runWithAuthControlPlane(flags, (authControlPlane) =>\n      Effect.gen(function* () {\n        const revoked = yield* authControlPlane.revokeSession(flags.sessionId);\n        yield* Console.log(\n          revoked\n            ? `Revoked session ${flags.sessionId}.\\n`\n            : `No active session found for ${flags.sessionId}.\\n`,\n        );\n      }),\n    ),\n  ),\n);\n\nconst sessionCommand = Command.make(\"session\").pipe(\n  Command.withDescription(\"Manage bearer sessions.\"),\n  Command.withSubcommands([sessionIssueCommand, sessionListCommand, sessionRevokeCommand]),\n);\n\nexport const authCommand = Command.make(\"auth\").pipe(\n  Command.withDescription(\"Manage the local auth control plane for headless deployments.\"),\n  Command.withSubcommands([pairingCommand, sessionCommand]),\n);\n","/**\n * OrchestrationEngineService - Service interface for orchestration command handling.\n *\n * Owns command validation/dispatch and in-memory read-model updates backed by\n * `OrchestrationEventStore` persistence. It does not own provider process\n * management or transport concerns (e.g. websocket request parsing).\n *\n * Uses Effect `Context.Service` for dependency injection. Command dispatch,\n * replay, and unknown-input decoding all return typed domain errors.\n *\n * @module OrchestrationEngineService\n */\nimport type { OrchestrationCommand, OrchestrationEvent } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\n\nimport type { OrchestrationDispatchError } from \"../Errors.ts\";\nimport type { OrchestrationEventStoreError } from \"../../persistence/Errors.ts\";\n\n/**\n * OrchestrationEngineShape - Service API for orchestration command and event flow.\n */\nexport interface OrchestrationEngineShape {\n  /**\n   * Replay persisted orchestration events from an exclusive sequence cursor.\n   *\n   * @param fromSequenceExclusive - Sequence cursor (exclusive).\n   * @returns Stream containing ordered events.\n   */\n  readonly readEvents: (\n    fromSequenceExclusive: number,\n  ) => Stream.Stream<OrchestrationEvent, OrchestrationEventStoreError, never>;\n\n  /**\n   * Dispatch a validated orchestration command.\n   *\n   * @param command - Valid orchestration command.\n   * @returns Effect containing the sequence of the persisted event.\n   *\n   * Dispatch is serialized through an internal queue and deduplicated via\n   * command receipts.\n   */\n  readonly dispatch: (\n    command: OrchestrationCommand,\n  ) => Effect.Effect<{ sequence: number }, OrchestrationDispatchError, never>;\n\n  /**\n   * Stream persisted domain events in dispatch order.\n   *\n   * This is a hot runtime stream (new events only), not a historical replay.\n   */\n  readonly streamDomainEvents: Stream.Stream<OrchestrationEvent>;\n}\n\n/**\n * OrchestrationEngineService - Service tag for orchestration engine access.\n *\n * @example\n * ```ts\n * const program = Effect.gen(function* () {\n *   const engine = yield* OrchestrationEngineService\n *   return yield* engine.dispatch(command)\n * })\n * ```\n */\nexport class OrchestrationEngineService extends Context.Service<\n  OrchestrationEngineService,\n  OrchestrationEngineShape\n>()(\"salchi/orchestration/Services/OrchestrationEngine/OrchestrationEngineService\") {}\n","/**\n * ProjectionSnapshotQuery - Read-model snapshot query service interface.\n *\n * Exposes the current orchestration projection snapshot for read-only API\n * access.\n *\n * @module ProjectionSnapshotQuery\n */\nimport type {\n  CheckpointRef,\n  OrchestrationCheckpointSummary,\n  OrchestrationProject,\n  OrchestrationProjectShell,\n  OrchestrationReadModel,\n  OrchestrationShellSnapshot,\n  OrchestrationThread,\n  OrchestrationThreadDetailSnapshot,\n  OrchestrationThreadDetailPageRequest,\n  OrchestrationThreadShell,\n  ProjectId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Option from \"effect/Option\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../../persistence/Errors.ts\";\n\nexport interface ProjectionSnapshotCounts {\n  readonly projectCount: number;\n  readonly threadCount: number;\n}\n\nexport interface ProjectionSnapshotSequence {\n  readonly snapshotSequence: number;\n}\n\nexport interface ProjectionThreadCheckpointContext {\n  readonly threadId: ThreadId;\n  readonly projectId: ProjectId;\n  readonly workspaceRoot: string;\n  readonly worktreePath: string | null;\n  readonly checkpoints: ReadonlyArray<OrchestrationCheckpointSummary>;\n}\n\nexport interface ProjectionFullThreadDiffContext {\n  readonly threadId: ThreadId;\n  readonly projectId: ProjectId;\n  readonly workspaceRoot: string;\n  readonly worktreePath: string | null;\n  readonly latestCheckpointTurnCount: number;\n  readonly toCheckpointRef: CheckpointRef | null;\n}\n\n/**\n * ProjectionSnapshotQueryShape - Service API for read-model snapshots.\n */\nexport interface ProjectionSnapshotQueryShape {\n  /**\n   * Read the lightweight command snapshot used to bootstrap the in-memory\n   * orchestration engine without hydrating message/activity/checkpoint bodies.\n   */\n  readonly getCommandReadModel: () => Effect.Effect<\n    OrchestrationReadModel,\n    ProjectionRepositoryError\n  >;\n\n  /**\n   * Read the latest orchestration projection snapshot.\n   *\n   * Rehydrates from projection tables and derives snapshot sequence from\n   * projector cursor state.\n   */\n  readonly getSnapshot: () => Effect.Effect<OrchestrationReadModel, ProjectionRepositoryError>;\n\n  /**\n   * Read the latest orchestration shell snapshot.\n   *\n   * Returns only projects and thread shell summaries so clients can bootstrap\n   * lightweight navigation state without hydrating every thread body.\n   */\n  readonly getShellSnapshot: () => Effect.Effect<\n    OrchestrationShellSnapshot,\n    ProjectionRepositoryError\n  >;\n\n  /**\n   * Read archived thread shell summaries for the archive page.\n   *\n   * This query is separate from the main shell snapshot so archived threads\n   * are never bootstrapped into normal navigation state.\n   */\n  readonly getArchivedShellSnapshot: () => Effect.Effect<\n    OrchestrationShellSnapshot,\n    ProjectionRepositoryError\n  >;\n\n  /**\n   * Read the latest projection snapshot sequence without hydrating read-model\n   * entities.\n   */\n  readonly getSnapshotSequence: () => Effect.Effect<\n    ProjectionSnapshotSequence,\n    ProjectionRepositoryError\n  >;\n\n  /**\n   * Read aggregate projection counts without hydrating the full read model.\n   */\n  readonly getCounts: () => Effect.Effect<ProjectionSnapshotCounts, ProjectionRepositoryError>;\n\n  /**\n   * Read the active project for an exact workspace root match.\n   */\n  readonly getActiveProjectByWorkspaceRoot: (\n    workspaceRoot: string,\n  ) => Effect.Effect<Option.Option<OrchestrationProject>, ProjectionRepositoryError>;\n\n  /**\n   * Read a single active project shell row by id.\n   */\n  readonly getProjectShellById: (\n    projectId: ProjectId,\n  ) => Effect.Effect<Option.Option<OrchestrationProjectShell>, ProjectionRepositoryError>;\n\n  /**\n   * Read the most recently active visible thread for a project.\n   */\n  readonly getMostRecentActiveThreadIdByProjectId: (\n    projectId: ProjectId,\n  ) => Effect.Effect<Option.Option<ThreadId>, ProjectionRepositoryError>;\n\n  /**\n   * Read the checkpoint context needed to resolve a single thread diff.\n   */\n  readonly getThreadCheckpointContext: (\n    threadId: ThreadId,\n  ) => Effect.Effect<Option.Option<ProjectionThreadCheckpointContext>, ProjectionRepositoryError>;\n\n  /**\n   * Read only the narrow context needed to compute a full-thread diff from\n   * checkpoint 0 to a specific turn count.\n   */\n  readonly getFullThreadDiffContext: (\n    threadId: ThreadId,\n    toTurnCount: number,\n  ) => Effect.Effect<Option.Option<ProjectionFullThreadDiffContext>, ProjectionRepositoryError>;\n\n  /**\n   * Read a single active thread shell row by id.\n   */\n  readonly getThreadShellById: (\n    threadId: ThreadId,\n  ) => Effect.Effect<Option.Option<OrchestrationThreadShell>, ProjectionRepositoryError>;\n\n  /**\n   * Read a single active thread detail snapshot by id.\n   */\n  readonly getThreadDetailById: (\n    threadId: ThreadId,\n  ) => Effect.Effect<Option.Option<OrchestrationThread>, ProjectionRepositoryError>;\n\n  /**\n   * Read a single active thread detail snapshot by id with the projection\n   * cursor used to build it.\n   */\n  readonly getThreadDetailSnapshotById: (\n    threadId: ThreadId,\n    page?: OrchestrationThreadDetailPageRequest,\n  ) => Effect.Effect<Option.Option<OrchestrationThreadDetailSnapshot>, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionSnapshotQuery - Service tag for projection snapshot queries.\n */\nexport class ProjectionSnapshotQuery extends Context.Service<\n  ProjectionSnapshotQuery,\n  ProjectionSnapshotQueryShape\n>()(\"salchi/orchestration/Services/ProjectionSnapshotQuery\") {}\n","/**\n * OrchestrationCommandReceiptRepository - Repository interface for command receipts.\n *\n * Owns persistence operations for deduplication and status tracking of\n * orchestration command handling.\n *\n * @module OrchestrationCommandReceiptRepository\n */\nimport {\n  CommandId,\n  IsoDateTime,\n  NonNegativeInt,\n  OrchestrationAggregateKind,\n  OrchestrationCommandReceiptStatus,\n  ProjectId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { OrchestrationCommandReceiptRepositoryError } from \"../Errors.ts\";\n\nexport const OrchestrationCommandReceipt = Schema.Struct({\n  commandId: CommandId,\n  aggregateKind: OrchestrationAggregateKind,\n  aggregateId: Schema.Union([ProjectId, ThreadId]),\n  acceptedAt: IsoDateTime,\n  resultSequence: NonNegativeInt,\n  status: OrchestrationCommandReceiptStatus,\n  error: Schema.NullOr(Schema.String),\n});\nexport type OrchestrationCommandReceipt = typeof OrchestrationCommandReceipt.Type;\n\nexport const GetByCommandIdInput = Schema.Struct({\n  commandId: CommandId,\n});\nexport type GetByCommandIdInput = typeof GetByCommandIdInput.Type;\n\n/**\n * OrchestrationCommandReceiptRepositoryShape - Service API for command receipts.\n */\nexport interface OrchestrationCommandReceiptRepositoryShape {\n  /**\n   * Insert or replace a command receipt row.\n   *\n   * Upserts by `commandId` for idempotent command-result tracking.\n   */\n  readonly upsert: (\n    receipt: OrchestrationCommandReceipt,\n  ) => Effect.Effect<void, OrchestrationCommandReceiptRepositoryError>;\n\n  /**\n   * Read a command receipt by command id.\n   */\n  readonly getByCommandId: (\n    input: GetByCommandIdInput,\n  ) => Effect.Effect<\n    Option.Option<OrchestrationCommandReceipt>,\n    OrchestrationCommandReceiptRepositoryError\n  >;\n}\n\n/**\n * OrchestrationCommandReceiptRepository - Service tag for command receipt persistence.\n */\nexport class OrchestrationCommandReceiptRepository extends Context.Service<\n  OrchestrationCommandReceiptRepository,\n  OrchestrationCommandReceiptRepositoryShape\n>()(\n  \"salchi/persistence/Services/OrchestrationCommandReceipts/OrchestrationCommandReceiptRepository\",\n) {}\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\n\nimport {\n  GetByCommandIdInput,\n  OrchestrationCommandReceipt,\n  OrchestrationCommandReceiptRepository,\n  type OrchestrationCommandReceiptRepositoryShape,\n} from \"../Services/OrchestrationCommandReceipts.ts\";\n\nconst makeOrchestrationCommandReceiptRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertReceiptRow = SqlSchema.void({\n    Request: OrchestrationCommandReceipt,\n    execute: (receipt) =>\n      sql`\n        INSERT INTO orchestration_command_receipts (\n          command_id,\n          aggregate_kind,\n          aggregate_id,\n          accepted_at,\n          result_sequence,\n          status,\n          error\n        )\n        VALUES (\n          ${receipt.commandId},\n          ${receipt.aggregateKind},\n          ${receipt.aggregateId},\n          ${receipt.acceptedAt},\n          ${receipt.resultSequence},\n          ${receipt.status},\n          ${receipt.error}\n        )\n        ON CONFLICT (command_id)\n        DO UPDATE SET\n          aggregate_kind = excluded.aggregate_kind,\n          aggregate_id = excluded.aggregate_id,\n          accepted_at = excluded.accepted_at,\n          result_sequence = excluded.result_sequence,\n          status = excluded.status,\n          error = excluded.error\n      `,\n  });\n\n  const findReceiptByCommandId = SqlSchema.findOneOption({\n    Request: GetByCommandIdInput,\n    Result: OrchestrationCommandReceipt,\n    execute: ({ commandId }) =>\n      sql`\n        SELECT\n          command_id AS \"commandId\",\n          aggregate_kind AS \"aggregateKind\",\n          aggregate_id AS \"aggregateId\",\n          accepted_at AS \"acceptedAt\",\n          result_sequence AS \"resultSequence\",\n          status,\n          error\n        FROM orchestration_command_receipts\n        WHERE command_id = ${commandId}\n      `,\n  });\n\n  const upsert: OrchestrationCommandReceiptRepositoryShape[\"upsert\"] = (receipt) =>\n    upsertReceiptRow(receipt).pipe(\n      Effect.mapError(toPersistenceSqlError(\"OrchestrationCommandReceiptRepository.upsert:query\")),\n    );\n\n  const getByCommandId: OrchestrationCommandReceiptRepositoryShape[\"getByCommandId\"] = (input) =>\n    findReceiptByCommandId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"OrchestrationCommandReceiptRepository.getByCommandId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    getByCommandId,\n  } satisfies OrchestrationCommandReceiptRepositoryShape;\n});\n\nexport const OrchestrationCommandReceiptRepositoryLive = Layer.effect(\n  OrchestrationCommandReceiptRepository,\n  makeOrchestrationCommandReceiptRepository,\n);\n","/**\n * OrchestrationEventStore - Event store interface for orchestration events.\n *\n * Owns durable append/replay access to the orchestration event stream. It does\n * not reduce events into read models or apply command validation rules.\n *\n * Uses Effect `Context.Service` for dependency injection and exposes typed\n * persistence/decode errors for event append and replay operations.\n *\n * @module OrchestrationEventStore\n */\nimport { OrchestrationEvent } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\n\nimport type { OrchestrationEventStoreError } from \"../Errors.ts\";\n\n/**\n * OrchestrationEventStoreShape - Service API for orchestration event persistence.\n */\nexport interface OrchestrationEventStoreShape {\n  /**\n   * Persist a new orchestration event.\n   *\n   * @param event - Event payload without sequence (assigned by storage).\n   * @returns Effect containing the stored event with assigned sequence.\n   *\n   * Actor kind is inferred from command/metadata before persistence.\n   */\n  readonly append: (\n    event: Omit<OrchestrationEvent, \"sequence\">,\n  ) => Effect.Effect<OrchestrationEvent, OrchestrationEventStoreError>;\n\n  /**\n   * Replay events after the provided sequence.\n   *\n   * @param sequenceExclusive - Sequence cursor (exclusive).\n   * @param limit - Maximum number of events to emit.\n   * @returns Stream containing ordered events.\n   *\n   * Reads in fixed-size pages and normalizes non-integer/negative limits.\n   */\n  readonly readFromSequence: (\n    sequenceExclusive: number,\n    limit?: number,\n  ) => Stream.Stream<OrchestrationEvent, OrchestrationEventStoreError>;\n\n  /**\n   * Read all events from the beginning of the stream.\n   *\n   * @returns Stream containing all stored events.\n   */\n  readonly readAll: () => Stream.Stream<OrchestrationEvent, OrchestrationEventStoreError>;\n}\n\n/**\n * OrchestrationEventStore - Service tag for orchestration event persistence.\n *\n * @example\n * ```ts\n * const program = Effect.gen(function* () {\n *   const events = yield* OrchestrationEventStore\n *   return yield* Stream.runCollect(events.readAll())\n * })\n * ```\n */\nexport class OrchestrationEventStore extends Context.Service<\n  OrchestrationEventStore,\n  OrchestrationEventStoreShape\n>()(\"salchi/persistence/Services/OrchestrationEventStore\") {}\n","import {\n  CommandId,\n  EventId,\n  IsoDateTime,\n  NonNegativeInt,\n  OrchestrationActorKind,\n  OrchestrationAggregateKind,\n  OrchestrationEvent,\n  OrchestrationEventMetadata,\n  OrchestrationEventType,\n  ProjectId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\n\nimport {\n  toPersistenceDecodeError,\n  toPersistenceSqlError,\n  type OrchestrationEventStoreError,\n} from \"../Errors.ts\";\nimport {\n  OrchestrationEventStore,\n  type OrchestrationEventStoreShape,\n} from \"../Services/OrchestrationEventStore.ts\";\n\nconst decodeEvent = Schema.decodeUnknownEffect(OrchestrationEvent);\nconst UnknownFromJsonString = Schema.fromJsonString(Schema.Unknown);\nconst EventMetadataFromJsonString = Schema.fromJsonString(OrchestrationEventMetadata);\n\nconst AppendEventRequestSchema = Schema.Struct({\n  eventId: EventId,\n  aggregateKind: OrchestrationAggregateKind,\n  streamId: Schema.Union([ProjectId, ThreadId]),\n  type: OrchestrationEventType,\n  causationEventId: Schema.NullOr(EventId),\n  correlationId: Schema.NullOr(CommandId),\n  actorKind: OrchestrationActorKind,\n  occurredAt: IsoDateTime,\n  commandId: Schema.NullOr(CommandId),\n  payloadJson: UnknownFromJsonString,\n  metadataJson: EventMetadataFromJsonString,\n});\n\nconst OrchestrationEventPersistedRowSchema = Schema.Struct({\n  sequence: NonNegativeInt,\n  eventId: EventId,\n  type: OrchestrationEventType,\n  aggregateKind: OrchestrationAggregateKind,\n  aggregateId: Schema.Union([ProjectId, ThreadId]),\n  occurredAt: IsoDateTime,\n  commandId: Schema.NullOr(CommandId),\n  causationEventId: Schema.NullOr(EventId),\n  correlationId: Schema.NullOr(CommandId),\n  payload: UnknownFromJsonString,\n  metadata: EventMetadataFromJsonString,\n});\n\nconst ReadFromSequenceRequestSchema = Schema.Struct({\n  sequenceExclusive: NonNegativeInt,\n  limit: Schema.Number,\n});\nconst DEFAULT_READ_FROM_SEQUENCE_LIMIT = 1_000;\nconst READ_PAGE_SIZE = 500;\n\nfunction inferActorKind(\n  event: Omit<OrchestrationEvent, \"sequence\">,\n): Schema.Schema.Type<typeof OrchestrationActorKind> {\n  if (event.commandId !== null && event.commandId.startsWith(\"provider:\")) {\n    return \"provider\";\n  }\n  if (event.commandId !== null && event.commandId.startsWith(\"server:\")) {\n    return \"server\";\n  }\n  if (\n    event.metadata.providerTurnId !== undefined ||\n    event.metadata.providerItemId !== undefined ||\n    event.metadata.adapterKey !== undefined\n  ) {\n    return \"provider\";\n  }\n  if (event.commandId === null) {\n    return \"server\";\n  }\n  return \"client\";\n}\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown): OrchestrationEventStoreError =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeEventStore = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const appendEventRow = SqlSchema.findOne({\n    Request: AppendEventRequestSchema,\n    Result: OrchestrationEventPersistedRowSchema,\n    execute: (request) =>\n      sql`\n        INSERT INTO orchestration_events (\n          event_id,\n          aggregate_kind,\n          stream_id,\n          stream_version,\n          event_type,\n          occurred_at,\n          command_id,\n          causation_event_id,\n          correlation_id,\n          actor_kind,\n          payload_json,\n          metadata_json\n        )\n        VALUES (\n          ${request.eventId},\n          ${request.aggregateKind},\n          ${request.streamId},\n          COALESCE(\n            (\n              SELECT stream_version + 1\n              FROM orchestration_events\n              WHERE aggregate_kind = ${request.aggregateKind}\n                AND stream_id = ${request.streamId}\n              ORDER BY stream_version DESC\n              LIMIT 1\n            ),\n            0\n          ),\n          ${request.type},\n          ${request.occurredAt},\n          ${request.commandId},\n          ${request.causationEventId},\n          ${request.correlationId},\n          ${request.actorKind},\n          ${request.payloadJson},\n          ${request.metadataJson}\n        )\n        RETURNING\n          sequence,\n          event_id AS \"eventId\",\n          event_type AS \"type\",\n          aggregate_kind AS \"aggregateKind\",\n          stream_id AS \"aggregateId\",\n          occurred_at AS \"occurredAt\",\n          command_id AS \"commandId\",\n          causation_event_id AS \"causationEventId\",\n          correlation_id AS \"correlationId\",\n          payload_json AS \"payload\",\n          metadata_json AS \"metadata\"\n      `,\n  });\n\n  const readEventRowsFromSequence = SqlSchema.findAll({\n    Request: ReadFromSequenceRequestSchema,\n    Result: OrchestrationEventPersistedRowSchema,\n    execute: (request) =>\n      sql`\n        SELECT\n          sequence,\n          event_id AS \"eventId\",\n          event_type AS \"type\",\n          aggregate_kind AS \"aggregateKind\",\n          stream_id AS \"aggregateId\",\n          occurred_at AS \"occurredAt\",\n          command_id AS \"commandId\",\n          causation_event_id AS \"causationEventId\",\n          correlation_id AS \"correlationId\",\n          payload_json AS \"payload\",\n          metadata_json AS \"metadata\"\n        FROM orchestration_events\n        WHERE sequence > ${request.sequenceExclusive}\n        ORDER BY sequence ASC\n        LIMIT ${request.limit}\n      `,\n  });\n\n  const append: OrchestrationEventStoreShape[\"append\"] = (event) =>\n    appendEventRow({\n      eventId: event.eventId,\n      aggregateKind: event.aggregateKind,\n      streamId: event.aggregateId,\n      type: event.type,\n      causationEventId: event.causationEventId,\n      correlationId: event.correlationId,\n      actorKind: inferActorKind(event),\n      occurredAt: event.occurredAt,\n      commandId: event.commandId,\n      payloadJson: event.payload,\n      metadataJson: event.metadata,\n    }).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"OrchestrationEventStore.append:insert\",\n          \"OrchestrationEventStore.append:decodeRow\",\n        ),\n      ),\n      Effect.flatMap((row) =>\n        decodeEvent(row).pipe(\n          Effect.mapError(toPersistenceDecodeError(\"OrchestrationEventStore.append:rowToEvent\")),\n        ),\n      ),\n    );\n\n  const readFromSequence: OrchestrationEventStoreShape[\"readFromSequence\"] = (\n    sequenceExclusive,\n    limit = DEFAULT_READ_FROM_SEQUENCE_LIMIT,\n  ) => {\n    const normalizedLimit = Math.max(0, Math.floor(limit));\n    if (normalizedLimit === 0) {\n      return Stream.empty;\n    }\n    const readPage = (\n      cursor: number,\n      remaining: number,\n    ): Stream.Stream<OrchestrationEvent, OrchestrationEventStoreError> =>\n      Stream.fromEffect(\n        readEventRowsFromSequence({\n          sequenceExclusive: cursor,\n          limit: Math.min(remaining, READ_PAGE_SIZE),\n        }).pipe(\n          Effect.mapError(\n            toPersistenceSqlOrDecodeError(\n              \"OrchestrationEventStore.readFromSequence:query\",\n              \"OrchestrationEventStore.readFromSequence:decodeRows\",\n            ),\n          ),\n          Effect.flatMap((rows) =>\n            Effect.forEach(rows, (row) =>\n              decodeEvent(row).pipe(\n                Effect.mapError(\n                  toPersistenceDecodeError(\"OrchestrationEventStore.readFromSequence:rowToEvent\"),\n                ),\n              ),\n            ),\n          ),\n        ),\n      ).pipe(\n        Stream.flatMap((events) => {\n          if (events.length === 0) {\n            return Stream.empty;\n          }\n          const nextRemaining = remaining - events.length;\n          if (nextRemaining <= 0) {\n            return Stream.fromIterable(events);\n          }\n          return Stream.concat(\n            Stream.fromIterable(events),\n            readPage(events[events.length - 1]!.sequence, nextRemaining),\n          );\n        }),\n      );\n\n    return readPage(sequenceExclusive, normalizedLimit);\n  };\n\n  return {\n    append,\n    readFromSequence,\n    readAll: () => readFromSequence(0, Number.MAX_SAFE_INTEGER),\n  } satisfies OrchestrationEventStoreShape;\n});\n\nexport const OrchestrationEventStoreLive = Layer.effect(OrchestrationEventStore, makeEventStore);\n","import { IsoDateTime, ThreadId, TrimmedNonEmptyString, TurnId } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const TurnFileSnapshot = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  path: TrimmedNonEmptyString,\n  blobSha: Schema.NullOr(TrimmedNonEmptyString),\n  deleted: Schema.Boolean,\n  updatedAt: IsoDateTime,\n});\nexport type TurnFileSnapshot = typeof TurnFileSnapshot.Type;\n\nexport const UpsertTurnFileSnapshotInput = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  path: TrimmedNonEmptyString,\n  blobSha: Schema.NullOr(TrimmedNonEmptyString),\n  deleted: Schema.Boolean,\n  preserveExistingSnapshot: Schema.optional(Schema.Boolean),\n  updatedAt: IsoDateTime,\n});\nexport type UpsertTurnFileSnapshotInput = typeof UpsertTurnFileSnapshotInput.Type;\n\nexport const GetTurnFileSnapshotsByTurnInput = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n});\nexport type GetTurnFileSnapshotsByTurnInput = typeof GetTurnFileSnapshotsByTurnInput.Type;\n\nexport const DeleteTurnFileSnapshotsByTurnInput = GetTurnFileSnapshotsByTurnInput;\nexport type DeleteTurnFileSnapshotsByTurnInput = typeof DeleteTurnFileSnapshotsByTurnInput.Type;\n\nexport const DeleteTurnFileSnapshotsByThreadInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteTurnFileSnapshotsByThreadInput = typeof DeleteTurnFileSnapshotsByThreadInput.Type;\n\nexport interface TurnFileSnapshotsShape {\n  readonly upsertSnapshot: (\n    input: UpsertTurnFileSnapshotInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n  readonly getByTurn: (\n    input: GetTurnFileSnapshotsByTurnInput,\n  ) => Effect.Effect<ReadonlyArray<TurnFileSnapshot>, ProjectionRepositoryError>;\n  readonly deleteByTurn: (\n    input: DeleteTurnFileSnapshotsByTurnInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n  readonly deleteByThread: (\n    input: DeleteTurnFileSnapshotsByThreadInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\nexport class TurnFileSnapshots extends Context.Service<TurnFileSnapshots, TurnFileSnapshotsShape>()(\n  \"salchi/persistence/Services/TurnFileSnapshots\",\n) {}\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\n\nimport { toPersistenceDecodeError, toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  DeleteTurnFileSnapshotsByThreadInput,\n  DeleteTurnFileSnapshotsByTurnInput,\n  GetTurnFileSnapshotsByTurnInput,\n  TurnFileSnapshot,\n  TurnFileSnapshots,\n  UpsertTurnFileSnapshotInput,\n  type TurnFileSnapshotsShape,\n} from \"../Services/TurnFileSnapshots.ts\";\n\nconst TurnFileSnapshotDbRow = Schema.Struct({\n  threadId: TurnFileSnapshot.fields.threadId,\n  turnId: TurnFileSnapshot.fields.turnId,\n  path: TurnFileSnapshot.fields.path,\n  blobSha: TurnFileSnapshot.fields.blobSha,\n  deleted: Schema.Number,\n  updatedAt: TurnFileSnapshot.fields.updatedAt,\n});\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown) =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nfunction mapSnapshotRow(row: Schema.Schema.Type<typeof TurnFileSnapshotDbRow>) {\n  return {\n    ...row,\n    deleted: row.deleted !== 0,\n  };\n}\n\nconst makeTurnFileSnapshots = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertSnapshotRow = SqlSchema.void({\n    Request: UpsertTurnFileSnapshotInput,\n    execute: (row) => {\n      const preserveExistingSnapshot = row.preserveExistingSnapshot === true ? 1 : 0;\n      return sql`\n        INSERT INTO checkpoint_turn_file_snapshots (\n          thread_id,\n          turn_id,\n          path,\n          blob_sha,\n          deleted,\n          updated_at\n        )\n        VALUES (\n          ${row.threadId},\n          ${row.turnId},\n          ${row.path},\n          ${row.blobSha},\n          ${row.deleted ? 1 : 0},\n          ${row.updatedAt}\n        )\n        ON CONFLICT (thread_id, turn_id, path)\n        DO UPDATE SET\n          blob_sha = CASE\n            WHEN ${preserveExistingSnapshot} = 1\n             AND (\n               checkpoint_turn_file_snapshots.blob_sha IS NOT NULL\n               OR checkpoint_turn_file_snapshots.deleted != 0\n             )\n            THEN checkpoint_turn_file_snapshots.blob_sha\n            ELSE excluded.blob_sha\n          END,\n          deleted = CASE\n            WHEN ${preserveExistingSnapshot} = 1\n             AND (\n               checkpoint_turn_file_snapshots.blob_sha IS NOT NULL\n               OR checkpoint_turn_file_snapshots.deleted != 0\n             )\n            THEN checkpoint_turn_file_snapshots.deleted\n            ELSE excluded.deleted\n          END,\n          updated_at = excluded.updated_at\n      `;\n    },\n  });\n\n  const getSnapshotsByTurn = SqlSchema.findAll({\n    Request: GetTurnFileSnapshotsByTurnInput,\n    Result: TurnFileSnapshotDbRow,\n    execute: ({ threadId, turnId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          path,\n          blob_sha AS \"blobSha\",\n          deleted,\n          updated_at AS \"updatedAt\"\n        FROM checkpoint_turn_file_snapshots\n        WHERE thread_id = ${threadId}\n          AND turn_id = ${turnId}\n        ORDER BY path ASC\n      `,\n  });\n\n  const deleteSnapshotsByTurn = SqlSchema.void({\n    Request: DeleteTurnFileSnapshotsByTurnInput,\n    execute: ({ threadId, turnId }) =>\n      sql`\n        DELETE FROM checkpoint_turn_file_snapshots\n        WHERE thread_id = ${threadId}\n          AND turn_id = ${turnId}\n      `,\n  });\n\n  const deleteSnapshotsByThread = SqlSchema.void({\n    Request: DeleteTurnFileSnapshotsByThreadInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM checkpoint_turn_file_snapshots\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsertSnapshot: TurnFileSnapshotsShape[\"upsertSnapshot\"] = (input) =>\n    upsertSnapshotRow(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"TurnFileSnapshots.upsertSnapshot:query\")),\n    );\n\n  const getByTurn: TurnFileSnapshotsShape[\"getByTurn\"] = (input) =>\n    getSnapshotsByTurn(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"TurnFileSnapshots.getByTurn:query\",\n          \"TurnFileSnapshots.getByTurn:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) => rows.map(mapSnapshotRow)),\n    );\n\n  const deleteByTurn: TurnFileSnapshotsShape[\"deleteByTurn\"] = (input) =>\n    deleteSnapshotsByTurn(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"TurnFileSnapshots.deleteByTurn:query\")),\n    );\n\n  const deleteByThread: TurnFileSnapshotsShape[\"deleteByThread\"] = (input) =>\n    deleteSnapshotsByThread(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"TurnFileSnapshots.deleteByThread:query\")),\n    );\n\n  return {\n    upsertSnapshot,\n    getByTurn,\n    deleteByTurn,\n    deleteByThread,\n  } satisfies TurnFileSnapshotsShape;\n});\n\nexport const TurnFileSnapshotsLive = Layer.effect(TurnFileSnapshots, makeTurnFileSnapshots);\n","import * as Cause from \"effect/Cause\";\nimport * as Exit from \"effect/Exit\";\n\nexport type MetricAttributeValue = string;\nexport type MetricAttributes = Readonly<Record<string, MetricAttributeValue>>;\nexport type ObservabilityOutcome = \"success\" | \"failure\" | \"interrupt\";\n\nexport function compactMetricAttributes(\n  attributes: Readonly<Record<string, unknown>>,\n): MetricAttributes {\n  return Object.fromEntries(\n    Object.entries(attributes).flatMap(([key, value]) => {\n      if (value === undefined || value === null) {\n        return [];\n      }\n      if (typeof value === \"string\") {\n        return [[key, value]];\n      }\n      if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n        return [[key, String(value)]];\n      }\n      return [];\n    }),\n  );\n}\n\nexport function outcomeFromExit(exit: Exit.Exit<unknown, unknown>): ObservabilityOutcome {\n  if (Exit.isSuccess(exit)) {\n    return \"success\";\n  }\n  return Cause.hasInterruptsOnly(exit.cause) ? \"interrupt\" : \"failure\";\n}\n\nexport function normalizeModelMetricLabel(model: string | null | undefined): string | undefined {\n  const normalized = model?.trim().toLowerCase();\n  if (!normalized) {\n    return undefined;\n  }\n  if (normalized.includes(\"gpt\")) {\n    return \"gpt\";\n  }\n  if (normalized.includes(\"claude\")) {\n    return \"claude\";\n  }\n  if (normalized.includes(\"gemini\")) {\n    return \"gemini\";\n  }\n  return \"other\";\n}\n","import * as Clock from \"effect/Clock\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Metric from \"effect/Metric\";\nimport { dual } from \"effect/Function\";\n\nimport {\n  compactMetricAttributes,\n  normalizeModelMetricLabel,\n  outcomeFromExit,\n} from \"./Attributes.ts\";\n\nexport const rpcRequestsTotal = Metric.counter(\"salchi_rpc_requests_total\", {\n  description: \"Total RPC requests handled by the websocket RPC server.\",\n});\n\nexport const rpcRequestDuration = Metric.timer(\"salchi_rpc_request_duration\", {\n  description: \"RPC request handling duration.\",\n});\n\nexport const orchestrationCommandsTotal = Metric.counter(\"salchi_orchestration_commands_total\", {\n  description: \"Total orchestration commands dispatched.\",\n});\n\nexport const orchestrationCommandDuration = Metric.timer(\"salchi_orchestration_command_duration\", {\n  description: \"Orchestration command dispatch duration.\",\n});\n\nexport const orchestrationCommandAckDuration = Metric.timer(\n  \"salchi_orchestration_command_ack_duration\",\n  {\n    description:\n      \"Time from orchestration command dispatch to the first committed domain event emitted for that command.\",\n  },\n);\n\nexport const orchestrationEventsProcessedTotal = Metric.counter(\n  \"salchi_orchestration_events_processed_total\",\n  {\n    description: \"Total orchestration intent events processed by runtime reactors.\",\n  },\n);\n\nexport const providerSessionsTotal = Metric.counter(\"salchi_provider_sessions_total\", {\n  description: \"Total provider session lifecycle operations.\",\n});\n\nexport const providerTurnsTotal = Metric.counter(\"salchi_provider_turns_total\", {\n  description: \"Total provider turn lifecycle operations.\",\n});\n\nexport const providerTurnDuration = Metric.timer(\"salchi_provider_turn_duration\", {\n  description: \"Provider turn request duration.\",\n});\n\nexport const providerRuntimeEventsTotal = Metric.counter(\"salchi_provider_runtime_events_total\", {\n  description: \"Total canonical provider runtime events processed.\",\n});\n\nexport const gitCommandsTotal = Metric.counter(\"salchi_git_commands_total\", {\n  description: \"Total git commands executed by the server runtime.\",\n});\n\nexport const gitCommandDuration = Metric.timer(\"salchi_git_command_duration\", {\n  description: \"Git command execution duration.\",\n});\n\nexport const terminalSessionsTotal = Metric.counter(\"salchi_terminal_sessions_total\", {\n  description: \"Total terminal sessions started.\",\n});\n\nexport const terminalRestartsTotal = Metric.counter(\"salchi_terminal_restarts_total\", {\n  description: \"Total terminal restart requests handled.\",\n});\n\nexport const metricAttributes = (\n  attributes: Readonly<Record<string, unknown>>,\n): ReadonlyArray<[string, string]> => Object.entries(compactMetricAttributes(attributes));\n\nexport const increment = (\n  metric: Metric.Metric<number, unknown>,\n  attributes: Readonly<Record<string, unknown>>,\n  amount = 1,\n) => Metric.update(Metric.withAttributes(metric, metricAttributes(attributes)), amount);\n\nexport interface WithMetricsOptions {\n  readonly counter?: Metric.Metric<number, unknown>;\n  readonly timer?: Metric.Metric<Duration.Duration, unknown>;\n  readonly attributes?:\n    | Readonly<Record<string, unknown>>\n    | (() => Readonly<Record<string, unknown>>);\n  readonly outcomeAttributes?: (\n    outcome: ReturnType<typeof outcomeFromExit>,\n  ) => Readonly<Record<string, unknown>>;\n}\n\nconst withMetricsImpl = <A, E, R>(\n  effect: Effect.Effect<A, E, R>,\n  options: WithMetricsOptions,\n): Effect.Effect<A, E, R> =>\n  Effect.gen(function* () {\n    const startedAt = yield* Clock.currentTimeNanos;\n    const exit = yield* Effect.exit(effect);\n    const endedAt = yield* Clock.currentTimeNanos;\n    const elapsedNanos = endedAt > startedAt ? endedAt - startedAt : 0n;\n    const duration = Duration.nanos(elapsedNanos);\n    const baseAttributes =\n      typeof options.attributes === \"function\" ? options.attributes() : (options.attributes ?? {});\n\n    if (options.timer) {\n      yield* Metric.update(\n        Metric.withAttributes(options.timer, metricAttributes(baseAttributes)),\n        duration,\n      );\n    }\n\n    if (options.counter) {\n      const outcome = outcomeFromExit(exit);\n      yield* Metric.update(\n        Metric.withAttributes(\n          options.counter,\n          metricAttributes({\n            ...baseAttributes,\n            outcome,\n            ...(options.outcomeAttributes ? options.outcomeAttributes(outcome) : {}),\n          }),\n        ),\n        1,\n      );\n    }\n\n    if (Exit.isSuccess(exit)) {\n      return exit.value;\n    }\n    return yield* Effect.failCause(exit.cause);\n  });\n\nexport const withMetrics: {\n  <A, E, R>(\n    options: WithMetricsOptions,\n  ): (effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n  <A, E, R>(effect: Effect.Effect<A, E, R>, options: WithMetricsOptions): Effect.Effect<A, E, R>;\n} = dual(2, withMetricsImpl);\n\nexport const providerMetricAttributes = (\n  provider: string,\n  extra?: Readonly<Record<string, unknown>>,\n) =>\n  compactMetricAttributes({\n    provider,\n    ...extra,\n  });\n\nexport const providerTurnMetricAttributes = (input: {\n  readonly provider: string;\n  readonly model: string | null | undefined;\n  readonly extra?: Readonly<Record<string, unknown>>;\n}) => {\n  const modelFamily = normalizeModelMetricLabel(input.model);\n  return compactMetricAttributes({\n    provider: input.provider,\n    ...(modelFamily ? { modelFamily } : {}),\n    ...input.extra,\n  });\n};\n","import * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ProjectionRepositoryError } from \"../persistence/Errors.ts\";\n\nexport class OrchestrationCommandJsonParseError extends Schema.TaggedErrorClass<OrchestrationCommandJsonParseError>()(\n  \"OrchestrationCommandJsonParseError\",\n  {\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Invalid orchestration command JSON: ${this.detail}`;\n  }\n}\n\nexport class OrchestrationCommandDecodeError extends Schema.TaggedErrorClass<OrchestrationCommandDecodeError>()(\n  \"OrchestrationCommandDecodeError\",\n  {\n    issue: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Invalid orchestration command payload: ${this.issue}`;\n  }\n}\n\nexport class OrchestrationCommandInvariantError extends Schema.TaggedErrorClass<OrchestrationCommandInvariantError>()(\n  \"OrchestrationCommandInvariantError\",\n  {\n    commandType: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Orchestration command invariant failed (${this.commandType}): ${this.detail}`;\n  }\n}\n\nexport class OrchestrationCommandPreviouslyRejectedError extends Schema.TaggedErrorClass<OrchestrationCommandPreviouslyRejectedError>()(\n  \"OrchestrationCommandPreviouslyRejectedError\",\n  {\n    commandId: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Command previously rejected (${this.commandId}): ${this.detail}`;\n  }\n}\n\nexport class OrchestrationProjectorDecodeError extends Schema.TaggedErrorClass<OrchestrationProjectorDecodeError>()(\n  \"OrchestrationProjectorDecodeError\",\n  {\n    eventType: Schema.String,\n    issue: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Projector decode failed for ${this.eventType}: ${this.issue}`;\n  }\n}\n\nexport class OrchestrationListenerCallbackError extends Schema.TaggedErrorClass<OrchestrationListenerCallbackError>()(\n  \"OrchestrationListenerCallbackError\",\n  {\n    listener: Schema.Literals([\"read-model\", \"domain-event\"]),\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Orchestration ${this.listener} listener failed: ${this.detail}`;\n  }\n}\n\nexport type OrchestrationDispatchError =\n  | ProjectionRepositoryError\n  | OrchestrationCommandInvariantError\n  | OrchestrationCommandPreviouslyRejectedError\n  | OrchestrationProjectorDecodeError\n  | OrchestrationListenerCallbackError;\n\nexport type OrchestrationEngineError =\n  | OrchestrationDispatchError\n  | OrchestrationCommandJsonParseError\n  | OrchestrationCommandDecodeError;\n\nexport function toOrchestrationCommandDecodeError(error: Schema.SchemaError) {\n  return new OrchestrationCommandDecodeError({\n    issue: SchemaIssue.makeFormatterDefault()(error.issue),\n    cause: error,\n  });\n}\n\nexport function toProjectorDecodeError(eventType: string) {\n  return (error: Schema.SchemaError): OrchestrationProjectorDecodeError =>\n    new OrchestrationProjectorDecodeError({\n      eventType,\n      issue: SchemaIssue.makeFormatterDefault()(error.issue),\n      cause: error,\n    });\n}\n\nexport function toOrchestrationJsonParseError(cause: unknown) {\n  return new OrchestrationCommandJsonParseError({\n    detail: `Failed to parse orchestration command JSON`,\n    cause,\n  });\n}\n\nexport function toListenerCallbackError(listener: \"read-model\" | \"domain-event\") {\n  return (cause: unknown): OrchestrationListenerCallbackError =>\n    new OrchestrationListenerCallbackError({\n      listener,\n      detail: `Failed to invoke orchestration ${listener} listener`,\n      cause,\n    });\n}\n","import type {\n  OrchestrationCommand,\n  OrchestrationProject,\n  OrchestrationReadModel,\n  OrchestrationThread,\n  ProjectId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\n\nimport { OrchestrationCommandInvariantError } from \"./Errors.ts\";\n\nfunction invariantError(commandType: string, detail: string): OrchestrationCommandInvariantError {\n  return new OrchestrationCommandInvariantError({\n    commandType,\n    detail,\n  });\n}\n\nexport function findThreadById(\n  readModel: OrchestrationReadModel,\n  threadId: ThreadId,\n): OrchestrationThread | undefined {\n  return readModel.threads.find((thread) => thread.id === threadId);\n}\n\nexport function findProjectById(\n  readModel: OrchestrationReadModel,\n  projectId: ProjectId,\n): OrchestrationProject | undefined {\n  return readModel.projects.find((project) => project.id === projectId);\n}\n\nexport function listThreadsByProjectId(\n  readModel: OrchestrationReadModel,\n  projectId: ProjectId,\n): ReadonlyArray<OrchestrationThread> {\n  return readModel.threads.filter((thread) => thread.projectId === projectId);\n}\n\nexport function requireProject(input: {\n  readonly readModel: OrchestrationReadModel;\n  readonly command: OrchestrationCommand;\n  readonly projectId: ProjectId;\n}): Effect.Effect<OrchestrationProject, OrchestrationCommandInvariantError> {\n  const project = findProjectById(input.readModel, input.projectId);\n  if (project) {\n    return Effect.succeed(project);\n  }\n  return Effect.fail(\n    invariantError(\n      input.command.type,\n      `Project '${input.projectId}' does not exist for command '${input.command.type}'.`,\n    ),\n  );\n}\n\nexport function requireProjectAbsent(input: {\n  readonly readModel: OrchestrationReadModel;\n  readonly command: OrchestrationCommand;\n  readonly projectId: ProjectId;\n}): Effect.Effect<void, OrchestrationCommandInvariantError> {\n  if (!findProjectById(input.readModel, input.projectId)) {\n    return Effect.void;\n  }\n  return Effect.fail(\n    invariantError(\n      input.command.type,\n      `Project '${input.projectId}' already exists and cannot be created twice.`,\n    ),\n  );\n}\n\nexport function requireThread(input: {\n  readonly readModel: OrchestrationReadModel;\n  readonly command: OrchestrationCommand;\n  readonly threadId: ThreadId;\n}): Effect.Effect<OrchestrationThread, OrchestrationCommandInvariantError> {\n  const thread = findThreadById(input.readModel, input.threadId);\n  if (thread) {\n    return Effect.succeed(thread);\n  }\n  return Effect.fail(\n    invariantError(\n      input.command.type,\n      `Thread '${input.threadId}' does not exist for command '${input.command.type}'.`,\n    ),\n  );\n}\n\nexport function requireThreadArchived(input: {\n  readonly readModel: OrchestrationReadModel;\n  readonly command: OrchestrationCommand;\n  readonly threadId: ThreadId;\n}): Effect.Effect<OrchestrationThread, OrchestrationCommandInvariantError> {\n  return requireThread(input).pipe(\n    Effect.flatMap((thread) =>\n      thread.archivedAt !== null\n        ? Effect.succeed(thread)\n        : Effect.fail(\n            invariantError(\n              input.command.type,\n              `Thread '${input.threadId}' is not archived for command '${input.command.type}'.`,\n            ),\n          ),\n    ),\n  );\n}\n\nexport function requireThreadNotArchived(input: {\n  readonly readModel: OrchestrationReadModel;\n  readonly command: OrchestrationCommand;\n  readonly threadId: ThreadId;\n}): Effect.Effect<OrchestrationThread, OrchestrationCommandInvariantError> {\n  return requireThread(input).pipe(\n    Effect.flatMap((thread) =>\n      thread.archivedAt === null\n        ? Effect.succeed(thread)\n        : Effect.fail(\n            invariantError(\n              input.command.type,\n              `Thread '${input.threadId}' is already archived and cannot handle command '${input.command.type}'.`,\n            ),\n          ),\n    ),\n  );\n}\n\nexport function requireThreadAbsent(input: {\n  readonly readModel: OrchestrationReadModel;\n  readonly command: OrchestrationCommand;\n  readonly threadId: ThreadId;\n}): Effect.Effect<void, OrchestrationCommandInvariantError> {\n  if (!findThreadById(input.readModel, input.threadId)) {\n    return Effect.void;\n  }\n  return Effect.fail(\n    invariantError(\n      input.command.type,\n      `Thread '${input.threadId}' already exists and cannot be created twice.`,\n    ),\n  );\n}\n\nexport function requireNonNegativeInteger(input: {\n  readonly commandType: OrchestrationCommand[\"type\"];\n  readonly field: string;\n  readonly value: number;\n}): Effect.Effect<void, OrchestrationCommandInvariantError> {\n  if (Number.isInteger(input.value) && input.value >= 0) {\n    return Effect.void;\n  }\n  return Effect.fail(\n    invariantError(\n      input.commandType,\n      `${input.field} must be an integer greater than or equal to 0.`,\n    ),\n  );\n}\n","import {\n  ProjectCreatedPayload as ContractsProjectCreatedPayloadSchema,\n  ProjectMetaUpdatedPayload as ContractsProjectMetaUpdatedPayloadSchema,\n  ProjectDeletedPayload as ContractsProjectDeletedPayloadSchema,\n  ThreadCreatedPayload as ContractsThreadCreatedPayloadSchema,\n  ThreadArchivedPayload as ContractsThreadArchivedPayloadSchema,\n  ThreadMetaUpdatedPayload as ContractsThreadMetaUpdatedPayloadSchema,\n  ThreadRuntimeModeSetPayload as ContractsThreadRuntimeModeSetPayloadSchema,\n  ThreadInteractionModeSetPayload as ContractsThreadInteractionModeSetPayloadSchema,\n  ThreadDeletedPayload as ContractsThreadDeletedPayloadSchema,\n  ThreadUnarchivedPayload as ContractsThreadUnarchivedPayloadSchema,\n  ThreadMessageSentPayload as ContractsThreadMessageSentPayloadSchema,\n  ThreadTurnQueuedPayload as ContractsThreadTurnQueuedPayloadSchema,\n  ThreadQueuedTurnUpdatedPayload as ContractsThreadQueuedTurnUpdatedPayloadSchema,\n  ThreadQueuedTurnCancelledPayload as ContractsThreadQueuedTurnCancelledPayloadSchema,\n  ThreadQueuedTurnDispatchedPayload as ContractsThreadQueuedTurnDispatchedPayloadSchema,\n  ThreadQueuedTurnSteerRequestedPayload as ContractsThreadQueuedTurnSteerRequestedPayloadSchema,\n  ThreadQueuedTurnSteerFailedPayload as ContractsThreadQueuedTurnSteerFailedPayloadSchema,\n  ThreadQueuedTurnSteeredPayload as ContractsThreadQueuedTurnSteeredPayloadSchema,\n  ThreadProposedPlanUpsertedPayload as ContractsThreadProposedPlanUpsertedPayloadSchema,\n  ThreadSessionSetPayload as ContractsThreadSessionSetPayloadSchema,\n  ThreadTurnDiffCompletedPayload as ContractsThreadTurnDiffCompletedPayloadSchema,\n  ThreadRevertedPayload as ContractsThreadRevertedPayloadSchema,\n  ThreadActivityAppendedPayload as ContractsThreadActivityAppendedPayloadSchema,\n  ThreadTurnStartRequestedPayload as ContractsThreadTurnStartRequestedPayloadSchema,\n  ThreadTurnInterruptRequestedPayload as ContractsThreadTurnInterruptRequestedPayloadSchema,\n  ThreadApprovalResponseRequestedPayload as ContractsThreadApprovalResponseRequestedPayloadSchema,\n  ThreadCheckpointRevertRequestedPayload as ContractsThreadCheckpointRevertRequestedPayloadSchema,\n  ThreadSessionStopRequestedPayload as ContractsThreadSessionStopRequestedPayloadSchema,\n} from \"@salchi/contracts\";\n\n// Server-internal alias surface, backed by contract schemas as the source of truth.\nexport const ProjectCreatedPayload = ContractsProjectCreatedPayloadSchema;\nexport const ProjectMetaUpdatedPayload = ContractsProjectMetaUpdatedPayloadSchema;\nexport const ProjectDeletedPayload = ContractsProjectDeletedPayloadSchema;\n\nexport const ThreadCreatedPayload = ContractsThreadCreatedPayloadSchema;\nexport const ThreadArchivedPayload = ContractsThreadArchivedPayloadSchema;\nexport const ThreadMetaUpdatedPayload = ContractsThreadMetaUpdatedPayloadSchema;\nexport const ThreadRuntimeModeSetPayload = ContractsThreadRuntimeModeSetPayloadSchema;\nexport const ThreadInteractionModeSetPayload = ContractsThreadInteractionModeSetPayloadSchema;\nexport const ThreadDeletedPayload = ContractsThreadDeletedPayloadSchema;\nexport const ThreadUnarchivedPayload = ContractsThreadUnarchivedPayloadSchema;\n\nexport const MessageSentPayloadSchema = ContractsThreadMessageSentPayloadSchema;\nexport const ThreadTurnQueuedPayload = ContractsThreadTurnQueuedPayloadSchema;\nexport const ThreadQueuedTurnUpdatedPayload = ContractsThreadQueuedTurnUpdatedPayloadSchema;\nexport const ThreadQueuedTurnCancelledPayload = ContractsThreadQueuedTurnCancelledPayloadSchema;\nexport const ThreadQueuedTurnDispatchedPayload = ContractsThreadQueuedTurnDispatchedPayloadSchema;\nexport const ThreadQueuedTurnSteerRequestedPayload =\n  ContractsThreadQueuedTurnSteerRequestedPayloadSchema;\nexport const ThreadQueuedTurnSteerFailedPayload = ContractsThreadQueuedTurnSteerFailedPayloadSchema;\nexport const ThreadQueuedTurnSteeredPayload = ContractsThreadQueuedTurnSteeredPayloadSchema;\nexport const ThreadProposedPlanUpsertedPayload = ContractsThreadProposedPlanUpsertedPayloadSchema;\nexport const ThreadSessionSetPayload = ContractsThreadSessionSetPayloadSchema;\nexport const ThreadTurnDiffCompletedPayload = ContractsThreadTurnDiffCompletedPayloadSchema;\nexport const ThreadRevertedPayload = ContractsThreadRevertedPayloadSchema;\nexport const ThreadActivityAppendedPayload = ContractsThreadActivityAppendedPayloadSchema;\n\nexport const ThreadTurnStartRequestedPayload = ContractsThreadTurnStartRequestedPayloadSchema;\nexport const ThreadTurnInterruptRequestedPayload =\n  ContractsThreadTurnInterruptRequestedPayloadSchema;\nexport const ThreadApprovalResponseRequestedPayload =\n  ContractsThreadApprovalResponseRequestedPayloadSchema;\nexport const ThreadCheckpointRevertRequestedPayload =\n  ContractsThreadCheckpointRevertRequestedPayloadSchema;\nexport const ThreadSessionStopRequestedPayload = ContractsThreadSessionStopRequestedPayloadSchema;\n","import type { OrchestrationEvent, OrchestrationReadModel, ThreadId } from \"@salchi/contracts\";\nimport {\n  OrchestrationCheckpointSummary,\n  OrchestrationMessage,\n  OrchestrationQueuedTurn,\n  OrchestrationSession,\n  OrchestrationThread,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { toProjectorDecodeError, type OrchestrationProjectorDecodeError } from \"./Errors.ts\";\nimport {\n  MessageSentPayloadSchema,\n  ProjectCreatedPayload,\n  ProjectDeletedPayload,\n  ProjectMetaUpdatedPayload,\n  ThreadActivityAppendedPayload,\n  ThreadArchivedPayload,\n  ThreadCreatedPayload,\n  ThreadDeletedPayload,\n  ThreadInteractionModeSetPayload,\n  ThreadMetaUpdatedPayload,\n  ThreadProposedPlanUpsertedPayload,\n  ThreadQueuedTurnUpdatedPayload,\n  ThreadQueuedTurnCancelledPayload,\n  ThreadQueuedTurnDispatchedPayload,\n  ThreadQueuedTurnSteerFailedPayload,\n  ThreadQueuedTurnSteerRequestedPayload,\n  ThreadQueuedTurnSteeredPayload,\n  ThreadRuntimeModeSetPayload,\n  ThreadTurnQueuedPayload,\n  ThreadUnarchivedPayload,\n  ThreadRevertedPayload,\n  ThreadSessionSetPayload,\n  ThreadTurnDiffCompletedPayload,\n} from \"./Schemas.ts\";\n\ntype ThreadPatch = Partial<Omit<OrchestrationThread, \"id\" | \"projectId\">>;\nconst MAX_THREAD_MESSAGES = 2_000;\nconst MAX_THREAD_CHECKPOINTS = 500;\n\nfunction checkpointStatusToLatestTurnState(status: \"ready\" | \"missing\" | \"error\") {\n  if (status === \"error\") return \"error\" as const;\n  if (status === \"missing\") return \"interrupted\" as const;\n  return \"completed\" as const;\n}\n\n/**\n * Turn state to settle a still-running latest turn with when its session\n * leaves the \"running\" status, or null while the session is (re)starting or\n * running and the turn must stay unsettled.\n */\nfunction settledTurnStateForSessionStatus(\n  status: OrchestrationSession[\"status\"],\n): \"completed\" | \"interrupted\" | \"error\" | null {\n  switch (status) {\n    case \"idle\":\n    case \"ready\":\n      return \"completed\";\n    case \"error\":\n      return \"error\";\n    case \"interrupted\":\n    case \"stopped\":\n      return \"interrupted\";\n    case \"starting\":\n    case \"running\":\n      return null;\n  }\n}\n\nfunction updateThread(\n  threads: ReadonlyArray<OrchestrationThread>,\n  threadId: ThreadId,\n  patch: ThreadPatch,\n): OrchestrationThread[] {\n  return threads.map((thread) => (thread.id === threadId ? { ...thread, ...patch } : thread));\n}\n\nfunction decodeForEvent<A>(\n  schema: Schema.Decoder<A, never>,\n  value: unknown,\n  eventType: OrchestrationEvent[\"type\"],\n  field: string,\n): Effect.Effect<A, OrchestrationProjectorDecodeError> {\n  return Schema.decodeUnknownEffect(schema)(value).pipe(\n    Effect.mapError(toProjectorDecodeError(`${eventType}:${field}`)),\n  );\n}\n\nfunction retainThreadMessagesAfterRevert(\n  messages: ReadonlyArray<OrchestrationMessage>,\n  retainedTurnIds: ReadonlySet<string>,\n  turnCount: number,\n): ReadonlyArray<OrchestrationMessage> {\n  const retainedMessageIds = new Set<string>();\n  for (const message of messages) {\n    if (message.role === \"system\") {\n      retainedMessageIds.add(message.id);\n      continue;\n    }\n    if (message.turnId !== null && retainedTurnIds.has(message.turnId)) {\n      retainedMessageIds.add(message.id);\n    }\n  }\n\n  const retainedUserCount = messages.filter(\n    (message) => message.role === \"user\" && retainedMessageIds.has(message.id),\n  ).length;\n  const missingUserCount = Math.max(0, turnCount - retainedUserCount);\n  if (missingUserCount > 0) {\n    const fallbackUserMessages = messages\n      .filter(\n        (message) =>\n          message.role === \"user\" &&\n          !retainedMessageIds.has(message.id) &&\n          (message.turnId === null || retainedTurnIds.has(message.turnId)),\n      )\n      .toSorted(\n        (left, right) =>\n          left.createdAt.localeCompare(right.createdAt) || left.id.localeCompare(right.id),\n      )\n      .slice(0, missingUserCount);\n    for (const message of fallbackUserMessages) {\n      retainedMessageIds.add(message.id);\n    }\n  }\n\n  const retainedAssistantCount = messages.filter(\n    (message) => message.role === \"assistant\" && retainedMessageIds.has(message.id),\n  ).length;\n  const missingAssistantCount = Math.max(0, turnCount - retainedAssistantCount);\n  if (missingAssistantCount > 0) {\n    const fallbackAssistantMessages = messages\n      .filter(\n        (message) =>\n          message.role === \"assistant\" &&\n          !retainedMessageIds.has(message.id) &&\n          (message.turnId === null || retainedTurnIds.has(message.turnId)),\n      )\n      .toSorted(\n        (left, right) =>\n          left.createdAt.localeCompare(right.createdAt) || left.id.localeCompare(right.id),\n      )\n      .slice(0, missingAssistantCount);\n    for (const message of fallbackAssistantMessages) {\n      retainedMessageIds.add(message.id);\n    }\n  }\n\n  return messages.filter((message) => retainedMessageIds.has(message.id));\n}\n\nfunction retainThreadActivitiesAfterRevert(\n  activities: ReadonlyArray<OrchestrationThread[\"activities\"][number]>,\n  retainedTurnIds: ReadonlySet<string>,\n): ReadonlyArray<OrchestrationThread[\"activities\"][number]> {\n  return activities.filter(\n    (activity) => activity.turnId === null || retainedTurnIds.has(activity.turnId),\n  );\n}\n\nfunction retainThreadProposedPlansAfterRevert(\n  proposedPlans: ReadonlyArray<OrchestrationThread[\"proposedPlans\"][number]>,\n  retainedTurnIds: ReadonlySet<string>,\n): ReadonlyArray<OrchestrationThread[\"proposedPlans\"][number]> {\n  return proposedPlans.filter(\n    (proposedPlan) => proposedPlan.turnId === null || retainedTurnIds.has(proposedPlan.turnId),\n  );\n}\n\nfunction compareThreadActivities(\n  left: OrchestrationThread[\"activities\"][number],\n  right: OrchestrationThread[\"activities\"][number],\n): number {\n  if (left.sequence !== undefined && right.sequence !== undefined) {\n    if (left.sequence !== right.sequence) {\n      return left.sequence - right.sequence;\n    }\n  } else if (left.sequence !== undefined) {\n    return 1;\n  } else if (right.sequence !== undefined) {\n    return -1;\n  }\n\n  return left.createdAt.localeCompare(right.createdAt) || left.id.localeCompare(right.id);\n}\n\nexport function createEmptyReadModel(nowIso: string): OrchestrationReadModel {\n  return {\n    snapshotSequence: 0,\n    projects: [],\n    threads: [],\n    updatedAt: nowIso,\n  };\n}\n\nexport function projectEvent(\n  model: OrchestrationReadModel,\n  event: OrchestrationEvent,\n): Effect.Effect<OrchestrationReadModel, OrchestrationProjectorDecodeError> {\n  const nextBase: OrchestrationReadModel = {\n    ...model,\n    snapshotSequence: event.sequence,\n    updatedAt: event.occurredAt,\n  };\n\n  switch (event.type) {\n    case \"project.created\":\n      return decodeForEvent(ProjectCreatedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => {\n          const existing = nextBase.projects.find((entry) => entry.id === payload.projectId);\n          const nextProject = {\n            id: payload.projectId,\n            title: payload.title,\n            workspaceRoot: payload.workspaceRoot,\n            defaultModelSelection: payload.defaultModelSelection,\n            scripts: payload.scripts,\n            createdAt: payload.createdAt,\n            updatedAt: payload.updatedAt,\n            deletedAt: null,\n          };\n\n          return {\n            ...nextBase,\n            projects: existing\n              ? nextBase.projects.map((entry) =>\n                  entry.id === payload.projectId ? nextProject : entry,\n                )\n              : [...nextBase.projects, nextProject],\n          };\n        }),\n      );\n\n    case \"project.meta-updated\":\n      return decodeForEvent(ProjectMetaUpdatedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          projects: nextBase.projects.map((project) =>\n            project.id === payload.projectId\n              ? {\n                  ...project,\n                  ...(payload.title !== undefined ? { title: payload.title } : {}),\n                  ...(payload.workspaceRoot !== undefined\n                    ? { workspaceRoot: payload.workspaceRoot }\n                    : {}),\n                  ...(payload.defaultModelSelection !== undefined\n                    ? { defaultModelSelection: payload.defaultModelSelection }\n                    : {}),\n                  ...(payload.scripts !== undefined ? { scripts: payload.scripts } : {}),\n                  updatedAt: payload.updatedAt,\n                }\n              : project,\n          ),\n        })),\n      );\n\n    case \"project.deleted\":\n      return decodeForEvent(ProjectDeletedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          projects: nextBase.projects.map((project) =>\n            project.id === payload.projectId\n              ? {\n                  ...project,\n                  deletedAt: payload.deletedAt,\n                  updatedAt: payload.deletedAt,\n                }\n              : project,\n          ),\n        })),\n      );\n\n    case \"thread.created\":\n      return Effect.gen(function* () {\n        const payload = yield* decodeForEvent(\n          ThreadCreatedPayload,\n          event.payload,\n          event.type,\n          \"payload\",\n        );\n        const thread: OrchestrationThread = yield* decodeForEvent(\n          OrchestrationThread,\n          {\n            id: payload.threadId,\n            projectId: payload.projectId,\n            title: payload.title,\n            modelSelection: payload.modelSelection,\n            runtimeMode: payload.runtimeMode,\n            interactionMode: payload.interactionMode,\n            parentThreadId: payload.parentThreadId,\n            createdByThreadId: payload.createdByThreadId,\n            subagentKind: payload.subagentKind,\n            subagentNickname: payload.subagentNickname,\n            subagentRole: payload.subagentRole,\n            hiddenFromThreadList: payload.hiddenFromThreadList,\n            branch: payload.branch,\n            worktreePath: payload.worktreePath,\n            latestTurn: null,\n            createdAt: payload.createdAt,\n            updatedAt: payload.updatedAt,\n            archivedAt: null,\n            deletedAt: null,\n            messages: [],\n            queuedTurns: [],\n            activities: [],\n            checkpoints: [],\n            session: null,\n          },\n          event.type,\n          \"thread\",\n        );\n        const existing = nextBase.threads.find((entry) => entry.id === thread.id);\n        return {\n          ...nextBase,\n          threads: existing\n            ? nextBase.threads.map((entry) => (entry.id === thread.id ? thread : entry))\n            : [...nextBase.threads, thread],\n        };\n      });\n\n    case \"thread.deleted\":\n      return decodeForEvent(ThreadDeletedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            deletedAt: payload.deletedAt,\n            updatedAt: payload.deletedAt,\n          }),\n        })),\n      );\n\n    case \"thread.archived\":\n      return decodeForEvent(ThreadArchivedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            archivedAt: payload.archivedAt,\n            updatedAt: payload.updatedAt,\n          }),\n        })),\n      );\n\n    case \"thread.unarchived\":\n      return decodeForEvent(ThreadUnarchivedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            archivedAt: null,\n            updatedAt: payload.updatedAt,\n          }),\n        })),\n      );\n\n    case \"thread.meta-updated\":\n      return decodeForEvent(ThreadMetaUpdatedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            ...(payload.title !== undefined ? { title: payload.title } : {}),\n            ...(payload.modelSelection !== undefined\n              ? { modelSelection: payload.modelSelection }\n              : {}),\n            ...(payload.branch !== undefined ? { branch: payload.branch } : {}),\n            ...(payload.worktreePath !== undefined ? { worktreePath: payload.worktreePath } : {}),\n            updatedAt: payload.updatedAt,\n          }),\n        })),\n      );\n\n    case \"thread.runtime-mode-set\":\n      return decodeForEvent(ThreadRuntimeModeSetPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            runtimeMode: payload.runtimeMode,\n            updatedAt: payload.updatedAt,\n          }),\n        })),\n      );\n\n    case \"thread.interaction-mode-set\":\n      return decodeForEvent(\n        ThreadInteractionModeSetPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => ({\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            interactionMode: payload.interactionMode,\n            updatedAt: payload.updatedAt,\n          }),\n        })),\n      );\n\n    case \"thread.message-sent\":\n      return Effect.gen(function* () {\n        const payload = yield* decodeForEvent(\n          MessageSentPayloadSchema,\n          event.payload,\n          event.type,\n          \"payload\",\n        );\n        const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n        if (!thread) {\n          return nextBase;\n        }\n\n        const message: OrchestrationMessage = yield* decodeForEvent(\n          OrchestrationMessage,\n          {\n            id: payload.messageId,\n            role: payload.role,\n            text: payload.text,\n            ...(payload.attachments !== undefined ? { attachments: payload.attachments } : {}),\n            turnId: payload.turnId,\n            streaming: payload.streaming,\n            createdAt: payload.createdAt,\n            updatedAt: payload.updatedAt,\n          },\n          event.type,\n          \"message\",\n        );\n\n        const existingMessage = thread.messages.find((entry) => entry.id === message.id);\n        const messages = existingMessage\n          ? thread.messages.map((entry) =>\n              entry.id === message.id\n                ? {\n                    ...entry,\n                    text: message.streaming\n                      ? `${entry.text}${message.text}`\n                      : message.text.length > 0\n                        ? message.text\n                        : entry.text,\n                    streaming: message.streaming,\n                    updatedAt: message.updatedAt,\n                    turnId: message.turnId,\n                    ...(message.attachments !== undefined\n                      ? { attachments: message.attachments }\n                      : {}),\n                  }\n                : entry,\n            )\n          : [...thread.messages, message];\n        const cappedMessages = messages.slice(-MAX_THREAD_MESSAGES);\n\n        return {\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            messages: cappedMessages,\n            updatedAt: event.occurredAt,\n          }),\n        };\n      });\n\n    case \"thread.turn-queued\":\n      return Effect.gen(function* () {\n        const payload = yield* decodeForEvent(\n          ThreadTurnQueuedPayload,\n          event.payload,\n          event.type,\n          \"payload\",\n        );\n        const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n        if (!thread) {\n          return nextBase;\n        }\n\n        const queuedTurn: OrchestrationQueuedTurn = yield* decodeForEvent(\n          OrchestrationQueuedTurn,\n          payload,\n          event.type,\n          \"queuedTurn\",\n        );\n        const queuedTurns = [\n          ...thread.queuedTurns.filter((entry) => entry.messageId !== queuedTurn.messageId),\n          queuedTurn,\n        ].toSorted(\n          (left, right) =>\n            left.createdAt.localeCompare(right.createdAt) ||\n            left.messageId.localeCompare(right.messageId),\n        );\n\n        return {\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            queuedTurns,\n            updatedAt: event.occurredAt,\n          }),\n        };\n      });\n\n    case \"thread.queued-turn-updated\":\n      return decodeForEvent(\n        ThreadQueuedTurnUpdatedPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n          let changed = false;\n          const queuedTurns = thread.queuedTurns.map((entry) => {\n            if (entry.messageId !== payload.messageId) {\n              return entry;\n            }\n            changed = true;\n            return {\n              ...entry,\n              text: payload.text,\n              updatedAt: payload.updatedAt,\n            };\n          });\n          if (!changed) {\n            return nextBase;\n          }\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              queuedTurns,\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.queued-turn-cancelled\":\n      return decodeForEvent(\n        ThreadQueuedTurnCancelledPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              queuedTurns: thread.queuedTurns.filter(\n                (entry) => entry.messageId !== payload.messageId,\n              ),\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.queued-turn-dispatched\":\n      return decodeForEvent(\n        ThreadQueuedTurnDispatchedPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              queuedTurns: thread.queuedTurns.filter(\n                (entry) => entry.messageId !== payload.messageId,\n              ),\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.queued-turn-steer-requested\":\n      return decodeForEvent(\n        ThreadQueuedTurnSteerRequestedPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              queuedTurns: thread.queuedTurns.map((entry) =>\n                entry.messageId === payload.messageId\n                  ? {\n                      ...entry,\n                      steering: {\n                        expectedTurnId: payload.expectedTurnId,\n                        requestedAt: payload.createdAt,\n                      },\n                      updatedAt: event.occurredAt,\n                    }\n                  : entry,\n              ),\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.queued-turn-steer-failed\":\n      return decodeForEvent(\n        ThreadQueuedTurnSteerFailedPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              queuedTurns: thread.queuedTurns.map((entry) => {\n                if (entry.messageId !== payload.messageId) {\n                  return entry;\n                }\n                const { steering: _steering, ...queuedTurn } = entry;\n                return {\n                  ...queuedTurn,\n                  updatedAt: event.occurredAt,\n                };\n              }),\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.queued-turn-steered\":\n      return decodeForEvent(\n        ThreadQueuedTurnSteeredPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              queuedTurns: thread.queuedTurns.filter(\n                (entry) => entry.messageId !== payload.messageId,\n              ),\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.session-set\":\n      return Effect.gen(function* () {\n        const payload = yield* decodeForEvent(\n          ThreadSessionSetPayload,\n          event.payload,\n          event.type,\n          \"payload\",\n        );\n        const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n        if (!thread) {\n          return nextBase;\n        }\n\n        const session: OrchestrationSession = yield* decodeForEvent(\n          OrchestrationSession,\n          payload.session,\n          event.type,\n          \"session\",\n        );\n\n        // Leaving the \"running\" session status is the turn-end signal: settle\n        // a still-running latest turn so its duration reflects the whole turn.\n        const settledTurnState = settledTurnStateForSessionStatus(session.status);\n        return {\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            session,\n            latestTurn:\n              session.status === \"running\" && session.activeTurnId !== null\n                ? {\n                    turnId: session.activeTurnId,\n                    state: \"running\",\n                    requestedAt:\n                      thread.latestTurn?.turnId === session.activeTurnId\n                        ? thread.latestTurn.requestedAt\n                        : session.updatedAt,\n                    startedAt:\n                      thread.latestTurn?.turnId === session.activeTurnId\n                        ? (thread.latestTurn.startedAt ?? session.updatedAt)\n                        : session.updatedAt,\n                    completedAt: null,\n                    assistantMessageId:\n                      thread.latestTurn?.turnId === session.activeTurnId\n                        ? thread.latestTurn.assistantMessageId\n                        : null,\n                  }\n                : thread.latestTurn !== null &&\n                    thread.latestTurn.state === \"running\" &&\n                    settledTurnState !== null\n                  ? {\n                      ...thread.latestTurn,\n                      state: settledTurnState,\n                      // A running turn's completedAt can only hold a mid-turn\n                      // placeholder checkpoint timestamp — the session leaving\n                      // \"running\" is the authoritative turn end.\n                      completedAt: session.updatedAt,\n                    }\n                  : thread.latestTurn,\n            updatedAt: event.occurredAt,\n          }),\n        };\n      });\n\n    case \"thread.proposed-plan-upserted\":\n      return Effect.gen(function* () {\n        const payload = yield* decodeForEvent(\n          ThreadProposedPlanUpsertedPayload,\n          event.payload,\n          event.type,\n          \"payload\",\n        );\n        const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n        if (!thread) {\n          return nextBase;\n        }\n\n        const proposedPlans = [\n          ...thread.proposedPlans.filter((entry) => entry.id !== payload.proposedPlan.id),\n          payload.proposedPlan,\n        ]\n          .toSorted(\n            (left, right) =>\n              left.createdAt.localeCompare(right.createdAt) || left.id.localeCompare(right.id),\n          )\n          .slice(-200);\n\n        return {\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            proposedPlans,\n            updatedAt: event.occurredAt,\n          }),\n        };\n      });\n\n    case \"thread.turn-diff-completed\":\n      return Effect.gen(function* () {\n        const payload = yield* decodeForEvent(\n          ThreadTurnDiffCompletedPayload,\n          event.payload,\n          event.type,\n          \"payload\",\n        );\n        const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n        if (!thread) {\n          return nextBase;\n        }\n        const assistantMessageId =\n          thread.messages\n            .toReversed()\n            .find((message) => message.role === \"assistant\" && message.turnId === payload.turnId)\n            ?.id ?? payload.assistantMessageId;\n\n        const checkpoint = yield* decodeForEvent(\n          OrchestrationCheckpointSummary,\n          {\n            turnId: payload.turnId,\n            checkpointTurnCount: payload.checkpointTurnCount,\n            checkpointRef: payload.checkpointRef,\n            status: payload.status,\n            files: payload.files,\n            attribution: payload.attribution,\n            assistantMessageId,\n            completedAt: payload.completedAt,\n          },\n          event.type,\n          \"checkpoint\",\n        );\n\n        // Do not let a placeholder (status \"missing\") overwrite a checkpoint\n        // that has already been captured with a real git ref (status \"ready\").\n        // ProviderRuntimeIngestion may fire multiple turn.diff.updated events\n        // per turn; without this guard later placeholders would clobber the\n        // real capture dispatched by CheckpointReactor.\n        const existing = thread.checkpoints.find((entry) => entry.turnId === checkpoint.turnId);\n        if (existing && existing.status !== \"missing\" && checkpoint.status === \"missing\") {\n          return nextBase;\n        }\n\n        const checkpoints = [\n          ...thread.checkpoints.filter((entry) => entry.turnId !== checkpoint.turnId),\n          checkpoint,\n        ]\n          .toSorted((left, right) => left.checkpointTurnCount - right.checkpointTurnCount)\n          .slice(-MAX_THREAD_CHECKPOINTS);\n\n        // Mid-turn diff updates produce placeholder checkpoints; record the\n        // checkpoint, but don't settle a turn its session is still running.\n        const turnStillRunning =\n          thread.session?.status === \"running\" && thread.session.activeTurnId === payload.turnId;\n\n        return {\n          ...nextBase,\n          threads: updateThread(nextBase.threads, payload.threadId, {\n            checkpoints,\n            latestTurn: turnStillRunning\n              ? thread.latestTurn\n              : {\n                  turnId: payload.turnId,\n                  state: checkpointStatusToLatestTurnState(payload.status),\n                  requestedAt:\n                    thread.latestTurn?.turnId === payload.turnId\n                      ? thread.latestTurn.requestedAt\n                      : payload.completedAt,\n                  startedAt:\n                    thread.latestTurn?.turnId === payload.turnId\n                      ? (thread.latestTurn.startedAt ?? payload.completedAt)\n                      : payload.completedAt,\n                  completedAt: payload.completedAt,\n                  assistantMessageId,\n                },\n            updatedAt: event.occurredAt,\n          }),\n        };\n      });\n\n    case \"thread.reverted\":\n      return decodeForEvent(ThreadRevertedPayload, event.payload, event.type, \"payload\").pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n\n          const checkpoints = thread.checkpoints\n            .filter((entry) => entry.checkpointTurnCount <= payload.turnCount)\n            .toSorted((left, right) => left.checkpointTurnCount - right.checkpointTurnCount)\n            .slice(-MAX_THREAD_CHECKPOINTS);\n          const retainedTurnIds = new Set(checkpoints.map((checkpoint) => checkpoint.turnId));\n          const messages = retainThreadMessagesAfterRevert(\n            thread.messages,\n            retainedTurnIds,\n            payload.turnCount,\n          ).slice(-MAX_THREAD_MESSAGES);\n          const proposedPlans = retainThreadProposedPlansAfterRevert(\n            thread.proposedPlans,\n            retainedTurnIds,\n          ).slice(-200);\n          const activities = retainThreadActivitiesAfterRevert(thread.activities, retainedTurnIds);\n\n          const latestCheckpoint = checkpoints.at(-1) ?? null;\n          const latestTurn =\n            latestCheckpoint === null\n              ? null\n              : {\n                  turnId: latestCheckpoint.turnId,\n                  state: checkpointStatusToLatestTurnState(latestCheckpoint.status),\n                  requestedAt: latestCheckpoint.completedAt,\n                  startedAt: latestCheckpoint.completedAt,\n                  completedAt: latestCheckpoint.completedAt,\n                  assistantMessageId: latestCheckpoint.assistantMessageId,\n                };\n\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              checkpoints,\n              messages,\n              proposedPlans,\n              activities,\n              latestTurn,\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    case \"thread.activity-appended\":\n      return decodeForEvent(\n        ThreadActivityAppendedPayload,\n        event.payload,\n        event.type,\n        \"payload\",\n      ).pipe(\n        Effect.map((payload) => {\n          const thread = nextBase.threads.find((entry) => entry.id === payload.threadId);\n          if (!thread) {\n            return nextBase;\n          }\n\n          const activities = [\n            ...thread.activities.filter((entry) => entry.id !== payload.activity.id),\n            payload.activity,\n          ]\n            .toSorted(compareThreadActivities)\n            .slice(-500);\n\n          return {\n            ...nextBase,\n            threads: updateThread(nextBase.threads, payload.threadId, {\n              activities,\n              updatedAt: event.occurredAt,\n            }),\n          };\n        }),\n      );\n\n    default:\n      return Effect.succeed(nextBase);\n  }\n}\n","import {\n  EventId,\n  type OrchestrationCommand,\n  type OrchestrationEvent,\n  type OrchestrationQueuedTurn,\n  type OrchestrationReadModel,\n} from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport type * as PlatformError from \"effect/PlatformError\";\n\nimport { OrchestrationCommandInvariantError } from \"./Errors.ts\";\nimport {\n  listThreadsByProjectId,\n  requireProject,\n  requireProjectAbsent,\n  requireThread,\n  requireThreadArchived,\n  requireThreadAbsent,\n  requireThreadNotArchived,\n} from \"./commandInvariants.ts\";\nimport { projectEvent } from \"./projector.ts\";\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\nfunction mergeMessageAttachments<TAttachment extends { readonly id: string }>(\n  existing: ReadonlyArray<TAttachment> | undefined,\n  next: ReadonlyArray<TAttachment>,\n): TAttachment[] {\n  const merged: TAttachment[] = [];\n  const seenIds = new Set<string>();\n  for (const attachment of [...(existing ?? []), ...next]) {\n    if (seenIds.has(attachment.id)) {\n      continue;\n    }\n    seenIds.add(attachment.id);\n    merged.push(attachment);\n  }\n  return merged;\n}\n\nfunction withEventBase(\n  input: Pick<OrchestrationCommand, \"commandId\"> & {\n    readonly aggregateKind: OrchestrationEvent[\"aggregateKind\"];\n    readonly aggregateId: OrchestrationEvent[\"aggregateId\"];\n    readonly occurredAt: string;\n    readonly metadata?: OrchestrationEvent[\"metadata\"];\n  },\n): Effect.Effect<\n  Omit<OrchestrationEvent, \"sequence\" | \"type\" | \"payload\">,\n  PlatformError.PlatformError,\n  Crypto.Crypto\n> {\n  return Crypto.Crypto.pipe(\n    Effect.flatMap((crypto) =>\n      crypto.randomUUIDv4.pipe(\n        Effect.map((eventId) => ({\n          eventId: EventId.make(eventId),\n          aggregateKind: input.aggregateKind,\n          aggregateId: input.aggregateId,\n          occurredAt: input.occurredAt,\n          commandId: input.commandId,\n          causationEventId: null,\n          correlationId: input.commandId,\n          metadata: input.metadata ?? {},\n        })),\n      ),\n    ),\n  );\n}\n\ntype PlannedOrchestrationEvent = Omit<OrchestrationEvent, \"sequence\">;\n\nconst buildQueuedTurnDispatchEvents = Effect.fn(\"buildQueuedTurnDispatchEvents\")(function* (input: {\n  readonly command: Extract<\n    OrchestrationCommand,\n    { type: \"thread.queued-turn.confirm\" | \"thread.queued-turn.dispatch\" }\n  >;\n  readonly queuedTurn: OrchestrationQueuedTurn;\n  readonly messageAlreadyPersisted: boolean;\n}): Effect.fn.Return<\n  ReadonlyArray<PlannedOrchestrationEvent>,\n  PlatformError.PlatformError,\n  Crypto.Crypto\n> {\n  const { command, queuedTurn } = input;\n  const dispatchedEvent: PlannedOrchestrationEvent = {\n    ...(yield* withEventBase({\n      aggregateKind: \"thread\",\n      aggregateId: command.threadId,\n      occurredAt: command.createdAt,\n      commandId: command.commandId,\n    })),\n    type: \"thread.queued-turn-dispatched\",\n    payload: {\n      threadId: command.threadId,\n      messageId: command.messageId,\n      dispatchedAt: command.createdAt,\n    },\n  };\n  const userMessageEvent: PlannedOrchestrationEvent | undefined = input.messageAlreadyPersisted\n    ? undefined\n    : {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        causationEventId: dispatchedEvent.eventId,\n        type: \"thread.message-sent\",\n        payload: {\n          threadId: command.threadId,\n          messageId: queuedTurn.messageId,\n          role: queuedTurn.role,\n          text: queuedTurn.text,\n          attachments: queuedTurn.attachments,\n          turnId: null,\n          streaming: false,\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n  const turnStartRequestedEvent: PlannedOrchestrationEvent = {\n    ...(yield* withEventBase({\n      aggregateKind: \"thread\",\n      aggregateId: command.threadId,\n      occurredAt: command.createdAt,\n      commandId: command.commandId,\n    })),\n    causationEventId: userMessageEvent?.eventId ?? dispatchedEvent.eventId,\n    type: \"thread.turn-start-requested\",\n    payload: {\n      threadId: command.threadId,\n      messageId: queuedTurn.messageId,\n      ...(queuedTurn.modelSelection !== undefined\n        ? { modelSelection: queuedTurn.modelSelection }\n        : {}),\n      ...(queuedTurn.titleSeed !== undefined ? { titleSeed: queuedTurn.titleSeed } : {}),\n      runtimeMode: queuedTurn.runtimeMode,\n      interactionMode: queuedTurn.interactionMode,\n      ...(queuedTurn.sourceProposedPlan !== undefined\n        ? { sourceProposedPlan: queuedTurn.sourceProposedPlan }\n        : {}),\n      createdAt: command.createdAt,\n    },\n  };\n\n  return userMessageEvent\n    ? [dispatchedEvent, userMessageEvent, turnStartRequestedEvent]\n    : [dispatchedEvent, turnStartRequestedEvent];\n});\n\ntype DecideOrchestrationCommandResult =\n  | PlannedOrchestrationEvent\n  | ReadonlyArray<PlannedOrchestrationEvent>;\n\nconst decideCommandSequence = Effect.fn(\"decideCommandSequence\")(function* ({\n  commands,\n  readModel,\n}: {\n  readonly commands: ReadonlyArray<OrchestrationCommand>;\n  readonly readModel: OrchestrationReadModel;\n}): Effect.fn.Return<\n  ReadonlyArray<PlannedOrchestrationEvent>,\n  OrchestrationCommandInvariantError | PlatformError.PlatformError,\n  Crypto.Crypto\n> {\n  let nextReadModel = readModel;\n  let nextSequence = readModel.snapshotSequence;\n  const plannedEvents: PlannedOrchestrationEvent[] = [];\n\n  for (const nextCommand of commands) {\n    const decided = yield* decideOrchestrationCommand({\n      command: nextCommand,\n      readModel: nextReadModel,\n    });\n    const nextEvents = Array.isArray(decided) ? decided : [decided];\n    for (const nextEvent of nextEvents) {\n      plannedEvents.push(nextEvent);\n      nextSequence += 1;\n      nextReadModel = yield* projectEvent(nextReadModel, {\n        ...nextEvent,\n        sequence: nextSequence,\n      }).pipe(Effect.orDie);\n    }\n  }\n\n  return plannedEvents;\n});\n\nexport const decideOrchestrationCommand = Effect.fn(\"decideOrchestrationCommand\")(function* ({\n  command,\n  readModel,\n}: {\n  readonly command: OrchestrationCommand;\n  readonly readModel: OrchestrationReadModel;\n}): Effect.fn.Return<\n  DecideOrchestrationCommandResult,\n  OrchestrationCommandInvariantError | PlatformError.PlatformError,\n  Crypto.Crypto\n> {\n  switch (command.type) {\n    case \"project.create\": {\n      yield* requireProjectAbsent({\n        readModel,\n        command,\n        projectId: command.projectId,\n      });\n\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"project\",\n          aggregateId: command.projectId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"project.created\",\n        payload: {\n          projectId: command.projectId,\n          title: command.title,\n          workspaceRoot: command.workspaceRoot,\n          defaultModelSelection: command.defaultModelSelection ?? null,\n          scripts: [],\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"project.meta.update\": {\n      yield* requireProject({\n        readModel,\n        command,\n        projectId: command.projectId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"project\",\n          aggregateId: command.projectId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"project.meta-updated\",\n        payload: {\n          projectId: command.projectId,\n          ...(command.title !== undefined ? { title: command.title } : {}),\n          ...(command.workspaceRoot !== undefined ? { workspaceRoot: command.workspaceRoot } : {}),\n          ...(command.defaultModelSelection !== undefined\n            ? { defaultModelSelection: command.defaultModelSelection }\n            : {}),\n          ...(command.scripts !== undefined ? { scripts: command.scripts } : {}),\n          updatedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"project.delete\": {\n      yield* requireProject({\n        readModel,\n        command,\n        projectId: command.projectId,\n      });\n      const activeThreads = listThreadsByProjectId(readModel, command.projectId).filter(\n        (thread) => thread.deletedAt === null,\n      );\n      if (activeThreads.length > 0 && command.force !== true) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Project '${command.projectId}' is not empty and cannot be deleted without force=true.`,\n        });\n      }\n      if (activeThreads.length > 0) {\n        return yield* decideCommandSequence({\n          readModel,\n          commands: [\n            ...activeThreads.map(\n              (thread): Extract<OrchestrationCommand, { type: \"thread.delete\" }> => ({\n                type: \"thread.delete\",\n                commandId: command.commandId,\n                threadId: thread.id,\n              }),\n            ),\n            {\n              type: \"project.delete\",\n              commandId: command.commandId,\n              projectId: command.projectId,\n            },\n          ],\n        });\n      }\n\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"project\",\n          aggregateId: command.projectId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"project.deleted\" as const,\n        payload: {\n          projectId: command.projectId,\n          deletedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.create\": {\n      yield* requireProject({\n        readModel,\n        command,\n        projectId: command.projectId,\n      });\n      yield* requireThreadAbsent({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.created\",\n        payload: {\n          threadId: command.threadId,\n          projectId: command.projectId,\n          title: command.title,\n          modelSelection: command.modelSelection,\n          runtimeMode: command.runtimeMode,\n          interactionMode: command.interactionMode,\n          parentThreadId: command.parentThreadId ?? null,\n          createdByThreadId: command.createdByThreadId ?? null,\n          subagentKind: command.subagentKind ?? null,\n          subagentNickname: command.subagentNickname ?? null,\n          subagentRole: command.subagentRole ?? null,\n          hiddenFromThreadList: command.hiddenFromThreadList ?? false,\n          branch: command.branch,\n          worktreePath: command.worktreePath,\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.delete\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.deleted\",\n        payload: {\n          threadId: command.threadId,\n          deletedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.archive\": {\n      yield* requireThreadNotArchived({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.archived\",\n        payload: {\n          threadId: command.threadId,\n          archivedAt: occurredAt,\n          updatedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.unarchive\": {\n      yield* requireThreadArchived({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.unarchived\",\n        payload: {\n          threadId: command.threadId,\n          updatedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.meta.update\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.meta-updated\",\n        payload: {\n          threadId: command.threadId,\n          ...(command.title !== undefined ? { title: command.title } : {}),\n          ...(command.modelSelection !== undefined\n            ? { modelSelection: command.modelSelection }\n            : {}),\n          ...(command.branch !== undefined ? { branch: command.branch } : {}),\n          ...(command.worktreePath !== undefined ? { worktreePath: command.worktreePath } : {}),\n          updatedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.runtime-mode.set\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.runtime-mode-set\",\n        payload: {\n          threadId: command.threadId,\n          runtimeMode: command.runtimeMode,\n          updatedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.interaction-mode.set\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const occurredAt = yield* nowIso;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.interaction-mode-set\",\n        payload: {\n          threadId: command.threadId,\n          interactionMode: command.interactionMode,\n          updatedAt: occurredAt,\n        },\n      };\n    }\n\n    case \"thread.turn.start\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const sourceProposedPlan = command.sourceProposedPlan;\n      const sourceThread = sourceProposedPlan\n        ? yield* requireThread({\n            readModel,\n            command,\n            threadId: sourceProposedPlan.threadId,\n          })\n        : null;\n      const sourcePlan =\n        sourceProposedPlan && sourceThread\n          ? sourceThread.proposedPlans.find((entry) => entry.id === sourceProposedPlan.planId)\n          : null;\n      if (sourceProposedPlan && !sourcePlan) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Proposed plan '${sourceProposedPlan.planId}' does not exist on thread '${sourceProposedPlan.threadId}'.`,\n        });\n      }\n      if (sourceThread && sourceThread.projectId !== targetThread.projectId) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Proposed plan '${sourceProposedPlan?.planId}' belongs to thread '${sourceThread.id}' in a different project.`,\n        });\n      }\n      const userMessageEvent: Omit<OrchestrationEvent, \"sequence\"> = {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.message-sent\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.message.messageId,\n          role: \"user\",\n          text: command.message.text,\n          attachments: command.message.attachments,\n          turnId: null,\n          streaming: false,\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n      const turnStartRequestedEvent: Omit<OrchestrationEvent, \"sequence\"> = {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        causationEventId: userMessageEvent.eventId,\n        type: \"thread.turn-start-requested\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.message.messageId,\n          ...(command.modelSelection !== undefined\n            ? { modelSelection: command.modelSelection }\n            : {}),\n          ...(command.titleSeed !== undefined ? { titleSeed: command.titleSeed } : {}),\n          runtimeMode: targetThread.runtimeMode,\n          interactionMode: targetThread.interactionMode,\n          ...(sourceProposedPlan !== undefined ? { sourceProposedPlan } : {}),\n          createdAt: command.createdAt,\n        },\n      };\n      return [userMessageEvent, turnStartRequestedEvent];\n    }\n\n    case \"thread.turn.queue\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const sourceProposedPlan = command.sourceProposedPlan;\n      const sourceThread = sourceProposedPlan\n        ? yield* requireThread({\n            readModel,\n            command,\n            threadId: sourceProposedPlan.threadId,\n          })\n        : null;\n      const sourcePlan =\n        sourceProposedPlan && sourceThread\n          ? sourceThread.proposedPlans.find((entry) => entry.id === sourceProposedPlan.planId)\n          : null;\n      if (sourceProposedPlan && !sourcePlan) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Proposed plan '${sourceProposedPlan.planId}' does not exist on thread '${sourceProposedPlan.threadId}'.`,\n        });\n      }\n      if (sourceThread && sourceThread.projectId !== targetThread.projectId) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Proposed plan '${sourceProposedPlan?.planId}' belongs to thread '${sourceThread.id}' in a different project.`,\n        });\n      }\n      if (targetThread.queuedTurns.some((entry) => entry.messageId === command.message.messageId)) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.message.messageId}' already exists on thread '${command.threadId}'.`,\n        });\n      }\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.turn-queued\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.message.messageId,\n          role: \"user\",\n          text: command.message.text,\n          attachments: command.message.attachments,\n          ...(command.modelSelection !== undefined\n            ? { modelSelection: command.modelSelection }\n            : {}),\n          ...(command.titleSeed !== undefined ? { titleSeed: command.titleSeed } : {}),\n          runtimeMode: command.runtimeMode,\n          interactionMode: command.interactionMode,\n          ...(sourceProposedPlan !== undefined ? { sourceProposedPlan } : {}),\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.turn.hold-for-recovery\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.turn-queued\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.message.messageId,\n          role: command.message.role,\n          text: command.message.text,\n          attachments: command.message.attachments,\n          ...(command.modelSelection !== undefined\n            ? { modelSelection: command.modelSelection }\n            : {}),\n          ...(command.titleSeed !== undefined ? { titleSeed: command.titleSeed } : {}),\n          runtimeMode: command.runtimeMode,\n          interactionMode: command.interactionMode,\n          ...(command.sourceProposedPlan !== undefined\n            ? { sourceProposedPlan: command.sourceProposedPlan }\n            : {}),\n          recoveryConfirmationRequired: true,\n          createdAt: command.requestedAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.queued-turn.update\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not exist on thread '${command.threadId}'.`,\n        });\n      }\n      if (queuedTurn.recoveryConfirmationRequired) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' requires recovery confirmation before it can be updated.`,\n        });\n      }\n      if (queuedTurn.steering !== undefined) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is already being steered into turn '${queuedTurn.steering.expectedTurnId}'.`,\n        });\n      }\n      if (command.text.trim().length === 0 && queuedTurn.attachments.length === 0) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' must include text or an attachment.`,\n        });\n      }\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.queued-turn-updated\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          text: command.text,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.queued-turn.cancel\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not exist on thread '${command.threadId}'.`,\n        });\n      }\n      if (queuedTurn.steering !== undefined) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is already being steered into turn '${queuedTurn.steering.expectedTurnId}'.`,\n        });\n      }\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.queued-turn-cancelled\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          recoveryConfirmationRequired: queuedTurn.recoveryConfirmationRequired,\n          cancelledAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.queued-turn.steer\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not exist on thread '${command.threadId}'.`,\n        });\n      }\n      if (queuedTurn.recoveryConfirmationRequired) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' requires recovery confirmation before it can be steered.`,\n        });\n      }\n      if (queuedTurn.steering !== undefined) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is already being steered into turn '${queuedTurn.steering.expectedTurnId}'.`,\n        });\n      }\n      if (\n        targetThread.session?.status !== \"running\" ||\n        targetThread.session.activeTurnId !== command.expectedTurnId\n      ) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Turn '${command.expectedTurnId}' is no longer the active running turn on thread '${command.threadId}'.`,\n        });\n      }\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.queued-turn-steer-requested\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          expectedTurnId: command.expectedTurnId,\n          createdAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.queued-turn.confirm\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not exist on thread '${command.threadId}'.`,\n        });\n      }\n      if (queuedTurn.steering !== undefined) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is being steered into turn '${queuedTurn.steering.expectedTurnId}' and cannot be dispatched.`,\n        });\n      }\n      if (!queuedTurn.recoveryConfirmationRequired) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not require recovery confirmation.`,\n        });\n      }\n      const messageAlreadyPersisted = targetThread.messages.some(\n        (message) => message.id === queuedTurn.messageId && message.role === \"user\",\n      );\n      return yield* buildQueuedTurnDispatchEvents({\n        command,\n        queuedTurn,\n        messageAlreadyPersisted,\n      });\n    }\n\n    case \"thread.queued-turn.dispatch\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not exist on thread '${command.threadId}'.`,\n        });\n      }\n      if (queuedTurn.recoveryConfirmationRequired) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' requires explicit recovery confirmation before it can be dispatched.`,\n        });\n      }\n      if (queuedTurn.steering !== undefined) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is being steered into turn '${queuedTurn.steering.expectedTurnId}' and cannot be dispatched.`,\n        });\n      }\n      return yield* buildQueuedTurnDispatchEvents({\n        command,\n        queuedTurn,\n        messageAlreadyPersisted: false,\n      });\n    }\n\n    case \"thread.queued-turn.steer.complete\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' does not exist on thread '${command.threadId}'.`,\n        });\n      }\n      if (\n        queuedTurn.steering === undefined ||\n        queuedTurn.steering.expectedTurnId !== command.turnId\n      ) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is not reserved for steering into turn '${command.turnId}'.`,\n        });\n      }\n      const steeredEvent: Omit<OrchestrationEvent, \"sequence\"> = {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.queued-turn-steered\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          turnId: command.turnId,\n          steeredAt: command.createdAt,\n        },\n      };\n      const userMessageEvent: Omit<OrchestrationEvent, \"sequence\"> = {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        causationEventId: steeredEvent.eventId,\n        type: \"thread.message-sent\",\n        payload: {\n          threadId: command.threadId,\n          messageId: queuedTurn.messageId,\n          role: queuedTurn.role,\n          text: queuedTurn.text,\n          attachments: queuedTurn.attachments,\n          turnId: command.turnId,\n          streaming: false,\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n      return [steeredEvent, userMessageEvent];\n    }\n\n    case \"thread.queued-turn.steer.fail\": {\n      const targetThread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const queuedTurn = targetThread.queuedTurns.find(\n        (entry) => entry.messageId === command.messageId,\n      );\n      if (!queuedTurn || queuedTurn.steering?.expectedTurnId !== command.expectedTurnId) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Queued turn '${command.messageId}' is not reserved for steering into turn '${command.expectedTurnId}'.`,\n        });\n      }\n      const failedEventBase = yield* withEventBase({\n        aggregateKind: \"thread\",\n        aggregateId: command.threadId,\n        occurredAt: command.createdAt,\n        commandId: command.commandId,\n      });\n      const failedEvent: Omit<OrchestrationEvent, \"sequence\"> = {\n        ...failedEventBase,\n        type: \"thread.queued-turn-steer-failed\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          expectedTurnId: command.expectedTurnId,\n          failedAt: command.createdAt,\n        },\n      };\n      const activityEventBase = yield* withEventBase({\n        aggregateKind: \"thread\",\n        aggregateId: command.threadId,\n        occurredAt: command.createdAt,\n        commandId: command.commandId,\n      });\n      const activityEvent: Omit<OrchestrationEvent, \"sequence\"> = {\n        ...activityEventBase,\n        causationEventId: failedEvent.eventId,\n        type: \"thread.activity-appended\",\n        payload: {\n          threadId: command.threadId,\n          activity: {\n            id: activityEventBase.eventId,\n            tone: \"error\",\n            kind: \"provider.turn.steer.failed\",\n            summary: \"Provider turn steering failed\",\n            payload: {\n              detail: command.detail,\n              messageId: command.messageId,\n            },\n            turnId: command.expectedTurnId,\n            createdAt: command.createdAt,\n          },\n        },\n      };\n      return [failedEvent, activityEvent];\n    }\n\n    case \"thread.turn.interrupt\": {\n      const thread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const resolvedTurnId =\n        command.turnId ??\n        (thread.latestTurn?.state === \"running\" ? thread.latestTurn.turnId : undefined) ??\n        thread.session?.activeTurnId ??\n        undefined;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.turn-interrupt-requested\",\n        payload: {\n          threadId: command.threadId,\n          ...(resolvedTurnId !== undefined ? { turnId: resolvedTurnId } : {}),\n          createdAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.approval.respond\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n          metadata: {\n            requestId: command.requestId,\n          },\n        })),\n        type: \"thread.approval-response-requested\",\n        payload: {\n          threadId: command.threadId,\n          requestId: command.requestId,\n          decision: command.decision,\n          createdAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.user-input.respond\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n          metadata: {\n            requestId: command.requestId,\n          },\n        })),\n        type: \"thread.user-input-response-requested\",\n        payload: {\n          threadId: command.threadId,\n          requestId: command.requestId,\n          answers: command.answers,\n          createdAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.checkpoint.revert\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.checkpoint-revert-requested\",\n        payload: {\n          threadId: command.threadId,\n          turnCount: command.turnCount,\n          createdAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.session.stop\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.session-stop-requested\",\n        payload: {\n          threadId: command.threadId,\n          createdAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.session.set\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n          metadata: {},\n        })),\n        type: \"thread.session-set\",\n        payload: {\n          threadId: command.threadId,\n          session: command.session,\n        },\n      };\n    }\n\n    case \"thread.message.assistant.delta\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.message-sent\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          role: \"assistant\",\n          text: command.delta,\n          turnId: command.turnId ?? null,\n          streaming: true,\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.message.assistant.complete\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.message-sent\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          role: \"assistant\",\n          text: \"\",\n          turnId: command.turnId ?? null,\n          streaming: false,\n          createdAt: command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.message.attachments.add\": {\n      const thread = yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const existingMessage = thread.messages.find((entry) => entry.id === command.messageId);\n      if (existingMessage && existingMessage.role !== command.role) {\n        return yield* new OrchestrationCommandInvariantError({\n          commandType: command.type,\n          detail: `Message '${command.messageId}' already exists with role '${existingMessage.role}'.`,\n        });\n      }\n\n      const latestTurn = thread.latestTurn;\n      const isActiveTurnMessage =\n        command.turnId !== undefined &&\n        latestTurn !== null &&\n        latestTurn.turnId === command.turnId &&\n        latestTurn.state === \"running\";\n      const attachments = mergeMessageAttachments(\n        existingMessage?.attachments,\n        command.attachments,\n      );\n\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.message-sent\",\n        payload: {\n          threadId: command.threadId,\n          messageId: command.messageId,\n          role: command.role,\n          text: \"\",\n          attachments,\n          turnId: existingMessage?.turnId ?? command.turnId ?? null,\n          streaming: existingMessage?.streaming ?? isActiveTurnMessage,\n          createdAt: existingMessage?.createdAt ?? command.createdAt,\n          updatedAt: command.createdAt,\n        },\n      };\n    }\n\n    case \"thread.proposed-plan.upsert\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.proposed-plan-upserted\",\n        payload: {\n          threadId: command.threadId,\n          proposedPlan: command.proposedPlan,\n        },\n      };\n    }\n\n    case \"thread.turn.diff.complete\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.turn-diff-completed\",\n        payload: {\n          threadId: command.threadId,\n          turnId: command.turnId,\n          checkpointTurnCount: command.checkpointTurnCount,\n          checkpointRef: command.checkpointRef,\n          status: command.status,\n          files: command.files,\n          attribution: command.attribution ?? \"unattributed\",\n          assistantMessageId: command.assistantMessageId ?? null,\n          completedAt: command.completedAt,\n        },\n      };\n    }\n\n    case \"thread.revert.complete\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n        })),\n        type: \"thread.reverted\",\n        payload: {\n          threadId: command.threadId,\n          turnCount: command.turnCount,\n        },\n      };\n    }\n\n    case \"thread.activity.append\": {\n      yield* requireThread({\n        readModel,\n        command,\n        threadId: command.threadId,\n      });\n      const requestId =\n        typeof command.activity.payload === \"object\" &&\n        command.activity.payload !== null &&\n        \"requestId\" in command.activity.payload &&\n        typeof (command.activity.payload as { requestId?: unknown }).requestId === \"string\"\n          ? ((command.activity.payload as { requestId: string })\n              .requestId as OrchestrationEvent[\"metadata\"][\"requestId\"])\n          : undefined;\n      return {\n        ...(yield* withEventBase({\n          aggregateKind: \"thread\",\n          aggregateId: command.threadId,\n          occurredAt: command.createdAt,\n          commandId: command.commandId,\n          ...(requestId !== undefined ? { metadata: { requestId } } : {}),\n        })),\n        type: \"thread.activity-appended\",\n        payload: {\n          threadId: command.threadId,\n          activity: command.activity,\n        },\n      };\n    }\n\n    default: {\n      command satisfies never;\n      const fallback = command as never as { type: string };\n      return yield* new OrchestrationCommandInvariantError({\n        commandType: fallback.type,\n        detail: `Unknown command type: ${fallback.type}`,\n      });\n    }\n  }\n});\n","/**\n * OrchestrationProjectionPipeline - Event projection pipeline service interface.\n *\n * Coordinates projection bootstrap/replay and per-event projection updates for\n * orchestration read models.\n *\n * @module OrchestrationProjectionPipeline\n */\nimport type { OrchestrationEvent } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../../persistence/Errors.ts\";\n\n/**\n * OrchestrationProjectionPipelineShape - Service API for projection execution.\n */\nexport interface OrchestrationProjectionPipelineShape {\n  /**\n   * Bootstrap projections by replaying persisted events.\n   *\n   * Resumes each projector from its stored projection-state cursor.\n   */\n  readonly bootstrap: Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Project a single orchestration event into projection repositories.\n   *\n   * Projectors are executed sequentially to preserve deterministic ordering.\n   */\n  readonly projectEvent: (\n    event: OrchestrationEvent,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * OrchestrationProjectionPipeline - Service tag for orchestration projections.\n */\nexport class OrchestrationProjectionPipeline extends Context.Service<\n  OrchestrationProjectionPipeline,\n  OrchestrationProjectionPipelineShape\n>()(\"salchi/orchestration/Services/ProjectionPipeline/OrchestrationProjectionPipeline\") {}\n","import type {\n  OrchestrationEvent,\n  OrchestrationReadModel,\n  ProjectId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport { OrchestrationCommand } from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Clock from \"effect/Clock\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Metric from \"effect/Metric\";\nimport * as Option from \"effect/Option\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Queue from \"effect/Queue\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nimport {\n  metricAttributes,\n  orchestrationCommandAckDuration,\n  orchestrationCommandsTotal,\n  orchestrationCommandDuration,\n} from \"../../observability/Metrics.ts\";\nimport { toPersistenceSqlError } from \"../../persistence/Errors.ts\";\nimport { OrchestrationEventStore } from \"../../persistence/Services/OrchestrationEventStore.ts\";\nimport { OrchestrationCommandReceiptRepository } from \"../../persistence/Services/OrchestrationCommandReceipts.ts\";\nimport {\n  OrchestrationCommandInvariantError,\n  OrchestrationCommandPreviouslyRejectedError,\n  type OrchestrationDispatchError,\n  type OrchestrationProjectorDecodeError,\n} from \"../Errors.ts\";\nimport { decideOrchestrationCommand } from \"../decider.ts\";\nimport { createEmptyReadModel, projectEvent } from \"../projector.ts\";\nimport { OrchestrationProjectionPipeline } from \"../Services/ProjectionPipeline.ts\";\nimport { ProjectionSnapshotQuery } from \"../Services/ProjectionSnapshotQuery.ts\";\nimport {\n  OrchestrationEngineService,\n  type OrchestrationEngineShape,\n} from \"../Services/OrchestrationEngine.ts\";\nconst isOrchestrationCommandPreviouslyRejectedError = Schema.is(\n  OrchestrationCommandPreviouslyRejectedError,\n);\nconst isOrchestrationCommandInvariantError = Schema.is(OrchestrationCommandInvariantError);\n\ninterface CommandEnvelope {\n  command: OrchestrationCommand;\n  result: Deferred.Deferred<{ sequence: number }, OrchestrationDispatchError>;\n  startedAtMs: number;\n}\n\nfunction commandToAggregateRef(command: OrchestrationCommand): {\n  readonly aggregateKind: \"project\" | \"thread\";\n  readonly aggregateId: ProjectId | ThreadId;\n} {\n  switch (command.type) {\n    case \"project.create\":\n    case \"project.meta.update\":\n    case \"project.delete\":\n      return {\n        aggregateKind: \"project\",\n        aggregateId: command.projectId,\n      };\n    default:\n      return {\n        aggregateKind: \"thread\",\n        aggregateId: command.threadId,\n      };\n  }\n}\n\nconst makeOrchestrationEngine = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n  const eventStore = yield* OrchestrationEventStore;\n  const commandReceiptRepository = yield* OrchestrationCommandReceiptRepository;\n  const projectionPipeline = yield* OrchestrationProjectionPipeline;\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const crypto = yield* Crypto.Crypto;\n\n  const nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n  let commandReadModel = createEmptyReadModel(yield* nowIso);\n\n  const commandQueue = yield* Queue.unbounded<CommandEnvelope>();\n  const eventPubSub = yield* PubSub.unbounded<OrchestrationEvent>();\n\n  const projectEventsOntoReadModel = (\n    baseReadModel: OrchestrationReadModel,\n    events: ReadonlyArray<OrchestrationEvent>,\n  ): Effect.Effect<OrchestrationReadModel, OrchestrationProjectorDecodeError, never> =>\n    Effect.gen(function* () {\n      let nextReadModel = baseReadModel;\n      for (const event of events) {\n        nextReadModel = yield* projectEvent(nextReadModel, event);\n      }\n      return nextReadModel;\n    });\n\n  const processEnvelope = (envelope: CommandEnvelope): Effect.Effect<void> => {\n    const dispatchStartSequence = commandReadModel.snapshotSequence;\n    let processingStartedAtMs = 0;\n    const aggregateRef = commandToAggregateRef(envelope.command);\n    const baseMetricAttributes = {\n      commandType: envelope.command.type,\n      aggregateKind: aggregateRef.aggregateKind,\n    } as const;\n    const reconcileReadModelAfterDispatchFailure = Effect.gen(function* () {\n      const persistedEvents = yield* Stream.runCollect(\n        eventStore.readFromSequence(dispatchStartSequence),\n      ).pipe(Effect.map((chunk): OrchestrationEvent[] => Array.from(chunk)));\n      if (persistedEvents.length === 0) {\n        return;\n      }\n\n      commandReadModel = yield* projectEventsOntoReadModel(commandReadModel, persistedEvents);\n\n      for (const persistedEvent of persistedEvents) {\n        yield* PubSub.publish(eventPubSub, persistedEvent);\n      }\n    });\n\n    return Effect.exit(\n      Effect.gen(function* () {\n        processingStartedAtMs = yield* Clock.currentTimeMillis;\n        yield* Effect.annotateCurrentSpan({\n          \"orchestration.command_id\": envelope.command.commandId,\n          \"orchestration.command_type\": envelope.command.type,\n          \"orchestration.aggregate_kind\": aggregateRef.aggregateKind,\n          \"orchestration.aggregate_id\": aggregateRef.aggregateId,\n        });\n\n        const existingReceipt = yield* commandReceiptRepository.getByCommandId({\n          commandId: envelope.command.commandId,\n        });\n        if (Option.isSome(existingReceipt)) {\n          if (existingReceipt.value.status === \"accepted\") {\n            return {\n              sequence: existingReceipt.value.resultSequence,\n            };\n          }\n          return yield* new OrchestrationCommandPreviouslyRejectedError({\n            commandId: envelope.command.commandId,\n            detail: existingReceipt.value.error ?? \"Previously rejected.\",\n          });\n        }\n\n        const eventBase = yield* decideOrchestrationCommand({\n          command: envelope.command,\n          readModel: commandReadModel,\n        }).pipe(\n          Effect.provideService(Crypto.Crypto, crypto),\n          Effect.mapError((cause) =>\n            isOrchestrationCommandInvariantError(cause)\n              ? cause\n              : new OrchestrationCommandInvariantError({\n                  commandType: envelope.command.type,\n                  detail: \"Failed to generate an event identifier.\",\n                  cause,\n                }),\n          ),\n        );\n        const eventBases = Array.isArray(eventBase) ? eventBase : [eventBase];\n        const committedCommand = yield* sql\n          .withTransaction(\n            Effect.gen(function* () {\n              const committedEvents: OrchestrationEvent[] = [];\n              let nextCommandReadModel = commandReadModel;\n\n              for (const nextEvent of eventBases) {\n                const savedEvent = yield* eventStore.append(nextEvent);\n                nextCommandReadModel = yield* projectEvent(nextCommandReadModel, savedEvent);\n                yield* projectionPipeline.projectEvent(savedEvent);\n                committedEvents.push(savedEvent);\n              }\n\n              const lastSavedEvent = committedEvents.at(-1) ?? null;\n              if (lastSavedEvent === null) {\n                return yield* new OrchestrationCommandInvariantError({\n                  commandType: envelope.command.type,\n                  detail: \"Command produced no events.\",\n                });\n              }\n\n              yield* commandReceiptRepository.upsert({\n                commandId: envelope.command.commandId,\n                aggregateKind: lastSavedEvent.aggregateKind,\n                aggregateId: lastSavedEvent.aggregateId,\n                acceptedAt: lastSavedEvent.occurredAt,\n                resultSequence: lastSavedEvent.sequence,\n                status: \"accepted\",\n                error: null,\n              });\n\n              return {\n                committedEvents,\n                lastSequence: lastSavedEvent.sequence,\n                nextCommandReadModel,\n              } as const;\n            }),\n          )\n          .pipe(\n            Effect.catchTag(\"SqlError\", (sqlError) =>\n              Effect.fail(\n                toPersistenceSqlError(\"OrchestrationEngine.processEnvelope:transaction\")(sqlError),\n              ),\n            ),\n          );\n\n        commandReadModel = committedCommand.nextCommandReadModel;\n        for (const [index, event] of committedCommand.committedEvents.entries()) {\n          yield* PubSub.publish(eventPubSub, event);\n          if (index === 0) {\n            yield* Metric.update(\n              Metric.withAttributes(\n                orchestrationCommandAckDuration,\n                metricAttributes({\n                  ...baseMetricAttributes,\n                  ackEventType: event.type,\n                }),\n              ),\n              Duration.millis(Math.max(0, (yield* Clock.currentTimeMillis) - envelope.startedAtMs)),\n            );\n          }\n        }\n        return { sequence: committedCommand.lastSequence };\n      }).pipe(Effect.withSpan(`orchestration.command.${envelope.command.type}`)),\n    ).pipe(\n      Effect.flatMap((exit) =>\n        Effect.gen(function* () {\n          const outcome = Exit.isSuccess(exit)\n            ? \"success\"\n            : Cause.hasInterruptsOnly(exit.cause)\n              ? \"interrupt\"\n              : \"failure\";\n          yield* Metric.update(\n            Metric.withAttributes(\n              orchestrationCommandDuration,\n              metricAttributes(baseMetricAttributes),\n            ),\n            Duration.millis(Math.max(0, (yield* Clock.currentTimeMillis) - processingStartedAtMs)),\n          );\n          yield* Metric.update(\n            Metric.withAttributes(\n              orchestrationCommandsTotal,\n              metricAttributes({\n                ...baseMetricAttributes,\n                outcome,\n              }),\n            ),\n            1,\n          );\n\n          if (Exit.isSuccess(exit)) {\n            yield* Deferred.succeed(envelope.result, exit.value);\n            return;\n          }\n\n          const error = Cause.squash(exit.cause) as OrchestrationDispatchError;\n          if (!isOrchestrationCommandPreviouslyRejectedError(error)) {\n            yield* reconcileReadModelAfterDispatchFailure.pipe(\n              Effect.catch(() =>\n                Effect.logWarning(\n                  \"failed to reconcile orchestration read model after dispatch failure\",\n                ).pipe(\n                  Effect.annotateLogs({\n                    commandId: envelope.command.commandId,\n                    snapshotSequence: commandReadModel.snapshotSequence,\n                  }),\n                ),\n              ),\n            );\n\n            if (isOrchestrationCommandInvariantError(error)) {\n              yield* commandReceiptRepository\n                .upsert({\n                  commandId: envelope.command.commandId,\n                  aggregateKind: aggregateRef.aggregateKind,\n                  aggregateId: aggregateRef.aggregateId,\n                  acceptedAt: yield* nowIso,\n                  resultSequence: commandReadModel.snapshotSequence,\n                  status: \"rejected\",\n                  error: error.message,\n                })\n                .pipe(Effect.catch(() => Effect.void));\n            }\n          }\n\n          yield* Deferred.fail(envelope.result, error);\n        }),\n      ),\n    );\n  };\n\n  yield* projectionPipeline.bootstrap;\n  commandReadModel = yield* projectionSnapshotQuery.getCommandReadModel();\n\n  const worker = Effect.forever(Queue.take(commandQueue).pipe(Effect.flatMap(processEnvelope)));\n  yield* Effect.forkScoped(worker);\n  yield* Effect.logDebug(\"orchestration engine started\").pipe(\n    Effect.annotateLogs({ sequence: commandReadModel.snapshotSequence }),\n  );\n\n  const readEvents: OrchestrationEngineShape[\"readEvents\"] = (fromSequenceExclusive) =>\n    eventStore.readFromSequence(fromSequenceExclusive);\n\n  const dispatch: OrchestrationEngineShape[\"dispatch\"] = (command) =>\n    Effect.gen(function* () {\n      const result = yield* Deferred.make<{ sequence: number }, OrchestrationDispatchError>();\n      yield* Queue.offer(commandQueue, {\n        command,\n        result,\n        startedAtMs: yield* Clock.currentTimeMillis,\n      });\n      return yield* Deferred.await(result);\n    });\n\n  return {\n    readEvents,\n    dispatch,\n    // Each access creates a fresh PubSub subscription so that multiple\n    // consumers (wsServer, ProviderRuntimeIngestion, CheckpointReactor, etc.)\n    // each independently receive all domain events.\n    get streamDomainEvents(): OrchestrationEngineShape[\"streamDomainEvents\"] {\n      return Stream.fromPubSub(eventPubSub);\n    },\n  } satisfies OrchestrationEngineShape;\n});\n\nexport const OrchestrationEngineLive = Layer.effect(\n  OrchestrationEngineService,\n  makeOrchestrationEngine,\n);\n","/**\n * ProjectionPendingApprovalRepository - Repository interface for pending approvals.\n *\n * Owns persistence operations for projected approval requests awaiting user\n * decisions.\n *\n * @module ProjectionPendingApprovalRepository\n */\nimport {\n  ApprovalRequestId,\n  IsoDateTime,\n  ProjectionPendingApprovalDecision,\n  ProjectionPendingApprovalStatus,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionPendingApproval = Schema.Struct({\n  requestId: ApprovalRequestId,\n  threadId: ThreadId,\n  turnId: Schema.NullOr(TurnId),\n  status: ProjectionPendingApprovalStatus,\n  decision: ProjectionPendingApprovalDecision,\n  createdAt: IsoDateTime,\n  resolvedAt: Schema.NullOr(IsoDateTime),\n});\nexport type ProjectionPendingApproval = typeof ProjectionPendingApproval.Type;\n\nexport const ListProjectionPendingApprovalsInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListProjectionPendingApprovalsInput = typeof ListProjectionPendingApprovalsInput.Type;\n\nexport const GetProjectionPendingApprovalInput = Schema.Struct({\n  requestId: ApprovalRequestId,\n});\nexport type GetProjectionPendingApprovalInput = typeof GetProjectionPendingApprovalInput.Type;\n\nexport const DeleteProjectionPendingApprovalInput = Schema.Struct({\n  requestId: ApprovalRequestId,\n});\nexport type DeleteProjectionPendingApprovalInput = typeof DeleteProjectionPendingApprovalInput.Type;\n\n/**\n * ProjectionPendingApprovalRepositoryShape - Service API for pending approvals.\n */\nexport interface ProjectionPendingApprovalRepositoryShape {\n  /**\n   * Insert or replace a projected pending approval row.\n   *\n   * Upserts by `requestId`.\n   */\n  readonly upsert: (\n    row: ProjectionPendingApproval,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * List pending approvals for a thread.\n   *\n   * Returned in ascending creation order.\n   */\n  readonly listByThreadId: (\n    input: ListProjectionPendingApprovalsInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionPendingApproval>, ProjectionRepositoryError>;\n\n  /**\n   * Read a pending approval row by request id.\n   */\n  readonly getByRequestId: (\n    input: GetProjectionPendingApprovalInput,\n  ) => Effect.Effect<Option.Option<ProjectionPendingApproval>, ProjectionRepositoryError>;\n\n  /**\n   * Delete a pending approval row by request id.\n   */\n  readonly deleteByRequestId: (\n    input: DeleteProjectionPendingApprovalInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionPendingApprovalRepository - Service tag for pending approval persistence.\n */\nexport class ProjectionPendingApprovalRepository extends Context.Service<\n  ProjectionPendingApprovalRepository,\n  ProjectionPendingApprovalRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionPendingApprovals/ProjectionPendingApprovalRepository\") {}\n","/**\n * ProjectionProjectRepository - Projection repository interface for projects.\n *\n * Owns persistence operations for project rows in the orchestration projection\n * read model.\n *\n * @module ProjectionProjectRepository\n */\nimport { IsoDateTime, ModelSelection, ProjectId, ProjectScript } from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionProject = Schema.Struct({\n  projectId: ProjectId,\n  title: Schema.String,\n  workspaceRoot: Schema.String,\n  defaultModelSelection: Schema.NullOr(ModelSelection),\n  scripts: Schema.Array(ProjectScript),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n  deletedAt: Schema.NullOr(IsoDateTime),\n});\nexport type ProjectionProject = typeof ProjectionProject.Type;\n\nexport const GetProjectionProjectInput = Schema.Struct({\n  projectId: ProjectId,\n});\nexport type GetProjectionProjectInput = typeof GetProjectionProjectInput.Type;\n\nexport const DeleteProjectionProjectInput = Schema.Struct({\n  projectId: ProjectId,\n});\nexport type DeleteProjectionProjectInput = typeof DeleteProjectionProjectInput.Type;\n\n/**\n * ProjectionProjectRepositoryShape - Service API for projected project records.\n */\nexport interface ProjectionProjectRepositoryShape {\n  /**\n   * Insert or replace a projected project row.\n   *\n   * Upserts by `projectId` and persists scripts through JSON encoding.\n   */\n  readonly upsert: (row: ProjectionProject) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Read a projected project row by id.\n   */\n  readonly getById: (\n    input: GetProjectionProjectInput,\n  ) => Effect.Effect<Option.Option<ProjectionProject>, ProjectionRepositoryError>;\n\n  /**\n   * List all projected project rows.\n   *\n   * Returned in deterministic creation order.\n   */\n  readonly listAll: () => Effect.Effect<\n    ReadonlyArray<ProjectionProject>,\n    ProjectionRepositoryError\n  >;\n\n  /**\n   * Soft-delete a projected project row by id.\n   */\n  readonly deleteById: (\n    input: DeleteProjectionProjectInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionProjectRepository - Service tag for project projection persistence.\n */\nexport class ProjectionProjectRepository extends Context.Service<\n  ProjectionProjectRepository,\n  ProjectionProjectRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionProjects/ProjectionProjectRepository\") {}\n","/**\n * ProjectionStateRepository - Projection repository interface for projector cursors.\n *\n * Owns persistence operations for projection cursor state used to resume\n * incremental event projection.\n *\n * @module ProjectionStateRepository\n */\nimport { IsoDateTime, NonNegativeInt } from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionState = Schema.Struct({\n  projector: Schema.String,\n  lastAppliedSequence: NonNegativeInt,\n  updatedAt: IsoDateTime,\n});\nexport type ProjectionState = typeof ProjectionState.Type;\n\nexport const GetProjectionStateInput = Schema.Struct({\n  projector: Schema.String,\n});\nexport type GetProjectionStateInput = typeof GetProjectionStateInput.Type;\n\n/**\n * ProjectionStateRepositoryShape - Service API for projector state records.\n */\nexport interface ProjectionStateRepositoryShape {\n  /**\n   * Insert or replace a projection cursor row.\n   *\n   * Upserts by projector name.\n   */\n  readonly upsert: (row: ProjectionState) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Read projection cursor state for a projector key.\n   */\n  readonly getByProjector: (\n    input: GetProjectionStateInput,\n  ) => Effect.Effect<Option.Option<ProjectionState>, ProjectionRepositoryError>;\n\n  /**\n   * List all projector cursor rows.\n   */\n  readonly listAll: () => Effect.Effect<ReadonlyArray<ProjectionState>, ProjectionRepositoryError>;\n\n  /**\n   * Read the minimum applied sequence across all projectors.\n   *\n   * Returns `null` when no projector state rows exist.\n   */\n  readonly minLastAppliedSequence: () => Effect.Effect<number | null, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionStateRepository - Service tag for projection cursor persistence.\n */\nexport class ProjectionStateRepository extends Context.Service<\n  ProjectionStateRepository,\n  ProjectionStateRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionState/ProjectionStateRepository\") {}\n","/**\n * ProjectionThreadActivityRepository - Projection repository interface for thread activity.\n *\n * Owns persistence operations for activity timeline entries projected from\n * orchestration events.\n *\n * @module ProjectionThreadActivityRepository\n */\nimport {\n  EventId,\n  IsoDateTime,\n  NonNegativeInt,\n  OrchestrationThreadActivityTone,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionThreadActivity = Schema.Struct({\n  activityId: EventId,\n  threadId: ThreadId,\n  turnId: Schema.NullOr(TurnId),\n  tone: OrchestrationThreadActivityTone,\n  kind: Schema.String,\n  summary: Schema.String,\n  payload: Schema.Unknown,\n  sequence: Schema.optional(NonNegativeInt),\n  createdAt: IsoDateTime,\n});\nexport type ProjectionThreadActivity = typeof ProjectionThreadActivity.Type;\n\nexport const ListProjectionThreadActivitiesInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListProjectionThreadActivitiesInput = typeof ListProjectionThreadActivitiesInput.Type;\n\nexport const DeleteProjectionThreadActivitiesInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionThreadActivitiesInput =\n  typeof DeleteProjectionThreadActivitiesInput.Type;\n\n/**\n * ProjectionThreadActivityRepositoryShape - Service API for projected thread activity.\n */\nexport interface ProjectionThreadActivityRepositoryShape {\n  /**\n   * Insert or replace a projected thread activity row.\n   *\n   * Upserts by `activityId` and JSON-encodes payload.\n   */\n  readonly upsert: (\n    row: ProjectionThreadActivity,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * List projected thread activity rows for a thread.\n   *\n   * Returned in ascending runtime sequence order (or creation order when\n   * sequence is unavailable).\n   */\n  readonly listByThreadId: (\n    input: ListProjectionThreadActivitiesInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionThreadActivity>, ProjectionRepositoryError>;\n\n  /**\n   * Delete projected thread activity rows by thread.\n   */\n  readonly deleteByThreadId: (\n    input: DeleteProjectionThreadActivitiesInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionThreadActivityRepository - Service tag for thread activity persistence.\n */\nexport class ProjectionThreadActivityRepository extends Context.Service<\n  ProjectionThreadActivityRepository,\n  ProjectionThreadActivityRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionThreadActivities/ProjectionThreadActivityRepository\") {}\n","/**\n * ProjectionThreadMessageRepository - Projection repository interface for messages.\n *\n * Owns persistence operations for projected thread messages rendered in the\n * orchestration read model.\n *\n * @module ProjectionThreadMessageRepository\n */\nimport {\n  ChatAttachment,\n  MessageId,\n  OrchestrationMessageRole,\n  ThreadId,\n  TurnId,\n  IsoDateTime,\n} from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Option from \"effect/Option\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionThreadMessage = Schema.Struct({\n  messageId: MessageId,\n  threadId: ThreadId,\n  turnId: Schema.NullOr(TurnId),\n  role: OrchestrationMessageRole,\n  text: Schema.String,\n  attachments: Schema.optional(Schema.Array(ChatAttachment)),\n  isStreaming: Schema.Boolean,\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type ProjectionThreadMessage = typeof ProjectionThreadMessage.Type;\n\nexport const ListProjectionThreadMessagesInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListProjectionThreadMessagesInput = typeof ListProjectionThreadMessagesInput.Type;\n\nexport const GetProjectionThreadMessageInput = Schema.Struct({\n  messageId: MessageId,\n});\nexport type GetProjectionThreadMessageInput = typeof GetProjectionThreadMessageInput.Type;\n\nexport const DeleteProjectionThreadMessagesInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionThreadMessagesInput = typeof DeleteProjectionThreadMessagesInput.Type;\n\n/**\n * ProjectionThreadMessageRepositoryShape - Service API for projected thread messages.\n */\nexport interface ProjectionThreadMessageRepositoryShape {\n  /**\n   * Insert or replace a projected thread message row.\n   *\n   * Upserts by `messageId`.\n   */\n  readonly upsert: (\n    message: ProjectionThreadMessage,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Read a projected thread message by id.\n   */\n  readonly getByMessageId: (\n    input: GetProjectionThreadMessageInput,\n  ) => Effect.Effect<Option.Option<ProjectionThreadMessage>, ProjectionRepositoryError>;\n\n  /**\n   * List projected thread messages for a thread.\n   *\n   * Returned in ascending creation order.\n   */\n  readonly listByThreadId: (\n    input: ListProjectionThreadMessagesInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionThreadMessage>, ProjectionRepositoryError>;\n\n  /**\n   * Delete projected thread messages by thread.\n   */\n  readonly deleteByThreadId: (\n    input: DeleteProjectionThreadMessagesInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionThreadMessageRepository - Service tag for message projection persistence.\n */\nexport class ProjectionThreadMessageRepository extends Context.Service<\n  ProjectionThreadMessageRepository,\n  ProjectionThreadMessageRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionThreadMessages/ProjectionThreadMessageRepository\") {}\n","import {\n  IsoDateTime,\n  OrchestrationProposedPlanId,\n  ThreadId,\n  TrimmedNonEmptyString,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionThreadProposedPlan = Schema.Struct({\n  planId: OrchestrationProposedPlanId,\n  threadId: ThreadId,\n  turnId: Schema.NullOr(TurnId),\n  planMarkdown: TrimmedNonEmptyString,\n  implementedAt: Schema.NullOr(IsoDateTime),\n  implementationThreadId: Schema.NullOr(ThreadId),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type ProjectionThreadProposedPlan = typeof ProjectionThreadProposedPlan.Type;\n\nexport const ListProjectionThreadProposedPlansInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListProjectionThreadProposedPlansInput =\n  typeof ListProjectionThreadProposedPlansInput.Type;\n\nexport const DeleteProjectionThreadProposedPlansInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionThreadProposedPlansInput =\n  typeof DeleteProjectionThreadProposedPlansInput.Type;\n\nexport interface ProjectionThreadProposedPlanRepositoryShape {\n  readonly upsert: (\n    proposedPlan: ProjectionThreadProposedPlan,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n  readonly listByThreadId: (\n    input: ListProjectionThreadProposedPlansInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionThreadProposedPlan>, ProjectionRepositoryError>;\n  readonly deleteByThreadId: (\n    input: DeleteProjectionThreadProposedPlansInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\nexport class ProjectionThreadProposedPlanRepository extends Context.Service<\n  ProjectionThreadProposedPlanRepository,\n  ProjectionThreadProposedPlanRepositoryShape\n>()(\n  \"salchi/persistence/Services/ProjectionThreadProposedPlans/ProjectionThreadProposedPlanRepository\",\n) {}\n","/**\n * ProjectionThreadQueuedTurnRepository - Projection repository interface for queued turns.\n *\n * Owns persistence operations for user messages that have been queued while\n * a provider turn is still running and have not yet been promoted to a real\n * turn start.\n *\n * @module ProjectionThreadQueuedTurnRepository\n */\nimport {\n  IsoDateTime,\n  MessageId,\n  OrchestrationProposedPlanId,\n  OrchestrationQueuedTurn,\n  ProviderInteractionMode,\n  RuntimeMode,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionThreadQueuedTurn = OrchestrationQueuedTurn;\nexport type ProjectionThreadQueuedTurn = typeof ProjectionThreadQueuedTurn.Type;\n\nexport const UpsertProjectionThreadQueuedTurnInput = ProjectionThreadQueuedTurn;\nexport type UpsertProjectionThreadQueuedTurnInput =\n  typeof UpsertProjectionThreadQueuedTurnInput.Type;\n\nexport const GetProjectionThreadQueuedTurnInput = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n});\nexport type GetProjectionThreadQueuedTurnInput = typeof GetProjectionThreadQueuedTurnInput.Type;\n\nexport const GetProjectionThreadQueuedTurnByMessageIdInput = Schema.Struct({\n  messageId: MessageId,\n});\nexport type GetProjectionThreadQueuedTurnByMessageIdInput =\n  typeof GetProjectionThreadQueuedTurnByMessageIdInput.Type;\n\nexport const ListProjectionThreadQueuedTurnsInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListProjectionThreadQueuedTurnsInput = typeof ListProjectionThreadQueuedTurnsInput.Type;\n\nexport const DeleteProjectionThreadQueuedTurnsInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionThreadQueuedTurnsInput =\n  typeof DeleteProjectionThreadQueuedTurnsInput.Type;\n\nexport const ProjectionThreadQueuedTurnDbRow = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  role: Schema.Literal(\"user\"),\n  text: Schema.String,\n  attachments: Schema.String,\n  modelSelection: Schema.NullOr(Schema.String),\n  titleSeed: Schema.NullOr(Schema.String),\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode,\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n  steeringExpectedTurnId: Schema.NullOr(TurnId),\n  steeringRequestedAt: Schema.NullOr(IsoDateTime),\n  recoveryConfirmationRequired: Schema.Number,\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n});\nexport type ProjectionThreadQueuedTurnDbRow = typeof ProjectionThreadQueuedTurnDbRow.Type;\n\nexport interface ProjectionThreadQueuedTurnRepositoryShape {\n  readonly upsert: (\n    row: ProjectionThreadQueuedTurn,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  readonly getByMessageId: (\n    input: GetProjectionThreadQueuedTurnByMessageIdInput,\n  ) => Effect.Effect<Option.Option<ProjectionThreadQueuedTurn>, ProjectionRepositoryError>;\n\n  readonly getByThreadAndMessageId: (\n    input: GetProjectionThreadQueuedTurnInput,\n  ) => Effect.Effect<Option.Option<ProjectionThreadQueuedTurn>, ProjectionRepositoryError>;\n\n  readonly getOldestByThreadId: (\n    input: ListProjectionThreadQueuedTurnsInput,\n  ) => Effect.Effect<Option.Option<ProjectionThreadQueuedTurn>, ProjectionRepositoryError>;\n\n  readonly listByThreadId: (\n    input: ListProjectionThreadQueuedTurnsInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionThreadQueuedTurn>, ProjectionRepositoryError>;\n\n  readonly listThreadIdsWithQueuedTurns: () => Effect.Effect<\n    ReadonlyArray<ThreadId>,\n    ProjectionRepositoryError\n  >;\n\n  readonly deleteByMessageId: (\n    input: GetProjectionThreadQueuedTurnByMessageIdInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  readonly deleteByThreadId: (\n    input: DeleteProjectionThreadQueuedTurnsInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\nexport class ProjectionThreadQueuedTurnRepository extends Context.Service<\n  ProjectionThreadQueuedTurnRepository,\n  ProjectionThreadQueuedTurnRepositoryShape\n>()(\n  \"salchi/persistence/Services/ProjectionThreadQueuedTurns/ProjectionThreadQueuedTurnRepository\",\n) {}\n","/**\n * ProjectionThreadSessionRepository - Repository interface for thread sessions.\n *\n * Owns persistence operations for projected provider-session linkage and\n * runtime status for each thread.\n *\n * @module ProjectionThreadSessionRepository\n */\nimport {\n  RuntimeMode,\n  IsoDateTime,\n  OrchestrationSessionStatus,\n  ProviderInstanceId,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionThreadSession = Schema.Struct({\n  threadId: ThreadId,\n  status: OrchestrationSessionStatus,\n  providerName: Schema.NullOr(Schema.String),\n  providerInstanceId: Schema.NullOr(ProviderInstanceId),\n  runtimeMode: RuntimeMode,\n  activeTurnId: Schema.NullOr(TurnId),\n  lastError: Schema.NullOr(Schema.String),\n  updatedAt: IsoDateTime,\n});\nexport type ProjectionThreadSession = typeof ProjectionThreadSession.Type;\n\nexport const GetProjectionThreadSessionInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type GetProjectionThreadSessionInput = typeof GetProjectionThreadSessionInput.Type;\n\nexport const DeleteProjectionThreadSessionInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionThreadSessionInput = typeof DeleteProjectionThreadSessionInput.Type;\n\n/**\n * ProjectionThreadSessionRepositoryShape - Service API for projected thread sessions.\n */\nexport interface ProjectionThreadSessionRepositoryShape {\n  /**\n   * Insert or replace a projected thread-session row.\n   *\n   * Upserts by `threadId`.\n   */\n  readonly upsert: (row: ProjectionThreadSession) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Read projected thread-session state by thread id.\n   */\n  readonly getByThreadId: (\n    input: GetProjectionThreadSessionInput,\n  ) => Effect.Effect<Option.Option<ProjectionThreadSession>, ProjectionRepositoryError>;\n\n  /**\n   * Delete projected thread-session state by thread id.\n   */\n  readonly deleteByThreadId: (\n    input: DeleteProjectionThreadSessionInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionThreadSessionRepository - Service tag for thread-session persistence.\n */\nexport class ProjectionThreadSessionRepository extends Context.Service<\n  ProjectionThreadSessionRepository,\n  ProjectionThreadSessionRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionThreadSessions/ProjectionThreadSessionRepository\") {}\n","/**\n * ProjectionTurnRepository - Projection repository interface for unified turn state.\n *\n * Owns persistence operations for pending starts, running/completed turn lifecycle,\n * and checkpoint metadata in a single projection table.\n *\n * @module ProjectionTurnRepository\n */\nimport {\n  CheckpointRef,\n  IsoDateTime,\n  MessageId,\n  NonNegativeInt,\n  OrchestrationProposedPlanId,\n  OrchestrationCheckpointFile,\n  OrchestrationCheckpointAttribution,\n  OrchestrationCheckpointStatus,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionTurnState = Schema.Literals([\n  \"pending\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"error\",\n]);\nexport type ProjectionTurnState = typeof ProjectionTurnState.Type;\n\nexport const ProjectionTurn = Schema.Struct({\n  threadId: ThreadId,\n  turnId: Schema.NullOr(TurnId),\n  pendingMessageId: Schema.NullOr(MessageId),\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n  assistantMessageId: Schema.NullOr(MessageId),\n  state: ProjectionTurnState,\n  requestedAt: IsoDateTime,\n  startedAt: Schema.NullOr(IsoDateTime),\n  completedAt: Schema.NullOr(IsoDateTime),\n  checkpointTurnCount: Schema.NullOr(NonNegativeInt),\n  checkpointRef: Schema.NullOr(CheckpointRef),\n  checkpointStatus: Schema.NullOr(OrchestrationCheckpointStatus),\n  checkpointAttribution: Schema.NullOr(OrchestrationCheckpointAttribution),\n  checkpointFiles: Schema.Array(OrchestrationCheckpointFile),\n});\nexport type ProjectionTurn = typeof ProjectionTurn.Type;\n\nexport const ProjectionTurnById = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  pendingMessageId: Schema.NullOr(MessageId),\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n  assistantMessageId: Schema.NullOr(MessageId),\n  state: ProjectionTurnState,\n  requestedAt: IsoDateTime,\n  startedAt: Schema.NullOr(IsoDateTime),\n  completedAt: Schema.NullOr(IsoDateTime),\n  checkpointTurnCount: Schema.NullOr(NonNegativeInt),\n  checkpointRef: Schema.NullOr(CheckpointRef),\n  checkpointStatus: Schema.NullOr(OrchestrationCheckpointStatus),\n  checkpointAttribution: Schema.NullOr(OrchestrationCheckpointAttribution),\n  checkpointFiles: Schema.Array(OrchestrationCheckpointFile),\n});\nexport type ProjectionTurnById = typeof ProjectionTurnById.Type;\n\nexport const ProjectionPendingTurnStart = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n  requestedAt: IsoDateTime,\n});\nexport type ProjectionPendingTurnStart = typeof ProjectionPendingTurnStart.Type;\n\nexport const ListProjectionTurnsByThreadInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListProjectionTurnsByThreadInput = typeof ListProjectionTurnsByThreadInput.Type;\n\nexport const GetProjectionTurnByTurnIdInput = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n});\nexport type GetProjectionTurnByTurnIdInput = typeof GetProjectionTurnByTurnIdInput.Type;\n\nexport const GetProjectionPendingTurnStartInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type GetProjectionPendingTurnStartInput = typeof GetProjectionPendingTurnStartInput.Type;\n\nexport const DeleteProjectionPendingTurnStartInput = Schema.Struct({\n  threadId: ThreadId,\n  messageId: MessageId,\n});\nexport type DeleteProjectionPendingTurnStartInput =\n  typeof DeleteProjectionPendingTurnStartInput.Type;\n\nexport const DeleteProjectionTurnsByThreadInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionTurnsByThreadInput = typeof DeleteProjectionTurnsByThreadInput.Type;\n\nexport const ClearCheckpointTurnConflictInput = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n});\nexport type ClearCheckpointTurnConflictInput = typeof ClearCheckpointTurnConflictInput.Type;\n\nexport interface ProjectionTurnRepositoryShape {\n  /**\n   * Inserts or updates the canonical row for a concrete `{threadId, turnId}` turn lifecycle state.\n   */\n  readonly upsertByTurnId: (\n    row: ProjectionTurnById,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Appends a pending-start placeholder row for FIFO turn start correlation.\n   */\n  readonly appendPendingTurnStart: (\n    row: ProjectionPendingTurnStart,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Returns the oldest pending-start placeholder for a thread.\n   */\n  readonly getPendingTurnStartByThreadId: (\n    input: GetProjectionPendingTurnStartInput,\n  ) => Effect.Effect<Option.Option<ProjectionPendingTurnStart>, ProjectionRepositoryError>;\n\n  /**\n   * Lists every pending-start placeholder across threads for startup recovery.\n   */\n  readonly listPendingTurnStarts: () => Effect.Effect<\n    ReadonlyArray<ProjectionPendingTurnStart>,\n    ProjectionRepositoryError\n  >;\n\n  /**\n   * Deletes one pending-start placeholder row after it has been associated with a concrete provider turn.\n   */\n  readonly deletePendingTurnStart: (\n    input: DeleteProjectionPendingTurnStartInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Deletes only pending-start placeholder rows (`turnId = null`) for a thread and leaves concrete turn rows untouched.\n   */\n  readonly deletePendingTurnStartByThreadId: (\n    input: GetProjectionPendingTurnStartInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Lists all projection rows for a thread, including pending placeholders, with checkpoint rows ordered before non-checkpoint rows.\n   */\n  readonly listByThreadId: (\n    input: ListProjectionTurnsByThreadInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionTurn>, ProjectionRepositoryError>;\n\n  /**\n   * Looks up a concrete turn row by `{threadId, turnId}` and never returns pending placeholder rows.\n   */\n  readonly getByTurnId: (\n    input: GetProjectionTurnByTurnIdInput,\n  ) => Effect.Effect<Option.Option<ProjectionTurnById>, ProjectionRepositoryError>;\n\n  /**\n   * Clears checkpoint fields on conflicting rows that reuse the same checkpoint turn count in a thread, excluding the provided turn.\n   */\n  readonly clearCheckpointTurnConflict: (\n    input: ClearCheckpointTurnConflictInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Hard-deletes all projection rows for a thread, including pending-start placeholders and checkpoint metadata rows.\n   */\n  readonly deleteByThreadId: (\n    input: DeleteProjectionTurnsByThreadInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\nexport class ProjectionTurnRepository extends Context.Service<\n  ProjectionTurnRepository,\n  ProjectionTurnRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionTurns/ProjectionTurnRepository\") {}\n","/**\n * ProjectionThreadRepository - Projection repository interface for threads.\n *\n * Owns persistence operations for projected thread records in the\n * orchestration read model.\n *\n * @module ProjectionThreadRepository\n */\nimport {\n  IsoDateTime,\n  ModelSelection,\n  NonNegativeInt,\n  ProjectId,\n  ProviderInteractionMode,\n  RuntimeMode,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nconst DefaultedProjectionParentThreadId = Schema.NullOr(ThreadId).pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(null)),\n  Schema.withConstructorDefault(Effect.succeed(null)),\n);\nconst DefaultedProjectionCreatedByThreadId = Schema.NullOr(ThreadId).pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(null)),\n  Schema.withConstructorDefault(Effect.succeed(null)),\n);\nconst DefaultedProjectionSubagentText = Schema.NullOr(Schema.String).pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(null)),\n  Schema.withConstructorDefault(Effect.succeed(null)),\n);\nconst DefaultedProjectionHiddenFromThreadList = NonNegativeInt.pipe(\n  Schema.optionalKey,\n  Schema.withDecodingDefaultKey(Effect.succeed(0)),\n  Schema.withConstructorDefault(Effect.succeed(0)),\n);\n\nexport const ProjectionThread = Schema.Struct({\n  threadId: ThreadId,\n  projectId: ProjectId,\n  title: Schema.String,\n  modelSelection: ModelSelection,\n  runtimeMode: RuntimeMode,\n  interactionMode: ProviderInteractionMode,\n  parentThreadId: DefaultedProjectionParentThreadId,\n  createdByThreadId: DefaultedProjectionCreatedByThreadId,\n  subagentKind: DefaultedProjectionSubagentText,\n  subagentNickname: DefaultedProjectionSubagentText,\n  subagentRole: DefaultedProjectionSubagentText,\n  hiddenFromThreadList: DefaultedProjectionHiddenFromThreadList,\n  branch: Schema.NullOr(Schema.String),\n  worktreePath: Schema.NullOr(Schema.String),\n  latestTurnId: Schema.NullOr(TurnId),\n  createdAt: IsoDateTime,\n  updatedAt: IsoDateTime,\n  archivedAt: Schema.NullOr(IsoDateTime),\n  latestUserMessageAt: Schema.NullOr(IsoDateTime),\n  pendingApprovalCount: NonNegativeInt,\n  pendingUserInputCount: NonNegativeInt,\n  hasActionableProposedPlan: NonNegativeInt,\n  deletedAt: Schema.NullOr(IsoDateTime),\n});\nexport type ProjectionThread = typeof ProjectionThread.Type;\n\nexport const GetProjectionThreadInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type GetProjectionThreadInput = typeof GetProjectionThreadInput.Type;\n\nexport const DeleteProjectionThreadInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteProjectionThreadInput = typeof DeleteProjectionThreadInput.Type;\n\nexport const ListProjectionThreadsByProjectInput = Schema.Struct({\n  projectId: ProjectId,\n});\nexport type ListProjectionThreadsByProjectInput = typeof ListProjectionThreadsByProjectInput.Type;\n\n/**\n * ProjectionThreadRepositoryShape - Service API for projected thread records.\n */\nexport interface ProjectionThreadRepositoryShape {\n  /**\n   * Insert or replace a projected thread row.\n   *\n   * Upserts by `threadId`.\n   */\n  readonly upsert: (thread: ProjectionThread) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * Read a projected thread row by id.\n   */\n  readonly getById: (\n    input: GetProjectionThreadInput,\n  ) => Effect.Effect<Option.Option<ProjectionThread>, ProjectionRepositoryError>;\n\n  /**\n   * List projected threads for a project.\n   *\n   * Returned in deterministic creation order.\n   */\n  readonly listByProjectId: (\n    input: ListProjectionThreadsByProjectInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionThread>, ProjectionRepositoryError>;\n\n  /**\n   * Soft-delete a projected thread row by id.\n   */\n  readonly deleteById: (\n    input: DeleteProjectionThreadInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionThreadRepository - Service tag for thread projection persistence.\n */\nexport class ProjectionThreadRepository extends Context.Service<\n  ProjectionThreadRepository,\n  ProjectionThreadRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionThreads/ProjectionThreadRepository\") {}\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  GetProjectionPendingApprovalInput,\n  DeleteProjectionPendingApprovalInput,\n  ListProjectionPendingApprovalsInput,\n  ProjectionPendingApproval,\n  ProjectionPendingApprovalRepository,\n  type ProjectionPendingApprovalRepositoryShape,\n} from \"../Services/ProjectionPendingApprovals.ts\";\n\nconst makeProjectionPendingApprovalRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionPendingApprovalRow = SqlSchema.void({\n    Request: ProjectionPendingApproval,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_pending_approvals (\n          request_id,\n          thread_id,\n          turn_id,\n          status,\n          decision,\n          created_at,\n          resolved_at\n        )\n        VALUES (\n          ${row.requestId},\n          ${row.threadId},\n          ${row.turnId},\n          ${row.status},\n          ${row.decision},\n          ${row.createdAt},\n          ${row.resolvedAt}\n        )\n        ON CONFLICT (request_id)\n        DO UPDATE SET\n          thread_id = excluded.thread_id,\n          turn_id = excluded.turn_id,\n          status = excluded.status,\n          decision = excluded.decision,\n          created_at = excluded.created_at,\n          resolved_at = excluded.resolved_at\n      `,\n  });\n\n  const listProjectionPendingApprovalRows = SqlSchema.findAll({\n    Request: ListProjectionPendingApprovalsInput,\n    Result: ProjectionPendingApproval,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          request_id AS \"requestId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          status,\n          decision,\n          created_at AS \"createdAt\",\n          resolved_at AS \"resolvedAt\"\n        FROM projection_pending_approvals\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, request_id ASC\n      `,\n  });\n\n  const getProjectionPendingApprovalRow = SqlSchema.findOneOption({\n    Request: GetProjectionPendingApprovalInput,\n    Result: ProjectionPendingApproval,\n    execute: ({ requestId }) =>\n      sql`\n        SELECT\n          request_id AS \"requestId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          status,\n          decision,\n          created_at AS \"createdAt\",\n          resolved_at AS \"resolvedAt\"\n        FROM projection_pending_approvals\n        WHERE request_id = ${requestId}\n      `,\n  });\n\n  const deleteProjectionPendingApprovalRow = SqlSchema.void({\n    Request: DeleteProjectionPendingApprovalInput,\n    execute: ({ requestId }) =>\n      sql`\n        DELETE FROM projection_pending_approvals\n        WHERE request_id = ${requestId}\n      `,\n  });\n\n  const upsert: ProjectionPendingApprovalRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionPendingApprovalRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionPendingApprovalRepository.upsert:query\")),\n    );\n\n  const listByThreadId: ProjectionPendingApprovalRepositoryShape[\"listByThreadId\"] = (input) =>\n    listProjectionPendingApprovalRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionPendingApprovalRepository.listByThreadId:query\"),\n      ),\n    );\n\n  const getByRequestId: ProjectionPendingApprovalRepositoryShape[\"getByRequestId\"] = (input) =>\n    getProjectionPendingApprovalRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionPendingApprovalRepository.getByRequestId:query\"),\n      ),\n    );\n\n  const deleteByRequestId: ProjectionPendingApprovalRepositoryShape[\"deleteByRequestId\"] = (\n    input,\n  ) =>\n    deleteProjectionPendingApprovalRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionPendingApprovalRepository.deleteByRequestId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    listByThreadId,\n    getByRequestId,\n    deleteByRequestId,\n  } satisfies ProjectionPendingApprovalRepositoryShape;\n});\n\nexport const ProjectionPendingApprovalRepositoryLive = Layer.effect(\n  ProjectionPendingApprovalRepository,\n  makeProjectionPendingApprovalRepository,\n);\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\n\nimport { ModelSelection, ProjectScript } from \"@salchi/contracts\";\nimport { toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  DeleteProjectionProjectInput,\n  GetProjectionProjectInput,\n  ProjectionProject,\n  ProjectionProjectRepository,\n  type ProjectionProjectRepositoryShape,\n} from \"../Services/ProjectionProjects.ts\";\n\nconst ProjectionProjectDbRow = ProjectionProject.mapFields(\n  Struct.assign({\n    defaultModelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),\n    scripts: Schema.fromJsonString(Schema.Array(ProjectScript)),\n  }),\n);\ntype ProjectionProjectDbRow = typeof ProjectionProjectDbRow.Type;\n\nconst makeProjectionProjectRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionProjectRow = SqlSchema.void({\n    Request: ProjectionProject,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_projects (\n          project_id,\n          title,\n          workspace_root,\n          default_model_selection_json,\n          scripts_json,\n          created_at,\n          updated_at,\n          deleted_at\n        )\n        VALUES (\n          ${row.projectId},\n          ${row.title},\n          ${row.workspaceRoot},\n          ${row.defaultModelSelection !== null ? JSON.stringify(row.defaultModelSelection) : null},\n          ${JSON.stringify(row.scripts)},\n          ${row.createdAt},\n          ${row.updatedAt},\n          ${row.deletedAt}\n        )\n        ON CONFLICT (project_id)\n        DO UPDATE SET\n          title = excluded.title,\n          workspace_root = excluded.workspace_root,\n          default_model_selection_json = excluded.default_model_selection_json,\n          scripts_json = excluded.scripts_json,\n          created_at = excluded.created_at,\n          updated_at = excluded.updated_at,\n          deleted_at = excluded.deleted_at\n      `,\n  });\n\n  const getProjectionProjectRow = SqlSchema.findOneOption({\n    Request: GetProjectionProjectInput,\n    Result: ProjectionProjectDbRow,\n    execute: ({ projectId }) =>\n      sql`\n        SELECT\n          project_id AS \"projectId\",\n          title,\n          workspace_root AS \"workspaceRoot\",\n          default_model_selection_json AS \"defaultModelSelection\",\n          scripts_json AS \"scripts\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_projects\n        WHERE project_id = ${projectId}\n      `,\n  });\n\n  const listProjectionProjectRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionProjectDbRow,\n    execute: () =>\n      sql`\n        SELECT\n          project_id AS \"projectId\",\n          title,\n          workspace_root AS \"workspaceRoot\",\n          default_model_selection_json AS \"defaultModelSelection\",\n          scripts_json AS \"scripts\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_projects\n        ORDER BY created_at ASC, project_id ASC\n      `,\n  });\n\n  const deleteProjectionProjectRow = SqlSchema.void({\n    Request: DeleteProjectionProjectInput,\n    execute: ({ projectId }) =>\n      sql`\n        DELETE FROM projection_projects\n        WHERE project_id = ${projectId}\n      `,\n  });\n\n  const upsert: ProjectionProjectRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionProjectRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionProjectRepository.upsert:query\")),\n    );\n\n  const getById: ProjectionProjectRepositoryShape[\"getById\"] = (input) =>\n    getProjectionProjectRow(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionProjectRepository.getById:query\")),\n    );\n\n  const listAll: ProjectionProjectRepositoryShape[\"listAll\"] = () =>\n    listProjectionProjectRows().pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionProjectRepository.listAll:query\")),\n    );\n\n  const deleteById: ProjectionProjectRepositoryShape[\"deleteById\"] = (input) =>\n    deleteProjectionProjectRow(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionProjectRepository.deleteById:query\")),\n    );\n\n  return {\n    upsert,\n    getById,\n    listAll,\n    deleteById,\n  } satisfies ProjectionProjectRepositoryShape;\n});\n\nexport const ProjectionProjectRepositoryLive = Layer.effect(\n  ProjectionProjectRepository,\n  makeProjectionProjectRepository,\n);\n","import { NonNegativeInt } from \"@salchi/contracts\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\n\nimport {\n  ProjectionStateRepository,\n  type ProjectionStateRepositoryShape,\n  GetProjectionStateInput,\n  ProjectionState,\n} from \"../Services/ProjectionState.ts\";\n\nconst MinLastAppliedSequenceRowSchema = Schema.Struct({\n  minLastAppliedSequence: Schema.NullOr(NonNegativeInt),\n});\n\nconst makeProjectionStateRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionStateRow = SqlSchema.void({\n    Request: ProjectionState,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_state (\n          projector,\n          last_applied_sequence,\n          updated_at\n        )\n        VALUES (\n          ${row.projector},\n          ${row.lastAppliedSequence},\n          ${row.updatedAt}\n        )\n        ON CONFLICT (projector)\n        DO UPDATE SET\n          last_applied_sequence = excluded.last_applied_sequence,\n          updated_at = excluded.updated_at\n      `,\n  });\n\n  const getProjectionStateRow = SqlSchema.findOneOption({\n    Request: GetProjectionStateInput,\n    Result: ProjectionState,\n    execute: ({ projector }) =>\n      sql`\n        SELECT\n          projector,\n          last_applied_sequence AS \"lastAppliedSequence\",\n          updated_at AS \"updatedAt\"\n        FROM projection_state\n        WHERE projector = ${projector}\n      `,\n  });\n\n  const listProjectionStateRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionState,\n    execute: () =>\n      sql`\n        SELECT\n          projector,\n          last_applied_sequence AS \"lastAppliedSequence\",\n          updated_at AS \"updatedAt\"\n        FROM projection_state\n        ORDER BY projector ASC\n      `,\n  });\n\n  const readMinLastAppliedSequence = SqlSchema.findOne({\n    Request: Schema.Void,\n    Result: MinLastAppliedSequenceRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          MIN(last_applied_sequence) AS \"minLastAppliedSequence\"\n        FROM projection_state\n      `,\n  });\n\n  const upsert: ProjectionStateRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionStateRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionStateRepository.upsert:query\")),\n    );\n\n  const getByProjector: ProjectionStateRepositoryShape[\"getByProjector\"] = (input) =>\n    getProjectionStateRow(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionStateRepository.getByProjector:query\")),\n    );\n\n  const listAll: ProjectionStateRepositoryShape[\"listAll\"] = () =>\n    listProjectionStateRows(undefined).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionStateRepository.listAll:query\")),\n    );\n\n  const minLastAppliedSequence: ProjectionStateRepositoryShape[\"minLastAppliedSequence\"] = () =>\n    readMinLastAppliedSequence(undefined).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionStateRepository.minLastAppliedSequence:query\"),\n      ),\n      Effect.map((row) => row.minLastAppliedSequence),\n    );\n\n  return {\n    upsert,\n    getByProjector,\n    listAll,\n    minLastAppliedSequence,\n  } satisfies ProjectionStateRepositoryShape;\n});\n\nexport const ProjectionStateRepositoryLive = Layer.effect(\n  ProjectionStateRepository,\n  makeProjectionStateRepository,\n);\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport { NonNegativeInt } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\n\nimport { toPersistenceDecodeError, toPersistenceSqlError } from \"../Errors.ts\";\n\nimport {\n  DeleteProjectionThreadActivitiesInput,\n  ListProjectionThreadActivitiesInput,\n  ProjectionThreadActivity,\n  ProjectionThreadActivityRepository,\n  type ProjectionThreadActivityRepositoryShape,\n} from \"../Services/ProjectionThreadActivities.ts\";\n\nconst ProjectionThreadActivityDbRowSchema = ProjectionThreadActivity.mapFields(\n  Struct.assign({\n    payload: Schema.fromJsonString(Schema.Unknown),\n    sequence: Schema.NullOr(NonNegativeInt),\n  }),\n);\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown) =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeProjectionThreadActivityRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionThreadActivityRow = SqlSchema.void({\n    Request: ProjectionThreadActivity,\n    execute: (row) =>\n      sql`\n            INSERT INTO projection_thread_activities (\n              activity_id,\n              thread_id,\n              turn_id,\n              tone,\n              kind,\n              summary,\n              payload_json,\n              sequence,\n              created_at\n            )\n            VALUES (\n              ${row.activityId},\n              ${row.threadId},\n              ${row.turnId},\n              ${row.tone},\n              ${row.kind},\n              ${row.summary},\n              ${JSON.stringify(row.payload)},\n              ${row.sequence ?? null},\n              ${row.createdAt}\n            )\n            ON CONFLICT (activity_id)\n            DO UPDATE SET\n              thread_id = excluded.thread_id,\n              turn_id = excluded.turn_id,\n              tone = excluded.tone,\n              kind = excluded.kind,\n              summary = excluded.summary,\n              payload_json = excluded.payload_json,\n              sequence = excluded.sequence,\n              created_at = excluded.created_at\n          `,\n  });\n\n  const listProjectionThreadActivityRows = SqlSchema.findAll({\n    Request: ListProjectionThreadActivitiesInput,\n    Result: ProjectionThreadActivityDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          activity_id AS \"activityId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          tone,\n          kind,\n          summary,\n          payload_json AS \"payload\",\n          sequence,\n          created_at AS \"createdAt\"\n        FROM projection_thread_activities\n        WHERE thread_id = ${threadId}\n        ORDER BY\n          CASE WHEN sequence IS NULL THEN 0 ELSE 1 END ASC,\n          sequence ASC,\n          created_at ASC,\n          activity_id ASC\n      `,\n  });\n\n  const deleteProjectionThreadActivityRows = SqlSchema.void({\n    Request: DeleteProjectionThreadActivitiesInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_thread_activities\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsert: ProjectionThreadActivityRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionThreadActivityRow(row).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionThreadActivityRepository.upsert:query\",\n          \"ProjectionThreadActivityRepository.upsert:encodeRequest\",\n        ),\n      ),\n    );\n\n  const listByThreadId: ProjectionThreadActivityRepositoryShape[\"listByThreadId\"] = (input) =>\n    listProjectionThreadActivityRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionThreadActivityRepository.listByThreadId:query\",\n          \"ProjectionThreadActivityRepository.listByThreadId:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) =>\n        rows.map((row) => ({\n          activityId: row.activityId,\n          threadId: row.threadId,\n          turnId: row.turnId,\n          tone: row.tone,\n          kind: row.kind,\n          summary: row.summary,\n          payload: row.payload,\n          ...(row.sequence !== null ? { sequence: row.sequence } : {}),\n          createdAt: row.createdAt,\n        })),\n      ),\n    );\n\n  const deleteByThreadId: ProjectionThreadActivityRepositoryShape[\"deleteByThreadId\"] = (input) =>\n    deleteProjectionThreadActivityRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadActivityRepository.deleteByThreadId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    listByThreadId,\n    deleteByThreadId,\n  } satisfies ProjectionThreadActivityRepositoryShape;\n});\n\nexport const ProjectionThreadActivityRepositoryLive = Layer.effect(\n  ProjectionThreadActivityRepository,\n  makeProjectionThreadActivityRepository,\n);\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\nimport { ChatAttachment } from \"@salchi/contracts\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  GetProjectionThreadMessageInput,\n  ProjectionThreadMessageRepository,\n  type ProjectionThreadMessageRepositoryShape,\n  DeleteProjectionThreadMessagesInput,\n  ListProjectionThreadMessagesInput,\n  ProjectionThreadMessage,\n} from \"../Services/ProjectionThreadMessages.ts\";\n\nconst ProjectionThreadMessageDbRowSchema = ProjectionThreadMessage.mapFields(\n  Struct.assign({\n    isStreaming: Schema.Number,\n    attachments: Schema.NullOr(Schema.fromJsonString(Schema.Array(ChatAttachment))),\n  }),\n);\n\nfunction toProjectionThreadMessage(\n  row: Schema.Schema.Type<typeof ProjectionThreadMessageDbRowSchema>,\n): ProjectionThreadMessage {\n  return {\n    messageId: row.messageId,\n    threadId: row.threadId,\n    turnId: row.turnId,\n    role: row.role,\n    text: row.text,\n    isStreaming: row.isStreaming === 1,\n    createdAt: row.createdAt,\n    updatedAt: row.updatedAt,\n    ...(row.attachments !== null ? { attachments: row.attachments } : {}),\n  };\n}\n\nconst makeProjectionThreadMessageRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionThreadMessageRow = SqlSchema.void({\n    Request: ProjectionThreadMessage,\n    execute: (row) => {\n      const nextAttachmentsJson =\n        row.attachments !== undefined ? JSON.stringify(row.attachments) : null;\n      return sql`\n        INSERT INTO projection_thread_messages (\n          message_id,\n          thread_id,\n          turn_id,\n          role,\n          text,\n          attachments_json,\n          is_streaming,\n          created_at,\n          updated_at\n        )\n        VALUES (\n          ${row.messageId},\n          ${row.threadId},\n          ${row.turnId},\n          ${row.role},\n          ${row.text},\n          COALESCE(\n            ${nextAttachmentsJson},\n            (\n              SELECT attachments_json\n              FROM projection_thread_messages\n              WHERE message_id = ${row.messageId}\n            )\n          ),\n          ${row.isStreaming ? 1 : 0},\n          ${row.createdAt},\n          ${row.updatedAt}\n        )\n        ON CONFLICT (message_id)\n        DO UPDATE SET\n          thread_id = excluded.thread_id,\n          turn_id = COALESCE(excluded.turn_id, projection_thread_messages.turn_id),\n          role = excluded.role,\n          text = excluded.text,\n          attachments_json = COALESCE(\n            excluded.attachments_json,\n            projection_thread_messages.attachments_json\n          ),\n          is_streaming = excluded.is_streaming,\n          created_at = excluded.created_at,\n          updated_at = excluded.updated_at\n      `;\n    },\n  });\n\n  const getProjectionThreadMessageRow = SqlSchema.findOneOption({\n    Request: GetProjectionThreadMessageInput,\n    Result: ProjectionThreadMessageDbRowSchema,\n    execute: ({ messageId }) =>\n      sql`\n        SELECT\n          message_id AS \"messageId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          is_streaming AS \"isStreaming\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_messages\n        WHERE message_id = ${messageId}\n        LIMIT 1\n      `,\n  });\n\n  const listProjectionThreadMessageRows = SqlSchema.findAll({\n    Request: ListProjectionThreadMessagesInput,\n    Result: ProjectionThreadMessageDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          message_id AS \"messageId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          is_streaming AS \"isStreaming\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_messages\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, message_id ASC\n      `,\n  });\n\n  const deleteProjectionThreadMessageRows = SqlSchema.void({\n    Request: DeleteProjectionThreadMessagesInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_thread_messages\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsert: ProjectionThreadMessageRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionThreadMessageRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadMessageRepository.upsert:query\")),\n    );\n\n  const getByMessageId: ProjectionThreadMessageRepositoryShape[\"getByMessageId\"] = (input) =>\n    getProjectionThreadMessageRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadMessageRepository.getByMessageId:query\"),\n      ),\n      Effect.map(Option.map(toProjectionThreadMessage)),\n    );\n\n  const listByThreadId: ProjectionThreadMessageRepositoryShape[\"listByThreadId\"] = (input) =>\n    listProjectionThreadMessageRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadMessageRepository.listByThreadId:query\"),\n      ),\n      Effect.map((rows) => rows.map(toProjectionThreadMessage)),\n    );\n\n  const deleteByThreadId: ProjectionThreadMessageRepositoryShape[\"deleteByThreadId\"] = (input) =>\n    deleteProjectionThreadMessageRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadMessageRepository.deleteByThreadId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    getByMessageId,\n    listByThreadId,\n    deleteByThreadId,\n  } satisfies ProjectionThreadMessageRepositoryShape;\n});\n\nexport const ProjectionThreadMessageRepositoryLive = Layer.effect(\n  ProjectionThreadMessageRepository,\n  makeProjectionThreadMessageRepository,\n);\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  DeleteProjectionThreadProposedPlansInput,\n  ListProjectionThreadProposedPlansInput,\n  ProjectionThreadProposedPlan,\n  ProjectionThreadProposedPlanRepository,\n  type ProjectionThreadProposedPlanRepositoryShape,\n} from \"../Services/ProjectionThreadProposedPlans.ts\";\n\nconst makeProjectionThreadProposedPlanRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionThreadProposedPlanRow = SqlSchema.void({\n    Request: ProjectionThreadProposedPlan,\n    execute: (row) => sql`\n      INSERT INTO projection_thread_proposed_plans (\n        plan_id,\n        thread_id,\n        turn_id,\n        plan_markdown,\n        implemented_at,\n        implementation_thread_id,\n        created_at,\n        updated_at\n      )\n      VALUES (\n        ${row.planId},\n        ${row.threadId},\n        ${row.turnId},\n        ${row.planMarkdown},\n        ${row.implementedAt},\n        ${row.implementationThreadId},\n        ${row.createdAt},\n        ${row.updatedAt}\n      )\n      ON CONFLICT (plan_id)\n      DO UPDATE SET\n        thread_id = excluded.thread_id,\n        turn_id = excluded.turn_id,\n        plan_markdown = excluded.plan_markdown,\n        implemented_at = excluded.implemented_at,\n        implementation_thread_id = excluded.implementation_thread_id,\n        created_at = excluded.created_at,\n        updated_at = excluded.updated_at\n    `,\n  });\n\n  const listProjectionThreadProposedPlanRows = SqlSchema.findAll({\n    Request: ListProjectionThreadProposedPlansInput,\n    Result: ProjectionThreadProposedPlan,\n    execute: ({ threadId }) => sql`\n      SELECT\n        plan_id AS \"planId\",\n        thread_id AS \"threadId\",\n        turn_id AS \"turnId\",\n        plan_markdown AS \"planMarkdown\",\n        implemented_at AS \"implementedAt\",\n        implementation_thread_id AS \"implementationThreadId\",\n        created_at AS \"createdAt\",\n        updated_at AS \"updatedAt\"\n      FROM projection_thread_proposed_plans\n      WHERE thread_id = ${threadId}\n      ORDER BY created_at ASC, plan_id ASC\n    `,\n  });\n\n  const deleteProjectionThreadProposedPlanRows = SqlSchema.void({\n    Request: DeleteProjectionThreadProposedPlansInput,\n    execute: ({ threadId }) => sql`\n      DELETE FROM projection_thread_proposed_plans\n      WHERE thread_id = ${threadId}\n    `,\n  });\n\n  const upsert: ProjectionThreadProposedPlanRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionThreadProposedPlanRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadProposedPlanRepository.upsert:query\")),\n    );\n\n  const listByThreadId: ProjectionThreadProposedPlanRepositoryShape[\"listByThreadId\"] = (input) =>\n    listProjectionThreadProposedPlanRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadProposedPlanRepository.listByThreadId:query\"),\n      ),\n    );\n\n  const deleteByThreadId: ProjectionThreadProposedPlanRepositoryShape[\"deleteByThreadId\"] = (\n    input,\n  ) =>\n    deleteProjectionThreadProposedPlanRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadProposedPlanRepository.deleteByThreadId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    listByThreadId,\n    deleteByThreadId,\n  } satisfies ProjectionThreadProposedPlanRepositoryShape;\n});\n\nexport const ProjectionThreadProposedPlanRepositoryLive = Layer.effect(\n  ProjectionThreadProposedPlanRepository,\n  makeProjectionThreadProposedPlanRepository,\n);\n","import {\n  ChatAttachment,\n  IsoDateTime,\n  ModelSelection,\n  OrchestrationProposedPlanId,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  DeleteProjectionThreadQueuedTurnsInput,\n  GetProjectionThreadQueuedTurnByMessageIdInput,\n  GetProjectionThreadQueuedTurnInput,\n  ListProjectionThreadQueuedTurnsInput,\n  ProjectionThreadQueuedTurn,\n  ProjectionThreadQueuedTurnRepository,\n  type ProjectionThreadQueuedTurnRepositoryShape,\n} from \"../Services/ProjectionThreadQueuedTurns.ts\";\n\nconst ProjectionThreadQueuedTurnDbRow = Schema.Struct({\n  threadId: ProjectionThreadQueuedTurn.fields.threadId,\n  messageId: ProjectionThreadQueuedTurn.fields.messageId,\n  role: ProjectionThreadQueuedTurn.fields.role,\n  text: ProjectionThreadQueuedTurn.fields.text,\n  attachments: Schema.fromJsonString(Schema.Array(ChatAttachment)),\n  modelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),\n  titleSeed: Schema.NullOr(Schema.String),\n  runtimeMode: ProjectionThreadQueuedTurn.fields.runtimeMode,\n  interactionMode: ProjectionThreadQueuedTurn.fields.interactionMode,\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n  steeringExpectedTurnId: Schema.NullOr(TurnId),\n  steeringRequestedAt: Schema.NullOr(IsoDateTime),\n  recoveryConfirmationRequired: Schema.Number,\n  createdAt: ProjectionThreadQueuedTurn.fields.createdAt,\n  updatedAt: ProjectionThreadQueuedTurn.fields.updatedAt,\n});\n\nconst ProjectionThreadIdRow = Schema.Struct({\n  threadId: ThreadId,\n});\n\nfunction toProjectionThreadQueuedTurn(\n  row: Schema.Schema.Type<typeof ProjectionThreadQueuedTurnDbRow>,\n): ProjectionThreadQueuedTurn {\n  return {\n    threadId: row.threadId,\n    messageId: row.messageId,\n    role: row.role,\n    text: row.text,\n    attachments: row.attachments,\n    ...(row.modelSelection !== null ? { modelSelection: row.modelSelection } : {}),\n    ...(row.titleSeed !== null ? { titleSeed: row.titleSeed } : {}),\n    runtimeMode: row.runtimeMode,\n    interactionMode: row.interactionMode,\n    ...(row.sourceProposedPlanThreadId !== null && row.sourceProposedPlanId !== null\n      ? {\n          sourceProposedPlan: {\n            threadId: row.sourceProposedPlanThreadId,\n            planId: row.sourceProposedPlanId,\n          },\n        }\n      : {}),\n    ...(row.steeringExpectedTurnId !== null && row.steeringRequestedAt !== null\n      ? {\n          steering: {\n            expectedTurnId: row.steeringExpectedTurnId,\n            requestedAt: row.steeringRequestedAt,\n          },\n        }\n      : {}),\n    recoveryConfirmationRequired: row.recoveryConfirmationRequired === 1,\n    createdAt: row.createdAt,\n    updatedAt: row.updatedAt,\n  };\n}\n\nconst makeProjectionThreadQueuedTurnRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionThreadQueuedTurnRow = SqlSchema.void({\n    Request: ProjectionThreadQueuedTurn,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_thread_queued_turns (\n          message_id,\n          thread_id,\n          role,\n          text,\n          attachments_json,\n          model_selection_json,\n          title_seed,\n          runtime_mode,\n          interaction_mode,\n          source_proposed_plan_thread_id,\n          source_proposed_plan_id,\n          steering_expected_turn_id,\n          steering_requested_at,\n          recovery_confirmation_required,\n          created_at,\n          updated_at\n        )\n        VALUES (\n          ${row.messageId},\n          ${row.threadId},\n          ${row.role},\n          ${row.text},\n          ${JSON.stringify(row.attachments)},\n          ${row.modelSelection !== undefined ? JSON.stringify(row.modelSelection) : null},\n          ${row.titleSeed ?? null},\n          ${row.runtimeMode},\n          ${row.interactionMode},\n          ${row.sourceProposedPlan?.threadId ?? null},\n          ${row.sourceProposedPlan?.planId ?? null},\n          ${row.steering?.expectedTurnId ?? null},\n          ${row.steering?.requestedAt ?? null},\n          ${row.recoveryConfirmationRequired ? 1 : 0},\n          ${row.createdAt},\n          ${row.updatedAt}\n        )\n        ON CONFLICT (message_id)\n        DO UPDATE SET\n          thread_id = excluded.thread_id,\n          role = excluded.role,\n          text = excluded.text,\n          attachments_json = excluded.attachments_json,\n          model_selection_json = excluded.model_selection_json,\n          title_seed = excluded.title_seed,\n          runtime_mode = excluded.runtime_mode,\n          interaction_mode = excluded.interaction_mode,\n          source_proposed_plan_thread_id = excluded.source_proposed_plan_thread_id,\n          source_proposed_plan_id = excluded.source_proposed_plan_id,\n          steering_expected_turn_id = excluded.steering_expected_turn_id,\n          steering_requested_at = excluded.steering_requested_at,\n          recovery_confirmation_required = excluded.recovery_confirmation_required,\n          created_at = excluded.created_at,\n          updated_at = excluded.updated_at\n      `,\n  });\n\n  const getProjectionThreadQueuedTurnByMessageId = SqlSchema.findOneOption({\n    Request: GetProjectionThreadQueuedTurnByMessageIdInput,\n    Result: ProjectionThreadQueuedTurnDbRow,\n    execute: ({ messageId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          message_id AS \"messageId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          model_selection_json AS \"modelSelection\",\n          title_seed AS \"titleSeed\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          steering_expected_turn_id AS \"steeringExpectedTurnId\",\n          steering_requested_at AS \"steeringRequestedAt\",\n          recovery_confirmation_required AS \"recoveryConfirmationRequired\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_queued_turns\n        WHERE message_id = ${messageId}\n        LIMIT 1\n      `,\n  });\n\n  const getProjectionThreadQueuedTurnByThreadAndMessageId = SqlSchema.findOneOption({\n    Request: GetProjectionThreadQueuedTurnInput,\n    Result: ProjectionThreadQueuedTurnDbRow,\n    execute: ({ threadId, messageId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          message_id AS \"messageId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          model_selection_json AS \"modelSelection\",\n          title_seed AS \"titleSeed\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          steering_expected_turn_id AS \"steeringExpectedTurnId\",\n          steering_requested_at AS \"steeringRequestedAt\",\n          recovery_confirmation_required AS \"recoveryConfirmationRequired\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_queued_turns\n        WHERE thread_id = ${threadId}\n          AND message_id = ${messageId}\n        LIMIT 1\n      `,\n  });\n\n  const getOldestProjectionThreadQueuedTurn = SqlSchema.findOneOption({\n    Request: ListProjectionThreadQueuedTurnsInput,\n    Result: ProjectionThreadQueuedTurnDbRow,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          message_id AS \"messageId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          model_selection_json AS \"modelSelection\",\n          title_seed AS \"titleSeed\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          steering_expected_turn_id AS \"steeringExpectedTurnId\",\n          steering_requested_at AS \"steeringRequestedAt\",\n          recovery_confirmation_required AS \"recoveryConfirmationRequired\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_queued_turns\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, message_id ASC\n        LIMIT 1\n      `,\n  });\n\n  const listProjectionThreadQueuedTurns = SqlSchema.findAll({\n    Request: ListProjectionThreadQueuedTurnsInput,\n    Result: ProjectionThreadQueuedTurnDbRow,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          message_id AS \"messageId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          model_selection_json AS \"modelSelection\",\n          title_seed AS \"titleSeed\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          steering_expected_turn_id AS \"steeringExpectedTurnId\",\n          steering_requested_at AS \"steeringRequestedAt\",\n          recovery_confirmation_required AS \"recoveryConfirmationRequired\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_queued_turns\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, message_id ASC\n      `,\n  });\n\n  const listProjectionThreadIdsWithQueuedTurns = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadIdRow,\n    execute: () =>\n      sql`\n        SELECT DISTINCT thread_id AS \"threadId\"\n        FROM projection_thread_queued_turns\n        ORDER BY thread_id ASC\n      `,\n  });\n\n  const deleteProjectionThreadQueuedTurnByMessageId = SqlSchema.void({\n    Request: GetProjectionThreadQueuedTurnByMessageIdInput,\n    execute: ({ messageId }) =>\n      sql`\n        DELETE FROM projection_thread_queued_turns\n        WHERE message_id = ${messageId}\n      `,\n  });\n\n  const deleteProjectionThreadQueuedTurnsByThreadId = SqlSchema.void({\n    Request: DeleteProjectionThreadQueuedTurnsInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_thread_queued_turns\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsert: ProjectionThreadQueuedTurnRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionThreadQueuedTurnRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadQueuedTurnRepository.upsert:query\")),\n    );\n\n  const getByMessageId: ProjectionThreadQueuedTurnRepositoryShape[\"getByMessageId\"] = (input) =>\n    getProjectionThreadQueuedTurnByMessageId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadQueuedTurnRepository.getByMessageId:query\"),\n      ),\n      Effect.map(Option.map(toProjectionThreadQueuedTurn)),\n    );\n\n  const getByThreadAndMessageId: ProjectionThreadQueuedTurnRepositoryShape[\"getByThreadAndMessageId\"] =\n    (input) =>\n      getProjectionThreadQueuedTurnByThreadAndMessageId(input).pipe(\n        Effect.mapError(\n          toPersistenceSqlError(\n            \"ProjectionThreadQueuedTurnRepository.getByThreadAndMessageId:query\",\n          ),\n        ),\n        Effect.map(Option.map(toProjectionThreadQueuedTurn)),\n      );\n\n  const getOldestByThreadId: ProjectionThreadQueuedTurnRepositoryShape[\"getOldestByThreadId\"] = (\n    input,\n  ) =>\n    getOldestProjectionThreadQueuedTurn(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadQueuedTurnRepository.getOldestByThreadId:query\"),\n      ),\n      Effect.map(Option.map(toProjectionThreadQueuedTurn)),\n    );\n\n  const listByThreadId: ProjectionThreadQueuedTurnRepositoryShape[\"listByThreadId\"] = (input) =>\n    listProjectionThreadQueuedTurns(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadQueuedTurnRepository.listByThreadId:query\"),\n      ),\n      Effect.map((rows) => rows.map(toProjectionThreadQueuedTurn)),\n    );\n\n  const listThreadIdsWithQueuedTurns: ProjectionThreadQueuedTurnRepositoryShape[\"listThreadIdsWithQueuedTurns\"] =\n    () =>\n      listProjectionThreadIdsWithQueuedTurns(undefined).pipe(\n        Effect.mapError(\n          toPersistenceSqlError(\n            \"ProjectionThreadQueuedTurnRepository.listThreadIdsWithQueuedTurns:query\",\n          ),\n        ),\n        Effect.map((rows) => rows.map((row) => row.threadId)),\n      );\n\n  const deleteByMessageId: ProjectionThreadQueuedTurnRepositoryShape[\"deleteByMessageId\"] = (\n    input,\n  ) =>\n    deleteProjectionThreadQueuedTurnByMessageId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadQueuedTurnRepository.deleteByMessageId:query\"),\n      ),\n    );\n\n  const deleteByThreadId: ProjectionThreadQueuedTurnRepositoryShape[\"deleteByThreadId\"] = (input) =>\n    deleteProjectionThreadQueuedTurnsByThreadId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadQueuedTurnRepository.deleteByThreadId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    getByMessageId,\n    getByThreadAndMessageId,\n    getOldestByThreadId,\n    listByThreadId,\n    listThreadIdsWithQueuedTurns,\n    deleteByMessageId,\n    deleteByThreadId,\n  } satisfies ProjectionThreadQueuedTurnRepositoryShape;\n});\n\nexport const ProjectionThreadQueuedTurnRepositoryLive = Layer.effect(\n  ProjectionThreadQueuedTurnRepository,\n  makeProjectionThreadQueuedTurnRepository,\n);\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\n\nimport {\n  ProjectionThreadSession,\n  ProjectionThreadSessionRepository,\n  type ProjectionThreadSessionRepositoryShape,\n  DeleteProjectionThreadSessionInput,\n  GetProjectionThreadSessionInput,\n} from \"../Services/ProjectionThreadSessions.ts\";\n\nconst makeProjectionThreadSessionRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionThreadSessionRow = SqlSchema.void({\n    Request: ProjectionThreadSession,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_thread_sessions (\n          thread_id,\n          status,\n          provider_name,\n          provider_instance_id,\n          runtime_mode,\n          active_turn_id,\n          last_error,\n          updated_at\n        )\n        VALUES (\n          ${row.threadId},\n          ${row.status},\n          ${row.providerName},\n          ${row.providerInstanceId},\n          ${row.runtimeMode},\n          ${row.activeTurnId},\n          ${row.lastError},\n          ${row.updatedAt}\n        )\n        ON CONFLICT (thread_id)\n        DO UPDATE SET\n          status = excluded.status,\n          provider_name = excluded.provider_name,\n          provider_instance_id = excluded.provider_instance_id,\n          runtime_mode = excluded.runtime_mode,\n          active_turn_id = excluded.active_turn_id,\n          last_error = excluded.last_error,\n          updated_at = excluded.updated_at\n      `,\n  });\n\n  const getProjectionThreadSessionRow = SqlSchema.findOneOption({\n    Request: GetProjectionThreadSessionInput,\n    Result: ProjectionThreadSession,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          status,\n          provider_name AS \"providerName\",\n          provider_instance_id AS \"providerInstanceId\",\n          runtime_mode AS \"runtimeMode\",\n          active_turn_id AS \"activeTurnId\",\n          last_error AS \"lastError\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_sessions\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const deleteProjectionThreadSessionRow = SqlSchema.void({\n    Request: DeleteProjectionThreadSessionInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_thread_sessions\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsert: ProjectionThreadSessionRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionThreadSessionRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadSessionRepository.upsert:query\")),\n    );\n\n  const getByThreadId: ProjectionThreadSessionRepositoryShape[\"getByThreadId\"] = (input) =>\n    getProjectionThreadSessionRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadSessionRepository.getByThreadId:query\"),\n      ),\n    );\n\n  const deleteByThreadId: ProjectionThreadSessionRepositoryShape[\"deleteByThreadId\"] = (input) =>\n    deleteProjectionThreadSessionRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionThreadSessionRepository.deleteByThreadId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    getByThreadId,\n    deleteByThreadId,\n  } satisfies ProjectionThreadSessionRepositoryShape;\n});\n\nexport const ProjectionThreadSessionRepositoryLive = Layer.effect(\n  ProjectionThreadSessionRepository,\n  makeProjectionThreadSessionRepository,\n);\n","import { OrchestrationCheckpointFile } from \"@salchi/contracts\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\n\nimport { toPersistenceDecodeError, toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  ClearCheckpointTurnConflictInput,\n  DeleteProjectionPendingTurnStartInput,\n  DeleteProjectionTurnsByThreadInput,\n  GetProjectionPendingTurnStartInput,\n  GetProjectionTurnByTurnIdInput,\n  ListProjectionTurnsByThreadInput,\n  ProjectionPendingTurnStart,\n  ProjectionTurn,\n  ProjectionTurnById,\n  ProjectionTurnRepository,\n  type ProjectionTurnRepositoryShape,\n} from \"../Services/ProjectionTurns.ts\";\n\nconst ProjectionTurnDbRowSchema = ProjectionTurn.mapFields(\n  Struct.assign({\n    checkpointFiles: Schema.fromJsonString(Schema.Array(OrchestrationCheckpointFile)),\n  }),\n);\n\nconst ProjectionTurnByIdDbRowSchema = ProjectionTurnById.mapFields(\n  Struct.assign({\n    checkpointFiles: Schema.fromJsonString(Schema.Array(OrchestrationCheckpointFile)),\n  }),\n);\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown) =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeProjectionTurnRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionTurnById = SqlSchema.void({\n    Request: ProjectionTurnByIdDbRowSchema,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_turns (\n          thread_id,\n          turn_id,\n          pending_message_id,\n          source_proposed_plan_thread_id,\n          source_proposed_plan_id,\n          assistant_message_id,\n          state,\n          requested_at,\n          started_at,\n          completed_at,\n          checkpoint_turn_count,\n          checkpoint_ref,\n          checkpoint_status,\n          checkpoint_attribution,\n          checkpoint_files_json\n        )\n        VALUES (\n          ${row.threadId},\n          ${row.turnId},\n          ${row.pendingMessageId},\n          ${row.sourceProposedPlanThreadId},\n          ${row.sourceProposedPlanId},\n          ${row.assistantMessageId},\n          ${row.state},\n          ${row.requestedAt},\n          ${row.startedAt},\n          ${row.completedAt},\n          ${row.checkpointTurnCount},\n          ${row.checkpointRef},\n          ${row.checkpointStatus},\n          ${row.checkpointAttribution},\n          ${row.checkpointFiles}\n        )\n        ON CONFLICT (thread_id, turn_id)\n        DO UPDATE SET\n          pending_message_id = excluded.pending_message_id,\n          source_proposed_plan_thread_id = excluded.source_proposed_plan_thread_id,\n          source_proposed_plan_id = excluded.source_proposed_plan_id,\n          assistant_message_id = excluded.assistant_message_id,\n          state = excluded.state,\n          requested_at = excluded.requested_at,\n          started_at = excluded.started_at,\n          completed_at = excluded.completed_at,\n          checkpoint_turn_count = excluded.checkpoint_turn_count,\n          checkpoint_ref = excluded.checkpoint_ref,\n          checkpoint_status = excluded.checkpoint_status,\n          checkpoint_attribution = excluded.checkpoint_attribution,\n          checkpoint_files_json = excluded.checkpoint_files_json\n      `,\n  });\n\n  const clearPendingProjectionTurnsByThread = SqlSchema.void({\n    Request: DeleteProjectionTurnsByThreadInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND turn_id IS NULL\n          AND state = 'pending'\n          AND checkpoint_turn_count IS NULL\n      `,\n  });\n\n  const insertPendingProjectionTurn = SqlSchema.void({\n    Request: ProjectionPendingTurnStart,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_turns (\n          thread_id,\n          turn_id,\n          pending_message_id,\n          source_proposed_plan_thread_id,\n          source_proposed_plan_id,\n          assistant_message_id,\n          state,\n          requested_at,\n          started_at,\n          completed_at,\n          checkpoint_turn_count,\n          checkpoint_ref,\n          checkpoint_status,\n          checkpoint_attribution,\n          checkpoint_files_json\n        )\n        VALUES (\n          ${row.threadId},\n          NULL,\n          ${row.messageId},\n          ${row.sourceProposedPlanThreadId},\n          ${row.sourceProposedPlanId},\n          NULL,\n          'pending',\n          ${row.requestedAt},\n          NULL,\n          NULL,\n          NULL,\n          NULL,\n          NULL,\n          NULL,\n          '[]'\n        )\n      `,\n  });\n\n  const getPendingProjectionTurn = SqlSchema.findOneOption({\n    Request: GetProjectionPendingTurnStartInput,\n    Result: ProjectionPendingTurnStart,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          pending_message_id AS \"messageId\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          requested_at AS \"requestedAt\"\n        FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND turn_id IS NULL\n          AND state = 'pending'\n          AND pending_message_id IS NOT NULL\n          AND checkpoint_turn_count IS NULL\n        ORDER BY requested_at ASC, row_id ASC\n        LIMIT 1\n      `,\n  });\n\n  const listPendingProjectionTurns = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionPendingTurnStart,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          pending_message_id AS \"messageId\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          requested_at AS \"requestedAt\"\n        FROM projection_turns\n        WHERE turn_id IS NULL\n          AND state = 'pending'\n          AND pending_message_id IS NOT NULL\n          AND checkpoint_turn_count IS NULL\n        ORDER BY requested_at ASC, row_id ASC\n      `,\n  });\n\n  const deletePendingProjectionTurn = SqlSchema.void({\n    Request: DeleteProjectionPendingTurnStartInput,\n    execute: ({ threadId, messageId }) =>\n      sql`\n        DELETE FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND turn_id IS NULL\n          AND state = 'pending'\n          AND pending_message_id = ${messageId}\n          AND checkpoint_turn_count IS NULL\n      `,\n  });\n\n  const listProjectionTurnsByThread = SqlSchema.findAll({\n    Request: ListProjectionTurnsByThreadInput,\n    Result: ProjectionTurnDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          pending_message_id AS \"pendingMessageId\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          assistant_message_id AS \"assistantMessageId\",\n          state,\n          requested_at AS \"requestedAt\",\n          started_at AS \"startedAt\",\n          completed_at AS \"completedAt\",\n          checkpoint_turn_count AS \"checkpointTurnCount\",\n          checkpoint_ref AS \"checkpointRef\",\n          checkpoint_status AS \"checkpointStatus\",\n          checkpoint_attribution AS \"checkpointAttribution\",\n          checkpoint_files_json AS \"checkpointFiles\"\n        FROM projection_turns\n        WHERE thread_id = ${threadId}\n        ORDER BY\n          CASE\n            WHEN checkpoint_turn_count IS NULL THEN 1\n            ELSE 0\n          END ASC,\n          checkpoint_turn_count ASC,\n          requested_at ASC,\n          turn_id ASC\n      `,\n  });\n\n  const getProjectionTurnByTurnId = SqlSchema.findOneOption({\n    Request: GetProjectionTurnByTurnIdInput,\n    Result: ProjectionTurnByIdDbRowSchema,\n    execute: ({ threadId, turnId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          pending_message_id AS \"pendingMessageId\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          assistant_message_id AS \"assistantMessageId\",\n          state,\n          requested_at AS \"requestedAt\",\n          started_at AS \"startedAt\",\n          completed_at AS \"completedAt\",\n          checkpoint_turn_count AS \"checkpointTurnCount\",\n          checkpoint_ref AS \"checkpointRef\",\n          checkpoint_status AS \"checkpointStatus\",\n          checkpoint_attribution AS \"checkpointAttribution\",\n          checkpoint_files_json AS \"checkpointFiles\"\n        FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND turn_id = ${turnId}\n        LIMIT 1\n      `,\n  });\n\n  const clearCheckpointTurnConflictRow = SqlSchema.void({\n    Request: ClearCheckpointTurnConflictInput,\n    execute: ({ threadId, turnId, checkpointTurnCount }) =>\n      sql`\n        UPDATE projection_turns\n        SET\n          checkpoint_turn_count = NULL,\n          checkpoint_ref = NULL,\n          checkpoint_status = NULL,\n          checkpoint_attribution = NULL,\n          checkpoint_files_json = '[]'\n        WHERE thread_id = ${threadId}\n          AND checkpoint_turn_count = ${checkpointTurnCount}\n          AND (turn_id IS NULL OR turn_id <> ${turnId})\n      `,\n  });\n\n  const deleteProjectionTurnsByThread = SqlSchema.void({\n    Request: DeleteProjectionTurnsByThreadInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_turns\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsertByTurnId: ProjectionTurnRepositoryShape[\"upsertByTurnId\"] = (row) =>\n    upsertProjectionTurnById(row).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionTurnRepository.upsertByTurnId:query\",\n          \"ProjectionTurnRepository.upsertByTurnId:encodeRequest\",\n        ),\n      ),\n    );\n\n  const appendPendingTurnStart: ProjectionTurnRepositoryShape[\"appendPendingTurnStart\"] = (row) =>\n    insertPendingProjectionTurn(row).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionTurnRepository.appendPendingTurnStart:query\",\n          \"ProjectionTurnRepository.appendPendingTurnStart:encodeRequest\",\n        ),\n      ),\n    );\n\n  const getPendingTurnStartByThreadId: ProjectionTurnRepositoryShape[\"getPendingTurnStartByThreadId\"] =\n    (input) =>\n      getPendingProjectionTurn(input).pipe(\n        Effect.mapError(\n          toPersistenceSqlError(\"ProjectionTurnRepository.getPendingTurnStartByThreadId:query\"),\n        ),\n      );\n\n  const listPendingTurnStarts: ProjectionTurnRepositoryShape[\"listPendingTurnStarts\"] = () =>\n    listPendingProjectionTurns(undefined).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionTurnRepository.listPendingTurnStarts:query\",\n          \"ProjectionTurnRepository.listPendingTurnStarts:decodeRows\",\n        ),\n      ),\n    );\n\n  const deletePendingTurnStart: ProjectionTurnRepositoryShape[\"deletePendingTurnStart\"] = (input) =>\n    deletePendingProjectionTurn(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProjectionTurnRepository.deletePendingTurnStart:query\"),\n      ),\n    );\n\n  const deletePendingTurnStartByThreadId: ProjectionTurnRepositoryShape[\"deletePendingTurnStartByThreadId\"] =\n    (input) =>\n      clearPendingProjectionTurnsByThread(input).pipe(\n        Effect.mapError(\n          toPersistenceSqlError(\"ProjectionTurnRepository.deletePendingTurnStartByThreadId:query\"),\n        ),\n      );\n\n  const listByThreadId: ProjectionTurnRepositoryShape[\"listByThreadId\"] = (input) =>\n    listProjectionTurnsByThread(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionTurnRepository.listByThreadId:query\",\n          \"ProjectionTurnRepository.listByThreadId:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) => rows as ReadonlyArray<Schema.Schema.Type<typeof ProjectionTurn>>),\n    );\n\n  const getByTurnId: ProjectionTurnRepositoryShape[\"getByTurnId\"] = (input) =>\n    getProjectionTurnByTurnId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionTurnRepository.getByTurnId:query\",\n          \"ProjectionTurnRepository.getByTurnId:decodeRow\",\n        ),\n      ),\n      Effect.flatMap((rowOption) =>\n        Option.match(rowOption, {\n          onNone: () => Effect.succeed(Option.none()),\n          onSome: (row) =>\n            Effect.succeed(Option.some(row as Schema.Schema.Type<typeof ProjectionTurnById>)),\n        }),\n      ),\n    );\n\n  const clearCheckpointTurnConflict: ProjectionTurnRepositoryShape[\"clearCheckpointTurnConflict\"] =\n    (input) =>\n      clearCheckpointTurnConflictRow(input).pipe(\n        Effect.mapError(\n          toPersistenceSqlError(\"ProjectionTurnRepository.clearCheckpointTurnConflict:query\"),\n        ),\n      );\n\n  const deleteByThreadId: ProjectionTurnRepositoryShape[\"deleteByThreadId\"] = (input) =>\n    deleteProjectionTurnsByThread(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionTurnRepository.deleteByThreadId:query\")),\n    );\n\n  return {\n    upsertByTurnId,\n    appendPendingTurnStart,\n    getPendingTurnStartByThreadId,\n    listPendingTurnStarts,\n    deletePendingTurnStart,\n    deletePendingTurnStartByThreadId,\n    listByThreadId,\n    getByTurnId,\n    clearCheckpointTurnConflict,\n    deleteByThreadId,\n  } satisfies ProjectionTurnRepositoryShape;\n});\n\nexport const ProjectionTurnRepositoryLive = Layer.effect(\n  ProjectionTurnRepository,\n  makeProjectionTurnRepository,\n);\n","import * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\n\nimport { toPersistenceSqlError } from \"../Errors.ts\";\nimport {\n  DeleteProjectionThreadInput,\n  GetProjectionThreadInput,\n  ListProjectionThreadsByProjectInput,\n  ProjectionThread,\n  ProjectionThreadRepository,\n  type ProjectionThreadRepositoryShape,\n} from \"../Services/ProjectionThreads.ts\";\nimport { ModelSelection } from \"@salchi/contracts\";\n\nconst ProjectionThreadDbRow = ProjectionThread.mapFields(\n  Struct.assign({\n    modelSelection: Schema.fromJsonString(ModelSelection),\n  }),\n);\ntype ProjectionThreadDbRow = typeof ProjectionThreadDbRow.Type;\n\nfunction sqliteBoolean(value: boolean | number | null | undefined): number {\n  return value === true || value === 1 ? 1 : 0;\n}\n\nconst makeProjectionThreadRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertProjectionThreadRow = SqlSchema.void({\n    Request: ProjectionThread,\n    execute: (row) =>\n      sql`\n        INSERT INTO projection_threads (\n          thread_id,\n          project_id,\n          title,\n          model_selection_json,\n          runtime_mode,\n          interaction_mode,\n          parent_thread_id,\n          created_by_thread_id,\n          subagent_kind,\n          subagent_nickname,\n          subagent_role,\n          hidden_from_thread_list,\n          branch,\n          worktree_path,\n          latest_turn_id,\n          created_at,\n          updated_at,\n          archived_at,\n          latest_user_message_at,\n          pending_approval_count,\n          pending_user_input_count,\n          has_actionable_proposed_plan,\n          deleted_at\n        )\n        VALUES (\n          ${row.threadId},\n          ${row.projectId},\n          ${row.title},\n          ${JSON.stringify(row.modelSelection)},\n          ${row.runtimeMode},\n          ${row.interactionMode},\n          ${row.parentThreadId ?? null},\n          ${row.createdByThreadId ?? null},\n          ${row.subagentKind ?? null},\n          ${row.subagentNickname ?? null},\n          ${row.subagentRole ?? null},\n          ${sqliteBoolean(row.hiddenFromThreadList)},\n          ${row.branch},\n          ${row.worktreePath},\n          ${row.latestTurnId},\n          ${row.createdAt},\n          ${row.updatedAt},\n          ${row.archivedAt},\n          ${row.latestUserMessageAt},\n          ${row.pendingApprovalCount},\n          ${row.pendingUserInputCount},\n          ${row.hasActionableProposedPlan},\n          ${row.deletedAt}\n        )\n        ON CONFLICT (thread_id)\n        DO UPDATE SET\n          project_id = excluded.project_id,\n          title = excluded.title,\n          model_selection_json = excluded.model_selection_json,\n          runtime_mode = excluded.runtime_mode,\n          interaction_mode = excluded.interaction_mode,\n          parent_thread_id = excluded.parent_thread_id,\n          created_by_thread_id = excluded.created_by_thread_id,\n          subagent_kind = excluded.subagent_kind,\n          subagent_nickname = excluded.subagent_nickname,\n          subagent_role = excluded.subagent_role,\n          hidden_from_thread_list = excluded.hidden_from_thread_list,\n          branch = excluded.branch,\n          worktree_path = excluded.worktree_path,\n          latest_turn_id = excluded.latest_turn_id,\n          created_at = excluded.created_at,\n          updated_at = excluded.updated_at,\n          archived_at = excluded.archived_at,\n          latest_user_message_at = excluded.latest_user_message_at,\n          pending_approval_count = excluded.pending_approval_count,\n          pending_user_input_count = excluded.pending_user_input_count,\n          has_actionable_proposed_plan = excluded.has_actionable_proposed_plan,\n          deleted_at = excluded.deleted_at\n      `,\n  });\n\n  const getProjectionThreadRow = SqlSchema.findOneOption({\n    Request: GetProjectionThreadInput,\n    Result: ProjectionThreadDbRow,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          project_id AS \"projectId\",\n          title,\n          model_selection_json AS \"modelSelection\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          parent_thread_id AS \"parentThreadId\",\n          created_by_thread_id AS \"createdByThreadId\",\n          subagent_kind AS \"subagentKind\",\n          subagent_nickname AS \"subagentNickname\",\n          subagent_role AS \"subagentRole\",\n          hidden_from_thread_list AS \"hiddenFromThreadList\",\n          branch,\n          worktree_path AS \"worktreePath\",\n          latest_turn_id AS \"latestTurnId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          archived_at AS \"archivedAt\",\n          latest_user_message_at AS \"latestUserMessageAt\",\n          pending_approval_count AS \"pendingApprovalCount\",\n          pending_user_input_count AS \"pendingUserInputCount\",\n          has_actionable_proposed_plan AS \"hasActionableProposedPlan\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_threads\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const listProjectionThreadRows = SqlSchema.findAll({\n    Request: ListProjectionThreadsByProjectInput,\n    Result: ProjectionThreadDbRow,\n    execute: ({ projectId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          project_id AS \"projectId\",\n          title,\n          model_selection_json AS \"modelSelection\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          parent_thread_id AS \"parentThreadId\",\n          created_by_thread_id AS \"createdByThreadId\",\n          subagent_kind AS \"subagentKind\",\n          subagent_nickname AS \"subagentNickname\",\n          subagent_role AS \"subagentRole\",\n          hidden_from_thread_list AS \"hiddenFromThreadList\",\n          branch,\n          worktree_path AS \"worktreePath\",\n          latest_turn_id AS \"latestTurnId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          archived_at AS \"archivedAt\",\n          latest_user_message_at AS \"latestUserMessageAt\",\n          pending_approval_count AS \"pendingApprovalCount\",\n          pending_user_input_count AS \"pendingUserInputCount\",\n          has_actionable_proposed_plan AS \"hasActionableProposedPlan\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_threads\n        WHERE project_id = ${projectId}\n        ORDER BY created_at ASC, thread_id ASC\n      `,\n  });\n\n  const deleteProjectionThreadRow = SqlSchema.void({\n    Request: DeleteProjectionThreadInput,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM projection_threads\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsert: ProjectionThreadRepositoryShape[\"upsert\"] = (row) =>\n    upsertProjectionThreadRow(row).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadRepository.upsert:query\")),\n    );\n\n  const getById: ProjectionThreadRepositoryShape[\"getById\"] = (input) =>\n    getProjectionThreadRow(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadRepository.getById:query\")),\n    );\n\n  const listByProjectId: ProjectionThreadRepositoryShape[\"listByProjectId\"] = (input) =>\n    listProjectionThreadRows(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadRepository.listByProjectId:query\")),\n    );\n\n  const deleteById: ProjectionThreadRepositoryShape[\"deleteById\"] = (input) =>\n    deleteProjectionThreadRow(input).pipe(\n      Effect.mapError(toPersistenceSqlError(\"ProjectionThreadRepository.deleteById:query\")),\n    );\n\n  return {\n    upsert,\n    getById,\n    listByProjectId,\n    deleteById,\n  } satisfies ProjectionThreadRepositoryShape;\n});\n\nexport const ProjectionThreadRepositoryLive = Layer.effect(\n  ProjectionThreadRepository,\n  makeProjectionThreadRepository,\n);\n","// @effect-diagnostics nodeBuiltinImport:off\nimport NodePath from \"node:path\";\n\nexport const ATTACHMENTS_ROUTE_PREFIX = \"/attachments\";\n\nexport function normalizeAttachmentRelativePath(rawRelativePath: string): string | null {\n  const normalized = NodePath.normalize(rawRelativePath).replace(/^[/\\\\]+/, \"\");\n  if (normalized.length === 0 || normalized.startsWith(\"..\") || normalized.includes(\"\\0\")) {\n    return null;\n  }\n  return normalized.replace(/\\\\/g, \"/\");\n}\n\nexport function resolveAttachmentRelativePath(input: {\n  readonly attachmentsDir: string;\n  readonly relativePath: string;\n}): string | null {\n  const normalizedRelativePath = normalizeAttachmentRelativePath(input.relativePath);\n  if (!normalizedRelativePath) {\n    return null;\n  }\n\n  const attachmentsRoot = NodePath.resolve(input.attachmentsDir);\n  const filePath = NodePath.resolve(NodePath.join(attachmentsRoot, normalizedRelativePath));\n  if (!filePath.startsWith(`${attachmentsRoot}${NodePath.sep}`)) {\n    return null;\n  }\n  return filePath;\n}\n","export const IMAGE_EXTENSION_BY_MIME_TYPE: Record<string, string> = {\n  \"image/avif\": \".avif\",\n  \"image/bmp\": \".bmp\",\n  \"image/gif\": \".gif\",\n  \"image/heic\": \".heic\",\n  \"image/heif\": \".heif\",\n  \"image/jpeg\": \".jpg\",\n  \"image/jpg\": \".jpg\",\n  \"image/png\": \".png\",\n  \"image/svg+xml\": \".svg\",\n  \"image/tiff\": \".tiff\",\n  \"image/webp\": \".webp\",\n};\n\nexport const MIME_TYPE_BY_IMAGE_EXTENSION: Record<string, string> = {\n  \".avif\": \"image/avif\",\n  \".bmp\": \"image/bmp\",\n  \".gif\": \"image/gif\",\n  \".heic\": \"image/heic\",\n  \".heif\": \"image/heif\",\n  \".ico\": \"image/x-icon\",\n  \".jpeg\": \"image/jpeg\",\n  \".jpg\": \"image/jpeg\",\n  \".png\": \"image/png\",\n  \".svg\": \"image/svg+xml\",\n  \".tiff\": \"image/tiff\",\n  \".webp\": \"image/webp\",\n};\n\nexport const SAFE_IMAGE_FILE_EXTENSIONS = new Set([\n  \".avif\",\n  \".bmp\",\n  \".gif\",\n  \".heic\",\n  \".heif\",\n  \".ico\",\n  \".jpeg\",\n  \".jpg\",\n  \".png\",\n  \".svg\",\n  \".tiff\",\n  \".webp\",\n]);\n\nexport function imageExtensionFromFileName(fileName: string): string | null {\n  const extensionMatch = /\\.([a-z0-9]{1,8})$/i.exec(fileName.trim());\n  const extension = extensionMatch ? `.${extensionMatch[1]!.toLowerCase()}` : \"\";\n  return SAFE_IMAGE_FILE_EXTENSIONS.has(extension) ? extension : null;\n}\n\nexport function imageMimeTypeFromFileName(fileName: string): string | null {\n  const extension = imageExtensionFromFileName(fileName);\n  if (!extension) {\n    return null;\n  }\n  return Object.hasOwn(MIME_TYPE_BY_IMAGE_EXTENSION, extension)\n    ? (MIME_TYPE_BY_IMAGE_EXTENSION[extension] ?? null)\n    : null;\n}\n\nexport function isSafeImageFileName(fileName: string): boolean {\n  return imageMimeTypeFromFileName(fileName) !== null;\n}\n","import Mime from \"@effect/platform-node/Mime\";\nimport {\n  IMAGE_EXTENSION_BY_MIME_TYPE,\n  MIME_TYPE_BY_IMAGE_EXTENSION,\n  SAFE_IMAGE_FILE_EXTENSIONS,\n  imageExtensionFromFileName as sharedImageExtensionFromFileName,\n} from \"@salchi/shared/imageMime\";\n\nexport { IMAGE_EXTENSION_BY_MIME_TYPE, MIME_TYPE_BY_IMAGE_EXTENSION, SAFE_IMAGE_FILE_EXTENSIONS };\n\nexport function imageExtensionFromFileName(fileName: string): string | null {\n  return sharedImageExtensionFromFileName(fileName);\n}\n\nexport function imageMimeTypeFromFileName(fileName: string): string | null {\n  const extension = imageExtensionFromFileName(fileName);\n  if (!extension) {\n    return null;\n  }\n  if (Object.hasOwn(MIME_TYPE_BY_IMAGE_EXTENSION, extension)) {\n    return MIME_TYPE_BY_IMAGE_EXTENSION[extension] ?? null;\n  }\n  const inferred = Mime.getType(fileName);\n  return inferred?.startsWith(\"image/\") ? inferred : null;\n}\n\nexport function isSafeImageFileName(fileName: string): boolean {\n  return imageMimeTypeFromFileName(fileName) !== null;\n}\n\nexport function parseBase64DataUrl(\n  dataUrl: string,\n): { readonly mimeType: string; readonly base64: string } | null {\n  const match = /^data:([^,]+),([a-z0-9+/=\\r\\n ]+)$/i.exec(dataUrl.trim());\n  if (!match) return null;\n\n  const headerParts: Array<string> = [];\n  for (const part of (match[1] ?? \"\").split(\";\")) {\n    const trimmed = part.trim();\n    if (trimmed.length > 0) {\n      headerParts.push(trimmed);\n    }\n  }\n  if (headerParts.length < 2) {\n    return null;\n  }\n  const trailingToken = headerParts.at(-1)?.toLowerCase();\n  if (trailingToken !== \"base64\") {\n    return null;\n  }\n\n  const mimeType = headerParts[0]?.toLowerCase();\n  const base64 = match[2]?.replace(/\\s+/g, \"\");\n  if (!mimeType || !base64) return null;\n\n  return { mimeType, base64 };\n}\n\nexport function inferImageExtension(input: { mimeType: string; fileName?: string }): string {\n  const key = input.mimeType.toLowerCase();\n  const fromMime = Object.hasOwn(IMAGE_EXTENSION_BY_MIME_TYPE, key)\n    ? IMAGE_EXTENSION_BY_MIME_TYPE[key]\n    : undefined;\n  if (fromMime) {\n    return fromMime;\n  }\n\n  const fromMimeExtension = Mime.getExtension(input.mimeType);\n  if (fromMimeExtension && SAFE_IMAGE_FILE_EXTENSIONS.has(fromMimeExtension)) {\n    return fromMimeExtension;\n  }\n\n  const fileName = input.fileName?.trim() ?? \"\";\n  const extensionMatch = /\\.([a-z0-9]{1,8})$/i.exec(fileName);\n  const fileNameExtension = extensionMatch ? `.${extensionMatch[1]!.toLowerCase()}` : \"\";\n  if (SAFE_IMAGE_FILE_EXTENSIONS.has(fileNameExtension)) {\n    return fileNameExtension;\n  }\n\n  return \".bin\";\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\n\nimport type { ChatAttachment } from \"@salchi/contracts\";\n\nimport {\n  normalizeAttachmentRelativePath,\n  resolveAttachmentRelativePath,\n} from \"./attachmentPaths.ts\";\nimport { inferImageExtension, SAFE_IMAGE_FILE_EXTENSIONS } from \"./imageMime.ts\";\n\nconst PDF_FILE_EXTENSION = \".pdf\";\nconst ATTACHMENT_FILENAME_EXTENSIONS = [...SAFE_IMAGE_FILE_EXTENSIONS, PDF_FILE_EXTENSION, \".bin\"];\nconst ATTACHMENT_ID_THREAD_SEGMENT_MAX_CHARS = 80;\nconst ATTACHMENT_ID_THREAD_SEGMENT_PATTERN = \"[a-z0-9_]+(?:-[a-z0-9_]+)*\";\nconst ATTACHMENT_ID_UUID_PATTERN = \"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\";\nconst ATTACHMENT_ID_PATTERN = new RegExp(\n  `^(${ATTACHMENT_ID_THREAD_SEGMENT_PATTERN})-(${ATTACHMENT_ID_UUID_PATTERN})$`,\n  \"i\",\n);\n\nexport function toSafeThreadAttachmentSegment(threadId: string): string | null {\n  const segment = threadId\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9_-]+/gi, \"-\")\n    .replace(/-+/g, \"-\")\n    .replace(/^[-_]+|[-_]+$/g, \"\")\n    .slice(0, ATTACHMENT_ID_THREAD_SEGMENT_MAX_CHARS)\n    .replace(/[-_]+$/g, \"\");\n  if (segment.length === 0) {\n    return null;\n  }\n  return segment;\n}\n\nexport function createAttachmentId(threadId: string): string | null {\n  const threadSegment = toSafeThreadAttachmentSegment(threadId);\n  if (!threadSegment) {\n    return null;\n  }\n  return `${threadSegment}-${randomUUID()}`;\n}\n\nfunction uuidFromStableKey(stableKey: string): string {\n  const bytes = createHash(\"sha256\").update(stableKey).digest().subarray(0, 16);\n  bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;\n  bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n  const hex = bytes.toString(\"hex\");\n  return [\n    hex.slice(0, 8),\n    hex.slice(8, 12),\n    hex.slice(12, 16),\n    hex.slice(16, 20),\n    hex.slice(20, 32),\n  ].join(\"-\");\n}\n\nexport function createStableAttachmentId(threadId: string, stableKey: string): string | null {\n  const threadSegment = toSafeThreadAttachmentSegment(threadId);\n  const trimmedStableKey = stableKey.trim();\n  if (!threadSegment || trimmedStableKey.length === 0) {\n    return null;\n  }\n  return `${threadSegment}-${uuidFromStableKey(`${threadSegment}:${trimmedStableKey}`)}`;\n}\n\nexport function parseThreadSegmentFromAttachmentId(attachmentId: string): string | null {\n  const normalizedId = normalizeAttachmentRelativePath(attachmentId);\n  if (!normalizedId || normalizedId.includes(\"/\") || normalizedId.includes(\".\")) {\n    return null;\n  }\n  const match = normalizedId.match(ATTACHMENT_ID_PATTERN);\n  if (!match) {\n    return null;\n  }\n  return match[1]?.toLowerCase() ?? null;\n}\n\nexport function attachmentRelativePath(attachment: ChatAttachment): string {\n  switch (attachment.type) {\n    case \"image\": {\n      const extension = inferImageExtension({\n        mimeType: attachment.mimeType,\n        fileName: attachment.name,\n      });\n      return `${attachment.id}${extension}`;\n    }\n    case \"pdf\":\n      return `${attachment.id}${PDF_FILE_EXTENSION}`;\n  }\n}\n\nexport function resolveAttachmentPath(input: {\n  readonly attachmentsDir: string;\n  readonly attachment: ChatAttachment;\n}): string | null {\n  return resolveAttachmentRelativePath({\n    attachmentsDir: input.attachmentsDir,\n    relativePath: attachmentRelativePath(input.attachment),\n  });\n}\n\nexport function resolveAttachmentPathById(input: {\n  readonly attachmentsDir: string;\n  readonly attachmentId: string;\n}): string | null {\n  const normalizedId = normalizeAttachmentRelativePath(input.attachmentId);\n  if (!normalizedId || normalizedId.includes(\"/\") || normalizedId.includes(\".\")) {\n    return null;\n  }\n  for (const extension of ATTACHMENT_FILENAME_EXTENSIONS) {\n    const maybePath = resolveAttachmentRelativePath({\n      attachmentsDir: input.attachmentsDir,\n      relativePath: `${normalizedId}${extension}`,\n    });\n    if (maybePath && existsSync(maybePath)) {\n      return maybePath;\n    }\n  }\n  return null;\n}\n\nexport function parseAttachmentIdFromRelativePath(relativePath: string): string | null {\n  const normalized = normalizeAttachmentRelativePath(relativePath);\n  if (!normalized || normalized.includes(\"/\")) {\n    return null;\n  }\n  const extensionIndex = normalized.lastIndexOf(\".\");\n  if (extensionIndex <= 0) {\n    return null;\n  }\n  const id = normalized.slice(0, extensionIndex);\n  return id.length > 0 && !id.includes(\".\") ? id : null;\n}\n","import {\n  ApprovalRequestId,\n  type ChatAttachment,\n  type OrchestrationEvent,\n  type OrchestrationSessionStatus,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Stream from \"effect/Stream\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nimport { toPersistenceSqlError, type ProjectionRepositoryError } from \"../../persistence/Errors.ts\";\nimport { OrchestrationEventStore } from \"../../persistence/Services/OrchestrationEventStore.ts\";\nimport { ProjectionPendingApprovalRepository } from \"../../persistence/Services/ProjectionPendingApprovals.ts\";\nimport { ProjectionProjectRepository } from \"../../persistence/Services/ProjectionProjects.ts\";\nimport { ProjectionStateRepository } from \"../../persistence/Services/ProjectionState.ts\";\nimport { ProjectionThreadActivityRepository } from \"../../persistence/Services/ProjectionThreadActivities.ts\";\nimport { type ProjectionThreadActivity } from \"../../persistence/Services/ProjectionThreadActivities.ts\";\nimport {\n  type ProjectionThreadMessage,\n  ProjectionThreadMessageRepository,\n} from \"../../persistence/Services/ProjectionThreadMessages.ts\";\nimport {\n  type ProjectionThreadProposedPlan,\n  ProjectionThreadProposedPlanRepository,\n} from \"../../persistence/Services/ProjectionThreadProposedPlans.ts\";\nimport {\n  type ProjectionThreadQueuedTurn,\n  ProjectionThreadQueuedTurnRepository,\n} from \"../../persistence/Services/ProjectionThreadQueuedTurns.ts\";\nimport { ProjectionThreadSessionRepository } from \"../../persistence/Services/ProjectionThreadSessions.ts\";\nimport {\n  type ProjectionTurn,\n  ProjectionTurnRepository,\n} from \"../../persistence/Services/ProjectionTurns.ts\";\nimport { ProjectionThreadRepository } from \"../../persistence/Services/ProjectionThreads.ts\";\nimport { ProjectionPendingApprovalRepositoryLive } from \"../../persistence/Layers/ProjectionPendingApprovals.ts\";\nimport { ProjectionProjectRepositoryLive } from \"../../persistence/Layers/ProjectionProjects.ts\";\nimport { ProjectionStateRepositoryLive } from \"../../persistence/Layers/ProjectionState.ts\";\nimport { ProjectionThreadActivityRepositoryLive } from \"../../persistence/Layers/ProjectionThreadActivities.ts\";\nimport { ProjectionThreadMessageRepositoryLive } from \"../../persistence/Layers/ProjectionThreadMessages.ts\";\nimport { ProjectionThreadProposedPlanRepositoryLive } from \"../../persistence/Layers/ProjectionThreadProposedPlans.ts\";\nimport { ProjectionThreadQueuedTurnRepositoryLive } from \"../../persistence/Layers/ProjectionThreadQueuedTurns.ts\";\nimport { ProjectionThreadSessionRepositoryLive } from \"../../persistence/Layers/ProjectionThreadSessions.ts\";\nimport { ProjectionTurnRepositoryLive } from \"../../persistence/Layers/ProjectionTurns.ts\";\nimport { ProjectionThreadRepositoryLive } from \"../../persistence/Layers/ProjectionThreads.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport {\n  OrchestrationProjectionPipeline,\n  type OrchestrationProjectionPipelineShape,\n} from \"../Services/ProjectionPipeline.ts\";\nimport {\n  attachmentRelativePath,\n  parseAttachmentIdFromRelativePath,\n  parseThreadSegmentFromAttachmentId,\n  toSafeThreadAttachmentSegment,\n} from \"../../attachmentStore.ts\";\n\nexport const ORCHESTRATION_PROJECTOR_NAMES = {\n  projects: \"projection.projects\",\n  threads: \"projection.threads\",\n  threadMessages: \"projection.thread-messages\",\n  threadProposedPlans: \"projection.thread-proposed-plans\",\n  threadQueuedTurns: \"projection.thread-queued-turns\",\n  threadActivities: \"projection.thread-activities\",\n  threadSessions: \"projection.thread-sessions\",\n  threadTurns: \"projection.thread-turns\",\n  checkpoints: \"projection.checkpoints\",\n  pendingApprovals: \"projection.pending-approvals\",\n} as const;\n\ntype ProjectorName =\n  (typeof ORCHESTRATION_PROJECTOR_NAMES)[keyof typeof ORCHESTRATION_PROJECTOR_NAMES];\n\nfunction maxIsoTimestamp(left: string | null | undefined, right: string): string {\n  if (!left) {\n    return right;\n  }\n\n  const leftTimestamp = Date.parse(left);\n  const rightTimestamp = Date.parse(right);\n  if (!Number.isFinite(leftTimestamp)) {\n    return right;\n  }\n  if (!Number.isFinite(rightTimestamp)) {\n    return left;\n  }\n  return rightTimestamp > leftTimestamp ? right : left;\n}\n\n/**\n * Turn state to settle still-running turns with when their session leaves the\n * \"running\" status, or null while the session is (re)starting or running and\n * turns must stay unsettled.\n */\nfunction settledTurnStateForSessionStatus(\n  status: OrchestrationSessionStatus,\n): \"completed\" | \"interrupted\" | \"error\" | null {\n  switch (status) {\n    case \"idle\":\n    case \"ready\":\n      return \"completed\";\n    case \"error\":\n      return \"error\";\n    case \"interrupted\":\n    case \"stopped\":\n      return \"interrupted\";\n    case \"starting\":\n    case \"running\":\n      return null;\n  }\n}\n\ninterface ProjectorDefinition {\n  readonly name: ProjectorName;\n  readonly apply: (\n    event: OrchestrationEvent,\n    attachmentSideEffects: AttachmentSideEffects,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\ninterface AttachmentSideEffects {\n  readonly deletedThreadIds: Set<string>;\n  readonly prunedThreadRelativePaths: Map<string, Set<string>>;\n}\n\nfunction checkpointStatusToProjectionTurnState(\n  status: \"ready\" | \"missing\" | \"error\",\n): ProjectionTurn[\"state\"] {\n  if (status === \"error\") {\n    return \"error\";\n  }\n  if (status === \"missing\") {\n    return \"interrupted\";\n  }\n  return \"completed\";\n}\n\nconst materializeAttachmentsForProjection = Effect.fn(\"materializeAttachmentsForProjection\")(\n  (input: { readonly attachments: ReadonlyArray<ChatAttachment> }) =>\n    Effect.succeed(input.attachments.length === 0 ? [] : input.attachments),\n);\n\nfunction extractActivityRequestId(payload: unknown): ApprovalRequestId | null {\n  if (typeof payload !== \"object\" || payload === null) {\n    return null;\n  }\n  const requestId = (payload as Record<string, unknown>).requestId;\n  return typeof requestId === \"string\" ? ApprovalRequestId.make(requestId) : null;\n}\n\nfunction isStalePendingApprovalFailureDetail(detail: string | null): boolean {\n  if (detail === null) {\n    return false;\n  }\n  return (\n    detail.includes(\"stale pending approval request\") ||\n    detail.includes(\"unknown pending approval request\") ||\n    detail.includes(\"unknown pending permission request\")\n  );\n}\n\nfunction derivePendingUserInputCountFromActivities(\n  activities: ReadonlyArray<ProjectionThreadActivity>,\n): number {\n  const openRequestIds = new Set<string>();\n  const ordered = [...activities].toSorted(\n    (left, right) =>\n      left.createdAt.localeCompare(right.createdAt) ||\n      left.activityId.localeCompare(right.activityId),\n  );\n\n  for (const activity of ordered) {\n    const requestId = extractActivityRequestId(activity.payload);\n    if (requestId === null) {\n      continue;\n    }\n    const payload =\n      typeof activity.payload === \"object\" && activity.payload !== null\n        ? (activity.payload as Record<string, unknown>)\n        : null;\n    const detail = typeof payload?.detail === \"string\" ? payload.detail.toLowerCase() : null;\n\n    if (activity.kind === \"user-input.requested\") {\n      openRequestIds.add(requestId);\n      continue;\n    }\n\n    if (activity.kind === \"user-input.resolved\") {\n      openRequestIds.delete(requestId);\n      continue;\n    }\n\n    if (\n      activity.kind === \"provider.user-input.respond.failed\" &&\n      detail !== null &&\n      (detail.includes(\"stale pending user-input request\") ||\n        detail.includes(\"unknown pending user-input request\") ||\n        detail.includes(\"unknown pending user input request\") ||\n        detail.includes(\"unknown pending codex user input request\"))\n    ) {\n      openRequestIds.delete(requestId);\n    }\n  }\n\n  return openRequestIds.size;\n}\n\nfunction deriveHasActionableProposedPlan(input: {\n  readonly latestTurnId: string | null;\n  readonly proposedPlans: ReadonlyArray<ProjectionThreadProposedPlan>;\n}): boolean {\n  const sorted = [...input.proposedPlans].toSorted(\n    (left, right) =>\n      left.updatedAt.localeCompare(right.updatedAt) || left.planId.localeCompare(right.planId),\n  );\n\n  let latestForTurn: ProjectionThreadProposedPlan | null = null;\n  if (input.latestTurnId !== null) {\n    for (let index = sorted.length - 1; index >= 0; index -= 1) {\n      const plan = sorted[index];\n      if (plan?.turnId === input.latestTurnId) {\n        latestForTurn = plan;\n        break;\n      }\n    }\n  }\n  if (latestForTurn !== null) {\n    return latestForTurn.implementedAt === null;\n  }\n\n  const latestPlan = sorted.at(-1) ?? null;\n  return latestPlan !== null && latestPlan.implementedAt === null;\n}\n\nfunction retainProjectionMessagesAfterRevert(\n  messages: ReadonlyArray<ProjectionThreadMessage>,\n  turns: ReadonlyArray<ProjectionTurn>,\n  turnCount: number,\n): ReadonlyArray<ProjectionThreadMessage> {\n  const retainedMessageIds = new Set<string>();\n  const retainedTurnIds = new Set<string>();\n  const keptTurns = turns.filter(\n    (turn) =>\n      turn.turnId !== null &&\n      turn.checkpointTurnCount !== null &&\n      turn.checkpointTurnCount <= turnCount,\n  );\n  for (const turn of keptTurns) {\n    if (turn.turnId !== null) {\n      retainedTurnIds.add(turn.turnId);\n    }\n    if (turn.pendingMessageId !== null) {\n      retainedMessageIds.add(turn.pendingMessageId);\n    }\n    if (turn.assistantMessageId !== null) {\n      retainedMessageIds.add(turn.assistantMessageId);\n    }\n  }\n\n  for (const message of messages) {\n    if (message.role === \"system\") {\n      retainedMessageIds.add(message.messageId);\n      continue;\n    }\n    if (message.turnId !== null && retainedTurnIds.has(message.turnId)) {\n      retainedMessageIds.add(message.messageId);\n    }\n  }\n\n  const retainedUserCount = messages.filter(\n    (message) => message.role === \"user\" && retainedMessageIds.has(message.messageId),\n  ).length;\n  const missingUserCount = Math.max(0, turnCount - retainedUserCount);\n  if (missingUserCount > 0) {\n    const fallbackUserMessages = messages\n      .filter(\n        (message) =>\n          message.role === \"user\" &&\n          !retainedMessageIds.has(message.messageId) &&\n          (message.turnId === null || retainedTurnIds.has(message.turnId)),\n      )\n      .toSorted(\n        (left, right) =>\n          left.createdAt.localeCompare(right.createdAt) ||\n          left.messageId.localeCompare(right.messageId),\n      )\n      .slice(0, missingUserCount);\n    for (const message of fallbackUserMessages) {\n      retainedMessageIds.add(message.messageId);\n    }\n  }\n\n  const retainedAssistantCount = messages.filter(\n    (message) => message.role === \"assistant\" && retainedMessageIds.has(message.messageId),\n  ).length;\n  const missingAssistantCount = Math.max(0, turnCount - retainedAssistantCount);\n  if (missingAssistantCount > 0) {\n    const fallbackAssistantMessages = messages\n      .filter(\n        (message) =>\n          message.role === \"assistant\" &&\n          !retainedMessageIds.has(message.messageId) &&\n          (message.turnId === null || retainedTurnIds.has(message.turnId)),\n      )\n      .toSorted(\n        (left, right) =>\n          left.createdAt.localeCompare(right.createdAt) ||\n          left.messageId.localeCompare(right.messageId),\n      )\n      .slice(0, missingAssistantCount);\n    for (const message of fallbackAssistantMessages) {\n      retainedMessageIds.add(message.messageId);\n    }\n  }\n\n  return messages.filter((message) => retainedMessageIds.has(message.messageId));\n}\n\nfunction retainProjectionActivitiesAfterRevert(\n  activities: ReadonlyArray<ProjectionThreadActivity>,\n  turns: ReadonlyArray<ProjectionTurn>,\n  turnCount: number,\n): ReadonlyArray<ProjectionThreadActivity> {\n  const retainedTurnIds = new Set<string>(\n    turns\n      .filter(\n        (turn) =>\n          turn.turnId !== null &&\n          turn.checkpointTurnCount !== null &&\n          turn.checkpointTurnCount <= turnCount,\n      )\n      .flatMap((turn) => (turn.turnId === null ? [] : [turn.turnId])),\n  );\n  return activities.filter(\n    (activity) => activity.turnId === null || retainedTurnIds.has(activity.turnId),\n  );\n}\n\nfunction retainProjectionProposedPlansAfterRevert(\n  proposedPlans: ReadonlyArray<ProjectionThreadProposedPlan>,\n  turns: ReadonlyArray<ProjectionTurn>,\n  turnCount: number,\n): ReadonlyArray<ProjectionThreadProposedPlan> {\n  const retainedTurnIds = new Set<string>(\n    turns\n      .filter(\n        (turn) =>\n          turn.turnId !== null &&\n          turn.checkpointTurnCount !== null &&\n          turn.checkpointTurnCount <= turnCount,\n      )\n      .flatMap((turn) => (turn.turnId === null ? [] : [turn.turnId])),\n  );\n  return proposedPlans.filter(\n    (proposedPlan) => proposedPlan.turnId === null || retainedTurnIds.has(proposedPlan.turnId),\n  );\n}\n\nfunction collectThreadAttachmentRelativePaths(\n  threadId: string,\n  attachmentOwners: ReadonlyArray<{\n    readonly attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  }>,\n): Set<string> {\n  const threadSegment = toSafeThreadAttachmentSegment(threadId);\n  if (!threadSegment) {\n    return new Set();\n  }\n  const relativePaths = new Set<string>();\n  for (const owner of attachmentOwners) {\n    for (const attachment of owner.attachments ?? []) {\n      if (attachment.type !== \"image\") {\n        continue;\n      }\n      const attachmentThreadSegment = parseThreadSegmentFromAttachmentId(attachment.id);\n      if (!attachmentThreadSegment || attachmentThreadSegment !== threadSegment) {\n        continue;\n      }\n      relativePaths.add(attachmentRelativePath(attachment));\n    }\n  }\n  return relativePaths;\n}\n\nconst runAttachmentSideEffects = Effect.fn(\"runAttachmentSideEffects\")(function* (\n  sideEffects: AttachmentSideEffects,\n) {\n  const serverConfig = yield* Effect.service(ServerConfig);\n  const fileSystem = yield* Effect.service(FileSystem.FileSystem);\n  const path = yield* Effect.service(Path.Path);\n\n  const attachmentsRootDir = serverConfig.attachmentsDir;\n  const readAttachmentRootEntries = fileSystem\n    .readDirectory(attachmentsRootDir, { recursive: false })\n    .pipe(Effect.catch(() => Effect.succeed([] as Array<string>)));\n\n  const removeDeletedThreadAttachmentEntry = Effect.fn(\"removeDeletedThreadAttachmentEntry\")(\n    function* (threadSegment: string, entry: string) {\n      const normalizedEntry = entry.replace(/^[/\\\\]+/, \"\").replace(/\\\\/g, \"/\");\n      if (normalizedEntry.length === 0 || normalizedEntry.includes(\"/\")) {\n        return;\n      }\n      const attachmentId = parseAttachmentIdFromRelativePath(normalizedEntry);\n      if (!attachmentId) {\n        return;\n      }\n      const attachmentThreadSegment = parseThreadSegmentFromAttachmentId(attachmentId);\n      if (!attachmentThreadSegment || attachmentThreadSegment !== threadSegment) {\n        return;\n      }\n      yield* fileSystem.remove(path.join(attachmentsRootDir, normalizedEntry), {\n        force: true,\n      });\n    },\n  );\n\n  const deleteThreadAttachments = Effect.fn(\"deleteThreadAttachments\")(function* (\n    threadId: string,\n  ) {\n    const threadSegment = toSafeThreadAttachmentSegment(threadId);\n    if (!threadSegment) {\n      yield* Effect.logWarning(\"skipping attachment cleanup for unsafe thread id\", {\n        threadId,\n      });\n      return;\n    }\n\n    const entries = yield* readAttachmentRootEntries;\n    yield* Effect.forEach(\n      entries,\n      (entry) => removeDeletedThreadAttachmentEntry(threadSegment, entry),\n      {\n        concurrency: 1,\n      },\n    );\n  });\n\n  const pruneThreadAttachmentEntry = Effect.fn(\"pruneThreadAttachmentEntry\")(function* (\n    threadSegment: string,\n    keptThreadRelativePaths: Set<string>,\n    entry: string,\n  ) {\n    const relativePath = entry.replace(/^[/\\\\]+/, \"\").replace(/\\\\/g, \"/\");\n    if (relativePath.length === 0 || relativePath.includes(\"/\")) {\n      return;\n    }\n    const attachmentId = parseAttachmentIdFromRelativePath(relativePath);\n    if (!attachmentId) {\n      return;\n    }\n    const attachmentThreadSegment = parseThreadSegmentFromAttachmentId(attachmentId);\n    if (!attachmentThreadSegment || attachmentThreadSegment !== threadSegment) {\n      return;\n    }\n\n    const absolutePath = path.join(attachmentsRootDir, relativePath);\n    const fileInfo = yield* fileSystem\n      .stat(absolutePath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!fileInfo || fileInfo.type !== \"File\") {\n      return;\n    }\n\n    if (!keptThreadRelativePaths.has(relativePath)) {\n      yield* fileSystem.remove(absolutePath, { force: true });\n    }\n  });\n\n  const pruneThreadAttachments = Effect.fn(\"pruneThreadAttachments\")(function* (\n    threadId: string,\n    keptThreadRelativePaths: Set<string>,\n  ) {\n    if (sideEffects.deletedThreadIds.has(threadId)) {\n      return;\n    }\n\n    const threadSegment = toSafeThreadAttachmentSegment(threadId);\n    if (!threadSegment) {\n      yield* Effect.logWarning(\"skipping attachment prune for unsafe thread id\", { threadId });\n      return;\n    }\n\n    const entries = yield* readAttachmentRootEntries;\n    yield* Effect.forEach(\n      entries,\n      (entry) => pruneThreadAttachmentEntry(threadSegment, keptThreadRelativePaths, entry),\n      { concurrency: 1 },\n    );\n  });\n\n  yield* Effect.forEach(sideEffects.deletedThreadIds, deleteThreadAttachments, {\n    concurrency: 1,\n  });\n\n  yield* Effect.forEach(\n    sideEffects.prunedThreadRelativePaths.entries(),\n    ([threadId, keptThreadRelativePaths]) =>\n      pruneThreadAttachments(threadId, keptThreadRelativePaths),\n    { concurrency: 1 },\n  );\n});\n\nconst makeOrchestrationProjectionPipeline = Effect.fn(\"makeOrchestrationProjectionPipeline\")(\n  function* () {\n    const sql = yield* SqlClient.SqlClient;\n    const eventStore = yield* OrchestrationEventStore;\n    const projectionStateRepository = yield* ProjectionStateRepository;\n    const projectionProjectRepository = yield* ProjectionProjectRepository;\n    const projectionThreadRepository = yield* ProjectionThreadRepository;\n    const projectionThreadMessageRepository = yield* ProjectionThreadMessageRepository;\n    const projectionThreadProposedPlanRepository = yield* ProjectionThreadProposedPlanRepository;\n    const projectionThreadQueuedTurnRepository = yield* ProjectionThreadQueuedTurnRepository;\n    const projectionThreadActivityRepository = yield* ProjectionThreadActivityRepository;\n    const projectionThreadSessionRepository = yield* ProjectionThreadSessionRepository;\n    const projectionTurnRepository = yield* ProjectionTurnRepository;\n    const projectionPendingApprovalRepository = yield* ProjectionPendingApprovalRepository;\n\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const serverConfig = yield* ServerConfig;\n\n    const applyProjectsProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyProjectsProjection\",\n    )(function* (event, _attachmentSideEffects) {\n      switch (event.type) {\n        case \"project.created\":\n          yield* projectionProjectRepository.upsert({\n            projectId: event.payload.projectId,\n            title: event.payload.title,\n            workspaceRoot: event.payload.workspaceRoot,\n            defaultModelSelection: event.payload.defaultModelSelection,\n            scripts: event.payload.scripts,\n            createdAt: event.payload.createdAt,\n            updatedAt: event.payload.updatedAt,\n            deletedAt: null,\n          });\n          return;\n\n        case \"project.meta-updated\": {\n          const existingRow = yield* projectionProjectRepository.getById({\n            projectId: event.payload.projectId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionProjectRepository.upsert({\n            ...existingRow.value,\n            ...(event.payload.title !== undefined ? { title: event.payload.title } : {}),\n            ...(event.payload.workspaceRoot !== undefined\n              ? { workspaceRoot: event.payload.workspaceRoot }\n              : {}),\n            ...(event.payload.defaultModelSelection !== undefined\n              ? { defaultModelSelection: event.payload.defaultModelSelection }\n              : {}),\n            ...(event.payload.scripts !== undefined ? { scripts: event.payload.scripts } : {}),\n            updatedAt: event.payload.updatedAt,\n          });\n          return;\n        }\n\n        case \"project.deleted\": {\n          const existingRow = yield* projectionProjectRepository.getById({\n            projectId: event.payload.projectId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionProjectRepository.upsert({\n            ...existingRow.value,\n            deletedAt: event.payload.deletedAt,\n            updatedAt: event.payload.deletedAt,\n          });\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const refreshThreadShellSummary = Effect.fn(\"refreshThreadShellSummary\")(function* (\n      threadId: ThreadId,\n    ) {\n      const existingRow = yield* projectionThreadRepository.getById({\n        threadId,\n      });\n      if (Option.isNone(existingRow)) {\n        return;\n      }\n\n      const [messages, queuedTurns, proposedPlans, activities, pendingApprovals] =\n        yield* Effect.all([\n          projectionThreadMessageRepository.listByThreadId({ threadId }),\n          projectionThreadQueuedTurnRepository.listByThreadId({ threadId }),\n          projectionThreadProposedPlanRepository.listByThreadId({ threadId }),\n          projectionThreadActivityRepository.listByThreadId({ threadId }),\n          projectionPendingApprovalRepository.listByThreadId({ threadId }),\n        ]);\n\n      let latestUserMessageAt: string | null = null;\n      for (const message of messages) {\n        if (\n          message.role === \"user\" &&\n          (latestUserMessageAt === null || message.createdAt > latestUserMessageAt)\n        ) {\n          latestUserMessageAt = message.createdAt;\n        }\n      }\n      for (const queuedTurn of queuedTurns) {\n        if (latestUserMessageAt === null || queuedTurn.createdAt > latestUserMessageAt) {\n          latestUserMessageAt = queuedTurn.createdAt;\n        }\n      }\n\n      const pendingApprovalCount = pendingApprovals.filter(\n        (approval) => approval.status === \"pending\",\n      ).length;\n      const pendingUserInputCount = derivePendingUserInputCountFromActivities(activities);\n      const hasActionableProposedPlan = deriveHasActionableProposedPlan({\n        latestTurnId: existingRow.value.latestTurnId,\n        proposedPlans,\n      });\n\n      yield* projectionThreadRepository.upsert({\n        ...existingRow.value,\n        latestUserMessageAt,\n        pendingApprovalCount,\n        pendingUserInputCount,\n        hasActionableProposedPlan: hasActionableProposedPlan ? 1 : 0,\n      });\n    });\n\n    const applyThreadsProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadsProjection\",\n    )(function* (event, attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.created\":\n          yield* projectionThreadRepository.upsert({\n            threadId: event.payload.threadId,\n            projectId: event.payload.projectId,\n            title: event.payload.title,\n            modelSelection: event.payload.modelSelection,\n            runtimeMode: event.payload.runtimeMode,\n            interactionMode: event.payload.interactionMode,\n            parentThreadId: event.payload.parentThreadId ?? null,\n            createdByThreadId: event.payload.createdByThreadId ?? null,\n            subagentKind: event.payload.subagentKind ?? null,\n            subagentNickname: event.payload.subagentNickname ?? null,\n            subagentRole: event.payload.subagentRole ?? null,\n            hiddenFromThreadList: event.payload.hiddenFromThreadList ? 1 : 0,\n            branch: event.payload.branch,\n            worktreePath: event.payload.worktreePath,\n            latestTurnId: null,\n            createdAt: event.payload.createdAt,\n            updatedAt: event.payload.updatedAt,\n            archivedAt: null,\n            latestUserMessageAt: null,\n            pendingApprovalCount: 0,\n            pendingUserInputCount: 0,\n            hasActionableProposedPlan: 0,\n            deletedAt: null,\n          });\n          return;\n\n        case \"thread.archived\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            archivedAt: event.payload.archivedAt,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.payload.updatedAt),\n          });\n          return;\n        }\n\n        case \"thread.unarchived\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            archivedAt: null,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.payload.updatedAt),\n          });\n          return;\n        }\n\n        case \"thread.meta-updated\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            ...(event.payload.title !== undefined ? { title: event.payload.title } : {}),\n            ...(event.payload.modelSelection !== undefined\n              ? { modelSelection: event.payload.modelSelection }\n              : {}),\n            ...(event.payload.branch !== undefined ? { branch: event.payload.branch } : {}),\n            ...(event.payload.worktreePath !== undefined\n              ? { worktreePath: event.payload.worktreePath }\n              : {}),\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.payload.updatedAt),\n          });\n          return;\n        }\n\n        case \"thread.runtime-mode-set\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            runtimeMode: event.payload.runtimeMode,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.payload.updatedAt),\n          });\n          return;\n        }\n\n        case \"thread.interaction-mode-set\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            interactionMode: event.payload.interactionMode,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.payload.updatedAt),\n          });\n          return;\n        }\n\n        case \"thread.deleted\": {\n          attachmentSideEffects.deletedThreadIds.add(event.payload.threadId);\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            deletedAt: event.payload.deletedAt,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.payload.deletedAt),\n          });\n          return;\n        }\n\n        case \"thread.message-sent\":\n        case \"thread.turn-queued\":\n        case \"thread.queued-turn-updated\":\n        case \"thread.queued-turn-cancelled\":\n        case \"thread.queued-turn-dispatched\":\n        case \"thread.queued-turn-steer-requested\":\n        case \"thread.queued-turn-steer-failed\":\n        case \"thread.queued-turn-steered\":\n        case \"thread.proposed-plan-upserted\":\n        case \"thread.activity-appended\":\n        case \"thread.approval-response-requested\":\n        case \"thread.user-input-response-requested\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.occurredAt),\n          });\n          yield* refreshThreadShellSummary(event.payload.threadId);\n          return;\n        }\n\n        case \"thread.session-set\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            latestTurnId: event.payload.session.activeTurnId ?? existingRow.value.latestTurnId,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.occurredAt),\n          });\n          yield* refreshThreadShellSummary(event.payload.threadId);\n          return;\n        }\n\n        case \"thread.turn-diff-completed\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            latestTurnId: event.payload.turnId,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.occurredAt),\n          });\n          yield* refreshThreadShellSummary(event.payload.threadId);\n          return;\n        }\n\n        case \"thread.reverted\": {\n          const existingRow = yield* projectionThreadRepository.getById({\n            threadId: event.payload.threadId,\n          });\n          if (Option.isNone(existingRow)) {\n            return;\n          }\n\n          const retainedTurns = yield* projectionTurnRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          let latestTurnId: ProjectionTurn[\"turnId\"] = null;\n          let latestCheckpointTurnCount = -1;\n          for (let index = 0; index < retainedTurns.length; index += 1) {\n            const turn = retainedTurns[index];\n            if (\n              !turn ||\n              turn.turnId === null ||\n              turn.checkpointTurnCount === null ||\n              turn.checkpointTurnCount > event.payload.turnCount\n            ) {\n              continue;\n            }\n            if (turn.checkpointTurnCount > latestCheckpointTurnCount) {\n              latestCheckpointTurnCount = turn.checkpointTurnCount;\n              latestTurnId = turn.turnId;\n            }\n          }\n\n          yield* projectionThreadRepository.upsert({\n            ...existingRow.value,\n            latestTurnId,\n            updatedAt: maxIsoTimestamp(existingRow.value.updatedAt, event.occurredAt),\n          });\n          yield* refreshThreadShellSummary(event.payload.threadId);\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const collectRemainingQueuedTurnAttachmentOwners = Effect.fn(\n      \"collectRemainingQueuedTurnAttachmentOwners\",\n    )(function* (threadId: ThreadId) {\n      const [messages, queuedTurns] = yield* Effect.all([\n        projectionThreadMessageRepository.listByThreadId({ threadId }),\n        projectionThreadQueuedTurnRepository.listByThreadId({ threadId }),\n      ]);\n      return [...messages, ...queuedTurns] satisfies Array<\n        ProjectionThreadMessage | ProjectionThreadQueuedTurn\n      >;\n    });\n\n    const applyThreadQueuedTurnsProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadQueuedTurnsProjection\",\n    )(function* (event, attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.turn-queued\": {\n          yield* projectionThreadQueuedTurnRepository.upsert({\n            threadId: event.payload.threadId,\n            messageId: event.payload.messageId,\n            role: event.payload.role,\n            text: event.payload.text,\n            attachments: yield* materializeAttachmentsForProjection({\n              attachments: event.payload.attachments,\n            }),\n            ...(event.payload.modelSelection !== undefined\n              ? { modelSelection: event.payload.modelSelection }\n              : {}),\n            ...(event.payload.titleSeed !== undefined\n              ? { titleSeed: event.payload.titleSeed }\n              : {}),\n            runtimeMode: event.payload.runtimeMode,\n            interactionMode: event.payload.interactionMode,\n            ...(event.payload.sourceProposedPlan !== undefined\n              ? { sourceProposedPlan: event.payload.sourceProposedPlan }\n              : {}),\n            recoveryConfirmationRequired: event.payload.recoveryConfirmationRequired ?? false,\n            createdAt: event.payload.createdAt,\n            updatedAt: event.payload.updatedAt,\n          });\n          return;\n        }\n\n        case \"thread.queued-turn-updated\": {\n          const queuedTurn = yield* projectionThreadQueuedTurnRepository.getByThreadAndMessageId({\n            threadId: event.payload.threadId,\n            messageId: event.payload.messageId,\n          });\n          if (Option.isNone(queuedTurn)) {\n            return;\n          }\n          yield* projectionThreadQueuedTurnRepository.upsert({\n            ...queuedTurn.value,\n            text: event.payload.text,\n            updatedAt: event.payload.updatedAt,\n          });\n          return;\n        }\n\n        case \"thread.queued-turn-cancelled\": {\n          yield* projectionThreadQueuedTurnRepository.deleteByMessageId({\n            messageId: event.payload.messageId,\n          });\n          const remainingAttachmentOwners = yield* collectRemainingQueuedTurnAttachmentOwners(\n            event.payload.threadId,\n          );\n          attachmentSideEffects.prunedThreadRelativePaths.set(\n            event.payload.threadId,\n            collectThreadAttachmentRelativePaths(event.payload.threadId, remainingAttachmentOwners),\n          );\n          return;\n        }\n\n        case \"thread.queued-turn-dispatched\":\n        case \"thread.queued-turn-steered\":\n          yield* projectionThreadQueuedTurnRepository.deleteByMessageId({\n            messageId: event.payload.messageId,\n          });\n          return;\n\n        case \"thread.queued-turn-steer-requested\": {\n          const queuedTurn = yield* projectionThreadQueuedTurnRepository.getByThreadAndMessageId({\n            threadId: event.payload.threadId,\n            messageId: event.payload.messageId,\n          });\n          if (Option.isNone(queuedTurn)) {\n            return;\n          }\n          yield* projectionThreadQueuedTurnRepository.upsert({\n            ...queuedTurn.value,\n            steering: {\n              expectedTurnId: event.payload.expectedTurnId,\n              requestedAt: event.payload.createdAt,\n            },\n            updatedAt: event.occurredAt,\n          });\n          return;\n        }\n\n        case \"thread.queued-turn-steer-failed\": {\n          const queuedTurn = yield* projectionThreadQueuedTurnRepository.getByThreadAndMessageId({\n            threadId: event.payload.threadId,\n            messageId: event.payload.messageId,\n          });\n          if (Option.isNone(queuedTurn)) {\n            return;\n          }\n          const { steering: _steering, ...retryableQueuedTurn } = queuedTurn.value;\n          yield* projectionThreadQueuedTurnRepository.upsert({\n            ...retryableQueuedTurn,\n            updatedAt: event.occurredAt,\n          });\n          return;\n        }\n\n        case \"thread.archived\": {\n          yield* projectionThreadQueuedTurnRepository.deleteByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const remainingAttachmentOwners = yield* projectionThreadMessageRepository.listByThreadId(\n            {\n              threadId: event.payload.threadId,\n            },\n          );\n          attachmentSideEffects.prunedThreadRelativePaths.set(\n            event.payload.threadId,\n            collectThreadAttachmentRelativePaths(event.payload.threadId, remainingAttachmentOwners),\n          );\n          return;\n        }\n\n        case \"thread.deleted\":\n          yield* projectionThreadQueuedTurnRepository.deleteByThreadId({\n            threadId: event.payload.threadId,\n          });\n          return;\n\n        default:\n          return;\n      }\n    });\n\n    const applyThreadMessagesProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadMessagesProjection\",\n    )(function* (event, attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.message-sent\": {\n          const existingMessage = yield* projectionThreadMessageRepository.getByMessageId({\n            messageId: event.payload.messageId,\n          });\n          const previousMessage = Option.getOrUndefined(existingMessage);\n          const nextText = Option.match(existingMessage, {\n            onNone: () => event.payload.text,\n            onSome: (message) => {\n              if (event.payload.streaming) {\n                return `${message.text}${event.payload.text}`;\n              }\n              if (event.payload.text.length === 0) {\n                return message.text;\n              }\n              return event.payload.text;\n            },\n          });\n          const nextAttachments =\n            event.payload.attachments !== undefined\n              ? yield* materializeAttachmentsForProjection({\n                  attachments: event.payload.attachments,\n                })\n              : previousMessage?.attachments;\n          const nextTurnId = event.payload.turnId ?? previousMessage?.turnId ?? null;\n          yield* projectionThreadMessageRepository.upsert({\n            messageId: event.payload.messageId,\n            threadId: event.payload.threadId,\n            turnId: nextTurnId,\n            role: event.payload.role,\n            text: nextText,\n            ...(nextAttachments !== undefined ? { attachments: [...nextAttachments] } : {}),\n            isStreaming: event.payload.streaming,\n            createdAt: previousMessage?.createdAt ?? event.payload.createdAt,\n            updatedAt: event.payload.updatedAt,\n          });\n          return;\n        }\n\n        case \"thread.reverted\": {\n          const existingRows = yield* projectionThreadMessageRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          if (existingRows.length === 0) {\n            return;\n          }\n\n          const existingTurns = yield* projectionTurnRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const keptRows = retainProjectionMessagesAfterRevert(\n            existingRows,\n            existingTurns,\n            event.payload.turnCount,\n          );\n          if (keptRows.length === existingRows.length) {\n            return;\n          }\n\n          yield* projectionThreadMessageRepository.deleteByThreadId({\n            threadId: event.payload.threadId,\n          });\n          yield* Effect.forEach(keptRows, projectionThreadMessageRepository.upsert, {\n            concurrency: 1,\n          }).pipe(Effect.asVoid);\n          attachmentSideEffects.prunedThreadRelativePaths.set(\n            event.payload.threadId,\n            collectThreadAttachmentRelativePaths(event.payload.threadId, keptRows),\n          );\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const applyThreadProposedPlansProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadProposedPlansProjection\",\n    )(function* (event, _attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.proposed-plan-upserted\":\n          yield* projectionThreadProposedPlanRepository.upsert({\n            planId: event.payload.proposedPlan.id,\n            threadId: event.payload.threadId,\n            turnId: event.payload.proposedPlan.turnId,\n            planMarkdown: event.payload.proposedPlan.planMarkdown,\n            implementedAt: event.payload.proposedPlan.implementedAt,\n            implementationThreadId: event.payload.proposedPlan.implementationThreadId,\n            createdAt: event.payload.proposedPlan.createdAt,\n            updatedAt: event.payload.proposedPlan.updatedAt,\n          });\n          return;\n\n        case \"thread.reverted\": {\n          const existingRows = yield* projectionThreadProposedPlanRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          if (existingRows.length === 0) {\n            return;\n          }\n\n          const existingTurns = yield* projectionTurnRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const keptRows = retainProjectionProposedPlansAfterRevert(\n            existingRows,\n            existingTurns,\n            event.payload.turnCount,\n          );\n          if (keptRows.length === existingRows.length) {\n            return;\n          }\n\n          yield* projectionThreadProposedPlanRepository.deleteByThreadId({\n            threadId: event.payload.threadId,\n          });\n          yield* Effect.forEach(keptRows, projectionThreadProposedPlanRepository.upsert, {\n            concurrency: 1,\n          }).pipe(Effect.asVoid);\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const applyThreadActivitiesProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadActivitiesProjection\",\n    )(function* (event, _attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.activity-appended\":\n          yield* projectionThreadActivityRepository.upsert({\n            activityId: event.payload.activity.id,\n            threadId: event.payload.threadId,\n            turnId: event.payload.activity.turnId,\n            tone: event.payload.activity.tone,\n            kind: event.payload.activity.kind,\n            summary: event.payload.activity.summary,\n            payload: event.payload.activity.payload,\n            ...(event.payload.activity.sequence !== undefined\n              ? { sequence: event.payload.activity.sequence }\n              : {}),\n            createdAt: event.payload.activity.createdAt,\n          });\n          return;\n\n        case \"thread.reverted\": {\n          const existingRows = yield* projectionThreadActivityRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          if (existingRows.length === 0) {\n            return;\n          }\n          const existingTurns = yield* projectionTurnRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const keptRows = retainProjectionActivitiesAfterRevert(\n            existingRows,\n            existingTurns,\n            event.payload.turnCount,\n          );\n          if (keptRows.length === existingRows.length) {\n            return;\n          }\n          yield* projectionThreadActivityRepository.deleteByThreadId({\n            threadId: event.payload.threadId,\n          });\n          yield* Effect.forEach(keptRows, projectionThreadActivityRepository.upsert, {\n            concurrency: 1,\n          }).pipe(Effect.asVoid);\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const applyThreadSessionsProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadSessionsProjection\",\n    )(function* (event, _attachmentSideEffects) {\n      if (event.type !== \"thread.session-set\") {\n        return;\n      }\n      yield* projectionThreadSessionRepository.upsert({\n        threadId: event.payload.threadId,\n        status: event.payload.session.status,\n        providerName: event.payload.session.providerName,\n        providerInstanceId: event.payload.session.providerInstanceId ?? null,\n        runtimeMode: event.payload.session.runtimeMode,\n        activeTurnId: event.payload.session.activeTurnId,\n        lastError: event.payload.session.lastError,\n        updatedAt: event.payload.session.updatedAt,\n      });\n    });\n\n    const applyThreadTurnsProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyThreadTurnsProjection\",\n    )(function* (event, _attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.turn-start-requested\": {\n          yield* projectionTurnRepository.appendPendingTurnStart({\n            threadId: event.payload.threadId,\n            messageId: event.payload.messageId,\n            sourceProposedPlanThreadId: event.payload.sourceProposedPlan?.threadId ?? null,\n            sourceProposedPlanId: event.payload.sourceProposedPlan?.planId ?? null,\n            requestedAt: event.payload.createdAt,\n          });\n          return;\n        }\n\n        case \"thread.turn-queued\": {\n          if (!event.payload.recoveryConfirmationRequired) {\n            return;\n          }\n          yield* projectionTurnRepository.deletePendingTurnStart({\n            threadId: event.payload.threadId,\n            messageId: event.payload.messageId,\n          });\n          return;\n        }\n\n        case \"thread.session-set\": {\n          const turnId = event.payload.session.activeTurnId;\n          if (turnId === null || event.payload.session.status !== \"running\") {\n            // Leaving the \"running\" session status is the turn-end signal:\n            // settle still-running turns so their duration reflects the whole\n            // turn rather than the last assistant message.\n            const settledTurnState = settledTurnStateForSessionStatus(event.payload.session.status);\n            if (settledTurnState === null) {\n              return;\n            }\n            const existingTurns = yield* projectionTurnRepository.listByThreadId({\n              threadId: event.payload.threadId,\n            });\n            yield* Effect.forEach(\n              existingTurns.filter((turn) => turn.turnId !== null && turn.state === \"running\"),\n              (turn) =>\n                turn.turnId === null\n                  ? Effect.void\n                  : projectionTurnRepository.upsertByTurnId({\n                      ...turn,\n                      turnId: turn.turnId,\n                      state: settledTurnState,\n                      // A running turn's completedAt can only hold a mid-turn\n                      // placeholder checkpoint timestamp — the session leaving\n                      // \"running\" is the authoritative turn end.\n                      completedAt: event.payload.session.updatedAt,\n                    }),\n              { concurrency: 1 },\n            );\n            return;\n          }\n\n          // A new active turn supersedes any still-running turn on the same\n          // thread — steering can open a new turn without the provider ever\n          // completing the previous one.\n          const otherRunningTurns = yield* projectionTurnRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          yield* Effect.forEach(\n            otherRunningTurns.filter(\n              (turn) => turn.turnId !== null && turn.turnId !== turnId && turn.state === \"running\",\n            ),\n            (turn) =>\n              turn.turnId === null\n                ? Effect.void\n                : projectionTurnRepository.upsertByTurnId({\n                    ...turn,\n                    turnId: turn.turnId,\n                    state: \"completed\",\n                    completedAt: event.payload.session.updatedAt,\n                  }),\n            { concurrency: 1 },\n          );\n\n          const existingTurn = yield* projectionTurnRepository.getByTurnId({\n            threadId: event.payload.threadId,\n            turnId,\n          });\n          const pendingTurnStart = yield* projectionTurnRepository.getPendingTurnStartByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const deleteConsumedPendingTurnStart = Option.isSome(pendingTurnStart)\n            ? projectionTurnRepository.deletePendingTurnStart({\n                threadId: event.payload.threadId,\n                messageId: pendingTurnStart.value.messageId,\n              })\n            : Effect.void;\n          if (Option.isSome(existingTurn)) {\n            const nextState =\n              existingTurn.value.state === \"completed\" || existingTurn.value.state === \"error\"\n                ? existingTurn.value.state\n                : \"running\";\n            yield* projectionTurnRepository.upsertByTurnId({\n              ...existingTurn.value,\n              state: nextState,\n              pendingMessageId:\n                existingTurn.value.pendingMessageId ??\n                (Option.isSome(pendingTurnStart) ? pendingTurnStart.value.messageId : null),\n              sourceProposedPlanThreadId:\n                existingTurn.value.sourceProposedPlanThreadId ??\n                (Option.isSome(pendingTurnStart)\n                  ? pendingTurnStart.value.sourceProposedPlanThreadId\n                  : null),\n              sourceProposedPlanId:\n                existingTurn.value.sourceProposedPlanId ??\n                (Option.isSome(pendingTurnStart)\n                  ? pendingTurnStart.value.sourceProposedPlanId\n                  : null),\n              startedAt:\n                existingTurn.value.startedAt ??\n                (Option.isSome(pendingTurnStart)\n                  ? pendingTurnStart.value.requestedAt\n                  : event.occurredAt),\n              requestedAt:\n                existingTurn.value.requestedAt ??\n                (Option.isSome(pendingTurnStart)\n                  ? pendingTurnStart.value.requestedAt\n                  : event.occurredAt),\n            });\n            yield* deleteConsumedPendingTurnStart;\n          } else {\n            yield* projectionTurnRepository.upsertByTurnId({\n              turnId,\n              threadId: event.payload.threadId,\n              pendingMessageId: Option.isSome(pendingTurnStart)\n                ? pendingTurnStart.value.messageId\n                : null,\n              sourceProposedPlanThreadId: Option.isSome(pendingTurnStart)\n                ? pendingTurnStart.value.sourceProposedPlanThreadId\n                : null,\n              sourceProposedPlanId: Option.isSome(pendingTurnStart)\n                ? pendingTurnStart.value.sourceProposedPlanId\n                : null,\n              assistantMessageId: null,\n              state: \"running\",\n              requestedAt: Option.isSome(pendingTurnStart)\n                ? pendingTurnStart.value.requestedAt\n                : event.occurredAt,\n              startedAt: Option.isSome(pendingTurnStart)\n                ? pendingTurnStart.value.requestedAt\n                : event.occurredAt,\n              completedAt: null,\n              checkpointTurnCount: null,\n              checkpointRef: null,\n              checkpointStatus: null,\n              checkpointAttribution: null,\n              checkpointFiles: [],\n            });\n            yield* deleteConsumedPendingTurnStart;\n          }\n          return;\n        }\n\n        case \"thread.message-sent\": {\n          if (event.payload.role !== \"assistant\") {\n            return;\n          }\n          const projectedMessage = yield* projectionThreadMessageRepository.getByMessageId({\n            messageId: event.payload.messageId,\n          });\n          const effectiveTurnId =\n            event.payload.turnId ??\n            Option.match(projectedMessage, {\n              onNone: () => null,\n              onSome: (message) => message.turnId,\n            });\n          if (effectiveTurnId === null) {\n            return;\n          }\n          // A completed assistant message only settles the turn once there is\n          // no session/latest-turn evidence that work is still in flight.\n          // Providers may emit several assistant messages per turn (commentary\n          // between tool calls), and the turn must stay unsettled until the\n          // provider reports turn end (projected as thread.session-set leaving\n          // the \"running\" status).\n          const session = yield* projectionThreadSessionRepository.getByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const existingTurn = yield* projectionTurnRepository.getByTurnId({\n            threadId: event.payload.threadId,\n            turnId: effectiveTurnId,\n          });\n          const sessionRunsThisTurn =\n            Option.isSome(session) &&\n            session.value.status === \"running\" &&\n            (session.value.activeTurnId === effectiveTurnId || session.value.activeTurnId === null);\n          const latestTurnStillRunning =\n            Option.isSome(session) &&\n            Option.isSome(existingTurn) &&\n            existingTurn.value.state === \"running\" &&\n            existingTurn.value.completedAt === null;\n          const turnStillRunning = sessionRunsThisTurn || latestTurnStillRunning;\n          const settlesTurn = !event.payload.streaming && !turnStillRunning;\n          if (Option.isSome(existingTurn)) {\n            yield* projectionTurnRepository.upsertByTurnId({\n              ...existingTurn.value,\n              assistantMessageId: event.payload.messageId,\n              state: settlesTurn\n                ? existingTurn.value.state === \"interrupted\"\n                  ? \"interrupted\"\n                  : existingTurn.value.state === \"error\"\n                    ? \"error\"\n                    : \"completed\"\n                : existingTurn.value.state,\n              completedAt: settlesTurn\n                ? (existingTurn.value.completedAt ?? event.payload.updatedAt)\n                : existingTurn.value.completedAt,\n              startedAt: existingTurn.value.startedAt ?? event.payload.createdAt,\n              requestedAt: existingTurn.value.requestedAt ?? event.payload.createdAt,\n            });\n            return;\n          }\n          yield* projectionTurnRepository.upsertByTurnId({\n            turnId: effectiveTurnId,\n            threadId: event.payload.threadId,\n            pendingMessageId: null,\n            sourceProposedPlanThreadId: null,\n            sourceProposedPlanId: null,\n            assistantMessageId: event.payload.messageId,\n            state: settlesTurn ? \"completed\" : \"running\",\n            requestedAt: event.payload.createdAt,\n            startedAt: event.payload.createdAt,\n            completedAt: settlesTurn ? event.payload.updatedAt : null,\n            checkpointTurnCount: null,\n            checkpointRef: null,\n            checkpointStatus: null,\n            checkpointAttribution: null,\n            checkpointFiles: [],\n          });\n          return;\n        }\n\n        case \"thread.turn-interrupt-requested\": {\n          if (event.payload.turnId === undefined) {\n            return;\n          }\n          const existingTurn = yield* projectionTurnRepository.getByTurnId({\n            threadId: event.payload.threadId,\n            turnId: event.payload.turnId,\n          });\n          if (Option.isSome(existingTurn)) {\n            yield* projectionTurnRepository.upsertByTurnId({\n              ...existingTurn.value,\n              state: \"interrupted\",\n              completedAt: existingTurn.value.completedAt ?? event.payload.createdAt,\n              startedAt: existingTurn.value.startedAt ?? event.payload.createdAt,\n              requestedAt: existingTurn.value.requestedAt ?? event.payload.createdAt,\n            });\n            return;\n          }\n          yield* projectionTurnRepository.upsertByTurnId({\n            turnId: event.payload.turnId,\n            threadId: event.payload.threadId,\n            pendingMessageId: null,\n            sourceProposedPlanThreadId: null,\n            sourceProposedPlanId: null,\n            assistantMessageId: null,\n            state: \"interrupted\",\n            requestedAt: event.payload.createdAt,\n            startedAt: event.payload.createdAt,\n            completedAt: event.payload.createdAt,\n            checkpointTurnCount: null,\n            checkpointRef: null,\n            checkpointStatus: null,\n            checkpointAttribution: null,\n            checkpointFiles: [],\n          });\n          return;\n        }\n\n        case \"thread.turn-diff-completed\": {\n          // Mid-turn diff updates produce placeholder checkpoints; record the\n          // checkpoint, but don't settle a turn its session is still running.\n          const session = yield* projectionThreadSessionRepository.getByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const turnStillRunning =\n            Option.isSome(session) &&\n            session.value.status === \"running\" &&\n            session.value.activeTurnId === event.payload.turnId;\n          const existingTurn = yield* projectionTurnRepository.getByTurnId({\n            threadId: event.payload.threadId,\n            turnId: event.payload.turnId,\n          });\n          const nextState = checkpointStatusToProjectionTurnState(event.payload.status);\n          yield* projectionTurnRepository.clearCheckpointTurnConflict({\n            threadId: event.payload.threadId,\n            turnId: event.payload.turnId,\n            checkpointTurnCount: event.payload.checkpointTurnCount,\n          });\n          const messages = yield* projectionThreadMessageRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const assistantMessageId =\n            messages\n              .toReversed()\n              .find(\n                (message) =>\n                  message.role === \"assistant\" && message.turnId === event.payload.turnId,\n              )?.messageId ?? event.payload.assistantMessageId;\n\n          if (Option.isSome(existingTurn)) {\n            yield* projectionTurnRepository.upsertByTurnId({\n              ...existingTurn.value,\n              assistantMessageId,\n              state: turnStillRunning ? existingTurn.value.state : nextState,\n              checkpointTurnCount: event.payload.checkpointTurnCount,\n              checkpointRef: event.payload.checkpointRef,\n              checkpointStatus: event.payload.status,\n              checkpointAttribution: event.payload.attribution,\n              checkpointFiles: event.payload.files,\n              startedAt: existingTurn.value.startedAt ?? event.payload.completedAt,\n              requestedAt: existingTurn.value.requestedAt ?? event.payload.completedAt,\n              completedAt: event.payload.completedAt,\n            });\n            return;\n          }\n          yield* projectionTurnRepository.upsertByTurnId({\n            turnId: event.payload.turnId,\n            threadId: event.payload.threadId,\n            pendingMessageId: null,\n            sourceProposedPlanThreadId: null,\n            sourceProposedPlanId: null,\n            assistantMessageId,\n            state: turnStillRunning ? \"running\" : nextState,\n            requestedAt: event.payload.completedAt,\n            startedAt: event.payload.completedAt,\n            completedAt: event.payload.completedAt,\n            checkpointTurnCount: event.payload.checkpointTurnCount,\n            checkpointRef: event.payload.checkpointRef,\n            checkpointStatus: event.payload.status,\n            checkpointAttribution: event.payload.attribution,\n            checkpointFiles: event.payload.files,\n          });\n          return;\n        }\n\n        case \"thread.reverted\": {\n          const existingTurns = yield* projectionTurnRepository.listByThreadId({\n            threadId: event.payload.threadId,\n          });\n          const keptTurns = existingTurns.filter(\n            (turn) =>\n              turn.turnId !== null &&\n              turn.checkpointTurnCount !== null &&\n              turn.checkpointTurnCount <= event.payload.turnCount,\n          );\n          yield* projectionTurnRepository.deleteByThreadId({\n            threadId: event.payload.threadId,\n          });\n          yield* Effect.forEach(\n            keptTurns,\n            (turn) =>\n              turn.turnId === null\n                ? Effect.void\n                : projectionTurnRepository.upsertByTurnId({\n                    ...turn,\n                    turnId: turn.turnId,\n                  }),\n            { concurrency: 1 },\n          ).pipe(Effect.asVoid);\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const applyCheckpointsProjection: ProjectorDefinition[\"apply\"] = () => Effect.void;\n\n    const applyPendingApprovalsProjection: ProjectorDefinition[\"apply\"] = Effect.fn(\n      \"applyPendingApprovalsProjection\",\n    )(function* (event, _attachmentSideEffects) {\n      switch (event.type) {\n        case \"thread.activity-appended\": {\n          const requestId =\n            extractActivityRequestId(event.payload.activity.payload) ??\n            event.metadata.requestId ??\n            null;\n          if (requestId === null) {\n            return;\n          }\n          const existingRow = yield* projectionPendingApprovalRepository.getByRequestId({\n            requestId,\n          });\n          if (event.payload.activity.kind === \"approval.resolved\") {\n            const resolvedDecisionRaw =\n              typeof event.payload.activity.payload === \"object\" &&\n              event.payload.activity.payload !== null &&\n              \"decision\" in event.payload.activity.payload\n                ? (event.payload.activity.payload as { decision?: unknown }).decision\n                : null;\n            const resolvedDecision =\n              resolvedDecisionRaw === \"accept\" ||\n              resolvedDecisionRaw === \"acceptForSession\" ||\n              resolvedDecisionRaw === \"decline\" ||\n              resolvedDecisionRaw === \"cancel\"\n                ? resolvedDecisionRaw\n                : null;\n            yield* projectionPendingApprovalRepository.upsert({\n              requestId,\n              threadId: Option.isSome(existingRow)\n                ? existingRow.value.threadId\n                : event.payload.threadId,\n              turnId: Option.isSome(existingRow)\n                ? existingRow.value.turnId\n                : event.payload.activity.turnId,\n              status: \"resolved\",\n              decision: resolvedDecision,\n              createdAt: Option.isSome(existingRow)\n                ? existingRow.value.createdAt\n                : event.payload.activity.createdAt,\n              resolvedAt: event.payload.activity.createdAt,\n            });\n            return;\n          }\n          if (event.payload.activity.kind === \"provider.approval.respond.failed\") {\n            const payload =\n              typeof event.payload.activity.payload === \"object\" &&\n              event.payload.activity.payload !== null\n                ? (event.payload.activity.payload as Record<string, unknown>)\n                : null;\n            const detail =\n              typeof payload?.detail === \"string\" ? payload.detail.toLowerCase() : null;\n            if (isStalePendingApprovalFailureDetail(detail)) {\n              if (Option.isNone(existingRow)) {\n                return;\n              }\n              if (existingRow.value.status === \"resolved\") {\n                return;\n              }\n              yield* projectionPendingApprovalRepository.upsert({\n                requestId,\n                threadId: existingRow.value.threadId,\n                turnId: existingRow.value.turnId,\n                status: \"resolved\",\n                decision: null,\n                createdAt: existingRow.value.createdAt,\n                resolvedAt: event.payload.activity.createdAt,\n              });\n              return;\n            }\n            return;\n          }\n          // Only approval-requested activities should create pending-approval\n          // rows.  Other activity kinds that happen to carry a requestId\n          // (e.g. user-input.requested / user-input.resolved) must not\n          // pollute this projection — they have their own accounting via\n          // derivePendingUserInputCountFromActivities.\n          if (event.payload.activity.kind !== \"approval.requested\") {\n            return;\n          }\n          if (Option.isSome(existingRow) && existingRow.value.status === \"resolved\") {\n            return;\n          }\n          yield* projectionPendingApprovalRepository.upsert({\n            requestId,\n            threadId: event.payload.threadId,\n            turnId: event.payload.activity.turnId,\n            status: \"pending\",\n            decision: null,\n            createdAt: Option.isSome(existingRow)\n              ? existingRow.value.createdAt\n              : event.payload.activity.createdAt,\n            resolvedAt: null,\n          });\n          return;\n        }\n\n        case \"thread.approval-response-requested\": {\n          const existingRow = yield* projectionPendingApprovalRepository.getByRequestId({\n            requestId: event.payload.requestId,\n          });\n          yield* projectionPendingApprovalRepository.upsert({\n            requestId: event.payload.requestId,\n            threadId: Option.isSome(existingRow)\n              ? existingRow.value.threadId\n              : event.payload.threadId,\n            turnId: Option.isSome(existingRow) ? existingRow.value.turnId : null,\n            status: \"resolved\",\n            decision: event.payload.decision,\n            createdAt: Option.isSome(existingRow)\n              ? existingRow.value.createdAt\n              : event.payload.createdAt,\n            resolvedAt: event.payload.createdAt,\n          });\n          return;\n        }\n\n        default:\n          return;\n      }\n    });\n\n    const projectors: ReadonlyArray<ProjectorDefinition> = [\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.projects,\n        apply: applyProjectsProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threadMessages,\n        apply: applyThreadMessagesProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threadQueuedTurns,\n        apply: applyThreadQueuedTurnsProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threadProposedPlans,\n        apply: applyThreadProposedPlansProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threadActivities,\n        apply: applyThreadActivitiesProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threadSessions,\n        apply: applyThreadSessionsProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threadTurns,\n        apply: applyThreadTurnsProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.checkpoints,\n        apply: applyCheckpointsProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.pendingApprovals,\n        apply: applyPendingApprovalsProjection,\n      },\n      {\n        name: ORCHESTRATION_PROJECTOR_NAMES.threads,\n        apply: applyThreadsProjection,\n      },\n    ];\n\n    const runProjectorForEvent = Effect.fn(\"runProjectorForEvent\")(function* (\n      projector: ProjectorDefinition,\n      event: OrchestrationEvent,\n    ) {\n      const attachmentSideEffects: AttachmentSideEffects = {\n        deletedThreadIds: new Set<string>(),\n        prunedThreadRelativePaths: new Map<string, Set<string>>(),\n      };\n\n      yield* sql.withTransaction(\n        projector.apply(event, attachmentSideEffects).pipe(\n          Effect.flatMap(() =>\n            projectionStateRepository.upsert({\n              projector: projector.name,\n              lastAppliedSequence: event.sequence,\n              updatedAt: event.occurredAt,\n            }),\n          ),\n        ),\n      );\n\n      yield* runAttachmentSideEffects(attachmentSideEffects).pipe(\n        Effect.catch((cause) =>\n          Effect.logWarning(\"failed to apply projected attachment side-effects\", {\n            projector: projector.name,\n            sequence: event.sequence,\n            eventType: event.type,\n            cause,\n          }),\n        ),\n      );\n    });\n\n    const bootstrapProjector = (projector: ProjectorDefinition) =>\n      projectionStateRepository\n        .getByProjector({\n          projector: projector.name,\n        })\n        .pipe(\n          Effect.flatMap((stateRow) =>\n            Stream.runForEach(\n              eventStore.readFromSequence(\n                Option.isSome(stateRow) ? stateRow.value.lastAppliedSequence : 0,\n              ),\n              (event) => runProjectorForEvent(projector, event),\n            ),\n          ),\n        );\n\n    const projectEvent: OrchestrationProjectionPipelineShape[\"projectEvent\"] = (event) =>\n      Effect.forEach(projectors, (projector) => runProjectorForEvent(projector, event), {\n        concurrency: 1,\n      }).pipe(\n        Effect.provideService(FileSystem.FileSystem, fileSystem),\n        Effect.provideService(Path.Path, path),\n        Effect.provideService(ServerConfig, serverConfig),\n        Effect.asVoid,\n        Effect.catchTag(\"SqlError\", (sqlError) =>\n          Effect.fail(toPersistenceSqlError(\"ProjectionPipeline.projectEvent:query\")(sqlError)),\n        ),\n      );\n\n    const bootstrap: OrchestrationProjectionPipelineShape[\"bootstrap\"] = Effect.forEach(\n      projectors,\n      bootstrapProjector,\n      { concurrency: 1 },\n    ).pipe(\n      Effect.provideService(FileSystem.FileSystem, fileSystem),\n      Effect.provideService(Path.Path, path),\n      Effect.provideService(ServerConfig, serverConfig),\n      Effect.asVoid,\n      Effect.tap(() =>\n        Effect.logDebug(\"orchestration projection pipeline bootstrapped\").pipe(\n          Effect.annotateLogs({ projectors: projectors.length }),\n        ),\n      ),\n      Effect.catchTag(\"SqlError\", (sqlError) =>\n        Effect.fail(toPersistenceSqlError(\"ProjectionPipeline.bootstrap:query\")(sqlError)),\n      ),\n    );\n\n    return {\n      bootstrap,\n      projectEvent,\n    } satisfies OrchestrationProjectionPipelineShape;\n  },\n);\n\nexport const OrchestrationProjectionPipelineLive = Layer.effect(\n  OrchestrationProjectionPipeline,\n  makeOrchestrationProjectionPipeline(),\n).pipe(\n  Layer.provideMerge(ProjectionProjectRepositoryLive),\n  Layer.provideMerge(ProjectionThreadRepositoryLive),\n  Layer.provideMerge(ProjectionThreadMessageRepositoryLive),\n  Layer.provideMerge(ProjectionThreadQueuedTurnRepositoryLive),\n  Layer.provideMerge(ProjectionThreadProposedPlanRepositoryLive),\n  Layer.provideMerge(ProjectionThreadActivityRepositoryLive),\n  Layer.provideMerge(ProjectionThreadSessionRepositoryLive),\n  Layer.provideMerge(ProjectionTurnRepositoryLive),\n  Layer.provideMerge(ProjectionPendingApprovalRepositoryLive),\n  Layer.provideMerge(ProjectionStateRepositoryLive),\n);\n","/**\n * ProjectionCheckpointRepository - Projection repository interface for checkpoints.\n *\n * Owns persistence operations for projected checkpoint summaries in thread\n * timelines.\n *\n * @module ProjectionCheckpointRepository\n */\nimport {\n  CheckpointRef,\n  IsoDateTime,\n  MessageId,\n  NonNegativeInt,\n  OrchestrationCheckpointAttribution,\n  OrchestrationCheckpointFile,\n  OrchestrationCheckpointStatus,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Context from \"effect/Context\";\nimport * as Schema from \"effect/Schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { ProjectionRepositoryError } from \"../Errors.ts\";\n\nexport const ProjectionCheckpoint = Schema.Struct({\n  threadId: ThreadId,\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n  checkpointRef: CheckpointRef,\n  status: OrchestrationCheckpointStatus,\n  files: Schema.Array(OrchestrationCheckpointFile),\n  attribution: OrchestrationCheckpointAttribution.pipe(\n    Schema.withDecodingDefault(Effect.succeed(\"unattributed\")),\n  ),\n  assistantMessageId: Schema.NullOr(MessageId),\n  completedAt: IsoDateTime,\n});\nexport type ProjectionCheckpoint = typeof ProjectionCheckpoint.Type;\n\nexport const ListByThreadIdInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type ListByThreadIdInput = typeof ListByThreadIdInput.Type;\n\nexport const GetByThreadAndTurnCountInput = Schema.Struct({\n  threadId: ThreadId,\n  checkpointTurnCount: NonNegativeInt,\n});\nexport type GetByThreadAndTurnCountInput = typeof GetByThreadAndTurnCountInput.Type;\n\nexport const DeleteByThreadIdInput = Schema.Struct({\n  threadId: ThreadId,\n});\nexport type DeleteByThreadIdInput = typeof DeleteByThreadIdInput.Type;\n\n/**\n * ProjectionCheckpointRepositoryShape - Service API for projected checkpoints.\n */\nexport interface ProjectionCheckpointRepositoryShape {\n  /**\n   * Insert or replace a projected checkpoint row.\n   *\n   * Upserts by composite key `(threadId, checkpointTurnCount)`.\n   */\n  readonly upsert: (row: ProjectionCheckpoint) => Effect.Effect<void, ProjectionRepositoryError>;\n\n  /**\n   * List projected checkpoints for a thread.\n   *\n   * Returned in ascending checkpoint turn-count order.\n   */\n  readonly listByThreadId: (\n    input: ListByThreadIdInput,\n  ) => Effect.Effect<ReadonlyArray<ProjectionCheckpoint>, ProjectionRepositoryError>;\n\n  /**\n   * Read a projected checkpoint by thread and turn-count key.\n   */\n  readonly getByThreadAndTurnCount: (\n    input: GetByThreadAndTurnCountInput,\n  ) => Effect.Effect<Option.Option<ProjectionCheckpoint>, ProjectionRepositoryError>;\n\n  /**\n   * Delete projected checkpoint rows by thread.\n   */\n  readonly deleteByThreadId: (\n    input: DeleteByThreadIdInput,\n  ) => Effect.Effect<void, ProjectionRepositoryError>;\n}\n\n/**\n * ProjectionCheckpointRepository - Service tag for checkpoint projection persistence.\n */\nexport class ProjectionCheckpointRepository extends Context.Service<\n  ProjectionCheckpointRepository,\n  ProjectionCheckpointRepositoryShape\n>()(\"salchi/persistence/Services/ProjectionCheckpoints/ProjectionCheckpointRepository\") {}\n","import type { RepositoryIdentity } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport interface RepositoryIdentityResolverShape {\n  readonly resolve: (cwd: string) => Effect.Effect<RepositoryIdentity | null>;\n}\n\nexport class RepositoryIdentityResolver extends Context.Service<\n  RepositoryIdentityResolver,\n  RepositoryIdentityResolverShape\n>()(\"salchi/project/Services/RepositoryIdentityResolver\") {}\n","import {\n  ChatAttachment,\n  CheckpointRef,\n  EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO,\n  ORCHESTRATION_THREAD_DETAIL_PAGE_LIMIT_MAX,\n  IsoDateTime,\n  MessageId,\n  NonNegativeInt,\n  OrchestrationCheckpointAttribution,\n  OrchestrationCheckpointFile,\n  OrchestrationProposedPlanId,\n  OrchestrationReadModel,\n  OrchestrationShellSnapshot,\n  OrchestrationThread,\n  ProjectScript,\n  TurnId,\n  type OrchestrationCheckpointSummary,\n  type OrchestrationLatestTurn,\n  type OrchestrationMessage,\n  type OrchestrationProjectShell,\n  type OrchestrationProposedPlan,\n  type OrchestrationProject,\n  type OrchestrationQueuedTurn as OrchestrationQueuedTurnType,\n  type OrchestrationSession,\n  type OrchestrationThreadActivity,\n  type OrchestrationThreadDetailSnapshot,\n  type OrchestrationThreadDetailPageCursor,\n  type OrchestrationThreadDetailPageInfo,\n  type OrchestrationThreadDetailPageRequest,\n  type OrchestrationThreadShell,\n  ModelSelection,\n  ProjectId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Arr from \"effect/Array\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\n\nimport {\n  isPersistenceError,\n  toPersistenceDecodeError,\n  toPersistenceSqlError,\n  type ProjectionRepositoryError,\n} from \"../../persistence/Errors.ts\";\nimport { ProjectionCheckpoint } from \"../../persistence/Services/ProjectionCheckpoints.ts\";\nimport { ProjectionProject } from \"../../persistence/Services/ProjectionProjects.ts\";\nimport { ProjectionState } from \"../../persistence/Services/ProjectionState.ts\";\nimport { ProjectionThreadActivity } from \"../../persistence/Services/ProjectionThreadActivities.ts\";\nimport { ProjectionThreadMessage } from \"../../persistence/Services/ProjectionThreadMessages.ts\";\nimport { ProjectionThreadProposedPlan } from \"../../persistence/Services/ProjectionThreadProposedPlans.ts\";\nimport { ProjectionThreadQueuedTurn } from \"../../persistence/Services/ProjectionThreadQueuedTurns.ts\";\nimport { ProjectionThreadSession } from \"../../persistence/Services/ProjectionThreadSessions.ts\";\nimport { ProjectionThread } from \"../../persistence/Services/ProjectionThreads.ts\";\nimport { RepositoryIdentityResolver } from \"../../project/Services/RepositoryIdentityResolver.ts\";\nimport { ORCHESTRATION_PROJECTOR_NAMES } from \"./ProjectionPipeline.ts\";\nimport {\n  ProjectionSnapshotQuery,\n  type ProjectionFullThreadDiffContext,\n  type ProjectionSnapshotCounts,\n  type ProjectionThreadCheckpointContext,\n  type ProjectionSnapshotQueryShape,\n} from \"../Services/ProjectionSnapshotQuery.ts\";\n\nconst decodeReadModel = Schema.decodeUnknownEffect(OrchestrationReadModel);\nconst decodeShellSnapshot = Schema.decodeUnknownEffect(OrchestrationShellSnapshot);\nconst decodeThread = Schema.decodeUnknownEffect(OrchestrationThread);\nconst ProjectionProjectDbRowSchema = ProjectionProject.mapFields(\n  Struct.assign({\n    defaultModelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),\n    scripts: Schema.fromJsonString(Schema.Array(ProjectScript)),\n  }),\n);\nconst ProjectionThreadMessageDbRowSchema = ProjectionThreadMessage.mapFields(\n  Struct.assign({\n    isStreaming: Schema.Number,\n    attachments: Schema.NullOr(Schema.fromJsonString(Schema.Array(ChatAttachment))),\n  }),\n);\nconst ProjectionThreadProposedPlanDbRowSchema = ProjectionThreadProposedPlan;\nconst ProjectionThreadQueuedTurnDbRowSchema = Schema.Struct({\n  threadId: ProjectionThreadQueuedTurn.fields.threadId,\n  messageId: ProjectionThreadQueuedTurn.fields.messageId,\n  role: ProjectionThreadQueuedTurn.fields.role,\n  text: ProjectionThreadQueuedTurn.fields.text,\n  attachments: Schema.fromJsonString(Schema.Array(ChatAttachment)),\n  modelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),\n  titleSeed: Schema.NullOr(Schema.String),\n  runtimeMode: ProjectionThreadQueuedTurn.fields.runtimeMode,\n  interactionMode: ProjectionThreadQueuedTurn.fields.interactionMode,\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n  steeringExpectedTurnId: Schema.NullOr(TurnId),\n  steeringRequestedAt: Schema.NullOr(IsoDateTime),\n  recoveryConfirmationRequired: Schema.Number,\n  createdAt: ProjectionThreadQueuedTurn.fields.createdAt,\n  updatedAt: ProjectionThreadQueuedTurn.fields.updatedAt,\n});\nconst ProjectionThreadDbRowSchema = ProjectionThread.mapFields(\n  Struct.assign({\n    modelSelection: Schema.fromJsonString(ModelSelection),\n  }),\n);\nconst mapThreadRelationshipFields = (row: typeof ProjectionThreadDbRowSchema.Type) => ({\n  parentThreadId: row.parentThreadId ?? null,\n  createdByThreadId: row.createdByThreadId ?? null,\n  subagentKind: row.subagentKind ?? null,\n  subagentNickname: row.subagentNickname ?? null,\n  subagentRole: row.subagentRole ?? null,\n  hiddenFromThreadList: (row.hiddenFromThreadList ?? 0) > 0,\n});\nconst ProjectionThreadActivityDbRowSchema = ProjectionThreadActivity.mapFields(\n  Struct.assign({\n    payload: Schema.fromJsonString(Schema.Unknown),\n    sequence: Schema.NullOr(NonNegativeInt),\n  }),\n);\nconst ProjectionThreadSessionDbRowSchema = ProjectionThreadSession;\nconst ProjectionCheckpointDbRowSchema = ProjectionCheckpoint.mapFields(\n  Struct.assign({\n    files: Schema.fromJsonString(Schema.Array(OrchestrationCheckpointFile)),\n    attribution: OrchestrationCheckpointAttribution.pipe(\n      Schema.withDecodingDefault(Effect.succeed(\"unattributed\")),\n    ),\n  }),\n);\ntype ProjectionThreadMessageDbRow = Schema.Schema.Type<typeof ProjectionThreadMessageDbRowSchema>;\ntype ProjectionThreadProposedPlanDbRow = Schema.Schema.Type<\n  typeof ProjectionThreadProposedPlanDbRowSchema\n>;\ntype ProjectionThreadActivityDbRow = Schema.Schema.Type<typeof ProjectionThreadActivityDbRowSchema>;\ntype ProjectionCheckpointDbRow = Schema.Schema.Type<typeof ProjectionCheckpointDbRowSchema>;\nconst ProjectionLatestTurnDbRowSchema = Schema.Struct({\n  threadId: ProjectionThread.fields.threadId,\n  turnId: TurnId,\n  state: Schema.String,\n  requestedAt: IsoDateTime,\n  startedAt: Schema.NullOr(IsoDateTime),\n  completedAt: Schema.NullOr(IsoDateTime),\n  assistantMessageId: Schema.NullOr(MessageId),\n  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),\n  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),\n});\nconst ProjectionStateDbRowSchema = ProjectionState;\nconst ProjectionCountsRowSchema = Schema.Struct({\n  projectCount: Schema.Number,\n  threadCount: Schema.Number,\n});\nconst WorkspaceRootLookupInput = Schema.Struct({\n  workspaceRoot: Schema.String,\n});\nconst ProjectIdLookupInput = Schema.Struct({\n  projectId: ProjectId,\n});\nconst ThreadIdLookupInput = Schema.Struct({\n  threadId: ThreadId,\n});\nconst ThreadDetailLatestPageLookupInput = Schema.Struct({\n  threadId: ThreadId,\n  limit: Schema.Number,\n});\nconst ThreadDetailCreatedAtCursorPageLookupInput = Schema.Struct({\n  threadId: ThreadId,\n  beforeCreatedAt: IsoDateTime,\n  beforeId: Schema.String,\n  limit: Schema.Number,\n});\nconst ThreadDetailActivityCursorPageLookupInput = Schema.Struct({\n  threadId: ThreadId,\n  beforeCreatedAt: IsoDateTime,\n  beforeId: Schema.String,\n  beforeSequence: Schema.NullOr(NonNegativeInt),\n  limit: Schema.Number,\n});\nconst ThreadDetailCheckpointCursorPageLookupInput = Schema.Struct({\n  threadId: ThreadId,\n  beforeCheckpointTurnCount: NonNegativeInt,\n  limit: Schema.Number,\n});\nconst ProjectionProjectLookupRowSchema = ProjectionProjectDbRowSchema;\nconst ProjectionThreadIdLookupRowSchema = Schema.Struct({\n  threadId: ThreadId,\n});\nconst ProjectionThreadCheckpointContextThreadRowSchema = Schema.Struct({\n  threadId: ThreadId,\n  projectId: ProjectId,\n  workspaceRoot: Schema.String,\n  worktreePath: Schema.NullOr(Schema.String),\n});\nconst FullThreadDiffContextLookupInput = Schema.Struct({\n  threadId: ThreadId,\n  checkpointTurnCount: NonNegativeInt,\n});\nconst ProjectionFullThreadDiffContextRowSchema = Schema.Struct({\n  threadId: ThreadId,\n  projectId: ProjectId,\n  workspaceRoot: Schema.String,\n  worktreePath: Schema.NullOr(Schema.String),\n  latestCheckpointTurnCount: Schema.NullOr(NonNegativeInt),\n  toCheckpointRef: Schema.NullOr(CheckpointRef),\n});\n\nconst REQUIRED_SNAPSHOT_PROJECTORS = [\n  ORCHESTRATION_PROJECTOR_NAMES.projects,\n  ORCHESTRATION_PROJECTOR_NAMES.threads,\n  ORCHESTRATION_PROJECTOR_NAMES.threadMessages,\n  ORCHESTRATION_PROJECTOR_NAMES.threadQueuedTurns,\n  ORCHESTRATION_PROJECTOR_NAMES.threadProposedPlans,\n  ORCHESTRATION_PROJECTOR_NAMES.threadActivities,\n  ORCHESTRATION_PROJECTOR_NAMES.threadSessions,\n  ORCHESTRATION_PROJECTOR_NAMES.checkpoints,\n] as const;\n\nfunction maxIso(left: string | null, right: string): string {\n  if (left === null) {\n    return right;\n  }\n  return left > right ? left : right;\n}\n\nfunction computeSnapshotSequence(\n  stateRows: ReadonlyArray<Schema.Schema.Type<typeof ProjectionStateDbRowSchema>>,\n): number {\n  if (stateRows.length === 0) {\n    return 0;\n  }\n  const sequenceByProjector = new Map(\n    stateRows.map((row) => [row.projector, row.lastAppliedSequence] as const),\n  );\n\n  let minSequence = Number.POSITIVE_INFINITY;\n  for (const projector of REQUIRED_SNAPSHOT_PROJECTORS) {\n    const sequence = sequenceByProjector.get(projector);\n    if (sequence === undefined) {\n      return 0;\n    }\n    if (sequence < minSequence) {\n      minSequence = sequence;\n    }\n  }\n\n  return Number.isFinite(minSequence) ? minSequence : 0;\n}\n\nfunction mapLatestTurn(\n  row: Schema.Schema.Type<typeof ProjectionLatestTurnDbRowSchema>,\n): OrchestrationLatestTurn {\n  return {\n    turnId: row.turnId,\n    state:\n      row.state === \"error\"\n        ? \"error\"\n        : row.state === \"interrupted\"\n          ? \"interrupted\"\n          : row.state === \"completed\"\n            ? \"completed\"\n            : \"running\",\n    requestedAt: row.requestedAt,\n    startedAt: row.startedAt,\n    completedAt: row.completedAt,\n    assistantMessageId: row.assistantMessageId,\n    ...(row.sourceProposedPlanThreadId !== null && row.sourceProposedPlanId !== null\n      ? {\n          sourceProposedPlan: {\n            threadId: row.sourceProposedPlanThreadId,\n            planId: row.sourceProposedPlanId,\n          },\n        }\n      : {}),\n  };\n}\n\nfunction mapSessionRow(\n  row: Schema.Schema.Type<typeof ProjectionThreadSessionDbRowSchema>,\n): OrchestrationSession {\n  return {\n    threadId: row.threadId,\n    status: row.status,\n    providerName: row.providerName,\n    ...(row.providerInstanceId !== null ? { providerInstanceId: row.providerInstanceId } : {}),\n    runtimeMode: row.runtimeMode,\n    activeTurnId: row.activeTurnId,\n    lastError: row.lastError,\n    updatedAt: row.updatedAt,\n  };\n}\n\nfunction mapProjectShellRow(\n  row: Schema.Schema.Type<typeof ProjectionProjectDbRowSchema>,\n  repositoryIdentity: OrchestrationProject[\"repositoryIdentity\"],\n): OrchestrationProjectShell {\n  return {\n    id: row.projectId,\n    title: row.title,\n    workspaceRoot: row.workspaceRoot,\n    repositoryIdentity,\n    defaultModelSelection: row.defaultModelSelection,\n    scripts: row.scripts,\n    createdAt: row.createdAt,\n    updatedAt: row.updatedAt,\n  };\n}\n\nfunction mapProposedPlanRow(\n  row: Schema.Schema.Type<typeof ProjectionThreadProposedPlanDbRowSchema>,\n): OrchestrationProposedPlan {\n  return {\n    id: row.planId,\n    turnId: row.turnId,\n    planMarkdown: row.planMarkdown,\n    implementedAt: row.implementedAt,\n    implementationThreadId: row.implementationThreadId,\n    createdAt: row.createdAt,\n    updatedAt: row.updatedAt,\n  };\n}\n\nfunction mapMessageRow(\n  row: Schema.Schema.Type<typeof ProjectionThreadMessageDbRowSchema>,\n): OrchestrationMessage {\n  const message = {\n    id: row.messageId,\n    role: row.role,\n    text: row.text,\n    turnId: row.turnId,\n    streaming: row.isStreaming === 1,\n    createdAt: row.createdAt,\n    updatedAt: row.updatedAt,\n  };\n  if (row.attachments !== null) {\n    return Object.assign(message, { attachments: row.attachments });\n  }\n  return message;\n}\n\nfunction mapQueuedTurnRow(\n  row: Schema.Schema.Type<typeof ProjectionThreadQueuedTurnDbRowSchema>,\n): OrchestrationQueuedTurnType {\n  return {\n    threadId: row.threadId,\n    messageId: row.messageId,\n    role: row.role,\n    text: row.text,\n    attachments: row.attachments,\n    ...(row.modelSelection !== null ? { modelSelection: row.modelSelection } : {}),\n    ...(row.titleSeed !== null ? { titleSeed: row.titleSeed } : {}),\n    runtimeMode: row.runtimeMode,\n    interactionMode: row.interactionMode,\n    ...(row.sourceProposedPlanThreadId !== null && row.sourceProposedPlanId !== null\n      ? {\n          sourceProposedPlan: {\n            threadId: row.sourceProposedPlanThreadId,\n            planId: row.sourceProposedPlanId,\n          },\n        }\n      : {}),\n    ...(row.steeringExpectedTurnId !== null && row.steeringRequestedAt !== null\n      ? {\n          steering: {\n            expectedTurnId: row.steeringExpectedTurnId,\n            requestedAt: row.steeringRequestedAt,\n          },\n        }\n      : {}),\n    recoveryConfirmationRequired: row.recoveryConfirmationRequired === 1,\n    createdAt: row.createdAt,\n    updatedAt: row.updatedAt,\n  };\n}\n\nfunction mapActivityRow(\n  row: Schema.Schema.Type<typeof ProjectionThreadActivityDbRowSchema>,\n): OrchestrationThreadActivity {\n  const activity = {\n    id: row.activityId,\n    tone: row.tone,\n    kind: row.kind,\n    summary: row.summary,\n    payload: row.payload,\n    turnId: row.turnId,\n    createdAt: row.createdAt,\n  };\n  if (row.sequence !== null) {\n    return Object.assign(activity, { sequence: row.sequence });\n  }\n  return activity;\n}\n\nfunction mapCheckpointRow(\n  row: Schema.Schema.Type<typeof ProjectionCheckpointDbRowSchema>,\n): OrchestrationCheckpointSummary {\n  return {\n    turnId: row.turnId,\n    checkpointTurnCount: row.checkpointTurnCount,\n    checkpointRef: row.checkpointRef,\n    status: row.status,\n    files: row.files,\n    attribution: row.attribution,\n    assistantMessageId: row.assistantMessageId,\n    completedAt: row.completedAt,\n  };\n}\n\nconst DEFAULT_THREAD_DETAIL_PAGE_LIMITS = {\n  messages: 100,\n  proposedPlans: 20,\n  activities: 200,\n  checkpoints: 100,\n} as const;\n\ntype ThreadDetailCollectionKey = keyof OrchestrationThreadDetailPageInfo;\n\nfunction clampThreadDetailPageLimit(value: number | undefined, fallback: number): number {\n  if (value === undefined || !Number.isFinite(value)) {\n    return fallback;\n  }\n  return Math.max(1, Math.min(ORCHESTRATION_THREAD_DETAIL_PAGE_LIMIT_MAX, Math.trunc(value)));\n}\n\nfunction toThreadDetailPageQueryLimit(limit: number): number {\n  return limit + 1;\n}\n\nfunction resolveThreadDetailPageLimits(page: OrchestrationThreadDetailPageRequest) {\n  return {\n    messages: clampThreadDetailPageLimit(\n      page.limits?.messages,\n      DEFAULT_THREAD_DETAIL_PAGE_LIMITS.messages,\n    ),\n    proposedPlans: clampThreadDetailPageLimit(\n      page.limits?.proposedPlans,\n      DEFAULT_THREAD_DETAIL_PAGE_LIMITS.proposedPlans,\n    ),\n    activities: clampThreadDetailPageLimit(\n      page.limits?.activities,\n      DEFAULT_THREAD_DETAIL_PAGE_LIMITS.activities,\n    ),\n    checkpoints: clampThreadDetailPageLimit(\n      page.limits?.checkpoints,\n      DEFAULT_THREAD_DETAIL_PAGE_LIMITS.checkpoints,\n    ),\n  };\n}\n\nfunction hasThreadDetailBeforeCursors(page: OrchestrationThreadDetailPageRequest | null): boolean {\n  const before = page?.before;\n  return (\n    before !== undefined &&\n    (before.messages !== undefined ||\n      before.proposedPlans !== undefined ||\n      before.activities !== undefined ||\n      before.checkpoints !== undefined)\n  );\n}\n\nfunction makeThreadDetailPageCursor(\n  input:\n    | Pick<OrchestrationMessage, \"id\" | \"createdAt\">\n    | Pick<OrchestrationProposedPlan, \"id\" | \"createdAt\">\n    | Pick<OrchestrationThreadActivity, \"id\" | \"createdAt\" | \"sequence\">\n    | Pick<OrchestrationCheckpointSummary, \"turnId\" | \"completedAt\" | \"checkpointTurnCount\">,\n): OrchestrationThreadDetailPageCursor {\n  if (\"checkpointTurnCount\" in input) {\n    return {\n      id: input.turnId,\n      createdAt: input.completedAt,\n      checkpointTurnCount: input.checkpointTurnCount,\n    };\n  }\n  return {\n    id: input.id,\n    createdAt: input.createdAt,\n    ...(\"sequence\" in input ? { sequence: input.sequence ?? null } : {}),\n  };\n}\n\nfunction makeThreadDetailCollectionPageInfo<T>(\n  rows: readonly T[],\n  hasMoreBefore: boolean,\n  toCursor: (row: T) => OrchestrationThreadDetailPageCursor,\n): OrchestrationThreadDetailPageInfo[ThreadDetailCollectionKey] {\n  const first = rows[0];\n  return {\n    hasMoreBefore,\n    startCursor: first === undefined ? null : toCursor(first),\n  };\n}\n\nfunction makeUnpagedThreadDetailPageInfo(): OrchestrationThreadDetailPageInfo {\n  return {\n    messages: { ...EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO.messages },\n    proposedPlans: { ...EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO.proposedPlans },\n    activities: { ...EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO.activities },\n    checkpoints: { ...EMPTY_ORCHESTRATION_THREAD_DETAIL_PAGE_INFO.checkpoints },\n  };\n}\n\nfunction takePagedRows<TRow>(\n  rows: readonly TRow[],\n  limit: number,\n): {\n  rows: TRow[];\n  hasMoreBefore: boolean;\n} {\n  const selected = rows.slice(0, limit).toReversed();\n  return {\n    rows: selected,\n    hasMoreBefore: rows.length > limit,\n  };\n}\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown): ProjectionRepositoryError =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeProjectionSnapshotQuery = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n  const repositoryIdentityResolver = yield* RepositoryIdentityResolver;\n  interface ShellSnapshotOwnerInterrupted {\n    readonly _tag: \"ShellSnapshotOwnerInterrupted\";\n  }\n  const shellSnapshotOwnerInterrupted: ShellSnapshotOwnerInterrupted = {\n    _tag: \"ShellSnapshotOwnerInterrupted\",\n  };\n  const isShellSnapshotOwnerInterrupted = (\n    error: ProjectionRepositoryError | ShellSnapshotOwnerInterrupted,\n  ): error is ShellSnapshotOwnerInterrupted => error._tag === \"ShellSnapshotOwnerInterrupted\";\n  type ShellSnapshotInFlight = Deferred.Deferred<\n    Schema.Schema.Type<typeof OrchestrationShellSnapshot>,\n    ProjectionRepositoryError | ShellSnapshotOwnerInterrupted\n  >;\n  type ShellSnapshotInFlightSelection =\n    | {\n        readonly deferred: ShellSnapshotInFlight;\n        readonly owner: false;\n      }\n    | {\n        readonly deferred: ShellSnapshotInFlight;\n        readonly owner: true;\n      };\n  type ShellSnapshotInFlightRefUpdate = readonly [\n    ShellSnapshotInFlightSelection,\n    ShellSnapshotInFlight,\n  ];\n  const shellSnapshotInFlightRef = yield* Ref.make<ShellSnapshotInFlight | null>(null);\n  const shellSnapshotInFlightWaiterRetryLimit = 3;\n  const repositoryIdentityResolutionConcurrency = 4;\n  const resolveRepositoryIdentitiesForProjects = Effect.fn(\n    \"ProjectionSnapshotQuery.resolveRepositoryIdentitiesForProjects\",\n  )(function* (\n    projectRows: ReadonlyArray<Schema.Schema.Type<typeof ProjectionProjectDbRowSchema>>,\n    options?: {\n      readonly includeDeleted?: boolean;\n    },\n  ) {\n    const filteredProjectRows =\n      options?.includeDeleted === true\n        ? projectRows\n        : projectRows.filter((row) => row.deletedAt === null);\n    const uniqueWorkspaceRoots = [...new Set(filteredProjectRows.map((row) => row.workspaceRoot))];\n    const repositoryIdentityByWorkspaceRoot = new Map(\n      yield* Effect.forEach(\n        uniqueWorkspaceRoots,\n        (workspaceRoot) =>\n          repositoryIdentityResolver\n            .resolve(workspaceRoot)\n            .pipe(Effect.map((identity) => [workspaceRoot, identity] as const)),\n        { concurrency: repositoryIdentityResolutionConcurrency },\n      ),\n    );\n\n    return new Map(\n      filteredProjectRows.map((row) => [\n        row.projectId,\n        repositoryIdentityByWorkspaceRoot.get(row.workspaceRoot) ?? null,\n      ]),\n    );\n  });\n\n  const listProjectRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionProjectDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          project_id AS \"projectId\",\n          title,\n          workspace_root AS \"workspaceRoot\",\n          default_model_selection_json AS \"defaultModelSelection\",\n          scripts_json AS \"scripts\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_projects\n        ORDER BY created_at ASC, project_id ASC\n      `,\n  });\n\n  const listThreadRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          project_id AS \"projectId\",\n          title,\n          model_selection_json AS \"modelSelection\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          parent_thread_id AS \"parentThreadId\",\n          created_by_thread_id AS \"createdByThreadId\",\n          subagent_kind AS \"subagentKind\",\n          subagent_nickname AS \"subagentNickname\",\n          subagent_role AS \"subagentRole\",\n          hidden_from_thread_list AS \"hiddenFromThreadList\",\n          branch,\n          worktree_path AS \"worktreePath\",\n          latest_turn_id AS \"latestTurnId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          archived_at AS \"archivedAt\",\n          latest_user_message_at AS \"latestUserMessageAt\",\n          pending_approval_count AS \"pendingApprovalCount\",\n          pending_user_input_count AS \"pendingUserInputCount\",\n          has_actionable_proposed_plan AS \"hasActionableProposedPlan\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_threads\n        ORDER BY created_at ASC, thread_id ASC\n      `,\n  });\n\n  const listActiveThreadRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          project_id AS \"projectId\",\n          title,\n          model_selection_json AS \"modelSelection\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          parent_thread_id AS \"parentThreadId\",\n          created_by_thread_id AS \"createdByThreadId\",\n          subagent_kind AS \"subagentKind\",\n          subagent_nickname AS \"subagentNickname\",\n          subagent_role AS \"subagentRole\",\n          hidden_from_thread_list AS \"hiddenFromThreadList\",\n          branch,\n          worktree_path AS \"worktreePath\",\n          latest_turn_id AS \"latestTurnId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          archived_at AS \"archivedAt\",\n          latest_user_message_at AS \"latestUserMessageAt\",\n          pending_approval_count AS \"pendingApprovalCount\",\n          pending_user_input_count AS \"pendingUserInputCount\",\n          has_actionable_proposed_plan AS \"hasActionableProposedPlan\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_threads\n        WHERE deleted_at IS NULL\n          AND archived_at IS NULL\n        ORDER BY project_id ASC, created_at ASC, thread_id ASC\n      `,\n  });\n\n  const listArchivedThreadRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          project_id AS \"projectId\",\n          title,\n          model_selection_json AS \"modelSelection\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          parent_thread_id AS \"parentThreadId\",\n          created_by_thread_id AS \"createdByThreadId\",\n          subagent_kind AS \"subagentKind\",\n          subagent_nickname AS \"subagentNickname\",\n          subagent_role AS \"subagentRole\",\n          hidden_from_thread_list AS \"hiddenFromThreadList\",\n          branch,\n          worktree_path AS \"worktreePath\",\n          latest_turn_id AS \"latestTurnId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          archived_at AS \"archivedAt\",\n          latest_user_message_at AS \"latestUserMessageAt\",\n          pending_approval_count AS \"pendingApprovalCount\",\n          pending_user_input_count AS \"pendingUserInputCount\",\n          has_actionable_proposed_plan AS \"hasActionableProposedPlan\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_threads\n        WHERE deleted_at IS NULL\n          AND archived_at IS NOT NULL\n        ORDER BY project_id ASC, archived_at DESC, thread_id DESC\n      `,\n  });\n\n  const listThreadMessageRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadMessageDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          message_id AS \"messageId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          is_streaming AS \"isStreaming\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_messages\n        ORDER BY thread_id ASC, created_at ASC, message_id ASC\n      `,\n  });\n\n  const listThreadQueuedTurnRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadQueuedTurnDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          message_id AS \"messageId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          model_selection_json AS \"modelSelection\",\n          title_seed AS \"titleSeed\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          steering_expected_turn_id AS \"steeringExpectedTurnId\",\n          steering_requested_at AS \"steeringRequestedAt\",\n          recovery_confirmation_required AS \"recoveryConfirmationRequired\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_queued_turns\n        ORDER BY thread_id ASC, created_at ASC, message_id ASC\n      `,\n  });\n\n  const listThreadProposedPlanRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadProposedPlanDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          plan_id AS \"planId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          plan_markdown AS \"planMarkdown\",\n          implemented_at AS \"implementedAt\",\n          implementation_thread_id AS \"implementationThreadId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_proposed_plans\n        ORDER BY thread_id ASC, created_at ASC, plan_id ASC\n      `,\n  });\n\n  const listThreadActivityRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadActivityDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          activity_id AS \"activityId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          tone,\n          kind,\n          summary,\n          payload_json AS \"payload\",\n          sequence,\n          created_at AS \"createdAt\"\n        FROM projection_thread_activities\n        ORDER BY\n          thread_id ASC,\n          sequence ASC,\n          created_at ASC,\n          activity_id ASC\n      `,\n  });\n\n  const listThreadSessionRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadSessionDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          status,\n          provider_name AS \"providerName\",\n          provider_instance_id AS \"providerInstanceId\",\n          provider_session_id AS \"providerSessionId\",\n          provider_thread_id AS \"providerThreadId\",\n          runtime_mode AS \"runtimeMode\",\n          active_turn_id AS \"activeTurnId\",\n          last_error AS \"lastError\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_sessions\n        ORDER BY thread_id ASC\n      `,\n  });\n\n  const listActiveThreadSessionRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadSessionDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          sessions.thread_id AS \"threadId\",\n          sessions.status,\n          sessions.provider_name AS \"providerName\",\n          sessions.provider_instance_id AS \"providerInstanceId\",\n          sessions.provider_session_id AS \"providerSessionId\",\n          sessions.provider_thread_id AS \"providerThreadId\",\n          sessions.runtime_mode AS \"runtimeMode\",\n          sessions.active_turn_id AS \"activeTurnId\",\n          sessions.last_error AS \"lastError\",\n          sessions.updated_at AS \"updatedAt\"\n        FROM projection_thread_sessions sessions\n        INNER JOIN projection_threads threads\n          ON threads.thread_id = sessions.thread_id\n        WHERE threads.deleted_at IS NULL\n          AND threads.archived_at IS NULL\n        ORDER BY sessions.thread_id ASC\n      `,\n  });\n\n  const listArchivedThreadSessionRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionThreadSessionDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          sessions.thread_id AS \"threadId\",\n          sessions.status,\n          sessions.provider_name AS \"providerName\",\n          sessions.provider_instance_id AS \"providerInstanceId\",\n          sessions.provider_session_id AS \"providerSessionId\",\n          sessions.provider_thread_id AS \"providerThreadId\",\n          sessions.runtime_mode AS \"runtimeMode\",\n          sessions.active_turn_id AS \"activeTurnId\",\n          sessions.last_error AS \"lastError\",\n          sessions.updated_at AS \"updatedAt\"\n        FROM projection_thread_sessions sessions\n        INNER JOIN projection_threads threads\n          ON threads.thread_id = sessions.thread_id\n        WHERE threads.deleted_at IS NULL\n          AND threads.archived_at IS NOT NULL\n        ORDER BY sessions.thread_id ASC\n      `,\n  });\n\n  const listCheckpointRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionCheckpointDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          checkpoint_turn_count AS \"checkpointTurnCount\",\n          checkpoint_ref AS \"checkpointRef\",\n          checkpoint_status AS \"status\",\n          COALESCE(checkpoint_attribution, 'unattributed') AS \"attribution\",\n          checkpoint_files_json AS \"files\",\n          assistant_message_id AS \"assistantMessageId\",\n          completed_at AS \"completedAt\"\n        FROM projection_turns\n        WHERE checkpoint_turn_count IS NOT NULL\n        ORDER BY thread_id ASC, checkpoint_turn_count ASC\n      `,\n  });\n\n  const listLatestTurnRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionLatestTurnDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          turns.thread_id AS \"threadId\",\n          turns.turn_id AS \"turnId\",\n          turns.state,\n          turns.requested_at AS \"requestedAt\",\n          turns.started_at AS \"startedAt\",\n          turns.completed_at AS \"completedAt\",\n          turns.assistant_message_id AS \"assistantMessageId\",\n          turns.source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          turns.source_proposed_plan_id AS \"sourceProposedPlanId\"\n        FROM projection_threads threads\n        JOIN projection_turns turns\n          ON turns.thread_id = threads.thread_id\n          AND turns.turn_id = threads.latest_turn_id\n        WHERE threads.latest_turn_id IS NOT NULL\n        ORDER BY turns.thread_id ASC\n      `,\n  });\n\n  const listActiveLatestTurnRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionLatestTurnDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          turns.thread_id AS \"threadId\",\n          turns.turn_id AS \"turnId\",\n          turns.state,\n          turns.requested_at AS \"requestedAt\",\n          turns.started_at AS \"startedAt\",\n          turns.completed_at AS \"completedAt\",\n          turns.assistant_message_id AS \"assistantMessageId\",\n          turns.source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          turns.source_proposed_plan_id AS \"sourceProposedPlanId\"\n        FROM projection_threads threads\n        JOIN projection_turns turns\n          ON turns.thread_id = threads.thread_id\n          AND turns.turn_id = threads.latest_turn_id\n        WHERE threads.deleted_at IS NULL\n          AND threads.archived_at IS NULL\n          AND threads.latest_turn_id IS NOT NULL\n        ORDER BY turns.thread_id ASC\n      `,\n  });\n\n  const listArchivedLatestTurnRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionLatestTurnDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          turns.thread_id AS \"threadId\",\n          turns.turn_id AS \"turnId\",\n          turns.state,\n          turns.requested_at AS \"requestedAt\",\n          turns.started_at AS \"startedAt\",\n          turns.completed_at AS \"completedAt\",\n          turns.assistant_message_id AS \"assistantMessageId\",\n          turns.source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          turns.source_proposed_plan_id AS \"sourceProposedPlanId\"\n        FROM projection_threads threads\n        JOIN projection_turns turns\n          ON turns.thread_id = threads.thread_id\n          AND turns.turn_id = threads.latest_turn_id\n        WHERE threads.deleted_at IS NULL\n          AND threads.archived_at IS NOT NULL\n          AND threads.latest_turn_id IS NOT NULL\n        ORDER BY turns.thread_id ASC\n      `,\n  });\n\n  const listProjectionStateRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProjectionStateDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          projector,\n          last_applied_sequence AS \"lastAppliedSequence\",\n          updated_at AS \"updatedAt\"\n        FROM projection_state\n      `,\n  });\n\n  const readProjectionCounts = SqlSchema.findOne({\n    Request: Schema.Void,\n    Result: ProjectionCountsRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          (SELECT COUNT(*) FROM projection_projects) AS \"projectCount\",\n          (SELECT COUNT(*) FROM projection_threads) AS \"threadCount\"\n      `,\n  });\n\n  const getActiveProjectRowByWorkspaceRoot = SqlSchema.findOneOption({\n    Request: WorkspaceRootLookupInput,\n    Result: ProjectionProjectLookupRowSchema,\n    execute: ({ workspaceRoot }) =>\n      sql`\n        SELECT\n          project_id AS \"projectId\",\n          title,\n          workspace_root AS \"workspaceRoot\",\n          default_model_selection_json AS \"defaultModelSelection\",\n          scripts_json AS \"scripts\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_projects\n        WHERE workspace_root = ${workspaceRoot}\n          AND deleted_at IS NULL\n        ORDER BY created_at ASC, project_id ASC\n        LIMIT 1\n      `,\n  });\n\n  const getActiveProjectRowById = SqlSchema.findOneOption({\n    Request: ProjectIdLookupInput,\n    Result: ProjectionProjectLookupRowSchema,\n    execute: ({ projectId }) =>\n      sql`\n        SELECT\n          project_id AS \"projectId\",\n          title,\n          workspace_root AS \"workspaceRoot\",\n          default_model_selection_json AS \"defaultModelSelection\",\n          scripts_json AS \"scripts\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_projects\n        WHERE project_id = ${projectId}\n          AND deleted_at IS NULL\n        LIMIT 1\n      `,\n  });\n\n  const getMostRecentActiveThreadIdByProject = SqlSchema.findOneOption({\n    Request: ProjectIdLookupInput,\n    Result: ProjectionThreadIdLookupRowSchema,\n    execute: ({ projectId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\"\n        FROM projection_threads\n        WHERE project_id = ${projectId}\n          AND deleted_at IS NULL\n          AND archived_at IS NULL\n          AND hidden_from_thread_list = 0\n        ORDER BY MAX(\n            COALESCE(latest_user_message_at, created_at),\n            COALESCE(updated_at, created_at),\n            created_at\n          ) DESC, thread_id DESC\n        LIMIT 1\n      `,\n  });\n\n  const getThreadCheckpointContextThreadRow = SqlSchema.findOneOption({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadCheckpointContextThreadRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          threads.thread_id AS \"threadId\",\n          threads.project_id AS \"projectId\",\n          projects.workspace_root AS \"workspaceRoot\",\n          threads.worktree_path AS \"worktreePath\"\n        FROM projection_threads AS threads\n        INNER JOIN projection_projects AS projects\n          ON projects.project_id = threads.project_id\n        WHERE threads.thread_id = ${threadId}\n          AND threads.deleted_at IS NULL\n        LIMIT 1\n      `,\n  });\n\n  const getActiveThreadRowById = SqlSchema.findOneOption({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          project_id AS \"projectId\",\n          title,\n          model_selection_json AS \"modelSelection\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          parent_thread_id AS \"parentThreadId\",\n          created_by_thread_id AS \"createdByThreadId\",\n          subagent_kind AS \"subagentKind\",\n          subagent_nickname AS \"subagentNickname\",\n          subagent_role AS \"subagentRole\",\n          hidden_from_thread_list AS \"hiddenFromThreadList\",\n          branch,\n          worktree_path AS \"worktreePath\",\n          latest_turn_id AS \"latestTurnId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\",\n          archived_at AS \"archivedAt\",\n          latest_user_message_at AS \"latestUserMessageAt\",\n          pending_approval_count AS \"pendingApprovalCount\",\n          pending_user_input_count AS \"pendingUserInputCount\",\n          has_actionable_proposed_plan AS \"hasActionableProposedPlan\",\n          deleted_at AS \"deletedAt\"\n        FROM projection_threads\n        WHERE thread_id = ${threadId}\n          AND deleted_at IS NULL\n          AND archived_at IS NULL\n        LIMIT 1\n      `,\n  });\n\n  const listThreadMessageRowsByThread = SqlSchema.findAll({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadMessageDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          message_id AS \"messageId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          is_streaming AS \"isStreaming\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_messages\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, message_id ASC\n\t      `,\n  });\n\n  const listLatestThreadMessageRowsByThread = SqlSchema.findAll({\n    Request: ThreadDetailLatestPageLookupInput,\n    Result: ProjectionThreadMessageDbRowSchema,\n    execute: ({ threadId, limit }) =>\n      sql`\n        SELECT\n          message_id AS \"messageId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          is_streaming AS \"isStreaming\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_messages\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at DESC, message_id DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const listThreadQueuedTurnRowsByThread = SqlSchema.findAll({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadQueuedTurnDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          message_id AS \"messageId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          model_selection_json AS \"modelSelection\",\n          title_seed AS \"titleSeed\",\n          runtime_mode AS \"runtimeMode\",\n          interaction_mode AS \"interactionMode\",\n          source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          source_proposed_plan_id AS \"sourceProposedPlanId\",\n          steering_expected_turn_id AS \"steeringExpectedTurnId\",\n          steering_requested_at AS \"steeringRequestedAt\",\n          recovery_confirmation_required AS \"recoveryConfirmationRequired\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_queued_turns\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, message_id ASC\n      `,\n  });\n\n  const listThreadMessageRowsBeforeCursor = SqlSchema.findAll({\n    Request: ThreadDetailCreatedAtCursorPageLookupInput,\n    Result: ProjectionThreadMessageDbRowSchema,\n    execute: ({ threadId, beforeCreatedAt, beforeId, limit }) =>\n      sql`\n        SELECT\n          message_id AS \"messageId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          role,\n          text,\n          attachments_json AS \"attachments\",\n          is_streaming AS \"isStreaming\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_messages\n        WHERE thread_id = ${threadId}\n          AND (\n            created_at < ${beforeCreatedAt}\n            OR (created_at = ${beforeCreatedAt} AND message_id < ${beforeId})\n          )\n        ORDER BY created_at DESC, message_id DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const listThreadProposedPlanRowsByThread = SqlSchema.findAll({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadProposedPlanDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          plan_id AS \"planId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          plan_markdown AS \"planMarkdown\",\n          implemented_at AS \"implementedAt\",\n          implementation_thread_id AS \"implementationThreadId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_proposed_plans\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at ASC, plan_id ASC\n\t      `,\n  });\n\n  const listLatestThreadProposedPlanRowsByThread = SqlSchema.findAll({\n    Request: ThreadDetailLatestPageLookupInput,\n    Result: ProjectionThreadProposedPlanDbRowSchema,\n    execute: ({ threadId, limit }) =>\n      sql`\n        SELECT\n          plan_id AS \"planId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          plan_markdown AS \"planMarkdown\",\n          implemented_at AS \"implementedAt\",\n          implementation_thread_id AS \"implementationThreadId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_proposed_plans\n        WHERE thread_id = ${threadId}\n        ORDER BY created_at DESC, plan_id DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const listThreadProposedPlanRowsBeforeCursor = SqlSchema.findAll({\n    Request: ThreadDetailCreatedAtCursorPageLookupInput,\n    Result: ProjectionThreadProposedPlanDbRowSchema,\n    execute: ({ threadId, beforeCreatedAt, beforeId, limit }) =>\n      sql`\n        SELECT\n          plan_id AS \"planId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          plan_markdown AS \"planMarkdown\",\n          implemented_at AS \"implementedAt\",\n          implementation_thread_id AS \"implementationThreadId\",\n          created_at AS \"createdAt\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_proposed_plans\n        WHERE thread_id = ${threadId}\n          AND (\n            created_at < ${beforeCreatedAt}\n            OR (created_at = ${beforeCreatedAt} AND plan_id < ${beforeId})\n          )\n        ORDER BY created_at DESC, plan_id DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const listThreadActivityRowsByThread = SqlSchema.findAll({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadActivityDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          activity_id AS \"activityId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          tone,\n          kind,\n          summary,\n          payload_json AS \"payload\",\n          sequence,\n          created_at AS \"createdAt\"\n        FROM projection_thread_activities\n        WHERE thread_id = ${threadId}\n        ORDER BY\n          sequence ASC,\n          created_at ASC,\n          activity_id ASC\n\t      `,\n  });\n\n  const listLatestThreadActivityRowsByThread = SqlSchema.findAll({\n    Request: ThreadDetailLatestPageLookupInput,\n    Result: ProjectionThreadActivityDbRowSchema,\n    execute: ({ threadId, limit }) =>\n      sql`\n        SELECT\n          activity_id AS \"activityId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          tone,\n          kind,\n          summary,\n          payload_json AS \"payload\",\n          sequence,\n          created_at AS \"createdAt\"\n        FROM projection_thread_activities\n        WHERE thread_id = ${threadId}\n        ORDER BY\n          CASE WHEN sequence IS NULL THEN 0 ELSE 1 END DESC,\n          sequence DESC,\n          created_at DESC,\n          activity_id DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const listThreadActivityRowsBeforeCursor = SqlSchema.findAll({\n    Request: ThreadDetailActivityCursorPageLookupInput,\n    Result: ProjectionThreadActivityDbRowSchema,\n    execute: ({ threadId, beforeCreatedAt, beforeId, beforeSequence, limit }) =>\n      sql`\n        SELECT\n          activity_id AS \"activityId\",\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          tone,\n          kind,\n          summary,\n          payload_json AS \"payload\",\n          sequence,\n          created_at AS \"createdAt\"\n        FROM projection_thread_activities\n        WHERE thread_id = ${threadId}\n          AND (\n            (${beforeSequence} IS NULL AND sequence IS NULL AND (\n              created_at < ${beforeCreatedAt}\n              OR (created_at = ${beforeCreatedAt} AND activity_id < ${beforeId})\n            ))\n            OR (${beforeSequence} IS NOT NULL AND sequence IS NULL)\n            OR (${beforeSequence} IS NOT NULL AND sequence < ${beforeSequence})\n            OR (${beforeSequence} IS NOT NULL AND sequence = ${beforeSequence} AND (\n              created_at < ${beforeCreatedAt}\n              OR (created_at = ${beforeCreatedAt} AND activity_id < ${beforeId})\n            ))\n          )\n        ORDER BY\n          CASE WHEN sequence IS NULL THEN 0 ELSE 1 END DESC,\n          sequence DESC,\n          created_at DESC,\n          activity_id DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const getThreadSessionRowByThread = SqlSchema.findOneOption({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionThreadSessionDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          status,\n          provider_name AS \"providerName\",\n          provider_instance_id AS \"providerInstanceId\",\n          runtime_mode AS \"runtimeMode\",\n          active_turn_id AS \"activeTurnId\",\n          last_error AS \"lastError\",\n          updated_at AS \"updatedAt\"\n        FROM projection_thread_sessions\n        WHERE thread_id = ${threadId}\n        LIMIT 1\n      `,\n  });\n\n  const getLatestTurnRowByThread = SqlSchema.findOneOption({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionLatestTurnDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          turns.thread_id AS \"threadId\",\n          turns.turn_id AS \"turnId\",\n          turns.state,\n          turns.requested_at AS \"requestedAt\",\n          turns.started_at AS \"startedAt\",\n          turns.completed_at AS \"completedAt\",\n          turns.assistant_message_id AS \"assistantMessageId\",\n          turns.source_proposed_plan_thread_id AS \"sourceProposedPlanThreadId\",\n          turns.source_proposed_plan_id AS \"sourceProposedPlanId\"\n        FROM projection_threads threads\n        JOIN projection_turns turns\n          ON turns.thread_id = threads.thread_id\n          AND turns.turn_id = threads.latest_turn_id\n        WHERE threads.thread_id = ${threadId}\n          AND threads.deleted_at IS NULL\n          AND threads.archived_at IS NULL\n        LIMIT 1\n      `,\n  });\n\n  const listCheckpointRowsByThread = SqlSchema.findAll({\n    Request: ThreadIdLookupInput,\n    Result: ProjectionCheckpointDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          checkpoint_turn_count AS \"checkpointTurnCount\",\n          checkpoint_ref AS \"checkpointRef\",\n          checkpoint_status AS \"status\",\n          COALESCE(checkpoint_attribution, 'unattributed') AS \"attribution\",\n          checkpoint_files_json AS \"files\",\n          assistant_message_id AS \"assistantMessageId\",\n          completed_at AS \"completedAt\"\n        FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND checkpoint_turn_count IS NOT NULL\n        ORDER BY checkpoint_turn_count ASC\n      `,\n  });\n\n  const listLatestCheckpointRowsByThread = SqlSchema.findAll({\n    Request: ThreadDetailLatestPageLookupInput,\n    Result: ProjectionCheckpointDbRowSchema,\n    execute: ({ threadId, limit }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          checkpoint_turn_count AS \"checkpointTurnCount\",\n          checkpoint_ref AS \"checkpointRef\",\n          checkpoint_status AS \"status\",\n          COALESCE(checkpoint_attribution, 'unattributed') AS \"attribution\",\n          checkpoint_files_json AS \"files\",\n          assistant_message_id AS \"assistantMessageId\",\n          completed_at AS \"completedAt\"\n        FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND checkpoint_turn_count IS NOT NULL\n        ORDER BY checkpoint_turn_count DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const listCheckpointRowsBeforeCursor = SqlSchema.findAll({\n    Request: ThreadDetailCheckpointCursorPageLookupInput,\n    Result: ProjectionCheckpointDbRowSchema,\n    execute: ({ threadId, beforeCheckpointTurnCount, limit }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          turn_id AS \"turnId\",\n          checkpoint_turn_count AS \"checkpointTurnCount\",\n          checkpoint_ref AS \"checkpointRef\",\n          checkpoint_status AS \"status\",\n          COALESCE(checkpoint_attribution, 'unattributed') AS \"attribution\",\n          checkpoint_files_json AS \"files\",\n          assistant_message_id AS \"assistantMessageId\",\n          completed_at AS \"completedAt\"\n        FROM projection_turns\n        WHERE thread_id = ${threadId}\n          AND checkpoint_turn_count IS NOT NULL\n          AND checkpoint_turn_count < ${beforeCheckpointTurnCount}\n        ORDER BY checkpoint_turn_count DESC\n        LIMIT ${limit}\n      `,\n  });\n\n  const getFullThreadDiffContextRow = SqlSchema.findOneOption({\n    Request: FullThreadDiffContextLookupInput,\n    Result: ProjectionFullThreadDiffContextRowSchema,\n    execute: ({ threadId, checkpointTurnCount }) =>\n      sql`\n        SELECT\n          threads.thread_id AS \"threadId\",\n          threads.project_id AS \"projectId\",\n          projects.workspace_root AS \"workspaceRoot\",\n          threads.worktree_path AS \"worktreePath\",\n          (\n            SELECT MAX(turns.checkpoint_turn_count)\n            FROM projection_turns AS turns\n            WHERE turns.thread_id = threads.thread_id\n              AND turns.checkpoint_turn_count IS NOT NULL\n          ) AS \"latestCheckpointTurnCount\",\n          (\n            SELECT turns.checkpoint_ref\n            FROM projection_turns AS turns\n            WHERE turns.thread_id = threads.thread_id\n              AND turns.checkpoint_turn_count = ${checkpointTurnCount}\n            LIMIT 1\n          ) AS \"toCheckpointRef\"\n        FROM projection_threads AS threads\n        INNER JOIN projection_projects AS projects\n          ON projects.project_id = threads.project_id\n        WHERE threads.thread_id = ${threadId}\n          AND threads.deleted_at IS NULL\n        LIMIT 1\n      `,\n  });\n\n  const getSnapshot: ProjectionSnapshotQueryShape[\"getSnapshot\"] = () =>\n    sql\n      .withTransaction(\n        Effect.all([\n          listProjectRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listProjects:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listProjects:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listThreads:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listThreads:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadMessageRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadMessages:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadMessages:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadQueuedTurnRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadQueuedTurns:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadQueuedTurns:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadProposedPlanRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadProposedPlans:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadProposedPlans:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadActivityRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadActivities:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadActivities:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadSessionRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadSessions:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listThreadSessions:decodeRows\",\n              ),\n            ),\n          ),\n          listCheckpointRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listCheckpoints:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listCheckpoints:decodeRows\",\n              ),\n            ),\n          ),\n          listLatestTurnRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listLatestTurns:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listLatestTurns:decodeRows\",\n              ),\n            ),\n          ),\n          listProjectionStateRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getSnapshot:listProjectionState:query\",\n                \"ProjectionSnapshotQuery.getSnapshot:listProjectionState:decodeRows\",\n              ),\n            ),\n          ),\n        ]),\n      )\n      .pipe(\n        Effect.flatMap(\n          ([\n            projectRows,\n            threadRows,\n            messageRows,\n            queuedTurnRows,\n            proposedPlanRows,\n            activityRows,\n            sessionRows,\n            checkpointRows,\n            latestTurnRows,\n            stateRows,\n          ]) =>\n            Effect.gen(function* () {\n              const messagesByThread = new Map<string, Array<OrchestrationMessage>>();\n              const queuedTurnsByThread = new Map<string, Array<OrchestrationQueuedTurnType>>();\n              const proposedPlansByThread = new Map<string, Array<OrchestrationProposedPlan>>();\n              const activitiesByThread = new Map<string, Array<OrchestrationThreadActivity>>();\n              const checkpointsByThread = new Map<string, Array<OrchestrationCheckpointSummary>>();\n              const sessionsByThread = new Map<string, OrchestrationSession>();\n              const latestTurnByThread = new Map<string, OrchestrationLatestTurn>();\n\n              let updatedAt: string | null = null;\n\n              for (const row of projectRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n              for (const row of threadRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n              for (const row of stateRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n\n              for (const row of messageRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n                const threadMessages = messagesByThread.get(row.threadId) ?? [];\n                threadMessages.push({\n                  id: row.messageId,\n                  role: row.role,\n                  text: row.text,\n                  ...(row.attachments !== null ? { attachments: row.attachments } : {}),\n                  turnId: row.turnId,\n                  streaming: row.isStreaming === 1,\n                  createdAt: row.createdAt,\n                  updatedAt: row.updatedAt,\n                });\n                messagesByThread.set(row.threadId, threadMessages);\n              }\n\n              for (const row of queuedTurnRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n                const threadQueuedTurns = queuedTurnsByThread.get(row.threadId) ?? [];\n                threadQueuedTurns.push(mapQueuedTurnRow(row));\n                queuedTurnsByThread.set(row.threadId, threadQueuedTurns);\n              }\n\n              for (const row of proposedPlanRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n                const threadProposedPlans = proposedPlansByThread.get(row.threadId) ?? [];\n                threadProposedPlans.push({\n                  id: row.planId,\n                  turnId: row.turnId,\n                  planMarkdown: row.planMarkdown,\n                  implementedAt: row.implementedAt,\n                  implementationThreadId: row.implementationThreadId,\n                  createdAt: row.createdAt,\n                  updatedAt: row.updatedAt,\n                });\n                proposedPlansByThread.set(row.threadId, threadProposedPlans);\n              }\n\n              for (const row of activityRows) {\n                updatedAt = maxIso(updatedAt, row.createdAt);\n                const threadActivities = activitiesByThread.get(row.threadId) ?? [];\n                threadActivities.push({\n                  id: row.activityId,\n                  tone: row.tone,\n                  kind: row.kind,\n                  summary: row.summary,\n                  payload: row.payload,\n                  turnId: row.turnId,\n                  ...(row.sequence !== null ? { sequence: row.sequence } : {}),\n                  createdAt: row.createdAt,\n                });\n                activitiesByThread.set(row.threadId, threadActivities);\n              }\n\n              for (const row of checkpointRows) {\n                updatedAt = maxIso(updatedAt, row.completedAt);\n                const threadCheckpoints = checkpointsByThread.get(row.threadId) ?? [];\n                threadCheckpoints.push({\n                  turnId: row.turnId,\n                  checkpointTurnCount: row.checkpointTurnCount,\n                  checkpointRef: row.checkpointRef,\n                  status: row.status,\n                  files: row.files,\n                  attribution: row.attribution,\n                  assistantMessageId: row.assistantMessageId,\n                  completedAt: row.completedAt,\n                });\n                checkpointsByThread.set(row.threadId, threadCheckpoints);\n              }\n\n              for (const row of latestTurnRows) {\n                updatedAt = maxIso(updatedAt, row.requestedAt);\n                if (row.startedAt !== null) {\n                  updatedAt = maxIso(updatedAt, row.startedAt);\n                }\n                if (row.completedAt !== null) {\n                  updatedAt = maxIso(updatedAt, row.completedAt);\n                }\n                if (latestTurnByThread.has(row.threadId)) {\n                  continue;\n                }\n                latestTurnByThread.set(row.threadId, {\n                  turnId: row.turnId,\n                  state:\n                    row.state === \"error\"\n                      ? \"error\"\n                      : row.state === \"interrupted\"\n                        ? \"interrupted\"\n                        : row.state === \"completed\"\n                          ? \"completed\"\n                          : \"running\",\n                  requestedAt: row.requestedAt,\n                  startedAt: row.startedAt,\n                  completedAt: row.completedAt,\n                  assistantMessageId: row.assistantMessageId,\n                  ...(row.sourceProposedPlanThreadId !== null && row.sourceProposedPlanId !== null\n                    ? {\n                        sourceProposedPlan: {\n                          threadId: row.sourceProposedPlanThreadId,\n                          planId: row.sourceProposedPlanId,\n                        },\n                      }\n                    : {}),\n                });\n              }\n\n              for (const row of sessionRows) {\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n                sessionsByThread.set(row.threadId, {\n                  threadId: row.threadId,\n                  status: row.status,\n                  providerName: row.providerName,\n                  ...(row.providerInstanceId !== null\n                    ? { providerInstanceId: row.providerInstanceId }\n                    : {}),\n                  runtimeMode: row.runtimeMode,\n                  activeTurnId: row.activeTurnId,\n                  lastError: row.lastError,\n                  updatedAt: row.updatedAt,\n                });\n              }\n\n              const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(\n                projectRows,\n                { includeDeleted: true },\n              );\n\n              const projects: ReadonlyArray<OrchestrationProject> = projectRows.map((row) => ({\n                id: row.projectId,\n                title: row.title,\n                workspaceRoot: row.workspaceRoot,\n                repositoryIdentity: repositoryIdentities.get(row.projectId) ?? null,\n                defaultModelSelection: row.defaultModelSelection,\n                scripts: row.scripts,\n                createdAt: row.createdAt,\n                updatedAt: row.updatedAt,\n                deletedAt: row.deletedAt,\n              }));\n\n              const threads: ReadonlyArray<OrchestrationThread> = threadRows.map((row) => ({\n                id: row.threadId,\n                projectId: row.projectId,\n                title: row.title,\n                modelSelection: row.modelSelection,\n                runtimeMode: row.runtimeMode,\n                interactionMode: row.interactionMode,\n                ...mapThreadRelationshipFields(row),\n                branch: row.branch,\n                worktreePath: row.worktreePath,\n                latestTurn: latestTurnByThread.get(row.threadId) ?? null,\n                createdAt: row.createdAt,\n                updatedAt: row.updatedAt,\n                archivedAt: row.archivedAt,\n                deletedAt: row.deletedAt,\n                messages: messagesByThread.get(row.threadId) ?? [],\n                queuedTurns: queuedTurnsByThread.get(row.threadId) ?? [],\n                proposedPlans: proposedPlansByThread.get(row.threadId) ?? [],\n                activities: activitiesByThread.get(row.threadId) ?? [],\n                checkpoints: checkpointsByThread.get(row.threadId) ?? [],\n                session: sessionsByThread.get(row.threadId) ?? null,\n              }));\n\n              const snapshot = {\n                snapshotSequence: computeSnapshotSequence(stateRows),\n                projects,\n                threads,\n                updatedAt: updatedAt ?? \"1970-01-01T00:00:00.000Z\",\n              };\n\n              return yield* decodeReadModel(snapshot).pipe(\n                Effect.mapError(\n                  toPersistenceDecodeError(\"ProjectionSnapshotQuery.getSnapshot:decodeReadModel\"),\n                ),\n              );\n            }),\n        ),\n        Effect.mapError((error) => {\n          if (isPersistenceError(error)) {\n            return error;\n          }\n          return toPersistenceSqlError(\"ProjectionSnapshotQuery.getSnapshot:query\")(error);\n        }),\n      );\n\n  const getCommandReadModel: ProjectionSnapshotQueryShape[\"getCommandReadModel\"] = () =>\n    sql\n      .withTransaction(\n        Effect.all([\n          listProjectRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listProjects:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listProjects:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreads:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreads:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadProposedPlanRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreadProposedPlans:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreadProposedPlans:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadQueuedTurnRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreadQueuedTurns:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreadQueuedTurns:decodeRows\",\n              ),\n            ),\n          ),\n          listThreadSessionRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreadSessions:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listThreadSessions:decodeRows\",\n              ),\n            ),\n          ),\n          listLatestTurnRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listLatestTurns:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listLatestTurns:decodeRows\",\n              ),\n            ),\n          ),\n          listProjectionStateRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getCommandReadModel:listProjectionState:query\",\n                \"ProjectionSnapshotQuery.getCommandReadModel:listProjectionState:decodeRows\",\n              ),\n            ),\n          ),\n        ]),\n      )\n      .pipe(\n        Effect.flatMap(\n          ([\n            projectRows,\n            threadRows,\n            proposedPlanRows,\n            queuedTurnRows,\n            sessionRows,\n            latestTurnRows,\n            stateRows,\n          ]) =>\n            Effect.sync(() => {\n              let updatedAt: string | null = null;\n              const projects: OrchestrationProject[] = [];\n              const threads: OrchestrationThread[] = [];\n\n              for (let index = 0; index < projectRows.length; index += 1) {\n                const row = projectRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n                projects.push({\n                  id: row.projectId,\n                  title: row.title,\n                  workspaceRoot: row.workspaceRoot,\n                  defaultModelSelection: row.defaultModelSelection,\n                  scripts: row.scripts,\n                  createdAt: row.createdAt,\n                  updatedAt: row.updatedAt,\n                  deletedAt: row.deletedAt,\n                });\n              }\n              for (let index = 0; index < threadRows.length; index += 1) {\n                const row = threadRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n              for (let index = 0; index < proposedPlanRows.length; index += 1) {\n                const row = proposedPlanRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n              for (let index = 0; index < queuedTurnRows.length; index += 1) {\n                const row = queuedTurnRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n              for (let index = 0; index < sessionRows.length; index += 1) {\n                const row = sessionRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n              for (let index = 0; index < latestTurnRows.length; index += 1) {\n                const row = latestTurnRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.requestedAt);\n                if (row.startedAt !== null) {\n                  updatedAt = maxIso(updatedAt, row.startedAt);\n                }\n                if (row.completedAt !== null) {\n                  updatedAt = maxIso(updatedAt, row.completedAt);\n                }\n              }\n              for (let index = 0; index < stateRows.length; index += 1) {\n                const row = stateRows[index];\n                if (!row) {\n                  continue;\n                }\n                updatedAt = maxIso(updatedAt, row.updatedAt);\n              }\n\n              const latestTurnByThread = new Map<string, OrchestrationLatestTurn>();\n              for (let index = 0; index < latestTurnRows.length; index += 1) {\n                const row = latestTurnRows[index];\n                if (!row) {\n                  continue;\n                }\n                latestTurnByThread.set(row.threadId, mapLatestTurn(row));\n              }\n              const proposedPlansByThread = new Map<string, Array<OrchestrationProposedPlan>>();\n              const queuedTurnsByThread = new Map<string, Array<OrchestrationQueuedTurnType>>();\n              const sessionByThread = new Map<string, OrchestrationSession>();\n\n              for (let index = 0; index < sessionRows.length; index += 1) {\n                const row = sessionRows[index];\n                if (!row) {\n                  continue;\n                }\n                sessionByThread.set(row.threadId, mapSessionRow(row));\n              }\n\n              for (let index = 0; index < proposedPlanRows.length; index += 1) {\n                const row = proposedPlanRows[index];\n                if (!row) {\n                  continue;\n                }\n                const threadProposedPlans = proposedPlansByThread.get(row.threadId) ?? [];\n                threadProposedPlans.push(mapProposedPlanRow(row));\n                proposedPlansByThread.set(row.threadId, threadProposedPlans);\n              }\n\n              for (let index = 0; index < queuedTurnRows.length; index += 1) {\n                const row = queuedTurnRows[index];\n                if (!row) {\n                  continue;\n                }\n                const threadQueuedTurns = queuedTurnsByThread.get(row.threadId) ?? [];\n                threadQueuedTurns.push(mapQueuedTurnRow(row));\n                queuedTurnsByThread.set(row.threadId, threadQueuedTurns);\n              }\n\n              for (let index = 0; index < threadRows.length; index += 1) {\n                const row = threadRows[index];\n                if (!row) {\n                  continue;\n                }\n                threads.push({\n                  id: row.threadId,\n                  projectId: row.projectId,\n                  title: row.title,\n                  modelSelection: row.modelSelection,\n                  runtimeMode: row.runtimeMode,\n                  interactionMode: row.interactionMode,\n                  ...mapThreadRelationshipFields(row),\n                  branch: row.branch,\n                  worktreePath: row.worktreePath,\n                  latestTurn: latestTurnByThread.get(row.threadId) ?? null,\n                  createdAt: row.createdAt,\n                  updatedAt: row.updatedAt,\n                  archivedAt: row.archivedAt,\n                  deletedAt: row.deletedAt,\n                  messages: [],\n                  queuedTurns: queuedTurnsByThread.get(row.threadId) ?? [],\n                  proposedPlans: proposedPlansByThread.get(row.threadId) ?? [],\n                  activities: [],\n                  checkpoints: [],\n                  session: sessionByThread.get(row.threadId) ?? null,\n                });\n              }\n\n              return {\n                snapshotSequence: computeSnapshotSequence(stateRows),\n                projects,\n                threads,\n                updatedAt: updatedAt ?? \"1970-01-01T00:00:00.000Z\",\n              } satisfies OrchestrationReadModel;\n            }),\n        ),\n        Effect.mapError((error) => {\n          if (isPersistenceError(error)) {\n            return error;\n          }\n          return toPersistenceSqlError(\"ProjectionSnapshotQuery.getCommandReadModel:query\")(error);\n        }),\n      );\n\n  const loadShellSnapshot: ProjectionSnapshotQueryShape[\"getShellSnapshot\"] = () =>\n    sql\n      .withTransaction(\n        Effect.all([\n          listProjectRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getShellSnapshot:listProjects:query\",\n                \"ProjectionSnapshotQuery.getShellSnapshot:listProjects:decodeRows\",\n              ),\n            ),\n          ),\n          listActiveThreadRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getShellSnapshot:listThreads:query\",\n                \"ProjectionSnapshotQuery.getShellSnapshot:listThreads:decodeRows\",\n              ),\n            ),\n          ),\n          listActiveThreadSessionRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getShellSnapshot:listThreadSessions:query\",\n                \"ProjectionSnapshotQuery.getShellSnapshot:listThreadSessions:decodeRows\",\n              ),\n            ),\n          ),\n          listActiveLatestTurnRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getShellSnapshot:listLatestTurns:query\",\n                \"ProjectionSnapshotQuery.getShellSnapshot:listLatestTurns:decodeRows\",\n              ),\n            ),\n          ),\n          listProjectionStateRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getShellSnapshot:listProjectionState:query\",\n                \"ProjectionSnapshotQuery.getShellSnapshot:listProjectionState:decodeRows\",\n              ),\n            ),\n          ),\n        ]),\n      )\n      .pipe(\n        Effect.flatMap(([projectRows, threadRows, sessionRows, latestTurnRows, stateRows]) =>\n          Effect.gen(function* () {\n            let updatedAt: string | null = null;\n            for (const row of projectRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n            for (const row of threadRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n            for (const row of sessionRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n            for (const row of latestTurnRows) {\n              updatedAt = maxIso(updatedAt, row.requestedAt);\n              if (row.startedAt !== null) {\n                updatedAt = maxIso(updatedAt, row.startedAt);\n              }\n              if (row.completedAt !== null) {\n                updatedAt = maxIso(updatedAt, row.completedAt);\n              }\n            }\n            for (const row of stateRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n\n            const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(projectRows);\n            const latestTurnByThread = new Map(\n              latestTurnRows.map((row) => [row.threadId, mapLatestTurn(row)] as const),\n            );\n            const sessionByThread = new Map(\n              sessionRows.map((row) => [row.threadId, mapSessionRow(row)] as const),\n            );\n\n            const snapshot = {\n              snapshotSequence: computeSnapshotSequence(stateRows),\n              projects: Arr.filterMap(projectRows, (row) =>\n                row.deletedAt === null\n                  ? Result.succeed(\n                      mapProjectShellRow(row, repositoryIdentities.get(row.projectId) ?? null),\n                    )\n                  : Result.failVoid,\n              ),\n              threads: Arr.filterMap(threadRows, (row) =>\n                row.deletedAt === null\n                  ? Result.succeed({\n                      id: row.threadId,\n                      projectId: row.projectId,\n                      title: row.title,\n                      modelSelection: row.modelSelection,\n                      runtimeMode: row.runtimeMode,\n                      interactionMode: row.interactionMode,\n                      ...mapThreadRelationshipFields(row),\n                      branch: row.branch,\n                      worktreePath: row.worktreePath,\n                      latestTurn: latestTurnByThread.get(row.threadId) ?? null,\n                      createdAt: row.createdAt,\n                      updatedAt: row.updatedAt,\n                      archivedAt: row.archivedAt,\n                      session: sessionByThread.get(row.threadId) ?? null,\n                      latestUserMessageAt: row.latestUserMessageAt,\n                      hasPendingApprovals: row.pendingApprovalCount > 0,\n                      hasPendingUserInput: row.pendingUserInputCount > 0,\n                      hasActionableProposedPlan: row.hasActionableProposedPlan > 0,\n                    } satisfies OrchestrationThreadShell)\n                  : Result.failVoid,\n              ),\n              updatedAt: updatedAt ?? \"1970-01-01T00:00:00.000Z\",\n            };\n\n            return yield* decodeShellSnapshot(snapshot).pipe(\n              Effect.mapError(\n                toPersistenceDecodeError(\n                  \"ProjectionSnapshotQuery.getShellSnapshot:decodeShellSnapshot\",\n                ),\n              ),\n            );\n          }),\n        ),\n        Effect.mapError((error) => {\n          if (isPersistenceError(error)) {\n            return error;\n          }\n          return toPersistenceSqlError(\"ProjectionSnapshotQuery.getShellSnapshot:query\")(error);\n        }),\n      );\n\n  const makeShellSnapshotOwnerInterruptedError = () =>\n    toPersistenceSqlError(\"ProjectionSnapshotQuery.getShellSnapshot:coalescedOwnerInterrupted\")(\n      new Error(\"Coalesced shell snapshot owner was interrupted repeatedly.\"),\n    );\n\n  const getShellSnapshotAttempt = (\n    remainingWaiterRetries: number,\n  ): ReturnType<ProjectionSnapshotQueryShape[\"getShellSnapshot\"]> =>\n    Effect.uninterruptibleMask((restore) =>\n      Effect.gen(function* () {\n        const deferred = yield* Deferred.make<\n          Schema.Schema.Type<typeof OrchestrationShellSnapshot>,\n          ProjectionRepositoryError | ShellSnapshotOwnerInterrupted\n        >();\n        const inFlight: ShellSnapshotInFlightSelection = yield* Ref.modify(\n          shellSnapshotInFlightRef,\n          (current): ShellSnapshotInFlightRefUpdate => {\n            if (current !== null) {\n              const selected: ShellSnapshotInFlightSelection = {\n                deferred: current,\n                owner: false,\n              };\n              return [selected, current] as const;\n            }\n            const selected: ShellSnapshotInFlightSelection = {\n              deferred,\n              owner: true,\n            };\n            return [selected, deferred] as const;\n          },\n        );\n\n        if (!inFlight.owner) {\n          return yield* restore(Deferred.await(inFlight.deferred)).pipe(\n            Effect.catchIf(isShellSnapshotOwnerInterrupted, () =>\n              remainingWaiterRetries > 0\n                ? getShellSnapshotAttempt(remainingWaiterRetries - 1)\n                : Effect.fail(makeShellSnapshotOwnerInterruptedError()),\n            ),\n          );\n        }\n\n        return yield* restore(loadShellSnapshot()).pipe(\n          Effect.onExit((exit) =>\n            Effect.uninterruptible(\n              Effect.gen(function* () {\n                if (Exit.hasInterrupts(exit) && !Exit.hasDies(exit)) {\n                  yield* Ref.update(shellSnapshotInFlightRef, (current) =>\n                    current === inFlight.deferred ? null : current,\n                  );\n                  yield* Deferred.fail(inFlight.deferred, shellSnapshotOwnerInterrupted);\n                } else {\n                  yield* Deferred.done(inFlight.deferred, exit);\n                  yield* Ref.update(shellSnapshotInFlightRef, (current) =>\n                    current === inFlight.deferred ? null : current,\n                  );\n                }\n              }),\n            ),\n          ),\n        );\n      }),\n    );\n\n  const getShellSnapshot: ProjectionSnapshotQueryShape[\"getShellSnapshot\"] = () =>\n    getShellSnapshotAttempt(shellSnapshotInFlightWaiterRetryLimit);\n\n  const getArchivedShellSnapshot: ProjectionSnapshotQueryShape[\"getArchivedShellSnapshot\"] = () =>\n    sql\n      .withTransaction(\n        Effect.all([\n          listProjectRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listProjects:query\",\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listProjects:decodeRows\",\n              ),\n            ),\n          ),\n          listArchivedThreadRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listThreads:query\",\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listThreads:decodeRows\",\n              ),\n            ),\n          ),\n          listArchivedThreadSessionRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listThreadSessions:query\",\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listThreadSessions:decodeRows\",\n              ),\n            ),\n          ),\n          listArchivedLatestTurnRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listLatestTurns:query\",\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listLatestTurns:decodeRows\",\n              ),\n            ),\n          ),\n          listProjectionStateRows(undefined).pipe(\n            Effect.mapError(\n              toPersistenceSqlOrDecodeError(\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listProjectionState:query\",\n                \"ProjectionSnapshotQuery.getArchivedShellSnapshot:listProjectionState:decodeRows\",\n              ),\n            ),\n          ),\n        ]),\n      )\n      .pipe(\n        Effect.flatMap(([projectRows, threadRows, sessionRows, latestTurnRows, stateRows]) =>\n          Effect.gen(function* () {\n            let updatedAt: string | null = null;\n            for (const row of projectRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n            for (const row of threadRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n            for (const row of sessionRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n            for (const row of latestTurnRows) {\n              updatedAt = maxIso(updatedAt, row.requestedAt);\n              if (row.startedAt !== null) {\n                updatedAt = maxIso(updatedAt, row.startedAt);\n              }\n              if (row.completedAt !== null) {\n                updatedAt = maxIso(updatedAt, row.completedAt);\n              }\n            }\n            for (const row of stateRows) {\n              updatedAt = maxIso(updatedAt, row.updatedAt);\n            }\n\n            const activeProjectIds = new Set(threadRows.map((row) => row.projectId));\n            const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(\n              projectRows.filter((row) => activeProjectIds.has(row.projectId)),\n            );\n            const latestTurnByThread = new Map(\n              latestTurnRows.map((row) => [row.threadId, mapLatestTurn(row)] as const),\n            );\n            const sessionByThread = new Map(\n              sessionRows.map((row) => [row.threadId, mapSessionRow(row)] as const),\n            );\n\n            const snapshot = {\n              snapshotSequence: computeSnapshotSequence(stateRows),\n              projects: Arr.filterMap(projectRows, (row) =>\n                row.deletedAt === null && activeProjectIds.has(row.projectId)\n                  ? Result.succeed(\n                      mapProjectShellRow(row, repositoryIdentities.get(row.projectId) ?? null),\n                    )\n                  : Result.failVoid,\n              ),\n              threads: threadRows.map((row): OrchestrationThreadShell => ({\n                id: row.threadId,\n                projectId: row.projectId,\n                title: row.title,\n                modelSelection: row.modelSelection,\n                runtimeMode: row.runtimeMode,\n                interactionMode: row.interactionMode,\n                ...mapThreadRelationshipFields(row),\n                branch: row.branch,\n                worktreePath: row.worktreePath,\n                latestTurn: latestTurnByThread.get(row.threadId) ?? null,\n                createdAt: row.createdAt,\n                updatedAt: row.updatedAt,\n                archivedAt: row.archivedAt,\n                session: sessionByThread.get(row.threadId) ?? null,\n                latestUserMessageAt: row.latestUserMessageAt,\n                hasPendingApprovals: row.pendingApprovalCount > 0,\n                hasPendingUserInput: row.pendingUserInputCount > 0,\n                hasActionableProposedPlan: row.hasActionableProposedPlan > 0,\n              })),\n              updatedAt: updatedAt ?? \"1970-01-01T00:00:00.000Z\",\n            };\n\n            return yield* decodeShellSnapshot(snapshot).pipe(\n              Effect.mapError(\n                toPersistenceDecodeError(\n                  \"ProjectionSnapshotQuery.getArchivedShellSnapshot:decodeShellSnapshot\",\n                ),\n              ),\n            );\n          }),\n        ),\n        Effect.mapError((error) => {\n          if (isPersistenceError(error)) {\n            return error;\n          }\n          return toPersistenceSqlError(\"ProjectionSnapshotQuery.getArchivedShellSnapshot:query\")(\n            error,\n          );\n        }),\n      );\n\n  const getSnapshotSequence: ProjectionSnapshotQueryShape[\"getSnapshotSequence\"] = () =>\n    listProjectionStateRows(undefined).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionSnapshotQuery.getSnapshotSequence:query\",\n          \"ProjectionSnapshotQuery.getSnapshotSequence:decodeRows\",\n        ),\n      ),\n      Effect.map((stateRows) => ({\n        snapshotSequence: computeSnapshotSequence(stateRows),\n      })),\n    );\n\n  const getCounts: ProjectionSnapshotQueryShape[\"getCounts\"] = () =>\n    readProjectionCounts(undefined).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionSnapshotQuery.getCounts:query\",\n          \"ProjectionSnapshotQuery.getCounts:decodeRow\",\n        ),\n      ),\n      Effect.map((row): ProjectionSnapshotCounts => ({\n        projectCount: row.projectCount,\n        threadCount: row.threadCount,\n      })),\n    );\n\n  const getActiveProjectByWorkspaceRoot: ProjectionSnapshotQueryShape[\"getActiveProjectByWorkspaceRoot\"] =\n    (workspaceRoot) =>\n      getActiveProjectRowByWorkspaceRoot({ workspaceRoot }).pipe(\n        Effect.mapError(\n          toPersistenceSqlOrDecodeError(\n            \"ProjectionSnapshotQuery.getActiveProjectByWorkspaceRoot:query\",\n            \"ProjectionSnapshotQuery.getActiveProjectByWorkspaceRoot:decodeRow\",\n          ),\n        ),\n        Effect.flatMap((option) =>\n          Option.isNone(option)\n            ? Effect.succeed(Option.none<OrchestrationProject>())\n            : repositoryIdentityResolver.resolve(option.value.workspaceRoot).pipe(\n                Effect.map((repositoryIdentity) =>\n                  Option.some({\n                    id: option.value.projectId,\n                    title: option.value.title,\n                    workspaceRoot: option.value.workspaceRoot,\n                    repositoryIdentity,\n                    defaultModelSelection: option.value.defaultModelSelection,\n                    scripts: option.value.scripts,\n                    createdAt: option.value.createdAt,\n                    updatedAt: option.value.updatedAt,\n                    deletedAt: option.value.deletedAt,\n                  } satisfies OrchestrationProject),\n                ),\n              ),\n        ),\n      );\n\n  const getProjectShellById: ProjectionSnapshotQueryShape[\"getProjectShellById\"] = (projectId) =>\n    getActiveProjectRowById({ projectId }).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProjectionSnapshotQuery.getProjectShellById:query\",\n          \"ProjectionSnapshotQuery.getProjectShellById:decodeRow\",\n        ),\n      ),\n      Effect.flatMap((option) =>\n        Option.isNone(option)\n          ? Effect.succeed(Option.none<OrchestrationProjectShell>())\n          : repositoryIdentityResolver\n              .resolve(option.value.workspaceRoot)\n              .pipe(\n                Effect.map((repositoryIdentity) =>\n                  Option.some(mapProjectShellRow(option.value, repositoryIdentity)),\n                ),\n              ),\n      ),\n    );\n\n  const getMostRecentActiveThreadIdByProjectId: ProjectionSnapshotQueryShape[\"getMostRecentActiveThreadIdByProjectId\"] =\n    (projectId) =>\n      getMostRecentActiveThreadIdByProject({ projectId }).pipe(\n        Effect.mapError(\n          toPersistenceSqlOrDecodeError(\n            \"ProjectionSnapshotQuery.getMostRecentActiveThreadIdByProjectId:query\",\n            \"ProjectionSnapshotQuery.getMostRecentActiveThreadIdByProjectId:decodeRow\",\n          ),\n        ),\n        Effect.map(Option.map((row) => row.threadId)),\n      );\n\n  const getThreadCheckpointContext: ProjectionSnapshotQueryShape[\"getThreadCheckpointContext\"] = (\n    threadId,\n  ) =>\n    Effect.gen(function* () {\n      const threadRow = yield* getThreadCheckpointContextThreadRow({ threadId }).pipe(\n        Effect.mapError(\n          toPersistenceSqlOrDecodeError(\n            \"ProjectionSnapshotQuery.getThreadCheckpointContext:getThread:query\",\n            \"ProjectionSnapshotQuery.getThreadCheckpointContext:getThread:decodeRow\",\n          ),\n        ),\n      );\n      if (Option.isNone(threadRow)) {\n        return Option.none<ProjectionThreadCheckpointContext>();\n      }\n\n      const checkpointRows = yield* listCheckpointRowsByThread({ threadId }).pipe(\n        Effect.mapError(\n          toPersistenceSqlOrDecodeError(\n            \"ProjectionSnapshotQuery.getThreadCheckpointContext:listCheckpoints:query\",\n            \"ProjectionSnapshotQuery.getThreadCheckpointContext:listCheckpoints:decodeRows\",\n          ),\n        ),\n      );\n\n      return Option.some({\n        threadId: threadRow.value.threadId,\n        projectId: threadRow.value.projectId,\n        workspaceRoot: threadRow.value.workspaceRoot,\n        worktreePath: threadRow.value.worktreePath,\n        checkpoints: checkpointRows.map((row): OrchestrationCheckpointSummary => ({\n          turnId: row.turnId,\n          checkpointTurnCount: row.checkpointTurnCount,\n          checkpointRef: row.checkpointRef,\n          status: row.status,\n          files: row.files,\n          attribution: row.attribution,\n          assistantMessageId: row.assistantMessageId,\n          completedAt: row.completedAt,\n        })),\n      });\n    });\n\n  const getFullThreadDiffContext: NonNullable<\n    ProjectionSnapshotQueryShape[\"getFullThreadDiffContext\"]\n  > = (threadId, toTurnCount) =>\n    Effect.gen(function* () {\n      const row = yield* getFullThreadDiffContextRow({\n        threadId,\n        checkpointTurnCount: toTurnCount,\n      }).pipe(\n        Effect.mapError(\n          toPersistenceSqlOrDecodeError(\n            \"ProjectionSnapshotQuery.getFullThreadDiffContext:query\",\n            \"ProjectionSnapshotQuery.getFullThreadDiffContext:decodeRow\",\n          ),\n        ),\n      );\n      if (Option.isNone(row)) {\n        return Option.none<ProjectionFullThreadDiffContext>();\n      }\n\n      return Option.some({\n        threadId: row.value.threadId,\n        projectId: row.value.projectId,\n        workspaceRoot: row.value.workspaceRoot,\n        worktreePath: row.value.worktreePath,\n        latestCheckpointTurnCount: row.value.latestCheckpointTurnCount ?? 0,\n        toCheckpointRef: row.value.toCheckpointRef,\n      });\n    });\n\n  const getThreadShellById: ProjectionSnapshotQueryShape[\"getThreadShellById\"] = (threadId) =>\n    Effect.gen(function* () {\n      const [threadRow, latestTurnRow, sessionRow] = yield* Effect.all([\n        getActiveThreadRowById({ threadId }).pipe(\n          Effect.mapError(\n            toPersistenceSqlOrDecodeError(\n              \"ProjectionSnapshotQuery.getThreadShellById:getThread:query\",\n              \"ProjectionSnapshotQuery.getThreadShellById:getThread:decodeRow\",\n            ),\n          ),\n        ),\n        getLatestTurnRowByThread({ threadId }).pipe(\n          Effect.mapError(\n            toPersistenceSqlOrDecodeError(\n              \"ProjectionSnapshotQuery.getThreadShellById:getLatestTurn:query\",\n              \"ProjectionSnapshotQuery.getThreadShellById:getLatestTurn:decodeRow\",\n            ),\n          ),\n        ),\n        getThreadSessionRowByThread({ threadId }).pipe(\n          Effect.mapError(\n            toPersistenceSqlOrDecodeError(\n              \"ProjectionSnapshotQuery.getThreadShellById:getSession:query\",\n              \"ProjectionSnapshotQuery.getThreadShellById:getSession:decodeRow\",\n            ),\n          ),\n        ),\n      ]);\n\n      if (Option.isNone(threadRow)) {\n        return Option.none<OrchestrationThreadShell>();\n      }\n\n      return Option.some({\n        id: threadRow.value.threadId,\n        projectId: threadRow.value.projectId,\n        title: threadRow.value.title,\n        modelSelection: threadRow.value.modelSelection,\n        runtimeMode: threadRow.value.runtimeMode,\n        interactionMode: threadRow.value.interactionMode,\n        ...mapThreadRelationshipFields(threadRow.value),\n        branch: threadRow.value.branch,\n        worktreePath: threadRow.value.worktreePath,\n        latestTurn: Option.isSome(latestTurnRow) ? mapLatestTurn(latestTurnRow.value) : null,\n        createdAt: threadRow.value.createdAt,\n        updatedAt: threadRow.value.updatedAt,\n        archivedAt: threadRow.value.archivedAt,\n        session: Option.isSome(sessionRow) ? mapSessionRow(sessionRow.value) : null,\n        latestUserMessageAt: threadRow.value.latestUserMessageAt,\n        hasPendingApprovals: threadRow.value.pendingApprovalCount > 0,\n        hasPendingUserInput: threadRow.value.pendingUserInputCount > 0,\n        hasActionableProposedPlan: threadRow.value.hasActionableProposedPlan > 0,\n      } satisfies OrchestrationThreadShell);\n    });\n\n  const getThreadDetailSnapshotById: ProjectionSnapshotQueryShape[\"getThreadDetailSnapshotById\"] = (\n    threadId,\n    page,\n  ) =>\n    sql\n      .withTransaction(\n        Effect.gen(function* () {\n          const pageRequest = page ?? null;\n          const pageLimits = pageRequest ? resolveThreadDetailPageLimits(pageRequest) : null;\n          const olderPageRequest = hasThreadDetailBeforeCursors(pageRequest);\n\n          const messageRows = pageLimits\n            ? yield* (\n                pageRequest?.before?.messages\n                  ? listThreadMessageRowsBeforeCursor({\n                      threadId,\n                      beforeCreatedAt: pageRequest.before.messages.createdAt,\n                      beforeId: pageRequest.before.messages.id,\n                      limit: toThreadDetailPageQueryLimit(pageLimits.messages),\n                    })\n                  : olderPageRequest\n                    ? Effect.succeed([] as ProjectionThreadMessageDbRow[])\n                    : listLatestThreadMessageRowsByThread({\n                        threadId,\n                        limit: toThreadDetailPageQueryLimit(pageLimits.messages),\n                      })\n              ).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listMessages:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listMessages:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => takePagedRows(rows, pageLimits.messages)),\n              )\n            : yield* listThreadMessageRowsByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listMessages:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listMessages:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => ({ rows, hasMoreBefore: false })),\n              );\n\n          const proposedPlanRows = pageLimits\n            ? yield* (\n                pageRequest?.before?.proposedPlans\n                  ? listThreadProposedPlanRowsBeforeCursor({\n                      threadId,\n                      beforeCreatedAt: pageRequest.before.proposedPlans.createdAt,\n                      beforeId: pageRequest.before.proposedPlans.id,\n                      limit: toThreadDetailPageQueryLimit(pageLimits.proposedPlans),\n                    })\n                  : olderPageRequest\n                    ? Effect.succeed([] as ProjectionThreadProposedPlanDbRow[])\n                    : listLatestThreadProposedPlanRowsByThread({\n                        threadId,\n                        limit: toThreadDetailPageQueryLimit(pageLimits.proposedPlans),\n                      })\n              ).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listPlans:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listPlans:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => takePagedRows(rows, pageLimits.proposedPlans)),\n              )\n            : yield* listThreadProposedPlanRowsByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listPlans:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listPlans:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => ({ rows, hasMoreBefore: false })),\n              );\n\n          const activityRows = pageLimits\n            ? yield* (\n                pageRequest?.before?.activities\n                  ? listThreadActivityRowsBeforeCursor({\n                      threadId,\n                      beforeCreatedAt: pageRequest.before.activities.createdAt,\n                      beforeId: pageRequest.before.activities.id,\n                      beforeSequence: pageRequest.before.activities.sequence ?? null,\n                      limit: toThreadDetailPageQueryLimit(pageLimits.activities),\n                    })\n                  : olderPageRequest\n                    ? Effect.succeed([] as ProjectionThreadActivityDbRow[])\n                    : listLatestThreadActivityRowsByThread({\n                        threadId,\n                        limit: toThreadDetailPageQueryLimit(pageLimits.activities),\n                      })\n              ).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listActivities:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listActivities:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => takePagedRows(rows, pageLimits.activities)),\n              )\n            : yield* listThreadActivityRowsByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listActivities:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listActivities:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => ({ rows, hasMoreBefore: false })),\n              );\n\n          const checkpointRows = pageLimits\n            ? yield* (\n                pageRequest?.before?.checkpoints?.checkpointTurnCount !== undefined\n                  ? listCheckpointRowsBeforeCursor({\n                      threadId,\n                      beforeCheckpointTurnCount: pageRequest.before.checkpoints.checkpointTurnCount,\n                      limit: toThreadDetailPageQueryLimit(pageLimits.checkpoints),\n                    })\n                  : olderPageRequest\n                    ? Effect.succeed([] as ProjectionCheckpointDbRow[])\n                    : listLatestCheckpointRowsByThread({\n                        threadId,\n                        limit: toThreadDetailPageQueryLimit(pageLimits.checkpoints),\n                      })\n              ).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listCheckpoints:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listCheckpoints:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => takePagedRows(rows, pageLimits.checkpoints)),\n              )\n            : yield* listCheckpointRowsByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listCheckpoints:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listCheckpoints:decodeRows\",\n                  ),\n                ),\n                Effect.map((rows) => ({ rows, hasMoreBefore: false })),\n              );\n\n          const [threadRow, latestTurnRow, sessionRow, queuedTurnRows, stateRows] =\n            yield* Effect.all([\n              getActiveThreadRowById({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:getThread:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:getThread:decodeRow\",\n                  ),\n                ),\n              ),\n              getLatestTurnRowByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:getLatestTurn:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:getLatestTurn:decodeRow\",\n                  ),\n                ),\n              ),\n              getThreadSessionRowByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:getSession:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:getSession:decodeRow\",\n                  ),\n                ),\n              ),\n              listThreadQueuedTurnRowsByThread({ threadId }).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listQueuedTurns:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listQueuedTurns:decodeRows\",\n                  ),\n                ),\n              ),\n              listProjectionStateRows(undefined).pipe(\n                Effect.mapError(\n                  toPersistenceSqlOrDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listProjectionState:query\",\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:listProjectionState:decodeRows\",\n                  ),\n                ),\n              ),\n            ]);\n\n          return {\n            threadRow,\n            messageRows,\n            proposedPlanRows,\n            activityRows,\n            checkpointRows,\n            latestTurnRow,\n            sessionRow,\n            queuedTurnRows,\n            stateRows,\n            paged: pageLimits !== null,\n          };\n        }),\n      )\n      .pipe(\n        Effect.flatMap(\n          ({\n            threadRow,\n            messageRows,\n            proposedPlanRows,\n            activityRows,\n            checkpointRows,\n            latestTurnRow,\n            sessionRow,\n            queuedTurnRows,\n            stateRows,\n            paged,\n          }) =>\n            Effect.gen(function* () {\n              if (Option.isNone(threadRow)) {\n                return Option.none<OrchestrationThreadDetailSnapshot>();\n              }\n\n              const messages = messageRows.rows.map(mapMessageRow);\n              const queuedTurns = queuedTurnRows.map(mapQueuedTurnRow);\n              const proposedPlans = proposedPlanRows.rows.map(mapProposedPlanRow);\n              const activities = activityRows.rows.map(mapActivityRow);\n              const checkpoints = checkpointRows.rows.map(mapCheckpointRow);\n              const pageInfo = paged\n                ? {\n                    messages: makeThreadDetailCollectionPageInfo(\n                      messages,\n                      messageRows.hasMoreBefore,\n                      makeThreadDetailPageCursor,\n                    ),\n                    proposedPlans: makeThreadDetailCollectionPageInfo(\n                      proposedPlans,\n                      proposedPlanRows.hasMoreBefore,\n                      makeThreadDetailPageCursor,\n                    ),\n                    activities: makeThreadDetailCollectionPageInfo(\n                      activities,\n                      activityRows.hasMoreBefore,\n                      makeThreadDetailPageCursor,\n                    ),\n                    checkpoints: makeThreadDetailCollectionPageInfo(\n                      checkpoints,\n                      checkpointRows.hasMoreBefore,\n                      makeThreadDetailPageCursor,\n                    ),\n                  }\n                : makeUnpagedThreadDetailPageInfo();\n\n              const thread = {\n                id: threadRow.value.threadId,\n                projectId: threadRow.value.projectId,\n                title: threadRow.value.title,\n                modelSelection: threadRow.value.modelSelection,\n                runtimeMode: threadRow.value.runtimeMode,\n                interactionMode: threadRow.value.interactionMode,\n                ...mapThreadRelationshipFields(threadRow.value),\n                branch: threadRow.value.branch,\n                worktreePath: threadRow.value.worktreePath,\n                latestTurn: Option.isSome(latestTurnRow)\n                  ? mapLatestTurn(latestTurnRow.value)\n                  : null,\n                createdAt: threadRow.value.createdAt,\n                updatedAt: threadRow.value.updatedAt,\n                archivedAt: threadRow.value.archivedAt,\n                deletedAt: null,\n                messages,\n                queuedTurns,\n                proposedPlans,\n                activities,\n                checkpoints,\n                session: Option.isSome(sessionRow) ? mapSessionRow(sessionRow.value) : null,\n              };\n\n              const decodedThread = yield* decodeThread(thread).pipe(\n                Effect.mapError(\n                  toPersistenceDecodeError(\n                    \"ProjectionSnapshotQuery.getThreadDetailSnapshotById:decodeThread\",\n                  ),\n                ),\n              );\n\n              return Option.some({\n                snapshotSequence: computeSnapshotSequence(stateRows),\n                thread: decodedThread,\n                pageInfo,\n              } satisfies OrchestrationThreadDetailSnapshot);\n            }),\n        ),\n        Effect.mapError((error) => {\n          if (isPersistenceError(error)) {\n            return error;\n          }\n          return toPersistenceSqlError(\"ProjectionSnapshotQuery.getThreadDetailSnapshotById:query\")(\n            error,\n          );\n        }),\n      );\n\n  const getThreadDetailById: ProjectionSnapshotQueryShape[\"getThreadDetailById\"] = (threadId) =>\n    getThreadDetailSnapshotById(threadId).pipe(\n      Effect.map(Option.map((snapshot) => snapshot.thread)),\n    );\n\n  return {\n    getCommandReadModel,\n    getSnapshot,\n    getShellSnapshot,\n    getArchivedShellSnapshot,\n    getSnapshotSequence,\n    getCounts,\n    getActiveProjectByWorkspaceRoot,\n    getProjectShellById,\n    getMostRecentActiveThreadIdByProjectId,\n    getThreadCheckpointContext,\n    getFullThreadDiffContext,\n    getThreadShellById,\n    getThreadDetailById,\n    getThreadDetailSnapshotById,\n  } satisfies ProjectionSnapshotQueryShape;\n});\n\nexport const OrchestrationProjectionSnapshotQueryLive = Layer.effect(\n  ProjectionSnapshotQuery,\n  makeProjectionSnapshotQuery,\n);\n","import * as Layer from \"effect/Layer\";\n\nimport { OrchestrationCommandReceiptRepositoryLive } from \"../persistence/Layers/OrchestrationCommandReceipts.ts\";\nimport { OrchestrationEventStoreLive } from \"../persistence/Layers/OrchestrationEventStore.ts\";\nimport { TurnFileSnapshotsLive } from \"../persistence/Layers/TurnFileSnapshots.ts\";\nimport { OrchestrationEngineLive } from \"./Layers/OrchestrationEngine.ts\";\nimport { OrchestrationProjectionPipelineLive } from \"./Layers/ProjectionPipeline.ts\";\nimport { OrchestrationProjectionSnapshotQueryLive } from \"./Layers/ProjectionSnapshotQuery.ts\";\n\nexport const OrchestrationEventInfrastructureLayerLive = Layer.mergeAll(\n  OrchestrationEventStoreLive,\n  OrchestrationCommandReceiptRepositoryLive,\n);\n\nexport const OrchestrationProjectionPipelineLayerLive = OrchestrationProjectionPipelineLive.pipe(\n  Layer.provide(OrchestrationEventStoreLive),\n);\n\nexport const OrchestrationInfrastructureLayerLive = Layer.mergeAll(\n  OrchestrationProjectionSnapshotQueryLive,\n  OrchestrationEventInfrastructureLayerLive,\n  OrchestrationProjectionPipelineLayerLive,\n  TurnFileSnapshotsLive,\n);\n\nexport const OrchestrationLayerLive = Layer.mergeAll(\n  OrchestrationInfrastructureLayerLive,\n  OrchestrationEngineLive.pipe(Layer.provide(OrchestrationInfrastructureLayerLive)),\n);\n","import type { SourceControlProviderInfo, SourceControlProviderKind } from \"@salchi/contracts\";\n\nexport interface ChangeRequestPresentation {\n  readonly icon: \"github\" | \"gitlab\" | \"azure-devops\" | \"bitbucket\" | \"change-request\";\n  readonly providerName: string;\n  readonly shortName: string;\n  readonly longName: string;\n  readonly pluralLongName: string;\n  readonly providerLongName: string;\n  readonly checkoutCommandExample?: string;\n  readonly urlExample: string;\n}\n\nexport interface ChangeRequestTerminology {\n  readonly shortLabel: string;\n  readonly singular: string;\n}\n\nexport const DEFAULT_CHANGE_REQUEST_TERMINOLOGY: ChangeRequestTerminology = {\n  shortLabel: \"PR\",\n  singular: \"pull request\",\n};\n\nconst GITHUB_CHANGE_REQUEST_PRESENTATION: ChangeRequestPresentation = {\n  icon: \"github\",\n  providerName: \"GitHub\",\n  shortName: \"PR\",\n  longName: \"pull request\",\n  pluralLongName: \"pull requests\",\n  providerLongName: \"GitHub pull request\",\n  checkoutCommandExample: \"gh pr checkout 123\",\n  urlExample: \"https://github.com/owner/repo/pull/42\",\n};\n\nconst GITLAB_CHANGE_REQUEST_PRESENTATION: ChangeRequestPresentation = {\n  icon: \"gitlab\",\n  providerName: \"GitLab\",\n  shortName: \"MR\",\n  longName: \"merge request\",\n  pluralLongName: \"merge requests\",\n  providerLongName: \"GitLab merge request\",\n  checkoutCommandExample: \"glab mr checkout 123\",\n  urlExample: \"https://gitlab.com/group/project/-/merge_requests/42\",\n};\n\nconst AZURE_DEVOPS_CHANGE_REQUEST_PRESENTATION: ChangeRequestPresentation = {\n  icon: \"azure-devops\",\n  providerName: \"Azure DevOps\",\n  shortName: \"PR\",\n  longName: \"pull request\",\n  pluralLongName: \"pull requests\",\n  providerLongName: \"Azure DevOps pull request\",\n  checkoutCommandExample: \"az repos pr checkout --id 123\",\n  urlExample: \"https://dev.azure.com/org/project/_git/repo/pullrequest/42\",\n};\n\nconst BITBUCKET_CHANGE_REQUEST_PRESENTATION: ChangeRequestPresentation = {\n  icon: \"bitbucket\",\n  providerName: \"Bitbucket\",\n  shortName: \"PR\",\n  longName: \"pull request\",\n  pluralLongName: \"pull requests\",\n  providerLongName: \"Bitbucket pull request\",\n  urlExample: \"https://bitbucket.org/workspace/repo/pull-requests/42\",\n};\n\nconst GENERIC_CHANGE_REQUEST_PRESENTATION: ChangeRequestPresentation = {\n  icon: \"change-request\",\n  providerName: \"source control\",\n  shortName: \"change request\",\n  longName: \"change request\",\n  pluralLongName: \"change requests\",\n  providerLongName: \"change request\",\n  urlExample: \"#42\",\n};\n\nexport function resolveChangeRequestPresentation(\n  provider: SourceControlProviderInfo | null | undefined,\n): ChangeRequestPresentation {\n  switch (provider?.kind) {\n    case \"github\":\n    case undefined:\n      return GITHUB_CHANGE_REQUEST_PRESENTATION;\n    case \"gitlab\":\n      return GITLAB_CHANGE_REQUEST_PRESENTATION;\n    case \"azure-devops\":\n      return AZURE_DEVOPS_CHANGE_REQUEST_PRESENTATION;\n    case \"bitbucket\":\n      return BITBUCKET_CHANGE_REQUEST_PRESENTATION;\n    case \"unknown\":\n      return GENERIC_CHANGE_REQUEST_PRESENTATION;\n  }\n}\n\nexport function resolveChangeRequestPresentationForKind(\n  kind: SourceControlProviderKind,\n): ChangeRequestPresentation {\n  return resolveChangeRequestPresentation({ kind, name: \"\", baseUrl: \"\" });\n}\n\nexport function formatChangeRequestAction(\n  verb: \"View\" | \"Create\",\n  presentation: ChangeRequestPresentation,\n): string {\n  return `${verb} ${presentation.shortName}`;\n}\n\nexport function formatCreateChangeRequestPhrase(presentation: ChangeRequestPresentation): string {\n  return `create ${presentation.shortName}`;\n}\n\nexport function getChangeRequestTerminology(\n  provider: SourceControlProviderInfo | null | undefined,\n): ChangeRequestTerminology {\n  if (!provider) {\n    return DEFAULT_CHANGE_REQUEST_TERMINOLOGY;\n  }\n\n  const presentation = resolveChangeRequestPresentation(provider);\n  return {\n    shortLabel: presentation.shortName,\n    singular: presentation.longName,\n  };\n}\n\nexport function getChangeRequestTerminologyForKind(\n  kind: SourceControlProviderKind,\n): ChangeRequestTerminology {\n  const presentation = resolveChangeRequestPresentationForKind(kind);\n  return {\n    shortLabel: presentation.shortName,\n    singular: presentation.longName,\n  };\n}\n\nfunction parseRemoteHost(remoteUrl: string): string | null {\n  const trimmed = remoteUrl.trim();\n  if (trimmed.length === 0) {\n    return null;\n  }\n\n  if (trimmed.startsWith(\"git@\")) {\n    const hostWithPath = trimmed.slice(\"git@\".length);\n    const separatorIndex = hostWithPath.search(/[:/]/);\n    if (separatorIndex <= 0) {\n      return null;\n    }\n    return hostWithPath.slice(0, separatorIndex).toLowerCase();\n  }\n\n  try {\n    return new URL(trimmed).host.toLowerCase();\n  } catch {\n    return null;\n  }\n}\n\nfunction parseHostName(host: string): string {\n  try {\n    return new URL(`https://${host}`).hostname.toLowerCase();\n  } catch {\n    return host.replace(/:\\d+$/u, \"\").toLowerCase();\n  }\n}\n\nfunction toBaseUrl(host: string): string {\n  return `https://${host}`;\n}\n\nfunction isGitHubHost(host: string): boolean {\n  return host === \"github.com\" || host.includes(\"github\");\n}\n\nfunction isGitLabHost(host: string): boolean {\n  return host === \"gitlab.com\" || host.includes(\"gitlab\");\n}\n\nfunction isAzureDevOpsHost(host: string): boolean {\n  return (\n    host === \"dev.azure.com\" ||\n    host.endsWith(\".dev.azure.com\") ||\n    host.endsWith(\".visualstudio.com\")\n  );\n}\n\nfunction isBitbucketHost(host: string): boolean {\n  return host === \"bitbucket.org\" || host.includes(\"bitbucket\");\n}\n\nexport function detectSourceControlProviderFromRemoteUrl(\n  remoteUrl: string,\n): SourceControlProviderInfo | null {\n  const host = parseRemoteHost(remoteUrl);\n  if (!host) {\n    return null;\n  }\n  const hostname = parseHostName(host);\n\n  if (isGitHubHost(hostname)) {\n    return {\n      kind: \"github\",\n      name: hostname === \"github.com\" ? \"GitHub\" : \"GitHub Self-Hosted\",\n      baseUrl: toBaseUrl(host),\n    };\n  }\n\n  if (isGitLabHost(hostname)) {\n    return {\n      kind: \"gitlab\",\n      name: hostname === \"gitlab.com\" ? \"GitLab\" : \"GitLab Self-Hosted\",\n      baseUrl: toBaseUrl(host),\n    };\n  }\n\n  if (isAzureDevOpsHost(hostname)) {\n    return {\n      kind: \"azure-devops\",\n      name: \"Azure DevOps\",\n      baseUrl: toBaseUrl(host),\n    };\n  }\n\n  if (isBitbucketHost(hostname)) {\n    return {\n      kind: \"bitbucket\",\n      name: hostname === \"bitbucket.org\" ? \"Bitbucket\" : \"Bitbucket Self-Hosted\",\n      baseUrl: toBaseUrl(host),\n    };\n  }\n\n  return {\n    kind: \"unknown\",\n    name: host,\n    baseUrl: toBaseUrl(host),\n  };\n}\n","import type {\n  VcsRef,\n  SourceControlProviderInfo,\n  VcsStatusLocalResult,\n  VcsStatusRemoteResult,\n  VcsStatusResult,\n  VcsStatusStreamEvent,\n} from \"@salchi/contracts\";\nimport * as Arr from \"effect/Array\";\nimport * as Result from \"effect/Result\";\nimport { detectSourceControlProviderFromRemoteUrl } from \"./sourceControl.ts\";\n\nexport const WORKTREE_BRANCH_PREFIX = \"salchi\";\nconst LEGACY_WORKTREE_BRANCH_PREFIX = \"salchi\";\nconst TEMP_WORKTREE_BRANCH_PATTERN = new RegExp(\n  `^(?:${WORKTREE_BRANCH_PREFIX}|${LEGACY_WORKTREE_BRANCH_PREFIX})\\\\/[0-9a-f]{8}$`,\n);\n\n/**\n * Sanitize an arbitrary string into a valid, lowercase git refName fragment.\n * Strips quotes, collapses separators, limits to 64 chars.\n */\nexport function sanitizeBranchFragment(raw: string): string {\n  const normalized = raw\n    .trim()\n    .toLowerCase()\n    .replace(/['\"`]/g, \"\")\n    .replace(/^[./\\s_-]+|[./\\s_-]+$/g, \"\");\n\n  const branchFragment = normalized\n    .replace(/[^a-z0-9/_-]+/g, \"-\")\n    .replace(/\\/+/g, \"/\")\n    .replace(/-+/g, \"-\")\n    .replace(/^[./_-]+|[./_-]+$/g, \"\")\n    .slice(0, 64)\n    .replace(/[./_-]+$/g, \"\");\n\n  return branchFragment.length > 0 ? branchFragment : \"update\";\n}\n\n/**\n * Sanitize a string into a `feature/…` refName name.\n * Preserves an existing `feature/` prefix or slash-separated namespace.\n */\nexport function sanitizeFeatureBranchName(raw: string): string {\n  const sanitized = sanitizeBranchFragment(raw);\n  if (sanitized.includes(\"/\")) {\n    return sanitized.startsWith(\"feature/\") ? sanitized : `feature/${sanitized}`;\n  }\n  return `feature/${sanitized}`;\n}\n\nconst AUTO_FEATURE_BRANCH_FALLBACK = \"feature/update\";\n\n/**\n * Resolve a unique `feature/…` refName name that doesn't collide with\n * any existing refName. Appends a numeric suffix when needed.\n */\nexport function resolveAutoFeatureBranchName(\n  existingBranchNames: readonly string[],\n  preferredBranch?: string,\n): string {\n  const preferred = preferredBranch?.trim();\n  const resolvedBase = sanitizeFeatureBranchName(\n    preferred && preferred.length > 0 ? preferred : AUTO_FEATURE_BRANCH_FALLBACK,\n  );\n  const existingNames = new Set(existingBranchNames.map((refName) => refName.toLowerCase()));\n\n  if (!existingNames.has(resolvedBase)) {\n    return resolvedBase;\n  }\n\n  let suffix = 2;\n  while (existingNames.has(`${resolvedBase}-${suffix}`)) {\n    suffix += 1;\n  }\n\n  return `${resolvedBase}-${suffix}`;\n}\n\n/**\n * Strip the remote prefix from a remote ref such as `origin/feature/demo`.\n */\nexport function deriveLocalBranchNameFromRemoteRef(branchName: string): string {\n  const firstSeparatorIndex = branchName.indexOf(\"/\");\n  if (firstSeparatorIndex <= 0 || firstSeparatorIndex === branchName.length - 1) {\n    return branchName;\n  }\n  return branchName.slice(firstSeparatorIndex + 1);\n}\n\nexport function buildTemporaryWorktreeBranchName(\n  randomHex: (byteLength: number) => string,\n): string {\n  const token = randomHex(4).toLowerCase();\n  return `${WORKTREE_BRANCH_PREFIX}/${token}`;\n}\n\nexport function isTemporaryWorktreeBranch(refName: string): boolean {\n  return TEMP_WORKTREE_BRANCH_PATTERN.test(refName.trim().toLowerCase());\n}\n\n/**\n * Normalize a git remote URL into a stable comparison key.\n */\nexport function normalizeGitRemoteUrl(value: string): string {\n  const normalized = value\n    .trim()\n    .replace(/\\/+$/g, \"\")\n    .replace(/\\.git$/i, \"\")\n    .toLowerCase();\n\n  if (/^(?:ssh|https?|git):\\/\\//i.test(normalized)) {\n    try {\n      const url = new URL(normalized);\n      const repositoryPath = url.pathname\n        .split(\"/\")\n        .filter((segment) => segment.length > 0)\n        .join(\"/\");\n      if (url.hostname && repositoryPath.includes(\"/\")) {\n        return `${url.hostname}/${repositoryPath}`;\n      }\n    } catch {\n      return normalized;\n    }\n  }\n\n  const scpStyleHostAndPath = /^git@([^:/\\s]+)[:/]([^/\\s]+(?:\\/[^/\\s]+)+)$/i.exec(normalized);\n  if (scpStyleHostAndPath?.[1] && scpStyleHostAndPath[2]) {\n    return `${scpStyleHostAndPath[1]}/${scpStyleHostAndPath[2]}`;\n  }\n\n  return normalized;\n}\n\n/**\n * Best-effort parse of a GitHub `owner/repo` identifier from common remote URL shapes.\n */\nexport function parseGitHubRepositoryNameWithOwnerFromRemoteUrl(url: string | null): string | null {\n  const trimmed = url?.trim() ?? \"\";\n  if (trimmed.length === 0) {\n    return null;\n  }\n\n  const match =\n    /^(?:git@github\\.com:|ssh:\\/\\/git@github\\.com\\/|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)([^/\\s]+\\/[^/\\s]+?)(?:\\.git)?\\/?$/i.exec(\n      trimmed,\n    );\n  const repositoryNameWithOwner = match?.[1]?.trim() ?? \"\";\n  return repositoryNameWithOwner.length > 0 ? repositoryNameWithOwner : null;\n}\n\nfunction deriveLocalBranchNameCandidatesFromRemoteRef(\n  branchName: string,\n  remoteName?: string,\n): ReadonlyArray<string> {\n  const candidates = new Set<string>();\n  const firstSlashCandidate = deriveLocalBranchNameFromRemoteRef(branchName);\n  if (firstSlashCandidate.length > 0) {\n    candidates.add(firstSlashCandidate);\n  }\n\n  if (remoteName) {\n    const remotePrefix = `${remoteName}/`;\n    if (branchName.startsWith(remotePrefix) && branchName.length > remotePrefix.length) {\n      candidates.add(branchName.slice(remotePrefix.length));\n    }\n  }\n\n  return [...candidates];\n}\n\n/**\n * Hide `origin/*` remote refs when a matching local refName already exists.\n */\nexport function dedupeRemoteBranchesWithLocalMatches(\n  refs: ReadonlyArray<VcsRef>,\n): ReadonlyArray<VcsRef> {\n  const localBranchNames = new Set(\n    Arr.filterMap(refs, (refName) =>\n      refName.isRemote ? Result.failVoid : Result.succeed(refName.name),\n    ),\n  );\n\n  return refs.filter((refName) => {\n    if (!refName.isRemote) {\n      return true;\n    }\n\n    if (refName.remoteName !== \"origin\") {\n      return true;\n    }\n\n    const localBranchCandidates = deriveLocalBranchNameCandidatesFromRemoteRef(\n      refName.name,\n      refName.remoteName,\n    );\n    return !localBranchCandidates.some((candidate) => localBranchNames.has(candidate));\n  });\n}\n\nexport function detectSourceControlProviderFromGitRemoteUrl(\n  remoteUrl: string,\n): SourceControlProviderInfo | null {\n  return detectSourceControlProviderFromRemoteUrl(remoteUrl);\n}\n\nconst EMPTY_GIT_STATUS_REMOTE: VcsStatusRemoteResult = {\n  hasUpstream: false,\n  aheadCount: 0,\n  behindCount: 0,\n  aheadOfDefaultCount: 0,\n  pr: null,\n};\nconst EMPTY_WORKING_TREE: VcsStatusLocalResult[\"workingTree\"] = {\n  files: [],\n  insertions: 0,\n  deletions: 0,\n  staged: { files: [], insertions: 0, deletions: 0 },\n  unstaged: { files: [], insertions: 0, deletions: 0 },\n};\n\nexport function mergeGitStatusParts(\n  local: VcsStatusLocalResult,\n  remote: VcsStatusRemoteResult | null,\n): VcsStatusResult {\n  return {\n    ...local,\n    ...(remote ?? EMPTY_GIT_STATUS_REMOTE),\n  };\n}\n\nfunction toRemoteStatusPart(status: VcsStatusResult): VcsStatusRemoteResult {\n  return {\n    hasUpstream: status.hasUpstream,\n    aheadCount: status.aheadCount,\n    behindCount: status.behindCount,\n    ...(status.aheadOfDefaultCount === undefined\n      ? {}\n      : { aheadOfDefaultCount: status.aheadOfDefaultCount }),\n    pr: status.pr,\n  };\n}\n\nfunction toLocalStatusPart(status: VcsStatusResult): VcsStatusLocalResult {\n  return {\n    isRepo: status.isRepo,\n    ...(status.sourceControlProvider\n      ? { sourceControlProvider: status.sourceControlProvider }\n      : {}),\n    hasPrimaryRemote: status.hasPrimaryRemote,\n    isDefaultRef: status.isDefaultRef,\n    refName: status.refName,\n    hasWorkingTreeChanges: status.hasWorkingTreeChanges,\n    workingTree: status.workingTree,\n  };\n}\n\nexport function applyGitStatusStreamEvent(\n  current: VcsStatusResult | null,\n  event: VcsStatusStreamEvent,\n): VcsStatusResult {\n  switch (event._tag) {\n    case \"snapshot\":\n      return mergeGitStatusParts(event.local, event.remote);\n    case \"localUpdated\":\n      return mergeGitStatusParts(event.local, current ? toRemoteStatusPart(current) : null);\n    case \"remoteUpdated\":\n      if (current === null) {\n        return mergeGitStatusParts(\n          {\n            isRepo: true,\n            hasPrimaryRemote: false,\n            isDefaultRef: false,\n            refName: null,\n            hasWorkingTreeChanges: false,\n            workingTree: EMPTY_WORKING_TREE,\n          },\n          event.remote,\n        );\n      }\n      return mergeGitStatusParts(toLocalStatusPart(current), event.remote);\n  }\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Stream from \"effect/Stream\";\n\nexport interface CollectedUint8StreamText {\n  readonly text: string;\n  readonly truncated: boolean;\n  readonly bytes: number;\n}\n\ninterface CollectState {\n  chunks: Uint8Array[];\n  readonly bytes: number;\n  readonly truncated: boolean;\n}\n\nexport const collectUint8StreamText = <E>(input: {\n  readonly stream: Stream.Stream<Uint8Array, E>;\n  readonly maxBytes?: number | undefined;\n  readonly truncatedMarker?: string | null | undefined;\n}): Effect.Effect<CollectedUint8StreamText, E> => {\n  const maxBytes = input.maxBytes ?? Number.POSITIVE_INFINITY;\n  const truncatedMarker = input.truncatedMarker ?? \"\";\n\n  return input.stream.pipe(\n    Stream.runFold(\n      (): CollectState => ({\n        chunks: [],\n        bytes: 0,\n        truncated: false,\n      }),\n      (state, chunk): CollectState => {\n        /*\n         * keep draining after truncation so the child process can exit normally.\n         * its a know issue that on windows killing after the output cap can force an expensive taskkill operation and hurt performance\n         */\n        if (state.truncated) {\n          return state;\n        }\n\n        const remainingBytes = maxBytes - state.bytes;\n        if (remainingBytes <= 0) {\n          return {\n            ...state,\n            truncated: true,\n          };\n        }\n\n        const nextChunk =\n          chunk.byteLength > remainingBytes ? chunk.slice(0, remainingBytes) : chunk;\n        state.chunks.push(nextChunk);\n        const bytes = state.bytes + nextChunk.byteLength;\n        const truncated = chunk.byteLength > remainingBytes;\n\n        return {\n          chunks: state.chunks,\n          bytes,\n          truncated,\n        };\n      },\n    ),\n    Effect.map((state): CollectedUint8StreamText => {\n      const text = Buffer.concat(state.chunks, state.bytes).toString(\"utf8\");\n      return {\n        text: state.truncated && truncatedMarker.length > 0 ? `${text}${truncatedMarker}` : text,\n        bytes: state.bytes,\n        truncated: state.truncated,\n      };\n    }),\n  );\n};\n","import * as Data from \"effect/Data\";\nimport * as Context from \"effect/Context\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as PlatformError from \"effect/PlatformError\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\nimport {\n  collectUint8StreamText,\n  type CollectedUint8StreamText,\n} from \"./stream/collectUint8StreamText.ts\";\n\nexport interface ProcessRunInput {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly spawnCwd?: string | undefined;\n  readonly timeout?: Duration.Input | undefined;\n  readonly env?: NodeJS.ProcessEnv | undefined;\n  readonly stdin?: string | undefined;\n  readonly maxOutputBytes?: number | undefined;\n  readonly outputMode?: \"error\" | \"truncate\" | undefined;\n  readonly truncatedMarker?: string | undefined;\n  readonly shell?: boolean | string | undefined;\n  /**\n   * On timeout, return a synthetic timedOut result.\n   * Partial stdout/stderr are not preserved.\n   */\n  readonly timeoutBehavior?: \"error\" | \"timedOutResult\" | undefined;\n}\n\nexport interface ProcessRunOutput {\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly code: ChildProcessSpawner.ExitCode | null;\n  readonly timedOut: boolean;\n  readonly stdoutTruncated: boolean;\n  readonly stderrTruncated: boolean;\n}\n\nexport class ProcessSpawnError extends Data.TaggedError(\"ProcessSpawnError\")<{\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly cause: unknown;\n}> {}\n\nexport class ProcessStdinError extends Data.TaggedError(\"ProcessStdinError\")<{\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly cause: unknown;\n}> {}\n\nexport class ProcessOutputLimitError extends Data.TaggedError(\"ProcessOutputLimitError\")<{\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly stream: \"stdout\" | \"stderr\";\n  readonly maxBytes: number;\n}> {}\n\nexport class ProcessReadError extends Data.TaggedError(\"ProcessReadError\")<{\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly stream: \"stdout\" | \"stderr\" | \"exitCode\";\n  readonly cause: unknown;\n}> {}\n\nexport class ProcessTimeoutError extends Data.TaggedError(\"ProcessTimeoutError\")<{\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly timeoutMs: number;\n}> {}\n\nexport type ProcessRunError =\n  | ProcessSpawnError\n  | ProcessStdinError\n  | ProcessOutputLimitError\n  | ProcessReadError\n  | ProcessTimeoutError;\n\nexport interface ProcessRunnerShape {\n  readonly run: (input: ProcessRunInput) => Effect.Effect<ProcessRunOutput, ProcessRunError>;\n}\n\nexport class ProcessRunner extends Context.Service<ProcessRunner, ProcessRunnerShape>()(\n  \"salchi/processRunner\",\n) {}\n\nconst DEFAULT_TIMEOUT = \"60 seconds\";\nconst DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024;\n\nconst WINDOWS_COMMAND_NOT_FOUND_PATTERNS = [\n  /is not recognized as an internal or external command/i,\n  /n.o . reconhecido como um comando interno/i,\n  /non . riconosciuto come comando interno o esterno/i,\n  /n.est pas reconnu en tant que commande interne/i,\n  /no se reconoce como un comando interno o externo/i,\n  /wird nicht als interner oder externer befehl/i,\n] as const;\n\nfunction hasWindowsCommandNotFoundMessage(output: string): boolean {\n  return WINDOWS_COMMAND_NOT_FOUND_PATTERNS.some((pattern) => pattern.test(output));\n}\n\nexport function isWindowsCommandNotFound(code: number | null, stderr: string): boolean {\n  if (process.platform !== \"win32\") return false;\n  if (code === 9009) return true;\n  return hasWindowsCommandNotFoundMessage(stderr);\n}\n\nconst collectText = Effect.fn(\"processRunner.collectText\")(function* (input: {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string | undefined;\n  readonly streamName: \"stdout\" | \"stderr\";\n  readonly stream: Stream.Stream<Uint8Array, PlatformError.PlatformError>;\n  readonly maxOutputBytes: number;\n  readonly outputMode: \"error\" | \"truncate\";\n  readonly truncatedMarker: string;\n}) {\n  const stream = input.stream.pipe(\n    Stream.mapError(\n      (cause) =>\n        new ProcessReadError({\n          command: input.command,\n          args: input.args,\n          cwd: input.cwd,\n          stream: input.streamName,\n          cause,\n        }),\n    ),\n  );\n\n  if (input.outputMode === \"truncate\") {\n    return yield* collectUint8StreamText({\n      stream,\n      maxBytes: input.maxOutputBytes,\n      truncatedMarker: input.truncatedMarker,\n    });\n  }\n\n  return yield* stream.pipe(\n    Stream.runFoldEffect<\n      {\n        readonly chunks: Uint8Array<ArrayBufferLike>[];\n        readonly bytes: number;\n      },\n      Uint8Array<ArrayBufferLike>,\n      ProcessOutputLimitError | ProcessReadError,\n      never\n    >(\n      () => ({ chunks: [], bytes: 0 }),\n      (state, chunk) => {\n        const remainingBytes = input.maxOutputBytes - state.bytes;\n        if (remainingBytes <= 0 || chunk.byteLength > remainingBytes) {\n          return Effect.fail(\n            new ProcessOutputLimitError({\n              command: input.command,\n              args: input.args,\n              cwd: input.cwd,\n              stream: input.streamName,\n              maxBytes: input.maxOutputBytes,\n            }),\n          );\n        }\n\n        state.chunks.push(chunk);\n        return Effect.succeed({\n          chunks: state.chunks,\n          bytes: state.bytes + chunk.byteLength,\n        });\n      },\n    ),\n    Effect.map((state): CollectedUint8StreamText => ({\n      text: Buffer.concat(state.chunks, state.bytes).toString(\"utf8\"),\n      bytes: state.bytes,\n      truncated: false,\n    })),\n  );\n});\n\nfunction finalizeRunProcess<R>(\n  effect: Effect.Effect<ProcessRunOutput, ProcessRunError, R | Scope.Scope>,\n  input: ProcessRunInput,\n): Effect.Effect<ProcessRunOutput, ProcessRunError, Exclude<R, Scope.Scope>> {\n  const timeout = Duration.fromInputUnsafe(input.timeout ?? DEFAULT_TIMEOUT);\n  const timeoutBehavior = input.timeoutBehavior ?? \"error\";\n\n  return effect.pipe(\n    Effect.scoped,\n    Effect.timeoutOption(timeout),\n    Effect.flatMap((result) => {\n      if (Option.isSome(result)) {\n        return Effect.succeed(result.value);\n      }\n      if (timeoutBehavior === \"timedOutResult\") {\n        return Effect.succeed({\n          stdout: \"\",\n          stderr: \"\",\n          code: null,\n          timedOut: true,\n          stdoutTruncated: false,\n          stderrTruncated: false,\n        } satisfies ProcessRunOutput);\n      }\n      return Effect.fail(\n        new ProcessTimeoutError({\n          command: input.command,\n          args: input.args,\n          cwd: input.cwd,\n          timeoutMs: Duration.toMillis(timeout),\n        }),\n      );\n    }),\n  );\n}\n\nconst runProcessCore = Effect.fn(\"processRunner.runProcessCore\")(function* (\n  spawner: ChildProcessSpawner.ChildProcessSpawner[\"Service\"],\n  input: ProcessRunInput,\n): Effect.fn.Return<ProcessRunOutput, ProcessRunError, Scope.Scope> {\n  const maxOutputBytes = input.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n  const outputMode = input.outputMode ?? \"error\";\n  const truncatedMarker = input.truncatedMarker ?? \"\";\n  const extendEnv = input.env !== undefined;\n  const spawnCommand = resolveSpawnCommand(\n    input.command,\n    input.args,\n    input.env !== undefined ? { env: input.env, extendEnv } : {},\n  );\n\n  const child = yield* spawner\n    .spawn(\n      ChildProcess.make(spawnCommand.command, [...spawnCommand.args], {\n        ...((input.spawnCwd ?? input.cwd) ? { cwd: input.spawnCwd ?? input.cwd } : {}),\n        ...(input.env !== undefined\n          ? {\n              env: input.env,\n              extendEnv,\n            }\n          : {}),\n        shell: input.shell ?? spawnCommand.shell,\n      }),\n    )\n    .pipe(\n      Effect.mapError(\n        (cause) =>\n          new ProcessSpawnError({\n            command: input.command,\n            args: input.args,\n            cwd: input.cwd,\n            cause,\n          }),\n      ),\n    );\n\n  const writeStdin =\n    input.stdin === undefined\n      ? Effect.void\n      : Stream.run(Stream.encodeText(Stream.make(input.stdin)), child.stdin).pipe(\n          Effect.mapError(\n            (cause) =>\n              new ProcessStdinError({\n                command: input.command,\n                args: input.args,\n                cwd: input.cwd,\n                cause,\n              }),\n          ),\n        );\n\n  const [stdout, stderr] = yield* Effect.all(\n    [\n      collectText({\n        command: input.command,\n        args: input.args,\n        cwd: input.cwd,\n        streamName: \"stdout\",\n        stream: child.stdout,\n        maxOutputBytes,\n        outputMode,\n        truncatedMarker,\n      }),\n      collectText({\n        command: input.command,\n        args: input.args,\n        cwd: input.cwd,\n        streamName: \"stderr\",\n        stream: child.stderr,\n        maxOutputBytes,\n        outputMode,\n        truncatedMarker,\n      }),\n      writeStdin,\n    ],\n    { concurrency: \"unbounded\" },\n  );\n\n  const exitCode = yield* child.exitCode.pipe(\n    Effect.mapError(\n      (cause) =>\n        new ProcessReadError({\n          command: input.command,\n          args: input.args,\n          cwd: input.cwd,\n          stream: \"exitCode\",\n          cause,\n        }),\n    ),\n  );\n\n  return {\n    stdout: stdout.text,\n    stderr: stderr.text,\n    code: exitCode,\n    timedOut: false,\n    stdoutTruncated: stdout.truncated,\n    stderrTruncated: stderr.truncated,\n  } satisfies ProcessRunOutput;\n});\n\nexport const make = Effect.fn(\"makeProcessRunner\")(function* () {\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\n  const run: ProcessRunnerShape[\"run\"] = (input) =>\n    finalizeRunProcess(runProcessCore(spawner, input), input);\n\n  return ProcessRunner.of({\n    run,\n  });\n});\n\nexport const layer = Layer.effect(ProcessRunner, make());\n","import type { RepositoryIdentity } from \"@salchi/contracts\";\nimport * as Cache from \"effect/Cache\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport {\n  detectSourceControlProviderFromGitRemoteUrl,\n  normalizeGitRemoteUrl,\n} from \"@salchi/shared/git\";\n\nimport * as ProcessRunner from \"../../processRunner.ts\";\nimport {\n  RepositoryIdentityResolver,\n  type RepositoryIdentityResolverShape,\n} from \"../Services/RepositoryIdentityResolver.ts\";\n\nfunction parseRemoteFetchUrls(stdout: string): Map<string, string> {\n  const remotes = new Map<string, string>();\n  for (const line of stdout.split(\"\\n\")) {\n    const trimmed = line.trim();\n    if (trimmed.length === 0) continue;\n    const match = /^(\\S+)\\s+(\\S+)\\s+\\((fetch|push)\\)$/.exec(trimmed);\n    if (!match) continue;\n    const [, remoteName = \"\", remoteUrl = \"\", direction = \"\"] = match;\n    if (direction !== \"fetch\" || remoteName.length === 0 || remoteUrl.length === 0) {\n      continue;\n    }\n    remotes.set(remoteName, remoteUrl);\n  }\n  return remotes;\n}\n\nfunction pickPrimaryRemote(\n  remotes: ReadonlyMap<string, string>,\n): { readonly remoteName: string; readonly remoteUrl: string } | null {\n  for (const preferredRemoteName of [\"upstream\", \"origin\"] as const) {\n    const remoteUrl = remotes.get(preferredRemoteName);\n    if (remoteUrl) {\n      return { remoteName: preferredRemoteName, remoteUrl };\n    }\n  }\n\n  const [remoteName, remoteUrl] =\n    [...remotes.entries()].toSorted(([left], [right]) => left.localeCompare(right))[0] ?? [];\n  return remoteName && remoteUrl ? { remoteName, remoteUrl } : null;\n}\n\nfunction buildRepositoryIdentity(input: {\n  readonly remoteName: string;\n  readonly remoteUrl: string;\n  readonly rootPath: string;\n}): RepositoryIdentity {\n  const canonicalKey = normalizeGitRemoteUrl(input.remoteUrl);\n  const sourceControlProvider = detectSourceControlProviderFromGitRemoteUrl(input.remoteUrl);\n  const repositoryPath = canonicalKey.split(\"/\").slice(1).join(\"/\");\n  const repositoryPathSegments = repositoryPath.split(\"/\").filter((segment) => segment.length > 0);\n  const [owner] = repositoryPathSegments;\n  const repositoryName = repositoryPathSegments.at(-1);\n\n  return {\n    canonicalKey,\n    locator: {\n      source: \"git-remote\",\n      remoteName: input.remoteName,\n      remoteUrl: input.remoteUrl,\n    },\n    rootPath: input.rootPath,\n    ...(repositoryPath ? { displayName: repositoryPath } : {}),\n    ...(sourceControlProvider ? { provider: sourceControlProvider.kind } : {}),\n    ...(owner ? { owner } : {}),\n    ...(repositoryName ? { name: repositoryName } : {}),\n  };\n}\n\nconst DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY = 512;\nconst DEFAULT_POSITIVE_CACHE_TTL = Duration.minutes(1);\nconst DEFAULT_NEGATIVE_CACHE_TTL = Duration.minutes(1);\n\ninterface RepositoryIdentityResolverOptions {\n  readonly cacheCapacity?: number;\n  readonly positiveCacheTtl?: Duration.Input;\n  readonly negativeCacheTtl?: Duration.Input;\n}\n\nconst resolveRepositoryIdentityCacheKey = Effect.fn(\"resolveRepositoryIdentityCacheKey\")(function* (\n  cwd: string,\n) {\n  const processRunner = yield* ProcessRunner.ProcessRunner;\n  let cacheKey = cwd;\n\n  const topLevelResult = yield* processRunner\n    .run({\n      command: \"git\",\n      args: [\"-C\", cwd, \"rev-parse\", \"--show-toplevel\"],\n      timeoutBehavior: \"timedOutResult\",\n    })\n    .pipe(Effect.option);\n  if (topLevelResult._tag === \"None\" || topLevelResult.value.code !== 0) {\n    return cacheKey;\n  }\n\n  const candidate = topLevelResult.value.stdout.trim();\n  if (candidate.length > 0) {\n    cacheKey = candidate;\n  }\n\n  return cacheKey;\n});\n\nconst resolveRepositoryIdentityFromCacheKey = Effect.fn(\"resolveRepositoryIdentityFromCacheKey\")(\n  function* (\n    cacheKey: string,\n  ): Effect.fn.Return<RepositoryIdentity | null, never, ProcessRunner.ProcessRunner> {\n    const processRunner = yield* ProcessRunner.ProcessRunner;\n    const remoteResult = yield* processRunner\n      .run({\n        command: \"git\",\n        args: [\"-C\", cacheKey, \"remote\", \"-v\"],\n        timeoutBehavior: \"timedOutResult\",\n      })\n      .pipe(Effect.option);\n    if (remoteResult._tag === \"None\" || remoteResult.value.code !== 0) {\n      return null;\n    }\n\n    const remote = pickPrimaryRemote(parseRemoteFetchUrls(remoteResult.value.stdout));\n    return remote ? buildRepositoryIdentity({ ...remote, rootPath: cacheKey }) : null;\n  },\n);\n\nexport const makeRepositoryIdentityResolver = Effect.fn(\"makeRepositoryIdentityResolver\")(\n  function* (options: RepositoryIdentityResolverOptions = {}) {\n    const processRunner = yield* ProcessRunner.ProcessRunner;\n\n    const repositoryIdentityCache = yield* Cache.makeWith<string, RepositoryIdentity | null>(\n      (cacheKey) =>\n        resolveRepositoryIdentityFromCacheKey(cacheKey).pipe(\n          Effect.provideService(ProcessRunner.ProcessRunner, processRunner),\n        ),\n      {\n        capacity: options.cacheCapacity ?? DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY,\n        timeToLive: Exit.match({\n          onSuccess: (value) =>\n            value === null\n              ? (options.negativeCacheTtl ?? DEFAULT_NEGATIVE_CACHE_TTL)\n              : (options.positiveCacheTtl ?? DEFAULT_POSITIVE_CACHE_TTL),\n          onFailure: () => Duration.zero,\n        }),\n      },\n    );\n\n    const resolve: RepositoryIdentityResolverShape[\"resolve\"] = Effect.fn(\n      \"RepositoryIdentityResolver.resolve\",\n    )(function* (cwd) {\n      const cacheKey = yield* resolveRepositoryIdentityCacheKey(cwd).pipe(\n        Effect.provideService(ProcessRunner.ProcessRunner, processRunner),\n      );\n      return yield* Cache.get(repositoryIdentityCache, cacheKey);\n    });\n\n    return {\n      resolve,\n    } satisfies RepositoryIdentityResolverShape;\n  },\n);\n\nexport const RepositoryIdentityResolverLive = Layer.effect(\n  RepositoryIdentityResolver,\n  makeRepositoryIdentityResolver(),\n).pipe(Layer.provide(ProcessRunner.layer));\n","import * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\n\nexport const writeFileStringAtomically = (input: {\n  readonly filePath: string;\n  readonly contents: string;\n}) =>\n  Effect.scoped(\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const path = yield* Path.Path;\n      const targetDirectory = path.dirname(input.filePath);\n\n      yield* fs.makeDirectory(targetDirectory, { recursive: true });\n      const tempDirectory = yield* fs.makeTempDirectoryScoped({\n        directory: targetDirectory,\n        prefix: `${path.basename(input.filePath)}.`,\n      });\n      const tempPath = path.join(tempDirectory, \"contents.tmp\");\n\n      yield* fs.writeFileString(tempPath, input.contents);\n      yield* fs.rename(tempPath, input.filePath);\n    }),\n  );\n","/* oxlint-disable eslint/no-useless-escape */\n/*\n * QR Code generator library (TypeScript)\n *\n * Copyright (c) Project Nayuki. (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n * - The above copyright notice and this permission notice shall be included in\n *   all copies or substantial portions of the Software.\n * - The Software is provided \"as is\", without warranty of any kind, express or\n *   implied, including but not limited to the warranties of merchantability,\n *   fitness for a particular purpose and noninfringement. In no event shall the\n *   authors or copyright holders be liable for any claim, damages or other\n *   liability, whether in an action of contract, tort or otherwise, arising from,\n *   out of or in connection with the Software or the use or other dealings in the\n *   Software.\n */\n\n\"use strict\";\n\ntype bit = number;\ntype byte = number;\ntype int = number;\n\n/*---- QR Code symbol class ----*/\n\n/*\n * A QR Code symbol, which is a type of two-dimension barcode.\n * Invented by Denso Wave and described in the ISO/IEC 18004 standard.\n * Instances of this class represent an immutable square grid of dark and light cells.\n * The class provides static factory functions to create a QR Code from text or binary data.\n * The class covers the QR Code Model 2 specification, supporting all versions (sizes)\n * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.\n *\n * Ways to create a QR Code object:\n * - High level: Take the payload data and call QrCode.encodeText() or QrCode.encodeBinary().\n * - Mid level: Custom-make the list of segments and call QrCode.encodeSegments().\n * - Low level: Custom-make the array of data codeword bytes (including\n *   segment headers and final padding, excluding error correction codewords),\n *   supply the appropriate version number, and call the QrCode() constructor.\n * (Note that all ways require supplying the desired error correction level.)\n */\nexport class QrCode {\n  public static Ecc: typeof QrCodeEcc;\n\n  /*-- Static factory functions (high level) --*/\n\n  // Returns a QR Code representing the given Unicode text string at the given error correction level.\n  // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n  // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n  // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n  // ecl argument if it can be done without increasing the version.\n  public static encodeText(text: string, ecl: QrCodeEcc): QrCode {\n    const segs: Array<QrSegment> = QrSegment.makeSegments(text);\n    return QrCode.encodeSegments(segs, ecl);\n  }\n\n  // Returns a QR Code representing the given binary data at the given error correction level.\n  // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n  // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n  // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n  public static encodeBinary(data: Readonly<Array<byte>>, ecl: QrCodeEcc): QrCode {\n    const seg: QrSegment = QrSegment.makeBytes(data);\n    return QrCode.encodeSegments([seg], ecl);\n  }\n\n  /*-- Static factory functions (mid level) --*/\n\n  // Returns a QR Code representing the given segments with the given encoding parameters.\n  // The smallest possible QR Code version within the given range is automatically\n  // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n  // may be higher than the ecl argument if it can be done without increasing the\n  // version. The mask number is either between 0 to 7 (inclusive) to force that\n  // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n  // This function allows the user to create a custom sequence of segments that switches\n  // between modes (such as alphanumeric and byte) to encode text in less space.\n  // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n  public static encodeSegments(\n    segs: Readonly<Array<QrSegment>>,\n    ecl: QrCodeEcc,\n    minVersion: int = 1,\n    maxVersion: int = 40,\n    mask: int = -1,\n    boostEcl: boolean = true,\n  ): QrCode {\n    if (\n      !(\n        QrCode.MIN_VERSION <= minVersion &&\n        minVersion <= maxVersion &&\n        maxVersion <= QrCode.MAX_VERSION\n      ) ||\n      mask < -1 ||\n      mask > 7\n    )\n      throw new RangeError(\"Invalid value\");\n\n    // Find the minimal version number to use\n    let version: int;\n    let dataUsedBits: int;\n    for (version = minVersion; ; version++) {\n      const dataCapacityBits: int = QrCode.getNumDataCodewords(version, ecl) * 8; // Number of data bits available\n      const usedBits: number = QrSegment.getTotalBits(segs, version);\n      if (usedBits <= dataCapacityBits) {\n        dataUsedBits = usedBits;\n        break; // This version number is found to be suitable\n      }\n      if (version >= maxVersion)\n        // All versions in the range could not fit the given data\n        throw new RangeError(\"Data too long\");\n    }\n\n    // Increase the error correction level while the data still fits in the current version number\n    for (const newEcl of [QrCode.Ecc.MEDIUM, QrCode.Ecc.QUARTILE, QrCode.Ecc.HIGH]) {\n      // From low to high\n      if (boostEcl && dataUsedBits <= QrCode.getNumDataCodewords(version, newEcl) * 8) ecl = newEcl;\n    }\n\n    // Concatenate all segments to create the data bit string\n    let bb: Array<bit> = [];\n    for (const seg of segs) {\n      appendBits(seg.mode.modeBits, 4, bb);\n      appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n      for (const b of seg.getData()) bb.push(b);\n    }\n    assert(bb.length == dataUsedBits);\n\n    // Add terminator and pad up to a byte if applicable\n    const dataCapacityBits: int = QrCode.getNumDataCodewords(version, ecl) * 8;\n    assert(bb.length <= dataCapacityBits);\n    appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n    appendBits(0, (8 - (bb.length % 8)) % 8, bb);\n    assert(bb.length % 8 == 0);\n\n    // Pad with alternating bytes until data capacity is reached\n    for (let padByte = 0xec; bb.length < dataCapacityBits; padByte ^= 0xec ^ 0x11)\n      appendBits(padByte, 8, bb);\n\n    // Pack bits into bytes in big endian\n    let dataCodewords: Array<byte> = [];\n    while (dataCodewords.length * 8 < bb.length) dataCodewords.push(0);\n    bb.forEach((b: bit, i: int) => (dataCodewords[i >>> 3]! |= b << (7 - (i & 7))));\n\n    // Create the QR Code object\n    return new QrCode(version, ecl, dataCodewords, mask);\n  }\n\n  /*-- Fields --*/\n\n  // The width and height of this QR Code, measured in modules, between\n  // 21 and 177 (inclusive). This is equal to version * 4 + 17.\n  public readonly version: int;\n  public readonly errorCorrectionLevel: QrCodeEcc;\n  public readonly size: int;\n\n  // The index of the mask pattern used in this QR Code, which is between 0 and 7 (inclusive).\n  // Even if a QR Code is created with automatic masking requested (mask = -1),\n  // the resulting object still has a mask value between 0 and 7.\n  public readonly mask: int;\n\n  // The modules of this QR Code (false = light, true = dark).\n  // Immutable after constructor finishes. Accessed through getModule().\n  private readonly modules: Array<Array<boolean>> = [];\n\n  // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n  private readonly isFunction: Array<Array<boolean>> = [];\n\n  /*-- Constructor (low level) and fields --*/\n\n  // Creates a new QR Code with the given version number,\n  // error correction level, data codeword bytes, and mask number.\n  // This is a low-level API that most users should not use directly.\n  // A mid-level API is the encodeSegments() function.\n  public constructor(\n    // The version number of this QR Code, which is between 1 and 40 (inclusive).\n    // This determines the size of this barcode.\n    version: int,\n\n    // The error correction level used in this QR Code.\n    errorCorrectionLevel: QrCodeEcc,\n\n    dataCodewords: Readonly<Array<byte>>,\n\n    msk: int,\n  ) {\n    this.version = version;\n    this.errorCorrectionLevel = errorCorrectionLevel;\n\n    // Check scalar arguments\n    if (version < QrCode.MIN_VERSION || version > QrCode.MAX_VERSION)\n      throw new RangeError(\"Version value out of range\");\n    if (msk < -1 || msk > 7) throw new RangeError(\"Mask value out of range\");\n    this.size = version * 4 + 17;\n\n    // Initialize both grids to be size*size arrays of Boolean false\n    let row: Array<boolean> = [];\n    for (let i = 0; i < this.size; i++) row.push(false);\n    for (let i = 0; i < this.size; i++) {\n      this.modules.push(row.slice()); // Initially all light\n      this.isFunction.push(row.slice());\n    }\n\n    // Compute ECC, draw modules\n    this.drawFunctionPatterns();\n    const allCodewords: Array<byte> = this.addEccAndInterleave(dataCodewords);\n    this.drawCodewords(allCodewords);\n\n    // Do masking\n    if (msk == -1) {\n      // Automatically choose best mask\n      let minPenalty: int = 1000000000;\n      for (let i = 0; i < 8; i++) {\n        this.applyMask(i);\n        this.drawFormatBits(i);\n        const penalty: int = this.getPenaltyScore();\n        if (penalty < minPenalty) {\n          msk = i;\n          minPenalty = penalty;\n        }\n        this.applyMask(i); // Undoes the mask due to XOR\n      }\n    }\n    assert(0 <= msk && msk <= 7);\n    this.mask = msk;\n    this.applyMask(msk); // Apply the final choice of mask\n    this.drawFormatBits(msk); // Overwrite old format bits\n\n    this.isFunction = [];\n  }\n\n  /*-- Accessor methods --*/\n\n  // Returns the color of the module (pixel) at the given coordinates, which is false\n  // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n  // If the given coordinates are out of bounds, then false (light) is returned.\n  public getModule(x: int, y: int): boolean {\n    return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y]![x]!;\n  }\n\n  /*-- Private helper methods for constructor: Drawing function modules --*/\n\n  // Reads this object's version field, and draws and marks all function modules.\n  private drawFunctionPatterns(): void {\n    // Draw horizontal and vertical timing patterns\n    for (let i = 0; i < this.size; i++) {\n      this.setFunctionModule(6, i, i % 2 == 0);\n      this.setFunctionModule(i, 6, i % 2 == 0);\n    }\n\n    // Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)\n    this.drawFinderPattern(3, 3);\n    this.drawFinderPattern(this.size - 4, 3);\n    this.drawFinderPattern(3, this.size - 4);\n\n    // Draw numerous alignment patterns\n    const alignPatPos: Array<int> = this.getAlignmentPatternPositions();\n    const numAlign: int = alignPatPos.length;\n    for (let i = 0; i < numAlign; i++) {\n      for (let j = 0; j < numAlign; j++) {\n        // Don't draw on the three finder corners\n        if (!((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0)))\n          this.drawAlignmentPattern(alignPatPos[i]!, alignPatPos[j]!);\n      }\n    }\n\n    // Draw configuration data\n    this.drawFormatBits(0); // Dummy mask value; overwritten later in the constructor\n    this.drawVersion();\n  }\n\n  // Draws two copies of the format bits (with its own error correction code)\n  // based on the given mask and this object's error correction level field.\n  private drawFormatBits(mask: int): void {\n    // Calculate error correction code and pack bits\n    const data: int = (this.errorCorrectionLevel.formatBits << 3) | mask; // errCorrLvl is uint2, mask is uint3\n    let rem: int = data;\n    for (let i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537);\n    const bits = ((data << 10) | rem) ^ 0x5412; // uint15\n    assert(bits >>> 15 == 0);\n\n    // Draw first copy\n    for (let i = 0; i <= 5; i++) this.setFunctionModule(8, i, getBit(bits, i));\n    this.setFunctionModule(8, 7, getBit(bits, 6));\n    this.setFunctionModule(8, 8, getBit(bits, 7));\n    this.setFunctionModule(7, 8, getBit(bits, 8));\n    for (let i = 9; i < 15; i++) this.setFunctionModule(14 - i, 8, getBit(bits, i));\n\n    // Draw second copy\n    for (let i = 0; i < 8; i++) this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n    for (let i = 8; i < 15; i++) this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n    this.setFunctionModule(8, this.size - 8, true); // Always dark\n  }\n\n  // Draws two copies of the version bits (with its own error correction code),\n  // based on this object's version field, iff 7 <= version <= 40.\n  private drawVersion(): void {\n    if (this.version < 7) return;\n\n    // Calculate error correction code and pack bits\n    let rem: int = this.version; // version is uint6, in the range [7, 40]\n    for (let i = 0; i < 12; i++) rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25);\n    const bits: int = (this.version << 12) | rem; // uint18\n    assert(bits >>> 18 == 0);\n\n    // Draw two copies\n    for (let i = 0; i < 18; i++) {\n      const color: boolean = getBit(bits, i);\n      const a: int = this.size - 11 + (i % 3);\n      const b: int = Math.floor(i / 3);\n      this.setFunctionModule(a, b, color);\n      this.setFunctionModule(b, a, color);\n    }\n  }\n\n  // Draws a 9*9 finder pattern including the border separator,\n  // with the center module at (x, y). Modules can be out of bounds.\n  private drawFinderPattern(x: int, y: int): void {\n    for (let dy = -4; dy <= 4; dy++) {\n      for (let dx = -4; dx <= 4; dx++) {\n        const dist: int = Math.max(Math.abs(dx), Math.abs(dy)); // Chebyshev/infinity norm\n        const xx: int = x + dx;\n        const yy: int = y + dy;\n        if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n          this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n      }\n    }\n  }\n\n  // Draws a 5*5 alignment pattern, with the center module\n  // at (x, y). All modules must be in bounds.\n  private drawAlignmentPattern(x: int, y: int): void {\n    for (let dy = -2; dy <= 2; dy++) {\n      for (let dx = -2; dx <= 2; dx++)\n        this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n    }\n  }\n\n  // Sets the color of a module and marks it as a function module.\n  // Only used by the constructor. Coordinates must be in bounds.\n  private setFunctionModule(x: int, y: int, isDark: boolean): void {\n    this.modules[y]![x] = isDark;\n    this.isFunction[y]![x] = true;\n  }\n\n  /*-- Private helper methods for constructor: Codewords and masking --*/\n\n  // Returns a new byte string representing the given data with the appropriate error correction\n  // codewords appended to it, based on this object's version and error correction level.\n  private addEccAndInterleave(data: Readonly<Array<byte>>): Array<byte> {\n    const ver: int = this.version;\n    const ecl: QrCodeEcc = this.errorCorrectionLevel;\n    if (data.length != QrCode.getNumDataCodewords(ver, ecl))\n      throw new RangeError(\"Invalid argument\");\n\n    // Calculate parameter numbers\n    const numBlocks: int = QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal]![ver]!;\n    const blockEccLen: int = QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal]![ver]!;\n    const rawCodewords: int = Math.floor(QrCode.getNumRawDataModules(ver) / 8);\n    const numShortBlocks: int = numBlocks - (rawCodewords % numBlocks);\n    const shortBlockLen: int = Math.floor(rawCodewords / numBlocks);\n\n    // Split data into blocks and append ECC to each block\n    let blocks: Array<Array<byte>> = [];\n    const rsDiv: Array<byte> = QrCode.reedSolomonComputeDivisor(blockEccLen);\n    for (let i = 0, k = 0; i < numBlocks; i++) {\n      let dat: Array<byte> = data.slice(\n        k,\n        k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1),\n      );\n      k += dat.length;\n      const ecc: Array<byte> = QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n      if (i < numShortBlocks) dat.push(0);\n      blocks.push(dat.concat(ecc));\n    }\n\n    // Interleave (not concatenate) the bytes from every block into a single sequence\n    let result: Array<byte> = [];\n    for (let i = 0; i < blocks[0]!.length; i++) {\n      blocks.forEach((block, j) => {\n        // Skip the padding byte in short blocks\n        if (i != shortBlockLen - blockEccLen || j >= numShortBlocks) result.push(block[i]!);\n      });\n    }\n    assert(result.length == rawCodewords);\n    return result;\n  }\n\n  // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n  // data area of this QR Code. Function modules need to be marked off before this is called.\n  private drawCodewords(data: Readonly<Array<byte>>): void {\n    if (data.length != Math.floor(QrCode.getNumRawDataModules(this.version) / 8))\n      throw new RangeError(\"Invalid argument\");\n    let i: int = 0; // Bit index into the data\n    // Do the funny zigzag scan\n    for (let right = this.size - 1; right >= 1; right -= 2) {\n      // Index of right column in each column pair\n      if (right == 6) right = 5;\n      for (let vert = 0; vert < this.size; vert++) {\n        // Vertical counter\n        for (let j = 0; j < 2; j++) {\n          const x: int = right - j; // Actual x coordinate\n          const upward: boolean = ((right + 1) & 2) == 0;\n          const y: int = upward ? this.size - 1 - vert : vert; // Actual y coordinate\n          if (!this.isFunction[y]![x]! && i < data.length * 8) {\n            this.modules[y]![x] = getBit(data[i >>> 3]!, 7 - (i & 7));\n            i++;\n          }\n          // If this QR Code has any remainder bits (0 to 7), they were assigned as\n          // 0/false/light by the constructor and are left unchanged by this method\n        }\n      }\n    }\n    assert(i == data.length * 8);\n  }\n\n  // XORs the codeword modules in this QR Code with the given mask pattern.\n  // The function modules must be marked and the codeword bits must be drawn\n  // before masking. Due to the arithmetic of XOR, calling applyMask() with\n  // the same mask value a second time will undo the mask. A final well-formed\n  // QR Code needs exactly one (not zero, two, etc.) mask applied.\n  private applyMask(mask: int): void {\n    if (mask < 0 || mask > 7) throw new RangeError(\"Mask value out of range\");\n    for (let y = 0; y < this.size; y++) {\n      for (let x = 0; x < this.size; x++) {\n        let invert: boolean;\n        switch (mask) {\n          case 0:\n            invert = (x + y) % 2 == 0;\n            break;\n          case 1:\n            invert = y % 2 == 0;\n            break;\n          case 2:\n            invert = x % 3 == 0;\n            break;\n          case 3:\n            invert = (x + y) % 3 == 0;\n            break;\n          case 4:\n            invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n            break;\n          case 5:\n            invert = ((x * y) % 2) + ((x * y) % 3) == 0;\n            break;\n          case 6:\n            invert = (((x * y) % 2) + ((x * y) % 3)) % 2 == 0;\n            break;\n          case 7:\n            invert = (((x + y) % 2) + ((x * y) % 3)) % 2 == 0;\n            break;\n          default:\n            throw new Error(\"Unreachable\");\n        }\n        if (!this.isFunction[y]![x]! && invert) this.modules[y]![x] = !this.modules[y]![x]!;\n      }\n    }\n  }\n\n  // Calculates and returns the penalty score based on state of this QR Code's current modules.\n  // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n  private getPenaltyScore(): int {\n    let result: int = 0;\n\n    // Adjacent modules in row having same color, and finder-like patterns\n    for (let y = 0; y < this.size; y++) {\n      let runColor = false;\n      let runX = 0;\n      let runHistory = [0, 0, 0, 0, 0, 0, 0];\n      for (let x = 0; x < this.size; x++) {\n        if (this.modules[y]![x] === runColor) {\n          runX++;\n          if (runX == 5) result += QrCode.PENALTY_N1;\n          else if (runX > 5) result++;\n        } else {\n          this.finderPenaltyAddHistory(runX, runHistory);\n          if (!runColor) result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;\n          runColor = this.modules[y]![x]!;\n          runX = 1;\n        }\n      }\n      result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY_N3;\n    }\n    // Adjacent modules in column having same color, and finder-like patterns\n    for (let x = 0; x < this.size; x++) {\n      let runColor = false;\n      let runY = 0;\n      let runHistory = [0, 0, 0, 0, 0, 0, 0];\n      for (let y = 0; y < this.size; y++) {\n        if (this.modules[y]![x] === runColor) {\n          runY++;\n          if (runY == 5) result += QrCode.PENALTY_N1;\n          else if (runY > 5) result++;\n        } else {\n          this.finderPenaltyAddHistory(runY, runHistory);\n          if (!runColor) result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;\n          runColor = this.modules[y]![x]!;\n          runY = 1;\n        }\n      }\n      result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY_N3;\n    }\n\n    // 2*2 blocks of modules having same color\n    for (let y = 0; y < this.size - 1; y++) {\n      for (let x = 0; x < this.size - 1; x++) {\n        const color: boolean = this.modules[y]![x]!;\n        if (\n          color == this.modules[y]![x + 1]! &&\n          color == this.modules[y + 1]![x]! &&\n          color == this.modules[y + 1]![x + 1]!\n        )\n          result += QrCode.PENALTY_N2;\n      }\n    }\n\n    // Balance of dark and light modules\n    let dark: int = 0;\n    for (const row of this.modules) dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n    const total: int = this.size * this.size; // Note that size is odd, so dark/total != 1/2\n    // Compute the smallest integer k >= 0 such that (45-5k)% <= dark/total <= (55+5k)%\n    const k: int = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n    assert(0 <= k && k <= 9);\n    result += k * QrCode.PENALTY_N4;\n    assert(0 <= result && result <= 2568888); // Non-tight upper bound based on default values of PENALTY_N1, ..., N4\n    return result;\n  }\n\n  /*-- Private helper functions --*/\n\n  // Returns an ascending list of positions of alignment patterns for this version number.\n  // Each position is in the range [0,177), and are used on both the x and y axes.\n  // This could be implemented as lookup table of 40 variable-length lists of integers.\n  private getAlignmentPatternPositions(): Array<int> {\n    if (this.version == 1) return [];\n    else {\n      const numAlign: int = Math.floor(this.version / 7) + 2;\n      const step: int =\n        this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n      let result: Array<int> = [6];\n      for (let pos = this.size - 7; result.length < numAlign; pos -= step) result.splice(1, 0, pos);\n      return result;\n    }\n  }\n\n  // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n  // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n  // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n  private static getNumRawDataModules(ver: int): int {\n    if (ver < QrCode.MIN_VERSION || ver > QrCode.MAX_VERSION)\n      throw new RangeError(\"Version number out of range\");\n    let result: int = (16 * ver + 128) * ver + 64;\n    if (ver >= 2) {\n      const numAlign: int = Math.floor(ver / 7) + 2;\n      result -= (25 * numAlign - 10) * numAlign - 55;\n      if (ver >= 7) result -= 36;\n    }\n    assert(208 <= result && result <= 29648);\n    return result;\n  }\n\n  // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n  // QR Code of the given version number and error correction level, with remainder bits discarded.\n  // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n  private static getNumDataCodewords(ver: int, ecl: QrCodeEcc): int {\n    return (\n      Math.floor(QrCode.getNumRawDataModules(ver) / 8) -\n      QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal]![ver]! *\n        QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal]![ver]!\n    );\n  }\n\n  // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n  // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n  private static reedSolomonComputeDivisor(degree: int): Array<byte> {\n    if (degree < 1 || degree > 255) throw new RangeError(\"Degree out of range\");\n    // Polynomial coefficients are stored from highest to lowest power, excluding the leading term which is always 1.\n    // For example the polynomial x^3 + 255x^2 + 8x + 93 is stored as the uint8 array [255, 8, 93].\n    let result: Array<byte> = [];\n    for (let i = 0; i < degree - 1; i++) result.push(0);\n    result.push(1); // Start off with the monomial x^0\n\n    // Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),\n    // and drop the highest monomial term which is always 1x^degree.\n    // Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).\n    let root = 1;\n    for (let i = 0; i < degree; i++) {\n      // Multiply the current product by (x - r^i)\n      for (let j = 0; j < result.length; j++) {\n        result[j] = QrCode.reedSolomonMultiply(result[j]!, root);\n        if (j + 1 < result.length) result[j]! ^= result[j + 1]!;\n      }\n      root = QrCode.reedSolomonMultiply(root, 0x02);\n    }\n    return result;\n  }\n\n  // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n  private static reedSolomonComputeRemainder(\n    data: Readonly<Array<byte>>,\n    divisor: Readonly<Array<byte>>,\n  ): Array<byte> {\n    let result: Array<byte> = divisor.map((_) => 0);\n    for (const b of data) {\n      // Polynomial division\n      const factor: byte = b ^ (result.shift() as byte);\n      result.push(0);\n      divisor.forEach((coef, i) => (result[i]! ^= QrCode.reedSolomonMultiply(coef, factor)));\n    }\n    return result;\n  }\n\n  // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n  // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n  private static reedSolomonMultiply(x: byte, y: byte): byte {\n    if (x >>> 8 != 0 || y >>> 8 != 0) throw new RangeError(\"Byte out of range\");\n    // Russian peasant multiplication\n    let z: int = 0;\n    for (let i = 7; i >= 0; i--) {\n      z = (z << 1) ^ ((z >>> 7) * 0x11d);\n      z ^= ((y >>> i) & 1) * x;\n    }\n    assert(z >>> 8 == 0);\n    return z as byte;\n  }\n\n  // Can only be called immediately after a light run is added, and\n  // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n  private finderPenaltyCountPatterns(runHistory: Readonly<Array<int>>): int {\n    const n: int = runHistory[1]!;\n    assert(n <= this.size * 3);\n    const core: boolean =\n      n > 0 &&\n      runHistory[2] === n &&\n      runHistory[3] === n * 3 &&\n      runHistory[4] === n &&\n      runHistory[5] === n;\n    return (\n      (core && runHistory[0]! >= n * 4 && runHistory[6]! >= n ? 1 : 0) +\n      (core && runHistory[6]! >= n * 4 && runHistory[0]! >= n ? 1 : 0)\n    );\n  }\n\n  // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n  private finderPenaltyTerminateAndCount(\n    currentRunColor: boolean,\n    currentRunLength: int,\n    runHistory: Array<int>,\n  ): int {\n    if (currentRunColor) {\n      // Terminate dark run\n      this.finderPenaltyAddHistory(currentRunLength, runHistory);\n      currentRunLength = 0;\n    }\n    currentRunLength += this.size; // Add light border to final run\n    this.finderPenaltyAddHistory(currentRunLength, runHistory);\n    return this.finderPenaltyCountPatterns(runHistory);\n  }\n\n  // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n  private finderPenaltyAddHistory(currentRunLength: int, runHistory: Array<int>): void {\n    if (runHistory[0] === 0) currentRunLength += this.size; // Add light border to initial run\n    runHistory.pop();\n    runHistory.unshift(currentRunLength);\n  }\n\n  /*-- Constants and tables --*/\n\n  // The minimum version number supported in the QR Code Model 2 standard.\n  public static readonly MIN_VERSION: int = 1;\n  // The maximum version number supported in the QR Code Model 2 standard.\n  public static readonly MAX_VERSION: int = 40;\n\n  // For use in getPenaltyScore(), when evaluating which mask is best.\n  private static readonly PENALTY_N1: int = 3;\n  private static readonly PENALTY_N2: int = 3;\n  private static readonly PENALTY_N3: int = 40;\n  private static readonly PENALTY_N4: int = 10;\n\n  private static readonly ECC_CODEWORDS_PER_BLOCK: Array<Array<int>> = [\n    // Version: (note that index 0 is for padding, and is set to an illegal value)\n    //0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40    Error correction level\n    [\n      -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30,\n      30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n    ], // Low\n    [\n      -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28,\n      28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n    ], // Medium\n    [\n      -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30,\n      30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n    ], // Quartile\n    [\n      -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24,\n      30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n    ], // High\n  ];\n\n  private static readonly NUM_ERROR_CORRECTION_BLOCKS: Array<Array<int>> = [\n    // Version: (note that index 0 is for padding, and is set to an illegal value)\n    //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40    Error correction level\n    [\n      -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13,\n      14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25,\n    ], // Low\n    [\n      -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23,\n      25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49,\n    ], // Medium\n    [\n      -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29,\n      34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68,\n    ], // Quartile\n    [\n      -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35,\n      37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81,\n    ], // High\n  ];\n}\n\n// Appends the given number of low-order bits of the given value\n// to the given buffer. Requires 0 <= len <= 31 and 0 <= val < 2^len.\nfunction appendBits(val: int, len: int, bb: Array<bit>): void {\n  if (len < 0 || len > 31 || val >>> len != 0) throw new RangeError(\"Value out of range\");\n  for (\n    let i = len - 1;\n    i >= 0;\n    i-- // Append bit by bit\n  )\n    bb.push((val >>> i) & 1);\n}\n\n// Returns true iff the i'th bit of x is set to 1.\nfunction getBit(x: int, i: int): boolean {\n  return ((x >>> i) & 1) != 0;\n}\n\n// Throws an exception if the given condition is false.\nfunction assert(cond: boolean): void {\n  if (!cond) throw new Error(\"Assertion error\");\n}\n\n/*---- Data segment class ----*/\n\n/*\n * A segment of character/binary/control data in a QR Code symbol.\n * Instances of this class are immutable.\n * The mid-level way to create a segment is to take the payload data\n * and call a static factory function such as QrSegment.makeNumeric().\n * The low-level way to create a segment is to custom-make the bit buffer\n * and call the QrSegment() constructor with appropriate values.\n * This segment class imposes no length restrictions, but QR Codes have restrictions.\n * Even in the most favorable conditions, a QR Code can only hold 7089 characters of data.\n * Any segment longer than this is meaningless for the purpose of generating QR Codes.\n */\nexport class QrSegment {\n  public static Mode: typeof QrSegmentMode;\n\n  /*-- Static factory functions (mid level) --*/\n\n  // Returns a segment representing the given binary data encoded in\n  // byte mode. All input byte arrays are acceptable. Any text string\n  // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n  public static makeBytes(data: Readonly<Array<byte>>): QrSegment {\n    let bb: Array<bit> = [];\n    for (const b of data) appendBits(b, 8, bb);\n    return new QrSegment(QrSegment.Mode.BYTE, data.length, bb);\n  }\n\n  // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n  public static makeNumeric(digits: string): QrSegment {\n    if (!QrSegment.isNumeric(digits))\n      throw new RangeError(\"String contains non-numeric characters\");\n    let bb: Array<bit> = [];\n    for (let i = 0; i < digits.length;) {\n      // Consume up to 3 digits per iteration\n      const n: int = Math.min(digits.length - i, 3);\n      appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n      i += n;\n    }\n    return new QrSegment(QrSegment.Mode.NUMERIC, digits.length, bb);\n  }\n\n  // Returns a segment representing the given text string encoded in alphanumeric mode.\n  // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n  // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n  public static makeAlphanumeric(text: string): QrSegment {\n    if (!QrSegment.isAlphanumeric(text))\n      throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n    let bb: Array<bit> = [];\n    let i: int;\n    for (i = 0; i + 2 <= text.length; i += 2) {\n      // Process groups of 2\n      let temp: int = QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n      temp += QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n      appendBits(temp, 11, bb);\n    }\n    if (i < text.length)\n      // 1 character remaining\n      appendBits(QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n    return new QrSegment(QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n  }\n\n  // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n  // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n  public static makeSegments(text: string): Array<QrSegment> {\n    // Select the most efficient segment encoding automatically\n    if (text == \"\") return [];\n    else if (QrSegment.isNumeric(text)) return [QrSegment.makeNumeric(text)];\n    else if (QrSegment.isAlphanumeric(text)) return [QrSegment.makeAlphanumeric(text)];\n    else return [QrSegment.makeBytes(QrSegment.toUtf8ByteArray(text))];\n  }\n\n  // Returns a segment representing an Extended Channel Interpretation\n  // (ECI) designator with the given assignment value.\n  public static makeEci(assignVal: int): QrSegment {\n    let bb: Array<bit> = [];\n    if (assignVal < 0) throw new RangeError(\"ECI assignment value out of range\");\n    else if (assignVal < 1 << 7) appendBits(assignVal, 8, bb);\n    else if (assignVal < 1 << 14) {\n      appendBits(0b10, 2, bb);\n      appendBits(assignVal, 14, bb);\n    } else if (assignVal < 1000000) {\n      appendBits(0b110, 3, bb);\n      appendBits(assignVal, 21, bb);\n    } else throw new RangeError(\"ECI assignment value out of range\");\n    return new QrSegment(QrSegment.Mode.ECI, 0, bb);\n  }\n\n  // Tests whether the given string can be encoded as a segment in numeric mode.\n  // A string is encodable iff each character is in the range 0 to 9.\n  public static isNumeric(text: string): boolean {\n    return QrSegment.NUMERIC_REGEX.test(text);\n  }\n\n  // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n  // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n  // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n  public static isAlphanumeric(text: string): boolean {\n    return QrSegment.ALPHANUMERIC_REGEX.test(text);\n  }\n\n  /*-- Constructor (low level) and fields --*/\n\n  public readonly mode: QrSegmentMode;\n  public readonly numChars: int;\n  private readonly bitData: Array<bit>;\n\n  // Creates a new QR Code segment with the given attributes and data.\n  // The character count (numChars) must agree with the mode and the bit buffer length,\n  // but the constraint isn't checked. The given bit buffer is cloned and stored.\n  public constructor(\n    // The mode indicator of this segment.\n    mode: QrSegmentMode,\n\n    // The length of this segment's unencoded data. Measured in characters for\n    // numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.\n    // Always zero or positive. Not the same as the data's bit length.\n    numChars: int,\n\n    // The data bits of this segment. Accessed through getData().\n    bitData: Array<bit>,\n  ) {\n    this.mode = mode;\n    this.numChars = numChars;\n    if (numChars < 0) throw new RangeError(\"Invalid argument\");\n    this.bitData = bitData.slice(); // Make defensive copy\n  }\n\n  /*-- Methods --*/\n\n  // Returns a new copy of the data bits of this segment.\n  public getData(): Array<bit> {\n    return this.bitData.slice(); // Make defensive copy\n  }\n\n  // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n  // the given version. The result is infinity if a segment has too many characters to fit its length field.\n  public static getTotalBits(segs: Readonly<Array<QrSegment>>, version: int): number {\n    let result: number = 0;\n    for (const seg of segs) {\n      const ccbits: int = seg.mode.numCharCountBits(version);\n      if (seg.numChars >= 1 << ccbits) return Infinity; // The segment's length doesn't fit the field's bit width\n      result += 4 + ccbits + seg.bitData.length;\n    }\n    return result;\n  }\n\n  // Returns a new array of bytes representing the given string encoded in UTF-8.\n  private static toUtf8ByteArray(str: string): Array<byte> {\n    str = encodeURI(str);\n    let result: Array<byte> = [];\n    for (let i = 0; i < str.length; i++) {\n      if (str.charAt(i) != \"%\") result.push(str.charCodeAt(i));\n      else {\n        result.push(parseInt(str.substring(i + 1, i + 3), 16));\n        i += 2;\n      }\n    }\n    return result;\n  }\n\n  /*-- Constants --*/\n\n  // Describes precisely all strings that are encodable in numeric mode.\n  private static readonly NUMERIC_REGEX: RegExp = /^[0-9]*$/;\n\n  // Describes precisely all strings that are encodable in alphanumeric mode.\n  private static readonly ALPHANUMERIC_REGEX: RegExp = /^[A-Z0-9 $%*+.\\/:-]*$/;\n\n  // The set of all legal characters in alphanumeric mode,\n  // where each character value maps to the index in the string.\n  private static readonly ALPHANUMERIC_CHARSET: string =\n    \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n}\n\n/*---- Public helper enumeration ----*/\n\nclass QrCodeEcc {\n  /*-- Constants --*/\n\n  public static readonly LOW = new QrCodeEcc(0, 1); // The QR Code can tolerate about  7% erroneous codewords\n  public static readonly MEDIUM = new QrCodeEcc(1, 0); // The QR Code can tolerate about 15% erroneous codewords\n  public static readonly QUARTILE = new QrCodeEcc(2, 3); // The QR Code can tolerate about 25% erroneous codewords\n  public static readonly HIGH = new QrCodeEcc(3, 2); // The QR Code can tolerate about 30% erroneous codewords\n\n  public readonly ordinal: int;\n  public readonly formatBits: int;\n\n  /*-- Constructor and fields --*/\n\n  private constructor(\n    // In the range 0 to 3 (unsigned 2-bit integer).\n    ordinal: int,\n    // (Package-private) In the range 0 to 3 (unsigned 2-bit integer).\n    formatBits: int,\n  ) {\n    this.ordinal = ordinal;\n    this.formatBits = formatBits;\n  }\n}\n\n/*---- Public helper enumeration ----*/\n\nclass QrSegmentMode {\n  /*-- Constants --*/\n\n  public static readonly NUMERIC = new QrSegmentMode(0x1, [10, 12, 14]);\n  public static readonly ALPHANUMERIC = new QrSegmentMode(0x2, [9, 11, 13]);\n  public static readonly BYTE = new QrSegmentMode(0x4, [8, 16, 16]);\n  public static readonly KANJI = new QrSegmentMode(0x8, [8, 10, 12]);\n  public static readonly ECI = new QrSegmentMode(0x7, [0, 0, 0]);\n\n  public readonly modeBits: int;\n  private readonly numBitsCharCount: [int, int, int];\n\n  /*-- Constructor and fields --*/\n\n  private constructor(\n    // The mode indicator bits, which is a uint4 value (range 0 to 15).\n    modeBits: int,\n    // Number of character count bits for three different version ranges.\n    numBitsCharCount: [int, int, int],\n  ) {\n    this.modeBits = modeBits;\n    this.numBitsCharCount = numBitsCharCount;\n  }\n\n  /*-- Method --*/\n\n  // (Package-private) Returns the bit width of the character count field for a segment in\n  // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n  public numCharCountBits(ver: int): int {\n    return this.numBitsCharCount[Math.floor((ver + 7) / 17)]!;\n  }\n}\n\nQrCode.Ecc = QrCodeEcc;\nQrSegment.Mode = QrSegmentMode;\n","import * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nexport const DEFAULT_TAILSCALE_SERVE_PORT = 443;\nexport const TAILSCALE_STATUS_TIMEOUT_MS = 1_500;\nexport const TAILSCALE_SERVE_TIMEOUT_MS = 10_000;\nexport const TAILSCALE_SERVE_SHUTDOWN_TIMEOUT_MS = 1_000;\nexport const TAILSCALE_PROBE_TIMEOUT_MS = 2_500;\n\nexport class TailscaleCommandError extends Data.TaggedError(\"TailscaleCommandError\")<{\n  readonly command: readonly string[];\n  readonly message: string;\n  readonly exitCode: number | null;\n  readonly stderr: string;\n}> {}\n\nexport class TailscaleStatusParseError extends Data.TaggedError(\"TailscaleStatusParseError\")<{\n  readonly cause: unknown;\n}> {}\n\nexport class TailscaleUnavailableError extends Data.TaggedError(\"TailscaleUnavailableError\")<{\n  readonly reason: string;\n}> {}\n\nconst TailscaleStatusSelf = Schema.Struct({\n  DNSName: Schema.optional(Schema.Unknown),\n  TailscaleIPs: Schema.optional(Schema.Unknown),\n});\n\nconst TailscaleStatusJson = Schema.Struct({\n  Self: Schema.optional(TailscaleStatusSelf),\n});\n\nexport type TailscaleStatusSelf = typeof TailscaleStatusSelf.Type;\nexport type TailscaleStatusJson = typeof TailscaleStatusJson.Type;\n\nexport interface TailscaleStatus {\n  readonly magicDnsName: string | null;\n  readonly tailnetIpv4Addresses: readonly string[];\n}\n\nconst collectStdout = <E>(stream: Stream.Stream<Uint8Array, E>): Effect.Effect<string, E> =>\n  stream.pipe(\n    Stream.decodeText(),\n    Stream.runFold(\n      () => \"\",\n      (acc, chunk) => acc + chunk,\n    ),\n  );\n\nconst collectStderr = collectStdout;\n\nconst tailscaleCommandError = (\n  args: readonly string[],\n  message: string,\n  exitCode: number | null,\n  stderr = \"\",\n): TailscaleCommandError =>\n  new TailscaleCommandError({\n    command: [\"tailscale\", ...args],\n    message,\n    exitCode,\n    stderr,\n  });\n\nconst decodeTailscaleStatusJson = Schema.decodeEffect(Schema.fromJsonString(TailscaleStatusJson));\n\nfunction normalizeMagicDnsName(status: TailscaleStatusJson): string | null {\n  const dnsName = status.Self?.DNSName;\n  if (typeof dnsName !== \"string\") {\n    return null;\n  }\n\n  const normalized = dnsName.trim().replace(/\\.$/u, \"\");\n  return normalized.length > 0 ? normalized : null;\n}\n\nexport const parseTailscaleMagicDnsName = (\n  rawStatusJson: string,\n): Effect.Effect<string | null, TailscaleStatusParseError> =>\n  decodeTailscaleStatusJson(rawStatusJson).pipe(\n    Effect.mapError((cause) => new TailscaleStatusParseError({ cause })),\n    Effect.map(normalizeMagicDnsName),\n  );\n\nexport function isTailscaleIpv4Address(address: string): boolean {\n  const parts = address.split(\".\");\n  if (parts.length !== 4) {\n    return false;\n  }\n  const [first, second, third, fourth] = parts.map((part) => Number.parseInt(part, 10));\n  if (\n    first === undefined ||\n    second === undefined ||\n    third === undefined ||\n    fourth === undefined ||\n    [first, second, third, fourth].some((part) => !Number.isInteger(part) || part < 0 || part > 255)\n  ) {\n    return false;\n  }\n  return first === 100 && second >= 64 && second <= 127;\n}\n\nexport const parseTailscaleStatus = (\n  rawStatusJson: string,\n): Effect.Effect<TailscaleStatus, TailscaleStatusParseError> =>\n  decodeTailscaleStatusJson(rawStatusJson).pipe(\n    Effect.mapError((cause) => new TailscaleStatusParseError({ cause })),\n    Effect.map((parsed) => {\n      const rawIps = parsed.Self?.TailscaleIPs;\n      const tailnetIpv4Addresses: Array<string> = [];\n      if (Array.isArray(rawIps)) {\n        for (const address of rawIps) {\n          if (typeof address === \"string\" && isTailscaleIpv4Address(address)) {\n            tailnetIpv4Addresses.push(address);\n          }\n        }\n      }\n\n      return {\n        magicDnsName: normalizeMagicDnsName(parsed),\n        tailnetIpv4Addresses,\n      };\n    }),\n  );\n\nexport const readTailscaleStatus: Effect.Effect<\n  TailscaleStatus,\n  TailscaleCommandError | TailscaleStatusParseError,\n  ChildProcessSpawner.ChildProcessSpawner\n> = Effect.gen(function* () {\n  const args = [\"status\", \"--json\"];\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const spawnCommand = resolveSpawnCommand(\"tailscale\", args);\n  const child = yield* spawner\n    .spawn(\n      ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n        shell: spawnCommand.shell,\n      }),\n    )\n    .pipe(\n      Effect.mapError((cause) =>\n        tailscaleCommandError(\n          args,\n          cause instanceof Error ? cause.message : \"Failed to spawn tailscale status.\",\n          null,\n        ),\n      ),\n    );\n  const [stdout, stderr, exitCode] = yield* Effect.all(\n    [\n      collectStdout(child.stdout),\n      collectStderr(child.stderr),\n      child.exitCode.pipe(Effect.map(Number)),\n    ],\n    { concurrency: \"unbounded\" },\n  ).pipe(\n    Effect.mapError((cause) =>\n      tailscaleCommandError(\n        args,\n        cause instanceof Error ? cause.message : \"Failed to run tailscale status.\",\n        null,\n      ),\n    ),\n  );\n  if (exitCode !== 0) {\n    return yield* tailscaleCommandError(\n      args,\n      `Tailscale status exited with code ${exitCode}.`,\n      exitCode,\n      stderr,\n    );\n  }\n  return yield* parseTailscaleStatus(stdout);\n}).pipe(\n  Effect.scoped,\n  Effect.timeoutOption(TAILSCALE_STATUS_TIMEOUT_MS),\n  Effect.flatMap((result) =>\n    Option.match(result, {\n      onNone: () =>\n        Effect.fail(\n          tailscaleCommandError([\"status\", \"--json\"], \"Tailscale status timed out.\", null),\n        ),\n      onSome: Effect.succeed,\n    }),\n  ),\n);\n\nexport function buildTailscaleHttpsBaseUrl(input: {\n  readonly magicDnsName: string;\n  readonly servePort?: number;\n}): string {\n  const url = new URL(`https://${input.magicDnsName}`);\n  const servePort = input.servePort ?? DEFAULT_TAILSCALE_SERVE_PORT;\n  if (servePort !== DEFAULT_TAILSCALE_SERVE_PORT) {\n    url.port = String(servePort);\n  }\n  url.pathname = \"/\";\n  return url.toString();\n}\n\nconst runTailscaleCommand = (\n  args: readonly string[],\n  input: {\n    readonly spawnMessage: string;\n    readonly runMessage: string;\n    readonly exitMessage: (exitCode: number) => string;\n    readonly timeoutMessage: string;\n    readonly timeoutMs: number;\n  },\n): Effect.Effect<void, TailscaleCommandError, ChildProcessSpawner.ChildProcessSpawner> =>\n  Effect.gen(function* () {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const spawnCommand = resolveSpawnCommand(\"tailscale\", args);\n    const child = yield* spawner\n      .spawn(\n        ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n          shell: spawnCommand.shell,\n        }),\n      )\n      .pipe(\n        Effect.mapError((cause) =>\n          tailscaleCommandError(\n            args,\n            cause instanceof Error ? cause.message : input.spawnMessage,\n            null,\n          ),\n        ),\n      );\n    const [stderr, exitCode] = yield* Effect.all(\n      [collectStderr(child.stderr), child.exitCode.pipe(Effect.map(Number))],\n      { concurrency: \"unbounded\" },\n    ).pipe(\n      Effect.mapError((cause) =>\n        tailscaleCommandError(\n          args,\n          cause instanceof Error ? cause.message : input.runMessage,\n          null,\n        ),\n      ),\n    );\n    if (exitCode !== 0) {\n      return yield* tailscaleCommandError(args, input.exitMessage(exitCode), exitCode, stderr);\n    }\n  }).pipe(\n    Effect.scoped,\n    Effect.timeoutOption(input.timeoutMs),\n    Effect.flatMap((result) =>\n      Option.match(result, {\n        onNone: () => Effect.fail(tailscaleCommandError(args, input.timeoutMessage, null)),\n        onSome: Effect.succeed,\n      }),\n    ),\n  );\n\nexport const ensureTailscaleServe = (input: {\n  readonly localPort: number;\n  readonly servePort?: number;\n  readonly localHost?: string;\n}): Effect.Effect<void, TailscaleCommandError, ChildProcessSpawner.ChildProcessSpawner> => {\n  const servePort = input.servePort ?? DEFAULT_TAILSCALE_SERVE_PORT;\n  const localHost = input.localHost ?? \"127.0.0.1\";\n  const args = [\"serve\", \"--bg\", `--https=${servePort}`, `http://${localHost}:${input.localPort}`];\n  return runTailscaleCommand(args, {\n    spawnMessage: \"Failed to spawn tailscale serve.\",\n    runMessage: \"Failed to run tailscale serve.\",\n    exitMessage: (exitCode) => `Tailscale serve exited with code ${exitCode}.`,\n    timeoutMessage: \"Tailscale serve timed out.\",\n    timeoutMs: TAILSCALE_SERVE_TIMEOUT_MS,\n  });\n};\n\nexport const disableTailscaleServe = (\n  input: {\n    readonly servePort?: number;\n  } = {},\n): Effect.Effect<void, TailscaleCommandError, ChildProcessSpawner.ChildProcessSpawner> =>\n  Effect.gen(function* () {\n    const servePort = input.servePort ?? DEFAULT_TAILSCALE_SERVE_PORT;\n    return yield* runTailscaleCommand([\"serve\", `--https=${servePort}`, \"off\"], {\n      spawnMessage: \"Failed to spawn tailscale serve off.\",\n      runMessage: \"Failed to run tailscale serve off.\",\n      exitMessage: (exitCode) => `Tailscale serve off exited with code ${exitCode}.`,\n      timeoutMessage: \"Tailscale serve off timed out.\",\n      timeoutMs: TAILSCALE_SERVE_SHUTDOWN_TIMEOUT_MS,\n    });\n  });\n\nexport const probeTailscaleHttpsEndpoint = (input: {\n  readonly baseUrl: string;\n  readonly timeoutMs?: number;\n}): Effect.Effect<boolean, never, HttpClient.HttpClient> =>\n  Effect.gen(function* () {\n    const client = yield* HttpClient.HttpClient;\n    const response = yield* Effect.gen(function* () {\n      const url = new URL(\"/.well-known/salchi/environment\", input.baseUrl);\n      const request = HttpClientRequest.get(url.toString());\n      return yield* client.execute(request);\n    }).pipe(Effect.timeoutOption(input.timeoutMs ?? TAILSCALE_PROBE_TIMEOUT_MS));\n\n    return Option.match(response, {\n      onNone: () => false,\n      onSome: (httpResponse) => httpResponse.status >= 200 && httpResponse.status < 300,\n    });\n  }).pipe(Effect.catch(() => Effect.succeed(false)));\n\nexport const resolveTailscaleHttpsBaseUrl = (\n  input: {\n    readonly servePort?: number;\n  } = {},\n): Effect.Effect<\n  string | null,\n  TailscaleCommandError | TailscaleStatusParseError,\n  ChildProcessSpawner.ChildProcessSpawner\n> =>\n  readTailscaleStatus.pipe(\n    Effect.map((status) =>\n      status.magicDnsName\n        ? buildTailscaleHttpsBaseUrl({\n            magicDnsName: status.magicDnsName,\n            ...(input.servePort === undefined ? {} : { servePort: input.servePort }),\n          })\n        : null,\n    ),\n  );\n","import type {\n  AuthAccessTokenResult,\n  AuthBearerBootstrapResult,\n  AuthBrowserSessionResult,\n  AuthBootstrapResult,\n  AuthClientMetadata,\n  AuthClientSession,\n  AuthCreatePairingCredentialInput,\n  AuthEnvironmentScope,\n  AuthPairingLink,\n  AuthPairingCredentialResult,\n  AuthSessionId,\n  AuthSessionState,\n  ServerAuthDescriptor,\n  ServerAuthSessionMethod,\n  AuthWebSocketTicketResult,\n  AuthWebSocketTokenResult,\n} from \"@salchi/contracts\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as HttpServerRequest from \"effect/unstable/http/HttpServerRequest\";\nimport type { SessionRole } from \"./SessionCredentialService.ts\";\n\nexport interface AuthenticatedSession {\n  readonly sessionId: AuthSessionId;\n  readonly subject: string;\n  readonly method: ServerAuthSessionMethod;\n  readonly role: SessionRole;\n  readonly scopes: ReadonlySet<AuthEnvironmentScope>;\n  readonly expiresAt?: DateTime.DateTime;\n}\n\nexport class AuthError extends Data.TaggedError(\"AuthError\")<{\n  readonly message: string;\n  readonly status?: 400 | 401 | 403 | 500;\n  readonly cause?: unknown;\n}> {}\n\nexport interface ServerAuthShape {\n  readonly getDescriptor: () => Effect.Effect<ServerAuthDescriptor>;\n  readonly getSessionState: (\n    request: HttpServerRequest.HttpServerRequest,\n  ) => Effect.Effect<AuthSessionState, never>;\n  readonly exchangeBootstrapCredential: (\n    credential: string,\n    requestMetadata: AuthClientMetadata,\n  ) => Effect.Effect<\n    {\n      readonly response: AuthBootstrapResult;\n      readonly sessionToken: string;\n    },\n    AuthError\n  >;\n  readonly exchangeBootstrapCredentialForBrowserSession: (\n    credential: string,\n    requestMetadata: AuthClientMetadata,\n  ) => Effect.Effect<\n    {\n      readonly response: AuthBrowserSessionResult;\n      readonly sessionToken: string;\n    },\n    AuthError\n  >;\n  readonly exchangeBootstrapCredentialForBearerSession: (\n    credential: string,\n    requestMetadata: AuthClientMetadata,\n  ) => Effect.Effect<AuthBearerBootstrapResult, AuthError>;\n  readonly exchangeBootstrapCredentialForAccessToken: (\n    credential: string,\n    requestMetadata: AuthClientMetadata,\n    requestedScopes?: ReadonlyArray<AuthEnvironmentScope>,\n  ) => Effect.Effect<AuthAccessTokenResult, AuthError>;\n  readonly issuePairingCredential: (\n    input?: AuthCreatePairingCredentialInput & {\n      readonly role?: SessionRole;\n    },\n  ) => Effect.Effect<AuthPairingCredentialResult, AuthError>;\n  readonly listPairingLinks: () => Effect.Effect<ReadonlyArray<AuthPairingLink>, AuthError>;\n  readonly revokePairingLink: (id: string) => Effect.Effect<boolean, AuthError>;\n  readonly listClientSessions: (\n    currentSessionId: AuthSessionId,\n  ) => Effect.Effect<ReadonlyArray<AuthClientSession>, AuthError>;\n  readonly revokeClientSession: (\n    currentSessionId: AuthSessionId,\n    targetSessionId: AuthSessionId,\n  ) => Effect.Effect<boolean, AuthError>;\n  readonly revokeOtherClientSessions: (\n    currentSessionId: AuthSessionId,\n  ) => Effect.Effect<number, AuthError>;\n  readonly authenticateHttpRequest: (\n    request: HttpServerRequest.HttpServerRequest,\n  ) => Effect.Effect<AuthenticatedSession, AuthError>;\n  readonly authenticateWebSocketUpgrade: (\n    request: HttpServerRequest.HttpServerRequest,\n  ) => Effect.Effect<AuthenticatedSession, AuthError>;\n  readonly issueWebSocketToken: (\n    session: AuthenticatedSession,\n  ) => Effect.Effect<AuthWebSocketTokenResult, AuthError>;\n  readonly issueWebSocketTicket: (\n    session: AuthenticatedSession,\n  ) => Effect.Effect<AuthWebSocketTicketResult, AuthError>;\n  readonly issueStartupPairingUrl: (baseUrl: string) => Effect.Effect<string, AuthError>;\n}\n\nexport class ServerAuth extends Context.Service<ServerAuth, ServerAuthShape>()(\n  \"salchi/auth/Services/ServerAuth\",\n) {}\n","import { networkInterfaces } from \"node:os\";\n\nimport { QrCode } from \"@salchi/shared/qrCode\";\nimport { resolveTailscaleHttpsBaseUrl } from \"@salchi/tailscale\";\nimport * as Effect from \"effect/Effect\";\nimport { HttpServer } from \"effect/unstable/http\";\n\nimport { ServerConfig } from \"./config.ts\";\nimport { ServerAuth } from \"./auth/Services/ServerAuth.ts\";\n\nexport interface HeadlessServeAccessInfo {\n  readonly connectionString: string;\n  readonly token: string;\n  readonly pairingUrl: string;\n}\n\ntype NetworkInterfacesMap = ReturnType<typeof networkInterfaces>;\n\nexport const isLoopbackHost = (host: string | undefined): boolean => {\n  if (!host || host.length === 0) {\n    return true;\n  }\n\n  return (\n    host === \"localhost\" ||\n    host === \"127.0.0.1\" ||\n    host === \"::1\" ||\n    host === \"[::1]\" ||\n    host.startsWith(\"127.\")\n  );\n};\n\nexport const isWildcardHost = (host: string | undefined): boolean =>\n  host === \"0.0.0.0\" || host === \"::\" || host === \"[::]\";\n\nexport const formatHostForUrl = (host: string): string =>\n  host.includes(\":\") && !host.startsWith(\"[\") ? `[${host}]` : host;\n\nconst normalizeHost = (host: string): string =>\n  host.startsWith(\"[\") && host.endsWith(\"]\") ? host.slice(1, -1) : host;\n\nconst isIpv4Family = (family: string | number): boolean => family === \"IPv4\" || family === 4;\n\nconst isIpv6Family = (family: string | number): boolean => family === \"IPv6\" || family === 6;\n\nexport const resolveHeadlessConnectionHost = (\n  host: string | undefined,\n  interfaces: NetworkInterfacesMap = networkInterfaces(),\n): string => {\n  if (!host) {\n    return \"localhost\";\n  }\n\n  if (!isWildcardHost(host)) {\n    return normalizeHost(host);\n  }\n\n  const interfaceEntries = Object.values(interfaces).flatMap((entries) => entries ?? []);\n  const externalIpv4 = interfaceEntries.find(\n    (entry) => !entry.internal && isIpv4Family(entry.family),\n  );\n  if (externalIpv4) {\n    return externalIpv4.address;\n  }\n\n  const externalIpv6 = interfaceEntries.find(\n    (entry) => !entry.internal && isIpv6Family(entry.family),\n  );\n  return externalIpv6 ? normalizeHost(externalIpv6.address) : \"localhost\";\n};\n\nexport const resolveHeadlessConnectionString = (\n  host: string | undefined,\n  port: number,\n  interfaces: NetworkInterfacesMap = networkInterfaces(),\n): string => {\n  const connectionHost = resolveHeadlessConnectionHost(host, interfaces);\n  return `http://${formatHostForUrl(connectionHost)}:${port}`;\n};\n\nexport const resolveListeningPort = (address: unknown, fallbackPort: number): number => {\n  if (\n    typeof address === \"object\" &&\n    address !== null &&\n    \"port\" in address &&\n    typeof address.port === \"number\"\n  ) {\n    return address.port;\n  }\n  return fallbackPort;\n};\n\nexport const buildPairingUrl = (connectionString: string, token: string): string => {\n  const url = new URL(connectionString);\n  url.pathname = \"/pair\";\n  url.searchParams.delete(\"token\");\n  url.hash = new URLSearchParams([[\"token\", token]]).toString();\n  return url.toString();\n};\n\nexport const renderTerminalQrCode = (value: string, margin = 2): string => {\n  const qrCode = QrCode.encodeText(value, QrCode.Ecc.MEDIUM);\n  const rows: Array<string> = [];\n  const isDark = (x: number, y: number): boolean =>\n    x >= 0 && x < qrCode.size && y >= 0 && y < qrCode.size && qrCode.getModule(x, y);\n\n  for (let y = -margin; y < qrCode.size + margin; y += 2) {\n    let row = \"\";\n\n    for (let x = -margin; x < qrCode.size + margin; x += 1) {\n      const topDark = isDark(x, y);\n      const bottomDark = isDark(x, y + 1);\n\n      row += topDark ? (bottomDark ? \"█\" : \"▀\") : bottomDark ? \"▄\" : \" \";\n    }\n\n    rows.push(row);\n  }\n\n  return rows.join(\"\\n\");\n};\n\nexport const formatHeadlessServeOutput = (accessInfo: HeadlessServeAccessInfo): string =>\n  [\n    \"Salchi server is ready.\",\n    `Connection string: ${accessInfo.connectionString}`,\n    `Token: ${accessInfo.token}`,\n    `Pairing URL: ${accessInfo.pairingUrl}`,\n    \"\",\n    renderTerminalQrCode(accessInfo.pairingUrl),\n    \"\",\n  ].join(\"\\n\");\n\nexport const formatBrowserStartupOutput = (pairingUrl: string): string =>\n  [\"Salchi server is ready.\", `Pairing URL: ${pairingUrl}`, \"\"].join(\"\\n\");\n\nexport const issueHeadlessServeAccessInfo = Effect.fn(\"issueHeadlessServeAccessInfo\")(function* () {\n  const serverConfig = yield* ServerConfig;\n  const httpServer = yield* HttpServer.HttpServer;\n  const serverAuth = yield* ServerAuth;\n  const fallbackConnectionString = resolveHeadlessConnectionString(\n    serverConfig.host,\n    resolveListeningPort(httpServer.address, serverConfig.port),\n  );\n  const connectionString = serverConfig.tailscaleServeEnabled\n    ? yield* resolveTailscaleHttpsBaseUrl({ servePort: serverConfig.tailscaleServePort }).pipe(\n        Effect.catch((cause) =>\n          Effect.logWarning(\"failed to resolve Tailscale MagicDNS pairing URL\", { cause }).pipe(\n            Effect.as(null),\n          ),\n        ),\n        Effect.map((tailscaleUrl) => tailscaleUrl ?? fallbackConnectionString),\n      )\n    : fallbackConnectionString;\n  const issued = yield* serverAuth.issuePairingCredential({ role: \"owner\" });\n\n  return {\n    connectionString,\n    token: issued.credential,\n    pairingUrl: buildPairingUrl(connectionString, issued.credential),\n  } satisfies HeadlessServeAccessInfo;\n});\n","import * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport { writeFileStringAtomically } from \"./atomicWrite.ts\";\nimport { type ServerConfigShape } from \"./config.ts\";\nimport { formatHostForUrl, isWildcardHost } from \"./startupAccess.ts\";\n\nexport const PersistedServerRuntimeState = Schema.Struct({\n  version: Schema.Literal(1),\n  pid: Schema.Int,\n  host: Schema.optional(Schema.String),\n  port: Schema.Int,\n  origin: Schema.String,\n  startedAt: Schema.String,\n});\nexport type PersistedServerRuntimeState = typeof PersistedServerRuntimeState.Type;\n\nconst decodePersistedServerRuntimeState = Schema.decodeUnknownEffect(\n  Schema.fromJsonString(PersistedServerRuntimeState),\n);\n\nconst runtimeOriginForConfig = (\n  config: Pick<ServerConfigShape, \"host\">,\n  port: number,\n): PersistedServerRuntimeState[\"origin\"] => {\n  const hostname =\n    config.host && !isWildcardHost(config.host) ? formatHostForUrl(config.host) : \"127.0.0.1\";\n  return `http://${hostname}:${port}`;\n};\n\nexport const makePersistedServerRuntimeState = (input: {\n  readonly config: Pick<ServerConfigShape, \"host\">;\n  readonly port: number;\n}): Effect.Effect<PersistedServerRuntimeState> =>\n  Effect.map(DateTime.now, (now) => ({\n    version: 1,\n    pid: process.pid,\n    ...(input.config.host ? { host: input.config.host } : {}),\n    port: input.port,\n    origin: runtimeOriginForConfig(input.config, input.port),\n    startedAt: DateTime.formatIso(now),\n  }));\n\nexport const persistServerRuntimeState = (input: {\n  readonly path: string;\n  readonly state: PersistedServerRuntimeState;\n}) =>\n  writeFileStringAtomically({\n    filePath: input.path,\n    contents: `${JSON.stringify(input.state)}\\n`,\n  });\n\nexport const clearPersistedServerRuntimeState = (path: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    yield* fs.remove(path, { force: true }).pipe(Effect.ignore({ log: true }));\n  });\n\nexport const readPersistedServerRuntimeState = (path: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const exists = yield* fs.exists(path).pipe(Effect.orElseSucceed(() => false));\n    if (!exists) {\n      return Option.none<PersistedServerRuntimeState>();\n    }\n\n    const raw = yield* fs.readFileString(path).pipe(Effect.orElseSucceed(() => \"\"));\n    const trimmed = raw.trim();\n    if (trimmed.length === 0) {\n      return Option.none<PersistedServerRuntimeState>();\n    }\n\n    return yield* decodePersistedServerRuntimeState(trimmed).pipe(Effect.option);\n  });\n","/**\n * WorkspacePaths - Effect service contract for workspace path handling.\n *\n * Owns normalization and validation of workspace roots plus safe resolution of\n * workspace-root-relative paths.\n *\n * @module WorkspacePaths\n */\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport class WorkspaceRootNotExistsError extends Schema.TaggedErrorClass<WorkspaceRootNotExistsError>()(\n  \"WorkspaceRootNotExistsError\",\n  {\n    workspaceRoot: Schema.String,\n    normalizedWorkspaceRoot: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Workspace root does not exist: ${this.normalizedWorkspaceRoot}`;\n  }\n}\n\nexport class WorkspaceRootCreateFailedError extends Schema.TaggedErrorClass<WorkspaceRootCreateFailedError>()(\n  \"WorkspaceRootCreateFailedError\",\n  {\n    workspaceRoot: Schema.String,\n    normalizedWorkspaceRoot: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Failed to create workspace root: ${this.normalizedWorkspaceRoot}`;\n  }\n}\n\nexport class WorkspaceRootNotDirectoryError extends Schema.TaggedErrorClass<WorkspaceRootNotDirectoryError>()(\n  \"WorkspaceRootNotDirectoryError\",\n  {\n    workspaceRoot: Schema.String,\n    normalizedWorkspaceRoot: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Workspace root is not a directory: ${this.normalizedWorkspaceRoot}`;\n  }\n}\n\nexport class WorkspacePathOutsideRootError extends Schema.TaggedErrorClass<WorkspacePathOutsideRootError>()(\n  \"WorkspacePathOutsideRootError\",\n  {\n    workspaceRoot: Schema.String,\n    relativePath: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Workspace file path must be relative to the project root: ${this.relativePath}`;\n  }\n}\n\nexport const WorkspacePathsError = Schema.Union([\n  WorkspaceRootNotExistsError,\n  WorkspaceRootCreateFailedError,\n  WorkspaceRootNotDirectoryError,\n  WorkspacePathOutsideRootError,\n]);\nexport type WorkspacePathsError = typeof WorkspacePathsError.Type;\n\n/**\n * WorkspacePathsShape - Service API for workspace path normalization and guards.\n */\nexport interface WorkspacePathsShape {\n  /**\n   * Normalize a user-provided workspace root and verify it exists as a directory.\n   */\n  readonly normalizeWorkspaceRoot: (\n    workspaceRoot: string,\n    options?: { readonly createIfMissing?: boolean },\n  ) => Effect.Effect<\n    string,\n    WorkspaceRootNotExistsError | WorkspaceRootCreateFailedError | WorkspaceRootNotDirectoryError\n  >;\n\n  /**\n   * Resolve a relative path within a validated workspace root.\n   *\n   * Rejects absolute paths and traversal attempts outside the workspace root.\n   */\n  readonly resolveRelativePathWithinRoot: (input: {\n    workspaceRoot: string;\n    relativePath: string;\n  }) => Effect.Effect<\n    { absolutePath: string; relativePath: string },\n    WorkspacePathOutsideRootError\n  >;\n}\n\n/**\n * WorkspacePaths - Service tag for workspace path normalization and resolution.\n */\nexport class WorkspacePaths extends Context.Service<WorkspacePaths, WorkspacePathsShape>()(\n  \"salchi/workspace/Services/WorkspacePaths\",\n) {}\n","import * as OS from \"node:os\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\n\nimport {\n  WorkspacePaths,\n  WorkspacePathOutsideRootError,\n  WorkspaceRootCreateFailedError,\n  WorkspaceRootNotDirectoryError,\n  WorkspaceRootNotExistsError,\n  type WorkspacePathsShape,\n} from \"../Services/WorkspacePaths.ts\";\n\nfunction toPosixRelativePath(input: string): string {\n  return input.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction expandHomePath(input: string, path: Path.Path): string {\n  if (input === \"~\") {\n    return OS.homedir();\n  }\n  if (input.startsWith(\"~/\") || input.startsWith(\"~\\\\\")) {\n    return path.join(OS.homedir(), input.slice(2));\n  }\n  return input;\n}\n\nexport const makeWorkspacePaths = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  const normalizeWorkspaceRoot: WorkspacePathsShape[\"normalizeWorkspaceRoot\"] = Effect.fn(\n    \"WorkspacePaths.normalizeWorkspaceRoot\",\n  )(function* (workspaceRoot, options) {\n    const normalizedWorkspaceRoot = path.resolve(expandHomePath(workspaceRoot.trim(), path));\n    let workspaceStat = yield* fileSystem\n      .stat(normalizedWorkspaceRoot)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!workspaceStat && options?.createIfMissing) {\n      yield* fileSystem.makeDirectory(normalizedWorkspaceRoot, { recursive: true }).pipe(\n        Effect.mapError(\n          () =>\n            new WorkspaceRootCreateFailedError({\n              workspaceRoot,\n              normalizedWorkspaceRoot,\n            }),\n        ),\n      );\n      workspaceStat = yield* fileSystem\n        .stat(normalizedWorkspaceRoot)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n    }\n    if (!workspaceStat) {\n      return yield* new WorkspaceRootNotExistsError({\n        workspaceRoot,\n        normalizedWorkspaceRoot,\n      });\n    }\n    if (workspaceStat.type !== \"Directory\") {\n      return yield* new WorkspaceRootNotDirectoryError({\n        workspaceRoot,\n        normalizedWorkspaceRoot,\n      });\n    }\n    return normalizedWorkspaceRoot;\n  });\n\n  const resolveRelativePathWithinRoot: WorkspacePathsShape[\"resolveRelativePathWithinRoot\"] =\n    Effect.fn(\"WorkspacePaths.resolveRelativePathWithinRoot\")(function* (input) {\n      const normalizedInputPath = input.relativePath.trim();\n      if (path.isAbsolute(normalizedInputPath)) {\n        return yield* new WorkspacePathOutsideRootError({\n          workspaceRoot: input.workspaceRoot,\n          relativePath: input.relativePath,\n        });\n      }\n\n      const absolutePath = path.resolve(input.workspaceRoot, normalizedInputPath);\n      const relativeToRoot = toPosixRelativePath(path.relative(input.workspaceRoot, absolutePath));\n      if (\n        relativeToRoot.length === 0 ||\n        relativeToRoot === \".\" ||\n        relativeToRoot.startsWith(\"../\") ||\n        relativeToRoot === \"..\" ||\n        path.isAbsolute(relativeToRoot)\n      ) {\n        return yield* new WorkspacePathOutsideRootError({\n          workspaceRoot: input.workspaceRoot,\n          relativePath: input.relativePath,\n        });\n      }\n\n      return {\n        absolutePath,\n        relativePath: relativeToRoot,\n      };\n    });\n\n  return {\n    normalizeWorkspaceRoot,\n    resolveRelativePathWithinRoot,\n  } satisfies WorkspacePathsShape;\n});\n\nexport const WorkspacePathsLive = Layer.effect(WorkspacePaths, makeWorkspacePaths);\n","import {\n  CommandId,\n  OrchestrationReadModel,\n  ProjectId,\n  type ClientOrchestrationCommand,\n} from \"@salchi/contracts\";\nimport * as Console from \"effect/Console\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as References from \"effect/References\";\nimport * as Schema from \"effect/Schema\";\nimport { Argument, Command, Flag, GlobalFlag } from \"effect/unstable/cli\";\nimport {\n  FetchHttpClient,\n  HttpClient,\n  HttpClientRequest,\n  HttpClientResponse,\n} from \"effect/unstable/http\";\n\nimport { AuthControlPlaneRuntimeLive } from \"../auth/Layers/AuthControlPlane.ts\";\nimport { AuthControlPlane } from \"../auth/Services/AuthControlPlane.ts\";\nimport type { AuthControlPlaneShape } from \"../auth/Services/AuthControlPlane.ts\";\nimport { ServerConfig, type ServerConfigShape } from \"../config.ts\";\nimport { OrchestrationEngineService } from \"../orchestration/Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"../orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport { OrchestrationLayerLive } from \"../orchestration/runtimeLayer.ts\";\nimport { layerConfig as SqlitePersistenceLayerLive } from \"../persistence/Layers/Sqlite.ts\";\nimport { RepositoryIdentityResolverLive } from \"../project/Layers/RepositoryIdentityResolver.ts\";\nimport {\n  clearPersistedServerRuntimeState,\n  readPersistedServerRuntimeState,\n} from \"../serverRuntimeState.ts\";\nimport { WorkspacePathsLive } from \"../workspace/Layers/WorkspacePaths.ts\";\nimport { WorkspacePaths } from \"../workspace/Services/WorkspacePaths.ts\";\nimport { type CliAuthLocationFlags, projectLocationFlags, resolveCliAuthConfig } from \"./config.ts\";\n\ntype ProjectMutationTarget = {\n  readonly id: ProjectId;\n  readonly title: string;\n  readonly workspaceRoot: string;\n};\n\ntype ProjectCommandExecutionMode = \"live\" | \"offline\";\ntype ProjectCliDispatchCommand = Extract<\n  ClientOrchestrationCommand,\n  { type: \"project.create\" | \"project.meta.update\" | \"project.delete\" }\n>;\n\nclass ProjectCommandError extends Data.TaggedError(\"ProjectCommandError\")<{\n  readonly message: string;\n}> {}\n\nconst projectCommandUuid = Crypto.Crypto.pipe(\n  Effect.flatMap((crypto) => crypto.randomUUIDv4),\n  Effect.mapError(\n    () =>\n      new ProjectCommandError({\n        message: \"Failed to generate a project command identifier.\",\n      }),\n  ),\n);\n\nconst ProjectCliRuntimeLive = Layer.mergeAll(\n  WorkspacePathsLive,\n  OrchestrationLayerLive.pipe(\n    Layer.provideMerge(RepositoryIdentityResolverLive),\n    Layer.provideMerge(SqlitePersistenceLayerLive),\n  ),\n);\n\nconst PROJECT_CLI_LIVE_SERVER_TIMEOUT = Duration.seconds(1);\nconst OrchestrationHttpErrorResponse = Schema.Struct({\n  error: Schema.String,\n});\n\nconst withProjectCliSessionToken = <A, E, R>(\n  authControlPlane: AuthControlPlaneShape,\n  run: (token: string) => Effect.Effect<A, E, R>,\n) =>\n  Effect.acquireUseRelease(\n    authControlPlane.issueSession({\n      role: \"owner\",\n      label: \"salchi project cli\",\n    }),\n    (issued) => run(issued.token),\n    (issued) => authControlPlane.revokeSession(issued.sessionId).pipe(Effect.ignore({ log: true })),\n  );\n\nconst withProjectCliLiveServerTimeout = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n  effect.pipe(Effect.timeout(PROJECT_CLI_LIVE_SERVER_TIMEOUT));\n\nconst runLiveServerRequest = <A, E extends Error, R>(\n  request: HttpClientRequest.HttpClientRequest,\n  handle: (response: HttpClientResponse.HttpClientResponse) => Effect.Effect<A, E, R>,\n) =>\n  Effect.gen(function* () {\n    const httpClient = yield* HttpClient.HttpClient;\n    const response = yield* httpClient.execute(request);\n    return yield* handle(response);\n  }).pipe(withProjectCliLiveServerTimeout);\n\nconst decodeOrchestrationReadModelResponse = (response: HttpClientResponse.HttpClientResponse) =>\n  HttpClientResponse.schemaBodyJson(OrchestrationReadModel)(response);\n\nconst readErrorMessageFromResponse = (response: HttpClientResponse.HttpClientResponse) =>\n  HttpClientResponse.schemaBodyJson(OrchestrationHttpErrorResponse)(response).pipe(\n    Effect.map((body) => body.error),\n    Effect.catch(() => Effect.succeed(null)),\n    Effect.map((body) => {\n      if (typeof body === \"string\" && body.trim().length > 0) {\n        return body;\n      }\n      return `Server request failed with status ${response.status}.`;\n    }),\n  );\n\nconst normalizeWorkspaceRootForProjectCommand = Effect.fn(\n  \"normalizeWorkspaceRootForProjectCommand\",\n)(function* (workspaceRoot: string) {\n  const workspacePaths = yield* WorkspacePaths;\n  return yield* workspacePaths.normalizeWorkspaceRoot(workspaceRoot);\n});\n\nconst resolveProjectTitle = Effect.fn(\"resolveProjectTitle\")(function* (\n  workspaceRoot: string,\n  explicitTitle?: string,\n) {\n  if (explicitTitle !== undefined) {\n    const trimmed = explicitTitle.trim();\n    if (trimmed.length > 0) {\n      return trimmed;\n    }\n    return yield* new ProjectCommandError({ message: \"Project title cannot be empty.\" });\n  }\n\n  const path = yield* Path.Path;\n  const basename = path.basename(workspaceRoot).trim();\n  return basename.length > 0 ? basename : \"project\";\n});\n\nconst findActiveProjectTarget = Effect.fn(\"findActiveProjectTarget\")(function* (input: {\n  readonly snapshot: OrchestrationReadModel;\n  readonly identifier: string;\n}) {\n  const trimmedIdentifier = input.identifier.trim();\n  if (trimmedIdentifier.length === 0) {\n    return yield* new ProjectCommandError({ message: \"Project identifier cannot be empty.\" });\n  }\n\n  const activeProjects = input.snapshot.projects.filter((project) => project.deletedAt === null);\n  const exactIdMatch = activeProjects.find((project) => project.id === trimmedIdentifier);\n  if (exactIdMatch) {\n    return {\n      id: exactIdMatch.id,\n      title: exactIdMatch.title,\n      workspaceRoot: exactIdMatch.workspaceRoot,\n    } satisfies ProjectMutationTarget;\n  }\n\n  const normalizedWorkspaceRootResult = yield* Effect.exit(\n    normalizeWorkspaceRootForProjectCommand(trimmedIdentifier),\n  );\n  const normalizedWorkspaceRoot = Exit.isSuccess(normalizedWorkspaceRootResult)\n    ? normalizedWorkspaceRootResult.value\n    : null;\n\n  const exactWorkspaceMatch =\n    normalizedWorkspaceRoot === null\n      ? undefined\n      : activeProjects.find((project) => project.workspaceRoot === normalizedWorkspaceRoot);\n\n  const resolved = exactWorkspaceMatch;\n  if (!resolved) {\n    return yield* new ProjectCommandError({\n      message: `No active project found for '${trimmedIdentifier}'.`,\n    });\n  }\n\n  return {\n    id: resolved.id,\n    title: resolved.title,\n    workspaceRoot: resolved.workspaceRoot,\n  } satisfies ProjectMutationTarget;\n});\n\nconst fetchLiveOrchestrationSnapshot = (origin: string, bearerToken: string) =>\n  runLiveServerRequest(\n    HttpClientRequest.get(`${origin}/api/orchestration/snapshot`).pipe(\n      HttpClientRequest.acceptJson,\n      HttpClientRequest.bearerToken(bearerToken),\n    ),\n    HttpClientResponse.matchStatus({\n      \"2xx\": decodeOrchestrationReadModelResponse,\n      orElse: (response) =>\n        readErrorMessageFromResponse(response).pipe(\n          Effect.flatMap((message) => Effect.fail(new ProjectCommandError({ message }))),\n        ),\n    }),\n  );\n\nconst dispatchLiveOrchestrationCommand = (\n  origin: string,\n  bearerToken: string,\n  command: ProjectCliDispatchCommand,\n) =>\n  HttpClientRequest.post(`${origin}/api/orchestration/dispatch`).pipe(\n    HttpClientRequest.acceptJson,\n    HttpClientRequest.bearerToken(bearerToken),\n    HttpClientRequest.bodyJson(command),\n    Effect.flatMap((request) =>\n      runLiveServerRequest(\n        request,\n        HttpClientResponse.matchStatus({\n          \"2xx\": () => Effect.void,\n          orElse: (response) =>\n            readErrorMessageFromResponse(response).pipe(\n              Effect.flatMap((message) => Effect.fail(new ProjectCommandError({ message }))),\n            ),\n        }),\n      ),\n    ),\n  );\n\nconst getOfflineSnapshot = Effect.fn(\"getOfflineSnapshot\")(function* () {\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  return yield* projectionSnapshotQuery.getSnapshot();\n});\n\nconst tryResolveLiveProjectExecutionMode = Effect.fn(\"tryResolveLiveProjectExecutionMode\")(\n  function* (authControlPlane: AuthControlPlaneShape, config: ServerConfigShape) {\n    const runtimeState = yield* readPersistedServerRuntimeState(config.serverRuntimeStatePath);\n    if (Option.isNone(runtimeState)) {\n      return Option.none<{ readonly origin: string }>();\n    }\n\n    const attempt = withProjectCliSessionToken(authControlPlane, (token) =>\n      fetchLiveOrchestrationSnapshot(runtimeState.value.origin, token).pipe(\n        Effect.as({\n          origin: runtimeState.value.origin,\n        }),\n      ),\n    );\n\n    const attempted = yield* Effect.exit(attempt);\n    if (Exit.isSuccess(attempted)) {\n      return Option.some(attempted.value);\n    }\n\n    yield* clearPersistedServerRuntimeState(config.serverRuntimeStatePath);\n    return Option.none<{ readonly origin: string }>();\n  },\n);\n\nconst runProjectMutation = Effect.fn(\"runProjectMutation\")(function* (\n  flags: CliAuthLocationFlags,\n  run: (input: {\n    readonly snapshot: OrchestrationReadModel;\n    readonly dispatch: (\n      command: ProjectCliDispatchCommand,\n    ) => Effect.Effect<void, Error, FileSystem.FileSystem | HttpClient.HttpClient | Path.Path>;\n    readonly mode: ProjectCommandExecutionMode;\n  }) => Effect.Effect<\n    string,\n    Error,\n    Crypto.Crypto | FileSystem.FileSystem | HttpClient.HttpClient | Path.Path | WorkspacePaths\n  >,\n) {\n  const logLevel = yield* GlobalFlag.LogLevel;\n  const config = yield* resolveCliAuthConfig(flags, logLevel);\n  const minimumLogLevel = config.logLevel;\n\n  return yield* Effect.gen(function* () {\n    const authControlPlane = yield* AuthControlPlane;\n    const liveMode = yield* tryResolveLiveProjectExecutionMode(authControlPlane, config);\n\n    if (Option.isSome(liveMode)) {\n      return yield* withProjectCliSessionToken(authControlPlane, (token) =>\n        Effect.gen(function* () {\n          const snapshot = yield* fetchLiveOrchestrationSnapshot(liveMode.value.origin, token);\n          const output = yield* run({\n            snapshot,\n            dispatch: (command) =>\n              dispatchLiveOrchestrationCommand(liveMode.value.origin, token, command),\n            mode: \"live\",\n          });\n          yield* Console.log(output);\n        }),\n      );\n    }\n\n    const offlineRuntimeLayer = ProjectCliRuntimeLive.pipe(\n      Layer.provide(Layer.succeed(ServerConfig, config)),\n      Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)),\n    );\n\n    return yield* Effect.gen(function* () {\n      const snapshot = yield* getOfflineSnapshot();\n      const orchestrationEngine = yield* OrchestrationEngineService;\n      const output = yield* run({\n        snapshot,\n        dispatch: (command) => orchestrationEngine.dispatch(command),\n        mode: \"offline\",\n      });\n      yield* Console.log(output);\n    }).pipe(Effect.provide(offlineRuntimeLayer));\n  }).pipe(\n    Effect.provide(\n      Layer.mergeAll(AuthControlPlaneRuntimeLive, WorkspacePathsLive).pipe(\n        Layer.provideMerge(FetchHttpClient.layer),\n        Layer.provide(Layer.succeed(ServerConfig, config)),\n        Layer.provide(Layer.succeed(References.MinimumLogLevel, minimumLogLevel)),\n      ),\n    ),\n  );\n});\n\nconst projectAddCommand = Command.make(\"add\", {\n  ...projectLocationFlags,\n  workspaceRoot: Argument.string(\"path\").pipe(\n    Argument.withDescription(\"Workspace root to add as a project.\"),\n  ),\n  title: Flag.string(\"title\").pipe(Flag.withDescription(\"Optional project title.\"), Flag.optional),\n}).pipe(\n  Command.withDescription(\"Add a project.\"),\n  Command.withHandler((flags) =>\n    runProjectMutation(\n      flags,\n      Effect.fn(\"projectAddMutation\")(function* ({\n        snapshot,\n        dispatch,\n      }: {\n        readonly snapshot: OrchestrationReadModel;\n        readonly dispatch: (\n          command: ProjectCliDispatchCommand,\n        ) => Effect.Effect<void, Error, FileSystem.FileSystem | HttpClient.HttpClient | Path.Path>;\n      }) {\n        const workspaceRoot = yield* normalizeWorkspaceRootForProjectCommand(flags.workspaceRoot);\n        const existingProject = snapshot.projects.find(\n          (project) => project.deletedAt === null && project.workspaceRoot === workspaceRoot,\n        );\n        if (existingProject) {\n          return yield* new ProjectCommandError({\n            message: `An active project already exists for '${workspaceRoot}'.`,\n          });\n        }\n\n        const title = yield* resolveProjectTitle(workspaceRoot, Option.getOrUndefined(flags.title));\n        const projectId = ProjectId.make(yield* projectCommandUuid);\n        yield* dispatch({\n          type: \"project.create\",\n          commandId: CommandId.make(yield* projectCommandUuid),\n          projectId,\n          title,\n          workspaceRoot,\n          defaultModelSelection: null,\n          createdAt: DateTime.formatIso(yield* DateTime.now),\n        });\n        return `Added project ${projectId} (${title}) at ${workspaceRoot}.`;\n      }),\n    ),\n  ),\n);\n\nconst projectRemoveCommand = Command.make(\"remove\", {\n  ...projectLocationFlags,\n  project: Argument.string(\"project\").pipe(\n    Argument.withDescription(\"Project id or workspace root to remove.\"),\n  ),\n}).pipe(\n  Command.withDescription(\"Remove a project.\"),\n  Command.withHandler((flags) =>\n    runProjectMutation(\n      flags,\n      Effect.fn(\"projectRemoveMutation\")(function* ({\n        snapshot,\n        dispatch,\n      }: {\n        readonly snapshot: OrchestrationReadModel;\n        readonly dispatch: (\n          command: ProjectCliDispatchCommand,\n        ) => Effect.Effect<void, Error, FileSystem.FileSystem | HttpClient.HttpClient | Path.Path>;\n      }) {\n        const project = yield* findActiveProjectTarget({\n          snapshot,\n          identifier: flags.project,\n        });\n        yield* dispatch({\n          type: \"project.delete\",\n          commandId: CommandId.make(yield* projectCommandUuid),\n          projectId: project.id,\n        });\n        return `Removed project ${project.id} (${project.title}).`;\n      }),\n    ),\n  ),\n);\n\nconst projectRenameCommand = Command.make(\"rename\", {\n  ...projectLocationFlags,\n  project: Argument.string(\"project\").pipe(\n    Argument.withDescription(\"Project id or workspace root to rename.\"),\n  ),\n  title: Argument.string(\"title\").pipe(Argument.withDescription(\"New project title.\")),\n}).pipe(\n  Command.withDescription(\"Rename a project.\"),\n  Command.withHandler((flags) =>\n    runProjectMutation(\n      flags,\n      Effect.fn(\"projectRenameMutation\")(function* ({\n        snapshot,\n        dispatch,\n      }: {\n        readonly snapshot: OrchestrationReadModel;\n        readonly dispatch: (\n          command: ProjectCliDispatchCommand,\n        ) => Effect.Effect<void, Error, FileSystem.FileSystem | HttpClient.HttpClient | Path.Path>;\n      }) {\n        const project = yield* findActiveProjectTarget({\n          snapshot,\n          identifier: flags.project,\n        });\n        const nextTitle = yield* resolveProjectTitle(project.workspaceRoot, flags.title);\n        if (nextTitle === project.title) {\n          return `Project ${project.id} is already named ${nextTitle}.`;\n        }\n\n        yield* dispatch({\n          type: \"project.meta.update\",\n          commandId: CommandId.make(yield* projectCommandUuid),\n          projectId: project.id,\n          title: nextTitle,\n        });\n        return `Renamed project ${project.id} to ${nextTitle}.`;\n      }),\n    ),\n  ),\n);\n\nexport const projectCommand = Command.make(\"project\").pipe(\n  Command.withDescription(\"Manage projects.\"),\n  Command.withSubcommands([projectAddCommand, projectRemoveCommand, projectRenameCommand]),\n);\n","// @effect-diagnostics nodeBuiltinImport:off\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface RotatingFileSinkOptions {\n  readonly filePath: string;\n  readonly maxBytes: number;\n  readonly maxFiles: number;\n  readonly throwOnError?: boolean;\n}\n\nexport class RotatingFileSink {\n  private readonly filePath: string;\n  private readonly maxBytes: number;\n  private readonly maxFiles: number;\n  private readonly throwOnError: boolean;\n  private currentSize = 0;\n\n  constructor(options: RotatingFileSinkOptions) {\n    if (options.maxBytes < 1) {\n      throw new Error(`maxBytes must be >= 1 (received ${options.maxBytes})`);\n    }\n    if (options.maxFiles < 1) {\n      throw new Error(`maxFiles must be >= 1 (received ${options.maxFiles})`);\n    }\n\n    this.filePath = options.filePath;\n    this.maxBytes = options.maxBytes;\n    this.maxFiles = options.maxFiles;\n    this.throwOnError = options.throwOnError ?? false;\n\n    fs.mkdirSync(path.dirname(this.filePath), { recursive: true });\n    this.pruneOverflowBackups();\n    this.currentSize = this.readCurrentSize();\n  }\n\n  write(chunk: string | Buffer): void {\n    const buffer = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\n    if (buffer.length === 0) return;\n\n    try {\n      if (this.currentSize > 0 && this.currentSize + buffer.length > this.maxBytes) {\n        this.rotate();\n      }\n\n      fs.appendFileSync(this.filePath, buffer);\n      this.currentSize += buffer.length;\n\n      if (this.currentSize > this.maxBytes) {\n        this.rotate();\n      }\n    } catch {\n      this.currentSize = this.readCurrentSize();\n      if (this.throwOnError) {\n        throw new Error(`Failed to write log chunk to ${this.filePath}`);\n      }\n    }\n  }\n\n  private rotate(): void {\n    try {\n      const oldest = this.withSuffix(this.maxFiles);\n      if (fs.existsSync(oldest)) {\n        fs.rmSync(oldest, { force: true });\n      }\n\n      for (let index = this.maxFiles - 1; index >= 1; index -= 1) {\n        const source = this.withSuffix(index);\n        const target = this.withSuffix(index + 1);\n        if (fs.existsSync(source)) {\n          fs.renameSync(source, target);\n        }\n      }\n\n      if (fs.existsSync(this.filePath)) {\n        fs.renameSync(this.filePath, this.withSuffix(1));\n      }\n\n      this.currentSize = 0;\n    } catch {\n      this.currentSize = this.readCurrentSize();\n      if (this.throwOnError) {\n        throw new Error(`Failed to rotate log file ${this.filePath}`);\n      }\n    }\n  }\n\n  private pruneOverflowBackups(): void {\n    try {\n      const dir = path.dirname(this.filePath);\n      const baseName = path.basename(this.filePath);\n      for (const entry of fs.readdirSync(dir)) {\n        if (!entry.startsWith(`${baseName}.`)) continue;\n        const suffix = Number(entry.slice(baseName.length + 1));\n        if (!Number.isInteger(suffix) || suffix <= this.maxFiles) continue;\n        fs.rmSync(path.join(dir, entry), { force: true });\n      }\n    } catch {\n      if (this.throwOnError) {\n        throw new Error(`Failed to prune log backups for ${this.filePath}`);\n      }\n    }\n  }\n\n  private readCurrentSize(): number {\n    try {\n      return fs.statSync(this.filePath).size;\n    } catch {\n      return 0;\n    }\n  }\n\n  private withSuffix(index: number): string {\n    return `${this.filePath}.${index}`;\n  }\n}\n","import * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport type * as Exit from \"effect/Exit\";\nimport * as ExitRuntime from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Tracer from \"effect/Tracer\";\nimport { OtlpResource, OtlpTracer } from \"effect/unstable/observability\";\n\nimport { RotatingFileSink } from \"./logging.ts\";\n\nconst FLUSH_BUFFER_THRESHOLD = 32;\n\nexport type TraceAttributes = Readonly<Record<string, unknown>>;\n\nexport interface TraceRecordEvent {\n  readonly name: string;\n  readonly timeUnixNano: string;\n  readonly attributes: Readonly<Record<string, unknown>>;\n}\n\nexport interface TraceRecordLink {\n  readonly traceId: string;\n  readonly spanId: string;\n  readonly attributes: Readonly<Record<string, unknown>>;\n}\n\ninterface BaseTraceRecord {\n  readonly name: string;\n  readonly kind: string;\n  readonly traceId: string;\n  readonly spanId: string;\n  readonly parentSpanId?: string;\n  readonly sampled: boolean;\n  readonly startTimeUnixNano: string;\n  readonly endTimeUnixNano: string;\n  readonly durationMs: number;\n  readonly attributes: Readonly<Record<string, unknown>>;\n  readonly events: ReadonlyArray<TraceRecordEvent>;\n  readonly links: ReadonlyArray<TraceRecordLink>;\n}\n\nexport interface EffectTraceRecord extends BaseTraceRecord {\n  readonly type: \"effect-span\";\n  readonly exit:\n    | {\n        readonly _tag: \"Success\";\n      }\n    | {\n        readonly _tag: \"Interrupted\";\n        readonly cause: string;\n      }\n    | {\n        readonly _tag: \"Failure\";\n        readonly cause: string;\n      };\n}\n\nexport interface OtlpTraceRecord extends BaseTraceRecord {\n  readonly type: \"otlp-span\";\n  readonly resourceAttributes: Readonly<Record<string, unknown>>;\n  readonly scope: Readonly<{\n    readonly name?: string;\n    readonly version?: string;\n    readonly attributes: Readonly<Record<string, unknown>>;\n  }>;\n  readonly status?:\n    | {\n        readonly code?: string;\n        readonly message?: string;\n      }\n    | undefined;\n}\n\nexport type TraceRecord = EffectTraceRecord | OtlpTraceRecord;\n\nexport interface TraceSinkOptions {\n  readonly filePath: string;\n  readonly maxBytes: number;\n  readonly maxFiles: number;\n  readonly batchWindowMs: number;\n}\n\nexport interface TraceSink {\n  readonly filePath: string;\n  push: (record: TraceRecord) => void;\n  flush: Effect.Effect<void>;\n  close: () => Effect.Effect<void>;\n}\n\nexport interface LocalFileTracerOptions extends TraceSinkOptions {\n  readonly delegate?: Tracer.Tracer;\n  readonly sink?: TraceSink;\n}\n\ntype OtlpSpan = OtlpTracer.ScopeSpan[\"spans\"][number];\ntype OtlpSpanEvent = OtlpSpan[\"events\"][number];\ntype OtlpSpanLink = OtlpSpan[\"links\"][number];\ntype OtlpSpanStatus = OtlpSpan[\"status\"];\n\ninterface SerializableSpan {\n  readonly name: string;\n  readonly traceId: string;\n  readonly spanId: string;\n  readonly parent: Option.Option<Tracer.AnySpan>;\n  readonly status: Tracer.SpanStatus;\n  readonly sampled: boolean;\n  readonly kind: Tracer.SpanKind;\n  readonly attributes: ReadonlyMap<string, unknown>;\n  readonly links: ReadonlyArray<Tracer.SpanLink>;\n  readonly events: ReadonlyArray<\n    readonly [name: string, startTime: bigint, attributes: Record<string, unknown>]\n  >;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction markSeen(value: object, seen: WeakSet<object>): boolean {\n  if (seen.has(value)) {\n    return true;\n  }\n  seen.add(value);\n  return false;\n}\n\nfunction normalizeJsonValue(value: unknown, seen: WeakSet<object> = new WeakSet()): unknown {\n  if (\n    value === null ||\n    value === undefined ||\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    return value ?? null;\n  }\n  if (typeof value === \"bigint\") {\n    return value.toString();\n  }\n  if (value instanceof Date) {\n    return Number.isNaN(value.getTime()) ? \"Invalid Date\" : value.toISOString();\n  }\n  if (value instanceof Error) {\n    return {\n      name: value.name,\n      message: value.message,\n      ...(value.stack ? { stack: value.stack } : {}),\n    };\n  }\n  if (Array.isArray(value)) {\n    if (markSeen(value, seen)) {\n      return \"[Circular]\";\n    }\n    return value.map((entry) => normalizeJsonValue(entry, seen));\n  }\n  if (value instanceof Map) {\n    if (markSeen(value, seen)) {\n      return \"[Circular]\";\n    }\n    return Object.fromEntries(\n      Array.from(value.entries(), ([key, entryValue]) => [\n        String(key),\n        normalizeJsonValue(entryValue, seen),\n      ]),\n    );\n  }\n  if (value instanceof Set) {\n    if (markSeen(value, seen)) {\n      return \"[Circular]\";\n    }\n    return Array.from(value.values(), (entry) => normalizeJsonValue(entry, seen));\n  }\n  if (!isPlainObject(value)) {\n    return String(value);\n  }\n  if (markSeen(value, seen)) {\n    return \"[Circular]\";\n  }\n  return Object.fromEntries(\n    Object.entries(value).map(([key, entryValue]) => [key, normalizeJsonValue(entryValue, seen)]),\n  );\n}\n\nexport function compactTraceAttributes(\n  attributes: Readonly<Record<string, unknown>>,\n): TraceAttributes {\n  const entries: Array<[string, unknown]> = [];\n  for (const [key, value] of Object.entries(attributes)) {\n    if (value !== undefined) {\n      entries.push([key, normalizeJsonValue(value)]);\n    }\n  }\n  return Object.fromEntries(entries);\n}\n\nfunction formatTraceExit(exit: Exit.Exit<unknown, unknown>): EffectTraceRecord[\"exit\"] {\n  if (ExitRuntime.isSuccess(exit)) {\n    return { _tag: \"Success\" };\n  }\n  if (Cause.hasInterruptsOnly(exit.cause)) {\n    return {\n      _tag: \"Interrupted\",\n      cause: Cause.pretty(exit.cause),\n    };\n  }\n  return {\n    _tag: \"Failure\",\n    cause: Cause.pretty(exit.cause),\n  };\n}\n\nexport function spanToTraceRecord(span: SerializableSpan): EffectTraceRecord {\n  const status = span.status as Extract<Tracer.SpanStatus, { _tag: \"Ended\" }>;\n  const parentSpanId = Option.getOrUndefined(span.parent)?.spanId;\n\n  return {\n    type: \"effect-span\",\n    name: span.name,\n    traceId: span.traceId,\n    spanId: span.spanId,\n    ...(parentSpanId ? { parentSpanId } : {}),\n    sampled: span.sampled,\n    kind: span.kind,\n    startTimeUnixNano: String(status.startTime),\n    endTimeUnixNano: String(status.endTime),\n    durationMs: Number(status.endTime - status.startTime) / 1_000_000,\n    attributes: compactTraceAttributes(Object.fromEntries(span.attributes)),\n    events: span.events.map(([name, startTime, attributes]) => ({\n      name,\n      timeUnixNano: String(startTime),\n      attributes: compactTraceAttributes(attributes),\n    })),\n    links: span.links.map((link) => ({\n      traceId: link.span.traceId,\n      spanId: link.span.spanId,\n      attributes: compactTraceAttributes(link.attributes),\n    })),\n    exit: formatTraceExit(status.exit),\n  };\n}\n\nexport const makeTraceSink = Effect.fn(\"makeTraceSink\")(function* (options: TraceSinkOptions) {\n  const sink = new RotatingFileSink({\n    filePath: options.filePath,\n    maxBytes: options.maxBytes,\n    maxFiles: options.maxFiles,\n  });\n\n  let buffer: Array<string> = [];\n\n  const flushUnsafe = () => {\n    if (buffer.length === 0) {\n      return;\n    }\n\n    const chunk = buffer.join(\"\");\n    buffer = [];\n\n    try {\n      sink.write(chunk);\n    } catch {\n      buffer.unshift(chunk);\n    }\n  };\n\n  const flush = Effect.sync(flushUnsafe).pipe(Effect.withTracerEnabled(false));\n\n  yield* Effect.addFinalizer(() => flush.pipe(Effect.ignore));\n  yield* Effect.forkScoped(\n    Effect.sleep(`${options.batchWindowMs} millis`).pipe(Effect.andThen(flush), Effect.forever),\n  );\n\n  return {\n    filePath: options.filePath,\n    push(record) {\n      try {\n        buffer.push(`${JSON.stringify(record)}\\n`);\n        if (buffer.length >= FLUSH_BUFFER_THRESHOLD) {\n          flushUnsafe();\n        }\n      } catch {\n        return;\n      }\n    },\n    flush,\n    close: () => flush,\n  } satisfies TraceSink;\n});\n\nclass LocalFileSpan implements Tracer.Span {\n  readonly _tag = \"Span\";\n  readonly name: string;\n  readonly spanId: string;\n  readonly traceId: string;\n  readonly parent: Option.Option<Tracer.AnySpan>;\n  readonly annotations: Tracer.Span[\"annotations\"];\n  readonly links: Array<Tracer.SpanLink>;\n  readonly sampled: boolean;\n  readonly kind: Tracer.SpanKind;\n\n  status: Tracer.SpanStatus;\n  attributes: Map<string, unknown>;\n  events: Array<[name: string, startTime: bigint, attributes: Record<string, unknown>]>;\n  private readonly delegate: Tracer.Span;\n  private readonly push: (record: EffectTraceRecord) => void;\n\n  constructor(\n    options: Parameters<Tracer.Tracer[\"span\"]>[0],\n    delegate: Tracer.Span,\n    push: (record: EffectTraceRecord) => void,\n  ) {\n    this.delegate = delegate;\n    this.push = push;\n    this.name = delegate.name;\n    this.spanId = delegate.spanId;\n    this.traceId = delegate.traceId;\n    this.parent = options.parent;\n    this.annotations = options.annotations;\n    this.links = [...options.links];\n    this.sampled = delegate.sampled;\n    this.kind = delegate.kind;\n    this.status = {\n      _tag: \"Started\",\n      startTime: options.startTime,\n    };\n    this.attributes = new Map();\n    this.events = [];\n  }\n\n  end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {\n    this.status = {\n      _tag: \"Ended\",\n      startTime: this.status.startTime,\n      endTime,\n      exit,\n    };\n    this.delegate.end(endTime, exit);\n\n    if (this.sampled) {\n      this.push(spanToTraceRecord(this));\n    }\n  }\n\n  attribute(key: string, value: unknown): void {\n    this.attributes.set(key, value);\n    this.delegate.attribute(key, value);\n  }\n\n  event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {\n    const nextAttributes = attributes ?? {};\n    this.events.push([name, startTime, nextAttributes]);\n    this.delegate.event(name, startTime, nextAttributes);\n  }\n\n  addLinks(links: ReadonlyArray<Tracer.SpanLink>): void {\n    this.links.push(...links);\n    this.delegate.addLinks(links);\n  }\n}\n\nexport const makeLocalFileTracer = Effect.fn(\"makeLocalFileTracer\")(function* (\n  options: LocalFileTracerOptions,\n) {\n  const sink =\n    options.sink ??\n    (yield* makeTraceSink({\n      filePath: options.filePath,\n      maxBytes: options.maxBytes,\n      maxFiles: options.maxFiles,\n      batchWindowMs: options.batchWindowMs,\n    }));\n\n  const delegate =\n    options.delegate ??\n    Tracer.make({\n      span: (spanOptions) => new Tracer.NativeSpan(spanOptions),\n    });\n\n  return Tracer.make({\n    span(spanOptions) {\n      return new LocalFileSpan(spanOptions, delegate.span(spanOptions), sink.push);\n    },\n    ...(delegate.context ? { context: delegate.context } : {}),\n  });\n});\n\nconst SPAN_KIND_MAP: Record<number, OtlpTraceRecord[\"kind\"]> = {\n  1: \"internal\",\n  2: \"server\",\n  3: \"client\",\n  4: \"producer\",\n  5: \"consumer\",\n};\n\nexport function decodeOtlpTraceRecords(\n  payload: OtlpTracer.TraceData,\n): ReadonlyArray<OtlpTraceRecord> {\n  const records: Array<OtlpTraceRecord> = [];\n\n  for (const resourceSpan of payload.resourceSpans) {\n    const resourceAttributes = decodeAttributes(resourceSpan.resource?.attributes ?? []);\n\n    for (const scopeSpan of resourceSpan.scopeSpans) {\n      for (const span of scopeSpan.spans) {\n        records.push(\n          otlpSpanToTraceRecord({\n            resourceAttributes,\n            scopeAttributes: decodeAttributes(\n              \"attributes\" in scopeSpan.scope && Array.isArray(scopeSpan.scope.attributes)\n                ? scopeSpan.scope.attributes\n                : [],\n            ),\n            scopeName: scopeSpan.scope.name,\n            scopeVersion:\n              \"version\" in scopeSpan.scope && typeof scopeSpan.scope.version === \"string\"\n                ? scopeSpan.scope.version\n                : undefined,\n            span,\n          }),\n        );\n      }\n    }\n  }\n\n  return records;\n}\n\nfunction otlpSpanToTraceRecord(input: {\n  readonly resourceAttributes: Readonly<Record<string, unknown>>;\n  readonly scopeAttributes: Readonly<Record<string, unknown>>;\n  readonly scopeName: string | undefined;\n  readonly scopeVersion: string | undefined;\n  readonly span: OtlpSpan;\n}): OtlpTraceRecord {\n  return {\n    type: \"otlp-span\",\n    name: input.span.name,\n    traceId: input.span.traceId,\n    spanId: input.span.spanId,\n    ...(input.span.parentSpanId ? { parentSpanId: input.span.parentSpanId } : {}),\n    sampled: true,\n    kind: normalizeSpanKind(input.span.kind),\n    startTimeUnixNano: input.span.startTimeUnixNano,\n    endTimeUnixNano: input.span.endTimeUnixNano,\n    durationMs:\n      Number(parseBigInt(input.span.endTimeUnixNano) - parseBigInt(input.span.startTimeUnixNano)) /\n      1_000_000,\n    attributes: decodeAttributes(input.span.attributes),\n    resourceAttributes: input.resourceAttributes,\n    scope: {\n      ...(input.scopeName ? { name: input.scopeName } : {}),\n      ...(input.scopeVersion ? { version: input.scopeVersion } : {}),\n      attributes: input.scopeAttributes,\n    },\n    events: decodeEvents(input.span.events),\n    links: decodeLinks(input.span.links),\n    status: decodeStatus(input.span.status),\n  };\n}\n\nfunction decodeStatus(input: OtlpSpanStatus): OtlpTraceRecord[\"status\"] {\n  const code = String(input.code);\n  const message = input.message;\n\n  return {\n    code,\n    ...(message ? { message } : {}),\n  };\n}\n\nfunction decodeEvents(input: ReadonlyArray<OtlpSpanEvent>): ReadonlyArray<TraceRecordEvent> {\n  return input.map((current) => ({\n    name: current.name,\n    timeUnixNano: current.timeUnixNano,\n    attributes: decodeAttributes(current.attributes),\n  }));\n}\n\nfunction decodeLinks(input: ReadonlyArray<OtlpSpanLink>): ReadonlyArray<TraceRecordLink> {\n  return input.flatMap((current) => {\n    const traceId = current.traceId;\n    const spanId = current.spanId;\n    return {\n      traceId,\n      spanId,\n      attributes: decodeAttributes(current.attributes),\n    };\n  });\n}\n\nfunction decodeAttributes(\n  input: ReadonlyArray<OtlpResource.KeyValue>,\n): Readonly<Record<string, unknown>> {\n  const entries: Record<string, unknown> = {};\n\n  for (const attribute of input) {\n    entries[attribute.key] = decodeValue(attribute.value);\n  }\n\n  return compactTraceAttributes(entries);\n}\n\nfunction decodeValue(input: OtlpResource.AnyValue | null | undefined): unknown {\n  if (input == null) {\n    return null;\n  }\n  if (\"stringValue\" in input) {\n    return input.stringValue;\n  }\n  if (\"boolValue\" in input) {\n    return input.boolValue;\n  }\n  if (\"intValue\" in input) {\n    return input.intValue;\n  }\n  if (\"doubleValue\" in input) {\n    return input.doubleValue;\n  }\n  if (\"bytesValue\" in input) {\n    return input.bytesValue;\n  }\n  if (input.arrayValue) {\n    return input.arrayValue.values.map((entry) => decodeValue(entry));\n  }\n  if (input.kvlistValue) {\n    return decodeAttributes(input.kvlistValue.values);\n  }\n  return null;\n}\n\nfunction normalizeSpanKind(input: number): OtlpTraceRecord[\"kind\"] {\n  return SPAN_KIND_MAP[input] || \"internal\";\n}\n\nfunction parseBigInt(input: string): bigint {\n  try {\n    return BigInt(input);\n  } catch {\n    return 0n;\n  }\n}\n","import type { TraceRecord } from \"@salchi/shared/observability\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport interface BrowserTraceCollectorShape {\n  readonly record: (records: ReadonlyArray<TraceRecord>) => Effect.Effect<void>;\n}\n\nexport class BrowserTraceCollector extends Context.Service<\n  BrowserTraceCollector,\n  BrowserTraceCollectorShape\n>()(\"salchi/observability/Services/BrowserTraceCollector\") {}\n","/**\n * ProjectFaviconResolver - Effect service contract for project icon discovery.\n *\n * Resolves a representative favicon or app icon file for a workspace by\n * checking common file locations and project source metadata.\n *\n * @module ProjectFaviconResolver\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\n/**\n * ProjectFaviconResolverShape - Service API for project favicon lookup.\n */\nexport interface ProjectFaviconResolverShape {\n  /**\n   * Resolve a favicon or icon file path for the provided workspace root.\n   *\n   * Returns `null` when no candidate icon file can be found.\n   */\n  readonly resolvePath: (cwd: string) => Effect.Effect<string | null>;\n}\n\n/**\n * ProjectFaviconResolver - Service tag for project favicon resolution.\n */\nexport class ProjectFaviconResolver extends Context.Service<\n  ProjectFaviconResolver,\n  ProjectFaviconResolverShape\n>()(\"salchi/project/Services/ProjectFaviconResolver\") {}\n","const OAUTH_SCOPE_TOKEN = /^[\\u0021\\u0023-\\u005b\\u005d-\\u007e]+$/u;\n\n/**\n * Decodes an RFC 6749 `scope` value as a set while preserving first-seen order.\n */\nexport function parseOAuthScope(value: string): ReadonlyArray<string> | null {\n  if (value.length === 0) {\n    return null;\n  }\n\n  const scopes = value.split(\" \");\n  if (scopes.some((scope) => !OAUTH_SCOPE_TOKEN.test(scope))) {\n    return null;\n  }\n\n  return [...new Set(scopes)];\n}\n\nexport function encodeOAuthScope(scopes: ReadonlyArray<string>): string {\n  const encoded = scopes.join(\" \");\n  const parsed = parseOAuthScope(encoded);\n  if (parsed === null || parsed.length !== scopes.length) {\n    throw new Error(\"OAuth scopes must be non-empty, valid, and unique.\");\n  }\n  return encoded;\n}\n\nexport function parseAllowedOAuthScope<Scope extends string>(input: {\n  readonly value: string;\n  readonly allowedScopes: ReadonlySet<Scope>;\n}): ReadonlyArray<Scope> | null {\n  const scopes = parseOAuthScope(input.value);\n  if (\n    scopes === null ||\n    !scopes.every((scope): scope is Scope => input.allowedScopes.has(scope as Scope))\n  ) {\n    return null;\n  }\n  return scopes;\n}\n","export const browserApiCorsAllowedMethods = [\"GET\", \"POST\", \"OPTIONS\"] as const;\nexport const browserApiCorsAllowedHeaders = [\n  \"authorization\",\n  \"b3\",\n  \"traceparent\",\n  \"content-type\",\n  \"range\",\n] as const;\n\nexport const browserApiCorsHeaders = {\n  \"access-control-allow-origin\": \"*\",\n  \"access-control-allow-methods\": browserApiCorsAllowedMethods.join(\", \"),\n  \"access-control-allow-headers\": browserApiCorsAllowedHeaders.join(\", \"),\n} as const;\n","import {\n  type AuthAccessTokenResult,\n  type AuthBearerBootstrapResult,\n  AuthBrowserSessionRequest,\n  type AuthBrowserSessionResult,\n  AuthBootstrapInput,\n  AuthCreatePairingCredentialInput,\n  AuthEnvironmentScope,\n  AuthRevokeClientSessionInput,\n  AuthRevokePairingLinkInput,\n  type AuthWebSocketTicketResult,\n  type AuthWebSocketTokenResult,\n} from \"@salchi/contracts\";\nimport { parseAllowedOAuthScope } from \"@salchi/shared/oauthScope\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { HttpRouter, HttpServerRequest, HttpServerResponse } from \"effect/unstable/http\";\n\nimport { AuthError, ServerAuth } from \"./Services/ServerAuth.ts\";\nimport { SessionCredentialService } from \"./Services/SessionCredentialService.ts\";\nimport { deriveAuthClientMetadata } from \"./utils.ts\";\nimport { browserApiCorsHeaders } from \"../httpCors.ts\";\n\nexport const respondToAuthError = (error: AuthError) =>\n  Effect.gen(function* () {\n    if ((error.status ?? 500) >= 500) {\n      yield* Effect.logError(\"auth route failed\", {\n        message: error.message,\n        cause: error.cause,\n      });\n    }\n    return HttpServerResponse.jsonUnsafe(\n      {\n        error: error.message,\n      },\n      { status: error.status ?? 500, headers: browserApiCorsHeaders },\n    );\n  });\n\nexport const authSessionRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"/api/auth/session\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const session = yield* serverAuth.getSessionState(request);\n    return HttpServerResponse.jsonUnsafe(session, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    });\n  }),\n);\n\nconst PairingCredentialRequestHeaders = Schema.Struct({\n  \"content-length\": Schema.optionalKey(Schema.String),\n  \"content-type\": Schema.optionalKey(Schema.String),\n  \"transfer-encoding\": Schema.optionalKey(Schema.String),\n});\n\nfunction hasRequestBody(headers: typeof PairingCredentialRequestHeaders.Type) {\n  const contentLengthHeader = headers[\"content-length\"];\n  if (typeof contentLengthHeader === \"string\") {\n    const contentLength = Number.parseInt(contentLengthHeader, 10);\n    if (Number.isFinite(contentLength)) {\n      return contentLength > 0;\n    }\n  }\n  return typeof headers[\"transfer-encoding\"] === \"string\";\n}\n\nexport const authBootstrapRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/bootstrap\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const sessions = yield* SessionCredentialService;\n    const payload = yield* HttpServerRequest.schemaBodyJson(AuthBootstrapInput).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Invalid bootstrap payload.\",\n            status: 400,\n            cause,\n          }),\n      ),\n    );\n    const result = yield* serverAuth.exchangeBootstrapCredential(\n      payload.credential,\n      deriveAuthClientMetadata({ request }),\n    );\n\n    return yield* HttpServerResponse.jsonUnsafe(result.response, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    }).pipe(\n      HttpServerResponse.setCookie(sessions.cookieName, result.sessionToken, {\n        expires: DateTime.toDate(result.response.expiresAt),\n        httpOnly: true,\n        path: \"/\",\n        sameSite: \"lax\",\n      }),\n    );\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authBrowserSessionRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/browser-session\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const sessions = yield* SessionCredentialService;\n    const payload = yield* HttpServerRequest.schemaBodyJson(AuthBrowserSessionRequest).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Invalid browser session payload.\",\n            status: 400,\n            cause,\n          }),\n      ),\n    );\n    const result = yield* serverAuth.exchangeBootstrapCredentialForBrowserSession(\n      payload.credential,\n      deriveAuthClientMetadata({ request }),\n    );\n\n    return yield* HttpServerResponse.jsonUnsafe(\n      result.response satisfies AuthBrowserSessionResult,\n      {\n        status: 200,\n        headers: browserApiCorsHeaders,\n      },\n    ).pipe(\n      HttpServerResponse.setCookie(sessions.cookieName, result.sessionToken, {\n        expires: DateTime.toDate(result.response.expiresAt),\n        httpOnly: true,\n        path: \"/\",\n        sameSite: \"lax\",\n      }),\n    );\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nconst AuthTokenExchangeJsonInput = Schema.Struct({\n  credential: Schema.optionalKey(Schema.String),\n  subject_token: Schema.optionalKey(Schema.String),\n  scope: Schema.optionalKey(Schema.String),\n  client_label: Schema.optionalKey(Schema.String),\n  client_device_type: Schema.optionalKey(Schema.String),\n  client_os: Schema.optionalKey(Schema.String),\n});\n\nconst TokenExchangeHeaders = Schema.Struct({\n  \"content-type\": Schema.optionalKey(Schema.String),\n});\n\nconst readTokenExchangePayload = Effect.gen(function* () {\n  const headers = yield* HttpServerRequest.schemaHeaders(TokenExchangeHeaders).pipe(\n    Effect.mapError(\n      (cause) =>\n        new AuthError({\n          message: \"Invalid token exchange headers.\",\n          status: 400,\n          cause,\n        }),\n    ),\n  );\n  const contentType = headers[\"content-type\"]?.toLowerCase() ?? \"\";\n  const decodePayload = contentType.includes(\"application/x-www-form-urlencoded\")\n    ? HttpServerRequest.schemaBodyUrlParams(AuthTokenExchangeJsonInput)\n    : HttpServerRequest.schemaBodyJson(AuthTokenExchangeJsonInput);\n\n  return yield* decodePayload.pipe(\n    Effect.mapError(\n      (cause) =>\n        new AuthError({\n          message: \"Invalid token exchange payload.\",\n          status: 400,\n          cause,\n        }),\n    ),\n  );\n});\n\nfunction parseRequestedScopes(scope: string | undefined) {\n  if (scope === undefined || scope.trim().length === 0) {\n    return Effect.succeed(undefined as ReadonlyArray<AuthEnvironmentScope> | undefined);\n  }\n  const parsed = parseAllowedOAuthScope({\n    value: scope,\n    allowedScopes: new Set(AuthEnvironmentScope.literals),\n  });\n  if (parsed === null) {\n    return Effect.fail(\n      new AuthError({\n        message: \"Invalid requested OAuth scope.\",\n        status: 400,\n      }),\n    );\n  }\n  return Effect.succeed(parsed);\n}\n\nexport const authTokenExchangeRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/oauth/token\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const payload = yield* readTokenExchangePayload;\n    const credential = payload.subject_token ?? payload.credential;\n    if (!credential || credential.trim().length === 0) {\n      return yield* new AuthError({\n        message: \"Missing token exchange credential.\",\n        status: 401,\n      });\n    }\n    const requestedScopes = yield* parseRequestedScopes(payload.scope);\n    const result = yield* serverAuth.exchangeBootstrapCredentialForAccessToken(\n      credential,\n      {\n        ...deriveAuthClientMetadata({ request }),\n        ...(payload.client_label ? { label: payload.client_label } : {}),\n        ...(payload.client_device_type === \"desktop\" ||\n        payload.client_device_type === \"mobile\" ||\n        payload.client_device_type === \"tablet\" ||\n        payload.client_device_type === \"bot\" ||\n        payload.client_device_type === \"unknown\"\n          ? { deviceType: payload.client_device_type }\n          : {}),\n        ...(payload.client_os ? { os: payload.client_os } : {}),\n      },\n      requestedScopes,\n    );\n    return HttpServerResponse.jsonUnsafe(result satisfies AuthAccessTokenResult, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authBearerBootstrapRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/bootstrap/bearer\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const payload = yield* HttpServerRequest.schemaBodyJson(AuthBootstrapInput).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Invalid bootstrap payload.\",\n            status: 400,\n            cause,\n          }),\n      ),\n    );\n    const result = yield* serverAuth.exchangeBootstrapCredentialForBearerSession(\n      payload.credential,\n      deriveAuthClientMetadata({ request }),\n    );\n    return HttpServerResponse.jsonUnsafe(result satisfies AuthBearerBootstrapResult, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authWebSocketTokenRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/ws-token\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const session = yield* serverAuth.authenticateHttpRequest(request);\n    const result = yield* serverAuth.issueWebSocketToken(session);\n    return HttpServerResponse.jsonUnsafe(result satisfies AuthWebSocketTokenResult, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authWebSocketTicketRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/websocket-ticket\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const serverAuth = yield* ServerAuth;\n    const session = yield* serverAuth.authenticateHttpRequest(request);\n    const result = yield* serverAuth.issueWebSocketTicket(session);\n    return HttpServerResponse.jsonUnsafe(result satisfies AuthWebSocketTicketResult, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authPairingCredentialRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/pairing-token\",\n  Effect.gen(function* () {\n    const serverAuth = yield* ServerAuth;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const session = yield* serverAuth.authenticateHttpRequest(request);\n    if (session.role !== \"owner\") {\n      return yield* new AuthError({\n        message: \"Only owner sessions can create pairing credentials.\",\n        status: 403,\n      });\n    }\n    const headers = yield* HttpServerRequest.schemaHeaders(PairingCredentialRequestHeaders).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Invalid pairing credential request headers.\",\n            status: 400,\n            cause,\n          }),\n      ),\n    );\n    const payload = hasRequestBody(headers)\n      ? yield* HttpServerRequest.schemaBodyJson(AuthCreatePairingCredentialInput).pipe(\n          Effect.mapError(\n            (cause) =>\n              new AuthError({\n                message: \"Invalid pairing credential payload.\",\n                status: 400,\n                cause,\n              }),\n          ),\n        )\n      : {};\n    const result = yield* serverAuth.issuePairingCredential(payload);\n    return HttpServerResponse.jsonUnsafe(result, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nconst authenticateOwnerSession = Effect.gen(function* () {\n  const request = yield* HttpServerRequest.HttpServerRequest;\n  const serverAuth = yield* ServerAuth;\n  const session = yield* serverAuth.authenticateHttpRequest(request);\n  if (session.role !== \"owner\") {\n    return yield* new AuthError({\n      message: \"Only owner sessions can manage network access.\",\n      status: 403,\n    });\n  }\n  return { serverAuth, session } as const;\n});\n\nexport const authPairingLinksRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"/api/auth/pairing-links\",\n  Effect.gen(function* () {\n    const { serverAuth } = yield* authenticateOwnerSession;\n    const pairingLinks = yield* serverAuth.listPairingLinks();\n    return HttpServerResponse.jsonUnsafe(pairingLinks, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authPairingLinksRevokeRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/pairing-links/revoke\",\n  Effect.gen(function* () {\n    const { serverAuth } = yield* authenticateOwnerSession;\n    const payload = yield* HttpServerRequest.schemaBodyJson(AuthRevokePairingLinkInput).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Invalid revoke pairing link payload.\",\n            status: 400,\n            cause,\n          }),\n      ),\n    );\n    const revoked = yield* serverAuth.revokePairingLink(payload.id);\n    return HttpServerResponse.jsonUnsafe({ revoked }, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authClientsRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"/api/auth/clients\",\n  Effect.gen(function* () {\n    const { serverAuth, session } = yield* authenticateOwnerSession;\n    const clients = yield* serverAuth.listClientSessions(session.sessionId);\n    return HttpServerResponse.jsonUnsafe(clients, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authClientsRevokeRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/clients/revoke\",\n  Effect.gen(function* () {\n    const { serverAuth, session } = yield* authenticateOwnerSession;\n    const payload = yield* HttpServerRequest.schemaBodyJson(AuthRevokeClientSessionInput).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Invalid revoke client payload.\",\n            status: 400,\n            cause,\n          }),\n      ),\n    );\n    const revoked = yield* serverAuth.revokeClientSession(session.sessionId, payload.sessionId);\n    return HttpServerResponse.jsonUnsafe({ revoked }, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n\nexport const authClientsRevokeOthersRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/auth/clients/revoke-others\",\n  Effect.gen(function* () {\n    const { serverAuth, session } = yield* authenticateOwnerSession;\n    const revokedCount = yield* serverAuth.revokeOtherClientSessions(session.sessionId);\n    return HttpServerResponse.jsonUnsafe({ revokedCount }, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", (error) => respondToAuthError(error))),\n);\n","import type { EnvironmentId, ExecutionEnvironmentDescriptor } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport interface ServerEnvironmentShape {\n  readonly getEnvironmentId: Effect.Effect<EnvironmentId>;\n  readonly getDescriptor: Effect.Effect<ExecutionEnvironmentDescriptor>;\n}\n\nexport class ServerEnvironment extends Context.Service<ServerEnvironment, ServerEnvironmentShape>()(\n  \"salchi/environment/Services/ServerEnvironment\",\n) {}\n","export const MIME_TYPE_BY_VIDEO_EXTENSION: Record<string, string> = {\n  \".m4v\": \"video/x-m4v\",\n  \".mkv\": \"video/x-matroska\",\n  \".mov\": \"video/quicktime\",\n  \".mp4\": \"video/mp4\",\n  \".ogg\": \"video/ogg\",\n  \".ogv\": \"video/ogg\",\n  \".webm\": \"video/webm\",\n};\n\nexport const SAFE_VIDEO_FILE_EXTENSIONS = new Set(Object.keys(MIME_TYPE_BY_VIDEO_EXTENSION));\n\nexport function videoExtensionFromFileName(fileName: string): string | null {\n  const extensionMatch = /\\.([a-z0-9]{1,8})$/i.exec(fileName.trim());\n  const extension = extensionMatch ? `.${extensionMatch[1]!.toLowerCase()}` : \"\";\n  return SAFE_VIDEO_FILE_EXTENSIONS.has(extension) ? extension : null;\n}\n\nexport function videoMimeTypeFromFileName(fileName: string): string | null {\n  const extension = videoExtensionFromFileName(fileName);\n  if (!extension) {\n    return null;\n  }\n  return Object.hasOwn(MIME_TYPE_BY_VIDEO_EXTENSION, extension)\n    ? (MIME_TYPE_BY_VIDEO_EXTENSION[extension] ?? null)\n    : null;\n}\n\nexport function isSafeVideoFileName(fileName: string): boolean {\n  return videoMimeTypeFromFileName(fileName) !== null;\n}\n","import Mime from \"@effect/platform-node/Mime\";\nimport {\n  MIME_TYPE_BY_VIDEO_EXTENSION,\n  SAFE_VIDEO_FILE_EXTENSIONS,\n  videoExtensionFromFileName as sharedVideoExtensionFromFileName,\n} from \"@salchi/shared/videoMime\";\n\nexport { MIME_TYPE_BY_VIDEO_EXTENSION, SAFE_VIDEO_FILE_EXTENSIONS };\n\nexport function videoExtensionFromFileName(fileName: string): string | null {\n  return sharedVideoExtensionFromFileName(fileName);\n}\n\nexport function videoMimeTypeFromFileName(fileName: string): string | null {\n  const extension = videoExtensionFromFileName(fileName);\n  if (!extension) {\n    return null;\n  }\n  if (Object.hasOwn(MIME_TYPE_BY_VIDEO_EXTENSION, extension)) {\n    return MIME_TYPE_BY_VIDEO_EXTENSION[extension] ?? null;\n  }\n  const inferred = Mime.getType(fileName);\n  return inferred?.startsWith(\"video/\") ? inferred : null;\n}\n\nexport function isSafeVideoFileName(fileName: string): boolean {\n  return videoMimeTypeFromFileName(fileName) !== null;\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { execFile } from \"node:child_process\";\nimport Mime from \"@effect/platform-node/Mime\";\nimport { PROVIDER_SEND_TURN_MAX_IMAGE_BYTES } from \"@salchi/contracts\";\nimport { decodeOtlpTraceRecords } from \"@salchi/shared/observability\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport { cast } from \"effect/Function\";\nimport {\n  HttpBody,\n  HttpClient,\n  HttpClientResponse,\n  HttpRouter,\n  HttpServerResponse,\n  HttpServerRequest,\n} from \"effect/unstable/http\";\nimport { OtlpTracer } from \"effect/unstable/observability\";\n\nimport {\n  ATTACHMENTS_ROUTE_PREFIX,\n  normalizeAttachmentRelativePath,\n  resolveAttachmentRelativePath,\n} from \"./attachmentPaths.ts\";\nimport { resolveAttachmentPathById } from \"./attachmentStore.ts\";\nimport { resolveStaticDir, ServerConfig } from \"./config.ts\";\nimport { BrowserTraceCollector } from \"./observability/Services/BrowserTraceCollector.ts\";\nimport { ProjectFaviconResolver } from \"./project/Services/ProjectFaviconResolver.ts\";\nimport { ServerAuth } from \"./auth/Services/ServerAuth.ts\";\nimport { respondToAuthError } from \"./auth/http.ts\";\nimport { ServerEnvironment } from \"./environment/Services/ServerEnvironment.ts\";\nimport { imageMimeTypeFromFileName } from \"./imageMime.ts\";\nimport { videoMimeTypeFromFileName } from \"./videoMime.ts\";\nimport {\n  browserApiCorsAllowedHeaders,\n  browserApiCorsAllowedMethods,\n  browserApiCorsHeaders,\n} from \"./httpCors.ts\";\nimport { WorkspacePaths } from \"./workspace/Services/WorkspacePaths.ts\";\n\nconst PROJECT_FAVICON_CACHE_CONTROL = \"public, max-age=3600\";\nconst SVG_CONTENT_SECURITY_POLICY = \"default-src 'none'; style-src 'unsafe-inline'; sandbox\";\nconst FALLBACK_PROJECT_FAVICON_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"#6b728080\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-fallback=\"project-favicon\"><path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-8l-2-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2Z\"/></svg>`;\nconst OTLP_TRACES_PROXY_PATH = \"/api/observability/v1/traces\";\nexport const WORKSPACE_IMAGE_ROUTE_PATH = \"/api/workspace-image\";\nexport const WORKSPACE_GIT_IMAGE_ROUTE_PATH = \"/api/workspace-git-image\";\nexport const WORKSPACE_VIDEO_ROUTE_PATH = \"/api/workspace-video\";\nconst LOOPBACK_HOSTNAMES = new Set([\"127.0.0.1\", \"::1\", \"localhost\"]);\nconst GIT_OBJECT_ID_PATTERN = /^[0-9a-f]{7,64}$/i;\n\nexport function svgSandboxHeaders(mimeTypeOrPath: string): Record<string, string> {\n  const normalized = mimeTypeOrPath.trim().toLowerCase();\n  const isSvg = normalized === \"image/svg+xml\" || normalized.split(/[?#]/u, 1)[0]?.endsWith(\".svg\");\n  return {\n    \"X-Content-Type-Options\": \"nosniff\",\n    ...(isSvg ? { \"Content-Security-Policy\": SVG_CONTENT_SECURITY_POLICY } : {}),\n  };\n}\n\nexport type WorkspaceMediaByteRange =\n  | {\n      readonly kind: \"full\";\n    }\n  | {\n      readonly kind: \"partial\";\n      readonly start: number;\n      readonly end: number;\n      readonly contentLength: number;\n    }\n  | {\n      readonly kind: \"unsatisfiable\";\n    };\n\nclass WorkspaceGitImageError extends Data.TaggedError(\"WorkspaceGitImageError\")<{\n  readonly detail: string;\n  readonly cause?: unknown;\n}> {}\n\nexport const browserApiCorsLayer = HttpRouter.cors({\n  allowedMethods: [...browserApiCorsAllowedMethods],\n  allowedHeaders: [...browserApiCorsAllowedHeaders],\n  maxAge: 600,\n});\n\nexport function isLoopbackHostname(hostname: string): boolean {\n  const normalizedHostname = hostname\n    .trim()\n    .toLowerCase()\n    .replace(/^\\[(.*)\\]$/, \"$1\");\n  return LOOPBACK_HOSTNAMES.has(normalizedHostname);\n}\n\nexport function resolveDevRedirectUrl(devUrl: URL, requestUrl: URL): string {\n  const redirectUrl = new URL(devUrl.toString());\n  redirectUrl.pathname = requestUrl.pathname;\n  redirectUrl.search = requestUrl.search;\n  redirectUrl.hash = requestUrl.hash;\n  return redirectUrl.toString();\n}\n\nconst requireAuthenticatedRequest = Effect.gen(function* () {\n  const request = yield* HttpServerRequest.HttpServerRequest;\n  const serverAuth = yield* ServerAuth;\n  yield* serverAuth.authenticateHttpRequest(request);\n});\n\nfunction execGitBuffer(input: {\n  cwd: string;\n  args: ReadonlyArray<string>;\n  maxBuffer: number;\n}): Promise<Buffer> {\n  return new Promise((resolve, reject) => {\n    execFile(\n      \"git\",\n      [...input.args],\n      {\n        cwd: input.cwd,\n        encoding: \"buffer\",\n        maxBuffer: input.maxBuffer,\n        timeout: 5_000,\n      },\n      (error, stdout) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve(stdout);\n      },\n    );\n  });\n}\n\nfunction readGitObjectSize(cwd: string, objectId: string) {\n  return Effect.tryPromise({\n    try: () => execGitBuffer({ cwd, args: [\"cat-file\", \"-s\", objectId], maxBuffer: 128 }),\n    catch: (cause) =>\n      new WorkspaceGitImageError({\n        detail: \"Failed to read git object size.\",\n        cause,\n      }),\n  }).pipe(\n    Effect.map((stdout) => Number.parseInt(stdout.toString(\"utf8\").trim(), 10)),\n    Effect.flatMap((size) =>\n      Number.isSafeInteger(size) && size > 0\n        ? Effect.succeed(size)\n        : Effect.fail(\n            new WorkspaceGitImageError({\n              detail: \"Invalid git object size.\",\n            }),\n          ),\n    ),\n  );\n}\n\nfunction readGitImageObject(cwd: string, objectId: string, maxBuffer: number) {\n  return Effect.tryPromise({\n    try: () => execGitBuffer({ cwd, args: [\"cat-file\", \"blob\", objectId], maxBuffer }),\n    catch: (cause) =>\n      new WorkspaceGitImageError({\n        detail: \"Failed to read git object.\",\n        cause,\n      }),\n  });\n}\n\nfunction parseNonNegativeInteger(value: string): number | null {\n  if (!/^\\d+$/.test(value)) {\n    return null;\n  }\n  const parsed = Number.parseInt(value, 10);\n  return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : null;\n}\n\nexport function resolveWorkspaceMediaByteRange(\n  rangeHeader: string | undefined,\n  fileSize: number,\n): WorkspaceMediaByteRange {\n  const trimmedRange = rangeHeader?.trim();\n  if (!trimmedRange) {\n    return { kind: \"full\" };\n  }\n  if (!Number.isSafeInteger(fileSize) || fileSize <= 0) {\n    return { kind: \"unsatisfiable\" };\n  }\n\n  const match = /^bytes=(\\d*)-(\\d*)$/i.exec(trimmedRange);\n  if (!match || trimmedRange.includes(\",\")) {\n    return { kind: \"unsatisfiable\" };\n  }\n\n  const startValue = match[1] ?? \"\";\n  const endValue = match[2] ?? \"\";\n  if (!startValue && !endValue) {\n    return { kind: \"unsatisfiable\" };\n  }\n\n  if (!startValue) {\n    const suffixLength = parseNonNegativeInteger(endValue);\n    if (suffixLength === null || suffixLength <= 0) {\n      return { kind: \"unsatisfiable\" };\n    }\n    const contentLength = Math.min(suffixLength, fileSize);\n    const start = fileSize - contentLength;\n    return {\n      kind: \"partial\",\n      start,\n      end: fileSize - 1,\n      contentLength,\n    };\n  }\n\n  const start = parseNonNegativeInteger(startValue);\n  if (start === null || start >= fileSize) {\n    return { kind: \"unsatisfiable\" };\n  }\n\n  const explicitEnd = endValue ? parseNonNegativeInteger(endValue) : null;\n  if (endValue && explicitEnd === null) {\n    return { kind: \"unsatisfiable\" };\n  }\n  const end = Math.min(explicitEnd ?? fileSize - 1, fileSize - 1);\n  if (end < start) {\n    return { kind: \"unsatisfiable\" };\n  }\n\n  return {\n    kind: \"partial\",\n    start,\n    end,\n    contentLength: end - start + 1,\n  };\n}\n\nfunction workspaceMediaHeaders(input: {\n  supportsRanges: boolean;\n  mimeType: string;\n}): Record<string, string> {\n  return {\n    \"Cache-Control\": \"no-store\",\n    ...svgSandboxHeaders(input.mimeType),\n    ...(input.supportsRanges ? { \"Accept-Ranges\": \"bytes\" } : {}),\n  };\n}\n\nfunction serveWorkspaceMediaFile(input: {\n  readonly cwd: string;\n  readonly relativePath: string;\n  readonly mimeType: string;\n  readonly routeLabel: \"image\" | \"video\";\n  readonly rangeHeader?: string | undefined;\n  readonly maxBytes?: number | undefined;\n  readonly supportsRanges: boolean;\n}) {\n  return Effect.gen(function* () {\n    const workspacePaths = yield* WorkspacePaths;\n    const target = yield* workspacePaths\n      .resolveRelativePathWithinRoot({\n        workspaceRoot: input.cwd,\n        relativePath: input.relativePath,\n      })\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!target) {\n      return HttpServerResponse.text(`Invalid workspace ${input.routeLabel} path`, {\n        status: 400,\n      });\n    }\n\n    const fileSystem = yield* FileSystem.FileSystem;\n    const fileInfo = yield* fileSystem\n      .stat(target.absolutePath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!fileInfo || fileInfo.type !== \"File\") {\n      return HttpServerResponse.text(\"Not Found\", { status: 404 });\n    }\n\n    const fileSize = Number(fileInfo.size);\n    if (!Number.isSafeInteger(fileSize) || fileSize < 0) {\n      return HttpServerResponse.text(\"Internal Server Error\", { status: 500 });\n    }\n    if (fileSize === 0) {\n      return HttpServerResponse.text(`Workspace ${input.routeLabel} is empty`, { status: 404 });\n    }\n    if (input.maxBytes !== undefined && fileSize > input.maxBytes) {\n      return HttpServerResponse.text(`Workspace ${input.routeLabel} is too large`, {\n        status: 413,\n      });\n    }\n\n    const byteRange = input.supportsRanges\n      ? resolveWorkspaceMediaByteRange(input.rangeHeader, fileSize)\n      : ({ kind: \"full\" } as const);\n    const baseHeaders = workspaceMediaHeaders({\n      supportsRanges: input.supportsRanges,\n      mimeType: input.mimeType,\n    });\n\n    if (byteRange.kind === \"unsatisfiable\") {\n      return HttpServerResponse.text(\"Range Not Satisfiable\", {\n        status: 416,\n        headers: {\n          ...baseHeaders,\n          \"Content-Range\": `bytes */${fileSize}`,\n        },\n      });\n    }\n\n    const responseOptions =\n      byteRange.kind === \"partial\"\n        ? {\n            status: 206,\n            contentType: input.mimeType,\n            contentLength: byteRange.contentLength,\n            offset: byteRange.start,\n            bytesToRead: byteRange.contentLength,\n            headers: {\n              ...baseHeaders,\n              \"Content-Range\": `bytes ${byteRange.start}-${byteRange.end}/${fileSize}`,\n            },\n          }\n        : {\n            status: 200,\n            contentType: input.mimeType,\n            contentLength: fileSize,\n            headers: baseHeaders,\n          };\n\n    return yield* HttpServerResponse.file(target.absolutePath, responseOptions).pipe(\n      Effect.catch(() =>\n        Effect.succeed(HttpServerResponse.text(\"Internal Server Error\", { status: 500 })),\n      ),\n    );\n  });\n}\n\nexport const serverEnvironmentRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"/.well-known/salchi/environment\",\n  Effect.gen(function* () {\n    const descriptor = yield* Effect.service(ServerEnvironment).pipe(\n      Effect.flatMap((serverEnvironment) => serverEnvironment.getDescriptor),\n    );\n    return HttpServerResponse.jsonUnsafe(descriptor, {\n      status: 200,\n      headers: browserApiCorsHeaders,\n    });\n  }),\n);\n\nclass DecodeOtlpTraceRecordsError extends Data.TaggedError(\"DecodeOtlpTraceRecordsError\")<{\n  readonly cause: unknown;\n  readonly bodyJson: OtlpTracer.TraceData;\n}> {}\n\nexport const otlpTracesProxyRouteLayer = HttpRouter.add(\n  \"POST\",\n  OTLP_TRACES_PROXY_PATH,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const config = yield* ServerConfig;\n    const otlpTracesUrl = config.otlpTracesUrl;\n    const browserTraceCollector = yield* BrowserTraceCollector;\n    const httpClient = yield* HttpClient.HttpClient;\n    const bodyJson = cast<unknown, OtlpTracer.TraceData>(yield* request.json);\n\n    yield* Effect.try({\n      try: () => decodeOtlpTraceRecords(bodyJson),\n      catch: (cause) => new DecodeOtlpTraceRecordsError({ cause, bodyJson }),\n    }).pipe(\n      Effect.flatMap((records) => browserTraceCollector.record(records)),\n      Effect.catch((cause) =>\n        Effect.logWarning(\"Failed to decode browser OTLP traces\", {\n          cause,\n          bodyJson,\n        }),\n      ),\n    );\n\n    if (otlpTracesUrl === undefined) {\n      return HttpServerResponse.empty({ status: 204 });\n    }\n\n    return yield* httpClient\n      .post(otlpTracesUrl, {\n        body: HttpBody.jsonUnsafe(bodyJson),\n      })\n      .pipe(\n        Effect.flatMap(HttpClientResponse.filterStatusOk),\n        Effect.as(HttpServerResponse.empty({ status: 204 })),\n        Effect.tapError((cause) =>\n          Effect.logWarning(\"Failed to export browser OTLP traces\", {\n            cause,\n            otlpTracesUrl,\n          }),\n        ),\n        Effect.catch(() =>\n          Effect.succeed(HttpServerResponse.text(\"Trace export failed.\", { status: 502 })),\n        ),\n      );\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\nexport const attachmentsRouteLayer = HttpRouter.add(\n  \"GET\",\n  `${ATTACHMENTS_ROUTE_PREFIX}/*`,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const url = HttpServerRequest.toURL(request);\n    if (Option.isNone(url)) {\n      return HttpServerResponse.text(\"Bad Request\", { status: 400 });\n    }\n\n    const config = yield* ServerConfig;\n    const rawRelativePath = url.value.pathname.slice(ATTACHMENTS_ROUTE_PREFIX.length);\n    const normalizedRelativePath = normalizeAttachmentRelativePath(rawRelativePath);\n    if (!normalizedRelativePath) {\n      return HttpServerResponse.text(\"Invalid attachment path\", { status: 400 });\n    }\n\n    const isIdLookup =\n      !normalizedRelativePath.includes(\"/\") && !normalizedRelativePath.includes(\".\");\n    const filePath = isIdLookup\n      ? resolveAttachmentPathById({\n          attachmentsDir: config.attachmentsDir,\n          attachmentId: normalizedRelativePath,\n        })\n      : resolveAttachmentRelativePath({\n          attachmentsDir: config.attachmentsDir,\n          relativePath: normalizedRelativePath,\n        });\n    if (!filePath) {\n      return HttpServerResponse.text(isIdLookup ? \"Not Found\" : \"Invalid attachment path\", {\n        status: isIdLookup ? 404 : 400,\n      });\n    }\n\n    const fileSystem = yield* FileSystem.FileSystem;\n    const fileInfo = yield* fileSystem\n      .stat(filePath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!fileInfo || fileInfo.type !== \"File\") {\n      return HttpServerResponse.text(\"Not Found\", { status: 404 });\n    }\n\n    return yield* HttpServerResponse.file(filePath, {\n      status: 200,\n      headers: {\n        \"Cache-Control\": \"public, max-age=31536000, immutable\",\n        ...svgSandboxHeaders(filePath),\n        ...(url.value.searchParams.get(\"download\") === \"1\"\n          ? { \"Content-Disposition\": \"attachment\" }\n          : {}),\n      },\n    }).pipe(\n      Effect.catch(() =>\n        Effect.succeed(HttpServerResponse.text(\"Internal Server Error\", { status: 500 })),\n      ),\n    );\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\nexport const projectFaviconRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"/api/project-favicon\",\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const url = HttpServerRequest.toURL(request);\n    if (Option.isNone(url)) {\n      return HttpServerResponse.text(\"Bad Request\", { status: 400 });\n    }\n\n    const projectCwd = url.value.searchParams.get(\"cwd\");\n    if (!projectCwd) {\n      return HttpServerResponse.text(\"Missing cwd parameter\", { status: 400 });\n    }\n\n    const faviconResolver = yield* ProjectFaviconResolver;\n    const faviconFilePath = yield* faviconResolver.resolvePath(projectCwd);\n    if (!faviconFilePath) {\n      return HttpServerResponse.text(FALLBACK_PROJECT_FAVICON_SVG, {\n        status: 200,\n        contentType: \"image/svg+xml\",\n        headers: {\n          \"Cache-Control\": PROJECT_FAVICON_CACHE_CONTROL,\n          ...svgSandboxHeaders(\"image/svg+xml\"),\n        },\n      });\n    }\n\n    return yield* HttpServerResponse.file(faviconFilePath, {\n      status: 200,\n      headers: {\n        \"Cache-Control\": PROJECT_FAVICON_CACHE_CONTROL,\n        ...svgSandboxHeaders(faviconFilePath),\n      },\n    }).pipe(\n      Effect.catch(() =>\n        Effect.succeed(HttpServerResponse.text(\"Internal Server Error\", { status: 500 })),\n      ),\n    );\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\nexport const workspaceImageRouteLayer = HttpRouter.add(\n  \"GET\",\n  WORKSPACE_IMAGE_ROUTE_PATH,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const url = HttpServerRequest.toURL(request);\n    if (Option.isNone(url)) {\n      return HttpServerResponse.text(\"Bad Request\", { status: 400 });\n    }\n\n    const cwd = url.value.searchParams.get(\"cwd\")?.trim();\n    const relativePath = url.value.searchParams.get(\"relativePath\")?.trim();\n    if (!cwd || !relativePath) {\n      return HttpServerResponse.text(\"Missing workspace image parameters\", { status: 400 });\n    }\n\n    const mimeType = imageMimeTypeFromFileName(relativePath);\n    if (!mimeType) {\n      return HttpServerResponse.text(\"Unsupported workspace image type\", { status: 415 });\n    }\n\n    return yield* serveWorkspaceMediaFile({\n      cwd,\n      relativePath,\n      mimeType,\n      routeLabel: \"image\",\n      maxBytes: PROVIDER_SEND_TURN_MAX_IMAGE_BYTES,\n      supportsRanges: false,\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\nexport const workspaceVideoRouteLayer = HttpRouter.add(\n  \"GET\",\n  WORKSPACE_VIDEO_ROUTE_PATH,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const url = HttpServerRequest.toURL(request);\n    if (Option.isNone(url)) {\n      return HttpServerResponse.text(\"Bad Request\", { status: 400 });\n    }\n\n    const cwd = url.value.searchParams.get(\"cwd\")?.trim();\n    const relativePath = url.value.searchParams.get(\"relativePath\")?.trim();\n    if (!cwd || !relativePath) {\n      return HttpServerResponse.text(\"Missing workspace video parameters\", { status: 400 });\n    }\n\n    const mimeType = videoMimeTypeFromFileName(relativePath);\n    if (!mimeType) {\n      return HttpServerResponse.text(\"Unsupported workspace video type\", { status: 415 });\n    }\n\n    return yield* serveWorkspaceMediaFile({\n      cwd,\n      relativePath,\n      mimeType,\n      routeLabel: \"video\",\n      rangeHeader: request.headers[\"range\"],\n      supportsRanges: true,\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\nexport const workspaceGitImageRouteLayer = HttpRouter.add(\n  \"GET\",\n  WORKSPACE_GIT_IMAGE_ROUTE_PATH,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const url = HttpServerRequest.toURL(request);\n    if (Option.isNone(url)) {\n      return HttpServerResponse.text(\"Bad Request\", { status: 400 });\n    }\n\n    const cwd = url.value.searchParams.get(\"cwd\")?.trim();\n    const relativePath = url.value.searchParams.get(\"relativePath\")?.trim();\n    const objectId = url.value.searchParams.get(\"objectId\")?.trim();\n    if (!cwd || !relativePath || !objectId) {\n      return HttpServerResponse.text(\"Missing workspace git image parameters\", { status: 400 });\n    }\n    if (!GIT_OBJECT_ID_PATTERN.test(objectId) || /^0+$/.test(objectId)) {\n      return HttpServerResponse.text(\"Invalid workspace git image object\", { status: 400 });\n    }\n\n    const mimeType = imageMimeTypeFromFileName(relativePath);\n    if (!mimeType) {\n      return HttpServerResponse.text(\"Unsupported workspace git image type\", { status: 415 });\n    }\n\n    const workspacePaths = yield* WorkspacePaths;\n    const normalizedCwd = yield* workspacePaths\n      .normalizeWorkspaceRoot(cwd)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!normalizedCwd) {\n      return HttpServerResponse.text(\"Invalid workspace git image path\", { status: 400 });\n    }\n\n    const fileSize = yield* readGitObjectSize(normalizedCwd, objectId).pipe(\n      Effect.catch(() => Effect.succeed(null)),\n    );\n    if (fileSize === null) {\n      return HttpServerResponse.text(\"Not Found\", { status: 404 });\n    }\n    if (fileSize <= 0 || fileSize > PROVIDER_SEND_TURN_MAX_IMAGE_BYTES) {\n      return HttpServerResponse.text(\"Workspace git image is empty or too large\", { status: 413 });\n    }\n\n    const bytes = yield* readGitImageObject(normalizedCwd, objectId, fileSize).pipe(\n      Effect.catch(() => Effect.succeed(null)),\n    );\n    if (!bytes) {\n      return HttpServerResponse.text(\"Internal Server Error\", { status: 500 });\n    }\n\n    return HttpServerResponse.uint8Array(bytes, {\n      status: 200,\n      contentType: mimeType,\n      headers: {\n        \"Cache-Control\": \"no-store\",\n        ...svgSandboxHeaders(mimeType),\n      },\n    });\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\n// Hashed build outputs under assets/ are immutable; everything else\n// (index.html, service workers, manifest, root icons) must be revalidated.\nexport const cacheControlForStaticPath = (relativePath: string): string =>\n  relativePath.startsWith(\"assets/\") || relativePath.startsWith(\"assets\\\\\")\n    ? \"public, max-age=31536000, immutable\"\n    : \"no-cache\";\n\nexport type StaticContentEncoding = \"br\" | \"gzip\";\n\nconst STATIC_CONTENT_ENCODINGS = [\"br\", \"gzip\"] as const;\n\nexport function acceptedStaticContentEncodings(\n  acceptEncodingHeader: string | undefined,\n): ReadonlyArray<StaticContentEncoding> {\n  if (!acceptEncodingHeader?.trim()) return [];\n\n  const qualityByEncoding = new Map<string, number>();\n  for (const entry of acceptEncodingHeader.split(\",\")) {\n    const [rawEncoding, ...rawParameters] = entry.split(\";\");\n    const encoding = rawEncoding?.trim().toLowerCase();\n    if (!encoding) continue;\n\n    let quality = 1;\n    for (const rawParameter of rawParameters) {\n      const [rawName, rawValue] = rawParameter.split(\"=\", 2);\n      if (rawName?.trim().toLowerCase() !== \"q\") continue;\n      const parsedQuality = Number(rawValue?.trim());\n      quality =\n        Number.isFinite(parsedQuality) && parsedQuality >= 0 && parsedQuality <= 1\n          ? parsedQuality\n          : 0;\n      break;\n    }\n    qualityByEncoding.set(encoding, Math.max(qualityByEncoding.get(encoding) ?? 0, quality));\n  }\n\n  const wildcardQuality = qualityByEncoding.get(\"*\") ?? 0;\n  return STATIC_CONTENT_ENCODINGS.map((encoding, preference) => ({\n    encoding,\n    preference,\n    quality: qualityByEncoding.get(encoding) ?? wildcardQuality,\n  }))\n    .filter(({ quality }) => quality > 0)\n    .sort((left, right) => right.quality - left.quality || left.preference - right.preference)\n    .map(({ encoding }) => encoding);\n}\n\nexport const staticAndDevRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"*\",\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const url = HttpServerRequest.toURL(request);\n\n    if (Option.isNone(url)) {\n      return HttpServerResponse.text(\"Bad Request\", { status: 400 });\n    }\n\n    const config = yield* ServerConfig;\n    if (config.devUrl && isLoopbackHostname(url.value.hostname)) {\n      return HttpServerResponse.redirect(resolveDevRedirectUrl(config.devUrl, url.value), {\n        status: 302,\n      });\n    }\n\n    const staticDir = config.staticDir ?? (config.devUrl ? yield* resolveStaticDir() : undefined);\n    if (!staticDir) {\n      return HttpServerResponse.text(\"No static directory configured and no dev URL set.\", {\n        status: 503,\n      });\n    }\n\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const staticRoot = path.resolve(staticDir);\n    const acceptedContentEncodings = acceptedStaticContentEncodings(\n      request.headers[\"accept-encoding\"],\n    );\n    const readStaticRepresentation = (sourcePath: string) =>\n      Effect.gen(function* () {\n        for (const contentEncoding of acceptedContentEncodings) {\n          const extension = contentEncoding === \"gzip\" ? \"gz\" : contentEncoding;\n          const compressedData = yield* fileSystem\n            .readFile(`${sourcePath}.${extension}`)\n            .pipe(Effect.catch(() => Effect.succeed(null)));\n          if (compressedData) {\n            return { data: compressedData, contentEncoding } as const;\n          }\n        }\n\n        const data = yield* fileSystem\n          .readFile(sourcePath)\n          .pipe(Effect.catch(() => Effect.succeed(null)));\n        return data ? ({ data, contentEncoding: null } as const) : null;\n      });\n    const staticRequestPath = url.value.pathname === \"/\" ? \"/index.html\" : url.value.pathname;\n    const rawStaticRelativePath = staticRequestPath.replace(/^[/\\\\]+/, \"\");\n    const hasRawLeadingParentSegment = rawStaticRelativePath.startsWith(\"..\");\n    const staticRelativePath = path.normalize(rawStaticRelativePath).replace(/^[/\\\\]+/, \"\");\n    const hasPathTraversalSegment = staticRelativePath.startsWith(\"..\");\n    if (\n      staticRelativePath.length === 0 ||\n      hasRawLeadingParentSegment ||\n      hasPathTraversalSegment ||\n      staticRelativePath.includes(\"\\0\")\n    ) {\n      return HttpServerResponse.text(\"Invalid static file path\", { status: 400 });\n    }\n\n    const isWithinStaticRoot = (candidate: string) =>\n      candidate === staticRoot ||\n      candidate.startsWith(staticRoot.endsWith(path.sep) ? staticRoot : `${staticRoot}${path.sep}`);\n\n    let filePath = path.resolve(staticRoot, staticRelativePath);\n    if (!isWithinStaticRoot(filePath)) {\n      return HttpServerResponse.text(\"Invalid static file path\", { status: 400 });\n    }\n\n    const ext = path.extname(filePath);\n    if (!ext) {\n      filePath = path.resolve(filePath, \"index.html\");\n      if (!isWithinStaticRoot(filePath)) {\n        return HttpServerResponse.text(\"Invalid static file path\", { status: 400 });\n      }\n    }\n\n    const fileInfo = yield* fileSystem\n      .stat(filePath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!fileInfo || fileInfo.type !== \"File\") {\n      const indexPath = path.resolve(staticRoot, \"index.html\");\n      const indexRepresentation = yield* readStaticRepresentation(indexPath);\n      if (!indexRepresentation) {\n        return HttpServerResponse.text(\"Not Found\", { status: 404 });\n      }\n      return HttpServerResponse.uint8Array(indexRepresentation.data, {\n        status: 200,\n        contentType: \"text/html; charset=utf-8\",\n        headers: {\n          \"Cache-Control\": \"no-cache\",\n          Vary: \"Accept-Encoding\",\n          ...(indexRepresentation.contentEncoding\n            ? { \"Content-Encoding\": indexRepresentation.contentEncoding }\n            : {}),\n        },\n      });\n    }\n\n    const contentType = Mime.getType(filePath) ?? \"application/octet-stream\";\n    const representation = yield* readStaticRepresentation(filePath);\n    if (!representation) {\n      return HttpServerResponse.text(\"Internal Server Error\", { status: 500 });\n    }\n\n    return HttpServerResponse.uint8Array(representation.data, {\n      status: 200,\n      contentType,\n      headers: {\n        \"Cache-Control\": cacheControlForStaticPath(staticRelativePath),\n        Vary: \"Accept-Encoding\",\n        ...(representation.contentEncoding\n          ? { \"Content-Encoding\": representation.contentEncoding }\n          : {}),\n      },\n    });\n  }),\n);\n","import type {\n  OrchestrationThread,\n  OrchestrationThreadDetailFingerprint,\n  OrchestrationThreadDetailPageInfo,\n  OrchestrationThreadDetailSnapshot,\n} from \"@salchi/contracts\";\n\nconst FINGERPRINT_VERSION = 1 as const;\nconst TEXT_HASH_SEED = 0x811c9dc5;\n\nconst THREAD_DETAIL_FINGERPRINT_TAIL_LIMITS = {\n  messages: 100,\n  proposedPlans: 20,\n  activities: 200,\n  checkpoints: 100,\n} as const;\n\nexport function computeOrchestrationThreadDetailFingerprint(\n  snapshot: OrchestrationThreadDetailSnapshot,\n): OrchestrationThreadDetailFingerprint {\n  const parts: string[] = [];\n  appendThreadParts(parts, snapshot.thread);\n  appendPageInfoParts(parts, snapshot.pageInfo);\n  return {\n    version: FINGERPRINT_VERSION,\n    value: hashStrings(parts),\n  };\n}\n\nexport function orchestrationThreadDetailFingerprintsEqual(\n  left: OrchestrationThreadDetailFingerprint | null | undefined,\n  right: OrchestrationThreadDetailFingerprint | null | undefined,\n): boolean {\n  return left?.version === right?.version && left?.value === right?.value;\n}\n\nfunction appendThreadParts(parts: string[], thread: OrchestrationThread): void {\n  parts.push(\"thread\", thread.id, thread.updatedAt);\n\n  const latestTurn = thread.latestTurn;\n  parts.push(\n    \"latestTurn\",\n    latestTurn?.turnId ?? \"\",\n    latestTurn?.state ?? \"\",\n    latestTurn?.startedAt ?? \"\",\n    latestTurn?.completedAt ?? \"\",\n    latestTurn?.assistantMessageId ?? \"\",\n  );\n\n  const session = thread.session;\n  parts.push(\n    \"session\",\n    session?.status ?? \"\",\n    session?.activeTurnId ?? \"\",\n    session?.updatedAt ?? \"\",\n    session?.lastError ?? \"\",\n  );\n\n  for (const message of tail(thread.messages, THREAD_DETAIL_FINGERPRINT_TAIL_LIMITS.messages)) {\n    parts.push(\n      \"message\",\n      message.id,\n      message.role,\n      message.turnId ?? \"\",\n      message.streaming ? \"1\" : \"0\",\n      message.createdAt,\n      message.updatedAt,\n      String(message.text.length),\n      hashString(message.text),\n    );\n    for (const attachment of message.attachments ?? []) {\n      parts.push(\n        \"attachment\",\n        attachment.type,\n        attachment.id,\n        attachment.name,\n        attachment.mimeType,\n        String(attachment.sizeBytes),\n      );\n    }\n  }\n\n  for (const queuedTurn of thread.queuedTurns) {\n    parts.push(\n      \"queuedTurn\",\n      queuedTurn.messageId,\n      queuedTurn.role,\n      queuedTurn.runtimeMode,\n      queuedTurn.interactionMode,\n      queuedTurn.createdAt,\n      queuedTurn.updatedAt,\n      String(queuedTurn.text.length),\n      hashString(queuedTurn.text),\n    );\n    for (const attachment of queuedTurn.attachments) {\n      parts.push(\n        \"queued-attachment\",\n        attachment.type,\n        attachment.id,\n        attachment.name,\n        attachment.mimeType,\n        String(attachment.sizeBytes),\n      );\n    }\n  }\n\n  for (const activity of tail(\n    thread.activities,\n    THREAD_DETAIL_FINGERPRINT_TAIL_LIMITS.activities,\n  )) {\n    parts.push(\n      \"activity\",\n      activity.id,\n      activity.tone,\n      activity.kind,\n      activity.summary,\n      activity.turnId ?? \"\",\n      String(activity.sequence ?? \"\"),\n      activity.createdAt,\n      hashStableJsonLike(activity.payload),\n    );\n  }\n\n  for (const plan of tail(\n    thread.proposedPlans,\n    THREAD_DETAIL_FINGERPRINT_TAIL_LIMITS.proposedPlans,\n  )) {\n    parts.push(\n      \"plan\",\n      plan.id,\n      plan.turnId ?? \"\",\n      plan.implementedAt ?? \"\",\n      plan.implementationThreadId ?? \"\",\n      plan.createdAt,\n      plan.updatedAt,\n      String(plan.planMarkdown.length),\n      hashString(plan.planMarkdown),\n    );\n  }\n\n  for (const checkpoint of tail(\n    thread.checkpoints,\n    THREAD_DETAIL_FINGERPRINT_TAIL_LIMITS.checkpoints,\n  )) {\n    parts.push(\n      \"checkpoint\",\n      checkpoint.turnId,\n      String(checkpoint.checkpointTurnCount),\n      checkpoint.checkpointRef,\n      checkpoint.status,\n      checkpoint.assistantMessageId ?? \"\",\n      checkpoint.completedAt,\n    );\n    for (const file of checkpoint.files) {\n      parts.push(\n        \"checkpoint-file\",\n        file.path,\n        file.kind,\n        String(file.additions),\n        String(file.deletions),\n      );\n    }\n  }\n}\n\nfunction appendPageInfoParts(parts: string[], pageInfo: OrchestrationThreadDetailPageInfo): void {\n  for (const key of [\"messages\", \"proposedPlans\", \"activities\", \"checkpoints\"] as const) {\n    const collection = pageInfo[key];\n    const cursor = collection.startCursor;\n    parts.push(\n      \"pageInfo\",\n      key,\n      collection.hasMoreBefore ? \"1\" : \"0\",\n      cursor?.id ?? \"\",\n      cursor?.createdAt ?? \"\",\n      String(cursor?.sequence ?? \"\"),\n      String(cursor?.checkpointTurnCount ?? \"\"),\n    );\n  }\n}\n\nfunction tail<T>(items: ReadonlyArray<T>, limit: number): ReadonlyArray<T> {\n  return items.length <= limit ? items : items.slice(items.length - limit);\n}\n\nfunction hashStableJsonLike(value: unknown): string {\n  const parts: string[] = [];\n  appendStableJsonLikeParts(parts, value, new Set());\n  return hashStrings(parts);\n}\n\nfunction appendStableJsonLikeParts(parts: string[], value: unknown, seen: Set<object>): void {\n  if (value === null) {\n    parts.push(\"null\");\n    return;\n  }\n  switch (typeof value) {\n    case \"undefined\":\n      parts.push(\"undefined\");\n      return;\n    case \"boolean\":\n    case \"number\":\n    case \"bigint\":\n    case \"string\":\n      parts.push(typeof value, String(value));\n      return;\n    case \"object\":\n      break;\n    default:\n      parts.push(typeof value);\n      return;\n  }\n\n  if (seen.has(value)) {\n    parts.push(\"cycle\");\n    return;\n  }\n  seen.add(value);\n\n  if (Array.isArray(value)) {\n    parts.push(\"array\", String(value.length));\n    for (const item of value) {\n      appendStableJsonLikeParts(parts, item, seen);\n    }\n    seen.delete(value);\n    return;\n  }\n\n  if (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n    parts.push(\"object\", \"non-plain\");\n    seen.delete(value);\n    return;\n  }\n\n  const record = value as Record<string, unknown>;\n  const keys = Object.keys(record).toSorted();\n  parts.push(\"object\", String(keys.length));\n  for (const key of keys) {\n    parts.push(\"key\", key);\n    appendStableJsonLikeParts(parts, record[key], seen);\n  }\n  seen.delete(value);\n}\n\nfunction hashStrings(values: ReadonlyArray<string>): string {\n  let hash = TEXT_HASH_SEED;\n  for (const value of values) {\n    hash = hashStringInto(hash, value);\n    hash = hashStringInto(hash, \"\\u0000\");\n  }\n  return hash.toString(16).padStart(8, \"0\");\n}\n\nfunction hashString(value: string): string {\n  return hashStringInto(TEXT_HASH_SEED, value).toString(16).padStart(8, \"0\");\n}\n\nfunction hashStringInto(seed: number, value: string): number {\n  let hash = seed >>> 0;\n  for (let index = 0; index < value.length; index += 1) {\n    hash ^= value.charCodeAt(index);\n    hash = Math.imul(hash, 0x01000193) >>> 0;\n  }\n  return hash >>> 0;\n}\n","import type { OrchestrationEvent } from \"@salchi/contracts\";\n\nexport const ORCHESTRATION_THREAD_DETAIL_EVENT_TYPES = [\n  \"thread.message-sent\",\n  \"thread.turn-queued\",\n  \"thread.queued-turn-updated\",\n  \"thread.queued-turn-cancelled\",\n  \"thread.queued-turn-dispatched\",\n  \"thread.queued-turn-steer-requested\",\n  \"thread.queued-turn-steer-failed\",\n  \"thread.queued-turn-steered\",\n  \"thread.proposed-plan-upserted\",\n  \"thread.activity-appended\",\n  \"thread.turn-diff-completed\",\n  \"thread.reverted\",\n  \"thread.session-set\",\n] as const satisfies ReadonlyArray<OrchestrationEvent[\"type\"]>;\n\nexport type OrchestrationThreadDetailEventType =\n  (typeof ORCHESTRATION_THREAD_DETAIL_EVENT_TYPES)[number];\n\nexport type OrchestrationThreadDetailEvent = Extract<\n  OrchestrationEvent,\n  { type: OrchestrationThreadDetailEventType }\n>;\n\nconst orchestrationThreadDetailEventTypeSet = new Set<OrchestrationEvent[\"type\"]>(\n  ORCHESTRATION_THREAD_DETAIL_EVENT_TYPES,\n);\n\nexport function isOrchestrationThreadDetailEvent(\n  event: OrchestrationEvent,\n): event is OrchestrationThreadDetailEvent {\n  return orchestrationThreadDetailEventTypeSet.has(event.type);\n}\n","/**\n * CheckpointDiffQuery - Query interface for computed checkpoint diffs.\n *\n * Provides read-only diff operations across checkpoint snapshots used by\n * orchestration APIs.\n *\n * @module CheckpointDiffQuery\n */\nimport type {\n  OrchestrationGetFullThreadDiffInput,\n  OrchestrationGetFullThreadDiffResult,\n  OrchestrationGetTurnDiffInput,\n  OrchestrationGetTurnDiffResult,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { CheckpointServiceError } from \"../Errors.ts\";\n\n/**\n * CheckpointDiffQueryShape - Service API for checkpoint diff queries.\n */\nexport interface CheckpointDiffQueryShape {\n  /**\n   * Read the patch diff for a single turn checkpoint transition.\n   *\n   * Verifies checkpoint availability in both projection state and filesystem.\n   */\n  readonly getTurnDiff: (\n    input: OrchestrationGetTurnDiffInput,\n  ) => Effect.Effect<OrchestrationGetTurnDiffResult, CheckpointServiceError>;\n\n  /**\n   * Read the full patch diff across a thread range of checkpoints.\n   *\n   * Delegates to turn diff with `fromTurnCount = 0`.\n   */\n  readonly getFullThreadDiff: (\n    input: OrchestrationGetFullThreadDiffInput,\n  ) => Effect.Effect<OrchestrationGetFullThreadDiffResult, CheckpointServiceError>;\n}\n\n/**\n * CheckpointDiffQuery - Service tag for checkpoint diff queries.\n */\nexport class CheckpointDiffQuery extends Context.Service<\n  CheckpointDiffQuery,\n  CheckpointDiffQueryShape\n>()(\"salchi/checkpointing/Services/CheckpointDiffQuery\") {}\n","import * as net from \"node:net\";\n\nexport interface ProbeTarget {\n  /** Host to open the TCP connection against (already normalized for connect). */\n  readonly host: string;\n  readonly port: number;\n}\n\nexport interface ProbeDevServerUrlOptions {\n  readonly timeoutMs?: number;\n  /** Injectable connector for tests. Defaults to a real `net` TCP connect. */\n  readonly connect?: (target: ProbeTarget, timeoutMs: number) => Promise<boolean>;\n}\n\nexport const DEFAULT_DEV_SERVER_PROBE_TIMEOUT_MS = 1_500;\n\nfunction normalizeHostname(hostname: string): string {\n  return hostname.toLowerCase().replace(/^\\[(.*)\\]$/, \"$1\");\n}\n\nfunction parseIpv4Octets(hostname: string): readonly number[] | null {\n  const parts = hostname.split(\".\");\n  if (parts.length !== 4) return null;\n  const octets: number[] = [];\n  for (const part of parts) {\n    if (!/^\\d{1,3}$/.test(part)) return null;\n    const value = Number(part);\n    if (value < 0 || value > 255) return null;\n    octets.push(value);\n  }\n  return octets;\n}\n\n/**\n * Allow only loopback, RFC1918, CGNAT (100.64/10) and local dev hostnames.\n * Link-local (`169.254.0.0/16` — cloud metadata) and every public host are\n * rejected so this probe cannot be turned into an SSRF / metadata oracle.\n */\nfunction isAllowedProbeIpv4(octets: readonly number[]): boolean {\n  const [first = 0, second = 0] = octets;\n  if (first === 127 || first === 10) return true;\n  if (first === 0) return true; // 0.0.0.0 — normalized to loopback before connect\n  if (first === 192 && second === 168) return true;\n  if (first === 172 && second >= 16 && second <= 31) return true;\n  if (first === 100 && second >= 64 && second <= 127) return true;\n  return false;\n}\n\nfunction isAllowedProbeHostname(hostname: string): boolean {\n  const host = normalizeHostname(hostname);\n  if (\n    host === \"localhost\" ||\n    host.endsWith(\".localhost\") ||\n    host === \"::1\" ||\n    host === \"::\" ||\n    host === \"host.docker.internal\" ||\n    host.endsWith(\".local\")\n  ) {\n    return true;\n  }\n  const octets = parseIpv4Octets(host);\n  return octets !== null && isAllowedProbeIpv4(octets);\n}\n\n/**\n * Validate and normalize a dev-server URL into a TCP connect target, or return\n * `null` when the URL is malformed, uses a non-web scheme, targets a host\n * outside the local/private allowlist, or lacks a usable port.\n */\nexport function resolveProbeTarget(url: string): ProbeTarget | null {\n  let parsed: URL;\n  try {\n    parsed = new URL(url);\n  } catch {\n    return null;\n  }\n\n  if (\n    parsed.protocol !== \"http:\" &&\n    parsed.protocol !== \"https:\" &&\n    parsed.protocol !== \"ws:\" &&\n    parsed.protocol !== \"wss:\"\n  ) {\n    return null;\n  }\n\n  const hostname = normalizeHostname(parsed.hostname);\n  if (hostname.length === 0 || !isAllowedProbeHostname(hostname)) {\n    return null;\n  }\n\n  const isSecureProtocol = parsed.protocol === \"https:\" || parsed.protocol === \"wss:\";\n  const portText = parsed.port.length > 0 ? parsed.port : isSecureProtocol ? \"443\" : \"80\";\n  const port = Number(portText);\n  if (!Number.isInteger(port) || port < 1 || port > 65_535) {\n    return null;\n  }\n\n  // Wildcard bind addresses are not connectable; dial loopback instead.\n  const connectHost = hostname === \"0.0.0.0\" ? \"127.0.0.1\" : hostname === \"::\" ? \"::1\" : hostname;\n\n  return { host: connectHost, port };\n}\n\nfunction connectTcp(target: ProbeTarget, timeoutMs: number): Promise<boolean> {\n  return new Promise<boolean>((resolve) => {\n    let settled = false;\n    const finish = (reachable: boolean) => {\n      if (settled) return;\n      settled = true;\n      socket.destroy();\n      resolve(reachable);\n    };\n\n    const socket = net.createConnection({ host: target.host, port: target.port });\n    socket.setTimeout(timeoutMs);\n    socket.once(\"connect\", () => finish(true));\n    socket.once(\"timeout\", () => finish(false));\n    socket.once(\"error\", () => finish(false));\n  });\n}\n\n/**\n * Probe whether a dev-server URL is currently accepting TCP connections.\n *\n * This performs a raw TCP connect only — no request is sent and no response is\n * read — so the sole observable result is the returned `reachable` boolean.\n * Disallowed/invalid hosts resolve to `false` without any connection attempt.\n */\nexport async function probeDevServerUrl(\n  url: string,\n  options: ProbeDevServerUrlOptions = {},\n): Promise<boolean> {\n  const target = resolveProbeTarget(url);\n  if (!target) {\n    return false;\n  }\n  const timeoutMs = options.timeoutMs ?? DEFAULT_DEV_SERVER_PROBE_TIMEOUT_MS;\n  const connect = options.connect ?? connectTcp;\n  return connect(target, timeoutMs);\n}\n","import type { ThemeTokenColor } from \"@salchi/contracts\";\n\nexport const THEME_PREVIEW_COLOR_KEYS = {\n  background: [\"editor.background\"],\n  foreground: [\"editor.foreground\", \"foreground\"],\n  chrome: [\"titleBar.activeBackground\", \"editorGroupHeader.tabsBackground\", \"sideBar.background\"],\n  chromeForeground: [\"titleBar.activeForeground\", \"sideBar.foreground\", \"foreground\"],\n  panel: [\"sideBar.background\", \"editor.background\"],\n  tabActive: [\"tab.activeBackground\", \"editor.background\"],\n  tabInactive: [\"tab.inactiveBackground\", \"editorGroupHeader.tabsBackground\", \"sideBar.background\"],\n  border: [\"panel.border\", \"editorGroup.border\", \"tab.border\", \"sideBar.border\"],\n  accent: [\"button.background\", \"focusBorder\", \"activityBarBadge.background\"],\n  muted: [\"descriptionForeground\", \"input.placeholderForeground\"],\n  activityBar: [\"activityBar.background\", \"sideBar.background\"],\n  activityBarForeground: [\"activityBar.foreground\", \"sideBar.foreground\", \"foreground\"],\n  statusBar: [\n    \"statusBar.background\",\n    \"titleBar.activeBackground\",\n    \"editorGroupHeader.tabsBackground\",\n  ],\n  statusForeground: [\"statusBar.foreground\", \"titleBar.activeForeground\", \"foreground\"],\n  // Diff accents for the preview's code panel. We read the theme's chart/terminal\n  // greens and reds (already kept by pruning) rather than the alpha-blended\n  // diffEditor.* line backgrounds, which are often near-invisible on their own.\n  added: [\"charts.green\", \"terminal.ansiGreen\"],\n  removed: [\"charts.red\", \"terminal.ansiRed\"],\n} as const;\n\nexport const THEME_PREVIEW_SWATCH_COLOR_KEYS = [\n  \"charts.blue\",\n  \"charts.green\",\n  \"charts.yellow\",\n  \"charts.red\",\n  \"terminal.ansiBlue\",\n  \"terminal.ansiGreen\",\n  \"terminal.ansiYellow\",\n  \"terminal.ansiRed\",\n] as const;\n\nexport const THEME_PREVIEW_TOKEN_SCOPES = {\n  keyword: [\"keyword\", \"storage\", \"storage.type\", \"storage.modifier\"],\n  string: [\"string\", \"constant.character\"],\n  function: [\"entity.name.function\", \"support.function\", \"meta.function-call\"],\n  variable: [\"variable\", \"variable.other\", \"variable.parameter\"],\n  property: [\"variable.other.property\", \"support.type.property-name\", \"meta.object-literal.key\"],\n  number: [\"constant.numeric\", \"constant.language\"],\n  comment: [\"comment\", \"punctuation.definition.comment\"],\n  operator: [\"keyword.operator\", \"punctuation.separator\"],\n  punctuation: [\"punctuation\", \"meta.brace\"],\n} as const;\n\nfunction normalizeColor(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  if (!trimmed) return undefined;\n  if (trimmed === \"transparent\" || trimmed === \"#0000\" || trimmed === \"#00000000\") {\n    return undefined;\n  }\n  return trimmed;\n}\n\nfunction parseRuleScopes(scope: string | readonly string[] | undefined): readonly string[] {\n  if (!scope) return [];\n  const rawScopes = typeof scope === \"string\" ? scope.split(\",\") : scope;\n  return rawScopes.map((value) => value.trim()).filter(Boolean);\n}\n\n/**\n * Score how well a theme rule's scope applies to a representative preview scope,\n * mirroring TextMate precedence so previews pick the color the real highlighter\n * would actually paint. Returns `null` when the rule does not apply at all.\n *\n * Higher is better:\n *  - an exact match (`keyword` for requested `keyword`) is strongest;\n *  - an *ancestor* rule (`keyword` for requested `keyword.control`) genuinely\n *    applies to the requested scope, and a more specific ancestor wins;\n *  - a *descendant* rule (`keyword.operator.quantifier.regexp` for requested\n *    `keyword`) is only a weak last resort — it does not color the bare scope in\n *    a real grammar — and among descendants the shallowest one wins.\n *\n * The descendant case exists so themes that only define narrow sub-scopes still\n * produce a preview color, but it must never outrank an exact/ancestor match.\n */\nexport function scoreThemePreviewScopeMatch(\n  ruleScope: string,\n  requestedScope: string,\n): number | null {\n  if (ruleScope === requestedScope) return 1000;\n  const ruleDepth = ruleScope.split(\".\").length;\n  if (requestedScope.startsWith(`${ruleScope}.`)) return 500 + ruleDepth;\n  if (ruleScope.startsWith(`${requestedScope}.`)) return 100 - ruleDepth;\n  return null;\n}\n\nexport function themePreviewScopeMatches(ruleScope: string, requestedScope: string): boolean {\n  return scoreThemePreviewScopeMatch(ruleScope, requestedScope) !== null;\n}\n\nexport function pruneThemePreviewColors(\n  colors: Readonly<Record<string, string>>,\n): Record<string, string> {\n  const keys = new Set<string>();\n  for (const candidates of Object.values(THEME_PREVIEW_COLOR_KEYS)) {\n    for (const key of candidates) keys.add(key);\n  }\n  for (const key of THEME_PREVIEW_SWATCH_COLOR_KEYS) keys.add(key);\n\n  const result: Record<string, string> = {};\n  for (const key of keys) {\n    const color = normalizeColor(colors[key]);\n    if (color) result[key] = color;\n  }\n  return result;\n}\n\nexport function pruneThemePreviewTokenColors(\n  tokenColors: readonly ThemeTokenColor[],\n): ThemeTokenColor[] {\n  const requestedScopes = Object.values(THEME_PREVIEW_TOKEN_SCOPES).flat();\n  return tokenColors.filter((rule) => {\n    const foreground = normalizeColor(rule.settings.foreground);\n    if (!foreground) return false;\n\n    const ruleScopes = parseRuleScopes(rule.scope);\n    return ruleScopes.some((ruleScope) =>\n      requestedScopes.some((requestedScope) => themePreviewScopeMatches(ruleScope, requestedScope)),\n    );\n  });\n}\n","import { inflateRawSync } from \"node:zlib\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\nimport { pruneThemePreviewColors, pruneThemePreviewTokenColors } from \"@salchi/shared/themePreview\";\n\nimport {\n  ThemeProviderError,\n  type ImportedTheme,\n  type ThemeImportInput,\n  type ThemeImportResult,\n  type ThemePreviewResult,\n  type ThemePreviewTheme,\n  type ThemeSearchInput,\n  type ThemeSearchResult,\n  type ThemeTokenColor,\n} from \"@salchi/contracts\";\n\n/**\n * Open VSX (https://open-vsx.org) theme provider. The registry serves each\n * extension package as a VSIX. Imported themes are normalized into the same\n * `colors` shape the app's themeMapping consumes, with TextMate token colors\n * preserved for the preview route.\n */\n\nconst OPEN_VSX_API = \"https://open-vsx.org/api\";\nconst DEFAULT_SEARCH_SIZE = 25;\nconst MAX_SEARCH_SIZE = 50;\nconst REQUEST_TIMEOUT_MS = 15_000;\nconst MAX_VSIX_DOWNLOAD_BYTES = 50 * 1024 * 1024;\nconst MAX_ZIP_ENTRY_COMPRESSED_BYTES = 16 * 1024 * 1024;\nconst MAX_ZIP_ENTRY_EXPANDED_BYTES = 16 * 1024 * 1024;\nconst THEME_PREVIEW_CACHE_MIN_THEMES = 100;\nconst THEME_PREVIEW_CACHE_MAX_THEMES = 1_000;\nconst THEME_PREVIEW_CACHE_TARGET_BYTES = 12 * 1024 * 1024;\nconst THEME_IMPORT_CACHE_MIN_THEMES = 100;\nconst THEME_IMPORT_CACHE_MAX_THEMES = 250;\nconst THEME_IMPORT_CACHE_TARGET_BYTES = 25 * 1024 * 1024;\nconst ZIP_EOCD_SIGNATURE = 0x06054b50;\nconst ZIP_CENTRAL_DIRECTORY_SIGNATURE = 0x02014b50;\nconst ZIP_LOCAL_FILE_SIGNATURE = 0x04034b50;\nconst ZIP_COMPRESSION_STORED = 0;\nconst ZIP_COMPRESSION_DEFLATED = 8;\n\ntype ThemeOperation = \"search\" | \"preview\" | \"import\";\n\ninterface CacheableThemeResult {\n  readonly themes: readonly unknown[];\n}\n\ninterface CachedThemeResult<TResult extends CacheableThemeResult> {\n  readonly result: TResult;\n  readonly themeCount: number;\n  readonly byteSize: number;\n}\n\ninterface ThemeResultCache<TResult extends CacheableThemeResult> {\n  readonly entries: Map<string, CachedThemeResult<TResult>>;\n  themeCount: number;\n  byteCount: number;\n  readonly minThemes: number;\n  readonly maxThemes: number;\n  readonly targetBytes: number;\n}\n\ninterface ZipEntry {\n  readonly name: string;\n  readonly compressionMethod: number;\n  readonly compressedSize: number;\n  readonly uncompressedSize: number;\n  readonly localHeaderOffset: number;\n}\n\nconst themePreviewCache = createThemeResultCache<ThemePreviewResult>({\n  minThemes: THEME_PREVIEW_CACHE_MIN_THEMES,\n  maxThemes: THEME_PREVIEW_CACHE_MAX_THEMES,\n  targetBytes: THEME_PREVIEW_CACHE_TARGET_BYTES,\n});\nconst themeImportCache = createThemeResultCache<ThemeImportResult>({\n  minThemes: THEME_IMPORT_CACHE_MIN_THEMES,\n  maxThemes: THEME_IMPORT_CACHE_MAX_THEMES,\n  targetBytes: THEME_IMPORT_CACHE_TARGET_BYTES,\n});\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.min(max, Math.max(min, value));\n}\n\nfunction trimToFallback(value: unknown, fallback: string): string {\n  const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n  return trimmed.length > 0 ? trimmed : fallback;\n}\n\nfunction themeError(operation: ThemeOperation, detail: string, cause?: unknown) {\n  return new ThemeProviderError({ operation, detail, cause });\n}\n\nfunction parseContentLength(headers: Readonly<Record<string, string | undefined>>): number | null {\n  const value = headers[\"content-length\"];\n  if (value === undefined) return null;\n  const bytes = Number(value);\n  return Number.isFinite(bytes) && bytes >= 0 ? bytes : null;\n}\n\nfunction assertBufferRange(\n  buffer: Buffer,\n  offset: number,\n  byteLength: number,\n  detail: string,\n): void {\n  if (\n    !Number.isInteger(offset) ||\n    !Number.isInteger(byteLength) ||\n    offset < 0 ||\n    byteLength < 0 ||\n    offset + byteLength > buffer.length\n  ) {\n    throw new Error(detail);\n  }\n}\n\n/**\n * Tolerant JSON parser for VS Code theme files, which are frequently JSONC\n * (line/block comments and trailing commas). Strips comments and trailing\n * commas while preserving string contents, then parses.\n */\nexport function parseJsonc(input: string): unknown {\n  let out = \"\";\n  let inString = false;\n  let stringQuote = \"\";\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < input.length; i++) {\n    const ch = input[i];\n    const next = input[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\") {\n        inLineComment = false;\n        out += ch;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i++;\n      }\n      continue;\n    }\n    if (inString) {\n      out += ch;\n      if (ch === \"\\\\\") {\n        out += next ?? \"\";\n        i++;\n      } else if (ch === stringQuote) {\n        inString = false;\n      }\n      continue;\n    }\n    if (ch === '\"' || ch === \"'\") {\n      inString = true;\n      stringQuote = ch;\n      out += ch;\n      continue;\n    }\n    if (ch === \"/\" && next === \"/\") {\n      inLineComment = true;\n      i++;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i++;\n      continue;\n    }\n    out += ch;\n  }\n\n  const withoutTrailingCommas = out.replace(/,(\\s*[}\\]])/g, \"$1\");\n  return JSON.parse(withoutTrailingCommas);\n}\n\nconst fetchJsonc = Effect.fn(\"openVsx.fetchJsonc\")(function* (\n  url: string,\n  operation: ThemeOperation,\n) {\n  const client = yield* HttpClient.HttpClient;\n  const request = HttpClientRequest.get(url).pipe(\n    HttpClientRequest.setHeader(\"accept\", \"application/json\"),\n  );\n  const response = yield* client.execute(request).pipe(\n    Effect.timeoutOption(REQUEST_TIMEOUT_MS),\n    Effect.mapError((cause) => themeError(operation, `request failed for ${url}`, cause)),\n  );\n  if (Option.isNone(response)) {\n    return yield* themeError(operation, `request timed out for ${url}`);\n  }\n  const httpResponse = response.value;\n  if (httpResponse.status < 200 || httpResponse.status >= 300) {\n    return yield* themeError(operation, `HTTP ${httpResponse.status} for ${url}`);\n  }\n  const text = yield* httpResponse.text.pipe(\n    Effect.mapError((cause) => themeError(operation, `failed reading ${url}`, cause)),\n  );\n  return yield* Effect.try({\n    try: () => parseJsonc(text),\n    catch: (cause) => themeError(operation, `invalid JSON from ${url}`, cause),\n  });\n});\n\nconst fetchBinary = Effect.fn(\"openVsx.fetchBinary\")(function* (\n  url: string,\n  operation: ThemeOperation,\n) {\n  const client = yield* HttpClient.HttpClient;\n  const request = HttpClientRequest.get(url).pipe(\n    HttpClientRequest.setHeader(\"accept\", \"application/octet-stream\"),\n  );\n  const response = yield* client.execute(request).pipe(\n    Effect.timeoutOption(REQUEST_TIMEOUT_MS),\n    Effect.mapError((cause) => themeError(operation, `request failed for ${url}`, cause)),\n  );\n  if (Option.isNone(response)) {\n    return yield* themeError(operation, `request timed out for ${url}`);\n  }\n  const httpResponse = response.value;\n  if (httpResponse.status < 200 || httpResponse.status >= 300) {\n    return yield* themeError(operation, `HTTP ${httpResponse.status} for ${url}`);\n  }\n  const contentLength = parseContentLength(httpResponse.headers);\n  if (contentLength !== null && contentLength > MAX_VSIX_DOWNLOAD_BYTES) {\n    return yield* themeError(\n      operation,\n      `VSIX download exceeded ${MAX_VSIX_DOWNLOAD_BYTES} bytes for ${url}`,\n    );\n  }\n  const arrayBuffer = yield* httpResponse.arrayBuffer.pipe(\n    Effect.mapError((cause) => themeError(operation, `failed reading ${url}`, cause)),\n  );\n  if (arrayBuffer.byteLength > MAX_VSIX_DOWNLOAD_BYTES) {\n    return yield* themeError(\n      operation,\n      `VSIX download exceeded ${MAX_VSIX_DOWNLOAD_BYTES} bytes for ${url}`,\n    );\n  }\n  return Buffer.from(arrayBuffer);\n});\n\nfunction findEndOfCentralDirectory(buffer: Buffer): number {\n  const maxCommentLength = 0xffff;\n  const minOffset = Math.max(0, buffer.length - maxCommentLength - 22);\n  for (let offset = buffer.length - 22; offset >= minOffset; offset -= 1) {\n    if (buffer.readUInt32LE(offset) === ZIP_EOCD_SIGNATURE) {\n      return offset;\n    }\n  }\n  throw new Error(\"Zip end of central directory was not found\");\n}\n\nfunction readZipEntries(buffer: Buffer): Map<string, ZipEntry> {\n  const eocdOffset = findEndOfCentralDirectory(buffer);\n  const entryCount = buffer.readUInt16LE(eocdOffset + 10);\n  const centralDirectoryOffset = buffer.readUInt32LE(eocdOffset + 16);\n  const entries = new Map<string, ZipEntry>();\n  let offset = centralDirectoryOffset;\n\n  for (let index = 0; index < entryCount; index += 1) {\n    if (buffer.readUInt32LE(offset) !== ZIP_CENTRAL_DIRECTORY_SIGNATURE) {\n      throw new Error(\"Invalid zip central directory header\");\n    }\n\n    const compressionMethod = buffer.readUInt16LE(offset + 10);\n    const compressedSize = buffer.readUInt32LE(offset + 20);\n    const uncompressedSize = buffer.readUInt32LE(offset + 24);\n    const fileNameLength = buffer.readUInt16LE(offset + 28);\n    const extraFieldLength = buffer.readUInt16LE(offset + 30);\n    const fileCommentLength = buffer.readUInt16LE(offset + 32);\n    const localHeaderOffset = buffer.readUInt32LE(offset + 42);\n    const nameStart = offset + 46;\n    const name = buffer.toString(\"utf8\", nameStart, nameStart + fileNameLength);\n\n    if (!name.endsWith(\"/\")) {\n      entries.set(name, {\n        name,\n        compressionMethod,\n        compressedSize,\n        uncompressedSize,\n        localHeaderOffset,\n      });\n    }\n\n    offset = nameStart + fileNameLength + extraFieldLength + fileCommentLength;\n  }\n\n  return entries;\n}\n\nfunction readZipEntry(buffer: Buffer, entry: ZipEntry): Buffer {\n  const localHeaderOffset = entry.localHeaderOffset;\n  assertBufferRange(buffer, localHeaderOffset, 30, `Invalid zip local header for ${entry.name}`);\n  if (buffer.readUInt32LE(localHeaderOffset) !== ZIP_LOCAL_FILE_SIGNATURE) {\n    throw new Error(`Invalid zip local header for ${entry.name}`);\n  }\n  if (entry.compressedSize > MAX_ZIP_ENTRY_COMPRESSED_BYTES) {\n    throw new Error(\n      `Compressed zip entry ${entry.name} exceeded ${MAX_ZIP_ENTRY_COMPRESSED_BYTES} bytes`,\n    );\n  }\n  if (entry.uncompressedSize > MAX_ZIP_ENTRY_EXPANDED_BYTES) {\n    throw new Error(\n      `Expanded zip entry ${entry.name} exceeded ${MAX_ZIP_ENTRY_EXPANDED_BYTES} bytes`,\n    );\n  }\n\n  const fileNameLength = buffer.readUInt16LE(localHeaderOffset + 26);\n  const extraFieldLength = buffer.readUInt16LE(localHeaderOffset + 28);\n  const dataStart = localHeaderOffset + 30 + fileNameLength + extraFieldLength;\n  assertBufferRange(\n    buffer,\n    dataStart,\n    entry.compressedSize,\n    `Invalid zip data range for ${entry.name}`,\n  );\n  const compressed = buffer.subarray(dataStart, dataStart + entry.compressedSize);\n\n  if (entry.compressionMethod === ZIP_COMPRESSION_STORED) {\n    return Buffer.from(compressed);\n  }\n  if (entry.compressionMethod === ZIP_COMPRESSION_DEFLATED) {\n    const inflated = inflateRawSync(compressed);\n    if (inflated.byteLength > MAX_ZIP_ENTRY_EXPANDED_BYTES) {\n      throw new Error(\n        `Expanded zip entry ${entry.name} exceeded ${MAX_ZIP_ENTRY_EXPANDED_BYTES} bytes`,\n      );\n    }\n    return inflated;\n  }\n  throw new Error(\n    `Unsupported zip compression method ${entry.compressionMethod} for ${entry.name}`,\n  );\n}\n\nexport function readZipTextFile(buffer: Buffer, filePath: string): string | undefined {\n  const entries = readZipEntries(buffer);\n  const normalizedPath = filePath.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n  const entry =\n    entries.get(normalizedPath) ??\n    [...entries.values()].find(\n      (candidate) => candidate.name.toLowerCase() === normalizedPath.toLowerCase(),\n    );\n  if (!entry) return undefined;\n  return readZipEntry(buffer, entry).toString(\"utf8\");\n}\n\nfunction normalizeExtensionPath(filePath: string): string {\n  const segments: string[] = [];\n  for (const segment of filePath.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\").split(\"/\")) {\n    if (segment.length === 0 || segment === \".\") continue;\n    if (segment === \"..\") {\n      if (segments.length === 0) {\n        throw new Error(`Invalid extension path: ${filePath}`);\n      }\n      segments.pop();\n      continue;\n    }\n    segments.push(segment);\n  }\n  if (segments.length === 0) {\n    throw new Error(`Invalid extension path: ${filePath}`);\n  }\n  return segments.join(\"/\");\n}\n\nfunction resolveThemeIncludePath(themePath: string, include: string): string {\n  const normalizedThemePath = normalizeExtensionPath(themePath);\n  const slashIndex = normalizedThemePath.lastIndexOf(\"/\");\n  const themeDir = slashIndex === -1 ? \"\" : normalizedThemePath.slice(0, slashIndex);\n  return normalizeExtensionPath(themeDir.length === 0 ? include : `${themeDir}/${include}`);\n}\n\nfunction readExtensionJsonc(vsix: Buffer, filePath: string): unknown {\n  const normalizedPath = normalizeExtensionPath(filePath);\n  const text = readZipTextFile(vsix, `extension/${normalizedPath}`);\n  if (text === undefined) {\n    throw new Error(`Could not find ${normalizedPath} in VSIX`);\n  }\n  return parseJsonc(text);\n}\n\nfunction importCacheKey(namespace: string, name: string, version: string): string {\n  return `${namespace}/${name}/${version}`;\n}\n\nfunction createThemeResultCache<TResult extends CacheableThemeResult>(options: {\n  readonly minThemes: number;\n  readonly maxThemes: number;\n  readonly targetBytes: number;\n}): ThemeResultCache<TResult> {\n  return {\n    entries: new Map(),\n    themeCount: 0,\n    byteCount: 0,\n    minThemes: options.minThemes,\n    maxThemes: options.maxThemes,\n    targetBytes: options.targetBytes,\n  };\n}\n\nfunction getCachedThemeResult<TResult extends CacheableThemeResult>(\n  cache: ThemeResultCache<TResult>,\n  key: string,\n): TResult | undefined {\n  const cached = cache.entries.get(key);\n  if (!cached) return undefined;\n  cache.entries.delete(key);\n  cache.entries.set(key, cached);\n  return cached.result;\n}\n\nfunction estimateCacheByteSize(result: CacheableThemeResult): number {\n  return Buffer.byteLength(JSON.stringify(result), \"utf8\");\n}\n\nfunction pruneThemeResultCache<TResult extends CacheableThemeResult>(\n  cache: ThemeResultCache<TResult>,\n) {\n  while (\n    cache.themeCount > cache.minThemes &&\n    (cache.themeCount > cache.maxThemes || cache.byteCount > cache.targetBytes)\n  ) {\n    const oldestKey = cache.entries.keys().next().value;\n    if (oldestKey === undefined) return;\n    const oldest = cache.entries.get(oldestKey);\n    if (!oldest) {\n      cache.entries.delete(oldestKey);\n      continue;\n    }\n    cache.entries.delete(oldestKey);\n    cache.themeCount -= oldest.themeCount;\n    cache.byteCount -= oldest.byteSize;\n  }\n}\n\nfunction setCachedThemeResult<TResult extends CacheableThemeResult>(\n  cache: ThemeResultCache<TResult>,\n  key: string,\n  result: TResult,\n) {\n  const existing = cache.entries.get(key);\n  if (existing) {\n    cache.themeCount -= existing.themeCount;\n    cache.byteCount -= existing.byteSize;\n    cache.entries.delete(key);\n  }\n\n  const cached = {\n    result,\n    themeCount: result.themes.length,\n    byteSize: estimateCacheByteSize(result),\n  } satisfies CachedThemeResult<TResult>;\n  cache.entries.set(key, cached);\n  cache.themeCount += cached.themeCount;\n  cache.byteCount += cached.byteSize;\n  pruneThemeResultCache(cache);\n}\n\nfunction clearThemeResultCache<TResult extends CacheableThemeResult>(\n  cache: ThemeResultCache<TResult>,\n) {\n  cache.entries.clear();\n  cache.themeCount = 0;\n  cache.byteCount = 0;\n}\n\nfunction getThemeResultCacheStats<TResult extends CacheableThemeResult>(\n  cache: ThemeResultCache<TResult>,\n) {\n  return {\n    extensionCount: cache.entries.size,\n    themeCount: cache.themeCount,\n    byteCount: cache.byteCount,\n  };\n}\n\nfunction setCachedThemeImport(key: string, result: ThemeImportResult) {\n  setCachedThemeResult(themeImportCache, key, result);\n}\n\nfunction setCachedThemePreview(key: string, result: ThemePreviewResult) {\n  setCachedThemeResult(themePreviewCache, key, result);\n}\n\nexport function getThemeImportCacheStats() {\n  return getThemeResultCacheStats(themeImportCache);\n}\n\nexport function getThemePreviewCacheStats() {\n  return getThemeResultCacheStats(themePreviewCache);\n}\n\nexport function clearThemeImportCacheForTests() {\n  clearThemeResultCache(themeImportCache);\n}\n\nexport function clearThemePreviewCacheForTests() {\n  clearThemeResultCache(themePreviewCache);\n}\n\nexport function setCachedThemeImportForTests(key: string, result: ThemeImportResult) {\n  setCachedThemeImport(key, result);\n}\n\nexport function setCachedThemePreviewForTests(key: string, result: ThemePreviewResult) {\n  setCachedThemePreview(key, result);\n}\n\ninterface OpenVsxSearchExtension {\n  readonly namespace?: string;\n  readonly name?: string;\n  readonly version?: string;\n  readonly displayName?: string;\n  readonly description?: string;\n  readonly downloadCount?: number;\n}\n\ninterface OpenVsxSearchResponse {\n  readonly totalSize?: number;\n  readonly extensions?: OpenVsxSearchExtension[];\n}\n\nexport function buildThemeSearchUrl(input: ThemeSearchInput): string {\n  const query = input.query?.trim() ?? \"\";\n  const size = clamp(input.size ?? DEFAULT_SEARCH_SIZE, 1, MAX_SEARCH_SIZE);\n  const offset = Math.max(0, Math.trunc(input.offset ?? 0));\n  const sortBy = input.sortBy ?? (query.length > 0 ? \"relevance\" : \"downloadCount\");\n  const params = new URLSearchParams({\n    category: \"Themes\",\n    size: String(size),\n    offset: String(offset),\n    sortBy,\n    includeAllVersions: \"false\",\n  });\n  if (query.length > 0) {\n    params.set(\"query\", query);\n  }\n  return `${OPEN_VSX_API}/-/search?${params.toString()}`;\n}\n\nexport const searchThemes = Effect.fn(\"openVsx.searchThemes\")(function* (input: ThemeSearchInput) {\n  const size = clamp(input.size ?? DEFAULT_SEARCH_SIZE, 1, MAX_SEARCH_SIZE);\n  const offset = Math.max(0, Math.trunc(input.offset ?? 0));\n  const data = (yield* fetchJsonc(buildThemeSearchUrl(input), \"search\")) as OpenVsxSearchResponse;\n\n  const items = (data.extensions ?? [])\n    .filter((ext) => ext.namespace && ext.name && ext.version)\n    .map((ext) => ({\n      namespace: ext.namespace as string,\n      name: ext.name as string,\n      version: ext.version as string,\n      displayName: trimToFallback(ext.displayName, ext.name as string),\n      description: typeof ext.description === \"string\" ? ext.description : undefined,\n      downloadCount:\n        typeof ext.downloadCount === \"number\" ? Math.trunc(ext.downloadCount) : undefined,\n    }));\n  return {\n    items,\n    offset,\n    size,\n    totalSize: typeof data.totalSize === \"number\" ? Math.trunc(data.totalSize) : items.length,\n  } satisfies ThemeSearchResult;\n});\n\ninterface ContributedTheme {\n  readonly label?: string;\n  readonly uiTheme?: string;\n  readonly path?: string;\n}\n\ninterface OpenVsxExtensionMetadata {\n  readonly version?: string;\n  readonly files?: {\n    readonly download?: string;\n  };\n}\n\nfunction uiThemeToMode(uiTheme: string | undefined): \"light\" | \"dark\" {\n  // VS Code: \"vs\"/\"hc-light\" = light, \"vs-dark\"/\"hc-black\" = dark.\n  return uiTheme === \"vs\" || uiTheme === \"hc-light\" ? \"light\" : \"dark\";\n}\n\nfunction extractColors(value: unknown): Record<string, string> {\n  if (!value || typeof value !== \"object\") return {};\n  const colors = (value as { colors?: unknown }).colors;\n  if (!colors || typeof colors !== \"object\") return {};\n  const result: Record<string, string> = {};\n  for (const [key, raw] of Object.entries(colors as Record<string, unknown>)) {\n    if (typeof raw === \"string\" && raw.trim().length > 0) result[key] = raw.trim();\n  }\n  return result;\n}\n\nexport function extractTokenColors(value: unknown): ThemeTokenColor[] {\n  if (!value || typeof value !== \"object\") return [];\n  const tokenColors = (value as { tokenColors?: unknown }).tokenColors;\n  if (!Array.isArray(tokenColors)) return [];\n\n  const result: ThemeTokenColor[] = [];\n  for (const rawRule of tokenColors) {\n    if (!rawRule || typeof rawRule !== \"object\") continue;\n\n    const rawScope = (rawRule as { scope?: unknown }).scope;\n    const scope =\n      typeof rawScope === \"string\"\n        ? rawScope.trim()\n        : Array.isArray(rawScope)\n          ? rawScope\n              .map((item) => (typeof item === \"string\" ? item.trim() : \"\"))\n              .filter((item) => item.length > 0)\n          : undefined;\n    const settings = (rawRule as { settings?: unknown }).settings;\n    if (!settings || typeof settings !== \"object\") continue;\n\n    const foreground = (settings as { foreground?: unknown }).foreground;\n    if (typeof foreground !== \"string\" || foreground.trim().length === 0) continue;\n\n    result.push({\n      ...(scope === undefined || scope.length === 0 ? {} : { scope }),\n      settings: { foreground: foreground.trim() },\n    });\n  }\n\n  return result;\n}\n\ninterface ThemeDefinition {\n  readonly colors: Record<string, string>;\n  readonly tokenColors: ThemeTokenColor[];\n}\n\nfunction extractThemeDefinition(value: unknown): ThemeDefinition {\n  return {\n    colors: extractColors(value),\n    tokenColors: extractTokenColors(value),\n  };\n}\n\nexport function loadThemeDefinitionFromVsix(vsix: Buffer, themePath: string): ThemeDefinition {\n  const includes: unknown[] = [];\n  let currentPath = normalizeExtensionPath(themePath);\n  const seen = new Set<string>();\n\n  for (let depth = 0; depth < 10; depth += 1) {\n    if (seen.has(currentPath)) {\n      throw new Error(`Theme include cycle at ${currentPath}`);\n    }\n    seen.add(currentPath);\n\n    const themeJson = readExtensionJsonc(vsix, currentPath);\n    includes.push(themeJson);\n\n    const include = (themeJson as { include?: unknown }).include;\n    if (typeof include !== \"string\" || include.trim().length === 0) break;\n    currentPath = resolveThemeIncludePath(currentPath, include);\n  }\n\n  let definition: ThemeDefinition = { colors: {}, tokenColors: [] };\n  for (let index = includes.length - 1; index >= 0; index -= 1) {\n    const includeDefinition = extractThemeDefinition(includes[index]);\n    definition = {\n      colors: { ...definition.colors, ...includeDefinition.colors },\n      tokenColors: [...definition.tokenColors, ...includeDefinition.tokenColors],\n    };\n  }\n  return definition;\n}\n\nfunction toThemePreviewTheme(theme: ImportedTheme): ThemePreviewTheme {\n  const tokenColors = theme.tokenColors ? pruneThemePreviewTokenColors(theme.tokenColors) : [];\n  return {\n    id: theme.id,\n    label: theme.label,\n    type: theme.type,\n    colors: pruneThemePreviewColors(theme.colors),\n    ...(tokenColors.length === 0 ? {} : { tokenColors }),\n  };\n}\n\nfunction toThemePreviewResult(result: ThemeImportResult): ThemePreviewResult {\n  return {\n    namespace: result.namespace,\n    name: result.name,\n    version: result.version,\n    themes: result.themes.map(toThemePreviewTheme),\n  };\n}\n\nconst resolveLatestVersion = Effect.fn(\"openVsx.resolveLatestVersion\")(function* (\n  operation: Exclude<ThemeOperation, \"search\">,\n  namespace: string,\n  name: string,\n) {\n  const meta = (yield* fetchJsonc(\n    `${OPEN_VSX_API}/${namespace}/${name}`,\n    operation,\n  )) as OpenVsxExtensionMetadata;\n  if (!meta.version) {\n    return yield* themeError(operation, `Could not resolve a version for ${namespace}.${name}`);\n  }\n  return meta.version;\n});\n\nconst loadThemeImportResult = Effect.fn(\"openVsx.loadThemeImportResult\")(function* (\n  operation: Exclude<ThemeOperation, \"search\">,\n  namespace: string,\n  name: string,\n  version: string,\n) {\n  const metadata = (yield* fetchJsonc(\n    `${OPEN_VSX_API}/${namespace}/${name}/${version}`,\n    operation,\n  )) as OpenVsxExtensionMetadata;\n  const downloadUrl = metadata.files?.download;\n  if (!downloadUrl) {\n    return yield* themeError(operation, `${namespace}.${name} has no VSIX download URL`);\n  }\n\n  const vsix = yield* fetchBinary(downloadUrl, operation);\n\n  const manifestText = yield* Effect.try({\n    try: () => readZipTextFile(vsix, \"extension/package.json\"),\n    catch: (cause) => themeError(operation, `${namespace}.${name} VSIX could not be read`, cause),\n  });\n  if (manifestText === undefined) {\n    return yield* themeError(operation, `${namespace}.${name} VSIX contains no package.json`);\n  }\n  const manifest = (yield* Effect.try({\n    try: () => parseJsonc(manifestText),\n    catch: (cause) => themeError(operation, `${namespace}.${name} package.json is invalid`, cause),\n  })) as {\n    displayName?: string;\n    contributes?: { themes?: ContributedTheme[] };\n  };\n  const contributed = (manifest.contributes?.themes ?? []).filter(\n    (theme) => typeof theme.path === \"string\",\n  );\n  if (contributed.length === 0) {\n    return yield* themeError(operation, `${namespace}.${name} contributes no themes`);\n  }\n\n  const themes: ImportedTheme[] = [];\n  for (const theme of contributed) {\n    const themePath = theme.path as string;\n    if (!themePath.toLowerCase().endsWith(\".json\")) continue;\n    const definition = yield* Effect.try({\n      try: () => loadThemeDefinitionFromVsix(vsix, themePath),\n      catch: (cause) =>\n        themeError(operation, `failed reading ${namespace}.${name} theme ${themePath}`, cause),\n    });\n    if (Object.keys(definition.colors).length === 0 && definition.tokenColors.length === 0) {\n      continue;\n    }\n    const label = trimToFallback(theme.label, trimToFallback(manifest.displayName, name));\n    themes.push({\n      id: `${namespace}.${name}/${label}`,\n      label,\n      type: uiThemeToMode(theme.uiTheme),\n      colors: definition.colors,\n      ...(definition.tokenColors.length === 0 ? {} : { tokenColors: definition.tokenColors }),\n    });\n  }\n\n  if (themes.length === 0) {\n    return yield* themeError(operation, `${namespace}.${name} themes contained no usable colors`);\n  }\n  return { namespace, name, version, themes } satisfies ThemeImportResult;\n});\n\nexport const previewTheme = Effect.fn(\"openVsx.previewTheme\")(function* (input: ThemeImportInput) {\n  const { namespace, name } = input;\n  const version = input.version ?? (yield* resolveLatestVersion(\"preview\", namespace, name));\n  const cacheKey = importCacheKey(namespace, name, version);\n\n  const cachedPreview = getCachedThemeResult(themePreviewCache, cacheKey);\n  if (cachedPreview) return cachedPreview;\n\n  const cachedImport = getCachedThemeResult(themeImportCache, cacheKey);\n  if (cachedImport) {\n    const preview = toThemePreviewResult(cachedImport);\n    setCachedThemePreview(cacheKey, preview);\n    return preview;\n  }\n\n  const result = yield* loadThemeImportResult(\"preview\", namespace, name, version);\n  const preview = toThemePreviewResult(result);\n  setCachedThemePreview(cacheKey, preview);\n  return preview;\n});\n\nexport const importTheme = Effect.fn(\"openVsx.importTheme\")(function* (input: ThemeImportInput) {\n  const { namespace, name } = input;\n  const version = input.version ?? (yield* resolveLatestVersion(\"import\", namespace, name));\n  const cacheKey = importCacheKey(namespace, name, version);\n  const cached = getCachedThemeResult(themeImportCache, cacheKey);\n  if (cached) return cached;\n\n  const result = yield* loadThemeImportResult(\"import\", namespace, name, version);\n  setCachedThemeImport(cacheKey, result);\n  return result;\n});\n","import {\n  type KeybindingRule,\n  type KeybindingShortcut,\n  type KeybindingWhenNode,\n  MAX_KEYBINDINGS_COUNT,\n  MAX_WHEN_EXPRESSION_DEPTH,\n  MODEL_PICKER_JUMP_KEYBINDING_COMMANDS,\n  type ResolvedKeybindingRule,\n  type ResolvedKeybindingsConfig,\n  THREAD_JUMP_KEYBINDING_COMMANDS,\n} from \"@salchi/contracts\";\n\ntype WhenToken =\n  | { type: \"identifier\"; value: string }\n  | { type: \"not\" }\n  | { type: \"and\" }\n  | { type: \"or\" }\n  | { type: \"lparen\" }\n  | { type: \"rparen\" };\n\nexport const DEFAULT_KEYBINDINGS: ReadonlyArray<KeybindingRule> = [\n  { key: \"mod+j\", command: \"terminal.toggle\" },\n  { key: \"mod+d\", command: \"terminal.split\", when: \"terminalFocus\" },\n  { key: \"mod+n\", command: \"terminal.new\", when: \"terminalFocus\" },\n  { key: \"mod+w\", command: \"terminal.close\", when: \"terminalFocus\" },\n  { key: \"mod+d\", command: \"diff.toggle\", when: \"!terminalFocus\" },\n  { key: \"mod+shift+d\", command: \"sourceControl.toggle\", when: \"!terminalFocus\" },\n  { key: \"mod+k\", command: \"commandPalette.toggle\", when: \"!terminalFocus\" },\n  { key: \"mod+n\", command: \"chat.new\", when: \"!terminalFocus\" },\n  { key: \"mod+shift+o\", command: \"chat.new\", when: \"!terminalFocus\" },\n  { key: \"mod+shift+n\", command: \"chat.newLocal\", when: \"!terminalFocus\" },\n  { key: \"mod+shift+m\", command: \"modelPicker.toggle\", when: \"!terminalFocus\" },\n  { key: \"mod+o\", command: \"editor.openFavorite\" },\n  { key: \"mod+shift+[\", command: \"thread.previous\" },\n  { key: \"mod+shift+]\", command: \"thread.next\" },\n  ...THREAD_JUMP_KEYBINDING_COMMANDS.map((command, index) => ({\n    key: `mod+${index + 1}`,\n    command,\n  })),\n  ...MODEL_PICKER_JUMP_KEYBINDING_COMMANDS.map((command, index) => ({\n    key: `mod+${index + 1}`,\n    command,\n    when: \"modelPickerOpen\",\n  })),\n];\n\nfunction normalizeKeyToken(token: string): string {\n  if (token === \"space\") return \" \";\n  if (token === \"esc\") return \"escape\";\n  return token;\n}\n\nexport function parseKeybindingShortcut(value: string): KeybindingShortcut | null {\n  const rawTokens = value\n    .toLowerCase()\n    .split(\"+\")\n    .map((token) => token.trim());\n  const tokens = [...rawTokens];\n  let trailingEmptyCount = 0;\n  while (tokens[tokens.length - 1] === \"\") {\n    trailingEmptyCount += 1;\n    tokens.pop();\n  }\n  if (trailingEmptyCount > 0) {\n    tokens.push(\"+\");\n  }\n  if (tokens.some((token) => token.length === 0)) {\n    return null;\n  }\n  if (tokens.length === 0) return null;\n\n  let key: string | null = null;\n  let metaKey = false;\n  let ctrlKey = false;\n  let shiftKey = false;\n  let altKey = false;\n  let modKey = false;\n\n  for (const token of tokens) {\n    switch (token) {\n      case \"cmd\":\n      case \"meta\":\n        metaKey = true;\n        break;\n      case \"ctrl\":\n      case \"control\":\n        ctrlKey = true;\n        break;\n      case \"shift\":\n        shiftKey = true;\n        break;\n      case \"alt\":\n      case \"option\":\n        altKey = true;\n        break;\n      case \"mod\":\n        modKey = true;\n        break;\n      default: {\n        if (key !== null) return null;\n        key = normalizeKeyToken(token);\n      }\n    }\n  }\n\n  if (key === null) return null;\n  return {\n    key,\n    metaKey,\n    ctrlKey,\n    shiftKey,\n    altKey,\n    modKey,\n  };\n}\n\nfunction tokenizeWhenExpression(expression: string): WhenToken[] | null {\n  const tokens: WhenToken[] = [];\n  let index = 0;\n\n  while (index < expression.length) {\n    const current = expression[index];\n    if (!current) break;\n\n    if (/\\s/.test(current)) {\n      index += 1;\n      continue;\n    }\n    if (expression.startsWith(\"&&\", index)) {\n      tokens.push({ type: \"and\" });\n      index += 2;\n      continue;\n    }\n    if (expression.startsWith(\"||\", index)) {\n      tokens.push({ type: \"or\" });\n      index += 2;\n      continue;\n    }\n    if (current === \"!\") {\n      tokens.push({ type: \"not\" });\n      index += 1;\n      continue;\n    }\n    if (current === \"(\") {\n      tokens.push({ type: \"lparen\" });\n      index += 1;\n      continue;\n    }\n    if (current === \")\") {\n      tokens.push({ type: \"rparen\" });\n      index += 1;\n      continue;\n    }\n\n    const identifier = /^[A-Za-z_][A-Za-z0-9_.-]*/.exec(expression.slice(index));\n    if (!identifier) {\n      return null;\n    }\n    tokens.push({ type: \"identifier\", value: identifier[0] });\n    index += identifier[0].length;\n  }\n\n  return tokens;\n}\n\nexport function parseKeybindingWhenExpression(expression: string): KeybindingWhenNode | null {\n  const tokens = tokenizeWhenExpression(expression);\n  if (!tokens || tokens.length === 0) return null;\n  let index = 0;\n\n  const parsePrimary = (depth: number): KeybindingWhenNode | null => {\n    if (depth > MAX_WHEN_EXPRESSION_DEPTH) {\n      return null;\n    }\n    const token = tokens[index];\n    if (!token) return null;\n\n    if (token.type === \"identifier\") {\n      index += 1;\n      return { type: \"identifier\", name: token.value };\n    }\n\n    if (token.type === \"lparen\") {\n      index += 1;\n      const expressionNode = parseOr(depth + 1);\n      const closeToken = tokens[index];\n      if (!expressionNode || !closeToken || closeToken.type !== \"rparen\") {\n        return null;\n      }\n      index += 1;\n      return expressionNode;\n    }\n\n    return null;\n  };\n\n  const parseUnary = (depth: number): KeybindingWhenNode | null => {\n    let notCount = 0;\n    while (tokens[index]?.type === \"not\") {\n      index += 1;\n      notCount += 1;\n      if (notCount > MAX_WHEN_EXPRESSION_DEPTH) {\n        return null;\n      }\n    }\n\n    let node = parsePrimary(depth);\n    if (!node) return null;\n\n    while (notCount > 0) {\n      node = { type: \"not\", node };\n      notCount -= 1;\n    }\n\n    return node;\n  };\n\n  const parseAnd = (depth: number): KeybindingWhenNode | null => {\n    let left = parseUnary(depth);\n    if (!left) return null;\n\n    while (tokens[index]?.type === \"and\") {\n      index += 1;\n      const right = parseUnary(depth);\n      if (!right) return null;\n      left = { type: \"and\", left, right };\n    }\n\n    return left;\n  };\n\n  const parseOr = (depth: number): KeybindingWhenNode | null => {\n    let left = parseAnd(depth);\n    if (!left) return null;\n\n    while (tokens[index]?.type === \"or\") {\n      index += 1;\n      const right = parseAnd(depth);\n      if (!right) return null;\n      left = { type: \"or\", left, right };\n    }\n\n    return left;\n  };\n\n  const ast = parseOr(0);\n  if (!ast || index !== tokens.length) return null;\n  return ast;\n}\n\nexport function compileResolvedKeybindingRule(rule: KeybindingRule): ResolvedKeybindingRule | null {\n  const shortcut = parseKeybindingShortcut(rule.key);\n  if (!shortcut) return null;\n\n  if (rule.when !== undefined) {\n    const whenAst = parseKeybindingWhenExpression(rule.when);\n    if (!whenAst) return null;\n    return {\n      command: rule.command,\n      shortcut,\n      whenAst,\n    };\n  }\n\n  return {\n    command: rule.command,\n    shortcut,\n  };\n}\n\nexport function compileResolvedKeybindingsConfig(\n  config: ReadonlyArray<KeybindingRule>,\n): ResolvedKeybindingsConfig {\n  const compiled: ResolvedKeybindingRule[] = [];\n  for (const rule of config) {\n    const result = compileResolvedKeybindingRule(rule);\n    if (result) {\n      compiled.push(result);\n    }\n  }\n  return compiled.slice(-MAX_KEYBINDINGS_COUNT);\n}\n\nexport const DEFAULT_RESOLVED_KEYBINDINGS = compileResolvedKeybindingsConfig(DEFAULT_KEYBINDINGS);\n","/**\n * Keybindings - Keybinding configuration service definitions.\n *\n * Owns parsing, validation, merge, and persistence of user keybinding\n * configuration consumed by the server runtime.\n *\n * @module Keybindings\n */\nimport {\n  KeybindingRule,\n  KeybindingsConfig,\n  KeybindingsConfigError,\n  KeybindingShortcut,\n  KeybindingWhenNode,\n  MAX_KEYBINDINGS_COUNT,\n  ResolvedKeybindingRule,\n  ResolvedKeybindingsConfig,\n  type ServerRemoveKeybindingInput,\n  type ServerUpsertKeybindingInput,\n  type ServerConfigIssue,\n} from \"@salchi/contracts\";\nimport * as Array from \"effect/Array\";\nimport * as Cache from \"effect/Cache\";\nimport * as Cause from \"effect/Cause\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as SchemaTransformation from \"effect/SchemaTransformation\";\nimport * as Ref from \"effect/Ref\";\nimport * as Context from \"effect/Context\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport { ServerConfig } from \"./config.ts\";\nimport { writeFileStringAtomically } from \"./atomicWrite.ts\";\nimport { fromJsonStringPretty, fromLenientJson } from \"@salchi/shared/schemaJson\";\nimport {\n  DEFAULT_KEYBINDINGS,\n  DEFAULT_RESOLVED_KEYBINDINGS,\n  compileResolvedKeybindingRule,\n  compileResolvedKeybindingsConfig,\n  parseKeybindingShortcut,\n} from \"@salchi/shared/keybindings\";\n\nexport {\n  DEFAULT_KEYBINDINGS,\n  compileResolvedKeybindingRule,\n  compileResolvedKeybindingsConfig,\n  parseKeybindingShortcut,\n};\n\nexport const ResolvedKeybindingFromConfig = KeybindingRule.pipe(\n  Schema.decodeTo(\n    Schema.toType(ResolvedKeybindingRule),\n    SchemaTransformation.transformOrFail({\n      decode: (rule) =>\n        Effect.succeed(compileResolvedKeybindingRule(rule)).pipe(\n          Effect.filterOrFail(\n            Predicate.isNotNull,\n            () =>\n              new SchemaIssue.InvalidValue(Option.some(rule), {\n                message: \"Invalid keybinding rule\",\n              }),\n          ),\n          Effect.map((resolved) => resolved),\n        ),\n\n      encode: (resolved) =>\n        Effect.gen(function* () {\n          const key = encodeShortcut(resolved.shortcut);\n          if (!key) {\n            return yield* Effect.fail(\n              new SchemaIssue.InvalidValue(Option.some(resolved), {\n                message: \"Resolved shortcut cannot be encoded to key string\",\n              }),\n            );\n          }\n\n          const when = resolved.whenAst ? encodeWhenAst(resolved.whenAst) : undefined;\n          return {\n            key,\n            command: resolved.command,\n            when,\n          };\n        }),\n    }),\n  ),\n);\n\nexport const ResolvedKeybindingsFromConfig = Schema.Array(ResolvedKeybindingFromConfig).check(\n  Schema.isMaxLength(MAX_KEYBINDINGS_COUNT),\n);\n\nfunction isSameKeybindingRule(left: KeybindingRule, right: KeybindingRule): boolean {\n  return (\n    left.command === right.command &&\n    left.key === right.key &&\n    (left.when ?? undefined) === (right.when ?? undefined)\n  );\n}\n\nfunction keybindingShortcutContext(rule: KeybindingRule): string | null {\n  const parsed = parseKeybindingShortcut(rule.key);\n  if (!parsed) return null;\n  const encoded = encodeShortcut(parsed);\n  if (!encoded) return null;\n  return `${encoded}\\u0000${rule.when ?? \"\"}`;\n}\n\nfunction hasSameShortcutContext(left: KeybindingRule, right: KeybindingRule): boolean {\n  const leftContext = keybindingShortcutContext(left);\n  const rightContext = keybindingShortcutContext(right);\n  if (!leftContext || !rightContext) return false;\n  return leftContext === rightContext;\n}\n\nfunction keybindingRuleFromUpsertInput(input: ServerUpsertKeybindingInput): KeybindingRule {\n  return input.when === undefined\n    ? { key: input.key, command: input.command }\n    : { key: input.key, command: input.command, when: input.when };\n}\n\nfunction replaceTargetFromUpsertInput(input: ServerUpsertKeybindingInput): KeybindingRule | null {\n  if (!input.replace) return null;\n  return input.replace.when === undefined\n    ? { key: input.replace.key, command: input.replace.command }\n    : { key: input.replace.key, command: input.replace.command, when: input.replace.when };\n}\n\nfunction keybindingRuleFromRemoveInput(input: ServerRemoveKeybindingInput): KeybindingRule {\n  return input.when === undefined\n    ? { key: input.key, command: input.command }\n    : { key: input.key, command: input.command, when: input.when };\n}\n\nfunction encodeShortcut(shortcut: KeybindingShortcut): string | null {\n  const modifiers: string[] = [];\n  if (shortcut.modKey) modifiers.push(\"mod\");\n  if (shortcut.metaKey) modifiers.push(\"meta\");\n  if (shortcut.ctrlKey) modifiers.push(\"ctrl\");\n  if (shortcut.altKey) modifiers.push(\"alt\");\n  if (shortcut.shiftKey) modifiers.push(\"shift\");\n  if (!shortcut.key) return null;\n  if (shortcut.key !== \"+\" && shortcut.key.includes(\"+\")) return null;\n  const key = shortcut.key === \" \" ? \"space\" : shortcut.key;\n  return [...modifiers, key].join(\"+\");\n}\n\nfunction encodeWhenAst(node: KeybindingWhenNode): string {\n  switch (node.type) {\n    case \"identifier\":\n      return node.name;\n    case \"not\":\n      return `!(${encodeWhenAst(node.node)})`;\n    case \"and\":\n      return `(${encodeWhenAst(node.left)} && ${encodeWhenAst(node.right)})`;\n    case \"or\":\n      return `(${encodeWhenAst(node.left)} || ${encodeWhenAst(node.right)})`;\n  }\n}\n\nconst RawKeybindingsEntries = fromLenientJson(Schema.Array(Schema.Unknown));\nconst KeybindingsConfigPrettyJson = fromJsonStringPretty(KeybindingsConfig);\nconst decodeKeybindingRuleExit = Schema.decodeUnknownExit(KeybindingRule);\nconst decodeResolvedKeybindingFromConfigExit = Schema.decodeExit(ResolvedKeybindingFromConfig);\nconst decodeRawKeybindingsEntriesExit = Schema.decodeUnknownExit(RawKeybindingsEntries);\nconst encodeKeybindingsConfigPrettyJson = Schema.encodeEffect(KeybindingsConfigPrettyJson);\n\nexport interface KeybindingsConfigState {\n  readonly keybindings: ResolvedKeybindingsConfig;\n  readonly issues: readonly ServerConfigIssue[];\n}\n\nexport interface KeybindingsChangeEvent {\n  readonly keybindings: ResolvedKeybindingsConfig;\n  readonly issues: readonly ServerConfigIssue[];\n}\n\nfunction trimIssueMessage(message: string): string {\n  const trimmed = message.trim();\n  return trimmed.length > 0 ? trimmed : \"Invalid keybindings configuration.\";\n}\n\nfunction malformedConfigIssue(detail: string): ServerConfigIssue {\n  return {\n    kind: \"keybindings.malformed-config\",\n    message: trimIssueMessage(detail),\n  };\n}\n\nfunction invalidEntryIssue(index: number, detail: string): ServerConfigIssue {\n  return {\n    kind: \"keybindings.invalid-entry\",\n    index,\n    message: trimIssueMessage(detail),\n  };\n}\n\nfunction mergeWithDefaultKeybindings(custom: ResolvedKeybindingsConfig): ResolvedKeybindingsConfig {\n  if (custom.length === 0) {\n    return [...DEFAULT_RESOLVED_KEYBINDINGS];\n  }\n\n  const overriddenCommands = new Set(custom.map((binding) => binding.command));\n  const retainedDefaults = DEFAULT_RESOLVED_KEYBINDINGS.filter(\n    (binding) => !overriddenCommands.has(binding.command),\n  );\n  const merged = [...retainedDefaults, ...custom];\n\n  if (merged.length <= MAX_KEYBINDINGS_COUNT) {\n    return merged;\n  }\n\n  // Keep the latest rules when the config exceeds max size; later rules have higher precedence.\n  return merged.slice(-MAX_KEYBINDINGS_COUNT);\n}\n\n/**\n * KeybindingsShape - Service API for keybinding configuration operations.\n */\nexport interface KeybindingsShape {\n  /**\n   * Start the keybindings runtime and attach file watching.\n   *\n   * Safe to call multiple times. The first successful call establishes the\n   * runtime; later calls await the same startup.\n   */\n  readonly start: Effect.Effect<void, KeybindingsConfigError>;\n\n  /**\n   * Await keybindings runtime readiness.\n   *\n   * Readiness means the config directory exists, the watcher is attached, the\n   * startup sync has completed, and the current snapshot has been loaded.\n   */\n  readonly ready: Effect.Effect<void, KeybindingsConfigError>;\n\n  /**\n   * Ensure the on-disk keybindings file exists and includes all default\n   * commands so newly-added defaults are backfilled on startup.\n   */\n  readonly syncDefaultKeybindingsOnStartup: Effect.Effect<void, KeybindingsConfigError>;\n\n  /**\n   * Load runtime keybindings state along with non-fatal configuration issues.\n   */\n  readonly loadConfigState: Effect.Effect<KeybindingsConfigState, KeybindingsConfigError>;\n\n  /**\n   * Read the latest keybindings snapshot from cache/disk.\n   */\n  readonly getSnapshot: Effect.Effect<KeybindingsConfigState, KeybindingsConfigError>;\n\n  /**\n   * Stream of keybindings config change events.\n   */\n  readonly streamChanges: Stream.Stream<KeybindingsChangeEvent>;\n\n  /**\n   * Upsert a keybinding rule and persist the resulting configuration.\n   *\n   * Writes config atomically and enforces the max rule count by truncating\n   * oldest entries when needed.\n   */\n  readonly upsertKeybindingRule: (\n    input: ServerUpsertKeybindingInput,\n  ) => Effect.Effect<ResolvedKeybindingsConfig, KeybindingsConfigError>;\n\n  /**\n   * Remove a single persisted keybinding rule by exact key/command/when match.\n   */\n  readonly removeKeybindingRule: (\n    input: ServerRemoveKeybindingInput,\n  ) => Effect.Effect<ResolvedKeybindingsConfig, KeybindingsConfigError>;\n}\n\n/**\n * Keybindings - Service tag for keybinding configuration operations.\n */\nexport class Keybindings extends Context.Service<Keybindings, KeybindingsShape>()(\n  \"salchi/keybindings\",\n) {}\n\nconst makeKeybindings = Effect.gen(function* () {\n  const { keybindingsConfigPath } = yield* ServerConfig;\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const upsertSemaphore = yield* Semaphore.make(1);\n  const resolvedConfigCacheKey = \"resolved\" as const;\n  const changesPubSub = yield* PubSub.unbounded<KeybindingsChangeEvent>();\n  const startedRef = yield* Ref.make(false);\n  const startedDeferred = yield* Deferred.make<void, KeybindingsConfigError>();\n  const watcherScope = yield* Scope.make(\"sequential\");\n  yield* Effect.addFinalizer(() => Scope.close(watcherScope, Exit.void));\n  const emitChange = (configState: KeybindingsConfigState) =>\n    PubSub.publish(changesPubSub, configState).pipe(Effect.asVoid);\n\n  const readConfigExists = fs.exists(keybindingsConfigPath).pipe(\n    Effect.mapError(\n      (cause) =>\n        new KeybindingsConfigError({\n          configPath: keybindingsConfigPath,\n          detail: \"failed to access keybindings config\",\n          cause,\n        }),\n    ),\n  );\n\n  const readRawConfig = fs.readFileString(keybindingsConfigPath).pipe(\n    Effect.mapError(\n      (cause) =>\n        new KeybindingsConfigError({\n          configPath: keybindingsConfigPath,\n          detail: \"failed to read keybindings config\",\n          cause,\n        }),\n    ),\n  );\n\n  const loadWritableCustomKeybindingsConfig = Effect.fn(function* (): Effect.fn.Return<\n    readonly KeybindingRule[],\n    KeybindingsConfigError\n  > {\n    if (!(yield* readConfigExists)) {\n      return [];\n    }\n\n    const rawConfig = yield* readRawConfig.pipe(\n      Effect.flatMap(Schema.decodeEffect(RawKeybindingsEntries)),\n      Effect.mapError(\n        (cause) =>\n          new KeybindingsConfigError({\n            configPath: keybindingsConfigPath,\n            detail: \"expected JSON array\",\n            cause,\n          }),\n      ),\n    );\n\n    return yield* Effect.forEach(rawConfig, (entry) =>\n      Effect.gen(function* () {\n        const decodedRule = decodeKeybindingRuleExit(entry);\n        if (decodedRule._tag === \"Failure\") {\n          yield* Effect.logWarning(\"ignoring invalid keybinding entry\", {\n            path: keybindingsConfigPath,\n            entry,\n            error: Cause.pretty(decodedRule.cause),\n          });\n          return null;\n        }\n        const resolved = decodeResolvedKeybindingFromConfigExit(decodedRule.value);\n        if (resolved._tag === \"Failure\") {\n          yield* Effect.logWarning(\"ignoring invalid keybinding entry\", {\n            path: keybindingsConfigPath,\n            entry,\n            error: Cause.pretty(resolved.cause),\n          });\n          return null;\n        }\n        return decodedRule.value;\n      }),\n    ).pipe(Effect.map(Array.filter(Predicate.isNotNull)));\n  });\n\n  const loadRuntimeCustomKeybindingsConfig = Effect.fn(function* (): Effect.fn.Return<\n    {\n      readonly keybindings: readonly KeybindingRule[];\n      readonly issues: readonly ServerConfigIssue[];\n    },\n    KeybindingsConfigError\n  > {\n    if (!(yield* readConfigExists)) {\n      return { keybindings: [], issues: [] };\n    }\n\n    const rawConfig = yield* readRawConfig;\n    const decodedEntries = decodeRawKeybindingsEntriesExit(rawConfig);\n    if (decodedEntries._tag === \"Failure\") {\n      const detail = `expected JSON array (${Cause.pretty(decodedEntries.cause)})`;\n      return {\n        keybindings: [],\n        issues: [malformedConfigIssue(detail)],\n      };\n    }\n\n    const keybindings: KeybindingRule[] = [];\n    const issues: ServerConfigIssue[] = [];\n    for (const [index, entry] of decodedEntries.value.entries()) {\n      const decodedRule = decodeKeybindingRuleExit(entry);\n      if (decodedRule._tag === \"Failure\") {\n        const detail = Cause.pretty(decodedRule.cause);\n        issues.push(invalidEntryIssue(index, detail));\n        yield* Effect.logWarning(\"ignoring invalid keybinding entry\", {\n          path: keybindingsConfigPath,\n          index,\n          entry,\n          error: detail,\n        });\n        continue;\n      }\n\n      const resolvedRule = decodeResolvedKeybindingFromConfigExit(decodedRule.value);\n      if (resolvedRule._tag === \"Failure\") {\n        const detail = Cause.pretty(resolvedRule.cause);\n        issues.push(invalidEntryIssue(index, detail));\n        yield* Effect.logWarning(\"ignoring invalid keybinding entry\", {\n          path: keybindingsConfigPath,\n          index,\n          entry,\n          error: detail,\n        });\n        continue;\n      }\n      keybindings.push(decodedRule.value);\n    }\n\n    return { keybindings, issues };\n  });\n\n  const writeConfigAtomically = (rules: readonly KeybindingRule[]) => {\n    return encodeKeybindingsConfigPrettyJson(rules).pipe(\n      Effect.map((encoded) => `${encoded}\\n`),\n      Effect.flatMap((encoded) =>\n        writeFileStringAtomically({\n          filePath: keybindingsConfigPath,\n          contents: encoded,\n        }).pipe(\n          Effect.provideService(FileSystem.FileSystem, fs),\n          Effect.provideService(Path.Path, path),\n        ),\n      ),\n      Effect.mapError(\n        (cause) =>\n          new KeybindingsConfigError({\n            configPath: keybindingsConfigPath,\n            detail: \"failed to write keybindings config\",\n            cause,\n          }),\n      ),\n    );\n  };\n\n  const loadConfigStateFromDisk = loadRuntimeCustomKeybindingsConfig().pipe(\n    Effect.map(({ keybindings, issues }) => ({\n      keybindings: mergeWithDefaultKeybindings(compileResolvedKeybindingsConfig(keybindings)),\n      issues,\n    })),\n  );\n\n  const resolvedConfigCache = yield* Cache.make<\n    typeof resolvedConfigCacheKey,\n    KeybindingsConfigState,\n    KeybindingsConfigError\n  >({\n    capacity: 1,\n    lookup: () => loadConfigStateFromDisk,\n  });\n\n  const loadConfigStateFromCacheOrDisk = Cache.get(resolvedConfigCache, resolvedConfigCacheKey);\n\n  const revalidateAndEmit = upsertSemaphore.withPermits(1)(\n    Effect.gen(function* () {\n      yield* Cache.invalidate(resolvedConfigCache, resolvedConfigCacheKey);\n      const configState = yield* loadConfigStateFromCacheOrDisk;\n      yield* emitChange(configState);\n    }),\n  );\n\n  const syncDefaultKeybindingsOnStartup = upsertSemaphore.withPermits(1)(\n    Effect.gen(function* () {\n      const configExists = yield* readConfigExists;\n      if (!configExists) {\n        yield* writeConfigAtomically(DEFAULT_KEYBINDINGS);\n        yield* Cache.invalidate(resolvedConfigCache, resolvedConfigCacheKey);\n        return;\n      }\n\n      const runtimeConfig = yield* loadRuntimeCustomKeybindingsConfig();\n      if (runtimeConfig.issues.length > 0) {\n        yield* Effect.logWarning(\n          \"skipping startup keybindings default sync because config has issues\",\n          {\n            path: keybindingsConfigPath,\n            issues: runtimeConfig.issues,\n          },\n        );\n        yield* Cache.invalidate(resolvedConfigCache, resolvedConfigCacheKey);\n        return;\n      }\n      const customConfig = runtimeConfig.keybindings;\n      const existingCommands = new Set(customConfig.map((entry) => entry.command));\n      const missingDefaults: KeybindingRule[] = [];\n      const shortcutConflictWarnings: Array<{\n        defaultCommand: KeybindingRule[\"command\"];\n        conflictingCommand: KeybindingRule[\"command\"];\n        key: string;\n        when: string | null;\n      }> = [];\n      for (const defaultRule of DEFAULT_KEYBINDINGS) {\n        if (existingCommands.has(defaultRule.command)) {\n          continue;\n        }\n        const conflictingEntry = customConfig.find((entry) =>\n          hasSameShortcutContext(entry, defaultRule),\n        );\n        if (conflictingEntry) {\n          shortcutConflictWarnings.push({\n            defaultCommand: defaultRule.command,\n            conflictingCommand: conflictingEntry.command,\n            key: defaultRule.key,\n            when: defaultRule.when ?? null,\n          });\n          continue;\n        }\n        missingDefaults.push(defaultRule);\n      }\n      for (const conflict of shortcutConflictWarnings) {\n        yield* Effect.logWarning(\"skipping default keybinding due to shortcut conflict\", {\n          path: keybindingsConfigPath,\n          defaultCommand: conflict.defaultCommand,\n          conflictingCommand: conflict.conflictingCommand,\n          key: conflict.key,\n          when: conflict.when,\n          reason: \"shortcut context already used by existing rule\",\n        });\n      }\n      if (missingDefaults.length === 0) {\n        yield* Cache.invalidate(resolvedConfigCache, resolvedConfigCacheKey);\n        return;\n      }\n\n      const matchingDefaults = Array.filterMap(DEFAULT_KEYBINDINGS, (defaultRule) =>\n        customConfig.some((entry) => isSameKeybindingRule(entry, defaultRule))\n          ? Result.succeed(defaultRule.command)\n          : Result.failVoid,\n      );\n      if (matchingDefaults.length > 0) {\n        yield* Effect.logWarning(\"default keybinding rule already defined in user config\", {\n          path: keybindingsConfigPath,\n          commands: matchingDefaults,\n        });\n      }\n\n      const nextConfig = [...customConfig, ...missingDefaults];\n      const cappedConfig =\n        nextConfig.length > MAX_KEYBINDINGS_COUNT\n          ? nextConfig.slice(-MAX_KEYBINDINGS_COUNT)\n          : nextConfig;\n      if (nextConfig.length > MAX_KEYBINDINGS_COUNT) {\n        yield* Effect.logWarning(\"truncating keybindings config to max entries\", {\n          path: keybindingsConfigPath,\n          maxEntries: MAX_KEYBINDINGS_COUNT,\n        });\n      }\n\n      yield* writeConfigAtomically(cappedConfig);\n      yield* Cache.invalidate(resolvedConfigCache, resolvedConfigCacheKey);\n    }),\n  );\n\n  const startWatcher = Effect.gen(function* () {\n    const keybindingsConfigDir = path.dirname(keybindingsConfigPath);\n    const keybindingsConfigFile = path.basename(keybindingsConfigPath);\n    const keybindingsConfigPathResolved = path.resolve(keybindingsConfigPath);\n\n    yield* fs.makeDirectory(keybindingsConfigDir, { recursive: true }).pipe(\n      Effect.mapError(\n        (cause) =>\n          new KeybindingsConfigError({\n            configPath: keybindingsConfigPath,\n            detail: \"failed to prepare keybindings config directory\",\n            cause,\n          }),\n      ),\n    );\n\n    const revalidateAndEmitSafely = revalidateAndEmit.pipe(Effect.ignoreCause({ log: true }));\n\n    // Debounce watch events so the file is fully written before we read it.\n    // Editors emit multiple events per save (truncate, write, rename) and\n    // `fs.watch` can fire before the content has been flushed to disk.\n    const debouncedKeybindingsEvents = fs.watch(keybindingsConfigDir).pipe(\n      Stream.filter((event) => {\n        return (\n          event.path === keybindingsConfigFile ||\n          event.path === keybindingsConfigPath ||\n          path.resolve(keybindingsConfigDir, event.path) === keybindingsConfigPathResolved\n        );\n      }),\n      Stream.debounce(Duration.millis(100)),\n    );\n\n    yield* Stream.runForEach(debouncedKeybindingsEvents, () => revalidateAndEmitSafely).pipe(\n      Effect.ignoreCause({ log: true }),\n      Effect.forkIn(watcherScope),\n      Effect.asVoid,\n    );\n  });\n\n  const start = Effect.gen(function* () {\n    const alreadyStarted = yield* Ref.get(startedRef);\n    if (alreadyStarted) {\n      return yield* Deferred.await(startedDeferred);\n    }\n\n    yield* Ref.set(startedRef, true);\n    const startup = Effect.gen(function* () {\n      yield* startWatcher;\n      yield* syncDefaultKeybindingsOnStartup;\n      yield* Cache.invalidate(resolvedConfigCache, resolvedConfigCacheKey);\n      yield* loadConfigStateFromCacheOrDisk;\n    });\n\n    const startupExit = yield* Effect.exit(startup);\n    if (startupExit._tag === \"Failure\") {\n      yield* Deferred.failCause(startedDeferred, startupExit.cause).pipe(Effect.orDie);\n      return yield* Effect.failCause(startupExit.cause);\n    }\n\n    yield* Deferred.succeed(startedDeferred, undefined).pipe(Effect.orDie);\n  });\n\n  return {\n    start,\n    ready: Deferred.await(startedDeferred),\n    syncDefaultKeybindingsOnStartup,\n    loadConfigState: loadConfigStateFromCacheOrDisk,\n    getSnapshot: loadConfigStateFromCacheOrDisk,\n    get streamChanges() {\n      return Stream.fromPubSub(changesPubSub);\n    },\n    upsertKeybindingRule: (input) =>\n      upsertSemaphore.withPermits(1)(\n        Effect.gen(function* () {\n          const customConfig = yield* loadWritableCustomKeybindingsConfig();\n          const rule = keybindingRuleFromUpsertInput(input);\n          const replaceTarget = replaceTargetFromUpsertInput(input);\n          const nextConfig = [\n            ...customConfig.filter((entry) => {\n              if (replaceTarget) {\n                return !isSameKeybindingRule(entry, replaceTarget);\n              }\n              return !isSameKeybindingRule(entry, rule);\n            }),\n            rule,\n          ];\n          const cappedConfig =\n            nextConfig.length > MAX_KEYBINDINGS_COUNT\n              ? nextConfig.slice(-MAX_KEYBINDINGS_COUNT)\n              : nextConfig;\n          if (nextConfig.length > MAX_KEYBINDINGS_COUNT) {\n            yield* Effect.logWarning(\"truncating keybindings config to max entries\", {\n              path: keybindingsConfigPath,\n              maxEntries: MAX_KEYBINDINGS_COUNT,\n            });\n          }\n          yield* writeConfigAtomically(cappedConfig);\n          const nextResolved = mergeWithDefaultKeybindings(\n            compileResolvedKeybindingsConfig(cappedConfig),\n          );\n          yield* Cache.set(resolvedConfigCache, resolvedConfigCacheKey, {\n            keybindings: nextResolved,\n            issues: [],\n          });\n          yield* emitChange({\n            keybindings: nextResolved,\n            issues: [],\n          });\n          return nextResolved;\n        }),\n      ),\n    removeKeybindingRule: (input) =>\n      upsertSemaphore.withPermits(1)(\n        Effect.gen(function* () {\n          const customConfig = yield* loadWritableCustomKeybindingsConfig();\n          const target = keybindingRuleFromRemoveInput(input);\n          const nextConfig = customConfig.filter((entry) => !isSameKeybindingRule(entry, target));\n          yield* writeConfigAtomically(nextConfig);\n          const nextResolved = mergeWithDefaultKeybindings(\n            compileResolvedKeybindingsConfig(nextConfig),\n          );\n          yield* Cache.set(resolvedConfigCache, resolvedConfigCacheKey, {\n            keybindings: nextResolved,\n            issues: [],\n          });\n          yield* emitChange({\n            keybindings: nextResolved,\n            issues: [],\n          });\n          return nextResolved;\n        }),\n      ),\n  } satisfies KeybindingsShape;\n});\n\nexport const KeybindingsLive = Layer.effect(Keybindings, makeKeybindings);\n","/**\n * ExternalLauncher - external application launch service interface.\n *\n * Owns process launch helpers for browser URLs and workspace paths\n * in configured editor integrations.\n *\n * @module ExternalLauncher\n */\nimport {\n  EDITORS,\n  ExternalLauncherError,\n  type EditorId,\n  type LaunchEditorInput,\n} from \"@salchi/contracts\";\nimport {\n  isCommandAvailable,\n  resolveSpawnCommand,\n  type CommandAvailabilityOptions,\n} from \"@salchi/shared/shell\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Encoding from \"effect/Encoding\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\n// Definitions\n\nexport { ExternalLauncherError };\nexport type { LaunchEditorInput };\nexport { isCommandAvailable } from \"@salchi/shared/shell\";\n\ninterface EditorLaunch {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n}\n\ninterface ProcessLaunch {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly options: ChildProcess.CommandOptions;\n}\n\ninterface TargetPathAndPosition {\n  readonly path: string;\n  readonly line: string;\n  readonly column: Option.Option<string>;\n}\n\nconst TARGET_WITH_POSITION_PATTERN = /^(.*?):(\\d+)(?::(\\d+))?$/;\nconst POWERSHELL_ARGUMENTS_PREFIX = [\n  \"-NoProfile\",\n  \"-NonInteractive\",\n  \"-ExecutionPolicy\",\n  \"Bypass\",\n  \"-EncodedCommand\",\n] as const;\n\nconst DETACHED_IGNORE_STDIO_OPTIONS = {\n  detached: true,\n  stdin: \"ignore\",\n  stdout: \"ignore\",\n  stderr: \"ignore\",\n} as const satisfies ChildProcess.CommandOptions;\n\nfunction parseTargetPathAndPosition(target: string): Option.Option<TargetPathAndPosition> {\n  const match = TARGET_WITH_POSITION_PATTERN.exec(target);\n  if (!match?.[1] || !match[2]) {\n    return Option.none();\n  }\n\n  return Option.some({\n    path: match[1],\n    line: match[2],\n    column: Option.fromUndefinedOr(match[3]),\n  });\n}\n\nfunction resolveCommandEditorArgs(\n  editor: (typeof EDITORS)[number],\n  target: string,\n): ReadonlyArray<string> {\n  const parsedTarget = parseTargetPathAndPosition(target);\n\n  switch (editor.launchStyle) {\n    case \"direct-path\":\n      return [target];\n    case \"goto\":\n      return Option.isSome(parsedTarget) ? [\"--goto\", target] : [target];\n    case \"line-column\":\n      return Option.match(parsedTarget, {\n        onNone: () => [target],\n        onSome: ({ path, line, column }) => [\n          \"--line\",\n          line,\n          ...Option.match(column, {\n            onNone: () => [],\n            onSome: (value) => [\"--column\", value],\n          }),\n          path,\n        ],\n      });\n  }\n}\n\nfunction resolveEditorArgs(\n  editor: (typeof EDITORS)[number],\n  target: string,\n): ReadonlyArray<string> {\n  const baseArgs = \"baseArgs\" in editor ? editor.baseArgs : [];\n  return [...baseArgs, ...resolveCommandEditorArgs(editor, target)];\n}\n\nfunction resolveAvailableCommand(\n  commands: ReadonlyArray<string>,\n  options: CommandAvailabilityOptions = {},\n): Option.Option<string> {\n  for (const command of commands) {\n    if (isCommandAvailable(command, options)) {\n      return Option.some(command);\n    }\n  }\n  return Option.none();\n}\n\nfunction encodeUtf16LeBase64(input: string): string {\n  const bytes = new Uint8Array(input.length * 2);\n  for (let index = 0; index < input.length; index += 1) {\n    const code = input.charCodeAt(index);\n    bytes[index * 2] = code & 0xff;\n    bytes[index * 2 + 1] = code >>> 8;\n  }\n  return Encoding.encodeBase64(bytes);\n}\n\nfunction escapePowerShellStringLiteral(input: string): string {\n  return `'${input.replaceAll(\"'\", \"''\")}'`;\n}\n\nfunction resolvePowerShellPath(env: NodeJS.ProcessEnv = process.env): string {\n  return `${env.SYSTEMROOT || env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n}\n\nfunction resolveWslPowerShellPath(): string {\n  return \"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe\";\n}\n\nfunction shouldUseWindowsBrowserFromWsl(\n  platform: NodeJS.Platform,\n  env: NodeJS.ProcessEnv = process.env,\n): boolean {\n  return (\n    platform === \"linux\" &&\n    (env.WSL_DISTRO_NAME !== undefined || env.WSL_INTEROP !== undefined) &&\n    env.SSH_CONNECTION === undefined &&\n    env.SSH_TTY === undefined &&\n    env.container === undefined\n  );\n}\n\nfunction resolveWindowsBrowserLaunch(target: string, command: string): ProcessLaunch {\n  const encodedCommand = encodeUtf16LeBase64(\n    `$ProgressPreference = 'SilentlyContinue'; Start ${escapePowerShellStringLiteral(target)}`,\n  );\n  return {\n    command,\n    args: [...POWERSHELL_ARGUMENTS_PREFIX, encodedCommand],\n    options: {\n      detached: true,\n      shell: false,\n      stdin: \"ignore\",\n      stdout: \"ignore\",\n      stderr: \"ignore\",\n    },\n  };\n}\n\nfunction fileManagerCommandForPlatform(platform: NodeJS.Platform): string {\n  switch (platform) {\n    case \"darwin\":\n      return \"open\";\n    case \"win32\":\n      return \"explorer\";\n    default:\n      return \"xdg-open\";\n  }\n}\n\nexport function resolveBrowserLaunch(\n  target: string,\n  platform: NodeJS.Platform = process.platform,\n  env: NodeJS.ProcessEnv = process.env,\n): ProcessLaunch {\n  if (platform === \"darwin\") {\n    return {\n      command: \"open\",\n      args: [target],\n      options: DETACHED_IGNORE_STDIO_OPTIONS,\n    };\n  }\n\n  if (platform === \"win32\") {\n    return resolveWindowsBrowserLaunch(target, resolvePowerShellPath(env));\n  }\n\n  if (shouldUseWindowsBrowserFromWsl(platform, env)) {\n    return resolveWindowsBrowserLaunch(target, resolveWslPowerShellPath());\n  }\n\n  return {\n    command: \"xdg-open\",\n    args: [target],\n    options: DETACHED_IGNORE_STDIO_OPTIONS,\n  };\n}\n\nexport function resolveAvailableEditors(\n  platform: NodeJS.Platform = process.platform,\n  env: NodeJS.ProcessEnv = process.env,\n): ReadonlyArray<EditorId> {\n  const available: EditorId[] = [];\n\n  for (const editor of EDITORS) {\n    if (editor.commands === null) {\n      const command = fileManagerCommandForPlatform(platform);\n      if (isCommandAvailable(command, { platform, env })) {\n        available.push(editor.id);\n      }\n      continue;\n    }\n\n    const command = resolveAvailableCommand(editor.commands, { platform, env });\n    if (Option.isSome(command)) {\n      available.push(editor.id);\n    }\n  }\n\n  return available;\n}\n\n/**\n * ExternalLauncherShape - Service API for browser and editor launch actions.\n */\nexport interface ExternalLauncherShape {\n  /**\n   * Launch a URL target in the default browser.\n   */\n  readonly launchBrowser: (target: string) => Effect.Effect<void, ExternalLauncherError>;\n\n  /**\n   * Launch a workspace path in a selected editor integration.\n   *\n   * Launches the editor as a detached process so server startup is not blocked.\n   */\n  readonly launchEditor: (input: LaunchEditorInput) => Effect.Effect<void, ExternalLauncherError>;\n}\n\n/**\n * ExternalLauncher - Service tag for browser/editor launch operations.\n */\nexport class ExternalLauncher extends Context.Service<ExternalLauncher, ExternalLauncherShape>()(\n  \"salchi/process/externalLauncher\",\n) {}\n\n// Implementations\n\nexport const resolveEditorLaunch = Effect.fn(\"resolveEditorLaunch\")(function* (\n  input: LaunchEditorInput,\n  platform: NodeJS.Platform = process.platform,\n  env: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<EditorLaunch, ExternalLauncherError> {\n  yield* Effect.annotateCurrentSpan({\n    \"externalLauncher.editor\": input.editor,\n    \"externalLauncher.cwd\": input.cwd,\n    \"externalLauncher.platform\": platform,\n  });\n  const editorDef = EDITORS.find((editor) => editor.id === input.editor);\n  if (!editorDef) {\n    return yield* new ExternalLauncherError({ message: `Unknown editor: ${input.editor}` });\n  }\n\n  if (editorDef.commands) {\n    const command = Option.getOrElse(\n      resolveAvailableCommand(editorDef.commands, { platform, env }),\n      () => editorDef.commands[0],\n    );\n    return {\n      command,\n      args: resolveEditorArgs(editorDef, input.cwd),\n    };\n  }\n\n  if (editorDef.id !== \"file-manager\") {\n    return yield* new ExternalLauncherError({ message: `Unsupported editor: ${input.editor}` });\n  }\n\n  return { command: fileManagerCommandForPlatform(platform), args: [input.cwd] };\n});\n\nconst launchAndUnref = Effect.fn(\"externalLauncher.launchAndUnref\")(function* (\n  launch: ProcessLaunch,\n  errorMessage: string,\n): Effect.fn.Return<void, ExternalLauncherError, ChildProcessSpawner.ChildProcessSpawner> {\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const command = ChildProcess.make(launch.command, launch.args, launch.options);\n\n  yield* spawner.spawn(command).pipe(\n    Effect.flatMap((handle) => handle.unref),\n    Effect.asVoid,\n    Effect.scoped,\n    Effect.mapError((cause) => new ExternalLauncherError({ message: errorMessage, cause })),\n  );\n});\n\nexport const launchBrowser = Effect.fn(\"externalLauncher.launchBrowser\")(function* (\n  target: string,\n): Effect.fn.Return<void, ExternalLauncherError, ChildProcessSpawner.ChildProcessSpawner> {\n  return yield* launchAndUnref(resolveBrowserLaunch(target), \"Browser auto-open failed\");\n});\n\nexport const launchEditorProcess = Effect.fn(\"externalLauncher.launchEditorProcess\")(function* (\n  launch: EditorLaunch,\n): Effect.fn.Return<void, ExternalLauncherError, ChildProcessSpawner.ChildProcessSpawner> {\n  if (!isCommandAvailable(launch.command)) {\n    return yield* new ExternalLauncherError({\n      message: `Editor command not found: ${launch.command}`,\n    });\n  }\n\n  const spawnCommand = resolveSpawnCommand(launch.command, launch.args);\n  yield* launchAndUnref(\n    {\n      command: spawnCommand.command,\n      args: spawnCommand.args,\n      options: {\n        detached: true,\n        shell: spawnCommand.shell,\n        stdin: \"ignore\",\n        stdout: \"ignore\",\n        stderr: \"ignore\",\n      },\n    },\n    \"failed to spawn detached process\",\n  );\n});\n\nconst make = Effect.gen(function* () {\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\n  return {\n    launchBrowser: (target) =>\n      launchBrowser(target).pipe(\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n      ),\n    launchEditor: (input) =>\n      Effect.flatMap(resolveEditorLaunch(input), (launch) =>\n        launchEditorProcess(launch).pipe(\n          Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n        ),\n      ),\n  } satisfies ExternalLauncherShape;\n});\n\nexport const layer = Layer.effect(ExternalLauncher, make);\n","export const PDF_MIME_TYPE = \"application/pdf\" as const;\nexport type SupportedAttachmentType = \"image\" | \"pdf\";\n\nexport function isPdfMimeType(mimeType: string | null | undefined): boolean {\n  return mimeType?.trim().toLowerCase() === PDF_MIME_TYPE;\n}\n\nexport function isPdfFileName(name: string | null | undefined): boolean {\n  return /\\.pdf$/i.test(name?.trim() ?? \"\");\n}\n\nexport function inferSupportedAttachmentType(input: {\n  readonly type?: string | null | undefined;\n  readonly name?: string | null | undefined;\n}): SupportedAttachmentType | null {\n  const mimeType = input.type?.trim().toLowerCase() ?? \"\";\n  if (mimeType.startsWith(\"image/\")) {\n    return \"image\";\n  }\n  if (isPdfMimeType(mimeType) || isPdfFileName(input.name)) {\n    return \"pdf\";\n  }\n  return null;\n}\n\nexport function normalizeAttachmentMimeType(input: {\n  readonly type?: string | null | undefined;\n  readonly name?: string | null | undefined;\n}): string {\n  const type = input.type?.trim().toLowerCase() ?? \"\";\n  if (type.length > 0) {\n    return type;\n  }\n  if (isPdfFileName(input.name)) {\n    return PDF_MIME_TYPE;\n  }\n  return type;\n}\n","import * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport {\n  type ClientOrchestrationCommand,\n  type OrchestrationCommand,\n  OrchestrationDispatchCommandError,\n  PROVIDER_SEND_TURN_MAX_IMAGE_BYTES,\n  PROVIDER_SEND_TURN_MAX_PDF_BYTES,\n} from \"@salchi/contracts\";\nimport { PDF_MIME_TYPE } from \"@salchi/shared/attachmentMime\";\n\nimport { createAttachmentId, resolveAttachmentPath } from \"../attachmentStore.ts\";\nimport { ServerConfig } from \"../config.ts\";\nimport { parseBase64DataUrl } from \"../imageMime.ts\";\nimport { WorkspacePaths } from \"../workspace/Services/WorkspacePaths.ts\";\n\nexport const normalizeDispatchCommand = (command: ClientOrchestrationCommand) =>\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const serverConfig = yield* ServerConfig;\n    const workspacePaths = yield* WorkspacePaths;\n\n    const normalizeProjectWorkspaceRoot = (workspaceRoot: string) =>\n      workspacePaths.normalizeWorkspaceRoot(workspaceRoot).pipe(\n        Effect.mapError(\n          (cause) =>\n            new OrchestrationDispatchCommandError({\n              message: cause.message,\n            }),\n        ),\n      );\n\n    const normalizeProjectWorkspaceRootForCreate = (\n      workspaceRoot: string,\n      createIfMissing: boolean | undefined,\n    ) =>\n      workspacePaths\n        .normalizeWorkspaceRoot(workspaceRoot, {\n          createIfMissing: createIfMissing === true,\n        })\n        .pipe(\n          Effect.mapError(\n            (cause) =>\n              new OrchestrationDispatchCommandError({\n                message: cause.message,\n              }),\n          ),\n        );\n\n    if (command.type === \"project.create\") {\n      return {\n        ...command,\n        workspaceRoot: yield* normalizeProjectWorkspaceRootForCreate(\n          command.workspaceRoot,\n          command.createWorkspaceRootIfMissing,\n        ),\n        createWorkspaceRootIfMissing: command.createWorkspaceRootIfMissing === true,\n      } satisfies OrchestrationCommand;\n    }\n\n    if (command.type === \"project.meta.update\" && command.workspaceRoot !== undefined) {\n      return {\n        ...command,\n        workspaceRoot: yield* normalizeProjectWorkspaceRoot(command.workspaceRoot),\n      } satisfies OrchestrationCommand;\n    }\n\n    if (command.type !== \"thread.turn.start\" && command.type !== \"thread.turn.queue\") {\n      return command as OrchestrationCommand;\n    }\n\n    const normalizedAttachments = yield* Effect.forEach(\n      command.message.attachments,\n      (attachment) =>\n        Effect.gen(function* () {\n          const parsed = parseBase64DataUrl(attachment.dataUrl);\n          const attachmentKind = attachment.type === \"pdf\" ? \"PDF\" : \"Image\";\n          const normalizedMimeType = parsed?.mimeType.toLowerCase() ?? \"\";\n          const isValidMime =\n            attachment.type === \"image\"\n              ? normalizedMimeType.startsWith(\"image/\")\n              : normalizedMimeType === PDF_MIME_TYPE;\n          const maxBytes =\n            attachment.type === \"image\"\n              ? PROVIDER_SEND_TURN_MAX_IMAGE_BYTES\n              : PROVIDER_SEND_TURN_MAX_PDF_BYTES;\n          if (!parsed || !isValidMime) {\n            return yield* new OrchestrationDispatchCommandError({\n              message: `Invalid ${attachmentKind.toLowerCase()} attachment payload for '${attachment.name}'.`,\n            });\n          }\n\n          const bytes = Buffer.from(parsed.base64, \"base64\");\n          if (bytes.byteLength === 0 || bytes.byteLength > maxBytes) {\n            return yield* new OrchestrationDispatchCommandError({\n              message: `${attachmentKind} attachment '${attachment.name}' is empty or too large.`,\n            });\n          }\n\n          const attachmentId = createAttachmentId(command.threadId);\n          if (!attachmentId) {\n            return yield* new OrchestrationDispatchCommandError({\n              message: \"Failed to create a safe attachment id.\",\n            });\n          }\n\n          const persistedAttachment =\n            attachment.type === \"pdf\"\n              ? {\n                  type: \"pdf\" as const,\n                  id: attachmentId,\n                  name: attachment.name,\n                  mimeType: PDF_MIME_TYPE,\n                  sizeBytes: bytes.byteLength,\n                }\n              : {\n                  type: \"image\" as const,\n                  id: attachmentId,\n                  name: attachment.name,\n                  mimeType: normalizedMimeType,\n                  sizeBytes: bytes.byteLength,\n                };\n\n          const attachmentPath = resolveAttachmentPath({\n            attachmentsDir: serverConfig.attachmentsDir,\n            attachment: persistedAttachment,\n          });\n          if (!attachmentPath) {\n            return yield* new OrchestrationDispatchCommandError({\n              message: `Failed to resolve persisted path for '${attachment.name}'.`,\n            });\n          }\n\n          yield* fileSystem.makeDirectory(path.dirname(attachmentPath), { recursive: true }).pipe(\n            Effect.mapError(\n              () =>\n                new OrchestrationDispatchCommandError({\n                  message: `Failed to create attachment directory for '${attachment.name}'.`,\n                }),\n            ),\n          );\n          yield* fileSystem.writeFile(attachmentPath, bytes).pipe(\n            Effect.mapError(\n              () =>\n                new OrchestrationDispatchCommandError({\n                  message: `Failed to persist attachment '${attachment.name}'.`,\n                }),\n            ),\n          );\n\n          return persistedAttachment;\n        }),\n      { concurrency: 1 },\n    );\n\n    return {\n      ...command,\n      message: {\n        ...command.message,\n        attachments: normalizedAttachments,\n      },\n    } satisfies OrchestrationCommand;\n  });\n","import type {\n  OrchestrationEvent,\n  OrchestrationThreadActivity,\n  OrchestrationThreadDetailSnapshot,\n} from \"@salchi/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : null;\n}\n\nfunction asTrimmedString(value: unknown): string | null {\n  if (typeof value !== \"string\") return null;\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction collectChangedFiles(value: unknown, target: string[], seen: Set<string>, depth = 0): void {\n  if (depth > 4 || target.length >= 12) return;\n  if (Array.isArray(value)) {\n    for (const entry of value) collectChangedFiles(entry, target, seen, depth + 1);\n    return;\n  }\n  const record = asRecord(value);\n  if (!record) return;\n  for (const key of [\"path\", \"filePath\", \"relativePath\", \"filename\", \"newPath\", \"oldPath\"]) {\n    const path = asTrimmedString(record[key]);\n    if (path && !seen.has(path) && target.length < 12) {\n      seen.add(path);\n      target.push(path);\n    }\n  }\n  for (const key of [\n    \"item\",\n    \"result\",\n    \"input\",\n    \"data\",\n    \"changes\",\n    \"files\",\n    \"edits\",\n    \"patch\",\n    \"patches\",\n    \"operations\",\n  ]) {\n    if (key in record) collectChangedFiles(record[key], target, seen, depth + 1);\n  }\n}\n\nfunction projectCommandData(data: Record<string, unknown>): Record<string, unknown> | undefined {\n  const item = asRecord(data.item);\n  if (!item) return undefined;\n  const projected: Record<string, unknown> = {};\n  if (\"command\" in item) projected.command = item.command;\n  const input = asRecord(item.input);\n  if (input && \"command\" in input) projected.input = { command: input.command };\n  const result = asRecord(item.result);\n  if (result && \"command\" in result) projected.result = { command: result.command };\n  return Object.keys(projected).length > 0 ? projected : undefined;\n}\n\nfunction summarizeText(value: string): string | null {\n  const lines = value\n    .split(/\\r?\\n/u)\n    .map((line) => line.replace(/\\s+/g, \" \").trim())\n    .filter(Boolean);\n  const firstLine = lines.find((line) => line !== \"```\");\n  if (firstLine) return firstLine.length <= 84 ? firstLine : `${firstLine.slice(0, 83).trimEnd()}…`;\n  return lines.length > 1 ? `${lines.length.toLocaleString()} lines` : null;\n}\n\nfunction extractMcpResultText(result: unknown): string | null {\n  if (typeof result === \"string\") return result;\n  const record = asRecord(result);\n  if (!record) return null;\n  if (typeof record.content === \"string\") return record.content;\n  if (!Array.isArray(record.content)) return null;\n  const texts = record.content.flatMap((entry) => {\n    const text = asRecord(entry)?.text;\n    return typeof text === \"string\" && text.trim().length > 0 ? [text] : [];\n  });\n  return texts.length > 0 ? texts.join(\"\\n\") : null;\n}\n\nfunction summarizeMcpResult(result: unknown): Record<string, unknown> | undefined {\n  if (result === undefined || result === null) return undefined;\n  const text = extractMcpResultText(result);\n  const summary = text ? summarizeText(text) : null;\n  return summary ? { content: summary } : undefined;\n}\n\nconst MCP_ITEM_KEPT_FIELDS = [\n  \"type\",\n  \"id\",\n  \"tool\",\n  \"server\",\n  \"status\",\n  \"arguments\",\n  \"appContext\",\n  \"error\",\n  \"durationMs\",\n] as const;\n\nfunction projectMcpToolCallData(data: Record<string, unknown>): Record<string, unknown> {\n  const projected: Record<string, unknown> = {};\n  const item = asRecord(data.item);\n  if (item) {\n    const projectedItem: Record<string, unknown> = {};\n    for (const key of MCP_ITEM_KEPT_FIELDS) {\n      if (key in item) projectedItem[key] = item[key];\n    }\n    const result = summarizeMcpResult(item.result);\n    if (result) projectedItem.result = result;\n    projected.item = projectedItem;\n  }\n  for (const key of [\"toolName\", \"input\", \"toolCallId\", \"kind\"] as const) {\n    if (key in data) projected[key] = data[key];\n  }\n  if (!item) {\n    const result = summarizeMcpResult(data.result);\n    if (result) projected.result = result;\n  }\n  const files: string[] = [];\n  collectChangedFiles(data, files, new Set());\n  if (files.length > 0) projected.files = files.map((path) => ({ path }));\n  return projected;\n}\n\nfunction projectRawOutput(value: unknown): Record<string, unknown> | undefined {\n  const output = asRecord(value);\n  if (!output) return undefined;\n  if (typeof output.totalFiles === \"number\" && Number.isFinite(output.totalFiles)) {\n    return {\n      totalFiles: output.totalFiles,\n      ...(output.truncated === true ? { truncated: true } : {}),\n    };\n  }\n  for (const key of [\"content\", \"stdout\"] as const) {\n    const text = asTrimmedString(output[key]);\n    const summary = text ? summarizeText(text) : null;\n    if (summary) return { content: summary };\n  }\n  return undefined;\n}\n\n/** Projects persisted activity into the compact representation sent to clients. */\nexport function projectActivityPayload(\n  activity: OrchestrationThreadActivity,\n): OrchestrationThreadActivity {\n  const payload = asRecord(activity.payload);\n  const data = asRecord(payload?.data);\n  if (!payload || !data) return activity;\n  if (payload.itemType === \"mcp_tool_call\") {\n    return { ...activity, payload: { ...payload, data: projectMcpToolCallData(data) } };\n  }\n\n  const projected: Record<string, unknown> = {};\n  const item = projectCommandData(data);\n  if (item) projected.item = item;\n  for (const key of [\"command\", \"toolCallId\", \"kind\"] as const) {\n    if (key in data) projected[key] = data[key];\n  }\n  const files: string[] = [];\n  collectChangedFiles(data, files, new Set());\n  if (files.length > 0) projected.files = files.map((path) => ({ path }));\n  const rawOutput = projectRawOutput(data.rawOutput);\n  if (rawOutput) projected.rawOutput = rawOutput;\n  return { ...activity, payload: { ...payload, data: projected } };\n}\n\nfunction isResolvableContextWindow(activity: OrchestrationThreadActivity): boolean {\n  if (activity.kind !== \"context-window.updated\") return false;\n  const usedTokens = asRecord(activity.payload)?.usedTokens;\n  return typeof usedTokens === \"number\" && Number.isFinite(usedTokens) && usedTokens >= 0;\n}\n\nfunction dropStaleContextWindowActivities(\n  activities: ReadonlyArray<OrchestrationThreadActivity>,\n): ReadonlyArray<OrchestrationThreadActivity> {\n  const latestIndexByTurn = new Map<string | null, number>();\n  activities.forEach((activity, index) => {\n    if (isResolvableContextWindow(activity)) latestIndexByTurn.set(activity.turnId, index);\n  });\n  return latestIndexByTurn.size === 0\n    ? activities\n    : activities.filter(\n        (activity, index) =>\n          !isResolvableContextWindow(activity) || latestIndexByTurn.get(activity.turnId) === index,\n      );\n}\n\nfunction toolLifecycleIdentity(activity: OrchestrationThreadActivity): string | null {\n  const payload = asRecord(activity.payload);\n  if (!payload) return null;\n  const toolCallId = asTrimmedString(asRecord(payload.data)?.toolCallId);\n  if (toolCallId) return `id:${toolCallId}`;\n  const itemType = asTrimmedString(payload.itemType) ?? \"\";\n  const label = (asTrimmedString(payload.title) ?? activity.summary)\n    .replace(/\\s+(?:complete|completed)\\s*$/iu, \"\")\n    .trim();\n  const detail = asTrimmedString(payload.detail) ?? \"\";\n  return itemType.length || label.length || detail.length\n    ? [itemType, label, detail].join(\"\\u001f\")\n    : null;\n}\n\nfunction dropSupersededToolUpdates(\n  activities: ReadonlyArray<OrchestrationThreadActivity>,\n): ReadonlyArray<OrchestrationThreadActivity> {\n  const completionIndices = new Map<string, number[]>();\n  activities.forEach((activity, index) => {\n    if (activity.kind !== \"tool.completed\") return;\n    const identity = toolLifecycleIdentity(activity);\n    if (!identity) return;\n    const key = `${activity.turnId ?? \"\"}\\u0000${identity}`;\n    completionIndices.set(key, [...(completionIndices.get(key) ?? []), index]);\n  });\n  if (completionIndices.size === 0) return activities;\n  return activities.filter((activity, index) => {\n    if (activity.kind !== \"tool.updated\") return true;\n    const identity = toolLifecycleIdentity(activity);\n    if (!identity) return true;\n    return !completionIndices\n      .get(`${activity.turnId ?? \"\"}\\u0000${identity}`)\n      ?.some((completionIndex) => completionIndex > index);\n  });\n}\n\nexport function projectThreadDetailSnapshot(\n  snapshot: OrchestrationThreadDetailSnapshot,\n): OrchestrationThreadDetailSnapshot {\n  return {\n    ...snapshot,\n    thread: {\n      ...snapshot.thread,\n      activities: dropSupersededToolUpdates(\n        dropStaleContextWindowActivities(snapshot.thread.activities),\n      ).map(projectActivityPayload),\n    },\n  };\n}\n\nexport function projectActivityEvent(event: OrchestrationEvent): OrchestrationEvent {\n  return event.type === \"thread.activity-appended\"\n    ? {\n        ...event,\n        payload: { ...event.payload, activity: projectActivityPayload(event.payload.activity) },\n      }\n    : event;\n}\n","import { WS_METHODS } from \"@salchi/contracts\";\nimport * as Clock from \"effect/Clock\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Metric from \"effect/Metric\";\nimport * as References from \"effect/References\";\nimport * as Stream from \"effect/Stream\";\n\nimport { outcomeFromExit } from \"./Attributes.ts\";\nimport { metricAttributes, rpcRequestDuration, rpcRequestsTotal, withMetrics } from \"./Metrics.ts\";\n\nconst RPC_SPAN_PREFIX = \"ws.rpc\";\nconst DEFAULT_RPC_SPAN_ATTRIBUTES = {\n  \"rpc.transport\": \"websocket\",\n  \"rpc.system\": \"effect-rpc\",\n} as const;\nconst RPC_METHODS_WITH_TRACING_DISABLED: ReadonlySet<string> = new Set([\n  WS_METHODS.serverGetTraceDiagnostics,\n  WS_METHODS.serverGetProcessDiagnostics,\n  WS_METHODS.serverGetProcessResourceHistory,\n  WS_METHODS.serverSignalProcess,\n]);\n\nfunction shouldTraceRpc(method: string): boolean {\n  return !RPC_METHODS_WITH_TRACING_DISABLED.has(method);\n}\n\nconst rpcSpanAttributes = (\n  method: string,\n  traceAttributes?: Readonly<Record<string, unknown>>,\n): Record<string, unknown> => ({\n  ...DEFAULT_RPC_SPAN_ATTRIBUTES,\n  \"rpc.method\": method,\n  ...traceAttributes,\n});\n\nconst withRpcEffectTracing = <A, E, R>(\n  method: string,\n  effect: Effect.Effect<A, E, R>,\n  traceAttributes?: Readonly<Record<string, unknown>>,\n): Effect.Effect<A, E, R> =>\n  shouldTraceRpc(method)\n    ? effect.pipe(\n        Effect.withSpan(`${RPC_SPAN_PREFIX}.${method}`, {\n          attributes: rpcSpanAttributes(method, traceAttributes),\n        }),\n      )\n    : effect.pipe(Effect.provideService(References.TracerEnabled, false));\n\nconst withRpcStreamTracing = <A, E, R>(\n  method: string,\n  stream: Stream.Stream<A, E, R>,\n  traceAttributes?: Readonly<Record<string, unknown>>,\n): Stream.Stream<A, E, R> =>\n  shouldTraceRpc(method)\n    ? stream.pipe(\n        Stream.withSpan(`${RPC_SPAN_PREFIX}.${method}`, {\n          attributes: rpcSpanAttributes(method, traceAttributes),\n        }),\n      )\n    : stream.pipe(Stream.provideService(References.TracerEnabled, false));\n\nconst recordRpcStreamMetrics = <E>(\n  method: string,\n  startedAt: bigint,\n  exit: Exit.Exit<unknown, E>,\n): Effect.Effect<void, never, never> =>\n  Effect.gen(function* () {\n    const endedAt = yield* Clock.currentTimeNanos;\n    const elapsedNanos = endedAt > startedAt ? endedAt - startedAt : 0n;\n\n    yield* Metric.update(\n      Metric.withAttributes(rpcRequestDuration, metricAttributes({ method })),\n      Duration.nanos(elapsedNanos),\n    );\n    yield* Metric.update(\n      Metric.withAttributes(\n        rpcRequestsTotal,\n        metricAttributes({\n          method,\n          outcome: outcomeFromExit(exit),\n        }),\n      ),\n      1,\n    );\n  });\n\nexport const observeRpcEffect = <A, E, R>(\n  method: string,\n  effect: Effect.Effect<A, E, R>,\n  traceAttributes?: Readonly<Record<string, unknown>>,\n): Effect.Effect<A, E, R> => {\n  const instrumented = effect.pipe(\n    withMetrics({\n      counter: rpcRequestsTotal,\n      timer: rpcRequestDuration,\n      attributes: {\n        method,\n      },\n    }),\n  );\n\n  return withRpcEffectTracing(method, instrumented, traceAttributes);\n};\n\nexport const observeRpcStream = <A, E, R>(\n  method: string,\n  stream: Stream.Stream<A, E, R>,\n  traceAttributes?: Readonly<Record<string, unknown>>,\n): Stream.Stream<A, E, R> => {\n  const instrumented = Stream.unwrap(\n    Effect.gen(function* () {\n      const startedAt = yield* Clock.currentTimeNanos;\n      return stream.pipe(Stream.onExit((exit) => recordRpcStreamMetrics(method, startedAt, exit)));\n    }),\n  );\n\n  return withRpcStreamTracing(method, instrumented, traceAttributes);\n};\n\nexport const observeRpcStreamEffect = <A, StreamError, StreamContext, EffectError, EffectContext>(\n  method: string,\n  effect: Effect.Effect<Stream.Stream<A, StreamError, StreamContext>, EffectError, EffectContext>,\n  traceAttributes?: Readonly<Record<string, unknown>>,\n): Stream.Stream<A, StreamError | EffectError, StreamContext | EffectContext> => {\n  const instrumented = Stream.unwrap(\n    Effect.gen(function* () {\n      const startedAt = yield* Clock.currentTimeNanos;\n      const exit = yield* Effect.exit(effect);\n\n      if (Exit.isFailure(exit)) {\n        yield* recordRpcStreamMetrics(method, startedAt, exit);\n        return yield* Effect.failCause(exit.cause);\n      }\n\n      return exit.value.pipe(\n        Stream.onExit((streamExit) => recordRpcStreamMetrics(method, startedAt, streamExit)),\n      );\n    }),\n  );\n\n  return withRpcStreamTracing(method, instrumented, traceAttributes);\n};\n","import * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\n\ntype CauseLogLevel = \"Debug\" | \"Warning\" | \"Error\";\n\nexport function ignoreCauseUnlessInterrupted<R, E>(\n  effect: Effect.Effect<unknown, E, R>,\n  options: {\n    readonly message: string;\n    readonly level?: CauseLogLevel;\n    readonly fields?: Record<string, unknown>;\n  },\n): Effect.Effect<void, never, R> {\n  const logFields = (cause: Cause.Cause<E>) => ({\n    ...options.fields,\n    cause: Cause.pretty(cause),\n  });\n  const logCause = (cause: Cause.Cause<E>) => {\n    switch (options.level ?? \"Warning\") {\n      case \"Debug\":\n        return Effect.logDebug(options.message, logFields(cause));\n      case \"Error\":\n        return Effect.logError(options.message, logFields(cause));\n      case \"Warning\":\n        return Effect.logWarning(options.message, logFields(cause));\n    }\n  };\n\n  return effect.pipe(\n    Effect.matchCauseEffect({\n      onFailure: (cause) => (Cause.hasInterruptsOnly(cause) ? Effect.void : logCause(cause)),\n      onSuccess: () => Effect.void,\n    }),\n  );\n}\n","/**\n * ProviderRegistry - Provider snapshot service.\n *\n * Owns provider install/auth/version/model snapshots and exposes the latest\n * provider state to transport layers.\n *\n * @module ProviderRegistry\n */\nimport type {\n  ProviderInstanceId,\n  ProviderDriverKind,\n  ServerProvider,\n  ServerProviderUpdateState,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\nimport type { ProviderMaintenanceCapabilities } from \"../providerMaintenance.ts\";\n\nexport type ProviderMaintenanceActionKind = \"update\";\n\nexport interface ProviderRegistryShape {\n  /**\n   * Read the latest provider snapshots for every configured instance.\n   * Multiple snapshots may share the same `provider` kind (multiple\n   * instances of the same driver) and disambiguate via `instanceId`.\n   */\n  readonly getProviders: Effect.Effect<ReadonlyArray<ServerProvider>>;\n\n  /**\n   * Refresh all providers, or the default instance of the specified\n   * kind when supplied.\n   *\n   * Retained for back-compat with legacy call sites (WS refresh RPC,\n   * orchestration metrics). New code should prefer `refreshInstance`.\n   *\n   * @deprecated prefer `refreshInstance` for new call sites.\n   */\n  readonly refresh: (provider?: ProviderDriverKind) => Effect.Effect<ReadonlyArray<ServerProvider>>;\n\n  /**\n   * Refresh the specific configured instance. Returns the updated snapshot\n   * list. When the instance id is unknown the call resolves with the\n   * currently cached list (no error) — matching the legacy `refresh` shim\n   * behaviour so transport layers don't have to special-case unknowns.\n   */\n  readonly refreshInstance: (\n    instanceId: ProviderInstanceId,\n  ) => Effect.Effect<ReadonlyArray<ServerProvider>>;\n\n  /**\n   * Resolve the maintenance capabilities owned by one live provider instance.\n   * Falls back to manual-only capabilities when the instance is not live.\n   */\n  readonly getProviderMaintenanceCapabilitiesForInstance: (\n    instanceId: ProviderInstanceId,\n    provider: ProviderDriverKind,\n  ) => Effect.Effect<ProviderMaintenanceCapabilities>;\n\n  /**\n   * Apply volatile maintenance-action state to one configured instance.\n   * This state is never persisted to disk. Today only update actions are\n   * projected onto `ServerProvider.updateState`; install/auth actions can\n   * extend this action map without adding driver-scoped APIs.\n   */\n  readonly setProviderMaintenanceActionState: (input: {\n    readonly instanceId: ProviderInstanceId;\n    readonly action: ProviderMaintenanceActionKind;\n    readonly state: ServerProviderUpdateState | null;\n  }) => Effect.Effect<ReadonlyArray<ServerProvider>>;\n\n  /**\n   * Stream of provider snapshot updates — one emission per aggregated\n   * change. The array contains the full current state.\n   */\n  readonly streamChanges: Stream.Stream<ReadonlyArray<ServerProvider>>;\n}\n\nexport class ProviderRegistry extends Context.Service<ProviderRegistry, ProviderRegistryShape>()(\n  \"salchi/provider/Services/ProviderRegistry\",\n) {}\n","/**\n * ProviderService - Service interface for provider sessions, turns, and checkpoints.\n *\n * Acts as the cross-provider facade used by transports (WebSocket/RPC). It\n * resolves provider adapters through `ProviderAdapterRegistry`, routes\n * session-scoped calls via `ProviderSessionDirectory`, and exposes one unified\n * provider event stream to callers.\n *\n * Uses Effect `Context.Service` for dependency injection and returns typed\n * domain errors for validation, session, codex, and checkpoint workflows.\n *\n * @module ProviderService\n */\nimport type {\n  ProviderDriverKind,\n  ProviderInterruptTurnInput,\n  ProviderInstanceId,\n  ProviderRespondToRequestInput,\n  ProviderRespondToUserInputInput,\n  ProviderRuntimeEvent,\n  ProviderSendTurnInput,\n  ProviderSteerTurnInput,\n  ProviderSession,\n  ProviderSessionStartInput,\n  ProviderSessionRuntimeStatus,\n  ProviderStopSessionInput,\n  RuntimeMode,\n  ThreadId,\n  ProviderTurnStartResult,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\n\nimport type { ProviderServiceError } from \"../Errors.ts\";\nimport type { ProviderAdapterCapabilities } from \"./ProviderAdapter.ts\";\nimport type { ProviderInstanceRoutingInfo } from \"./ProviderAdapterRegistry.ts\";\n\nexport interface RegisterMaterializedSessionBindingInput {\n  readonly threadId: ThreadId;\n  readonly provider: ProviderDriverKind;\n  readonly providerInstanceId: ProviderInstanceId;\n  readonly runtimeMode: RuntimeMode;\n  readonly resumeCursor: unknown;\n  readonly runtimePayload: unknown;\n  readonly status: ProviderSessionRuntimeStatus;\n}\n\n/**\n * ProviderServiceShape - Service API for provider session and turn orchestration.\n */\nexport interface ProviderServiceShape {\n  /**\n   * Start a provider session.\n   */\n  readonly startSession: (\n    threadId: ThreadId,\n    input: ProviderSessionStartInput,\n  ) => Effect.Effect<ProviderSession, ProviderServiceError>;\n\n  /**\n   * Register a durable provider binding for a materialized virtual child\n   * session without starting another provider process.\n   */\n  readonly registerMaterializedSessionBinding: (\n    input: RegisterMaterializedSessionBindingInput,\n  ) => Effect.Effect<void, ProviderServiceError>;\n\n  /**\n   * Send a provider turn.\n   */\n  readonly sendTurn: (\n    input: ProviderSendTurnInput,\n  ) => Effect.Effect<ProviderTurnStartResult, ProviderServiceError>;\n\n  /**\n   * Append input to the expected active provider turn.\n   */\n  readonly steerTurn: (\n    input: ProviderSteerTurnInput,\n  ) => Effect.Effect<ProviderTurnStartResult, ProviderServiceError>;\n\n  /**\n   * Interrupt a running provider turn.\n   */\n  readonly interruptTurn: (\n    input: ProviderInterruptTurnInput,\n  ) => Effect.Effect<void, ProviderServiceError>;\n\n  /**\n   * Respond to a provider approval request.\n   */\n  readonly respondToRequest: (\n    input: ProviderRespondToRequestInput,\n  ) => Effect.Effect<void, ProviderServiceError>;\n\n  /**\n   * Respond to a provider structured user-input request.\n   */\n  readonly respondToUserInput: (\n    input: ProviderRespondToUserInputInput,\n  ) => Effect.Effect<void, ProviderServiceError>;\n\n  /**\n   * Stop a provider session.\n   */\n  readonly stopSession: (\n    input: ProviderStopSessionInput,\n  ) => Effect.Effect<void, ProviderServiceError>;\n\n  /**\n   * List active provider sessions.\n   *\n   * Aggregates runtime session lists from all registered adapters.\n   */\n  readonly listSessions: () => Effect.Effect<ReadonlyArray<ProviderSession>>;\n\n  /**\n   * Read capabilities for the adapter bound to a configured provider instance.\n   */\n  readonly getCapabilities: (\n    instanceId: ProviderInstanceId,\n  ) => Effect.Effect<ProviderAdapterCapabilities, ProviderServiceError>;\n\n  readonly getInstanceInfo: (\n    instanceId: ProviderInstanceId,\n  ) => Effect.Effect<ProviderInstanceRoutingInfo, ProviderServiceError>;\n\n  /**\n   * Roll back provider conversation state by a number of turns.\n   */\n  readonly rollbackConversation: (input: {\n    readonly threadId: ThreadId;\n    readonly numTurns: number;\n  }) => Effect.Effect<void, ProviderServiceError>;\n\n  /**\n   * Best-effort refresh for usage/rate-limit telemetry on active sessions.\n   */\n  readonly refreshUsage: () => Effect.Effect<{\n    readonly accountRateLimits: ReadonlyArray<{\n      readonly providerInstanceId: ProviderInstanceId;\n      readonly provider: ProviderDriverKind;\n      readonly rateLimits: unknown;\n    }>;\n  }>;\n\n  /**\n   * Canonical provider runtime event stream.\n   *\n   * Fan-out is owned by ProviderService (not by a standalone event-bus service).\n   */\n  readonly streamEvents: Stream.Stream<ProviderRuntimeEvent>;\n}\n\n/**\n * ProviderService - Service tag for provider orchestration.\n */\nexport class ProviderService extends Context.Service<ProviderService, ProviderServiceShape>()(\n  \"salchi/provider/Services/ProviderService\",\n) {}\n","import * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport * as Semaphore from \"effect/Semaphore\";\n\nexport interface ProviderMaintenanceCommandCoordinatorShape<E> {\n  readonly withCommandLock: <A, R>(input: {\n    readonly targetKey: string;\n    readonly lockKey: string;\n    readonly onQueued?: Effect.Effect<void, E, R>;\n    readonly run: Effect.Effect<A, E, R>;\n  }) => Effect.Effect<A, E, R>;\n}\n\nexport const makeProviderMaintenanceCommandCoordinator = Effect.fn(\n  \"makeProviderMaintenanceCommandCoordinator\",\n)(function* <E>(input: { readonly makeAlreadyRunningError: (targetKey: string) => E }) {\n  const runningTargetsRef = yield* Ref.make<ReadonlySet<string>>(new Set());\n  const locksRef = yield* Ref.make<ReadonlyMap<string, Semaphore.Semaphore>>(new Map());\n\n  const acquireTarget = Effect.fn(\"acquireTarget\")(function* (targetKey: string) {\n    return yield* Ref.modify(runningTargetsRef, (runningTargets) => {\n      if (runningTargets.has(targetKey)) {\n        return [false, runningTargets] as const;\n      }\n      const next = new Set(runningTargets);\n      next.add(targetKey);\n      return [true, next] as const;\n    });\n  });\n\n  const releaseTarget = (targetKey: string) =>\n    Ref.update(runningTargetsRef, (runningTargets) => {\n      const next = new Set(runningTargets);\n      next.delete(targetKey);\n      return next;\n    });\n\n  const getLock = Effect.fn(\"getProviderMaintenanceCommandLock\")(function* (lockKey: string) {\n    const existing = (yield* Ref.get(locksRef)).get(lockKey);\n    if (existing) {\n      return existing;\n    }\n\n    const lock = yield* Semaphore.make(1);\n    return yield* Ref.modify(locksRef, (locks) => {\n      const current = locks.get(lockKey);\n      if (current) {\n        return [current, locks] as const;\n      }\n      const next = new Map(locks);\n      next.set(lockKey, lock);\n      return [lock, next] as const;\n    });\n  });\n\n  const withCommandLock: ProviderMaintenanceCommandCoordinatorShape<E>[\"withCommandLock\"] = ({\n    targetKey,\n    lockKey,\n    onQueued,\n    run,\n  }) =>\n    Effect.gen(function* () {\n      const acquired = yield* acquireTarget(targetKey);\n      if (!acquired) {\n        return yield* Effect.fail(input.makeAlreadyRunningError(targetKey));\n      }\n\n      return yield* Effect.gen(function* () {\n        const lock = yield* getLock(lockKey);\n        const immediate = yield* lock.withPermitsIfAvailable(1)(run);\n        return yield* Option.match(immediate, {\n          onSome: (value) => Effect.succeed(value),\n          onNone: () =>\n            Effect.gen(function* () {\n              if (onQueued) {\n                yield* onQueued;\n              }\n              return yield* lock.withPermits(1)(run);\n            }),\n        });\n      }).pipe(Effect.ensuring(releaseTarget(targetKey)));\n    });\n\n  return {\n    withCommandLock,\n  } satisfies ProviderMaintenanceCommandCoordinatorShape<E>;\n});\n","interface ParsedSemver {\n  readonly major: number;\n  readonly minor: number;\n  readonly patch: number;\n  readonly prerelease: ReadonlyArray<string>;\n}\n\nconst SEMVER_NUMBER_SEGMENT = /^\\d+$/;\n\nexport function normalizeSemverVersion(version: string): string {\n  const [main, prerelease] = version.trim().split(\"-\", 2);\n  const segments: string[] = [];\n  for (const segment of (main ?? \"\").split(\".\")) {\n    const trimmed = segment.trim();\n    if (trimmed.length > 0) {\n      segments.push(trimmed);\n    }\n  }\n\n  if (segments.length === 2) {\n    segments.push(\"0\");\n  }\n\n  return prerelease ? `${segments.join(\".\")}-${prerelease}` : segments.join(\".\");\n}\n\nexport function parseSemver(value: string): ParsedSemver | null {\n  const normalized = normalizeSemverVersion(value).replace(/^v/, \"\");\n  const [main = \"\", prerelease] = normalized.split(\"-\", 2);\n  const segments = main.split(\".\");\n  if (segments.length !== 3) {\n    return null;\n  }\n\n  const [majorSegment, minorSegment, patchSegment] = segments;\n  if (majorSegment === undefined || minorSegment === undefined || patchSegment === undefined) {\n    return null;\n  }\n  if (\n    !SEMVER_NUMBER_SEGMENT.test(majorSegment) ||\n    !SEMVER_NUMBER_SEGMENT.test(minorSegment) ||\n    !SEMVER_NUMBER_SEGMENT.test(patchSegment)\n  ) {\n    return null;\n  }\n\n  const major = Number.parseInt(majorSegment, 10);\n  const minor = Number.parseInt(minorSegment, 10);\n  const patch = Number.parseInt(patchSegment, 10);\n  if (![major, minor, patch].every(Number.isInteger)) {\n    return null;\n  }\n\n  return {\n    major,\n    minor,\n    patch,\n    prerelease: parsePrereleaseSegments(prerelease),\n  };\n}\n\nfunction parsePrereleaseSegments(prerelease: string | undefined): ReadonlyArray<string> {\n  if (prerelease === undefined) {\n    return [];\n  }\n  const segments: string[] = [];\n  for (const segment of prerelease.split(\".\")) {\n    const trimmed = segment.trim();\n    if (trimmed.length > 0) {\n      segments.push(trimmed);\n    }\n  }\n  return segments;\n}\n\nfunction comparePrereleaseIdentifier(left: string, right: string): number {\n  const leftNumeric = SEMVER_NUMBER_SEGMENT.test(left);\n  const rightNumeric = SEMVER_NUMBER_SEGMENT.test(right);\n\n  if (leftNumeric && rightNumeric) {\n    return Number.parseInt(left, 10) - Number.parseInt(right, 10);\n  }\n  if (leftNumeric) {\n    return -1;\n  }\n  if (rightNumeric) {\n    return 1;\n  }\n  return left.localeCompare(right);\n}\n\nexport function compareSemverVersions(left: string, right: string): number {\n  const parsedLeft = parseSemver(left);\n  const parsedRight = parseSemver(right);\n  if (!parsedLeft || !parsedRight) {\n    return left.localeCompare(right);\n  }\n\n  if (parsedLeft.major !== parsedRight.major) {\n    return parsedLeft.major - parsedRight.major;\n  }\n  if (parsedLeft.minor !== parsedRight.minor) {\n    return parsedLeft.minor - parsedRight.minor;\n  }\n  if (parsedLeft.patch !== parsedRight.patch) {\n    return parsedLeft.patch - parsedRight.patch;\n  }\n\n  if (parsedLeft.prerelease.length === 0 && parsedRight.prerelease.length === 0) {\n    return 0;\n  }\n  if (parsedLeft.prerelease.length === 0) {\n    return 1;\n  }\n  if (parsedRight.prerelease.length === 0) {\n    return -1;\n  }\n\n  const length = Math.max(parsedLeft.prerelease.length, parsedRight.prerelease.length);\n  for (let index = 0; index < length; index += 1) {\n    const leftIdentifier = parsedLeft.prerelease[index];\n    const rightIdentifier = parsedRight.prerelease[index];\n    if (leftIdentifier === undefined) {\n      return -1;\n    }\n    if (rightIdentifier === undefined) {\n      return 1;\n    }\n    const comparison = comparePrereleaseIdentifier(leftIdentifier, rightIdentifier);\n    if (comparison !== 0) {\n      return comparison;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * Small semver range checker for CLI/runtime gates.\n *\n * Keep the function body valid plain JavaScript: SSH startup stringifies this\n * function and runs it on remote Node versions before TypeScript support is known.\n *\n * @param rawVersion Version string, with or without a leading `v`.\n * @param range Space-separated comparators, with `||` range groups.\n * @returns Whether `rawVersion` satisfies the supported range syntax.\n */\nexport const satisfiesSemverRange: (rawVersion: string, range: string) => boolean =\n  function satisfiesSemverRange(rawVersion, range) {\n    const normalizedVersion = String(rawVersion).trim().replace(/^v/, \"\");\n    const versionMatch = normalizedVersion.match(\n      /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-[0-9A-Za-z.-]+)?$/,\n    );\n    if (!versionMatch) {\n      return false;\n    }\n\n    const version = {\n      major: Number(versionMatch[1]),\n      minor: Number(versionMatch[2] || 0),\n      patch: Number(versionMatch[3] || 0),\n    };\n\n    return range.split(\"||\").some((group) => {\n      const comparators = group.trim().split(/\\s+/).filter(Boolean);\n      if (comparators.length === 0) {\n        return false;\n      }\n      return comparators.every((comparator) => {\n        const match = comparator.trim().match(/^(\\^|>=|>|<=|<|=)?\\s*v?(\\d+(?:\\.\\d+){0,2})$/);\n        if (!match) {\n          return false;\n        }\n        const targetVersion = match[2];\n        if (targetVersion === undefined) {\n          return false;\n        }\n        const targetMatch = targetVersion.match(/^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?$/);\n        if (!targetMatch) {\n          return false;\n        }\n        const target = {\n          major: Number(targetMatch[1]),\n          minor: Number(targetMatch[2] || 0),\n          patch: Number(targetMatch[3] || 0),\n        };\n        const compared =\n          version.major !== target.major\n            ? version.major > target.major\n              ? 1\n              : -1\n            : version.minor !== target.minor\n              ? version.minor > target.minor\n                ? 1\n                : -1\n              : version.patch !== target.patch\n                ? version.patch > target.patch\n                  ? 1\n                  : -1\n                : 0;\n        const operator = match[1] || \"=\";\n        switch (operator) {\n          case \"^\":\n            if (compared < 0) {\n              return false;\n            }\n            if (target.major > 0) {\n              return version.major === target.major;\n            }\n            if (target.minor > 0) {\n              return version.major === 0 && version.minor === target.minor;\n            }\n            return version.major === 0 && version.minor === 0 && version.patch === target.patch;\n          case \">=\":\n            return compared >= 0;\n          case \">\":\n            return compared > 0;\n          case \"<=\":\n            return compared <= 0;\n          case \"<\":\n            return compared < 0;\n          case \"=\":\n            return compared === 0;\n          default:\n            return false;\n        }\n      });\n    });\n  };\n","import {\n  ProviderDriverKind,\n  type ServerProvider,\n  type ServerProviderVersionAdvisory,\n} from \"@salchi/contracts\";\nimport { compareSemverVersions } from \"@salchi/shared/semver\";\nimport { resolveCommandPath } from \"@salchi/shared/shell\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\n\nconst LATEST_VERSION_CACHE_TTL_MS = 60 * 60 * 1_000;\nconst LATEST_VERSION_TIMEOUT_MS = 4_000;\nconst PROVIDER_UPDATE_ACTION_TOAST_MESSAGE = \"Install the update now or review provider settings.\";\n\nexport interface ProviderMaintenanceCapabilities {\n  readonly provider: ProviderDriverKind;\n  readonly packageName: string | null;\n  readonly update: ProviderMaintenanceCommandAction | null;\n}\n\nexport interface ProviderMaintenanceCommandAction {\n  readonly command: string;\n  readonly executable: string;\n  readonly args: ReadonlyArray<string>;\n  readonly lockKey: string;\n}\n\nexport interface ProviderMaintenanceCapabilityResolutionOptions {\n  readonly binaryPath?: string | null;\n  readonly env?: NodeJS.ProcessEnv;\n  readonly platform?: NodeJS.Platform;\n  readonly realCommandPath?: string | null;\n}\n\nexport interface ProviderMaintenanceCapabilitiesResolver {\n  readonly resolve: (\n    options?: ProviderMaintenanceCapabilityResolutionOptions,\n  ) => ProviderMaintenanceCapabilities;\n}\n\nexport interface PackageManagedProviderMaintenanceDefinition {\n  readonly provider: ProviderDriverKind;\n  readonly npmPackageName: string;\n  readonly homebrewFormula: string | null;\n  readonly nativeUpdate: {\n    readonly executable: string;\n    readonly args: ReadonlyArray<string>;\n    readonly lockKey: string;\n    readonly isCommandPath: (commandPath: string) => boolean;\n  } | null;\n}\n\ninterface LatestVersionCacheEntry {\n  readonly expiresAt: number;\n  readonly version: string | null;\n}\n\nconst latestVersionCache = new Map<string, LatestVersionCacheEntry>();\nconst NpmLatestVersionResponse = Schema.Struct({\n  version: Schema.optional(Schema.String),\n});\n\nexport function clearLatestProviderVersionCacheForTests(): void {\n  latestVersionCache.clear();\n}\n\nfunction nonEmptyString(value: unknown): string | null {\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nexport function makeProviderMaintenanceCapabilities(input: {\n  readonly provider: ProviderDriverKind;\n  readonly packageName: string | null;\n  readonly updateExecutable: string | null;\n  readonly updateArgs: ReadonlyArray<string>;\n  readonly updateLockKey: string | null;\n}): ProviderMaintenanceCapabilities {\n  const update =\n    input.updateExecutable === null || input.updateLockKey === null\n      ? null\n      : {\n          command: [input.updateExecutable, ...input.updateArgs].join(\" \"),\n          executable: input.updateExecutable,\n          args: input.updateArgs,\n          lockKey: input.updateLockKey,\n        };\n  return {\n    provider: input.provider,\n    packageName: input.packageName,\n    update,\n  };\n}\n\nexport function makeManualOnlyProviderMaintenanceCapabilities(input: {\n  readonly provider: ProviderDriverKind;\n  readonly packageName: string | null;\n}): ProviderMaintenanceCapabilities {\n  return makeProviderMaintenanceCapabilities({\n    provider: input.provider,\n    packageName: input.packageName,\n    updateExecutable: null,\n    updateArgs: [],\n    updateLockKey: null,\n  });\n}\n\nfunction makeNpmGlobalProviderMaintenanceCapabilities(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilities {\n  return makeProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n    updateExecutable: \"npm\",\n    updateArgs: [\"install\", \"-g\", `${definition.npmPackageName}@latest`],\n    updateLockKey: \"npm-global\",\n  });\n}\n\nfunction makeBunGlobalProviderMaintenanceCapabilities(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilities {\n  return makeProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n    updateExecutable: \"bun\",\n    updateArgs: [\"i\", \"-g\", `${definition.npmPackageName}@latest`],\n    updateLockKey: \"bun-global\",\n  });\n}\n\nfunction makePnpmGlobalProviderMaintenanceCapabilities(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilities {\n  return makeProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n    updateExecutable: \"pnpm\",\n    updateArgs: [\"add\", \"-g\", `${definition.npmPackageName}@latest`],\n    updateLockKey: \"pnpm-global\",\n  });\n}\n\nfunction makeVitePlusGlobalProviderMaintenanceCapabilities(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilities {\n  return makeProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n    updateExecutable: \"vp\",\n    updateArgs: [\"i\", \"-g\", definition.npmPackageName],\n    updateLockKey: \"vite-plus-global\",\n  });\n}\n\nfunction makeHomebrewProviderMaintenanceCapabilities(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilities {\n  if (!definition.homebrewFormula) {\n    return makeManualOnlyProviderMaintenanceCapabilities({\n      provider: definition.provider,\n      packageName: definition.npmPackageName,\n    });\n  }\n\n  return makeProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n    updateExecutable: \"brew\",\n    updateArgs: [\"upgrade\", definition.homebrewFormula],\n    updateLockKey: \"homebrew\",\n  });\n}\n\nfunction makeNativeProviderMaintenanceCapabilities(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilities | null {\n  if (!definition.nativeUpdate) {\n    return null;\n  }\n\n  return makeProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n    updateExecutable: definition.nativeUpdate.executable,\n    updateArgs: definition.nativeUpdate.args,\n    updateLockKey: definition.nativeUpdate.lockKey,\n  });\n}\n\nexport function hasPathSeparator(value: string): boolean {\n  return value.includes(\"/\") || value.includes(\"\\\\\");\n}\n\nexport function normalizeCommandPath(commandPath: string): string {\n  return commandPath.replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction isBunGlobalCommandPath(commandPath: string): boolean {\n  return normalizeCommandPath(commandPath).includes(\"/.bun/bin/\");\n}\n\nfunction isVitePlusGlobalCommandPath(commandPath: string): boolean {\n  return normalizeCommandPath(commandPath).includes(\"/.vite-plus/bin/\");\n}\n\nfunction isPnpmGlobalCommandPath(commandPath: string): boolean {\n  const normalized = normalizeCommandPath(commandPath);\n  return (\n    normalized.includes(\"/.local/share/pnpm/\") ||\n    normalized.includes(\"/library/pnpm/\") ||\n    normalized.includes(\"/local/share/pnpm/\") ||\n    normalized.includes(\"/appdata/local/pnpm/\") ||\n    normalized.includes(\"/pnpm/global/\")\n  );\n}\n\nfunction isNpmGlobalCommandPath(commandPath: string): boolean {\n  const normalized = normalizeCommandPath(commandPath);\n  return (\n    normalized.includes(\"/node_modules/.bin/\") ||\n    normalized.includes(\"/lib/node_modules/\") ||\n    normalized.includes(\"/npm/node_modules/\")\n  );\n}\n\nfunction isHomebrewCommandPath(commandPath: string): boolean {\n  const normalized = normalizeCommandPath(commandPath);\n  return (\n    normalized.includes(\"/opt/homebrew/cellar/\") ||\n    normalized.includes(\"/usr/local/cellar/\") ||\n    normalized.includes(\"/homebrew/cellar/\") ||\n    normalized.includes(\"/opt/homebrew/caskroom/\") ||\n    normalized.includes(\"/usr/local/caskroom/\") ||\n    normalized.includes(\"/homebrew/caskroom/\") ||\n    normalized.startsWith(\"/opt/homebrew/bin/\") ||\n    normalized.startsWith(\"/usr/local/bin/\")\n  );\n}\n\nexport function resolvePackageManagedProviderMaintenance(\n  definition: PackageManagedProviderMaintenanceDefinition,\n  options?: ProviderMaintenanceCapabilityResolutionOptions,\n): ProviderMaintenanceCapabilities {\n  const binaryPath = nonEmptyString(options?.binaryPath);\n  if (!binaryPath) {\n    return makeNpmGlobalProviderMaintenanceCapabilities(definition);\n  }\n\n  const resolvedCommandPath =\n    resolveCommandPath(binaryPath, {\n      ...(options?.platform ? { platform: options.platform } : {}),\n      ...(options?.env ? { env: options.env } : {}),\n    }) ?? (hasPathSeparator(binaryPath) ? binaryPath : null);\n\n  if (resolvedCommandPath) {\n    const commandPaths = [\n      resolvedCommandPath,\n      ...(options?.realCommandPath ? [options.realCommandPath] : []),\n    ];\n\n    const nativeUpdate = definition.nativeUpdate;\n    if (\n      nativeUpdate &&\n      commandPaths.some((commandPath) => nativeUpdate.isCommandPath(commandPath))\n    ) {\n      return (\n        makeNativeProviderMaintenanceCapabilities(definition) ??\n        makeNpmGlobalProviderMaintenanceCapabilities(definition)\n      );\n    }\n    if (commandPaths.some(isVitePlusGlobalCommandPath)) {\n      return makeVitePlusGlobalProviderMaintenanceCapabilities(definition);\n    }\n    if (commandPaths.some(isBunGlobalCommandPath)) {\n      return makeBunGlobalProviderMaintenanceCapabilities(definition);\n    }\n    if (commandPaths.some(isPnpmGlobalCommandPath)) {\n      return makePnpmGlobalProviderMaintenanceCapabilities(definition);\n    }\n    if (commandPaths.some(isNpmGlobalCommandPath)) {\n      return makeNpmGlobalProviderMaintenanceCapabilities(definition);\n    }\n    if (commandPaths.some(isHomebrewCommandPath)) {\n      return makeHomebrewProviderMaintenanceCapabilities(definition);\n    }\n  }\n\n  if (!hasPathSeparator(binaryPath)) {\n    return makeNpmGlobalProviderMaintenanceCapabilities(definition);\n  }\n\n  return makeManualOnlyProviderMaintenanceCapabilities({\n    provider: definition.provider,\n    packageName: definition.npmPackageName,\n  });\n}\n\nexport function makePackageManagedProviderMaintenanceResolver(\n  definition: PackageManagedProviderMaintenanceDefinition,\n): ProviderMaintenanceCapabilitiesResolver {\n  return {\n    resolve: (options) => resolvePackageManagedProviderMaintenance(definition, options),\n  };\n}\n\nexport function makeStaticProviderMaintenanceResolver(\n  capabilities: ProviderMaintenanceCapabilities,\n): ProviderMaintenanceCapabilitiesResolver {\n  return {\n    resolve: () => capabilities,\n  };\n}\n\nfunction makeManualProviderMaintenanceCapabilities(\n  provider: ProviderDriverKind,\n): ProviderMaintenanceCapabilities {\n  return makeManualOnlyProviderMaintenanceCapabilities({\n    provider,\n    packageName: null,\n  });\n}\n\nexport const resolveProviderMaintenanceCapabilitiesEffect = Effect.fn(\n  \"resolveProviderMaintenanceCapabilitiesEffect\",\n)(function* (\n  resolver: ProviderMaintenanceCapabilitiesResolver,\n  options?: Omit<ProviderMaintenanceCapabilityResolutionOptions, \"realCommandPath\">,\n) {\n  const binaryPath = nonEmptyString(options?.binaryPath);\n  if (!binaryPath) {\n    return resolver.resolve(options);\n  }\n\n  const resolvedCommandPath =\n    resolveCommandPath(binaryPath, {\n      ...(options?.platform ? { platform: options.platform } : {}),\n      ...(options?.env ? { env: options.env } : {}),\n    }) ?? (hasPathSeparator(binaryPath) ? binaryPath : null);\n  if (!resolvedCommandPath) {\n    return resolver.resolve(options);\n  }\n\n  const fileSystem = yield* FileSystem.FileSystem;\n  const realCommandPath = yield* fileSystem\n    .realPath(resolvedCommandPath)\n    .pipe(Effect.catch(() => Effect.succeed(resolvedCommandPath)));\n  return resolver.resolve({\n    ...options,\n    realCommandPath,\n  });\n});\n\nfunction deriveVersionAdvisory(input: {\n  readonly currentVersion: string | null;\n  readonly latestVersion: string | null;\n}): Pick<ServerProviderVersionAdvisory, \"status\" | \"message\"> {\n  if (!input.currentVersion) {\n    return { status: \"unknown\", message: null };\n  }\n  if (!input.latestVersion) {\n    return { status: \"unknown\", message: null };\n  }\n  if (compareSemverVersions(input.currentVersion, input.latestVersion) < 0) {\n    return {\n      status: \"behind_latest\",\n      message: PROVIDER_UPDATE_ACTION_TOAST_MESSAGE,\n    };\n  }\n  return { status: \"current\", message: null };\n}\n\nexport function createProviderVersionAdvisory(input: {\n  readonly driver: ProviderDriverKind;\n  readonly currentVersion: string | null;\n  readonly latestVersion?: string | null;\n  readonly checkedAt?: string | null;\n  readonly maintenanceCapabilities?: ProviderMaintenanceCapabilities;\n}): ServerProviderVersionAdvisory {\n  const capabilities =\n    input.maintenanceCapabilities ?? makeManualProviderMaintenanceCapabilities(input.driver);\n  const latestVersion = input.latestVersion ?? null;\n  const advisory = deriveVersionAdvisory({\n    currentVersion: input.currentVersion,\n    latestVersion,\n  });\n\n  return {\n    status: advisory.status,\n    currentVersion: input.currentVersion,\n    latestVersion,\n    updateCommand: capabilities.update?.command ?? null,\n    canUpdate: capabilities.update !== null,\n    checkedAt: input.checkedAt ?? null,\n    message: advisory.message,\n  };\n}\n\nconst fetchNpmLatestVersion = Effect.fn(\"fetchNpmLatestVersion\")(function* (packageName: string) {\n  const client = yield* HttpClient.HttpClient;\n  const request = HttpClientRequest.get(\n    `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`,\n  ).pipe(HttpClientRequest.setHeader(\"accept\", \"application/json\"));\n  const response = yield* client.execute(request).pipe(\n    Effect.timeoutOption(LATEST_VERSION_TIMEOUT_MS),\n    Effect.catch(() => Effect.succeed(Option.none())),\n  );\n  if (Option.isNone(response)) {\n    return null;\n  }\n  const httpResponse = response.value;\n  if (httpResponse.status < 200 || httpResponse.status >= 300) {\n    return null;\n  }\n  const payload = yield* httpResponse.json.pipe(\n    Effect.flatMap(Schema.decodeUnknownEffect(NpmLatestVersionResponse)),\n    Effect.catch(() => Effect.succeed(null)),\n  );\n  return payload ? nonEmptyString(payload.version) : null;\n});\n\nexport const resolveLatestProviderVersion = Effect.fn(\"resolveLatestProviderVersion\")(function* (\n  maintenanceCapabilities: ProviderMaintenanceCapabilities,\n) {\n  const packageName = maintenanceCapabilities.packageName;\n  if (!packageName) {\n    return null;\n  }\n\n  const cached = latestVersionCache.get(packageName);\n  const now = DateTime.toEpochMillis(yield* DateTime.now);\n  if (cached && cached.expiresAt > now) {\n    return cached.version;\n  }\n\n  const version = yield* fetchNpmLatestVersion(packageName);\n  latestVersionCache.set(packageName, {\n    expiresAt: now + LATEST_VERSION_CACHE_TTL_MS,\n    version,\n  });\n  return version;\n});\n\nexport const enrichProviderSnapshotWithVersionAdvisory = Effect.fn(\n  \"enrichProviderSnapshotWithVersionAdvisory\",\n)(function* (snapshot: ServerProvider, maintenanceCapabilities?: ProviderMaintenanceCapabilities) {\n  const capabilities =\n    maintenanceCapabilities ?? makeManualProviderMaintenanceCapabilities(snapshot.driver);\n  if (!snapshot.enabled || !snapshot.installed || !snapshot.version) {\n    return {\n      ...snapshot,\n      versionAdvisory: createProviderVersionAdvisory({\n        driver: snapshot.driver,\n        currentVersion: snapshot.version,\n        checkedAt: snapshot.checkedAt,\n        maintenanceCapabilities: capabilities,\n      }),\n    };\n  }\n\n  const latestVersion = yield* resolveLatestProviderVersion(capabilities);\n  return {\n    ...snapshot,\n    versionAdvisory: createProviderVersionAdvisory({\n      driver: snapshot.driver,\n      currentVersion: snapshot.version,\n      latestVersion,\n      checkedAt: DateTime.formatIso(yield* DateTime.now),\n      maintenanceCapabilities: capabilities,\n    }),\n  };\n});\n","import {\n  defaultInstanceIdForDriver,\n  ProviderDriverKind,\n  ServerProviderUpdateError,\n  type ProviderInstanceId,\n  type ServerProvider,\n  type ServerProviderUpdatedPayload,\n  type ServerProviderUpdateState,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { ProviderRegistry } from \"./Services/ProviderRegistry.ts\";\nimport { makeProviderMaintenanceCommandCoordinator } from \"./providerMaintenanceCommandCoordinator.ts\";\nimport { enrichProviderSnapshotWithVersionAdvisory } from \"./providerMaintenance.ts\";\nimport type { ProviderMaintenanceCapabilities } from \"./providerMaintenance.ts\";\nimport { collectUint8StreamText } from \"../stream/collectUint8StreamText.ts\";\n\nconst UPDATE_TIMEOUT_MS = 5 * 60_000;\nconst UPDATE_OUTPUT_MAX_BYTES = 10_000;\n\nexport interface ProviderMaintenanceCommandResult {\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly exitCode: number | null;\n  readonly timedOut: boolean;\n  readonly stdoutTruncated: boolean;\n  readonly stderrTruncated: boolean;\n}\n\nexport interface ProviderMaintenanceRunnerShape {\n  /**\n   * Starts or attaches to a server-owned provider update job. The returned\n   * payload reflects the current provider snapshots after the launch is\n   * accepted; terminal success/failure is published later through provider\n   * updateState changes.\n   */\n  readonly updateProvider: (\n    target:\n      | ProviderDriverKind\n      | {\n          readonly provider: ProviderDriverKind;\n          readonly instanceId?: ProviderInstanceId | undefined;\n        },\n  ) => Effect.Effect<ServerProviderUpdatedPayload, ServerProviderUpdateError>;\n}\n\nexport class ProviderMaintenanceRunner extends Context.Service<\n  ProviderMaintenanceRunner,\n  ProviderMaintenanceRunnerShape\n>()(\"salchi/provider/providerMaintenanceRunner\") {}\n\nclass ProviderMaintenanceCommandError extends Data.TaggedError(\"ProviderMaintenanceCommandError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\ninterface VerifiedProviderRefresh {\n  readonly providers: ReadonlyArray<ServerProvider>;\n  readonly verifiedProviders: ReadonlyArray<ServerProvider>;\n}\n\ntype ProviderMaintenanceUpdateAction = NonNullable<ProviderMaintenanceCapabilities[\"update\"]>;\n\ninterface ActiveProviderUpdateJob {\n  readonly jobId: number;\n  readonly fiber: Fiber.Fiber<void, never>;\n}\n\ninterface ProviderUpdateLaunch {\n  readonly payload: ServerProviderUpdatedPayload;\n  readonly startGate: Deferred.Deferred<void> | null;\n}\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\nconst runProviderMaintenanceCommandWithSpawner = Effect.fn(\"ProviderMaintenanceRunner.runCommand\")(\n  function* (input: {\n    readonly spawner: ChildProcessSpawner.ChildProcessSpawner[\"Service\"];\n    readonly command: string;\n    readonly args: ReadonlyArray<string>;\n  }) {\n    const collectCommandResult = Effect.fn(\"ProviderMaintenanceRunner.collectCommandResult\")(\n      function* () {\n        const child = yield* input.spawner\n          .spawn(ChildProcess.make(input.command, [...input.args]))\n          .pipe(\n            Effect.mapError(\n              (cause) =>\n                new ProviderMaintenanceCommandError({\n                  message: `Failed to run update command ${input.command}: ${cause.message}`,\n                  cause,\n                }),\n            ),\n          );\n        yield* Effect.addFinalizer(() => child.kill().pipe(Effect.ignore));\n\n        const [stdout, stderr, exitCode] = yield* Effect.all(\n          [\n            collectUint8StreamText({\n              stream: child.stdout,\n              maxBytes: UPDATE_OUTPUT_MAX_BYTES,\n            }),\n            collectUint8StreamText({\n              stream: child.stderr,\n              maxBytes: UPDATE_OUTPUT_MAX_BYTES,\n            }),\n            child.exitCode,\n          ],\n          { concurrency: \"unbounded\" },\n        ).pipe(\n          Effect.mapError(\n            (cause) =>\n              new ProviderMaintenanceCommandError({\n                message: cause instanceof Error ? cause.message : \"Update command failed to run.\",\n                cause,\n              }),\n          ),\n        );\n\n        return {\n          stdout: stdout.text,\n          stderr: stderr.text,\n          exitCode: Number(exitCode),\n          timedOut: false,\n          stdoutTruncated: stdout.truncated,\n          stderrTruncated: stderr.truncated,\n        } satisfies ProviderMaintenanceCommandResult;\n      },\n    );\n\n    return yield* collectCommandResult().pipe(\n      Effect.scoped,\n      Effect.timeoutOption(Duration.millis(UPDATE_TIMEOUT_MS)),\n      Effect.map((result) =>\n        Option.match(result, {\n          onSome: (value) => value,\n          onNone: () =>\n            ({\n              stdout: \"\",\n              stderr: \"\",\n              exitCode: null,\n              timedOut: true,\n              stdoutTruncated: false,\n              stderrTruncated: false,\n            }) satisfies ProviderMaintenanceCommandResult,\n        }),\n      ),\n    );\n  },\n);\n\nfunction trimNullable(value: string): string | null {\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction truncateText(value: string, maxLength: number): string {\n  return value.length <= maxLength ? value : value.slice(0, maxLength);\n}\n\nfunction commandOutput(result: ProviderMaintenanceCommandResult): string | null {\n  const output = trimNullable([result.stderr, result.stdout].filter(Boolean).join(\"\\n\\n\"));\n  if (!output) {\n    return null;\n  }\n  return truncateText(output, UPDATE_OUTPUT_MAX_BYTES);\n}\n\nfunction failureMessage(result: ProviderMaintenanceCommandResult): string {\n  if (result.timedOut) {\n    return \"Update timed out.\";\n  }\n  if (result.exitCode !== null && result.exitCode !== 0) {\n    return `Update command exited with code ${result.exitCode}.`;\n  }\n  return \"Update command failed.\";\n}\n\nfunction isOutdatedProvider(provider: ServerProvider | undefined): boolean {\n  return provider?.versionAdvisory?.status === \"behind_latest\";\n}\n\nfunction makeUpdateState(input: {\n  readonly status: ServerProviderUpdateState[\"status\"];\n  readonly startedAt: string | null;\n  readonly finishedAt: string | null;\n  readonly message: string | null;\n  readonly output?: string | null;\n}): ServerProviderUpdateState {\n  return {\n    status: input.status,\n    startedAt: input.startedAt,\n    finishedAt: input.finishedAt,\n    message: input.message,\n    output: input.output ?? null,\n  };\n}\n\nexport const make = Effect.fn(\"ProviderMaintenanceRunner.make\")(function* () {\n  const providerRegistry = yield* ProviderRegistry;\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const httpClient = yield* HttpClient.HttpClient;\n  const workerScope = yield* Scope.make(\"sequential\");\n  yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void));\n  const activeJobsRef = yield* SynchronizedRef.make<\n    ReadonlyMap<ProviderInstanceId, ActiveProviderUpdateJob>\n  >(new Map());\n  const nextJobIdRef = yield* Ref.make(0);\n  const runMaintenanceCommand = (command: string, args: ReadonlyArray<string>) =>\n    runProviderMaintenanceCommandWithSpawner({\n      spawner,\n      command,\n      args,\n    });\n  const commandCoordinator = yield* makeProviderMaintenanceCommandCoordinator({\n    makeAlreadyRunningError: () =>\n      new ServerProviderUpdateError({\n        provider: ProviderDriverKind.make(\"unknown\"),\n        reason: \"An update is already running for this provider.\",\n      }),\n  });\n\n  const verifyRefreshedProvider = (\n    provider: ProviderDriverKind,\n    maintenanceCapabilities: ProviderMaintenanceCapabilities,\n    instanceId: ProviderInstanceId,\n  ): Effect.Effect<VerifiedProviderRefresh> =>\n    providerRegistry.getProviders.pipe(\n      Effect.map((providers) => {\n        const instanceIds: Array<ProviderInstanceId> = [];\n        for (const candidate of providers) {\n          if (candidate.driver === provider && candidate.instanceId === instanceId) {\n            instanceIds.push(candidate.instanceId);\n          }\n        }\n        return instanceIds;\n      }),\n      Effect.flatMap((instanceIds) =>\n        instanceIds.length === 0\n          ? providerRegistry.refreshInstance(instanceId)\n          : Effect.forEach(\n              instanceIds,\n              (instanceId) => providerRegistry.refreshInstance(instanceId),\n              {\n                concurrency: \"unbounded\",\n                discard: true,\n              },\n            ).pipe(Effect.andThen(providerRegistry.getProviders)),\n      ),\n      Effect.flatMap((providers) => {\n        const refreshedProviders = providers.filter(\n          (candidate) => candidate.driver === provider && candidate.instanceId === instanceId,\n        );\n        if (refreshedProviders.length === 0) {\n          return Effect.succeed<VerifiedProviderRefresh>({\n            providers,\n            verifiedProviders: [],\n          });\n        }\n        return Effect.forEach(\n          refreshedProviders,\n          (refreshedProvider) =>\n            enrichProviderSnapshotWithVersionAdvisory(\n              refreshedProvider,\n              maintenanceCapabilities,\n            ).pipe(Effect.provideService(HttpClient.HttpClient, httpClient)),\n          {\n            concurrency: \"unbounded\",\n          },\n        ).pipe(\n          Effect.map((verifiedProviders): VerifiedProviderRefresh => ({\n            providers,\n            verifiedProviders,\n          })),\n          Effect.catchCause((cause) =>\n            Effect.logWarning(\"Provider post-update version verification failed\", {\n              provider,\n              cause: Cause.pretty(cause),\n            }).pipe(\n              Effect.as<VerifiedProviderRefresh>({\n                providers,\n                verifiedProviders: refreshedProviders,\n              }),\n            ),\n          ),\n        );\n      }),\n    );\n\n  const removeActiveJob = (instanceId: ProviderInstanceId, jobId: number) =>\n    SynchronizedRef.update(activeJobsRef, (activeJobs) => {\n      const existing = activeJobs.get(instanceId);\n      if (!existing || existing.jobId !== jobId) {\n        return activeJobs;\n      }\n      const next = new Map(activeJobs);\n      next.delete(instanceId);\n      return next;\n    });\n\n  const runProviderUpdateToCompletion = Effect.fn(\n    \"ProviderMaintenanceRunner.runProviderUpdateToCompletion\",\n  )(function* (input: {\n    readonly provider: ProviderDriverKind;\n    readonly instanceId: ProviderInstanceId;\n    readonly capabilities: ProviderMaintenanceCapabilities;\n    readonly update: ProviderMaintenanceUpdateAction;\n  }) {\n    const { provider, instanceId, capabilities, update } = input;\n    const targetKey = `instance:${instanceId}`;\n    const setUpdateState = (state: ServerProviderUpdateState | null) =>\n      providerRegistry.setProviderMaintenanceActionState({\n        instanceId,\n        action: \"update\",\n        state,\n      });\n    const setQueuedState = setUpdateState(\n      makeUpdateState({\n        status: \"queued\",\n        startedAt: null,\n        finishedAt: null,\n        message: \"Waiting for another provider update to finish.\",\n      }),\n    ).pipe(Effect.asVoid);\n\n    const runProviderUpdate = Effect.fn(\"ProviderMaintenanceRunner.runProviderUpdate\")(\n      function* () {\n        const finish = (state: ServerProviderUpdateState) =>\n          setUpdateState(state).pipe(Effect.map((providers) => ({ providers })));\n        const startedAtRef = yield* Ref.make<string | null>(null);\n\n        const runCommandAndVerify = Effect.fn(\"ProviderMaintenanceRunner.runCommandAndVerify\")(\n          function* () {\n            const startedAt = yield* nowIso;\n            yield* Ref.set(startedAtRef, startedAt);\n            yield* setUpdateState(\n              makeUpdateState({\n                status: \"running\",\n                startedAt,\n                finishedAt: null,\n                message: \"Updating provider.\",\n              }),\n            );\n\n            const result = yield* runMaintenanceCommand(update.executable, update.args);\n            const finishedAt = yield* nowIso;\n            if (result.timedOut || result.exitCode !== 0) {\n              return yield* finish(\n                makeUpdateState({\n                  status: \"failed\",\n                  startedAt,\n                  finishedAt,\n                  message: failureMessage(result),\n                  output: commandOutput(result),\n                }),\n              );\n            }\n\n            const { verifiedProviders } = yield* verifyRefreshedProvider(\n              provider,\n              capabilities,\n              instanceId,\n            );\n            const couldNotVerify = verifiedProviders.length === 0;\n            const stillOutdated =\n              couldNotVerify ||\n              verifiedProviders.some((verifiedProvider) => isOutdatedProvider(verifiedProvider));\n            const finishedPayload = yield* finish(\n              makeUpdateState({\n                status: stillOutdated ? \"unchanged\" : \"succeeded\",\n                startedAt,\n                finishedAt,\n                message: couldNotVerify\n                  ? \"Update command completed, but Salchi could not verify the provider version.\"\n                  : stillOutdated\n                    ? \"Update command completed, but Salchi still detects an outdated provider version.\"\n                    : \"Provider updated.\",\n                output: commandOutput(result),\n              }),\n            );\n            return finishedPayload;\n          },\n        );\n\n        const recordFailedUpdate = Effect.fn(\"ProviderMaintenanceRunner.recordFailedUpdate\")(\n          function* (cause: Cause.Cause<unknown>) {\n            const failure = Cause.squash(cause);\n            const startedAt = yield* Ref.get(startedAtRef);\n            return yield* finish(\n              makeUpdateState({\n                status: \"failed\",\n                startedAt,\n                finishedAt: yield* nowIso,\n                message: failure instanceof Error ? failure.message : \"Update command failed.\",\n                output: null,\n              }),\n            );\n          },\n        );\n\n        return yield* runCommandAndVerify().pipe(\n          Effect.catchCause((cause) =>\n            Cause.hasInterruptsOnly(cause) ? Effect.interrupt : recordFailedUpdate(cause),\n          ),\n        );\n      },\n    );\n\n    return yield* commandCoordinator\n      .withCommandLock({\n        targetKey,\n        lockKey: update.lockKey,\n        onQueued: setQueuedState,\n        run: runProviderUpdate(),\n      })\n      .pipe(\n        Effect.mapError((error) => {\n          return new ServerProviderUpdateError({\n            provider,\n            reason: error.reason,\n          });\n        }),\n      );\n  });\n\n  const logCompletedJob = (input: {\n    readonly provider: ProviderDriverKind;\n    readonly instanceId: ProviderInstanceId;\n    readonly payload: ServerProviderUpdatedPayload;\n  }) => {\n    const provider = input.payload.providers.find(\n      (candidate) => candidate.instanceId === input.instanceId,\n    );\n    const status = provider?.updateState?.status ?? null;\n    const message = provider?.updateState?.message ?? null;\n    if (status === \"failed\") {\n      return Effect.logWarning(\"provider update job failed\", {\n        provider: input.provider,\n        providerInstanceId: input.instanceId,\n        message,\n      });\n    }\n    return Effect.logInfo(\"provider update job completed\", {\n      provider: input.provider,\n      providerInstanceId: input.instanceId,\n      status,\n    });\n  };\n\n  const updateProvider: ProviderMaintenanceRunnerShape[\"updateProvider\"] = Effect.fn(\n    \"ProviderMaintenanceRunner.updateProvider\",\n  )(function* (target) {\n    const provider = typeof target === \"string\" ? target : target.provider;\n    const instanceId =\n      typeof target === \"string\"\n        ? defaultInstanceIdForDriver(provider)\n        : (target.instanceId ?? defaultInstanceIdForDriver(provider));\n    const capabilities = yield* providerRegistry.getProviderMaintenanceCapabilitiesForInstance(\n      instanceId,\n      provider,\n    );\n    const update = capabilities.update;\n    if (!update) {\n      return yield* new ServerProviderUpdateError({\n        provider,\n        reason: \"This provider does not support one-click updates.\",\n      });\n    }\n\n    const setLaunchQueuedState = providerRegistry.setProviderMaintenanceActionState({\n      instanceId,\n      action: \"update\",\n      state: makeUpdateState({\n        status: \"queued\",\n        startedAt: null,\n        finishedAt: null,\n        message: \"Waiting for provider update to start.\",\n      }),\n    });\n\n    const launch = yield* Effect.uninterruptible(\n      SynchronizedRef.modifyEffect(\n        activeJobsRef,\n        (\n          activeJobs,\n        ): Effect.Effect<\n          readonly [ProviderUpdateLaunch, ReadonlyMap<ProviderInstanceId, ActiveProviderUpdateJob>]\n        > => {\n          if (activeJobs.has(instanceId)) {\n            return providerRegistry.getProviders.pipe(\n              Effect.tap(() =>\n                Effect.logInfo(\"provider update job attached to existing job\", {\n                  provider,\n                  providerInstanceId: instanceId,\n                }),\n              ),\n              Effect.map(\n                (providers) =>\n                  [\n                    {\n                      payload: { providers },\n                      startGate: null,\n                    },\n                    activeJobs,\n                  ] as const,\n              ),\n            );\n          }\n\n          return Effect.gen(function* () {\n            const providers = yield* setLaunchQueuedState;\n            const jobId = yield* Ref.updateAndGet(nextJobIdRef, (current) => current + 1);\n            const startGate = yield* Deferred.make<void>();\n            const job = Deferred.await(startGate).pipe(\n              Effect.andThen(\n                runProviderUpdateToCompletion({\n                  provider,\n                  instanceId,\n                  capabilities,\n                  update,\n                }).pipe(\n                  Effect.tap((payload) =>\n                    logCompletedJob({\n                      provider,\n                      instanceId,\n                      payload,\n                    }),\n                  ),\n                  Effect.catchCause((cause) => {\n                    if (Cause.hasInterruptsOnly(cause)) {\n                      return Effect.logWarning(\n                        \"provider update job interrupted during server shutdown\",\n                        {\n                          provider,\n                          providerInstanceId: instanceId,\n                        },\n                      );\n                    }\n                    return Effect.logError(\"provider update job failed\", {\n                      provider,\n                      providerInstanceId: instanceId,\n                      cause: Cause.pretty(cause),\n                    });\n                  }),\n                  Effect.asVoid,\n                ),\n              ),\n              Effect.ensuring(removeActiveJob(instanceId, jobId)),\n            );\n            const fiber = yield* job.pipe(Effect.forkIn(workerScope));\n            const next = new Map(activeJobs);\n            next.set(instanceId, { jobId, fiber });\n            return [\n              {\n                payload: { providers },\n                startGate,\n              },\n              next,\n            ] as const;\n          });\n        },\n      ).pipe(\n        Effect.tap((launch) => {\n          if (launch.startGate === null) {\n            return Effect.void;\n          }\n          return Effect.logInfo(\"provider update job launched\", {\n            provider,\n            providerInstanceId: instanceId,\n          }).pipe(Effect.andThen(Deferred.succeed(launch.startGate, undefined)));\n        }),\n      ),\n    );\n\n    return launch.payload;\n  });\n\n  return ProviderMaintenanceRunner.of({\n    updateProvider,\n  });\n});\n\nexport const layer = Layer.effect(ProviderMaintenanceRunner, make());\n","import type { ServerLifecycleStreamEvent } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Context from \"effect/Context\";\nimport * as Stream from \"effect/Stream\";\n\ntype LifecycleEventInput =\n  | Omit<Extract<ServerLifecycleStreamEvent, { type: \"welcome\" }>, \"sequence\">\n  | Omit<Extract<ServerLifecycleStreamEvent, { type: \"ready\" }>, \"sequence\">;\n\ninterface SnapshotState {\n  readonly sequence: number;\n  readonly events: ReadonlyArray<ServerLifecycleStreamEvent>;\n}\n\nexport interface ServerLifecycleEventsShape {\n  readonly publish: (event: LifecycleEventInput) => Effect.Effect<ServerLifecycleStreamEvent>;\n  readonly snapshot: Effect.Effect<SnapshotState>;\n  readonly stream: Stream.Stream<ServerLifecycleStreamEvent>;\n}\n\nexport class ServerLifecycleEvents extends Context.Service<\n  ServerLifecycleEvents,\n  ServerLifecycleEventsShape\n>()(\"salchi/serverLifecycleEvents\") {}\n\nexport const ServerLifecycleEventsLive = Layer.effect(\n  ServerLifecycleEvents,\n  Effect.gen(function* () {\n    const pubsub = yield* PubSub.unbounded<ServerLifecycleStreamEvent>();\n    const state = yield* Ref.make<SnapshotState>({\n      sequence: 0,\n      events: [],\n    });\n\n    return {\n      publish: (event) =>\n        Ref.modify(state, (current) => {\n          const nextSequence = current.sequence + 1;\n          const nextEvent = {\n            ...event,\n            sequence: nextSequence,\n          } satisfies ServerLifecycleStreamEvent;\n          const nextEvents =\n            nextEvent.type === \"welcome\"\n              ? [nextEvent, ...current.events.filter((entry) => entry.type !== \"welcome\")]\n              : [nextEvent, ...current.events.filter((entry) => entry.type !== \"ready\")];\n          return [nextEvent, { sequence: nextSequence, events: nextEvents }] as const;\n        }).pipe(Effect.tap((event) => PubSub.publish(pubsub, event))),\n      snapshot: Ref.get(state),\n      get stream() {\n        return Stream.fromPubSub(pubsub);\n      },\n    } satisfies ServerLifecycleEventsShape;\n  }),\n);\n","/**\n * OrchestrationReactor - Composite orchestration reactor service interface.\n *\n * Coordinates startup of orchestration runtime reactors that translate domain\n * events into downstream side effects.\n *\n * @module OrchestrationReactor\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\n/**\n * OrchestrationReactorShape - Service API for orchestration reactor lifecycle.\n */\nexport interface OrchestrationReactorShape {\n  /**\n   * Start orchestration-side reactors for provider/runtime/checkpoint flows.\n   *\n   * The returned effect must be run in a scope so all worker fibers can be\n   * finalized on shutdown.\n   */\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n}\n\n/**\n * OrchestrationReactor - Service tag for orchestration reactor coordination.\n */\nexport class OrchestrationReactor extends Context.Service<\n  OrchestrationReactor,\n  OrchestrationReactorShape\n>()(\"salchi/orchestration/Services/OrchestrationReactor\") {}\n","/**\n * ServerSettings - Server-authoritative settings service.\n *\n * Owns persistence, validation, and change notification of settings that affect\n * server-side behavior (binary paths, streaming mode, env mode, custom models,\n * text generation model selection).\n *\n * Follows the same pattern as `keybindings.ts`: JSON file + Cache + PubSub +\n * Semaphore + FileSystem.watch for concurrency and external edit detection.\n *\n * @module ServerSettings\n */\nimport {\n  DEFAULT_GIT_TEXT_GENERATION_MODEL,\n  DEFAULT_GIT_TEXT_GENERATION_MODEL_BY_PROVIDER,\n  DEFAULT_GIT_TEXT_GENERATION_REASONING_EFFORT,\n  DEFAULT_MODEL_BY_PROVIDER,\n  DEFAULT_SERVER_SETTINGS,\n  isProviderDriverKind,\n  type ModelSelection,\n  type ProviderInstanceConfig,\n  type ProviderInstanceEnvironmentVariable,\n  ProviderDriverKind,\n  ProviderInstanceId,\n  ServerSettings,\n  ServerSettingsError,\n  type ServerSettingsPatch,\n} from \"@salchi/contracts\";\nimport * as Cache from \"effect/Cache\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\nimport * as Equal from \"effect/Equal\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as Scope from \"effect/Scope\";\nimport * as Context from \"effect/Context\";\nimport * as Stream from \"effect/Stream\";\nimport * as Cause from \"effect/Cause\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport { writeFileStringAtomically } from \"./atomicWrite.ts\";\nimport { ServerConfig } from \"./config.ts\";\nimport { type DeepPartial, deepMerge } from \"@salchi/shared/Struct\";\nimport { fromJsonStringPretty, fromLenientJson } from \"@salchi/shared/schemaJson\";\nimport {\n  applyServerSettingsPatch,\n  normalizeProviderInstanceConfigMapForPersistence,\n} from \"@salchi/shared/serverSettings\";\nimport { ServerSecretStoreLive } from \"./auth/Layers/ServerSecretStore.ts\";\nimport { ServerSecretStore } from \"./auth/Services/ServerSecretStore.ts\";\n\nconst encodeServerSettings = Schema.encodeEffect(ServerSettings);\nconst encodeServerSettingsJson = Schema.encodeUnknownEffect(fromJsonStringPretty(ServerSettings));\nconst decodeServerSettings = Schema.decodeUnknownEffect(ServerSettings);\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nconst normalizeServerSettings = (\n  settings: ServerSettings,\n): Effect.Effect<ServerSettings, ServerSettingsError> =>\n  encodeServerSettings(settings).pipe(\n    Effect.flatMap(decodeServerSettings),\n    Effect.map((normalized) => ({\n      ...normalized,\n      providerInstances: normalizeProviderInstanceConfigMapForPersistence(\n        normalized.providerInstances,\n      ),\n    })),\n    Effect.mapError(\n      (cause) =>\n        new ServerSettingsError({\n          settingsPath: \"<memory>\",\n          detail: `failed to normalize server settings: ${SchemaIssue.makeFormatterDefault()(cause.issue)}`,\n          cause,\n        }),\n    ),\n  );\n\nfunction providerEnvironmentSecretName(input: {\n  readonly instanceId: string;\n  readonly name: string;\n}): string {\n  return `provider-env-${Buffer.from(input.instanceId, \"utf8\").toString(\"base64url\")}-${Buffer.from(input.name, \"utf8\").toString(\"base64url\")}`;\n}\n\nfunction redactProviderEnvironmentVariable(\n  variable: ProviderInstanceEnvironmentVariable,\n): ProviderInstanceEnvironmentVariable {\n  if (!variable.sensitive) {\n    const { valueRedacted: _omit, ...rest } = variable;\n    return rest;\n  }\n  return {\n    ...variable,\n    value: \"\",\n    ...(variable.value.length > 0 || variable.valueRedacted ? { valueRedacted: true } : {}),\n  };\n}\n\nexport function redactServerSettingsForClient(settings: ServerSettings): ServerSettings {\n  const providerInstances = Object.fromEntries(\n    Object.entries(settings.providerInstances).map(([instanceId, instance]) => [\n      instanceId,\n      instance.environment\n        ? {\n            ...instance,\n            environment: instance.environment.map(redactProviderEnvironmentVariable),\n          }\n        : instance,\n    ]),\n  );\n  return { ...settings, providerInstances };\n}\n\nexport interface ServerSettingsShape {\n  /** Start the settings runtime and attach file watching. */\n  readonly start: Effect.Effect<void, ServerSettingsError>;\n\n  /** Await settings runtime readiness. */\n  readonly ready: Effect.Effect<void, ServerSettingsError>;\n\n  /** Read the current settings. */\n  readonly getSettings: Effect.Effect<ServerSettings, ServerSettingsError>;\n\n  /** Patch settings and persist. Returns the new full settings object. */\n  readonly updateSettings: (\n    patch: ServerSettingsPatch,\n  ) => Effect.Effect<ServerSettings, ServerSettingsError>;\n\n  /** Stream of settings change events. */\n  readonly streamChanges: Stream.Stream<ServerSettings>;\n}\n\nexport class ServerSettingsService extends Context.Service<\n  ServerSettingsService,\n  ServerSettingsShape\n>()(\"salchi/serverSettings/ServerSettingsService\") {\n  static readonly layerTest = (overrides: DeepPartial<ServerSettings> = {}) =>\n    Layer.effect(\n      ServerSettingsService,\n      Effect.gen(function* () {\n        const { automaticGitFetchInterval, ...overridesForMerge } = overrides;\n        const merged = deepMerge(DEFAULT_SERVER_SETTINGS, overridesForMerge);\n        const initialSettings = yield* normalizeServerSettings({\n          ...merged,\n          ...(automaticGitFetchInterval !== undefined\n            ? { automaticGitFetchInterval: automaticGitFetchInterval as Duration.Duration }\n            : {}),\n        });\n        const currentSettingsRef = yield* Ref.make<ServerSettings>(initialSettings);\n\n        return {\n          start: Effect.void,\n          ready: Effect.void,\n          getSettings: Ref.get(currentSettingsRef),\n          updateSettings: (patch) =>\n            Ref.get(currentSettingsRef).pipe(\n              Effect.map((currentSettings) => applyServerSettingsPatch(currentSettings, patch)),\n              Effect.flatMap(normalizeServerSettings),\n              Effect.tap((nextSettings) => Ref.set(currentSettingsRef, nextSettings)),\n            ),\n          streamChanges: Stream.empty,\n        } satisfies ServerSettingsShape;\n      }),\n    );\n}\n\nconst ServerSettingsJson = fromLenientJson(ServerSettings);\nconst decodeServerSettingsJsonExit = Schema.decodeUnknownExit(ServerSettingsJson);\n\ntype LegacyProviderSettings = ServerSettings[\"providers\"][keyof ServerSettings[\"providers\"]];\n\nconst getLegacyProviderSettings = (\n  settings: ServerSettings,\n  provider: ProviderDriverKind,\n): LegacyProviderSettings | undefined =>\n  (settings.providers as Record<string, LegacyProviderSettings | undefined>)[provider];\n\n/**\n * Ensure the `textGenerationModelSelection` points to an enabled provider.\n * If the selected provider is disabled, fall back to the first enabled\n * provider with its default model.  This is applied at read-time so the\n * persisted preference is preserved for when a provider is re-enabled.\n */\nfunction resolveTextGenerationProvider(settings: ServerSettings): ServerSettings {\n  const selection = settings.textGenerationModelSelection;\n  const instanceConfig = settings.providerInstances[selection.instanceId];\n  if (instanceConfig !== undefined) {\n    return (instanceConfig.enabled ?? true) ? settings : fallbackTextGenerationProvider(settings);\n  }\n\n  if (\n    isProviderDriverKind(selection.instanceId) &&\n    getLegacyProviderSettings(settings, selection.instanceId)?.enabled\n  ) {\n    return settings;\n  }\n\n  return fallbackTextGenerationProvider(settings);\n}\n\nfunction fallbackTextGenerationProvider(settings: ServerSettings): ServerSettings {\n  const fallbackEntry = Object.entries(settings.providers).find(([, provider]) => provider.enabled);\n  const fallback = fallbackEntry ? ProviderDriverKind.make(fallbackEntry[0]) : undefined;\n  if (!fallback) {\n    return settings;\n  }\n\n  return {\n    ...settings,\n    textGenerationModelSelection: {\n      instanceId: ProviderInstanceId.make(fallback),\n      model:\n        DEFAULT_GIT_TEXT_GENERATION_MODEL_BY_PROVIDER[fallback] ??\n        DEFAULT_MODEL_BY_PROVIDER[fallback] ??\n        DEFAULT_GIT_TEXT_GENERATION_MODEL,\n      ...(fallback === ProviderDriverKind.make(\"codex\")\n        ? {\n            options: [\n              {\n                id: \"reasoningEffort\",\n                value: DEFAULT_GIT_TEXT_GENERATION_REASONING_EFFORT,\n              },\n            ],\n          }\n        : {}),\n    } satisfies ModelSelection,\n  };\n}\n\n// Values under these keys are compared as a whole — never stripped field-by-field.\nconst ATOMIC_SETTINGS_KEYS: ReadonlySet<string> = new Set([\n  \"importedThemes\",\n  \"automaticGitFetchInterval\",\n  \"textGenerationModelSelection\",\n]);\n\nfunction stripDefaultServerSettings(current: unknown, defaults: unknown): unknown | undefined {\n  if (Array.isArray(current) || Array.isArray(defaults)) {\n    return Equal.equals(current, defaults) ? undefined : current;\n  }\n\n  if (\n    current !== null &&\n    defaults !== null &&\n    typeof current === \"object\" &&\n    typeof defaults === \"object\"\n  ) {\n    const currentRecord = current as Record<string, unknown>;\n    const defaultsRecord = defaults as Record<string, unknown>;\n    const next: Record<string, unknown> = {};\n\n    for (const key of Object.keys(currentRecord)) {\n      if (ATOMIC_SETTINGS_KEYS.has(key)) {\n        if (!Equal.equals(currentRecord[key], defaultsRecord[key])) {\n          next[key] = currentRecord[key];\n        }\n      } else {\n        const stripped = stripDefaultServerSettings(currentRecord[key], defaultsRecord[key]);\n        if (stripped !== undefined) {\n          next[key] = stripped;\n        }\n      }\n    }\n\n    return Object.keys(next).length > 0 ? next : undefined;\n  }\n\n  return Object.is(current, defaults) ? undefined : current;\n}\n\nconst makeServerSettings = Effect.gen(function* () {\n  const { settingsPath } = yield* ServerConfig;\n  const fs = yield* FileSystem.FileSystem;\n  const pathService = yield* Path.Path;\n  const secretStore = yield* ServerSecretStore;\n  const writeSemaphore = yield* Semaphore.make(1);\n  const cacheKey = \"settings\" as const;\n  const changesPubSub = yield* PubSub.unbounded<ServerSettings>();\n  const startedRef = yield* Ref.make(false);\n  const startedDeferred = yield* Deferred.make<void, ServerSettingsError>();\n  const watcherScope = yield* Scope.make(\"sequential\");\n  yield* Effect.addFinalizer(() => Scope.close(watcherScope, Exit.void));\n\n  const emitChange = (settings: ServerSettings) =>\n    PubSub.publish(changesPubSub, settings).pipe(Effect.asVoid);\n\n  const readConfigExists = fs.exists(settingsPath).pipe(\n    Effect.mapError(\n      (cause) =>\n        new ServerSettingsError({\n          settingsPath,\n          detail: \"failed to check settings file existence\",\n          cause,\n        }),\n    ),\n  );\n\n  const readRawConfig = fs.readFileString(settingsPath).pipe(\n    Effect.mapError(\n      (cause) =>\n        new ServerSettingsError({\n          settingsPath,\n          detail: \"failed to read settings file\",\n          cause,\n        }),\n    ),\n  );\n\n  const loadSettingsFromDisk = Effect.gen(function* () {\n    if (!(yield* readConfigExists)) {\n      return DEFAULT_SERVER_SETTINGS;\n    }\n\n    const raw = yield* readRawConfig;\n    const decoded = decodeServerSettingsJsonExit(raw);\n    if (decoded._tag === \"Failure\") {\n      yield* Effect.logWarning(\"failed to parse settings.json, using defaults\", {\n        path: settingsPath,\n        issues: Cause.pretty(decoded.cause),\n      });\n      return DEFAULT_SERVER_SETTINGS;\n    }\n    return decoded.value;\n  });\n\n  const settingsCache = yield* Cache.make<typeof cacheKey, ServerSettings, ServerSettingsError>({\n    capacity: 1,\n    lookup: () => loadSettingsFromDisk,\n  });\n\n  const getSettingsFromCache = Cache.get(settingsCache, cacheKey);\n\n  const toSettingsError = (detail: string, cause: unknown) =>\n    new ServerSettingsError({\n      settingsPath,\n      detail,\n      cause,\n    });\n\n  const materializeProviderEnvironmentSecrets = (\n    settings: ServerSettings,\n  ): Effect.Effect<ServerSettings, ServerSettingsError> =>\n    Effect.gen(function* () {\n      const providerInstances: Record<string, ProviderInstanceConfig> = {\n        ...settings.providerInstances,\n      };\n      for (const [instanceId, instance] of Object.entries(settings.providerInstances)) {\n        if (!instance.environment) continue;\n        const environment: ProviderInstanceEnvironmentVariable[] = [];\n        for (const variable of instance.environment) {\n          if (!variable.sensitive || !variable.valueRedacted) {\n            environment.push(variable);\n            continue;\n          }\n          const secret = yield* secretStore\n            .get(providerEnvironmentSecretName({ instanceId, name: variable.name }))\n            .pipe(\n              Effect.mapError((cause) =>\n                toSettingsError(\n                  `failed to read sensitive environment variable ${variable.name}`,\n                  cause,\n                ),\n              ),\n            );\n          environment.push({\n            ...variable,\n            value: secret ? textDecoder.decode(secret) : \"\",\n          });\n        }\n        providerInstances[instanceId] = {\n          ...instance,\n          environment,\n        } satisfies ProviderInstanceConfig;\n      }\n      return {\n        ...settings,\n        providerInstances: providerInstances as ServerSettings[\"providerInstances\"],\n      };\n    });\n\n  const persistProviderEnvironmentSecrets = (\n    current: ServerSettings,\n    next: ServerSettings,\n  ): Effect.Effect<ServerSettings, ServerSettingsError> =>\n    Effect.gen(function* () {\n      const providerInstances: Record<string, ProviderInstanceConfig> = {\n        ...next.providerInstances,\n      };\n\n      const nextSecretKeys = new Set<string>();\n      for (const [instanceId, instance] of Object.entries(next.providerInstances)) {\n        if (!instance.environment) continue;\n        const environment: ProviderInstanceEnvironmentVariable[] = [];\n        for (const variable of instance.environment) {\n          const secretName = providerEnvironmentSecretName({ instanceId, name: variable.name });\n          if (!variable.sensitive) {\n            yield* secretStore\n              .remove(secretName)\n              .pipe(\n                Effect.mapError((cause) =>\n                  toSettingsError(`failed to remove environment secret ${variable.name}`, cause),\n                ),\n              );\n            environment.push(redactProviderEnvironmentVariable(variable));\n            continue;\n          }\n\n          nextSecretKeys.add(secretName);\n          if (!variable.valueRedacted) {\n            if (variable.value.length > 0) {\n              yield* secretStore\n                .set(secretName, textEncoder.encode(variable.value))\n                .pipe(\n                  Effect.mapError((cause) =>\n                    toSettingsError(`failed to persist environment secret ${variable.name}`, cause),\n                  ),\n                );\n              environment.push({ ...variable, value: \"\", valueRedacted: true });\n            } else {\n              yield* secretStore\n                .remove(secretName)\n                .pipe(\n                  Effect.mapError((cause) =>\n                    toSettingsError(`failed to remove environment secret ${variable.name}`, cause),\n                  ),\n                );\n              const { valueRedacted: _omit, ...rest } = variable;\n              environment.push(rest);\n            }\n            continue;\n          }\n\n          environment.push(redactProviderEnvironmentVariable(variable));\n        }\n        providerInstances[instanceId] = {\n          ...instance,\n          environment,\n        } satisfies ProviderInstanceConfig;\n      }\n\n      for (const [instanceId, instance] of Object.entries(current.providerInstances)) {\n        for (const variable of instance.environment ?? []) {\n          if (!variable.sensitive) continue;\n          const secretName = providerEnvironmentSecretName({ instanceId, name: variable.name });\n          if (nextSecretKeys.has(secretName)) continue;\n          yield* secretStore\n            .remove(secretName)\n            .pipe(\n              Effect.mapError((cause) =>\n                toSettingsError(\n                  `failed to remove stale environment secret ${variable.name}`,\n                  cause,\n                ),\n              ),\n            );\n        }\n      }\n\n      return {\n        ...next,\n        providerInstances: providerInstances as ServerSettings[\"providerInstances\"],\n      };\n    });\n\n  const writeSettingsAtomically = Effect.fnUntraced(\n    function* (settings: ServerSettings) {\n      const sparseSettingsJson = yield* encodeServerSettingsJson(\n        stripDefaultServerSettings(settings, DEFAULT_SERVER_SETTINGS) ?? {},\n      );\n\n      return yield* writeFileStringAtomically({\n        filePath: settingsPath,\n        contents: `${sparseSettingsJson}\\n`,\n      }).pipe(\n        Effect.provideService(FileSystem.FileSystem, fs),\n        Effect.provideService(Path.Path, pathService),\n      );\n    },\n    Effect.mapError(\n      (cause) =>\n        new ServerSettingsError({\n          settingsPath,\n          detail: \"failed to write settings file\",\n          cause,\n        }),\n    ),\n  );\n\n  const revalidateAndEmit = writeSemaphore.withPermits(1)(\n    Effect.gen(function* () {\n      yield* Cache.invalidate(settingsCache, cacheKey);\n      const settings = yield* getSettingsFromCache;\n      yield* emitChange(settings);\n    }),\n  );\n\n  const startWatcher = Effect.gen(function* () {\n    const settingsDir = pathService.dirname(settingsPath);\n    const settingsFile = pathService.basename(settingsPath);\n    const settingsPathResolved = pathService.resolve(settingsPath);\n\n    yield* fs.makeDirectory(settingsDir, { recursive: true }).pipe(\n      Effect.mapError(\n        (cause) =>\n          new ServerSettingsError({\n            settingsPath,\n            detail: \"failed to prepare settings directory\",\n            cause,\n          }),\n      ),\n    );\n\n    const revalidateAndEmitSafely = revalidateAndEmit.pipe(Effect.ignoreCause({ log: true }));\n\n    // Debounce watch events so the file is fully written before we read it.\n    // Editors emit multiple events per save (truncate, write, rename) and\n    // `fs.watch` can fire before the content has been flushed to disk.\n    const debouncedSettingsEvents = fs.watch(settingsDir).pipe(\n      Stream.filter((event) => {\n        return (\n          event.path === settingsFile ||\n          event.path === settingsPath ||\n          pathService.resolve(settingsDir, event.path) === settingsPathResolved\n        );\n      }),\n      Stream.debounce(Duration.millis(100)),\n    );\n\n    yield* Stream.runForEach(debouncedSettingsEvents, () => revalidateAndEmitSafely).pipe(\n      Effect.ignoreCause({ log: true }),\n      Effect.forkIn(watcherScope),\n      Effect.asVoid,\n    );\n  });\n\n  const start = Effect.gen(function* () {\n    const shouldStart = yield* Ref.modify(startedRef, (started) => [!started, true]);\n    if (!shouldStart) {\n      return yield* Deferred.await(startedDeferred);\n    }\n\n    const startup = Effect.gen(function* () {\n      yield* startWatcher;\n      yield* Cache.invalidate(settingsCache, cacheKey);\n      yield* getSettingsFromCache;\n    });\n\n    const startupExit = yield* Effect.exit(startup);\n    if (startupExit._tag === \"Failure\") {\n      yield* Deferred.failCause(startedDeferred, startupExit.cause).pipe(Effect.orDie);\n      return yield* Effect.failCause(startupExit.cause);\n    }\n\n    yield* Deferred.succeed(startedDeferred, undefined).pipe(Effect.orDie);\n  });\n\n  return {\n    start,\n    ready: Deferred.await(startedDeferred),\n    getSettings: getSettingsFromCache.pipe(\n      Effect.flatMap(materializeProviderEnvironmentSecrets),\n      Effect.map(resolveTextGenerationProvider),\n    ),\n    updateSettings: (patch) =>\n      writeSemaphore.withPermits(1)(\n        Effect.gen(function* () {\n          const current = yield* getSettingsFromCache;\n          const nextPersisted = yield* persistProviderEnvironmentSecrets(\n            current,\n            applyServerSettingsPatch(current, patch),\n          );\n          const next = yield* normalizeServerSettings(nextPersisted);\n          yield* writeSettingsAtomically(next);\n          yield* Cache.set(settingsCache, cacheKey, next);\n          yield* emitChange(next);\n          const materialized = yield* materializeProviderEnvironmentSecrets(next);\n          return resolveTextGenerationProvider(materialized);\n        }),\n      ),\n    get streamChanges() {\n      return Stream.fromPubSub(changesPubSub).pipe(\n        Stream.mapEffect((settings) =>\n          materializeProviderEnvironmentSecrets(settings).pipe(\n            Effect.catch((error: ServerSettingsError) =>\n              Effect.logWarning(\"failed to materialize provider environment secrets\", {\n                detail: error.detail,\n              }).pipe(Effect.as(settings)),\n            ),\n          ),\n        ),\n        Stream.map(resolveTextGenerationProvider),\n      );\n    },\n  } satisfies ServerSettingsShape;\n});\n\nexport const ServerSettingsLive = Layer.effect(ServerSettingsService, makeServerSettings).pipe(\n  Layer.provide(ServerSecretStoreLive),\n);\n","import * as Effect from \"effect/Effect\";\nimport * as Queue from \"effect/Queue\";\nimport type * as Scope from \"effect/Scope\";\n\nexport type ServerTerminalCommand = \"open\" | \"pair\" | \"help\";\n\nexport interface ServerTerminalInput {\n  readonly isTTY?: boolean;\n  readonly isRaw?: boolean;\n  readonly isPaused?: () => boolean;\n  readonly setRawMode?: (enabled: boolean) => unknown;\n  readonly on: (event: string, listener: (...args: ReadonlyArray<unknown>) => void) => unknown;\n  readonly off: (event: string, listener: (...args: ReadonlyArray<unknown>) => void) => unknown;\n  readonly resume: () => unknown;\n  readonly pause: () => unknown;\n}\n\nexport interface ServerTerminalOutput {\n  readonly isTTY?: boolean;\n  readonly write: (text: string) => unknown;\n}\n\nexport interface InteractiveServerTerminalActions<OpenE, OpenR, PairE, PairR> {\n  readonly openBrowser: Effect.Effect<string, OpenE, OpenR>;\n  readonly createPairingCode: Effect.Effect<string, PairE, PairR>;\n}\n\nexport interface InteractiveServerTerminalOptions {\n  readonly input?: ServerTerminalInput;\n  readonly output?: ServerTerminalOutput;\n  readonly interrupt?: () => void;\n}\n\nexport const parseServerTerminalCommand = (input: string): ServerTerminalCommand | null => {\n  switch (input.trim().toLowerCase()) {\n    case \"1\":\n    case \"o\":\n      return \"open\";\n    case \"2\":\n    case \"p\":\n      return \"pair\";\n    case \"h\":\n    case \"?\":\n      return \"help\";\n    default:\n      return null;\n  }\n};\n\nexport const formatServerTerminalCommandMenu = (): string =>\n  [\n    \"\",\n    \"Server shortcuts (press a key; no Enter needed):\",\n    \"  [o] Open Salchi in the browser\",\n    \"  [p] Generate a new pairing code\",\n    \"  [h] Show these shortcuts\",\n    \"\",\n  ].join(\"\\n\");\n\nconst formatCommandError = (error: unknown): string => {\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message;\n  }\n  if (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"message\" in error &&\n    typeof error.message === \"string\" &&\n    error.message.trim().length > 0\n  ) {\n    return error.message;\n  }\n  return String(error);\n};\n\nconst writeOutput = (output: ServerTerminalOutput, text: string) =>\n  Effect.sync(() => {\n    try {\n      output.write(text);\n    } catch {\n      // A closed or redirected terminal must not affect the server runtime.\n    }\n  });\n\nconst executeCommand = <OpenE, OpenR, PairE, PairR>(\n  command: ServerTerminalCommand,\n  actions: InteractiveServerTerminalActions<OpenE, OpenR, PairE, PairR>,\n  output: ServerTerminalOutput,\n) => {\n  if (command === \"help\") {\n    return writeOutput(output, formatServerTerminalCommandMenu());\n  }\n\n  const runAction = <E, R>(action: Effect.Effect<string, E, R>) =>\n    action.pipe(\n      Effect.flatMap((message) =>\n        writeOutput(output, message.endsWith(\"\\n\") ? message : `${message}\\n`),\n      ),\n      Effect.catch((error) =>\n        writeOutput(output, `Server command failed: ${formatCommandError(error)}\\n`),\n      ),\n    );\n\n  return command === \"open\" ? runAction(actions.openBrowser) : runAction(actions.createPairingCode);\n};\n\n/**\n * Installs a raw single-key command listener owned by the surrounding server\n * scope. It is intentionally disabled for redirected/non-interactive stdio or\n * terminal inputs that cannot be switched into raw mode.\n */\nexport const installInteractiveServerTerminal = <OpenE, OpenR, PairE, PairR>(\n  actions: InteractiveServerTerminalActions<OpenE, OpenR, PairE, PairR>,\n  options: InteractiveServerTerminalOptions = {},\n): Effect.Effect<boolean, never, OpenR | PairR | Scope.Scope> =>\n  Effect.gen(function* () {\n    const input = options.input ?? (process.stdin as unknown as ServerTerminalInput);\n    const output = options.output ?? (process.stdout as unknown as ServerTerminalOutput);\n    if (!input.isTTY || !output.isTTY || input.setRawMode === undefined) {\n      return false;\n    }\n\n    const commands = yield* Queue.unbounded<ServerTerminalCommand | null>();\n    const interrupt = options.interrupt ?? (() => process.kill(process.pid, \"SIGINT\"));\n\n    const onData = (...args: ReadonlyArray<unknown>) => {\n      for (const key of String(args[0] ?? \"\")) {\n        if (key === \"\\u0003\") {\n          interrupt();\n          continue;\n        }\n        const command = parseServerTerminalCommand(key);\n        if (command !== null) {\n          Queue.offerUnsafe(commands, command);\n        }\n      }\n    };\n    const onEnd = () => {\n      Queue.offerUnsafe(commands, null);\n    };\n\n    yield* Effect.acquireRelease(\n      Effect.sync(() => {\n        const wasPaused = input.isPaused?.() ?? false;\n        const wasRaw = input.isRaw ?? false;\n        input.setRawMode?.(true);\n        input.on(\"data\", onData);\n        input.on(\"end\", onEnd);\n        input.resume();\n        return { wasPaused, wasRaw };\n      }),\n      ({ wasPaused, wasRaw }) =>\n        Effect.sync(() => {\n          input.off(\"data\", onData);\n          input.off(\"end\", onEnd);\n          input.setRawMode?.(wasRaw);\n          if (wasPaused) {\n            input.pause();\n          }\n        }).pipe(Effect.andThen(Queue.shutdown(commands))),\n    );\n\n    yield* writeOutput(output, formatServerTerminalCommandMenu());\n    yield* Effect.gen(function* () {\n      while (true) {\n        const command = yield* Queue.take(commands);\n        if (command === null) {\n          return;\n        }\n        yield* executeCommand(command, actions, output);\n      }\n    }).pipe(Effect.forkScoped({ startImmediately: true }));\n\n    return true;\n  });\n","/**\n * AnalyticsService - Anonymous telemetry capture contract.\n *\n * Provides a best-effort event API for runtime telemetry and a strict\n * `captureImmediate` method for call sites that need explicit error handling.\n *\n * @module AnalyticsService\n */\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Context from \"effect/Context\";\n\nexport interface AnalyticsServiceShape {\n  /**\n   * Capture an event immediately; returns typed failure when capture fails.\n   */\n  readonly record: (\n    event: string,\n    properties?: Readonly<Record<string, unknown>>,\n  ) => Effect.Effect<void, never>;\n\n  /**\n   * Flush queued telemetry.\n   */\n  readonly flush: Effect.Effect<void, never>;\n}\n\nexport class AnalyticsService extends Context.Service<AnalyticsService, AnalyticsServiceShape>()(\n  \"salchi/telemetry/Services/AnalyticsService\",\n) {\n  static readonly layerTest = Layer.succeed(AnalyticsService, {\n    record: () => Effect.void,\n    flush: Effect.void,\n  });\n}\n","import * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\nexport interface ProviderSessionReaperShape {\n  /**\n   * Start the background provider session reaper within the provided scope.\n   */\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n}\n\nexport class ProviderSessionReaper extends Context.Service<\n  ProviderSessionReaper,\n  ProviderSessionReaperShape\n>()(\"salchi/provider/Services/ProviderSessionReaper\") {}\n","import {\n  CommandId,\n  DEFAULT_MODEL,\n  DEFAULT_PROVIDER_INTERACTION_MODE,\n  type ModelSelection,\n  ProjectId,\n  ProviderInstanceId,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport { resolveTailscaleHttpsBaseUrl } from \"@salchi/tailscale\";\nimport * as Data from \"effect/Data\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Context from \"effect/Context\";\nimport * as Console from \"effect/Console\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\n\nimport { ServerConfig } from \"./config.ts\";\nimport { Keybindings } from \"./keybindings.ts\";\nimport * as ExternalLauncher from \"./process/externalLauncher.ts\";\nimport { OrchestrationEngineService } from \"./orchestration/Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"./orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport { OrchestrationReactor } from \"./orchestration/Services/OrchestrationReactor.ts\";\nimport { ServerLifecycleEvents } from \"./serverLifecycleEvents.ts\";\nimport { ServerSettingsService } from \"./serverSettings.ts\";\nimport { ServerEnvironment } from \"./environment/Services/ServerEnvironment.ts\";\nimport { installInteractiveServerTerminal } from \"./interactiveServerTerminal.ts\";\nimport { AnalyticsService } from \"./telemetry/Services/AnalyticsService.ts\";\nimport { ServerAuth } from \"./auth/Services/ServerAuth.ts\";\nimport { ProviderSessionReaper } from \"./provider/Services/ProviderSessionReaper.ts\";\nimport {\n  formatBrowserStartupOutput,\n  formatHeadlessServeOutput,\n  formatHostForUrl,\n  isWildcardHost,\n  issueHeadlessServeAccessInfo,\n} from \"./startupAccess.ts\";\n\nexport class ServerRuntimeStartupError extends Data.TaggedError(\"ServerRuntimeStartupError\")<{\n  readonly message: string;\n  readonly cause?: unknown;\n}> {}\n\nexport interface ServerRuntimeStartupShape {\n  readonly awaitCommandReady: Effect.Effect<void, ServerRuntimeStartupError>;\n  readonly markHttpListening: Effect.Effect<void>;\n  readonly enqueueCommand: <A, E>(\n    effect: Effect.Effect<A, E>,\n  ) => Effect.Effect<A, E | ServerRuntimeStartupError>;\n}\n\nexport class ServerRuntimeStartup extends Context.Service<\n  ServerRuntimeStartup,\n  ServerRuntimeStartupShape\n>()(\"salchi/serverRuntimeStartup\") {}\n\ninterface QueuedCommand {\n  readonly run: Effect.Effect<void, never>;\n}\n\ntype CommandReadinessState = \"pending\" | \"ready\" | ServerRuntimeStartupError;\n\ninterface CommandGate {\n  readonly awaitCommandReady: Effect.Effect<void, ServerRuntimeStartupError>;\n  readonly signalCommandReady: Effect.Effect<void>;\n  readonly failCommandReady: (error: ServerRuntimeStartupError) => Effect.Effect<void>;\n  readonly enqueueCommand: <A, E>(\n    effect: Effect.Effect<A, E>,\n  ) => Effect.Effect<A, E | ServerRuntimeStartupError>;\n}\n\nconst settleQueuedCommand = <A, E>(deferred: Deferred.Deferred<A, E>, exit: Exit.Exit<A, E>) =>\n  Exit.isSuccess(exit)\n    ? Deferred.succeed(deferred, exit.value)\n    : Deferred.failCause(deferred, exit.cause);\n\nexport const makeCommandGate = Effect.gen(function* () {\n  const commandReady = yield* Deferred.make<void, ServerRuntimeStartupError>();\n  const commandQueue = yield* Queue.unbounded<QueuedCommand>();\n  const commandReadinessState = yield* Ref.make<CommandReadinessState>(\"pending\");\n\n  const commandWorker = Effect.forever(\n    Queue.take(commandQueue).pipe(Effect.flatMap((command) => command.run)),\n  );\n  yield* Effect.forkScoped(commandWorker);\n\n  return {\n    awaitCommandReady: Deferred.await(commandReady),\n    signalCommandReady: Effect.gen(function* () {\n      yield* Ref.set(commandReadinessState, \"ready\");\n      yield* Deferred.succeed(commandReady, undefined).pipe(Effect.orDie);\n    }),\n    failCommandReady: (error) =>\n      Effect.gen(function* () {\n        yield* Ref.set(commandReadinessState, error);\n        yield* Deferred.fail(commandReady, error).pipe(Effect.orDie);\n      }),\n    enqueueCommand: <A, E>(effect: Effect.Effect<A, E>) =>\n      Effect.gen(function* () {\n        const readinessState = yield* Ref.get(commandReadinessState);\n        if (readinessState === \"ready\") {\n          return yield* effect;\n        }\n        if (readinessState !== \"pending\") {\n          return yield* readinessState;\n        }\n\n        const result = yield* Deferred.make<A, E | ServerRuntimeStartupError>();\n        yield* Queue.offer(commandQueue, {\n          run: Deferred.await(commandReady).pipe(\n            Effect.flatMap(() => effect),\n            Effect.exit,\n            Effect.flatMap((exit) => settleQueuedCommand(result, exit)),\n          ),\n        });\n        return yield* Deferred.await(result);\n      }),\n  } satisfies CommandGate;\n});\n\nexport const recordStartupHeartbeat = Effect.gen(function* () {\n  const analytics = yield* AnalyticsService;\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n\n  const { threadCount, projectCount } = yield* projectionSnapshotQuery.getCounts().pipe(\n    Effect.catch((cause) =>\n      Effect.logWarning(\"failed to gather startup projection counts for telemetry\", {\n        cause,\n      }).pipe(\n        Effect.as({\n          threadCount: 0,\n          projectCount: 0,\n        }),\n      ),\n    ),\n  );\n\n  yield* analytics.record(\"server.boot.heartbeat\", {\n    threadCount,\n    projectCount,\n  });\n});\n\nexport const launchStartupHeartbeat = recordStartupHeartbeat.pipe(\n  Effect.annotateSpans({ \"startup.phase\": \"heartbeat.record\" }),\n  Effect.withSpan(\"server.startup.heartbeat.record\"),\n  Effect.ignoreCause({ log: true }),\n  Effect.forkScoped,\n  Effect.asVoid,\n);\n\nexport const getAutoBootstrapDefaultModelSelection = (): ModelSelection => ({\n  instanceId: ProviderInstanceId.make(\"codex\"),\n  model: DEFAULT_MODEL,\n});\n\nexport const resolveWelcomeBase = Effect.gen(function* () {\n  const serverConfig = yield* ServerConfig;\n  const segments = serverConfig.cwd.split(/[/\\\\]/).filter(Boolean);\n  const projectName = segments[segments.length - 1] ?? \"project\";\n\n  return {\n    cwd: serverConfig.cwd,\n    projectName,\n  } as const;\n});\n\nexport const resolveAutoBootstrapWelcomeTargets = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const randomUUID = crypto.randomUUIDv4;\n  const serverConfig = yield* ServerConfig;\n  const projectionReadModelQuery = yield* ProjectionSnapshotQuery;\n  const orchestrationEngine = yield* OrchestrationEngineService;\n  const path = yield* Path.Path;\n\n  let bootstrapProjectId: ProjectId | undefined;\n  let bootstrapThreadId: ThreadId | undefined;\n\n  if (serverConfig.autoBootstrapProjectFromCwd) {\n    yield* Effect.gen(function* () {\n      const existingProject = yield* projectionReadModelQuery.getActiveProjectByWorkspaceRoot(\n        serverConfig.cwd,\n      );\n      let nextProjectId: ProjectId;\n      let nextThreadModelSelection: ModelSelection;\n\n      if (Option.isNone(existingProject)) {\n        const createdAt = DateTime.formatIso(yield* DateTime.now);\n        nextProjectId = ProjectId.make(yield* randomUUID);\n        const bootstrapProjectTitle = path.basename(serverConfig.cwd) || \"project\";\n        nextThreadModelSelection = getAutoBootstrapDefaultModelSelection();\n        yield* orchestrationEngine.dispatch({\n          type: \"project.create\",\n          commandId: CommandId.make(yield* randomUUID),\n          projectId: nextProjectId,\n          title: bootstrapProjectTitle,\n          workspaceRoot: serverConfig.cwd,\n          defaultModelSelection: null,\n          createdAt,\n        });\n      } else {\n        nextProjectId = existingProject.value.id;\n        nextThreadModelSelection =\n          existingProject.value.defaultModelSelection ?? getAutoBootstrapDefaultModelSelection();\n      }\n\n      const existingThreadId =\n        yield* projectionReadModelQuery.getMostRecentActiveThreadIdByProjectId(nextProjectId);\n      if (Option.isNone(existingThreadId)) {\n        const createdAt = DateTime.formatIso(yield* DateTime.now);\n        const createdThreadId = ThreadId.make(yield* randomUUID);\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.create\",\n          commandId: CommandId.make(yield* randomUUID),\n          threadId: createdThreadId,\n          projectId: nextProjectId,\n          title: \"New thread\",\n          modelSelection: nextThreadModelSelection,\n          interactionMode: DEFAULT_PROVIDER_INTERACTION_MODE,\n          runtimeMode: \"full-access\",\n          branch: null,\n          worktreePath: null,\n          createdAt,\n        });\n        bootstrapProjectId = nextProjectId;\n        bootstrapThreadId = createdThreadId;\n      } else {\n        bootstrapProjectId = nextProjectId;\n        bootstrapThreadId = existingThreadId.value;\n      }\n    });\n  }\n\n  return {\n    ...(bootstrapProjectId ? { bootstrapProjectId } : {}),\n    ...(bootstrapThreadId ? { bootstrapThreadId } : {}),\n  } as const;\n});\n\nexport const resolveStartupBrowserTarget = Effect.gen(function* () {\n  const serverConfig = yield* ServerConfig;\n  const serverAuth = yield* ServerAuth;\n  const localUrl = `http://localhost:${serverConfig.port}`;\n  const bindUrl =\n    serverConfig.host && !isWildcardHost(serverConfig.host)\n      ? `http://${formatHostForUrl(serverConfig.host)}:${serverConfig.port}`\n      : localUrl;\n  const tailscaleUrl = serverConfig.tailscaleServeEnabled\n    ? yield* resolveTailscaleHttpsBaseUrl({ servePort: serverConfig.tailscaleServePort }).pipe(\n        Effect.catch((cause) =>\n          Effect.logWarning(\"failed to resolve Tailscale startup URL\", { cause }).pipe(\n            Effect.as(null),\n          ),\n        ),\n      )\n    : null;\n  const baseTarget = serverConfig.devUrl?.toString() ?? tailscaleUrl ?? bindUrl;\n  return yield* Effect.succeed(serverConfig.mode === \"desktop\" ? baseTarget : undefined).pipe(\n    Effect.flatMap((target) =>\n      target ? Effect.succeed(target) : serverAuth.issueStartupPairingUrl(baseTarget),\n    ),\n  );\n});\n\nexport const launchServerBrowser = Effect.gen(function* () {\n  const externalLauncher = yield* ExternalLauncher.ExternalLauncher;\n  const target = yield* resolveStartupBrowserTarget;\n  yield* externalLauncher.launchBrowser(target);\n  return `Opened Salchi in the default browser.\\nURL: ${target}`;\n});\n\nexport const createServerPairingCodeOutput = issueHeadlessServeAccessInfo().pipe(\n  Effect.map(formatHeadlessServeOutput),\n);\n\nconst maybeOpenBrowser = (target: string) =>\n  Effect.gen(function* () {\n    const serverConfig = yield* ServerConfig;\n    if (serverConfig.noBrowser) {\n      return;\n    }\n    const externalLauncher = yield* ExternalLauncher.ExternalLauncher;\n\n    yield* externalLauncher.launchBrowser(target).pipe(\n      Effect.catch(() =>\n        Effect.logInfo(\"browser auto-open unavailable\", {\n          hint: `Open ${target} in your browser.`,\n        }),\n      ),\n    );\n  });\n\nconst runStartupPhase = <A, E, R>(phase: string, effect: Effect.Effect<A, E, R>) =>\n  effect.pipe(\n    Effect.annotateSpans({ \"startup.phase\": phase }),\n    Effect.withSpan(`server.startup.${phase}`),\n  );\n\nexport const makeServerRuntimeStartup = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const serverConfig = yield* ServerConfig;\n  const keybindings = yield* Keybindings;\n  const orchestrationReactor = yield* OrchestrationReactor;\n  const providerSessionReaper = yield* ProviderSessionReaper;\n  const lifecycleEvents = yield* ServerLifecycleEvents;\n  const serverSettings = yield* ServerSettingsService;\n  const serverEnvironment = yield* ServerEnvironment;\n  const serverBootId = yield* crypto.randomUUIDv4;\n\n  const commandGate = yield* makeCommandGate;\n  const httpListening = yield* Deferred.make<void>();\n  const reactorScope = yield* Scope.make(\"sequential\");\n\n  yield* Effect.addFinalizer(() => Scope.close(reactorScope, Exit.void));\n\n  const startup = Effect.gen(function* () {\n    yield* Effect.logDebug(\"startup phase: starting keybindings runtime\");\n    yield* runStartupPhase(\n      \"keybindings.start\",\n      keybindings.start.pipe(\n        Effect.catch((error) =>\n          Effect.logWarning(\"failed to start keybindings runtime\", {\n            path: error.configPath,\n            detail: error.detail,\n            cause: error.cause,\n          }),\n        ),\n        Effect.forkScoped,\n      ),\n    );\n\n    yield* Effect.logDebug(\"startup phase: starting server settings runtime\");\n    yield* runStartupPhase(\n      \"settings.start\",\n      serverSettings.start.pipe(\n        Effect.catch((error) =>\n          Effect.logWarning(\"failed to start server settings runtime\", {\n            path: error.settingsPath,\n            detail: error.detail,\n            cause: error.cause,\n          }),\n        ),\n        Effect.forkScoped,\n      ),\n    );\n\n    yield* Effect.logDebug(\"startup phase: starting orchestration reactors\");\n    yield* runStartupPhase(\n      \"reactors.start\",\n      Effect.gen(function* () {\n        yield* orchestrationReactor.start().pipe(Scope.provide(reactorScope));\n        yield* providerSessionReaper.start().pipe(Scope.provide(reactorScope));\n      }),\n    );\n\n    const welcomeBase = yield* resolveWelcomeBase;\n    const environment = yield* serverEnvironment.getDescriptor;\n    yield* Effect.logDebug(\"startup phase: preparing welcome payload\");\n    yield* Effect.logDebug(\"startup phase: publishing welcome event\", {\n      environmentId: environment.environmentId,\n      serverBootId,\n      cwd: welcomeBase.cwd,\n      projectName: welcomeBase.projectName,\n    });\n    yield* runStartupPhase(\n      \"welcome.publish\",\n      lifecycleEvents.publish({\n        version: 1,\n        type: \"welcome\",\n        payload: {\n          environment,\n          ...welcomeBase,\n          serverBootId,\n        },\n      }),\n    );\n\n    if (serverConfig.autoBootstrapProjectFromCwd) {\n      yield* Effect.forkScoped(\n        runStartupPhase(\n          \"welcome.autobootstrap\",\n          Effect.gen(function* () {\n            const bootstrapTargets = yield* resolveAutoBootstrapWelcomeTargets;\n            if (!bootstrapTargets.bootstrapProjectId && !bootstrapTargets.bootstrapThreadId) {\n              return;\n            }\n\n            yield* Effect.logDebug(\"startup phase: publishing bootstrapped welcome event\", {\n              environmentId: environment.environmentId,\n              cwd: welcomeBase.cwd,\n              projectName: welcomeBase.projectName,\n              bootstrapProjectId: bootstrapTargets.bootstrapProjectId,\n              bootstrapThreadId: bootstrapTargets.bootstrapThreadId,\n            });\n            yield* lifecycleEvents.publish({\n              version: 1,\n              type: \"welcome\",\n              payload: {\n                environment,\n                ...welcomeBase,\n                serverBootId,\n                ...bootstrapTargets,\n              },\n            });\n          }).pipe(\n            Effect.catch((cause) =>\n              Effect.logWarning(\"startup auto-bootstrap welcome failed\", {\n                cause,\n              }),\n            ),\n          ),\n        ),\n      );\n    }\n  }).pipe(\n    Effect.annotateSpans({\n      \"server.mode\": serverConfig.mode,\n      \"server.port\": serverConfig.port,\n      \"server.host\": serverConfig.host ?? \"default\",\n    }),\n    Effect.withSpan(\"server.startup\", { kind: \"server\", root: true }),\n  );\n\n  yield* Effect.forkScoped(\n    Effect.gen(function* () {\n      const startupExit = yield* Effect.exit(startup);\n      if (Exit.isFailure(startupExit)) {\n        const error = new ServerRuntimeStartupError({\n          message: \"Server runtime startup failed before command readiness.\",\n          cause: startupExit.cause,\n        });\n        yield* Effect.logError(\"server runtime startup failed\", { cause: startupExit.cause });\n        yield* commandGate.failCommandReady(error);\n        return;\n      }\n\n      yield* Effect.logDebug(\"Accepting commands\");\n      yield* commandGate.signalCommandReady;\n      yield* Effect.logDebug(\"startup phase: waiting for http listener\");\n      yield* runStartupPhase(\"http.wait\", Deferred.await(httpListening));\n      yield* Effect.logDebug(\"startup phase: publishing ready event\");\n      yield* runStartupPhase(\n        \"ready.publish\",\n        lifecycleEvents.publish({\n          version: 1,\n          type: \"ready\",\n          payload: {\n            at: DateTime.formatIso(yield* DateTime.now),\n            environment: yield* serverEnvironment.getDescriptor,\n          },\n        }),\n      );\n\n      yield* Effect.logDebug(\"startup phase: recording startup heartbeat\");\n      yield* launchStartupHeartbeat;\n      if (serverConfig.startupPresentation === \"headless\") {\n        yield* Effect.logDebug(\"startup phase: headless access info\");\n        const accessInfo = yield* issueHeadlessServeAccessInfo();\n        yield* runStartupPhase(\n          \"headless.output\",\n          Console.log(formatHeadlessServeOutput(accessInfo)),\n        );\n      } else {\n        yield* Effect.logDebug(\"startup phase: browser open check\");\n        const startupBrowserTarget = yield* resolveStartupBrowserTarget;\n        if (serverConfig.mode !== \"desktop\") {\n          yield* runStartupPhase(\n            \"browser.output\",\n            Console.log(formatBrowserStartupOutput(startupBrowserTarget)),\n          );\n        }\n        yield* runStartupPhase(\"browser.open\", maybeOpenBrowser(startupBrowserTarget));\n      }\n      yield* runStartupPhase(\n        \"terminal.commands.start\",\n        installInteractiveServerTerminal({\n          openBrowser: launchServerBrowser,\n          createPairingCode: createServerPairingCodeOutput,\n        }).pipe(Effect.asVoid),\n      );\n      yield* Effect.logDebug(\"startup phase: complete\");\n    }),\n  );\n\n  return {\n    awaitCommandReady: commandGate.awaitCommandReady,\n    markHttpListening: Deferred.succeed(httpListening, undefined),\n    enqueueCommand: commandGate.enqueueCommand,\n  } satisfies ServerRuntimeStartupShape;\n});\n\nexport const ServerRuntimeStartupLive = Layer.effect(\n  ServerRuntimeStartup,\n  makeServerRuntimeStartup,\n);\n","/**\n * TerminalManager - Terminal session orchestration service interface.\n *\n * Owns terminal lifecycle operations, output fanout, and session state\n * transitions for thread-scoped terminals.\n *\n * @module TerminalManager\n */\nimport {\n  TerminalClearInput,\n  TerminalCloseInput,\n  TerminalEvent,\n  TerminalCwdError,\n  TerminalError,\n  TerminalHistoryError,\n  TerminalNotRunningError,\n  TerminalOpenInput,\n  TerminalResizeInput,\n  TerminalRestartInput,\n  TerminalSnapshotInput,\n  TerminalSessionSnapshot,\n  TerminalSessionLookupError,\n  TerminalSessionStatus,\n  TerminalWriteInput,\n} from \"@salchi/contracts\";\nimport type { PtyProcess } from \"./PTY.ts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Context from \"effect/Context\";\n\nexport {\n  TerminalCwdError,\n  TerminalError,\n  TerminalHistoryError,\n  TerminalNotRunningError,\n  TerminalSessionLookupError,\n};\n\nexport interface TerminalSessionState {\n  threadId: string;\n  terminalId: string;\n  cwd: string;\n  worktreePath: string | null;\n  status: TerminalSessionStatus;\n  pid: number | null;\n  history: string;\n  pendingHistoryControlSequence: string;\n  exitCode: number | null;\n  exitSignal: number | null;\n  updatedAt: string;\n  cols: number;\n  rows: number;\n  process: PtyProcess | null;\n  unsubscribeData: (() => void) | null;\n  unsubscribeExit: (() => void) | null;\n  hasRunningSubprocess: boolean;\n  runtimeEnv: Record<string, string> | null;\n}\n\nexport interface ShellCandidate {\n  shell: string;\n  args?: string[];\n}\n\nexport interface TerminalStartInput extends TerminalOpenInput {\n  cols: number;\n  rows: number;\n}\n\n/**\n * TerminalManagerShape - Service API for terminal session lifecycle operations.\n */\nexport interface TerminalManagerShape {\n  /**\n   * Open or attach to a terminal session.\n   *\n   * Reuses an existing session for the same thread/terminal id and restores\n   * persisted history on first open.\n   */\n  readonly open: (\n    input: TerminalOpenInput,\n  ) => Effect.Effect<TerminalSessionSnapshot, TerminalError>;\n\n  /**\n   * Write input bytes to a terminal session.\n   */\n  readonly write: (input: TerminalWriteInput) => Effect.Effect<void, TerminalError>;\n\n  /**\n   * Resize the PTY backing a terminal session.\n   */\n  readonly resize: (input: TerminalResizeInput) => Effect.Effect<void, TerminalError>;\n\n  /**\n   * Clear terminal output history.\n   */\n  readonly clear: (input: TerminalClearInput) => Effect.Effect<void, TerminalError>;\n\n  /**\n   * Read an existing terminal session snapshot without opening or starting a PTY.\n   */\n  readonly snapshot: (\n    input: TerminalSnapshotInput,\n  ) => Effect.Effect<TerminalSessionSnapshot, TerminalError>;\n\n  /**\n   * Restart a terminal session in place.\n   *\n   * Always resets history before spawning the new process.\n   */\n  readonly restart: (\n    input: TerminalRestartInput,\n  ) => Effect.Effect<TerminalSessionSnapshot, TerminalError>;\n\n  /**\n   * Close an active terminal session.\n   *\n   * When `terminalId` is omitted, closes all sessions for the thread.\n   */\n  readonly close: (input: TerminalCloseInput) => Effect.Effect<void, TerminalError>;\n\n  /**\n   * Subscribe to terminal runtime events with a direct callback.\n   *\n   * Returns an unsubscribe function.\n   */\n  readonly subscribe: (\n    listener: (event: TerminalEvent) => Effect.Effect<void>,\n  ) => Effect.Effect<() => void>;\n}\n\n/**\n * TerminalManager - Service tag for terminal session orchestration.\n */\nexport class TerminalManager extends Context.Service<TerminalManager, TerminalManagerShape>()(\n  \"salchi/terminal/Services/Manager/TerminalManager\",\n) {}\n","/**\n * WorkspaceEntries - Effect service contract for cached workspace entry search.\n *\n * Owns indexed workspace entry search plus cache invalidation for workspace\n * roots when the underlying filesystem changes.\n *\n * @module WorkspaceEntries\n */\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type {\n  FilesystemBrowseInput,\n  FilesystemBrowseResult,\n  ProjectListDirectoryEntriesInput,\n  ProjectListDirectoryEntriesResult,\n  ProjectSearchEntriesInput,\n  ProjectSearchEntriesResult,\n} from \"@salchi/contracts\";\n\nexport class WorkspaceEntriesError extends Schema.TaggedErrorClass<WorkspaceEntriesError>()(\n  \"WorkspaceEntriesError\",\n  {\n    cwd: Schema.String,\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nexport class WorkspaceEntriesBrowseError extends Schema.TaggedErrorClass<WorkspaceEntriesBrowseError>()(\n  \"WorkspaceEntriesBrowseError\",\n  {\n    cwd: Schema.optional(Schema.String),\n    partialPath: Schema.String,\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\n/**\n * WorkspaceEntriesShape - Service API for workspace entry search and cache\n * invalidation.\n */\nexport interface WorkspaceEntriesShape {\n  /**\n   * Browse matching directories for the provided partial path.\n   */\n  readonly browse: (\n    input: FilesystemBrowseInput,\n  ) => Effect.Effect<FilesystemBrowseResult, WorkspaceEntriesBrowseError>;\n\n  /**\n   * List immediate children for a workspace-root-relative directory.\n   */\n  readonly listDirectory: (\n    input: ProjectListDirectoryEntriesInput,\n  ) => Effect.Effect<ProjectListDirectoryEntriesResult, WorkspaceEntriesError>;\n\n  /**\n   * Search indexed workspace entries for files and directories matching the\n   * provided query.\n   */\n  readonly search: (\n    input: ProjectSearchEntriesInput,\n  ) => Effect.Effect<ProjectSearchEntriesResult, WorkspaceEntriesError>;\n\n  /**\n   * Drop any cached workspace entries for the given workspace root.\n   */\n  readonly invalidate: (cwd: string) => Effect.Effect<void>;\n}\n\n/**\n * WorkspaceEntries - Service tag for cached workspace entry search.\n */\nexport class WorkspaceEntries extends Context.Service<WorkspaceEntries, WorkspaceEntriesShape>()(\n  \"salchi/workspace/Services/WorkspaceEntries\",\n) {}\n","/**\n * WorkspaceFileSystem - Effect service contract for workspace file mutations.\n *\n * Owns workspace-root-relative file write operations and their associated\n * safety checks and cache invalidation hooks.\n *\n * @module WorkspaceFileSystem\n */\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type {\n  ProjectReadFileInput,\n  ProjectReadFileResult,\n  ProjectWriteFileInput,\n  ProjectWriteFileResult,\n  ProjectDeleteEntryInput,\n  ProjectDeleteEntryResult,\n} from \"@salchi/contracts\";\nimport { WorkspacePathOutsideRootError } from \"./WorkspacePaths.ts\";\n\nexport class WorkspaceFileSystemError extends Schema.TaggedErrorClass<WorkspaceFileSystemError>()(\n  \"WorkspaceFileSystemError\",\n  {\n    cwd: Schema.String,\n    relativePath: Schema.optional(Schema.String),\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\n/**\n * WorkspaceFileSystemShape - Service API for workspace-relative file operations.\n */\nexport interface WorkspaceFileSystemShape {\n  /**\n   * Read a UTF-8 text file relative to the workspace root.\n   *\n   * Rejects paths that escape the workspace root and reports binary or\n   * non-file targets as workspace filesystem errors.\n   */\n  readonly readFile: (\n    input: ProjectReadFileInput,\n  ) => Effect.Effect<\n    ProjectReadFileResult,\n    WorkspaceFileSystemError | WorkspacePathOutsideRootError\n  >;\n\n  /**\n   * Write a file relative to the workspace root.\n   *\n   * Creates parent directories as needed and rejects paths that escape the\n   * workspace root.\n   */\n  readonly writeFile: (\n    input: ProjectWriteFileInput,\n  ) => Effect.Effect<\n    ProjectWriteFileResult,\n    WorkspaceFileSystemError | WorkspacePathOutsideRootError\n  >;\n\n  /**\n   * Delete a file or empty directory relative to the workspace root.\n   *\n   * Rejects paths that escape the workspace root and rejects non-empty\n   * directories. Symlinks are unlinked directly rather than followed.\n   */\n  readonly deleteEntry: (\n    input: ProjectDeleteEntryInput,\n  ) => Effect.Effect<\n    ProjectDeleteEntryResult,\n    WorkspaceFileSystemError | WorkspacePathOutsideRootError\n  >;\n}\n\n/**\n * WorkspaceFileSystem - Service tag for workspace file operations.\n */\nexport class WorkspaceFileSystem extends Context.Service<\n  WorkspaceFileSystem,\n  WorkspaceFileSystemShape\n>()(\"salchi/workspace/Services/WorkspaceFileSystem\") {}\n","/**\n * ProviderInstanceRegistry — the single Effect service in the new model.\n *\n * Owns a `Map<ProviderInstanceId, ProviderInstance>` produced by running\n * registered driver factories against `ServerSettings.providerInstances`.\n * The registry watches settings; when an instance's config changes (or\n * the entry disappears), the registry tears down the affected instance's\n * scope and rebuilds — that's the entire hot-reload story.\n *\n * What rest-of-server reads from here:\n *   - `getInstance(instanceId)` — for routing turn/session calls.\n *   - `listInstances` — for snapshot aggregation in `ProviderRegistry`.\n *   - `listUnavailable` — `ServerProvider` shadows for instances whose\n *     driver is not registered in this build (rollback / fork tolerance).\n *   - `streamChanges` — coalesced \"registry mutated\" pings so consumers\n *     can re-pull lists or re-broadcast.\n *\n * @module provider/Services/ProviderInstanceRegistry\n */\nimport type { ProviderInstanceId, ServerProvider } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as PubSub from \"effect/PubSub\";\nimport type * as Scope from \"effect/Scope\";\nimport type * as Stream from \"effect/Stream\";\n\nimport type { ProviderInstance } from \"../ProviderDriver.ts\";\n\nexport interface ProviderInstanceRegistryShape {\n  /**\n   * Look up one instance by id. Returns `undefined` (not Option) when the\n   * id is unknown — callers branch on falsy and emit\n   * `ProviderInstanceNotFoundError`.\n   */\n  readonly getInstance: (\n    instanceId: ProviderInstanceId,\n  ) => Effect.Effect<ProviderInstance | undefined>;\n  /**\n   * Every available (driver-registered, successfully created) instance,\n   * in stable settings-author order.\n   */\n  readonly listInstances: Effect.Effect<ReadonlyArray<ProviderInstance>>;\n  /**\n   * Wire-shape shadow snapshots for instances whose driver is unknown to\n   * this build (or whose config failed to decode). Suitable for merging\n   * directly into `ProviderRegistry` output.\n   */\n  readonly listUnavailable: Effect.Effect<ReadonlyArray<ServerProvider>>;\n  /**\n   * Push notification stream emitted whenever the registry's contents\n   * change — instance added, removed, or rebuilt. The payload is `void`\n   * because consumers always want to re-pull `listInstances` /\n   * `listUnavailable` together.\n   *\n   * NOTE: because `Stream.fromPubSub` defers `PubSub.subscribe` until the\n   * stream starts running, forking a consumer via\n   * `Stream.runForEach(...).pipe(Effect.forkScoped)` races the next\n   * publish — the forked fiber may not have subscribed yet when the\n   * publish lands. Hot-reload consumers that must not miss a publish\n   * should use `subscribeChanges` below instead, which acquires the\n   * subscription synchronously in the caller's fiber before the consumer\n   * loop is forked.\n   */\n  readonly streamChanges: Stream.Stream<void>;\n  /**\n   * Acquire a subscription to the registry's change channel synchronously\n   * in the caller's fiber. Returns a `PubSub.Subscription<void>` whose\n   * lifetime is scoped to the provided `Scope` (the subscription is\n   * released when the scope closes). Consumers typically `yield*` this\n   * in the same fiber that forks their consumer loop, then drain with\n   * `PubSub.take(subscription)` inside `Effect.forever`. Because the\n   * subscription is registered with the PubSub before this `yield*`\n   * returns, no subsequent publish can land in a gap.\n   *\n   * This exists because the `ProviderInstanceRegistry` publishes on a\n   * PubSub and `Stream.fromPubSub` defers subscription until the stream\n   * starts executing — a consumer that `forkScoped`s the stream\n   * consumption can miss a publish that lands in the narrow window\n   * between \"fiber scheduled\" and \"fiber starts running\".\n   */\n  readonly subscribeChanges: Effect.Effect<PubSub.Subscription<void>, never, Scope.Scope>;\n}\n\nexport class ProviderInstanceRegistry extends Context.Service<\n  ProviderInstanceRegistry,\n  ProviderInstanceRegistryShape\n>()(\"salchi/provider/Services/ProviderInstanceRegistry\") {}\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport type { ChatAttachment, ModelSelection, ProviderInstanceId } from \"@salchi/contracts\";\nimport { TextGenerationError } from \"@salchi/contracts\";\n\nimport {\n  ProviderInstanceRegistry,\n  type ProviderInstanceRegistryShape,\n} from \"../provider/Services/ProviderInstanceRegistry.ts\";\nimport type { ProviderInstance } from \"../provider/ProviderDriver.ts\";\n\nexport type TextGenerationProvider = \"codex\" | \"claudeAgent\" | \"cursor\" | \"grok\" | \"opencode\";\n\nexport interface CommitMessageGenerationInput {\n  cwd: string;\n  branch: string | null;\n  stagedSummary: string;\n  stagedPatch: string;\n  /** When true, the model also returns a semantic branch name for the change. */\n  includeBranch?: boolean;\n  /** What model and provider to use for generation. */\n  modelSelection: ModelSelection;\n}\n\nexport interface CommitMessageGenerationResult {\n  subject: string;\n  body: string;\n  /** Only present when `includeBranch` was set on the input. */\n  branch?: string | undefined;\n}\n\nexport interface PrContentGenerationInput {\n  cwd: string;\n  baseBranch: string;\n  headBranch: string;\n  commitSummary: string;\n  diffSummary: string;\n  diffPatch: string;\n  /** What model and provider to use for generation. */\n  modelSelection: ModelSelection;\n}\n\nexport interface PrContentGenerationResult {\n  title: string;\n  body: string;\n}\n\nexport interface BranchNameGenerationInput {\n  cwd: string;\n  message: string;\n  attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  /** What model and provider to use for generation. */\n  modelSelection: ModelSelection;\n}\n\nexport interface BranchNameGenerationResult {\n  branch: string;\n}\n\nexport interface ThreadTitleGenerationInput {\n  cwd: string;\n  message: string;\n  attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  /** What model and provider to use for generation. */\n  modelSelection: ModelSelection;\n}\n\nexport interface ThreadTitleGenerationResult {\n  title: string;\n}\n\nexport interface TextGenerationService {\n  generateCommitMessage(\n    input: CommitMessageGenerationInput,\n  ): Promise<CommitMessageGenerationResult>;\n  generatePrContent(input: PrContentGenerationInput): Promise<PrContentGenerationResult>;\n  generateBranchName(input: BranchNameGenerationInput): Promise<BranchNameGenerationResult>;\n  generateThreadTitle(input: ThreadTitleGenerationInput): Promise<ThreadTitleGenerationResult>;\n}\n\n/**\n * TextGenerationShape - Service API for commit/PR text generation.\n */\nexport interface TextGenerationShape {\n  /**\n   * Generate a commit message from staged change context.\n   */\n  readonly generateCommitMessage: (\n    input: CommitMessageGenerationInput,\n  ) => Effect.Effect<CommitMessageGenerationResult, TextGenerationError>;\n\n  /**\n   * Generate pull request title/body from branch and diff context.\n   */\n  readonly generatePrContent: (\n    input: PrContentGenerationInput,\n  ) => Effect.Effect<PrContentGenerationResult, TextGenerationError>;\n\n  /**\n   * Generate a concise branch name from a user message.\n   */\n  readonly generateBranchName: (\n    input: BranchNameGenerationInput,\n  ) => Effect.Effect<BranchNameGenerationResult, TextGenerationError>;\n\n  /**\n   * Generate a concise thread title from a user's first message.\n   */\n  readonly generateThreadTitle: (\n    input: ThreadTitleGenerationInput,\n  ) => Effect.Effect<ThreadTitleGenerationResult, TextGenerationError>;\n}\n\n/**\n * TextGeneration - Service tag for commit and PR text generation.\n */\nexport class TextGeneration extends Context.Service<TextGeneration, TextGenerationShape>()(\n  \"salchi/textGeneration/TextGeneration\",\n) {}\n\ntype TextGenerationOp =\n  | \"generateCommitMessage\"\n  | \"generatePrContent\"\n  | \"generateBranchName\"\n  | \"generateThreadTitle\";\n\nconst resolveInstance = (\n  registry: ProviderInstanceRegistryShape,\n  operation: TextGenerationOp,\n  instanceId: ProviderInstanceId,\n): Effect.Effect<ProviderInstance[\"textGeneration\"], TextGenerationError> =>\n  registry.getInstance(instanceId).pipe(\n    Effect.flatMap((instance) =>\n      instance\n        ? Effect.succeed(instance.textGeneration)\n        : Effect.fail(\n            new TextGenerationError({\n              operation,\n              detail: `No provider instance registered for id '${instanceId}'.`,\n            }),\n          ),\n    ),\n  );\n\nexport const makeTextGenerationFromRegistry = (\n  registry: ProviderInstanceRegistryShape,\n): TextGenerationShape => ({\n  generateCommitMessage: (input) =>\n    resolveInstance(registry, \"generateCommitMessage\", input.modelSelection.instanceId).pipe(\n      Effect.flatMap((textGeneration) => textGeneration.generateCommitMessage(input)),\n    ),\n  generatePrContent: (input) =>\n    resolveInstance(registry, \"generatePrContent\", input.modelSelection.instanceId).pipe(\n      Effect.flatMap((textGeneration) => textGeneration.generatePrContent(input)),\n    ),\n  generateBranchName: (input) =>\n    resolveInstance(registry, \"generateBranchName\", input.modelSelection.instanceId).pipe(\n      Effect.flatMap((textGeneration) => textGeneration.generateBranchName(input)),\n    ),\n  generateThreadTitle: (input) =>\n    resolveInstance(registry, \"generateThreadTitle\", input.modelSelection.instanceId).pipe(\n      Effect.flatMap((textGeneration) => textGeneration.generateThreadTitle(input)),\n    ),\n});\n\nexport const layer = Layer.effect(\n  TextGeneration,\n  Effect.gen(function* () {\n    const registry = yield* ProviderInstanceRegistry;\n    return makeTextGenerationFromRegistry(registry);\n  }),\n);\n","import * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport type * as Effect from \"effect/Effect\";\n\nexport interface ProjectSetupScriptRunnerResultNoScript {\n  readonly status: \"no-script\";\n}\n\nexport interface ProjectSetupScriptRunnerResultStarted {\n  readonly status: \"started\";\n  readonly scriptId: string;\n  readonly scriptName: string;\n  readonly terminalId: string;\n  readonly cwd: string;\n}\n\nexport type ProjectSetupScriptRunnerResult =\n  | ProjectSetupScriptRunnerResultNoScript\n  | ProjectSetupScriptRunnerResultStarted;\n\nexport interface ProjectSetupScriptRunnerInput {\n  readonly threadId: string;\n  readonly projectId?: string;\n  readonly projectCwd?: string;\n  readonly worktreePath: string;\n  readonly preferredTerminalId?: string;\n}\n\nexport class ProjectSetupScriptRunnerError extends Data.TaggedError(\n  \"ProjectSetupScriptRunnerError\",\n)<{\n  readonly message: string;\n}> {}\n\nexport interface ProjectSetupScriptRunnerShape {\n  readonly runForThread: (\n    input: ProjectSetupScriptRunnerInput,\n  ) => Effect.Effect<ProjectSetupScriptRunnerResult, ProjectSetupScriptRunnerError>;\n}\n\nexport class ProjectSetupScriptRunner extends Context.Service<\n  ProjectSetupScriptRunner,\n  ProjectSetupScriptRunnerShape\n>()(\"salchi/project/Services/ProjectSetupScriptRunner\") {}\n","export function parseRemoteNamesInGitOrder(stdout: string): ReadonlyArray<string> {\n  const remoteNames: Array<string> = [];\n  for (const line of stdout.split(\"\\n\")) {\n    const remoteName = line.trim();\n    if (remoteName.length > 0) {\n      remoteNames.push(remoteName);\n    }\n  }\n  return remoteNames;\n}\n\nexport function parseRemoteNames(stdout: string): ReadonlyArray<string> {\n  return parseRemoteNamesInGitOrder(stdout).toSorted((a, b) => b.length - a.length);\n}\n\nexport function parseRemoteRefWithRemoteNames(\n  ref: string,\n  remoteNames: ReadonlyArray<string>,\n): { remoteRef: string; remoteName: string; branchName: string } | null {\n  const trimmedRef = ref.trim();\n  if (trimmedRef.length === 0) {\n    return null;\n  }\n\n  for (const remoteName of remoteNames) {\n    const remotePrefix = `${remoteName}/`;\n    if (!trimmedRef.startsWith(remotePrefix)) {\n      continue;\n    }\n    const branchName = trimmedRef.slice(remotePrefix.length).trim();\n    if (branchName.length === 0) {\n      return null;\n    }\n    return {\n      remoteRef: trimmedRef,\n      remoteName,\n      branchName,\n    };\n  }\n\n  return null;\n}\n\nexport function extractBranchNameFromRemoteRef(\n  ref: string,\n  options?: {\n    remoteName?: string | null;\n    remoteNames?: ReadonlyArray<string>;\n  },\n): string {\n  const normalized = ref.trim();\n  if (normalized.length === 0) {\n    return \"\";\n  }\n\n  if (normalized.startsWith(\"refs/remotes/\")) {\n    return extractBranchNameFromRemoteRef(normalized.slice(\"refs/remotes/\".length), options);\n  }\n\n  const remoteNames = options?.remoteName ? [options.remoteName] : (options?.remoteNames ?? []);\n  const parsedRemoteRef = parseRemoteRefWithRemoteNames(normalized, remoteNames);\n  if (parsedRemoteRef) {\n    return parsedRemoteRef.branchName;\n  }\n\n  const firstSlash = normalized.indexOf(\"/\");\n  if (firstSlash === -1) {\n    return normalized;\n  }\n  return normalized.slice(firstSlash + 1).trim();\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport * as Arr from \"effect/Array\";\nimport * as Cache from \"effect/Cache\";\nimport * as Cause from \"effect/Cause\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as PlatformError from \"effect/PlatformError\";\nimport * as Ref from \"effect/Ref\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { GitCommandError, type VcsRef, type VcsWorkingTreeFileStatus } from \"@salchi/contracts\";\nimport { dedupeRemoteBranchesWithLocalMatches } from \"@salchi/shared/git\";\nimport { compactTraceAttributes } from \"@salchi/shared/observability\";\nimport { decodeJsonResult } from \"@salchi/shared/schemaJson\";\nimport { gitCommandDuration, gitCommandsTotal, withMetrics } from \"../observability/Metrics.ts\";\nimport * as GitVcsDriver from \"./GitVcsDriver.ts\";\nimport {\n  parseRemoteNames,\n  parseRemoteNamesInGitOrder,\n  parseRemoteRefWithRemoteNames,\n} from \"../git/remoteRefs.ts\";\nimport { ServerConfig } from \"../config.ts\";\nconst isGitCommandError = Schema.is(GitCommandError);\n\nconst ignoreInterruptOnlyCause = <E>(cause: Cause.Cause<E>): Effect.Effect<void, E> =>\n  Cause.hasInterruptsOnly(cause) ? Effect.void : Effect.failCause(cause);\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 1_000_000;\nconst OUTPUT_TRUNCATED_MARKER = \"\\n\\n[truncated]\";\nconst PREPARED_COMMIT_PATCH_MAX_OUTPUT_BYTES = 49_000;\nconst RANGE_COMMIT_SUMMARY_MAX_OUTPUT_BYTES = 19_000;\nconst RANGE_DIFF_SUMMARY_MAX_OUTPUT_BYTES = 19_000;\nconst RANGE_DIFF_PATCH_MAX_OUTPUT_BYTES = 59_000;\nconst WORKING_TREE_DIFF_MAX_OUTPUT_BYTES = 10_000_000;\nconst GIT_EMPTY_TREE_OBJECT_ID = \"4b825dc642cb6eb9a060e54bf8d69288fbee4904\";\nconst WORKING_TREE_DIFF_GIT_ADD_MAX_ARG_BYTES = 64 * 1024;\nconst STATUS_UPSTREAM_REFRESH_INTERVAL = Duration.seconds(15);\nconst STATUS_UPSTREAM_REFRESH_TIMEOUT = Duration.seconds(5);\nconst STATUS_UPSTREAM_REFRESH_FAILURE_COOLDOWN = Duration.seconds(5);\nconst STATUS_UPSTREAM_REFRESH_CACHE_CAPACITY = 2_048;\nexport const statusUpstreamRefreshCacheTimeToLive = <A, E>(exit: Exit.Exit<A, E>) => {\n  if (Exit.isSuccess(exit)) return STATUS_UPSTREAM_REFRESH_INTERVAL;\n  if (Cause.hasInterruptsOnly(exit.cause)) return Duration.zero;\n  return STATUS_UPSTREAM_REFRESH_FAILURE_COOLDOWN;\n};\nconst NON_INTERACTIVE_GIT_AUTH_ENV = Object.freeze({\n  SSH_ASKPASS_REQUIRE: \"never\",\n  GIT_TERMINAL_PROMPT: \"0\",\n  GCM_INTERACTIVE: \"Never\",\n} satisfies NodeJS.ProcessEnv);\nconst STATUS_UPSTREAM_REFRESH_ENV = NON_INTERACTIVE_GIT_AUTH_ENV;\nconst DEFAULT_BASE_BRANCH_CANDIDATES = [\"main\", \"master\"] as const;\nconst GIT_LIST_BRANCHES_DEFAULT_LIMIT = 100;\nconst NON_REPOSITORY_STATUS_DETAILS = Object.freeze<GitVcsDriver.GitStatusDetails>({\n  isRepo: false,\n  hasOriginRemote: false,\n  isDefaultBranch: false,\n  branch: null,\n  upstreamRef: null,\n  hasWorkingTreeChanges: false,\n  workingTree: {\n    files: [],\n    insertions: 0,\n    deletions: 0,\n    staged: { files: [], insertions: 0, deletions: 0 },\n    unstaged: { files: [], insertions: 0, deletions: 0 },\n  },\n  hasUpstream: false,\n  aheadCount: 0,\n  behindCount: 0,\n  aheadOfDefaultCount: 0,\n});\nconst NON_REPOSITORY_REMOTE_STATUS_DETAILS = Object.freeze<GitVcsDriver.GitRemoteStatusDetails>({\n  isRepo: false,\n  isDefaultBranch: false,\n  branch: null,\n  upstreamRef: null,\n  hasUpstream: false,\n  aheadCount: 0,\n  behindCount: 0,\n  aheadOfDefaultCount: 0,\n});\n\ntype TraceTailState = {\n  processedChars: number;\n  remainder: string;\n};\n\nclass StatusRemoteRefreshCacheKey extends Data.Class<{\n  gitCommonDir: string;\n  remoteName: string;\n}> {}\n\ninterface ExecuteGitOptions {\n  stdin?: string | undefined;\n  timeoutMs?: number | undefined;\n  allowNonZeroExit?: boolean | undefined;\n  fallbackErrorMessage?: string | undefined;\n  env?: NodeJS.ProcessEnv | undefined;\n  maxOutputBytes?: number | undefined;\n  appendTruncationMarker?: boolean | undefined;\n  progress?: GitVcsDriver.ExecuteGitProgress | undefined;\n}\n\nfunction parseBranchAb(value: string): { ahead: number; behind: number } {\n  const match = value.match(/^\\+(\\d+)\\s+-(\\d+)$/);\n  if (!match) return { ahead: 0, behind: 0 };\n  return {\n    ahead: Number(match[1] ?? \"0\"),\n    behind: Number(match[2] ?? \"0\"),\n  };\n}\n\nfunction parseNumstatEntries(\n  stdout: string,\n): Array<{ path: string; insertions: number; deletions: number }> {\n  const entries: Array<{ path: string; insertions: number; deletions: number }> = [];\n  for (const line of stdout.split(/\\r?\\n/g)) {\n    if (line.trim().length === 0) continue;\n    const [addedRaw, deletedRaw, ...pathParts] = line.split(\"\\t\");\n    const rawPath =\n      pathParts.length > 1 ? (pathParts.at(-1) ?? \"\").trim() : pathParts.join(\"\\t\").trim();\n    if (rawPath.length === 0) continue;\n    const added = Number.parseInt(addedRaw ?? \"0\", 10);\n    const deleted = Number.parseInt(deletedRaw ?? \"0\", 10);\n    const renameArrowIndex = rawPath.indexOf(\" => \");\n    const normalizedPath =\n      renameArrowIndex >= 0 ? rawPath.slice(renameArrowIndex + \" => \".length).trim() : rawPath;\n    entries.push({\n      path: normalizedPath.length > 0 ? normalizedPath : rawPath,\n      insertions: Number.isFinite(added) ? added : 0,\n      deletions: Number.isFinite(deleted) ? deleted : 0,\n    });\n  }\n  return entries;\n}\n\nfunction splitNullSeparatedPaths(input: string, truncated: boolean): string[] {\n  const parts = input.split(\"\\0\");\n  if (parts.length === 0) return [];\n\n  if (truncated && parts[parts.length - 1]?.length) {\n    parts.pop();\n  }\n\n  return parts.filter((value) => value.length > 0);\n}\n\nfunction chunkPathsForGitArgs(relativePaths: ReadonlyArray<string>): string[][] {\n  const chunks: string[][] = [];\n  let chunk: string[] = [];\n  let chunkBytes = 0;\n\n  for (const relativePath of relativePaths) {\n    const relativePathBytes = Buffer.byteLength(relativePath) + 1;\n    if (\n      chunk.length > 0 &&\n      chunkBytes + relativePathBytes > WORKING_TREE_DIFF_GIT_ADD_MAX_ARG_BYTES\n    ) {\n      chunks.push(chunk);\n      chunk = [];\n      chunkBytes = 0;\n    }\n\n    chunk.push(relativePath);\n    chunkBytes += relativePathBytes;\n  }\n\n  if (chunk.length > 0) {\n    chunks.push(chunk);\n  }\n\n  return chunks;\n}\n\nfunction normalizeGitStatusPath(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\").replace(/\\/+$/g, \"\");\n}\n\nfunction gitStatusPathMatchesRequest(statusPath: string, requestedPath: string): boolean {\n  const normalizedStatusPath = normalizeGitStatusPath(statusPath);\n  const normalizedRequestedPath = normalizeGitStatusPath(requestedPath);\n  return (\n    normalizedStatusPath === normalizedRequestedPath ||\n    normalizedStatusPath.startsWith(`${normalizedRequestedPath}/`)\n  );\n}\n\ninterface ParsedPorcelainFileStatus {\n  readonly path: string;\n  readonly status: VcsWorkingTreeFileStatus;\n}\n\ninterface ParsedPorcelainFileStatuses {\n  readonly staged?: ParsedPorcelainFileStatus;\n  readonly unstaged?: ParsedPorcelainFileStatus;\n}\n\nfunction sliceAfterSpaceCount(value: string, spaceCount: number): string {\n  let cursor = -1;\n  for (let index = 0; index < spaceCount; index += 1) {\n    cursor = value.indexOf(\" \", cursor + 1);\n    if (cursor < 0) {\n      return \"\";\n    }\n  }\n  return value.slice(cursor + 1);\n}\n\nfunction parsePorcelainPathAfterFieldCount(\n  line: string,\n  fieldCountBeforePath: number,\n): string | null {\n  const pathPart = sliceAfterSpaceCount(line, fieldCountBeforePath).trim();\n  if (pathPart.length === 0) {\n    return null;\n  }\n  const tabIndex = pathPart.indexOf(\"\\t\");\n  const filePath = tabIndex >= 0 ? pathPart.slice(0, tabIndex).trim() : pathPart;\n  return filePath.length > 0 ? filePath : null;\n}\n\nfunction statusFromPorcelainCode(code: string): VcsWorkingTreeFileStatus | null {\n  switch (code) {\n    case \".\":\n    case \" \":\n      return null;\n    case \"D\":\n      return \"deleted\";\n    case \"A\":\n      return \"added\";\n    case \"R\":\n      return \"renamed\";\n    case \"C\":\n      return \"copied\";\n    default:\n      return \"modified\";\n  }\n}\n\nfunction statusToNameStatus(status: VcsWorkingTreeFileStatus): string {\n  switch (status) {\n    case \"added\":\n    case \"untracked\":\n      return \"A\";\n    case \"deleted\":\n      return \"D\";\n    case \"renamed\":\n      return \"R\";\n    case \"copied\":\n      return \"C\";\n    case \"conflicted\":\n      return \"U\";\n    case \"modified\":\n      return \"M\";\n  }\n}\n\nfunction parsePorcelainFileStatuses(line: string): ParsedPorcelainFileStatuses | null {\n  if (line.startsWith(\"? \")) {\n    const path = line.slice(2).trim();\n    return path.length > 0 ? { unstaged: { path, status: \"untracked\" } } : null;\n  }\n\n  if (line.startsWith(\"u \")) {\n    const path = parsePorcelainPathAfterFieldCount(line, 10);\n    return path ? { unstaged: { path, status: \"conflicted\" } } : null;\n  }\n\n  if (line.startsWith(\"1 \")) {\n    const x = line.slice(2, 3);\n    const y = line.slice(3, 4);\n    const path = parsePorcelainPathAfterFieldCount(line, 8);\n    if (!path) return null;\n    const stagedStatus = statusFromPorcelainCode(x);\n    const unstagedStatus = statusFromPorcelainCode(y);\n    return {\n      ...(stagedStatus ? { staged: { path, status: stagedStatus } } : {}),\n      ...(unstagedStatus ? { unstaged: { path, status: unstagedStatus } } : {}),\n    };\n  }\n\n  if (line.startsWith(\"2 \")) {\n    const x = line.slice(2, 3);\n    const y = line.slice(3, 4);\n    const path = parsePorcelainPathAfterFieldCount(line, 9);\n    if (!path) return null;\n    const stagedStatus = statusFromPorcelainCode(x);\n    const unstagedStatus = statusFromPorcelainCode(y);\n    return {\n      ...(stagedStatus ? { staged: { path, status: stagedStatus } } : {}),\n      ...(unstagedStatus ? { unstaged: { path, status: unstagedStatus } } : {}),\n    };\n  }\n\n  return null;\n}\n\ntype WorkingTreeFile = GitVcsDriver.GitStatusDetails[\"workingTree\"][\"files\"][number];\ntype WorkingTreeChangeSet = GitVcsDriver.GitStatusDetails[\"workingTree\"][\"staged\"];\n\nfunction buildWorkingTreeChangeSet(\n  statusesByPath: ReadonlyMap<string, VcsWorkingTreeFileStatus>,\n  stats: ReadonlyArray<{ path: string; insertions: number; deletions: number }>,\n): WorkingTreeChangeSet {\n  const statByPath = new Map<string, { insertions: number; deletions: number }>();\n  for (const entry of stats) {\n    const existing = statByPath.get(entry.path) ?? { insertions: 0, deletions: 0 };\n    existing.insertions += entry.insertions;\n    existing.deletions += entry.deletions;\n    statByPath.set(entry.path, existing);\n  }\n\n  let insertions = 0;\n  let deletions = 0;\n  const files: WorkingTreeFile[] = [];\n  const allPaths = new Set<string>([...statusesByPath.keys(), ...statByPath.keys()]);\n  for (const filePath of allPaths) {\n    const stat = statByPath.get(filePath) ?? { insertions: 0, deletions: 0 };\n    insertions += stat.insertions;\n    deletions += stat.deletions;\n    files.push({\n      path: filePath,\n      status: statusesByPath.get(filePath) ?? \"modified\",\n      insertions: stat.insertions,\n      deletions: stat.deletions,\n    });\n  }\n\n  files.sort((a, b) => a.path.localeCompare(b.path));\n  return { files, insertions, deletions };\n}\n\nfunction mergeWorkingTreeChangeSets(\n  stagedStatusesByPath: ReadonlyMap<string, VcsWorkingTreeFileStatus>,\n  unstagedStatusesByPath: ReadonlyMap<string, VcsWorkingTreeFileStatus>,\n  stagedEntries: ReadonlyArray<{ path: string; insertions: number; deletions: number }>,\n  unstagedEntries: ReadonlyArray<{ path: string; insertions: number; deletions: number }>,\n): WorkingTreeChangeSet {\n  const statusesByPath = new Map<string, VcsWorkingTreeFileStatus>(unstagedStatusesByPath);\n  for (const [filePath, status] of stagedStatusesByPath) {\n    statusesByPath.set(filePath, status);\n  }\n  return buildWorkingTreeChangeSet(statusesByPath, [...stagedEntries, ...unstagedEntries]);\n}\n\nfunction parseBranchLine(line: string): { name: string; current: boolean } | null {\n  const trimmed = line.trim();\n  if (trimmed.length === 0) return null;\n\n  const name = trimmed.replace(/^[*+]\\s+/, \"\");\n  // Exclude symbolic refs like: \"origin/HEAD -> origin/main\".\n  // Exclude detached HEAD pseudo-refs like: \"(HEAD detached at origin/main)\".\n  if (name.includes(\" -> \") || name.startsWith(\"(\")) return null;\n\n  return {\n    name,\n    current: trimmed.startsWith(\"* \"),\n  };\n}\n\nfunction filterBranchesForListQuery(\n  refs: ReadonlyArray<VcsRef>,\n  query?: string,\n): ReadonlyArray<VcsRef> {\n  if (!query) {\n    return refs;\n  }\n\n  const normalizedQuery = query.toLowerCase();\n  return refs.filter((refName) => refName.name.toLowerCase().includes(normalizedQuery));\n}\n\nfunction paginateBranches(input: {\n  refs: ReadonlyArray<VcsRef>;\n  cursor?: number | undefined;\n  limit?: number | undefined;\n}): {\n  refs: ReadonlyArray<VcsRef>;\n  nextCursor: number | null;\n  totalCount: number;\n} {\n  const cursor = input.cursor ?? 0;\n  const limit = input.limit ?? GIT_LIST_BRANCHES_DEFAULT_LIMIT;\n  const totalCount = input.refs.length;\n  const refs = input.refs.slice(cursor, cursor + limit);\n  const nextCursor = cursor + refs.length < totalCount ? cursor + refs.length : null;\n\n  return {\n    refs,\n    nextCursor,\n    totalCount,\n  };\n}\n\nfunction sanitizeRemoteName(value: string): string {\n  const sanitized = value\n    .trim()\n    .replace(/[^A-Za-z0-9._-]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n  return sanitized.length > 0 ? sanitized : \"fork\";\n}\n\nfunction normalizeRemoteUrl(value: string): string {\n  return value\n    .trim()\n    .replace(/\\/+$/g, \"\")\n    .replace(/\\.git$/i, \"\")\n    .toLowerCase();\n}\n\nfunction parseRemoteFetchUrls(stdout: string): Map<string, string> {\n  const remotes = new Map<string, string>();\n  for (const line of stdout.split(\"\\n\")) {\n    const trimmed = line.trim();\n    if (trimmed.length === 0) continue;\n    const match = /^(\\S+)\\s+(\\S+)\\s+\\((fetch|push)\\)$/.exec(trimmed);\n    if (!match) continue;\n    const [, remoteName = \"\", remoteUrl = \"\", direction = \"\"] = match;\n    if (direction !== \"fetch\" || remoteName.length === 0 || remoteUrl.length === 0) {\n      continue;\n    }\n    remotes.set(remoteName, remoteUrl);\n  }\n  return remotes;\n}\n\nfunction parseUpstreamRefWithRemoteNames(\n  upstreamRef: string,\n  remoteNames: ReadonlyArray<string>,\n): { upstreamRef: string; remoteName: string; branchName: string } | null {\n  const parsed = parseRemoteRefWithRemoteNames(upstreamRef, remoteNames);\n  if (!parsed) {\n    return null;\n  }\n\n  return {\n    upstreamRef,\n    remoteName: parsed.remoteName,\n    branchName: parsed.branchName,\n  };\n}\n\nfunction parseUpstreamRefByFirstSeparator(\n  upstreamRef: string,\n): { upstreamRef: string; remoteName: string; branchName: string } | null {\n  const separatorIndex = upstreamRef.indexOf(\"/\");\n  if (separatorIndex <= 0 || separatorIndex === upstreamRef.length - 1) {\n    return null;\n  }\n\n  const remoteName = upstreamRef.slice(0, separatorIndex).trim();\n  const branchName = upstreamRef.slice(separatorIndex + 1).trim();\n  if (remoteName.length === 0 || branchName.length === 0) {\n    return null;\n  }\n\n  return {\n    upstreamRef,\n    remoteName,\n    branchName,\n  };\n}\n\nfunction parseTrackingBranchByUpstreamRef(stdout: string, upstreamRef: string): string | null {\n  for (const line of stdout.split(\"\\n\")) {\n    const trimmedLine = line.trim();\n    if (trimmedLine.length === 0) {\n      continue;\n    }\n    const [branchNameRaw, upstreamBranchRaw = \"\"] = trimmedLine.split(\"\\t\");\n    const branchName = branchNameRaw?.trim() ?? \"\";\n    const candidateUpstreamRef = upstreamBranchRaw.trim();\n    if (branchName.length === 0 || candidateUpstreamRef.length === 0) {\n      continue;\n    }\n    if (candidateUpstreamRef === upstreamRef) {\n      return branchName;\n    }\n  }\n\n  return null;\n}\n\nfunction deriveLocalBranchNameFromRemoteRef(branchName: string): string | null {\n  const separatorIndex = branchName.indexOf(\"/\");\n  if (separatorIndex <= 0 || separatorIndex === branchName.length - 1) {\n    return null;\n  }\n  const localBranch = branchName.slice(separatorIndex + 1).trim();\n  return localBranch.length > 0 ? localBranch : null;\n}\n\nfunction commandLabel(args: readonly string[]): string {\n  return `git ${args.join(\" \")}`;\n}\n\nfunction parseDefaultBranchFromRemoteHeadRef(value: string, remoteName: string): string | null {\n  const trimmed = value.trim();\n  const prefix = `refs/remotes/${remoteName}/`;\n  if (!trimmed.startsWith(prefix)) {\n    return null;\n  }\n  const refName = trimmed.slice(prefix.length).trim();\n  return refName.length > 0 ? refName : null;\n}\n\nfunction createGitCommandError(\n  operation: string,\n  cwd: string,\n  args: readonly string[],\n  detail: string,\n  cause?: unknown,\n): GitCommandError {\n  return new GitCommandError({\n    operation,\n    command: commandLabel(args),\n    cwd,\n    detail,\n    ...(cause !== undefined ? { cause } : {}),\n  });\n}\n\nfunction quoteGitCommand(args: ReadonlyArray<string>): string {\n  return `git ${args.join(\" \")}`;\n}\n\nfunction isMissingGitCwdError(error: GitCommandError): boolean {\n  const normalized = `${error.detail}\\n${error.message}`.toLowerCase();\n  return (\n    normalized.includes(\"no such file or directory\") ||\n    normalized.includes(\"notfound: filesystem.access\") ||\n    normalized.includes(\"enoent\") ||\n    normalized.includes(\"not a directory\")\n  );\n}\n\nfunction toGitCommandError(\n  input: Pick<GitVcsDriver.ExecuteGitInput, \"operation\" | \"cwd\" | \"args\">,\n  detail: string,\n) {\n  return (cause: unknown) =>\n    isGitCommandError(cause)\n      ? cause\n      : new GitCommandError({\n          operation: input.operation,\n          command: quoteGitCommand(input.args),\n          cwd: input.cwd,\n          detail: `${cause instanceof Error && cause.message.length > 0 ? cause.message : \"Unknown error\"} - ${detail}`,\n          ...(cause !== undefined ? { cause } : {}),\n        });\n}\n\ninterface Trace2Monitor {\n  readonly env: NodeJS.ProcessEnv;\n  readonly flush: Effect.Effect<void, never>;\n}\n\nconst nowUnixNano = DateTime.now.pipe(\n  Effect.map((now) => BigInt(DateTime.toEpochMillis(now)) * 1_000_000n),\n);\n\nconst addCurrentSpanEvent = (name: string, attributes: Record<string, unknown>) =>\n  Effect.gen(function* () {\n    const span = yield* Effect.currentSpan;\n    const timestamp = yield* nowUnixNano;\n    yield* Effect.sync(() => {\n      span.event(name, timestamp, compactTraceAttributes(attributes));\n    });\n  }).pipe(Effect.catch(() => Effect.void));\n\nfunction trace2ChildKey(record: Record<string, unknown>): string | null {\n  const childId = record.child_id;\n  if (typeof childId === \"number\" || typeof childId === \"string\") {\n    return String(childId);\n  }\n  const hookName = record.hook_name;\n  return typeof hookName === \"string\" && hookName.trim().length > 0 ? hookName.trim() : null;\n}\n\nconst Trace2Record = Schema.Record(Schema.String, Schema.Unknown);\n\nconst createTrace2Monitor = Effect.fn(\"createTrace2Monitor\")(function* (\n  input: Pick<GitVcsDriver.ExecuteGitInput, \"operation\" | \"cwd\" | \"args\">,\n  progress: GitVcsDriver.ExecuteGitProgress | undefined,\n): Effect.fn.Return<\n  Trace2Monitor,\n  PlatformError.PlatformError,\n  Scope.Scope | FileSystem.FileSystem | Path.Path\n> {\n  if (!progress?.onHookStarted && !progress?.onHookFinished) {\n    return {\n      env: {},\n      flush: Effect.void,\n    };\n  }\n\n  const fs = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const traceFilePath = yield* fs.makeTempFileScoped({\n    prefix: `salchi-git-trace2-${process.pid}-`,\n    suffix: \".json\",\n  });\n  const hookStartByChildKey = new Map<string, { hookName: string; startedAtMs: number }>();\n  const traceTailState = yield* Ref.make<TraceTailState>({\n    processedChars: 0,\n    remainder: \"\",\n  });\n\n  const handleTraceLine = Effect.fn(\"handleTraceLine\")(function* (line: string) {\n    const trimmedLine = line.trim();\n    if (trimmedLine.length === 0) {\n      return;\n    }\n\n    const traceRecord = decodeJsonResult(Trace2Record)(trimmedLine);\n    if (Result.isFailure(traceRecord)) {\n      yield* Effect.logDebug(\n        `GitVcsDriver.trace2: failed to parse trace line for ${quoteGitCommand(input.args)} in ${input.cwd}`,\n        traceRecord.failure,\n      );\n      return;\n    }\n\n    if (traceRecord.success.child_class !== \"hook\") {\n      return;\n    }\n\n    const event = traceRecord.success.event;\n    const childKey = trace2ChildKey(traceRecord.success);\n    if (childKey === null) {\n      return;\n    }\n    const started = hookStartByChildKey.get(childKey);\n    const hookNameFromEvent =\n      typeof traceRecord.success.hook_name === \"string\" ? traceRecord.success.hook_name.trim() : \"\";\n    const hookName = hookNameFromEvent.length > 0 ? hookNameFromEvent : (started?.hookName ?? \"\");\n    if (hookName.length === 0) {\n      return;\n    }\n\n    if (event === \"child_start\") {\n      const now = yield* DateTime.now;\n      hookStartByChildKey.set(childKey, { hookName, startedAtMs: DateTime.toEpochMillis(now) });\n      yield* addCurrentSpanEvent(\"git.hook.started\", {\n        hookName,\n      });\n      if (progress.onHookStarted) {\n        yield* progress.onHookStarted(hookName);\n      }\n      return;\n    }\n\n    if (event === \"child_exit\") {\n      hookStartByChildKey.delete(childKey);\n      const code = traceRecord.success.exitCode;\n      const exitCode = typeof code === \"number\" && Number.isInteger(code) ? code : null;\n      const now = yield* DateTime.now;\n      const durationMs = started\n        ? Math.max(0, DateTime.toEpochMillis(now) - started.startedAtMs)\n        : null;\n      yield* addCurrentSpanEvent(\"git.hook.finished\", {\n        hookName: started?.hookName ?? hookName,\n        exitCode,\n        durationMs,\n      });\n      if (progress.onHookFinished) {\n        yield* progress.onHookFinished({\n          hookName: started?.hookName ?? hookName,\n          exitCode,\n          durationMs,\n        });\n      }\n    }\n  });\n\n  const deltaMutex = yield* Semaphore.make(1);\n  const readTraceDelta = deltaMutex.withPermit(\n    fs.readFileString(traceFilePath).pipe(\n      Effect.flatMap((contents) =>\n        Effect.uninterruptible(\n          Ref.modify(traceTailState, ({ processedChars, remainder }) => {\n            if (contents.length <= processedChars) {\n              return [[], { processedChars, remainder }];\n            }\n\n            const appended = contents.slice(processedChars);\n            const combined = remainder + appended;\n            const lines = combined.split(\"\\n\");\n            const nextRemainder = lines.pop() ?? \"\";\n\n            return [\n              lines.map((line) => line.replace(/\\r$/, \"\")),\n              {\n                processedChars: contents.length,\n                remainder: nextRemainder,\n              },\n            ];\n          }).pipe(\n            Effect.flatMap((lines) => Effect.forEach(lines, handleTraceLine, { discard: true })),\n          ),\n        ),\n      ),\n      Effect.ignore({ log: true }),\n    ),\n  );\n  const traceFileName = path.basename(traceFilePath);\n  yield* Stream.runForEach(fs.watch(traceFilePath), (event) => {\n    const eventPath = event.path;\n    const isTargetTraceEvent =\n      eventPath === traceFilePath ||\n      eventPath === traceFileName ||\n      path.basename(eventPath) === traceFileName;\n    if (!isTargetTraceEvent) return Effect.void;\n    return readTraceDelta;\n  }).pipe(Effect.ignoreCause({ log: true }), Effect.forkScoped);\n\n  const finalizeTrace2Monitor = Effect.fn(\"finalizeTrace2Monitor\")(function* () {\n    yield* readTraceDelta;\n    const finalLine = yield* Ref.modify(traceTailState, ({ processedChars, remainder }) => [\n      remainder.trim(),\n      {\n        processedChars,\n        remainder: \"\",\n      },\n    ]);\n    if (finalLine.length > 0) {\n      yield* handleTraceLine(finalLine);\n    }\n  });\n\n  yield* Effect.addFinalizer(finalizeTrace2Monitor);\n\n  return {\n    env: {\n      GIT_TRACE2_EVENT: traceFilePath,\n    },\n    flush: readTraceDelta,\n  };\n});\n\nconst collectOutput = Effect.fnUntraced(function* <E>(\n  input: Pick<GitVcsDriver.ExecuteGitInput, \"operation\" | \"cwd\" | \"args\">,\n  stream: Stream.Stream<Uint8Array, E>,\n  maxOutputBytes: number,\n  appendTruncationMarker: boolean,\n  onLine: ((line: string) => Effect.Effect<void, never>) | undefined,\n): Effect.fn.Return<{ readonly text: string; readonly truncated: boolean }, GitCommandError> {\n  const decoder = new TextDecoder();\n  let bytes = 0;\n  let text = \"\";\n  let lineBuffer = \"\";\n  let truncated = false;\n\n  const emitCompleteLines = Effect.fnUntraced(function* (flush: boolean) {\n    let newlineIndex = lineBuffer.indexOf(\"\\n\");\n    while (newlineIndex >= 0) {\n      const line = lineBuffer.slice(0, newlineIndex).replace(/\\r$/, \"\");\n      lineBuffer = lineBuffer.slice(newlineIndex + 1);\n      if (line.length > 0 && onLine) {\n        yield* onLine(line);\n      }\n      newlineIndex = lineBuffer.indexOf(\"\\n\");\n    }\n\n    if (flush) {\n      const trailing = lineBuffer.replace(/\\r$/, \"\");\n      lineBuffer = \"\";\n      if (trailing.length > 0 && onLine) {\n        yield* onLine(trailing);\n      }\n    }\n  });\n\n  const processChunk = Effect.fnUntraced(function* (chunk: Uint8Array) {\n    if (appendTruncationMarker && truncated) {\n      return;\n    }\n    const nextBytes = bytes + chunk.byteLength;\n    if (!appendTruncationMarker && nextBytes > maxOutputBytes) {\n      return yield* new GitCommandError({\n        operation: input.operation,\n        command: quoteGitCommand(input.args),\n        cwd: input.cwd,\n        detail: `${quoteGitCommand(input.args)} output exceeded ${maxOutputBytes} bytes and was truncated.`,\n      });\n    }\n\n    const chunkToDecode =\n      appendTruncationMarker && nextBytes > maxOutputBytes\n        ? chunk.subarray(0, Math.max(0, maxOutputBytes - bytes))\n        : chunk;\n    bytes += chunkToDecode.byteLength;\n    truncated = appendTruncationMarker && nextBytes > maxOutputBytes;\n\n    const decoded = decoder.decode(chunkToDecode, { stream: !truncated });\n    text += decoded;\n    lineBuffer += decoded;\n    yield* emitCompleteLines(false);\n  });\n\n  yield* Stream.runForEach(stream, processChunk).pipe(\n    Effect.mapError(toGitCommandError(input, \"output stream failed.\")),\n  );\n\n  const remainder = truncated ? \"\" : decoder.decode();\n  text += remainder;\n  lineBuffer += remainder;\n  yield* emitCompleteLines(true);\n  return {\n    text,\n    truncated,\n  };\n});\n\nexport const makeGitVcsDriverCore = Effect.fn(\"makeGitVcsDriverCore\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const { worktreesDir } = yield* ServerConfig;\n\n  const executeRaw: GitVcsDriver.GitVcsDriverShape[\"execute\"] = Effect.fnUntraced(\n    function* (input) {\n      const commandInput = {\n        ...input,\n        args: [...input.args],\n      } as const;\n      const timeoutMs = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n      const maxOutputBytes = input.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n      const appendTruncationMarker = input.appendTruncationMarker ?? false;\n\n      const runGitCommand = Effect.fn(\"runGitCommand\")(function* () {\n        const trace2Monitor = yield* createTrace2Monitor(commandInput, input.progress).pipe(\n          Effect.provideService(Path.Path, path),\n          Effect.provideService(FileSystem.FileSystem, fileSystem),\n          Effect.mapError(toGitCommandError(commandInput, \"failed to create trace2 monitor.\")),\n        );\n        const child = yield* commandSpawner\n          .spawn(\n            ChildProcess.make(\"git\", commandInput.args, {\n              cwd: commandInput.cwd,\n              env: {\n                ...process.env,\n                ...input.env,\n                ...trace2Monitor.env,\n              },\n            }),\n          )\n          .pipe(Effect.mapError(toGitCommandError(commandInput, \"failed to spawn.\")));\n\n        const [stdout, stderr, exitCode] = yield* Effect.all(\n          [\n            collectOutput(\n              commandInput,\n              child.stdout,\n              maxOutputBytes,\n              appendTruncationMarker,\n              input.progress?.onStdoutLine,\n            ),\n            collectOutput(\n              commandInput,\n              child.stderr,\n              maxOutputBytes,\n              appendTruncationMarker,\n              input.progress?.onStderrLine,\n            ),\n            child.exitCode.pipe(\n              Effect.mapError(toGitCommandError(commandInput, \"failed to report exit code.\")),\n            ),\n            input.stdin === undefined\n              ? Effect.void\n              : Stream.run(Stream.encodeText(Stream.make(input.stdin)), child.stdin).pipe(\n                  Effect.mapError(toGitCommandError(commandInput, \"failed to write stdin.\")),\n                ),\n          ],\n          { concurrency: \"unbounded\" },\n        ).pipe(Effect.map(([stdout, stderr, exitCode]) => [stdout, stderr, exitCode] as const));\n        yield* trace2Monitor.flush;\n\n        if (!input.allowNonZeroExit && exitCode !== 0) {\n          const trimmedStderr = stderr.text.trim();\n          return yield* new GitCommandError({\n            operation: commandInput.operation,\n            command: quoteGitCommand(commandInput.args),\n            cwd: commandInput.cwd,\n            detail:\n              trimmedStderr.length > 0\n                ? `${quoteGitCommand(commandInput.args)} failed: ${trimmedStderr}`\n                : `${quoteGitCommand(commandInput.args)} failed with code ${exitCode}.`,\n          });\n        }\n\n        return {\n          exitCode,\n          stdout: stdout.text,\n          stderr: stderr.text,\n          stdoutTruncated: stdout.truncated,\n          stderrTruncated: stderr.truncated,\n        } satisfies GitVcsDriver.ExecuteGitResult;\n      });\n\n      return yield* runGitCommand().pipe(\n        Effect.scoped,\n        Effect.timeoutOption(timeoutMs),\n        Effect.flatMap((result) =>\n          Option.match(result, {\n            onNone: () =>\n              Effect.fail(\n                new GitCommandError({\n                  operation: commandInput.operation,\n                  command: quoteGitCommand(commandInput.args),\n                  cwd: commandInput.cwd,\n                  detail: `${quoteGitCommand(commandInput.args)} timed out.`,\n                }),\n              ),\n            onSome: Effect.succeed,\n          }),\n        ),\n      );\n    },\n  );\n\n  const execute: GitVcsDriver.GitVcsDriverShape[\"execute\"] = (input) =>\n    executeRaw(input).pipe(\n      withMetrics({\n        counter: gitCommandsTotal,\n        timer: gitCommandDuration,\n        attributes: {\n          operation: input.operation,\n        },\n      }),\n      Effect.withSpan(input.operation, {\n        kind: \"client\",\n        attributes: {\n          \"git.operation\": input.operation,\n          \"git.cwd\": input.cwd,\n          \"git.args_count\": input.args.length,\n        },\n      }),\n    );\n\n  const executeGit = (\n    operation: string,\n    cwd: string,\n    args: readonly string[],\n    options: ExecuteGitOptions = {},\n  ): Effect.Effect<GitVcsDriver.ExecuteGitResult, GitCommandError> =>\n    execute({\n      operation,\n      cwd,\n      args,\n      ...(options.stdin !== undefined ? { stdin: options.stdin } : {}),\n      ...(options.env !== undefined ? { env: options.env } : {}),\n      allowNonZeroExit: true,\n      ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),\n      ...(options.maxOutputBytes !== undefined ? { maxOutputBytes: options.maxOutputBytes } : {}),\n      ...(options.appendTruncationMarker !== undefined\n        ? { appendTruncationMarker: options.appendTruncationMarker }\n        : {}),\n      ...(options.progress ? { progress: options.progress } : {}),\n    }).pipe(\n      Effect.flatMap((result) => {\n        if (options.allowNonZeroExit || result.exitCode === 0) {\n          return Effect.succeed(result);\n        }\n        const stderr = result.stderr.trim();\n        if (stderr.length > 0) {\n          return Effect.fail(createGitCommandError(operation, cwd, args, stderr));\n        }\n        if (options.fallbackErrorMessage) {\n          return Effect.fail(\n            createGitCommandError(operation, cwd, args, options.fallbackErrorMessage),\n          );\n        }\n        return Effect.fail(\n          createGitCommandError(\n            operation,\n            cwd,\n            args,\n            `${commandLabel(args)} failed: code=${result.exitCode ?? \"null\"}`,\n          ),\n        );\n      }),\n    );\n\n  const runGit = (\n    operation: string,\n    cwd: string,\n    args: readonly string[],\n    allowNonZeroExit = false,\n  ): Effect.Effect<void, GitCommandError> =>\n    executeGit(operation, cwd, args, { allowNonZeroExit }).pipe(Effect.asVoid);\n\n  const runGitStdout = (\n    operation: string,\n    cwd: string,\n    args: readonly string[],\n    allowNonZeroExit = false,\n  ): Effect.Effect<string, GitCommandError> =>\n    executeGit(operation, cwd, args, { allowNonZeroExit }).pipe(\n      Effect.map((result) => result.stdout),\n    );\n\n  const runGitStdoutWithOptions = (\n    operation: string,\n    cwd: string,\n    args: readonly string[],\n    options: ExecuteGitOptions = {},\n  ): Effect.Effect<string, GitCommandError> =>\n    executeGit(operation, cwd, args, options).pipe(\n      Effect.map((result) =>\n        result.stdoutTruncated ? `${result.stdout}${OUTPUT_TRUNCATED_MARKER}` : result.stdout,\n      ),\n    );\n\n  const branchExists = (cwd: string, refName: string): Effect.Effect<boolean, GitCommandError> =>\n    executeGit(\n      \"GitVcsDriver.branchExists\",\n      cwd,\n      [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${refName}`],\n      {\n        allowNonZeroExit: true,\n        timeoutMs: 5_000,\n      },\n    ).pipe(Effect.map((result) => result.exitCode === 0));\n\n  const resolveAvailableBranchName = Effect.fn(\"resolveAvailableBranchName\")(function* (\n    cwd: string,\n    desiredBranch: string,\n  ) {\n    const isDesiredTaken = yield* branchExists(cwd, desiredBranch);\n    if (!isDesiredTaken) {\n      return desiredBranch;\n    }\n\n    for (let suffix = 1; suffix <= 100; suffix += 1) {\n      const candidate = `${desiredBranch}-${suffix}`;\n      const isCandidateTaken = yield* branchExists(cwd, candidate);\n      if (!isCandidateTaken) {\n        return candidate;\n      }\n    }\n\n    return yield* createGitCommandError(\n      \"GitVcsDriver.renameBranch\",\n      cwd,\n      [\"branch\", \"-m\", \"--\", desiredBranch],\n      `Could not find an available branch name for '${desiredBranch}'.`,\n    );\n  });\n\n  const resolveCurrentUpstream = Effect.fn(\"resolveCurrentUpstream\")(function* (cwd: string) {\n    const upstreamRef = yield* runGitStdout(\n      \"GitVcsDriver.resolveCurrentUpstream\",\n      cwd,\n      [\"rev-parse\", \"--abbrev-ref\", \"--symbolic-full-name\", \"@{upstream}\"],\n      true,\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n\n    if (upstreamRef.length === 0 || upstreamRef === \"@{upstream}\") {\n      return null;\n    }\n\n    const remoteNames = yield* runGitStdout(\"GitVcsDriver.listRemoteNames\", cwd, [\"remote\"]).pipe(\n      Effect.map(parseRemoteNames),\n      Effect.catch(() => Effect.succeed<ReadonlyArray<string>>([])),\n    );\n    return (\n      parseUpstreamRefWithRemoteNames(upstreamRef, remoteNames) ??\n      parseUpstreamRefByFirstSeparator(upstreamRef)\n    );\n  });\n\n  const fetchRemoteForStatus = (\n    gitCommonDir: string,\n    remoteName: string,\n  ): Effect.Effect<void, GitCommandError> => {\n    const fetchCwd =\n      path.basename(gitCommonDir) === \".git\" ? path.dirname(gitCommonDir) : gitCommonDir;\n    return executeGit(\n      \"GitVcsDriver.fetchRemoteForStatus\",\n      fetchCwd,\n      [\"--git-dir\", gitCommonDir, \"fetch\", \"--quiet\", \"--no-tags\", remoteName],\n      {\n        allowNonZeroExit: true,\n        env: STATUS_UPSTREAM_REFRESH_ENV,\n        timeoutMs: Duration.toMillis(STATUS_UPSTREAM_REFRESH_TIMEOUT),\n      },\n    ).pipe(Effect.asVoid);\n  };\n\n  const resolveGitCommonDir = Effect.fn(\"resolveGitCommonDir\")(function* (cwd: string) {\n    const gitCommonDir = yield* runGitStdout(\"GitVcsDriver.resolveGitCommonDir\", cwd, [\n      \"rev-parse\",\n      \"--git-common-dir\",\n    ]).pipe(Effect.map((stdout) => stdout.trim()));\n    return path.isAbsolute(gitCommonDir) ? gitCommonDir : path.resolve(cwd, gitCommonDir);\n  });\n\n  const refreshStatusRemoteCacheEntry = Effect.fn(\"refreshStatusRemoteCacheEntry\")(function* (\n    cacheKey: StatusRemoteRefreshCacheKey,\n  ) {\n    yield* fetchRemoteForStatus(cacheKey.gitCommonDir, cacheKey.remoteName);\n    return true as const;\n  });\n\n  const statusRemoteRefreshCache = yield* Cache.makeWith(refreshStatusRemoteCacheEntry, {\n    capacity: STATUS_UPSTREAM_REFRESH_CACHE_CAPACITY,\n    // Keep successful refreshes warm and briefly back off failed refreshes to avoid retry storms.\n    // Pure interrupts are expected cancellation, so do not cache them as failed refreshes.\n    timeToLive: statusUpstreamRefreshCacheTimeToLive,\n  });\n\n  const refreshStatusUpstreamIfStale = Effect.fn(\"refreshStatusUpstreamIfStale\")(function* (\n    cwd: string,\n  ) {\n    const upstream = yield* resolveCurrentUpstream(cwd);\n    if (!upstream) return;\n    const gitCommonDir = yield* resolveGitCommonDir(cwd);\n    yield* Cache.get(\n      statusRemoteRefreshCache,\n      new StatusRemoteRefreshCacheKey({\n        gitCommonDir,\n        remoteName: upstream.remoteName,\n      }),\n    );\n  });\n\n  const resolveDefaultBranchName = (\n    cwd: string,\n    remoteName: string,\n  ): Effect.Effect<string | null, GitCommandError> =>\n    executeGit(\n      \"GitVcsDriver.resolveDefaultBranchName\",\n      cwd,\n      [\"symbolic-ref\", `refs/remotes/${remoteName}/HEAD`],\n      { allowNonZeroExit: true },\n    ).pipe(\n      Effect.map((result) => {\n        if (result.exitCode !== 0) {\n          return null;\n        }\n        return parseDefaultBranchFromRemoteHeadRef(result.stdout, remoteName);\n      }),\n    );\n\n  const remoteBranchExists = (\n    cwd: string,\n    remoteName: string,\n    refName: string,\n  ): Effect.Effect<boolean, GitCommandError> =>\n    executeGit(\n      \"GitVcsDriver.remoteBranchExists\",\n      cwd,\n      [\"show-ref\", \"--verify\", \"--quiet\", `refs/remotes/${remoteName}/${refName}`],\n      {\n        allowNonZeroExit: true,\n      },\n    ).pipe(Effect.map((result) => result.exitCode === 0));\n\n  const originRemoteExists = (cwd: string): Effect.Effect<boolean, GitCommandError> =>\n    executeGit(\"GitVcsDriver.originRemoteExists\", cwd, [\"remote\", \"get-url\", \"origin\"], {\n      allowNonZeroExit: true,\n    }).pipe(Effect.map((result) => result.exitCode === 0));\n\n  const listRemoteNames = (cwd: string): Effect.Effect<ReadonlyArray<string>, GitCommandError> =>\n    runGitStdout(\"GitVcsDriver.listRemoteNames\", cwd, [\"remote\"]).pipe(\n      Effect.map(parseRemoteNamesInGitOrder),\n    );\n\n  const resolvePublishBranchName = Effect.fn(\"resolvePublishBranchName\")(function* (\n    cwd: string,\n    branchName: string,\n  ) {\n    const remoteNames = yield* listRemoteNames(cwd).pipe(Effect.catch(() => Effect.succeed([])));\n    const parsedRemoteRef = parseRemoteRefWithRemoteNames(branchName, remoteNames);\n    return parsedRemoteRef?.branchName ?? branchName;\n  });\n\n  const resolvePrimaryRemoteName = Effect.fn(\"resolvePrimaryRemoteName\")(function* (cwd: string) {\n    if (yield* originRemoteExists(cwd)) {\n      return \"origin\";\n    }\n    const remotes = yield* listRemoteNames(cwd);\n    const [firstRemote] = remotes;\n    if (firstRemote) {\n      return firstRemote;\n    }\n    return yield* createGitCommandError(\n      \"GitVcsDriver.resolvePrimaryRemoteName\",\n      cwd,\n      [\"remote\"],\n      \"No git remote is configured for this repository.\",\n    );\n  });\n\n  const resolvePushRemoteName = Effect.fn(\"resolvePushRemoteName\")(function* (\n    cwd: string,\n    refName: string,\n  ) {\n    const branchPushRemote = yield* runGitStdout(\n      \"GitVcsDriver.resolvePushRemoteName.branchPushRemote\",\n      cwd,\n      [\"config\", \"--get\", `branch.${refName}.pushRemote`],\n      true,\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n    if (branchPushRemote.length > 0) {\n      return branchPushRemote;\n    }\n\n    const pushDefaultRemote = yield* runGitStdout(\n      \"GitVcsDriver.resolvePushRemoteName.remotePushDefault\",\n      cwd,\n      [\"config\", \"--get\", \"remote.pushDefault\"],\n      true,\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n    if (pushDefaultRemote.length > 0) {\n      return pushDefaultRemote;\n    }\n\n    return yield* resolvePrimaryRemoteName(cwd).pipe(Effect.catch(() => Effect.succeed(null)));\n  });\n\n  const ensureRemote: GitVcsDriver.GitVcsDriverShape[\"ensureRemote\"] = Effect.fn(\"ensureRemote\")(\n    function* (input) {\n      const preferredName = sanitizeRemoteName(input.preferredName);\n      const normalizedTargetUrl = normalizeRemoteUrl(input.url);\n      const remoteFetchUrls = yield* runGitStdout(\n        \"GitVcsDriver.ensureRemote.listRemoteUrls\",\n        input.cwd,\n        [\"remote\", \"-v\"],\n      ).pipe(Effect.map((stdout) => parseRemoteFetchUrls(stdout)));\n\n      for (const [remoteName, remoteUrl] of remoteFetchUrls.entries()) {\n        if (normalizeRemoteUrl(remoteUrl) === normalizedTargetUrl) {\n          return remoteName;\n        }\n      }\n\n      let remoteName = preferredName;\n      let suffix = 1;\n      while (remoteFetchUrls.has(remoteName)) {\n        remoteName = `${preferredName}-${suffix}`;\n        suffix += 1;\n      }\n\n      yield* runGit(\"GitVcsDriver.ensureRemote.add\", input.cwd, [\n        \"remote\",\n        \"add\",\n        remoteName,\n        input.url,\n      ]);\n      return remoteName;\n    },\n  );\n\n  const resolveBaseBranchForNoUpstream = Effect.fn(\"resolveBaseBranchForNoUpstream\")(function* (\n    cwd: string,\n    refName: string,\n  ) {\n    const configuredBaseBranch = yield* runGitStdout(\n      \"GitVcsDriver.resolveBaseBranchForNoUpstream.config\",\n      cwd,\n      [\"config\", \"--get\", `branch.${refName}.gh-merge-base`],\n      true,\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n\n    const primaryRemoteName = yield* resolvePrimaryRemoteName(cwd).pipe(\n      Effect.catch(() => Effect.succeed(null)),\n    );\n    const defaultBranch =\n      primaryRemoteName === null ? null : yield* resolveDefaultBranchName(cwd, primaryRemoteName);\n    const candidates = [\n      configuredBaseBranch.length > 0 ? configuredBaseBranch : null,\n      defaultBranch,\n      ...DEFAULT_BASE_BRANCH_CANDIDATES,\n    ];\n\n    for (const candidate of candidates) {\n      if (!candidate) {\n        continue;\n      }\n\n      const remotePrefix =\n        primaryRemoteName && primaryRemoteName !== \"origin\" ? `${primaryRemoteName}/` : null;\n      const normalizedCandidate = candidate.startsWith(\"origin/\")\n        ? candidate.slice(\"origin/\".length)\n        : remotePrefix && candidate.startsWith(remotePrefix)\n          ? candidate.slice(remotePrefix.length)\n          : candidate;\n      if (normalizedCandidate.length === 0 || normalizedCandidate === refName) {\n        continue;\n      }\n\n      if (yield* branchExists(cwd, normalizedCandidate)) {\n        return normalizedCandidate;\n      }\n\n      if (\n        primaryRemoteName &&\n        (yield* remoteBranchExists(cwd, primaryRemoteName, normalizedCandidate))\n      ) {\n        return `${primaryRemoteName}/${normalizedCandidate}`;\n      }\n    }\n\n    return null;\n  });\n\n  const computeAheadCountAgainstBase = Effect.fn(\"computeAheadCountAgainstBase\")(function* (\n    cwd: string,\n    refName: string,\n  ) {\n    const baseRef = yield* resolveBaseBranchForNoUpstream(cwd, refName);\n    if (!baseRef) {\n      return 0;\n    }\n\n    const result = yield* executeGit(\n      \"GitVcsDriver.computeAheadCountAgainstBase\",\n      cwd,\n      [\"rev-list\", \"--count\", `${baseRef}..HEAD`],\n      { allowNonZeroExit: true },\n    );\n    if (result.exitCode !== 0) {\n      return 0;\n    }\n\n    const parsed = Number.parseInt(result.stdout.trim(), 10);\n    return Number.isFinite(parsed) ? Math.max(0, parsed) : 0;\n  });\n\n  const readStatusDetailsRemote = Effect.fn(\"readStatusDetailsRemote\")(function* (cwd: string) {\n    const branchResult = yield* executeGit(\n      \"GitVcsDriver.statusDetailsRemote.branch\",\n      cwd,\n      [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"],\n      { allowNonZeroExit: true },\n    ).pipe(Effect.catchIf(isMissingGitCwdError, () => Effect.succeed(null)));\n\n    if (branchResult === null) {\n      return NON_REPOSITORY_REMOTE_STATUS_DETAILS;\n    }\n    let branch: string | null;\n    if (branchResult.exitCode !== 0) {\n      // rev-parse cannot resolve HEAD before the first commit. A successful\n      // symbolic-ref confirms this is an unborn branch rather than a broken\n      // repository or unrelated command failure.\n      const symbolicBranch = yield* executeGit(\n        \"GitVcsDriver.statusDetailsRemote.unbornBranch\",\n        cwd,\n        [\"symbolic-ref\", \"--quiet\", \"--short\", \"HEAD\"],\n        { allowNonZeroExit: true },\n      );\n      if (symbolicBranch.exitCode !== 0) {\n        const stderr = branchResult.stderr.trim();\n        return yield* createGitCommandError(\n          \"GitVcsDriver.statusDetailsRemote.branch\",\n          cwd,\n          [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"],\n          stderr || \"git branch lookup failed\",\n        );\n      }\n      branch = symbolicBranch.stdout.trim() || null;\n    } else {\n      const branchValue = branchResult.stdout.trim();\n      branch = branchValue.length > 0 && branchValue !== \"HEAD\" ? branchValue : null;\n    }\n    const upstream = yield* resolveCurrentUpstream(cwd);\n    const upstreamRef = upstream?.upstreamRef ?? null;\n    let aheadCount = 0;\n    let behindCount = 0;\n\n    if (upstreamRef) {\n      const divergence = yield* executeGit(\n        \"GitVcsDriver.statusDetailsRemote.divergence\",\n        cwd,\n        [\"rev-list\", \"--left-right\", \"--count\", `HEAD...${upstreamRef}`],\n        { allowNonZeroExit: true },\n      );\n      if (divergence.exitCode === 0) {\n        const [aheadRaw, behindRaw] = divergence.stdout.trim().split(/\\s+/);\n        const parsedAhead = Number.parseInt(aheadRaw ?? \"0\", 10);\n        const parsedBehind = Number.parseInt(behindRaw ?? \"0\", 10);\n        aheadCount = Number.isFinite(parsedAhead) ? Math.max(0, parsedAhead) : 0;\n        behindCount = Number.isFinite(parsedBehind) ? Math.max(0, parsedBehind) : 0;\n      }\n    } else if (branch) {\n      aheadCount = yield* computeAheadCountAgainstBase(cwd, branch).pipe(\n        Effect.orElseSucceed(() => 0),\n      );\n    }\n\n    const defaultBranch = yield* resolveDefaultBranchName(cwd, \"origin\");\n    const isDefaultBranch =\n      branch !== null &&\n      (branch === defaultBranch ||\n        (defaultBranch === null && (branch === \"main\" || branch === \"master\")));\n    const aheadOfDefaultCount =\n      branch && !isDefaultBranch\n        ? upstreamRef === null\n          ? aheadCount\n          : yield* computeAheadCountAgainstBase(cwd, branch).pipe(Effect.orElseSucceed(() => 0))\n        : 0;\n\n    return {\n      isRepo: true,\n      isDefaultBranch,\n      branch,\n      upstreamRef,\n      hasUpstream: upstreamRef !== null,\n      aheadCount,\n      behindCount,\n      aheadOfDefaultCount,\n    };\n  });\n\n  const readBranchRecency = Effect.fn(\"readBranchRecency\")(function* (cwd: string) {\n    const branchRecency = yield* executeGit(\n      \"GitVcsDriver.readBranchRecency\",\n      cwd,\n      [\n        \"for-each-ref\",\n        \"--format=%(refname:short)%09%(committerdate:unix)\",\n        \"refs/heads\",\n        \"refs/remotes\",\n      ],\n      {\n        timeoutMs: 15_000,\n        allowNonZeroExit: true,\n      },\n    );\n\n    const branchLastCommit = new Map<string, number>();\n    if (branchRecency.exitCode !== 0) {\n      return branchLastCommit;\n    }\n\n    for (const line of branchRecency.stdout.split(\"\\n\")) {\n      if (line.length === 0) {\n        continue;\n      }\n      const [name, lastCommitRaw] = line.split(\"\\t\");\n      if (!name) {\n        continue;\n      }\n      const lastCommit = Number.parseInt(lastCommitRaw ?? \"0\", 10);\n      branchLastCommit.set(name, Number.isFinite(lastCommit) ? lastCommit : 0);\n    }\n\n    return branchLastCommit;\n  });\n\n  const readStatusDetailsLocal = Effect.fn(\"readStatusDetailsLocal\")(function* (cwd: string) {\n    const statusResult = yield* executeGit(\n      \"GitVcsDriver.statusDetails.status\",\n      cwd,\n      [\"status\", \"--porcelain=2\", \"--branch\", \"--untracked-files=all\"],\n      {\n        allowNonZeroExit: true,\n      },\n    ).pipe(Effect.catchIf(isMissingGitCwdError, () => Effect.succeed(null)));\n\n    if (statusResult === null) {\n      return NON_REPOSITORY_STATUS_DETAILS;\n    }\n\n    if (statusResult.exitCode !== 0) {\n      const stderr = statusResult.stderr.trim();\n      return yield* createGitCommandError(\n        \"GitVcsDriver.statusDetails.status\",\n        cwd,\n        [\"status\", \"--porcelain=2\", \"--branch\", \"--untracked-files=all\"],\n        stderr || \"git status failed\",\n      );\n    }\n\n    const [unstagedNumstatStdout, stagedNumstatStdout, defaultRefResult, hasPrimaryRemote] =\n      yield* Effect.all(\n        [\n          runGitStdout(\"GitVcsDriver.statusDetails.unstagedNumstat\", cwd, [\"diff\", \"--numstat\"]),\n          runGitStdout(\"GitVcsDriver.statusDetails.stagedNumstat\", cwd, [\n            \"diff\",\n            \"--cached\",\n            \"--numstat\",\n          ]),\n          executeGit(\n            \"GitVcsDriver.statusDetails.defaultRef\",\n            cwd,\n            [\"symbolic-ref\", \"refs/remotes/origin/HEAD\"],\n            {\n              allowNonZeroExit: true,\n            },\n          ),\n          originRemoteExists(cwd).pipe(Effect.catch(() => Effect.succeed(false))),\n        ],\n        { concurrency: \"unbounded\" },\n      );\n    const statusStdout = statusResult.stdout;\n    const defaultBranch =\n      defaultRefResult.exitCode === 0\n        ? defaultRefResult.stdout.trim().replace(/^refs\\/remotes\\/origin\\//, \"\")\n        : null;\n\n    let refName: string | null = null;\n    let upstreamRef: string | null = null;\n    let aheadCount = 0;\n    let behindCount = 0;\n    let aheadOfDefaultCount = 0;\n    let hasWorkingTreeChanges = false;\n    const stagedStatusByPath = new Map<string, VcsWorkingTreeFileStatus>();\n    const unstagedStatusByPath = new Map<string, VcsWorkingTreeFileStatus>();\n\n    for (const line of statusStdout.split(/\\r?\\n/g)) {\n      if (line.startsWith(\"# branch.head \")) {\n        const value = line.slice(\"# branch.head \".length).trim();\n        refName = value.startsWith(\"(\") ? null : value;\n        continue;\n      }\n      if (line.startsWith(\"# branch.upstream \")) {\n        const value = line.slice(\"# branch.upstream \".length).trim();\n        upstreamRef = value.length > 0 ? value : null;\n        continue;\n      }\n      if (line.startsWith(\"# branch.ab \")) {\n        const value = line.slice(\"# branch.ab \".length).trim();\n        const parsed = parseBranchAb(value);\n        aheadCount = parsed.ahead;\n        behindCount = parsed.behind;\n        continue;\n      }\n      if (line.trim().length > 0 && !line.startsWith(\"#\")) {\n        hasWorkingTreeChanges = true;\n        const parsedStatuses = parsePorcelainFileStatuses(line);\n        if (parsedStatuses?.staged) {\n          stagedStatusByPath.set(parsedStatuses.staged.path, parsedStatuses.staged.status);\n        }\n        if (parsedStatuses?.unstaged) {\n          unstagedStatusByPath.set(parsedStatuses.unstaged.path, parsedStatuses.unstaged.status);\n        }\n      }\n    }\n\n    const fallbackAheadCount =\n      !upstreamRef && refName\n        ? yield* computeAheadCountAgainstBase(cwd, refName).pipe(\n            Effect.catch(() => Effect.succeed(0)),\n          )\n        : null;\n\n    if (fallbackAheadCount !== null) {\n      aheadCount = fallbackAheadCount;\n      behindCount = 0;\n    }\n\n    const isDefaultBranch =\n      refName !== null &&\n      (refName === defaultBranch ||\n        (defaultBranch === null && (refName === \"main\" || refName === \"master\")));\n    if (refName && !isDefaultBranch) {\n      aheadOfDefaultCount =\n        fallbackAheadCount !== null\n          ? fallbackAheadCount\n          : yield* computeAheadCountAgainstBase(cwd, refName).pipe(\n              Effect.catch(() => Effect.succeed(0)),\n            );\n    }\n\n    const stagedEntries = parseNumstatEntries(stagedNumstatStdout);\n    const unstagedEntries = parseNumstatEntries(unstagedNumstatStdout);\n    const staged = buildWorkingTreeChangeSet(stagedStatusByPath, stagedEntries);\n    const unstaged = buildWorkingTreeChangeSet(unstagedStatusByPath, unstagedEntries);\n    const combined = mergeWorkingTreeChangeSets(\n      stagedStatusByPath,\n      unstagedStatusByPath,\n      stagedEntries,\n      unstagedEntries,\n    );\n\n    return {\n      isRepo: true,\n      hasOriginRemote: hasPrimaryRemote,\n      isDefaultBranch,\n      branch: refName,\n      upstreamRef,\n      hasWorkingTreeChanges,\n      workingTree: {\n        files: combined.files,\n        insertions: combined.insertions,\n        deletions: combined.deletions,\n        staged,\n        unstaged,\n      },\n      hasUpstream: upstreamRef !== null,\n      aheadCount,\n      behindCount,\n      aheadOfDefaultCount,\n    };\n  });\n\n  const statusDetailsLocal: GitVcsDriver.GitVcsDriverShape[\"statusDetailsLocal\"] = Effect.fn(\n    \"statusDetailsLocal\",\n  )(function* (cwd) {\n    return yield* readStatusDetailsLocal(cwd);\n  });\n\n  const statusDetails: GitVcsDriver.GitVcsDriverShape[\"statusDetails\"] = Effect.fn(\"statusDetails\")(\n    function* (cwd) {\n      yield* refreshStatusUpstreamIfStale(cwd).pipe(\n        Effect.catchIf(isMissingGitCwdError, () => Effect.void),\n        Effect.catchCause(ignoreInterruptOnlyCause),\n        Effect.ignoreCause({ log: true }),\n      );\n      return yield* readStatusDetailsLocal(cwd);\n    },\n  );\n\n  const statusDetailsRemote: GitVcsDriver.GitVcsDriverShape[\"statusDetailsRemote\"] = Effect.fn(\n    \"statusDetailsRemote\",\n  )(function* (cwd) {\n    yield* refreshStatusUpstreamIfStale(cwd).pipe(\n      Effect.catchIf(isMissingGitCwdError, () => Effect.void),\n      Effect.ignoreCause({ log: true }),\n    );\n    return yield* readStatusDetailsRemote(cwd);\n  });\n\n  const status: GitVcsDriver.GitVcsDriverShape[\"status\"] = (input) =>\n    statusDetails(input.cwd).pipe(\n      Effect.map((details) => ({\n        isRepo: details.isRepo,\n        hasPrimaryRemote: details.hasOriginRemote,\n        isDefaultRef: details.isDefaultBranch,\n        refName: details.branch,\n        hasWorkingTreeChanges: details.hasWorkingTreeChanges,\n        workingTree: details.workingTree,\n        hasUpstream: details.hasUpstream,\n        aheadCount: details.aheadCount,\n        behindCount: details.behindCount,\n        aheadOfDefaultCount: details.aheadOfDefaultCount,\n        pr: null,\n      })),\n    );\n\n  const readWorkingTreeDiff: GitVcsDriver.GitVcsDriverShape[\"readWorkingTreeDiff\"] = Effect.fn(\n    \"readWorkingTreeDiff\",\n  )(function* (input) {\n    const commonDiffArgs = [\n      \"--patch\",\n      \"--minimal\",\n      \"--no-color\",\n      \"--no-ext-diff\",\n      \"--no-textconv\",\n      ...(input.ignoreWhitespace ? [\"--ignore-all-space\"] : []),\n    ];\n    const pathspecArgs =\n      input.filePaths && input.filePaths.length > 0 ? [\"--\", ...input.filePaths] : [];\n    const diffOptions = {\n      maxOutputBytes: WORKING_TREE_DIFF_MAX_OUTPUT_BYTES,\n      appendTruncationMarker: true,\n    } satisfies ExecuteGitOptions;\n\n    if (input.target === \"staged\") {\n      const diff = yield* runGitStdoutWithOptions(\n        \"GitVcsDriver.readWorkingTreeDiff.staged\",\n        input.cwd,\n        [\"diff\", \"--cached\", ...commonDiffArgs, ...pathspecArgs],\n        diffOptions,\n      );\n      return { diff };\n    }\n\n    const realIndexPathRaw = yield* runGitStdout(\n      \"GitVcsDriver.readWorkingTreeDiff.resolveIndex\",\n      input.cwd,\n      [\"rev-parse\", \"--git-path\", \"index\"],\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n    const realIndexPath = path.isAbsolute(realIndexPathRaw)\n      ? realIndexPathRaw\n      : path.resolve(input.cwd, realIndexPathRaw);\n    const tempIndexPath = path.join(\n      path.dirname(realIndexPath),\n      `salchi-working-tree-diff-index-${randomUUID()}`,\n    );\n    const tempIndexEnv: NodeJS.ProcessEnv = {\n      GIT_INDEX_FILE: tempIndexPath,\n    };\n    const cleanupTempIndex = Effect.all(\n      [\n        fileSystem.remove(tempIndexPath, { force: true }),\n        fileSystem.remove(`${tempIndexPath}.lock`, { force: true }),\n      ],\n      { discard: true },\n    ).pipe(Effect.ignore);\n\n    const copyCurrentIndex = Effect.gen(function* () {\n      const indexExists = yield* fileSystem\n        .exists(realIndexPath)\n        .pipe(Effect.orElseSucceed(() => false));\n      if (!indexExists) {\n        return;\n      }\n      yield* fileSystem\n        .copyFile(realIndexPath, tempIndexPath)\n        .pipe(\n          Effect.mapError((cause) =>\n            createGitCommandError(\n              \"GitVcsDriver.readWorkingTreeDiff.copyIndex\",\n              input.cwd,\n              [\"rev-parse\", \"--git-path\", \"index\"],\n              \"Failed to copy git index for working tree diff.\",\n              cause,\n            ),\n          ),\n        );\n    });\n\n    const readUntrackedPaths = executeGit(\n      \"GitVcsDriver.readWorkingTreeDiff.untracked\",\n      input.cwd,\n      [\"ls-files\", \"--others\", \"--exclude-standard\", \"-z\"],\n      {\n        allowNonZeroExit: false,\n        maxOutputBytes: WORKING_TREE_DIFF_MAX_OUTPUT_BYTES,\n      },\n    ).pipe(Effect.map((result) => splitNullSeparatedPaths(result.stdout, result.stdoutTruncated)));\n\n    const shouldIncludeUntrackedPath = (untrackedPath: string) => {\n      if (!input.filePaths || input.filePaths.length === 0) {\n        return true;\n      }\n      return input.filePaths.some((filePath) => {\n        const normalizedFilePath = filePath.replace(/\\/+$/g, \"\");\n        return (\n          untrackedPath === normalizedFilePath || untrackedPath.startsWith(`${normalizedFilePath}/`)\n        );\n      });\n    };\n\n    const addUntrackedIntentToAdd = (untrackedPaths: ReadonlyArray<string>) =>\n      Effect.forEach(\n        chunkPathsForGitArgs(untrackedPaths),\n        (chunk) =>\n          executeGit(\n            \"GitVcsDriver.readWorkingTreeDiff.intentToAdd\",\n            input.cwd,\n            [\"add\", \"--intent-to-add\", \"--\", ...chunk],\n            { env: tempIndexEnv },\n          ).pipe(Effect.asVoid),\n        { discard: true },\n      );\n\n    const resolveAllDiffBaseRef = Effect.fn(\"GitVcsDriver.readWorkingTreeDiff.resolveAllBase\")(\n      function* () {\n        const result = yield* executeGit(\n          \"GitVcsDriver.readWorkingTreeDiff.resolveHead\",\n          input.cwd,\n          [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD^{commit}\"],\n          {\n            allowNonZeroExit: true,\n            maxOutputBytes: 4_096,\n          },\n        );\n        const headCommit = result.stdout.trim();\n        return result.exitCode === 0 && headCommit.length > 0\n          ? headCommit\n          : GIT_EMPTY_TREE_OBJECT_ID;\n      },\n    );\n\n    const program = Effect.gen(function* () {\n      yield* copyCurrentIndex;\n      const untrackedPaths = (yield* readUntrackedPaths).filter(shouldIncludeUntrackedPath);\n      if (untrackedPaths.length > 0) {\n        yield* addUntrackedIntentToAdd(untrackedPaths);\n      }\n      const allDiffBaseRef = input.target === \"all\" ? yield* resolveAllDiffBaseRef() : null;\n      const diffArgs =\n        allDiffBaseRef !== null\n          ? [\"diff\", ...commonDiffArgs, allDiffBaseRef, ...pathspecArgs]\n          : [\"diff\", ...commonDiffArgs, ...pathspecArgs];\n      const diff = yield* runGitStdoutWithOptions(\n        input.target === \"all\"\n          ? \"GitVcsDriver.readWorkingTreeDiff.all\"\n          : \"GitVcsDriver.readWorkingTreeDiff.unstaged\",\n        input.cwd,\n        diffArgs,\n        {\n          ...diffOptions,\n          env: tempIndexEnv,\n        },\n      );\n      return { diff };\n    });\n\n    return yield* program.pipe(Effect.ensuring(cleanupTempIndex));\n  });\n\n  const stageFiles: GitVcsDriver.GitVcsDriverShape[\"stageFiles\"] = Effect.fn(\"stageFiles\")(\n    function* (input) {\n      yield* Effect.forEach(\n        chunkPathsForGitArgs(input.filePaths),\n        (chunk) => runGit(\"GitVcsDriver.stageFiles.add\", input.cwd, [\"add\", \"-A\", \"--\", ...chunk]),\n        { discard: true },\n      );\n    },\n  );\n\n  const hasHeadCommit = Effect.fn(\"GitVcsDriver.hasHeadCommit\")(function* (cwd: string) {\n    const result = yield* executeGit(\n      \"GitVcsDriver.hasHeadCommit\",\n      cwd,\n      [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD^{commit}\"],\n      { allowNonZeroExit: true, maxOutputBytes: 4_096 },\n    );\n    return result.exitCode === 0 && result.stdout.trim().length > 0;\n  });\n\n  const unstageFiles: GitVcsDriver.GitVcsDriverShape[\"unstageFiles\"] = Effect.fn(\"unstageFiles\")(\n    function* (input) {\n      const headExists = yield* hasHeadCommit(input.cwd);\n      yield* Effect.forEach(\n        chunkPathsForGitArgs(input.filePaths),\n        (chunk) =>\n          headExists\n            ? runGit(\"GitVcsDriver.unstageFiles.reset\", input.cwd, [\"reset\", \"-q\", \"--\", ...chunk])\n            : runGit(\"GitVcsDriver.unstageFiles.rmCached\", input.cwd, [\n                \"rm\",\n                \"--cached\",\n                \"-r\",\n                \"--ignore-unmatch\",\n                \"--\",\n                ...chunk,\n              ]),\n        { discard: true },\n      );\n    },\n  );\n\n  const resolveRequestedUnstagedFiles = Effect.fn(\"resolveRequestedUnstagedFiles\")(function* (\n    cwd: string,\n    requestedPaths: ReadonlyArray<string>,\n  ) {\n    const status = yield* statusDetailsLocal(cwd);\n    const seenPaths = new Set<string>();\n    const matchedFiles: WorkingTreeFile[] = [];\n    for (const file of status.workingTree.unstaged.files) {\n      if (\n        !requestedPaths.some((requestedPath) =>\n          gitStatusPathMatchesRequest(file.path, requestedPath),\n        )\n      ) {\n        continue;\n      }\n      const normalizedPath = normalizeGitStatusPath(file.path);\n      if (seenPaths.has(normalizedPath)) {\n        continue;\n      }\n      seenPaths.add(normalizedPath);\n      matchedFiles.push(file);\n    }\n    return matchedFiles;\n  });\n\n  const revertUnstagedFiles: GitVcsDriver.GitVcsDriverShape[\"revertUnstagedFiles\"] = Effect.fn(\n    \"revertUnstagedFiles\",\n  )(function* (input) {\n    const files = yield* resolveRequestedUnstagedFiles(input.cwd, input.filePaths);\n    const trackedPaths = files\n      .filter((file) => file.status !== \"untracked\")\n      .map((file) => file.path);\n    const untrackedPaths = files\n      .filter((file) => file.status === \"untracked\")\n      .map((file) => file.path);\n\n    yield* Effect.forEach(\n      chunkPathsForGitArgs(trackedPaths),\n      (chunk) =>\n        runGit(\"GitVcsDriver.revertUnstagedFiles.restore\", input.cwd, [\n          \"restore\",\n          \"--worktree\",\n          \"--\",\n          ...chunk,\n        ]),\n      { discard: true },\n    );\n    yield* Effect.forEach(\n      chunkPathsForGitArgs(untrackedPaths),\n      (chunk) =>\n        runGit(\"GitVcsDriver.revertUnstagedFiles.clean\", input.cwd, [\n          \"clean\",\n          \"-fd\",\n          \"--\",\n          ...chunk,\n        ]),\n      { discard: true },\n    );\n  });\n\n  const readStagedCommitContext: GitVcsDriver.GitVcsDriverShape[\"readStagedCommitContext\"] =\n    Effect.fn(\"readStagedCommitContext\")(function* (cwd) {\n      const stagedSummary = yield* runGitStdout(\n        \"GitVcsDriver.readStagedCommitContext.stagedSummary\",\n        cwd,\n        [\"diff\", \"--cached\", \"--name-status\"],\n      ).pipe(Effect.map((stdout) => stdout.trim()));\n      if (stagedSummary.length === 0) {\n        return null;\n      }\n\n      const stagedPatch = yield* runGitStdoutWithOptions(\n        \"GitVcsDriver.readStagedCommitContext.stagedPatch\",\n        cwd,\n        [\"diff\", \"--no-ext-diff\", \"--cached\", \"--patch\", \"--minimal\"],\n        {\n          maxOutputBytes: PREPARED_COMMIT_PATCH_MAX_OUTPUT_BYTES,\n          appendTruncationMarker: true,\n        },\n      );\n\n      return {\n        stagedSummary,\n        stagedPatch,\n      };\n    });\n\n  const readCommitPreviewContext: GitVcsDriver.GitVcsDriverShape[\"readCommitPreviewContext\"] =\n    Effect.fn(\"readCommitPreviewContext\")(function* (cwd) {\n      const stagedContext = yield* readStagedCommitContext(cwd);\n      if (stagedContext) {\n        return stagedContext;\n      }\n\n      const details = yield* readStatusDetailsLocal(cwd);\n      if (!details.hasWorkingTreeChanges || details.workingTree.files.length === 0) {\n        return null;\n      }\n\n      const stagedSummary = details.workingTree.files\n        .map((file) => `${statusToNameStatus(file.status)}\\t${file.path}`)\n        .join(\"\\n\");\n      const { diff: stagedPatch } = yield* readWorkingTreeDiff({\n        cwd,\n        target: \"all\",\n        ignoreWhitespace: false,\n      });\n\n      return {\n        stagedSummary,\n        stagedPatch,\n      };\n    });\n\n  const prepareCommitContext: GitVcsDriver.GitVcsDriverShape[\"prepareCommitContext\"] = Effect.fn(\n    \"prepareCommitContext\",\n  )(function* (cwd, filePaths) {\n    if (filePaths && filePaths.length > 0) {\n      yield* runGit(\"GitVcsDriver.prepareCommitContext.reset\", cwd, [\"reset\"]).pipe(\n        Effect.catch(() => Effect.void),\n      );\n      yield* runGit(\"GitVcsDriver.prepareCommitContext.addSelected\", cwd, [\n        \"add\",\n        \"-A\",\n        \"--\",\n        ...filePaths,\n      ]);\n    } else {\n      const stagedContext = yield* readStagedCommitContext(cwd);\n      if (stagedContext) {\n        return stagedContext;\n      }\n      yield* runGit(\"GitVcsDriver.prepareCommitContext.addAll\", cwd, [\"add\", \"-A\"]);\n    }\n\n    return yield* readStagedCommitContext(cwd);\n  });\n\n  const commit: GitVcsDriver.GitVcsDriverShape[\"commit\"] = Effect.fn(\"commit\")(function* (\n    cwd,\n    subject,\n    body,\n    options?: GitVcsDriver.GitCommitOptions,\n  ) {\n    const args = [\"commit\", \"-m\", subject];\n    const trimmedBody = body.trim();\n    if (trimmedBody.length > 0) {\n      args.push(\"-m\", trimmedBody);\n    }\n    const progress =\n      options?.progress?.onOutputLine === undefined\n        ? options?.progress\n        : {\n            ...options.progress,\n            onStdoutLine: (line: string) =>\n              options.progress?.onOutputLine?.({ stream: \"stdout\", text: line }) ?? Effect.void,\n            onStderrLine: (line: string) =>\n              options.progress?.onOutputLine?.({ stream: \"stderr\", text: line }) ?? Effect.void,\n          };\n    yield* executeGit(\"GitVcsDriver.commit.commit\", cwd, args, {\n      ...(options?.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),\n      ...(progress ? { progress } : {}),\n    }).pipe(Effect.asVoid);\n    const commitSha = yield* runGitStdout(\"GitVcsDriver.commit.revParseHead\", cwd, [\n      \"rev-parse\",\n      \"HEAD\",\n    ]).pipe(Effect.map((stdout) => stdout.trim()));\n\n    return { commitSha };\n  });\n\n  const pushCurrentBranch: GitVcsDriver.GitVcsDriverShape[\"pushCurrentBranch\"] = Effect.fn(\n    \"pushCurrentBranch\",\n  )(function* (cwd, fallbackBranch, options) {\n    const runPush = (\n      operation: string,\n      args: readonly string[],\n    ): Effect.Effect<void, GitCommandError> =>\n      executeGit(operation, cwd, args, { env: NON_INTERACTIVE_GIT_AUTH_ENV }).pipe(Effect.asVoid);\n\n    const details = yield* statusDetails(cwd);\n    const branch = details.branch ?? fallbackBranch;\n    if (!branch) {\n      return yield* createGitCommandError(\n        \"GitVcsDriver.pushCurrentBranch\",\n        cwd,\n        [\"push\"],\n        \"Cannot push from detached HEAD.\",\n      );\n    }\n\n    const requestedRemoteName = options?.remoteName?.trim() || null;\n    if (requestedRemoteName) {\n      const publishBranch = yield* resolvePublishBranchName(cwd, branch);\n      yield* runPush(\"GitVcsDriver.pushCurrentBranch.pushWithRequestedRemote\", [\n        \"push\",\n        \"-u\",\n        requestedRemoteName,\n        `HEAD:refs/heads/${publishBranch}`,\n      ]);\n      return {\n        status: \"pushed\" as const,\n        branch,\n        upstreamBranch: `${requestedRemoteName}/${publishBranch}`,\n        setUpstream: true,\n      };\n    }\n\n    const hasNoLocalDelta = details.aheadCount === 0 && details.behindCount === 0;\n    if (hasNoLocalDelta) {\n      if (details.hasUpstream) {\n        return {\n          status: \"skipped_up_to_date\" as const,\n          branch,\n          ...(details.upstreamRef ? { upstreamBranch: details.upstreamRef } : {}),\n        };\n      }\n\n      const comparableBaseBranch = yield* resolveBaseBranchForNoUpstream(cwd, branch).pipe(\n        Effect.catch(() => Effect.succeed(null)),\n      );\n      if (comparableBaseBranch) {\n        const publishRemoteName = yield* resolvePushRemoteName(cwd, branch).pipe(\n          Effect.catch(() => Effect.succeed(null)),\n        );\n        if (!publishRemoteName) {\n          return {\n            status: \"skipped_up_to_date\" as const,\n            branch,\n          };\n        }\n\n        const hasRemoteBranch = yield* remoteBranchExists(cwd, publishRemoteName, branch).pipe(\n          Effect.catch(() => Effect.succeed(false)),\n        );\n        if (hasRemoteBranch) {\n          return {\n            status: \"skipped_up_to_date\" as const,\n            branch,\n          };\n        }\n      }\n    }\n\n    if (!details.hasUpstream) {\n      const publishRemoteName = yield* resolvePushRemoteName(cwd, branch);\n      if (!publishRemoteName) {\n        return yield* createGitCommandError(\n          \"GitVcsDriver.pushCurrentBranch\",\n          cwd,\n          [\"push\"],\n          \"Cannot push because no git remote is configured for this repository.\",\n        );\n      }\n      const publishBranch = yield* resolvePublishBranchName(cwd, branch);\n      yield* runPush(\"GitVcsDriver.pushCurrentBranch.pushWithUpstream\", [\n        \"push\",\n        \"-u\",\n        publishRemoteName,\n        `HEAD:refs/heads/${publishBranch}`,\n      ]);\n      return {\n        status: \"pushed\" as const,\n        branch,\n        upstreamBranch: `${publishRemoteName}/${publishBranch}`,\n        setUpstream: true,\n      };\n    }\n\n    const currentUpstream = yield* resolveCurrentUpstream(cwd).pipe(\n      Effect.catch(() => Effect.succeed(null)),\n    );\n    if (currentUpstream) {\n      yield* runPush(\"GitVcsDriver.pushCurrentBranch.pushUpstream\", [\n        \"push\",\n        currentUpstream.remoteName,\n        `HEAD:refs/heads/${currentUpstream.branchName}`,\n      ]);\n      return {\n        status: \"pushed\" as const,\n        branch,\n        upstreamBranch: currentUpstream.upstreamRef,\n        setUpstream: false,\n      };\n    }\n\n    yield* runPush(\"GitVcsDriver.pushCurrentBranch.push\", [\"push\"]);\n    return {\n      status: \"pushed\" as const,\n      branch,\n      ...(details.upstreamRef ? { upstreamBranch: details.upstreamRef } : {}),\n      setUpstream: false,\n    };\n  });\n\n  const pullCurrentBranch: GitVcsDriver.GitVcsDriverShape[\"pullCurrentBranch\"] = Effect.fn(\n    \"pullCurrentBranch\",\n  )(function* (cwd) {\n    const details = yield* statusDetails(cwd);\n    const refName = details.branch;\n    if (!refName) {\n      return yield* createGitCommandError(\n        \"GitVcsDriver.pullCurrentBranch\",\n        cwd,\n        [\"pull\", \"--ff-only\"],\n        \"Cannot pull from detached HEAD.\",\n      );\n    }\n    if (!details.hasUpstream) {\n      return yield* createGitCommandError(\n        \"GitVcsDriver.pullCurrentBranch\",\n        cwd,\n        [\"pull\", \"--ff-only\"],\n        \"Current branch has no upstream configured. Push with upstream first.\",\n      );\n    }\n    const beforeSha = yield* runGitStdout(\n      \"GitVcsDriver.pullCurrentBranch.beforeSha\",\n      cwd,\n      [\"rev-parse\", \"HEAD\"],\n      true,\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n    yield* executeGit(\"GitVcsDriver.pullCurrentBranch.pull\", cwd, [\"pull\", \"--ff-only\"], {\n      timeoutMs: 30_000,\n      fallbackErrorMessage: \"git pull failed\",\n    });\n    const afterSha = yield* runGitStdout(\n      \"GitVcsDriver.pullCurrentBranch.afterSha\",\n      cwd,\n      [\"rev-parse\", \"HEAD\"],\n      true,\n    ).pipe(Effect.map((stdout) => stdout.trim()));\n\n    const refreshed = yield* statusDetails(cwd);\n    return {\n      status: beforeSha.length > 0 && beforeSha === afterSha ? \"skipped_up_to_date\" : \"pulled\",\n      refName,\n      upstreamRef: refreshed.upstreamRef,\n    };\n  });\n\n  const readRangeContext: GitVcsDriver.GitVcsDriverShape[\"readRangeContext\"] = Effect.fn(\n    \"readRangeContext\",\n  )(function* (cwd, baseRef) {\n    const range = `${baseRef}..HEAD`;\n    const [commitSummary, diffSummary, diffPatch] = yield* Effect.all(\n      [\n        runGitStdoutWithOptions(\n          \"GitVcsDriver.readRangeContext.log\",\n          cwd,\n          [\"log\", \"--oneline\", range],\n          {\n            maxOutputBytes: RANGE_COMMIT_SUMMARY_MAX_OUTPUT_BYTES,\n            appendTruncationMarker: true,\n          },\n        ),\n        runGitStdoutWithOptions(\n          \"GitVcsDriver.readRangeContext.diffStat\",\n          cwd,\n          [\"diff\", \"--stat\", range],\n          {\n            maxOutputBytes: RANGE_DIFF_SUMMARY_MAX_OUTPUT_BYTES,\n            appendTruncationMarker: true,\n          },\n        ),\n        runGitStdoutWithOptions(\n          \"GitVcsDriver.readRangeContext.diffPatch\",\n          cwd,\n          [\"diff\", \"--no-ext-diff\", \"--patch\", \"--minimal\", range],\n          {\n            maxOutputBytes: RANGE_DIFF_PATCH_MAX_OUTPUT_BYTES,\n            appendTruncationMarker: true,\n          },\n        ),\n      ],\n      { concurrency: \"unbounded\" },\n    );\n\n    return {\n      commitSummary,\n      diffSummary,\n      diffPatch,\n    };\n  });\n\n  const readConfigValue: GitVcsDriver.GitVcsDriverShape[\"readConfigValue\"] = (cwd, key) =>\n    runGitStdout(\"GitVcsDriver.readConfigValue\", cwd, [\"config\", \"--get\", key], true).pipe(\n      Effect.map((stdout) => stdout.trim()),\n      Effect.map((trimmed) => (trimmed.length > 0 ? trimmed : null)),\n    );\n\n  const listRefs: GitVcsDriver.GitVcsDriverShape[\"listRefs\"] = Effect.fn(\"listRefs\")(\n    function* (input) {\n      const branchRecencyPromise = readBranchRecency(input.cwd).pipe(\n        Effect.catch(() => Effect.succeed(new Map<string, number>())),\n      );\n      const localBranchResult = yield* executeGit(\n        \"GitVcsDriver.listRefs.branchNoColor\",\n        input.cwd,\n        [\"branch\", \"--no-color\", \"--no-column\"],\n        {\n          timeoutMs: 10_000,\n          allowNonZeroExit: true,\n        },\n      ).pipe(\n        Effect.catchIf(isMissingGitCwdError, () =>\n          Effect.succeed({\n            exitCode: ChildProcessSpawner.ExitCode(128),\n            stdout: \"\",\n            stderr: \"fatal: not a git repository\",\n            stdoutTruncated: false,\n            stderrTruncated: false,\n          }),\n        ),\n      );\n\n      if (localBranchResult.exitCode !== 0) {\n        const stderr = localBranchResult.stderr.trim();\n        if (stderr.toLowerCase().includes(\"not a git repository\")) {\n          return {\n            refs: [],\n            isRepo: false,\n            hasPrimaryRemote: false,\n            nextCursor: null,\n            totalCount: 0,\n          };\n        }\n        return yield* createGitCommandError(\n          \"GitVcsDriver.listRefs\",\n          input.cwd,\n          [\"branch\", \"--no-color\", \"--no-column\"],\n          stderr || \"git branch failed\",\n        );\n      }\n\n      const remoteBranchResultEffect = executeGit(\n        \"GitVcsDriver.listRefs.remoteBranches\",\n        input.cwd,\n        [\"branch\", \"--no-color\", \"--no-column\", \"--remotes\"],\n        {\n          timeoutMs: 10_000,\n          allowNonZeroExit: true,\n        },\n      ).pipe(\n        Effect.catch((error) =>\n          Effect.logWarning(\n            `GitVcsDriver.listRefs: remote refName lookup failed for ${input.cwd}: ${error.message}. Falling back to an empty remote refName list.`,\n          ).pipe(\n            Effect.as({\n              exitCode: ChildProcessSpawner.ExitCode(1),\n              stdout: \"\",\n              stderr: \"\",\n              stdoutTruncated: false,\n              stderrTruncated: false,\n            } satisfies GitVcsDriver.ExecuteGitResult),\n          ),\n        ),\n      );\n\n      const remoteNamesResultEffect = executeGit(\n        \"GitVcsDriver.listRefs.remoteNames\",\n        input.cwd,\n        [\"remote\"],\n        {\n          timeoutMs: 5_000,\n          allowNonZeroExit: true,\n        },\n      ).pipe(\n        Effect.catch((error) =>\n          Effect.logWarning(\n            `GitVcsDriver.listRefs: remote name lookup failed for ${input.cwd}: ${error.message}. Falling back to an empty remote name list.`,\n          ).pipe(\n            Effect.as({\n              exitCode: ChildProcessSpawner.ExitCode(1),\n              stdout: \"\",\n              stderr: \"\",\n              stdoutTruncated: false,\n              stderrTruncated: false,\n            } satisfies GitVcsDriver.ExecuteGitResult),\n          ),\n        ),\n      );\n\n      const [defaultRef, worktreeList, remoteBranchResult, remoteNamesResult, branchLastCommit] =\n        yield* Effect.all(\n          [\n            executeGit(\n              \"GitVcsDriver.listRefs.defaultRef\",\n              input.cwd,\n              [\"symbolic-ref\", \"refs/remotes/origin/HEAD\"],\n              {\n                timeoutMs: 5_000,\n                allowNonZeroExit: true,\n              },\n            ),\n            executeGit(\n              \"GitVcsDriver.listRefs.worktreeList\",\n              input.cwd,\n              [\"worktree\", \"list\", \"--porcelain\"],\n              {\n                timeoutMs: 5_000,\n                allowNonZeroExit: true,\n              },\n            ),\n            remoteBranchResultEffect,\n            remoteNamesResultEffect,\n            branchRecencyPromise,\n          ],\n          { concurrency: \"unbounded\" },\n        );\n\n      const remoteNames =\n        remoteNamesResult.exitCode === 0 ? parseRemoteNames(remoteNamesResult.stdout) : [];\n      if (remoteBranchResult.exitCode !== 0 && remoteBranchResult.stderr.trim().length > 0) {\n        yield* Effect.logWarning(\n          `GitVcsDriver.listRefs: remote refName lookup returned code ${remoteBranchResult.exitCode} for ${input.cwd}: ${remoteBranchResult.stderr.trim()}. Falling back to an empty remote refName list.`,\n        );\n      }\n      if (remoteNamesResult.exitCode !== 0 && remoteNamesResult.stderr.trim().length > 0) {\n        yield* Effect.logWarning(\n          `GitVcsDriver.listRefs: remote name lookup returned code ${remoteNamesResult.exitCode} for ${input.cwd}: ${remoteNamesResult.stderr.trim()}. Falling back to an empty remote name list.`,\n        );\n      }\n\n      const defaultBranch =\n        defaultRef.exitCode === 0\n          ? defaultRef.stdout.trim().replace(/^refs\\/remotes\\/origin\\//, \"\")\n          : null;\n\n      const worktreeMap = new Map<string, string>();\n      if (worktreeList.exitCode === 0) {\n        let currentPath: string | null = null;\n        for (const line of worktreeList.stdout.split(\"\\n\")) {\n          if (line.startsWith(\"worktree \")) {\n            const candidatePath = line.slice(\"worktree \".length);\n            const exists = yield* fileSystem.stat(candidatePath).pipe(\n              Effect.map(() => true),\n              Effect.catch(() => Effect.succeed(false)),\n            );\n            currentPath = exists ? candidatePath : null;\n          } else if (line.startsWith(\"branch refs/heads/\") && currentPath) {\n            worktreeMap.set(line.slice(\"branch refs/heads/\".length), currentPath);\n          } else if (line === \"\") {\n            currentPath = null;\n          }\n        }\n      }\n\n      const localBranches = Arr.filterMap(localBranchResult.stdout.split(\"\\n\"), (line) => {\n        const refName = parseBranchLine(line);\n        return refName === null\n          ? Result.failVoid\n          : Result.succeed({\n              name: refName.name,\n              current: refName.current,\n              isRemote: false,\n              isDefault: refName.name === defaultBranch,\n              worktreePath: worktreeMap.get(refName.name) ?? null,\n            });\n      }).toSorted((a, b) => {\n        const aPriority = a.current ? 0 : a.isDefault ? 1 : 2;\n        const bPriority = b.current ? 0 : b.isDefault ? 1 : 2;\n        if (aPriority !== bPriority) return aPriority - bPriority;\n\n        const aLastCommit = branchLastCommit.get(a.name) ?? 0;\n        const bLastCommit = branchLastCommit.get(b.name) ?? 0;\n        if (aLastCommit !== bLastCommit) return bLastCommit - aLastCommit;\n        return a.name.localeCompare(b.name);\n      });\n\n      const remoteBranches =\n        remoteBranchResult.exitCode === 0\n          ? Arr.filterMap(remoteBranchResult.stdout.split(\"\\n\"), (line) => {\n              const refName = parseBranchLine(line);\n              if (refName === null) {\n                return Result.failVoid;\n              }\n              const parsedRemoteRef = parseRemoteRefWithRemoteNames(refName.name, remoteNames);\n              const remoteBranch: {\n                name: string;\n                current: boolean;\n                isRemote: boolean;\n                remoteName?: string;\n                isDefault: boolean;\n                worktreePath: string | null;\n              } = {\n                name: refName.name,\n                current: false,\n                isRemote: true,\n                isDefault: false,\n                worktreePath: null,\n              };\n              if (parsedRemoteRef) {\n                remoteBranch.remoteName = parsedRemoteRef.remoteName;\n              }\n              return Result.succeed(remoteBranch);\n            }).toSorted((a, b) => {\n              const aLastCommit = branchLastCommit.get(a.name) ?? 0;\n              const bLastCommit = branchLastCommit.get(b.name) ?? 0;\n              if (aLastCommit !== bLastCommit) return bLastCommit - aLastCommit;\n              return a.name.localeCompare(b.name);\n            })\n          : [];\n\n      const refs = paginateBranches({\n        refs: filterBranchesForListQuery(\n          dedupeRemoteBranchesWithLocalMatches([...localBranches, ...remoteBranches]),\n          input.query,\n        ),\n        cursor: input.cursor,\n        limit: input.limit,\n      });\n\n      return {\n        refs: [...refs.refs],\n        isRepo: true,\n        hasPrimaryRemote: remoteNames.includes(\"origin\"),\n        nextCursor: refs.nextCursor,\n        totalCount: refs.totalCount,\n      };\n    },\n  );\n\n  const createWorktree: GitVcsDriver.GitVcsDriverShape[\"createWorktree\"] = Effect.fn(\n    \"createWorktree\",\n  )(function* (input) {\n    const targetBranch = input.newRefName ?? input.refName;\n    const sanitizedBranch = targetBranch.replace(/\\//g, \"-\");\n    const repoName = path.basename(input.cwd);\n    const worktreePath = input.path ?? path.join(worktreesDir, repoName, sanitizedBranch);\n    const args = input.newRefName\n      ? [\"worktree\", \"add\", \"-b\", input.newRefName, worktreePath, input.refName]\n      : [\"worktree\", \"add\", worktreePath, input.refName];\n\n    yield* executeGit(\"GitVcsDriver.createWorktree\", input.cwd, args, {\n      fallbackErrorMessage: \"git worktree add failed\",\n    });\n\n    return {\n      worktree: {\n        path: worktreePath,\n        refName: targetBranch,\n      },\n    };\n  });\n\n  const fetchPullRequestBranch: GitVcsDriver.GitVcsDriverShape[\"fetchPullRequestBranch\"] =\n    Effect.fn(\"fetchPullRequestBranch\")(function* (input) {\n      const remoteName = yield* resolvePrimaryRemoteName(input.cwd);\n      yield* executeGit(\n        \"GitVcsDriver.fetchPullRequestBranch\",\n        input.cwd,\n        [\n          \"fetch\",\n          \"--quiet\",\n          \"--no-tags\",\n          remoteName,\n          `+refs/pull/${input.prNumber}/head:refs/heads/${input.branch}`,\n        ],\n        {\n          fallbackErrorMessage: \"git fetch pull request branch failed\",\n        },\n      );\n    });\n\n  const fetchRemoteBranch: GitVcsDriver.GitVcsDriverShape[\"fetchRemoteBranch\"] = Effect.fn(\n    \"fetchRemoteBranch\",\n  )(function* (input) {\n    yield* runGit(\"GitVcsDriver.fetchRemoteBranch.fetch\", input.cwd, [\n      \"fetch\",\n      \"--quiet\",\n      \"--no-tags\",\n      input.remoteName,\n      `+refs/heads/${input.remoteBranch}:refs/remotes/${input.remoteName}/${input.remoteBranch}`,\n    ]);\n\n    const localBranchAlreadyExists = yield* branchExists(input.cwd, input.localBranch);\n    const targetRef = `${input.remoteName}/${input.remoteBranch}`;\n    yield* runGit(\n      \"GitVcsDriver.fetchRemoteBranch.materialize\",\n      input.cwd,\n      localBranchAlreadyExists\n        ? [\"branch\", \"--force\", input.localBranch, targetRef]\n        : [\"branch\", input.localBranch, targetRef],\n    );\n  });\n\n  const fetchRemoteTrackingBranch: GitVcsDriver.GitVcsDriverShape[\"fetchRemoteTrackingBranch\"] =\n    Effect.fn(\"fetchRemoteTrackingBranch\")(function* (input) {\n      yield* runGit(\"GitVcsDriver.fetchRemoteTrackingBranch\", input.cwd, [\n        \"fetch\",\n        \"--quiet\",\n        \"--no-tags\",\n        input.remoteName,\n        `+refs/heads/${input.remoteBranch}:refs/remotes/${input.remoteName}/${input.remoteBranch}`,\n      ]);\n    });\n\n  const setBranchUpstream: GitVcsDriver.GitVcsDriverShape[\"setBranchUpstream\"] = (input) =>\n    runGit(\"GitVcsDriver.setBranchUpstream\", input.cwd, [\n      \"branch\",\n      \"--set-upstream-to\",\n      `${input.remoteName}/${input.remoteBranch}`,\n      input.branch,\n    ]);\n\n  const removeWorktree: GitVcsDriver.GitVcsDriverShape[\"removeWorktree\"] = Effect.fn(\n    \"removeWorktree\",\n  )(function* (input) {\n    const args = [\"worktree\", \"remove\"];\n    if (input.force) {\n      args.push(\"--force\");\n    }\n    args.push(input.path);\n    yield* executeGit(\"GitVcsDriver.removeWorktree\", input.cwd, args, {\n      timeoutMs: 15_000,\n      fallbackErrorMessage: \"git worktree remove failed\",\n    }).pipe(\n      Effect.mapError((error) =>\n        createGitCommandError(\n          \"GitVcsDriver.removeWorktree\",\n          input.cwd,\n          args,\n          `${commandLabel(args)} failed (cwd: ${input.cwd}): ${error.message}`,\n          error,\n        ),\n      ),\n    );\n  });\n\n  const renameBranch: GitVcsDriver.GitVcsDriverShape[\"renameBranch\"] = Effect.fn(\"renameBranch\")(\n    function* (input) {\n      if (input.oldBranch === input.newBranch) {\n        return { branch: input.newBranch };\n      }\n      const targetBranch = yield* resolveAvailableBranchName(input.cwd, input.newBranch);\n\n      yield* executeGit(\n        \"GitVcsDriver.renameBranch\",\n        input.cwd,\n        [\"branch\", \"-m\", \"--\", input.oldBranch, targetBranch],\n        {\n          timeoutMs: 10_000,\n          fallbackErrorMessage: \"git branch rename failed\",\n        },\n      );\n\n      return { branch: targetBranch };\n    },\n  );\n\n  const switchRef: GitVcsDriver.GitVcsDriverShape[\"switchRef\"] = Effect.fn(\"switchRef\")(\n    function* (input) {\n      const [localInputExists, remoteExists] = yield* Effect.all(\n        [\n          executeGit(\n            \"GitVcsDriver.switchRef.localInputExists\",\n            input.cwd,\n            [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${input.refName}`],\n            {\n              timeoutMs: 5_000,\n              allowNonZeroExit: true,\n            },\n          ).pipe(Effect.map((result) => result.exitCode === 0)),\n          executeGit(\n            \"GitVcsDriver.switchRef.remoteExists\",\n            input.cwd,\n            [\"show-ref\", \"--verify\", \"--quiet\", `refs/remotes/${input.refName}`],\n            {\n              timeoutMs: 5_000,\n              allowNonZeroExit: true,\n            },\n          ).pipe(Effect.map((result) => result.exitCode === 0)),\n        ],\n        { concurrency: \"unbounded\" },\n      );\n\n      const localTrackingBranch = remoteExists\n        ? yield* executeGit(\n            \"GitVcsDriver.switchRef.localTrackingBranch\",\n            input.cwd,\n            [\"for-each-ref\", \"--format=%(refname:short)\\t%(upstream:short)\", \"refs/heads\"],\n            {\n              timeoutMs: 5_000,\n              allowNonZeroExit: true,\n            },\n          ).pipe(\n            Effect.map((result) =>\n              result.exitCode === 0\n                ? parseTrackingBranchByUpstreamRef(result.stdout, input.refName)\n                : null,\n            ),\n          )\n        : null;\n\n      const localTrackedBranchCandidate = deriveLocalBranchNameFromRemoteRef(input.refName);\n      const localTrackedBranchTargetExists =\n        remoteExists && localTrackedBranchCandidate\n          ? yield* executeGit(\n              \"GitVcsDriver.switchRef.localTrackedBranchTargetExists\",\n              input.cwd,\n              [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${localTrackedBranchCandidate}`],\n              {\n                timeoutMs: 5_000,\n                allowNonZeroExit: true,\n              },\n            ).pipe(Effect.map((result) => result.exitCode === 0))\n          : false;\n\n      const checkoutArgs = localInputExists\n        ? [\"checkout\", input.refName]\n        : remoteExists && !localTrackingBranch && localTrackedBranchTargetExists\n          ? [\"checkout\", input.refName]\n          : remoteExists && !localTrackingBranch\n            ? [\"checkout\", \"--track\", input.refName]\n            : remoteExists && localTrackingBranch\n              ? [\"checkout\", localTrackingBranch]\n              : [\"checkout\", input.refName];\n\n      yield* executeGit(\"GitVcsDriver.switchRef.checkout\", input.cwd, checkoutArgs, {\n        timeoutMs: 10_000,\n        fallbackErrorMessage: \"git checkout failed\",\n      });\n\n      const refName = yield* runGitStdout(\"GitVcsDriver.switchRef.currentBranch\", input.cwd, [\n        \"branch\",\n        \"--show-current\",\n      ]).pipe(Effect.map((stdout) => stdout.trim() || null));\n\n      return { refName };\n    },\n  );\n\n  const createRef: GitVcsDriver.GitVcsDriverShape[\"createRef\"] = Effect.fn(\"createRef\")(\n    function* (input) {\n      yield* executeGit(\"GitVcsDriver.createRef\", input.cwd, [\"branch\", input.refName], {\n        timeoutMs: 10_000,\n        fallbackErrorMessage: \"git branch create failed\",\n      });\n      if (input.switchRef) {\n        yield* switchRef({ cwd: input.cwd, refName: input.refName });\n      }\n\n      return { refName: input.refName };\n    },\n  );\n\n  const initRepo: GitVcsDriver.GitVcsDriverShape[\"initRepo\"] = (input) =>\n    executeGit(\"GitVcsDriver.initRepo\", input.cwd, [\"init\"], {\n      timeoutMs: 10_000,\n      fallbackErrorMessage: \"git init failed\",\n    }).pipe(Effect.asVoid);\n\n  const listLocalBranchNames: GitVcsDriver.GitVcsDriverShape[\"listLocalBranchNames\"] = (cwd) =>\n    runGitStdout(\"GitVcsDriver.listLocalBranchNames\", cwd, [\n      \"branch\",\n      \"--list\",\n      \"--no-column\",\n      \"--format=%(refname:short)\",\n    ]).pipe(\n      Effect.map((stdout) => {\n        const branchNames: Array<string> = [];\n        for (const line of stdout.split(\"\\n\")) {\n          const branchName = line.trim();\n          if (branchName.length > 0) {\n            branchNames.push(branchName);\n          }\n        }\n        return branchNames;\n      }),\n    );\n\n  return GitVcsDriver.GitVcsDriver.of({\n    execute,\n    status,\n    statusDetails,\n    statusDetailsLocal,\n    statusDetailsRemote,\n    readWorkingTreeDiff,\n    stageFiles,\n    unstageFiles,\n    revertUnstagedFiles,\n    readStagedCommitContext,\n    readCommitPreviewContext,\n    prepareCommitContext,\n    commit,\n    pushCurrentBranch,\n    pullCurrentBranch,\n    readRangeContext,\n    readConfigValue,\n    listRefs,\n    createWorktree,\n    fetchPullRequestBranch,\n    ensureRemote,\n    resolvePrimaryRemoteName,\n    fetchRemoteBranch,\n    fetchRemoteTrackingBranch,\n    setBranchUpstream,\n    removeWorktree,\n    renameBranch,\n    createRef,\n    switchRef,\n    initRepo,\n    listLocalBranchNames,\n  });\n});\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport {\n  VcsOutputDecodeError,\n  type VcsError,\n  VcsProcessExitError,\n  VcsProcessSpawnError,\n  VcsProcessTimeoutError,\n} from \"@salchi/contracts\";\nimport { ProcessRunner, layer as ProcessRunnerLive } from \"../processRunner.ts\";\nimport * as Match from \"effect/Match\";\n\nexport interface VcsProcessInput {\n  readonly operation: string;\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd: string;\n  readonly spawnCwd?: string;\n  readonly stdin?: string;\n  readonly env?: NodeJS.ProcessEnv;\n  readonly allowNonZeroExit?: boolean;\n  readonly timeoutMs?: number;\n  readonly maxOutputBytes?: number;\n  readonly appendTruncationMarker?: boolean;\n}\n\nexport interface VcsProcessOutput {\n  readonly exitCode: ChildProcessSpawner.ExitCode;\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly stdoutTruncated: boolean;\n  readonly stderrTruncated: boolean;\n}\n\nexport interface VcsProcessShape {\n  readonly run: (input: VcsProcessInput) => Effect.Effect<VcsProcessOutput, VcsError>;\n}\n\nexport class VcsProcess extends Context.Service<VcsProcess, VcsProcessShape>()(\n  \"salchi/vcs/VcsProcess\",\n) {}\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 1_000_000;\nconst OUTPUT_TRUNCATED_MARKER = \"\\n\\n[truncated]\";\n\nfunction commandLabel(command: string, args: ReadonlyArray<string>): string {\n  return [command, ...args].join(\" \");\n}\n\nexport const make = Effect.fn(\"makeVcsProcess\")(function* () {\n  const processRunner = yield* ProcessRunner;\n\n  const run = Effect.fn(\"VcsProcess.run\")(function* (input: VcsProcessInput) {\n    const label = commandLabel(input.command, input.args);\n    const baseError = {\n      operation: input.operation,\n      command: label,\n      cwd: input.cwd,\n    };\n\n    const result = yield* processRunner\n      .run({\n        command: input.command,\n        args: input.args,\n        cwd: input.cwd,\n        ...(input.spawnCwd !== undefined ? { spawnCwd: input.spawnCwd } : {}),\n        ...(input.stdin !== undefined ? { stdin: input.stdin } : {}),\n        ...(input.env !== undefined ? { env: input.env } : {}),\n        timeout: input.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n        maxOutputBytes: input.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES,\n        outputMode: \"truncate\",\n        truncatedMarker: input.appendTruncationMarker ? OUTPUT_TRUNCATED_MARKER : \"\",\n        timeoutBehavior: \"error\",\n      })\n      .pipe(\n        Effect.mapError(\n          Match.valueTags({\n            ProcessSpawnError: (error) =>\n              VcsProcessSpawnError.fromProcessSpawnError(baseError, error),\n            ProcessOutputLimitError: (error) =>\n              VcsOutputDecodeError.fromProcessOutputLimitError(baseError, error),\n            ProcessTimeoutError: (error) =>\n              VcsProcessTimeoutError.fromProcessTimeoutError(baseError, error),\n            ProcessStdinError: (error) =>\n              VcsOutputDecodeError.fromProcessStdinError(baseError, error),\n            ProcessReadError: (error) =>\n              VcsOutputDecodeError.fromProcessReadError(baseError, error),\n          }),\n        ),\n      );\n\n    if (result.code === null) {\n      return yield* VcsOutputDecodeError.missingExitCode(baseError);\n    }\n\n    if (!input.allowNonZeroExit && result.code !== 0) {\n      return yield* new VcsProcessExitError({\n        operation: input.operation,\n        command: label,\n        cwd: input.cwd,\n        exitCode: result.code,\n        detail: result.stderr.trim() || `${label} exited with code ${result.code}.`,\n      });\n    }\n\n    return {\n      exitCode: result.code,\n      stdout: result.stdout,\n      stderr: result.stderr,\n      stdoutTruncated: result.stdoutTruncated,\n      stderrTruncated: result.stderrTruncated,\n    } satisfies VcsProcessOutput;\n  });\n\n  return VcsProcess.of({ run });\n});\n\nexport const layer = Layer.effect(VcsProcess, make()).pipe(Layer.provide(ProcessRunnerLive));\n","import * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type {\n  VcsDriverCapabilities,\n  VcsError,\n  VcsInitInput,\n  VcsListRemotesResult,\n  VcsListWorkspaceFilesResult,\n  VcsRepositoryIdentity,\n} from \"@salchi/contracts\";\nimport { CheckpointRef } from \"@salchi/contracts\";\nimport * as VcsProcess from \"./VcsProcess.ts\";\n\nexport interface VcsCaptureCheckpointInput {\n  readonly cwd: string;\n  readonly checkpointRef: CheckpointRef;\n}\n\nexport interface VcsCaptureOverlayCheckpointInput {\n  readonly cwd: string;\n  readonly baseCheckpointRef: CheckpointRef;\n  readonly checkpointRef: CheckpointRef;\n  readonly entries: ReadonlyArray<{\n    readonly path: string;\n    readonly blobSha: string | null;\n  }>;\n}\n\nexport interface VcsRestoreCheckpointInput {\n  readonly cwd: string;\n  readonly checkpointRef: CheckpointRef;\n  readonly fallbackToHead?: boolean;\n}\n\nexport interface VcsDiffCheckpointsInput {\n  readonly cwd: string;\n  readonly fromCheckpointRef: CheckpointRef;\n  readonly toCheckpointRef: CheckpointRef;\n  readonly fallbackFromToHead?: boolean;\n  readonly ignoreWhitespace: boolean;\n  readonly paths?: ReadonlyArray<string>;\n}\n\nexport interface VcsDeleteCheckpointRefsInput {\n  readonly cwd: string;\n  readonly checkpointRefs: ReadonlyArray<CheckpointRef>;\n}\n\nexport interface VcsHashFileBlobInput {\n  readonly cwd: string;\n  readonly path: string;\n}\n\nexport interface VcsReadCheckpointFileBlobInput {\n  readonly cwd: string;\n  readonly checkpointRef: CheckpointRef;\n  readonly path: string;\n}\n\nexport interface VcsCheckpointOps {\n  readonly captureCheckpoint: (input: VcsCaptureCheckpointInput) => Effect.Effect<void, VcsError>;\n  readonly captureOverlayCheckpoint: (\n    input: VcsCaptureOverlayCheckpointInput,\n  ) => Effect.Effect<void, VcsError>;\n  readonly hasCheckpointRef: (\n    input: Omit<VcsRestoreCheckpointInput, \"fallbackToHead\">,\n  ) => Effect.Effect<boolean, VcsError>;\n  readonly restoreCheckpoint: (\n    input: VcsRestoreCheckpointInput,\n  ) => Effect.Effect<boolean, VcsError>;\n  readonly diffCheckpoints: (input: VcsDiffCheckpointsInput) => Effect.Effect<string, VcsError>;\n  readonly hashFileBlob: (input: VcsHashFileBlobInput) => Effect.Effect<string | null, VcsError>;\n  readonly readCheckpointFileBlob: (\n    input: VcsReadCheckpointFileBlobInput,\n  ) => Effect.Effect<string | null, VcsError>;\n  readonly deleteCheckpointRefs: (\n    input: VcsDeleteCheckpointRefsInput,\n  ) => Effect.Effect<void, VcsError>;\n}\n\nexport interface VcsDriverShape {\n  readonly capabilities: VcsDriverCapabilities;\n  readonly execute: (\n    input: Omit<VcsProcess.VcsProcessInput, \"command\">,\n  ) => Effect.Effect<VcsProcess.VcsProcessOutput, VcsError>;\n  readonly checkpoints?: VcsCheckpointOps;\n  readonly detectRepository: (cwd: string) => Effect.Effect<VcsRepositoryIdentity | null, VcsError>;\n  readonly isInsideWorkTree: (cwd: string) => Effect.Effect<boolean, VcsError>;\n  readonly listWorkspaceFiles: (\n    cwd: string,\n  ) => Effect.Effect<VcsListWorkspaceFilesResult, VcsError>;\n  readonly listRemotes: (cwd: string) => Effect.Effect<VcsListRemotesResult, VcsError>;\n  readonly filterIgnoredPaths: (\n    cwd: string,\n    relativePaths: ReadonlyArray<string>,\n  ) => Effect.Effect<ReadonlyArray<string>, VcsError>;\n  readonly initRepository: (input: VcsInitInput) => Effect.Effect<void, VcsError>;\n}\n\nexport class VcsDriver extends Context.Service<VcsDriver, VcsDriverShape>()(\n  \"salchi/vcs/VcsDriver\",\n) {}\n","import { randomUUID } from \"node:crypto\";\n\nimport * as Context from \"effect/Context\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport {\n  GitCommandError,\n  VcsProcessExitError,\n  type VcsSwitchRefInput,\n  type VcsSwitchRefResult,\n  type VcsCreateRefInput,\n  type VcsCreateRefResult,\n  type VcsCreateWorktreeInput,\n  type VcsCreateWorktreeResult,\n  type VcsInitInput,\n  type VcsListRefsInput,\n  type VcsListRefsResult,\n  type VcsPullResult,\n  type VcsRevertUnstagedFilesInput,\n  type VcsRemoveWorktreeInput,\n  type VcsStageFilesInput,\n  type VcsStatusInput,\n  type VcsStatusResult,\n  type VcsUnstageFilesInput,\n  type VcsWorkingTreeDiffInput,\n  type VcsWorkingTreeDiffResult,\n} from \"@salchi/contracts\";\nimport * as GitVcsDriverCore from \"./GitVcsDriverCore.ts\";\nimport * as VcsDriver from \"./VcsDriver.ts\";\nimport * as VcsProcess from \"./VcsProcess.ts\";\n\nexport interface ExecuteGitInput {\n  readonly operation: string;\n  readonly cwd: string;\n  readonly args: ReadonlyArray<string>;\n  readonly stdin?: string;\n  readonly env?: NodeJS.ProcessEnv;\n  readonly allowNonZeroExit?: boolean;\n  readonly timeoutMs?: number;\n  readonly maxOutputBytes?: number;\n  readonly appendTruncationMarker?: boolean;\n  readonly progress?: ExecuteGitProgress;\n}\n\nexport interface ExecuteGitResult {\n  readonly exitCode: ChildProcessSpawner.ExitCode;\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly stdoutTruncated: boolean;\n  readonly stderrTruncated: boolean;\n}\n\nexport interface GitStatusDetails {\n  isRepo: boolean;\n  sourceControlProvider?: VcsStatusResult[\"sourceControlProvider\"];\n  hasOriginRemote: boolean;\n  isDefaultBranch: boolean;\n  branch: string | null;\n  upstreamRef: string | null;\n  hasWorkingTreeChanges: boolean;\n  workingTree: VcsStatusResult[\"workingTree\"];\n  hasUpstream: boolean;\n  aheadCount: number;\n  behindCount: number;\n  aheadOfDefaultCount: number;\n}\n\nexport interface GitRemoteStatusDetails {\n  isRepo: boolean;\n  isDefaultBranch: boolean;\n  branch: string | null;\n  upstreamRef: string | null;\n  hasUpstream: boolean;\n  aheadCount: number;\n  behindCount: number;\n  aheadOfDefaultCount: number;\n}\n\nexport interface GitPreparedCommitContext {\n  stagedSummary: string;\n  stagedPatch: string;\n}\n\nexport interface ExecuteGitProgress {\n  readonly onStdoutLine?: (line: string) => Effect.Effect<void, never>;\n  readonly onStderrLine?: (line: string) => Effect.Effect<void, never>;\n  readonly onHookStarted?: (hookName: string) => Effect.Effect<void, never>;\n  readonly onHookFinished?: (input: {\n    hookName: string;\n    exitCode: number | null;\n    durationMs: number | null;\n  }) => Effect.Effect<void, never>;\n}\n\nexport interface GitCommitProgress {\n  readonly onOutputLine?: (input: {\n    stream: \"stdout\" | \"stderr\";\n    text: string;\n  }) => Effect.Effect<void, never>;\n  readonly onHookStarted?: (hookName: string) => Effect.Effect<void, never>;\n  readonly onHookFinished?: (input: {\n    hookName: string;\n    exitCode: number | null;\n    durationMs: number | null;\n  }) => Effect.Effect<void, never>;\n}\n\nexport interface GitCommitOptions {\n  readonly timeoutMs?: number;\n  readonly progress?: GitCommitProgress;\n}\n\nexport interface GitPushResult {\n  status: \"pushed\" | \"skipped_up_to_date\";\n  branch: string;\n  upstreamBranch?: string | undefined;\n  setUpstream?: boolean | undefined;\n}\n\nexport interface GitRangeContext {\n  commitSummary: string;\n  diffSummary: string;\n  diffPatch: string;\n}\n\nexport interface GitRenameBranchInput {\n  cwd: string;\n  oldBranch: string;\n  newBranch: string;\n}\n\nexport interface GitRenameBranchResult {\n  branch: string;\n}\n\nexport interface GitFetchPullRequestBranchInput {\n  cwd: string;\n  prNumber: number;\n  branch: string;\n}\n\nexport interface GitEnsureRemoteInput {\n  cwd: string;\n  preferredName: string;\n  url: string;\n}\n\nexport interface GitFetchRemoteBranchInput {\n  cwd: string;\n  remoteName: string;\n  remoteBranch: string;\n  localBranch: string;\n}\n\nexport interface GitFetchRemoteTrackingBranchInput {\n  cwd: string;\n  remoteName: string;\n  remoteBranch: string;\n}\n\nexport interface GitSetBranchUpstreamInput {\n  cwd: string;\n  branch: string;\n  remoteName: string;\n  remoteBranch: string;\n}\n\nexport interface GitVcsDriverShape {\n  readonly execute: (input: ExecuteGitInput) => Effect.Effect<ExecuteGitResult, GitCommandError>;\n  readonly status: (input: VcsStatusInput) => Effect.Effect<VcsStatusResult, GitCommandError>;\n  readonly statusDetails: (cwd: string) => Effect.Effect<GitStatusDetails, GitCommandError>;\n  readonly statusDetailsLocal: (cwd: string) => Effect.Effect<GitStatusDetails, GitCommandError>;\n  readonly statusDetailsRemote: (\n    cwd: string,\n  ) => Effect.Effect<GitRemoteStatusDetails, GitCommandError>;\n  readonly readWorkingTreeDiff: (\n    input: VcsWorkingTreeDiffInput,\n  ) => Effect.Effect<VcsWorkingTreeDiffResult, GitCommandError>;\n  readonly stageFiles: (input: VcsStageFilesInput) => Effect.Effect<void, GitCommandError>;\n  readonly unstageFiles: (input: VcsUnstageFilesInput) => Effect.Effect<void, GitCommandError>;\n  readonly revertUnstagedFiles: (\n    input: VcsRevertUnstagedFilesInput,\n  ) => Effect.Effect<void, GitCommandError>;\n  readonly readStagedCommitContext: (\n    cwd: string,\n  ) => Effect.Effect<GitPreparedCommitContext | null, GitCommandError>;\n  readonly readCommitPreviewContext: (\n    cwd: string,\n  ) => Effect.Effect<GitPreparedCommitContext | null, GitCommandError>;\n  readonly prepareCommitContext: (\n    cwd: string,\n    filePaths?: readonly string[],\n  ) => Effect.Effect<GitPreparedCommitContext | null, GitCommandError>;\n  readonly commit: (\n    cwd: string,\n    subject: string,\n    body: string,\n    options?: GitCommitOptions,\n  ) => Effect.Effect<{ commitSha: string }, GitCommandError>;\n  readonly pushCurrentBranch: (\n    cwd: string,\n    fallbackBranch: string | null,\n    options?: { readonly remoteName?: string | null },\n  ) => Effect.Effect<GitPushResult, GitCommandError>;\n  readonly readRangeContext: (\n    cwd: string,\n    baseRef: string,\n  ) => Effect.Effect<GitRangeContext, GitCommandError>;\n  readonly readConfigValue: (\n    cwd: string,\n    key: string,\n  ) => Effect.Effect<string | null, GitCommandError>;\n  readonly listRefs: (input: VcsListRefsInput) => Effect.Effect<VcsListRefsResult, GitCommandError>;\n  readonly pullCurrentBranch: (cwd: string) => Effect.Effect<VcsPullResult, GitCommandError>;\n  readonly createWorktree: (\n    input: VcsCreateWorktreeInput,\n  ) => Effect.Effect<VcsCreateWorktreeResult, GitCommandError>;\n  readonly fetchPullRequestBranch: (\n    input: GitFetchPullRequestBranchInput,\n  ) => Effect.Effect<void, GitCommandError>;\n  readonly ensureRemote: (input: GitEnsureRemoteInput) => Effect.Effect<string, GitCommandError>;\n  readonly resolvePrimaryRemoteName: (cwd: string) => Effect.Effect<string, GitCommandError>;\n  readonly fetchRemoteBranch: (\n    input: GitFetchRemoteBranchInput,\n  ) => Effect.Effect<void, GitCommandError>;\n  readonly fetchRemoteTrackingBranch: (\n    input: GitFetchRemoteTrackingBranchInput,\n  ) => Effect.Effect<void, GitCommandError>;\n  readonly setBranchUpstream: (\n    input: GitSetBranchUpstreamInput,\n  ) => Effect.Effect<void, GitCommandError>;\n  readonly removeWorktree: (input: VcsRemoveWorktreeInput) => Effect.Effect<void, GitCommandError>;\n  readonly renameBranch: (\n    input: GitRenameBranchInput,\n  ) => Effect.Effect<GitRenameBranchResult, GitCommandError>;\n  readonly createRef: (\n    input: VcsCreateRefInput,\n  ) => Effect.Effect<VcsCreateRefResult, GitCommandError>;\n  readonly switchRef: (\n    input: VcsSwitchRefInput,\n  ) => Effect.Effect<VcsSwitchRefResult, GitCommandError>;\n  readonly initRepo: (input: VcsInitInput) => Effect.Effect<void, GitCommandError>;\n  readonly listLocalBranchNames: (cwd: string) => Effect.Effect<string[], GitCommandError>;\n}\n\nexport class GitVcsDriver extends Context.Service<GitVcsDriver, GitVcsDriverShape>()(\n  \"salchi/vcs/GitVcsDriver\",\n) {}\n\nconst WORKSPACE_FILES_MAX_OUTPUT_BYTES = 16 * 1024 * 1024;\nconst GIT_CHECK_IGNORE_MAX_STDIN_BYTES = 256 * 1024;\nconst CHECKPOINT_DIFF_MAX_OUTPUT_BYTES = 10_000_000;\nconst CHECKPOINT_DIFF_PATHSPEC_LIMIT = 500;\nconst ZERO_BLOB_SHA = \"0000000000000000000000000000000000000000\";\nconst WORKSPACE_GIT_HARDENED_CONFIG_ARGS = [\n  \"-c\",\n  \"core.fsmonitor=false\",\n  \"-c\",\n  \"core.untrackedCache=false\",\n] as const;\n\nconst nowFreshness = Effect.fn(\"GitVcsDriver.nowFreshness\")(function* () {\n  const now = yield* DateTime.now;\n  return {\n    source: \"live-local\" as const,\n    observedAt: now,\n    expiresAt: Option.none(),\n  };\n});\n\nfunction splitNullSeparatedPaths(input: string, truncated: boolean): string[] {\n  const parts = input.split(\"\\0\");\n  if (parts.length === 0) return [];\n\n  if (truncated && parts[parts.length - 1]?.length) {\n    parts.pop();\n  }\n\n  return parts.filter((value) => value.length > 0);\n}\n\nconst WORKSPACE_FILE_EXISTENCE_CHECK_CONCURRENCY = 64;\n\nfunction chunkPathsForGitCheckIgnore(relativePaths: ReadonlyArray<string>): string[][] {\n  const chunks: string[][] = [];\n  let chunk: string[] = [];\n  let chunkBytes = 0;\n\n  for (const relativePath of relativePaths) {\n    const relativePathBytes = Buffer.byteLength(relativePath) + 1;\n    if (chunk.length > 0 && chunkBytes + relativePathBytes > GIT_CHECK_IGNORE_MAX_STDIN_BYTES) {\n      chunks.push(chunk);\n      chunk = [];\n      chunkBytes = 0;\n    }\n\n    chunk.push(relativePath);\n    chunkBytes += relativePathBytes;\n\n    if (chunkBytes >= GIT_CHECK_IGNORE_MAX_STDIN_BYTES) {\n      chunks.push(chunk);\n      chunk = [];\n      chunkBytes = 0;\n    }\n  }\n\n  if (chunk.length > 0) {\n    chunks.push(chunk);\n  }\n\n  return chunks;\n}\n\nfunction parseGitRemoteVerboseOutput(\n  output: string,\n): Map<string, { url?: string; pushUrl?: string }> {\n  const remotes = new Map<string, { url?: string; pushUrl?: string }>();\n  for (const line of output.split(\"\\n\")) {\n    const trimmed = line.trim();\n    if (trimmed.length === 0) {\n      continue;\n    }\n\n    const match = /^(\\S+)\\s+(\\S+)\\s+\\((fetch|push)\\)$/.exec(trimmed);\n    if (!match) {\n      continue;\n    }\n\n    const name = match[1];\n    const url = match[2];\n    const direction = match[3];\n    if (!name || !url || !direction) {\n      continue;\n    }\n    const remote = remotes.get(name) ?? {};\n    if (direction === \"fetch\") {\n      remote.url = url;\n    } else {\n      remote.pushUrl = url;\n    }\n    remotes.set(name, remote);\n  }\n  return remotes;\n}\n\nconst gitCommand = (\n  process: VcsProcess.VcsProcessShape,\n  operation: string,\n  cwd: string,\n  args: ReadonlyArray<string>,\n  options?: {\n    readonly stdin?: string;\n    readonly env?: NodeJS.ProcessEnv;\n    readonly allowNonZeroExit?: boolean;\n    readonly timeoutMs?: number;\n    readonly maxOutputBytes?: number;\n    readonly appendTruncationMarker?: boolean;\n  },\n) =>\n  process.run({\n    operation,\n    command: \"git\",\n    args: [\"-C\", cwd, ...args],\n    cwd,\n    spawnCwd: globalThis.process.cwd(),\n    ...(options?.stdin !== undefined ? { stdin: options.stdin } : {}),\n    ...(options?.env !== undefined ? { env: options.env } : {}),\n    ...(options?.allowNonZeroExit !== undefined\n      ? { allowNonZeroExit: options.allowNonZeroExit }\n      : {}),\n    ...(options?.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),\n    ...(options?.maxOutputBytes !== undefined ? { maxOutputBytes: options.maxOutputBytes } : {}),\n    ...(options?.appendTruncationMarker !== undefined\n      ? { appendTruncationMarker: options.appendTruncationMarker }\n      : {}),\n  });\n\nexport const makeVcsDriverShape = Effect.fn(\"makeGitVcsDriverShape\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const vcsProcess = yield* VcsProcess.VcsProcess;\n  const capabilities = {\n    kind: \"git\" as const,\n    supportsWorktrees: true,\n    supportsBookmarks: false,\n    supportsAtomicSnapshot: false,\n    supportsPushDefaultRemote: true,\n    ignoreClassifier: \"native\" as const,\n  };\n\n  const isInsideWorkTree: VcsDriver.VcsDriverShape[\"isInsideWorkTree\"] = (cwd) =>\n    gitCommand(\n      vcsProcess,\n      \"GitVcsDriver.isInsideWorkTree\",\n      cwd,\n      [\"rev-parse\", \"--is-inside-work-tree\"],\n      {\n        allowNonZeroExit: true,\n        timeoutMs: 5_000,\n        maxOutputBytes: 4_096,\n      },\n    ).pipe(Effect.map((result) => result.exitCode === 0 && result.stdout.trim() === \"true\"));\n\n  const execute: VcsDriver.VcsDriverShape[\"execute\"] = (input) =>\n    gitCommand(vcsProcess, input.operation, input.cwd, input.args, {\n      ...(input.stdin !== undefined ? { stdin: input.stdin } : {}),\n      ...(input.env !== undefined ? { env: input.env } : {}),\n      ...(input.allowNonZeroExit !== undefined ? { allowNonZeroExit: input.allowNonZeroExit } : {}),\n      ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n      ...(input.maxOutputBytes !== undefined ? { maxOutputBytes: input.maxOutputBytes } : {}),\n      ...(input.appendTruncationMarker !== undefined\n        ? { appendTruncationMarker: input.appendTruncationMarker }\n        : {}),\n    });\n\n  const detectRepository: VcsDriver.VcsDriverShape[\"detectRepository\"] = Effect.fn(\n    \"detectRepository\",\n  )(function* (cwd) {\n    if (!(yield* isInsideWorkTree(cwd))) {\n      return null;\n    }\n\n    const root = yield* gitCommand(vcsProcess, \"GitVcsDriver.detectRepository.root\", cwd, [\n      \"rev-parse\",\n      \"--show-toplevel\",\n    ]);\n    const gitCommonDir = yield* gitCommand(\n      vcsProcess,\n      \"GitVcsDriver.detectRepository.commonDir\",\n      cwd,\n      [\"rev-parse\", \"--git-common-dir\"],\n    ).pipe(Effect.catch(() => Effect.succeed(null)));\n\n    return {\n      kind: \"git\" as const,\n      rootPath: root.stdout.trim(),\n      metadataPath: gitCommonDir?.stdout.trim() || null,\n      freshness: yield* nowFreshness(),\n    };\n  });\n\n  const listWorkspaceFiles: VcsDriver.VcsDriverShape[\"listWorkspaceFiles\"] = Effect.fn(\n    \"listWorkspaceFiles\",\n  )(function* (cwd) {\n    const listedResult = yield* gitCommand(\n      vcsProcess,\n      \"GitVcsDriver.listWorkspaceFiles\",\n      cwd,\n      [\n        ...WORKSPACE_GIT_HARDENED_CONFIG_ARGS,\n        \"ls-files\",\n        \"--cached\",\n        \"--others\",\n        \"--exclude-standard\",\n        \"-z\",\n      ],\n      {\n        allowNonZeroExit: true,\n        timeoutMs: 20_000,\n        maxOutputBytes: WORKSPACE_FILES_MAX_OUTPUT_BYTES,\n        appendTruncationMarker: true,\n      },\n    );\n\n    if (listedResult.exitCode !== 0) {\n      return yield* new VcsProcessExitError({\n        operation: \"GitVcsDriver.listWorkspaceFiles\",\n        command: \"git ls-files\",\n        cwd,\n        exitCode: listedResult.exitCode,\n        detail: listedResult.stderr.trim() || \"git ls-files failed\",\n      });\n    }\n\n    const ignoredResult = yield* gitCommand(\n      vcsProcess,\n      \"GitVcsDriver.listWorkspaceFiles.ignored\",\n      cwd,\n      [\n        ...WORKSPACE_GIT_HARDENED_CONFIG_ARGS,\n        \"ls-files\",\n        \"--others\",\n        \"--ignored\",\n        \"--exclude-standard\",\n        \"-z\",\n      ],\n      {\n        allowNonZeroExit: true,\n        timeoutMs: 20_000,\n        maxOutputBytes: WORKSPACE_FILES_MAX_OUTPUT_BYTES,\n        appendTruncationMarker: true,\n      },\n    );\n\n    if (ignoredResult.exitCode !== 0) {\n      return yield* new VcsProcessExitError({\n        operation: \"GitVcsDriver.listWorkspaceFiles.ignored\",\n        command: \"git ls-files\",\n        cwd,\n        exitCode: ignoredResult.exitCode,\n        detail: ignoredResult.stderr.trim() || \"git ls-files ignored paths failed\",\n      });\n    }\n\n    const filterExistingPaths = (relativePaths: ReadonlyArray<string>) =>\n      Effect.filter(\n        relativePaths,\n        (relativePath) =>\n          fileSystem.exists(path.join(cwd, relativePath)).pipe(Effect.orElseSucceed(() => false)),\n        { concurrency: WORKSPACE_FILE_EXISTENCE_CHECK_CONCURRENCY },\n      );\n\n    const paths = yield* filterExistingPaths(\n      splitNullSeparatedPaths(listedResult.stdout, listedResult.stdoutTruncated),\n    );\n    const ignoredPaths = yield* filterExistingPaths(\n      splitNullSeparatedPaths(ignoredResult.stdout, ignoredResult.stdoutTruncated),\n    );\n    const freshness = yield* nowFreshness();\n    return {\n      paths,\n      ignoredPaths,\n      truncated: listedResult.stdoutTruncated || ignoredResult.stdoutTruncated,\n      freshness,\n    };\n  });\n\n  const listRemotes: VcsDriver.VcsDriverShape[\"listRemotes\"] = Effect.fn(\"listRemotes\")(\n    function* (cwd) {\n      const result = yield* gitCommand(\n        vcsProcess,\n        \"GitVcsDriver.listRemotes\",\n        cwd,\n        [\"remote\", \"-v\"],\n        {\n          allowNonZeroExit: true,\n          timeoutMs: 5_000,\n          maxOutputBytes: 64 * 1024,\n        },\n      );\n\n      if (result.exitCode !== 0) {\n        return yield* new VcsProcessExitError({\n          operation: \"GitVcsDriver.listRemotes\",\n          command: \"git remote -v\",\n          cwd,\n          exitCode: result.exitCode,\n          detail: result.stderr.trim() || \"git remote -v failed\",\n        });\n      }\n\n      const parsed = parseGitRemoteVerboseOutput(result.stdout);\n      const remotes = Array.from(parsed.entries()).flatMap(([name, remote]) => {\n        if (!remote.url) {\n          return [];\n        }\n        return [\n          {\n            name,\n            url: remote.url,\n            pushUrl: remote.pushUrl ? Option.some(remote.pushUrl) : Option.none(),\n            isPrimary: name === \"origin\",\n          },\n        ];\n      });\n\n      return {\n        remotes,\n        freshness: yield* nowFreshness(),\n      };\n    },\n  );\n\n  const filterIgnoredPaths: VcsDriver.VcsDriverShape[\"filterIgnoredPaths\"] = Effect.fn(\n    \"filterIgnoredPaths\",\n  )(function* (cwd, relativePaths) {\n    if (relativePaths.length === 0) {\n      return relativePaths;\n    }\n\n    const ignoredPaths = new Set<string>();\n    const chunks = chunkPathsForGitCheckIgnore(relativePaths);\n\n    for (const chunk of chunks) {\n      const result = yield* gitCommand(\n        vcsProcess,\n        \"GitVcsDriver.filterIgnoredPaths\",\n        cwd,\n        [...WORKSPACE_GIT_HARDENED_CONFIG_ARGS, \"check-ignore\", \"--no-index\", \"-z\", \"--stdin\"],\n        {\n          stdin: `${chunk.join(\"\\0\")}\\0`,\n          allowNonZeroExit: true,\n          timeoutMs: 20_000,\n          maxOutputBytes: WORKSPACE_FILES_MAX_OUTPUT_BYTES,\n          appendTruncationMarker: true,\n        },\n      );\n\n      if (result.exitCode !== 0 && result.exitCode !== 1) {\n        return yield* new VcsProcessExitError({\n          operation: \"GitVcsDriver.filterIgnoredPaths\",\n          command: \"git check-ignore\",\n          cwd,\n          exitCode: result.exitCode,\n          detail: result.stderr.trim() || \"git check-ignore failed\",\n        });\n      }\n\n      for (const ignoredPath of splitNullSeparatedPaths(result.stdout, result.stdoutTruncated)) {\n        ignoredPaths.add(ignoredPath);\n      }\n    }\n\n    if (ignoredPaths.size === 0) {\n      return relativePaths;\n    }\n\n    return relativePaths.filter((relativePath) => !ignoredPaths.has(relativePath));\n  });\n\n  const initRepository: VcsDriver.VcsDriverShape[\"initRepository\"] = (input) =>\n    gitCommand(vcsProcess, \"GitVcsDriver.initRepository\", input.cwd, [\"init\"], {\n      timeoutMs: 10_000,\n      maxOutputBytes: 64 * 1024,\n    }).pipe(Effect.asVoid);\n\n  const resolveHeadCommit = (cwd: string) =>\n    execute({\n      operation: \"GitVcsDriver.checkpoints.resolveHeadCommit\",\n      cwd,\n      args: [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD^{commit}\"],\n      allowNonZeroExit: true,\n    }).pipe(\n      Effect.map((result) => {\n        if (result.exitCode !== 0) {\n          return null;\n        }\n        const commit = result.stdout.trim();\n        return commit.length > 0 ? commit : null;\n      }),\n    );\n\n  const hasHeadCommit = (cwd: string) =>\n    execute({\n      operation: \"GitVcsDriver.checkpoints.hasHeadCommit\",\n      cwd,\n      args: [\"rev-parse\", \"--verify\", \"HEAD\"],\n      allowNonZeroExit: true,\n    }).pipe(Effect.map((result) => result.exitCode === 0));\n\n  const resolveCheckpointCommit = (cwd: string, checkpointRef: string) =>\n    execute({\n      operation: \"GitVcsDriver.checkpoints.resolveCheckpointCommit\",\n      cwd,\n      args: [\"rev-parse\", \"--verify\", \"--quiet\", `${checkpointRef}^{commit}`],\n      allowNonZeroExit: true,\n    }).pipe(\n      Effect.map((result) => {\n        if (result.exitCode !== 0) {\n          return null;\n        }\n        const commit = result.stdout.trim();\n        return commit.length > 0 ? commit : null;\n      }),\n    );\n\n  const resolveGitCommonDir = (cwd: string) =>\n    Effect.gen(function* () {\n      const result = yield* execute({\n        operation: \"GitVcsDriver.checkpoints.resolveGitCommonDir\",\n        cwd,\n        args: [\"rev-parse\", \"--git-common-dir\"],\n      });\n      const gitCommonDir = result.stdout.trim();\n      return path.isAbsolute(gitCommonDir) ? gitCommonDir : path.resolve(cwd, gitCommonDir);\n    });\n\n  const checkpoints: VcsDriver.VcsCheckpointOps = {\n    captureCheckpoint: Effect.fn(\"GitVcsDriver.checkpoints.captureCheckpoint\")(function* (input) {\n      const operation = \"GitVcsDriver.checkpoints.captureCheckpoint\";\n      const gitCommonDir = yield* resolveGitCommonDir(input.cwd);\n      const tempIndexPath = path.join(gitCommonDir, `salchi-checkpoint-index-${randomUUID()}`);\n      const commitEnv: NodeJS.ProcessEnv = {\n        ...process.env,\n        GIT_INDEX_FILE: tempIndexPath,\n        GIT_AUTHOR_NAME: \"Salchi\",\n        GIT_AUTHOR_EMAIL: \"salchi@users.noreply.github.com\",\n        GIT_COMMITTER_NAME: \"Salchi\",\n        GIT_COMMITTER_EMAIL: \"salchi@users.noreply.github.com\",\n      };\n\n      const cleanupTempIndex = fileSystem\n        .remove(tempIndexPath, { force: true })\n        .pipe(Effect.ignore);\n\n      yield* Effect.gen(function* () {\n        const headExists = yield* hasHeadCommit(input.cwd);\n        if (headExists) {\n          yield* execute({\n            operation,\n            cwd: input.cwd,\n            args: [\"read-tree\", \"HEAD\"],\n            env: commitEnv,\n          });\n        }\n\n        yield* execute({\n          operation,\n          cwd: input.cwd,\n          args: [\"add\", \"-A\", \"--\", \".\"],\n          env: commitEnv,\n        });\n\n        const writeTreeResult = yield* execute({\n          operation,\n          cwd: input.cwd,\n          args: [\"write-tree\"],\n          env: commitEnv,\n        });\n        const treeOid = writeTreeResult.stdout.trim();\n        if (treeOid.length === 0) {\n          return yield* new VcsProcessExitError({\n            operation,\n            command: \"git write-tree\",\n            cwd: input.cwd,\n            exitCode: 0,\n            detail: \"git write-tree returned an empty tree oid.\",\n          });\n        }\n\n        const message = `salchi checkpoint ref=${input.checkpointRef}`;\n        const commitTreeResult = yield* execute({\n          operation,\n          cwd: input.cwd,\n          args: [\"commit-tree\", treeOid, \"-m\", message],\n          env: commitEnv,\n        });\n        const commitOid = commitTreeResult.stdout.trim();\n        if (commitOid.length === 0) {\n          return yield* new VcsProcessExitError({\n            operation,\n            command: \"git commit-tree\",\n            cwd: input.cwd,\n            exitCode: 0,\n            detail: \"git commit-tree returned an empty commit oid.\",\n          });\n        }\n\n        yield* execute({\n          operation,\n          cwd: input.cwd,\n          args: [\"update-ref\", input.checkpointRef, commitOid],\n        });\n      }).pipe(Effect.ensuring(cleanupTempIndex));\n    }),\n\n    captureOverlayCheckpoint: Effect.fn(\"GitVcsDriver.checkpoints.captureOverlayCheckpoint\")(\n      function* (input) {\n        const operation = \"GitVcsDriver.checkpoints.captureOverlayCheckpoint\";\n        const gitCommonDir = yield* resolveGitCommonDir(input.cwd);\n        const tempIndexPath = path.join(gitCommonDir, `salchi-checkpoint-index-${randomUUID()}`);\n        const commitEnv: NodeJS.ProcessEnv = {\n          ...process.env,\n          GIT_INDEX_FILE: tempIndexPath,\n          GIT_AUTHOR_NAME: \"Salchi\",\n          GIT_AUTHOR_EMAIL: \"salchi@users.noreply.github.com\",\n          GIT_COMMITTER_NAME: \"Salchi\",\n          GIT_COMMITTER_EMAIL: \"salchi@users.noreply.github.com\",\n        };\n\n        const cleanupTempIndex = fileSystem\n          .remove(tempIndexPath, { force: true })\n          .pipe(Effect.ignore);\n\n        yield* Effect.gen(function* () {\n          yield* execute({\n            operation,\n            cwd: input.cwd,\n            args: [\"read-tree\", `${input.baseCheckpointRef}^{tree}`],\n            env: commitEnv,\n          });\n\n          if (input.entries.length > 0) {\n            const entriesByPath = new Map<string, string | null>();\n            for (const entry of input.entries) {\n              entriesByPath.set(entry.path, entry.blobSha);\n            }\n\n            const indexInfo = [...entriesByPath.entries()]\n              .map(([entryPath, blobSha]) =>\n                blobSha === null\n                  ? `0 ${ZERO_BLOB_SHA}\\t${entryPath}\\n`\n                  : `100644 ${blobSha}\\t${entryPath}\\n`,\n              )\n              .join(\"\");\n            yield* execute({\n              operation,\n              cwd: input.cwd,\n              args: [\"update-index\", \"--index-info\"],\n              stdin: indexInfo,\n              env: commitEnv,\n            });\n          }\n\n          const writeTreeResult = yield* execute({\n            operation,\n            cwd: input.cwd,\n            args: [\"write-tree\"],\n            env: commitEnv,\n          });\n          const treeOid = writeTreeResult.stdout.trim();\n          if (treeOid.length === 0) {\n            return yield* new VcsProcessExitError({\n              operation,\n              command: \"git write-tree\",\n              cwd: input.cwd,\n              exitCode: 0,\n              detail: \"git write-tree returned an empty tree oid.\",\n            });\n          }\n\n          const message = `salchi attributed checkpoint ref=${input.checkpointRef}`;\n          const commitTreeResult = yield* execute({\n            operation,\n            cwd: input.cwd,\n            args: [\"commit-tree\", treeOid, \"-m\", message],\n            env: commitEnv,\n          });\n          const commitOid = commitTreeResult.stdout.trim();\n          if (commitOid.length === 0) {\n            return yield* new VcsProcessExitError({\n              operation,\n              command: \"git commit-tree\",\n              cwd: input.cwd,\n              exitCode: 0,\n              detail: \"git commit-tree returned an empty commit oid.\",\n            });\n          }\n\n          yield* execute({\n            operation,\n            cwd: input.cwd,\n            args: [\"update-ref\", input.checkpointRef, commitOid],\n          });\n        }).pipe(Effect.ensuring(cleanupTempIndex));\n      },\n    ),\n\n    hasCheckpointRef: (input) =>\n      resolveCheckpointCommit(input.cwd, input.checkpointRef).pipe(\n        Effect.map((commit) => commit !== null),\n      ),\n\n    restoreCheckpoint: Effect.fn(\"GitVcsDriver.checkpoints.restoreCheckpoint\")(function* (input) {\n      const operation = \"GitVcsDriver.checkpoints.restoreCheckpoint\";\n\n      let commitOid = yield* resolveCheckpointCommit(input.cwd, input.checkpointRef);\n\n      if (!commitOid && input.fallbackToHead === true) {\n        commitOid = yield* resolveHeadCommit(input.cwd);\n      }\n\n      if (!commitOid) {\n        return false;\n      }\n\n      yield* execute({\n        operation,\n        cwd: input.cwd,\n        args: [\"restore\", \"--source\", commitOid, \"--worktree\", \"--staged\", \"--\", \".\"],\n      });\n      yield* execute({\n        operation,\n        cwd: input.cwd,\n        args: [\"clean\", \"-fd\", \"--\", \".\"],\n      });\n\n      const headExists = yield* hasHeadCommit(input.cwd);\n      if (headExists) {\n        yield* execute({\n          operation,\n          cwd: input.cwd,\n          args: [\"reset\", \"--quiet\", \"--\", \".\"],\n        });\n      }\n\n      return true;\n    }),\n\n    diffCheckpoints: Effect.fn(\"GitVcsDriver.checkpoints.diffCheckpoints\")(function* (input) {\n      const operation = \"GitVcsDriver.checkpoints.diffCheckpoints\";\n      yield* Effect.annotateCurrentSpan({\n        \"checkpoint.cwd\": input.cwd,\n        \"checkpoint.from_ref\": input.fromCheckpointRef,\n        \"checkpoint.to_ref\": input.toCheckpointRef,\n        \"checkpoint.ignore_whitespace\": input.ignoreWhitespace,\n        \"checkpoint.fallback_from_to_head\": input.fallbackFromToHead,\n      });\n\n      let fromRevision: string = input.fromCheckpointRef;\n      if (input.fallbackFromToHead === true) {\n        const resolvedFromCommit = yield* resolveCheckpointCommit(\n          input.cwd,\n          input.fromCheckpointRef,\n        );\n        if (resolvedFromCommit) {\n          fromRevision = resolvedFromCommit;\n        } else {\n          const headCommit = yield* resolveHeadCommit(input.cwd);\n          if (!headCommit) {\n            return yield* new VcsProcessExitError({\n              operation,\n              command: \"git diff\",\n              cwd: input.cwd,\n              exitCode: 1,\n              detail: \"Checkpoint ref is unavailable for diff operation.\",\n            });\n          }\n          fromRevision = headCommit;\n        }\n      }\n\n      const result = yield* execute({\n        operation,\n        cwd: input.cwd,\n        args: [\n          \"diff\",\n          \"--patch\",\n          \"--no-color\",\n          \"--no-ext-diff\",\n          \"--no-textconv\",\n          ...(input.ignoreWhitespace ? [\"--ignore-all-space\"] : []),\n          `${fromRevision}^{commit}`,\n          `${input.toCheckpointRef}^{commit}`,\n          ...(input.paths &&\n          input.paths.length > 0 &&\n          input.paths.length <= CHECKPOINT_DIFF_PATHSPEC_LIMIT\n            ? [\"--\", ...input.paths]\n            : []),\n        ],\n        allowNonZeroExit: true,\n        maxOutputBytes: CHECKPOINT_DIFF_MAX_OUTPUT_BYTES,\n      });\n\n      if (result.exitCode !== 0) {\n        return yield* new VcsProcessExitError({\n          operation,\n          command: \"git diff\",\n          cwd: input.cwd,\n          exitCode: result.exitCode,\n          detail: result.stderr.trim() || \"Checkpoint ref is unavailable for diff operation.\",\n        });\n      }\n\n      return result.stdout;\n    }),\n\n    hashFileBlob: Effect.fn(\"GitVcsDriver.checkpoints.hashFileBlob\")(function* (input) {\n      const operation = \"GitVcsDriver.checkpoints.hashFileBlob\";\n      const result = yield* execute({\n        operation,\n        cwd: input.cwd,\n        args: [\"hash-object\", \"-w\", \"--\", input.path],\n        allowNonZeroExit: true,\n      });\n      if (result.exitCode !== 0) {\n        return null;\n      }\n\n      const blobSha = result.stdout.trim();\n      if (blobSha.length === 0) {\n        return yield* new VcsProcessExitError({\n          operation,\n          command: \"git hash-object\",\n          cwd: input.cwd,\n          exitCode: 0,\n          detail: \"git hash-object returned an empty blob sha.\",\n        });\n      }\n      return blobSha;\n    }),\n\n    readCheckpointFileBlob: Effect.fn(\"GitVcsDriver.checkpoints.readCheckpointFileBlob\")(\n      function* (input) {\n        const result = yield* execute({\n          operation: \"GitVcsDriver.checkpoints.readCheckpointFileBlob\",\n          cwd: input.cwd,\n          args: [\"ls-tree\", \"-z\", `${input.checkpointRef}^{commit}`, \"--\", input.path],\n          allowNonZeroExit: true,\n        });\n        if (result.exitCode !== 0 || result.stdout.length === 0) {\n          return null;\n        }\n\n        const firstEntry = result.stdout.split(\"\\0\")[0] ?? \"\";\n        const metadata = firstEntry.split(\"\\t\")[0] ?? \"\";\n        const parts = metadata.split(\" \");\n        return parts[2]?.trim() || null;\n      },\n    ),\n\n    deleteCheckpointRefs: Effect.fn(\"GitVcsDriver.checkpoints.deleteCheckpointRefs\")(\n      function* (input) {\n        yield* Effect.forEach(\n          input.checkpointRefs,\n          (checkpointRef) =>\n            execute({\n              operation: \"GitVcsDriver.checkpoints.deleteCheckpointRefs\",\n              cwd: input.cwd,\n              args: [\"update-ref\", \"-d\", checkpointRef],\n              allowNonZeroExit: true,\n            }),\n          { discard: true },\n        );\n      },\n    ),\n  };\n\n  return VcsDriver.VcsDriver.of({\n    capabilities,\n    execute,\n    checkpoints,\n    detectRepository,\n    isInsideWorkTree,\n    listWorkspaceFiles,\n    listRemotes,\n    filterIgnoredPaths,\n    initRepository,\n  });\n});\n\nexport const makeVcsDriver = Effect.fn(\"makeGitVcsDriver\")(function* () {\n  const driver = yield* makeVcsDriverShape();\n  return VcsDriver.VcsDriver.of(driver);\n});\n\nexport const make = Effect.fn(\"makeGitVcsDriverService\")(function* () {\n  const git = yield* GitVcsDriverCore.makeGitVcsDriverCore();\n  return GitVcsDriver.of(git);\n});\n\nexport const vcsLayer = Layer.effect(VcsDriver.VcsDriver, makeVcsDriver());\nexport const layer = Layer.effect(GitVcsDriver, make());\n","import * as Cause from \"effect/Cause\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport { PositiveInt, TrimmedNonEmptyString } from \"@salchi/contracts\";\nimport { decodeJsonResult, formatSchemaError } from \"@salchi/shared/schemaJson\";\n\nexport interface NormalizedAzureDevOpsPullRequestRecord {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state: \"open\" | \"closed\" | \"merged\";\n  readonly updatedAt: Option.Option<DateTime.Utc>;\n}\n\nconst AzureDevOpsPullRequestSchema = Schema.Struct({\n  pullRequestId: PositiveInt,\n  title: TrimmedNonEmptyString,\n  url: Schema.optional(Schema.String),\n  repository: Schema.optional(\n    Schema.Struct({\n      name: Schema.optional(Schema.String),\n      webUrl: Schema.optional(Schema.String),\n      project: Schema.optional(\n        Schema.Struct({\n          name: Schema.optional(Schema.String),\n        }),\n      ),\n    }),\n  ),\n  sourceRefName: TrimmedNonEmptyString,\n  targetRefName: TrimmedNonEmptyString,\n  status: Schema.String,\n  creationDate: Schema.optional(Schema.OptionFromNullOr(Schema.DateTimeUtcFromString)),\n  closedDate: Schema.optional(Schema.OptionFromNullOr(Schema.DateTimeUtcFromString)),\n  _links: Schema.optional(\n    Schema.Struct({\n      web: Schema.optional(\n        Schema.Struct({\n          href: Schema.String,\n        }),\n      ),\n    }),\n  ),\n});\n\nfunction trimOptionalString(value: string | null | undefined): string | null {\n  const trimmed = value?.trim() ?? \"\";\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeRefName(refName: string): string {\n  return refName.trim().replace(/^refs\\/heads\\//, \"\");\n}\n\nfunction normalizeAzureDevOpsPullRequestState(status: string): \"open\" | \"closed\" | \"merged\" {\n  switch (status.trim().toLowerCase()) {\n    case \"completed\":\n      return \"merged\";\n    case \"abandoned\":\n      return \"closed\";\n    default:\n      return \"open\";\n  }\n}\n\nfunction encodeAzureDevOpsPathSegment(segment: string): string {\n  return encodeURIComponent(segment);\n}\n\nfunction azureDevOpsOrganizationBaseFromRestApiUrl(\n  value: string | null | undefined,\n): string | null {\n  const rawUrl = trimOptionalString(value);\n  if (!rawUrl) {\n    return null;\n  }\n\n  try {\n    const url = new URL(rawUrl);\n    const hostname = url.hostname.toLowerCase();\n    const pathSegments = url.pathname.split(\"/\").filter((segment) => segment.length > 0);\n    const isAzureRestUrl = pathSegments.some((segment) => segment.toLowerCase() === \"_apis\");\n    if (!isAzureRestUrl) {\n      return null;\n    }\n\n    if (hostname === \"dev.azure.com\") {\n      const organization = pathSegments[0];\n      return organization ? `${url.origin}/${organization}` : null;\n    }\n\n    if (hostname.endsWith(\".visualstudio.com\")) {\n      return url.origin;\n    }\n\n    return null;\n  } catch {\n    return null;\n  }\n}\n\nfunction normalizeAzureDevOpsPullRequestUrl(\n  raw: Schema.Schema.Type<typeof AzureDevOpsPullRequestSchema>,\n): string {\n  const webLink = trimOptionalString(raw._links?.web?.href);\n  if (webLink) {\n    return webLink;\n  }\n\n  const repositoryWebUrl = trimOptionalString(raw.repository?.webUrl);\n  if (repositoryWebUrl) {\n    return `${repositoryWebUrl.replace(/\\/+$/, \"\")}/pullrequest/${raw.pullRequestId}`;\n  }\n\n  const organizationBase = azureDevOpsOrganizationBaseFromRestApiUrl(raw.url);\n  const projectName = trimOptionalString(raw.repository?.project?.name);\n  const repositoryName = trimOptionalString(raw.repository?.name);\n  if (organizationBase && projectName && repositoryName) {\n    const encodedProjectName = encodeAzureDevOpsPathSegment(projectName);\n    const encodedRepositoryName = encodeAzureDevOpsPathSegment(repositoryName);\n    return `${organizationBase}/${encodedProjectName}/_git/${encodedRepositoryName}/pullrequest/${raw.pullRequestId}`;\n  }\n\n  return trimOptionalString(raw.url) ?? \"\";\n}\n\nfunction normalizeAzureDevOpsPullRequestRecord(\n  raw: Schema.Schema.Type<typeof AzureDevOpsPullRequestSchema>,\n): NormalizedAzureDevOpsPullRequestRecord {\n  return {\n    number: raw.pullRequestId,\n    title: raw.title,\n    url: normalizeAzureDevOpsPullRequestUrl(raw),\n    baseRefName: normalizeRefName(raw.targetRefName),\n    headRefName: normalizeRefName(raw.sourceRefName),\n    state: normalizeAzureDevOpsPullRequestState(raw.status),\n    updatedAt: (raw.closedDate ?? Option.none()).pipe(\n      Option.orElse(() => raw.creationDate ?? Option.none()),\n    ),\n  };\n}\n\nconst decodeAzureDevOpsPullRequestList = decodeJsonResult(Schema.Array(Schema.Unknown));\nconst decodeAzureDevOpsPullRequest = decodeJsonResult(AzureDevOpsPullRequestSchema);\nconst decodeAzureDevOpsPullRequestEntry = Schema.decodeUnknownExit(AzureDevOpsPullRequestSchema);\n\nexport const formatAzureDevOpsJsonDecodeError = formatSchemaError;\n\nexport function decodeAzureDevOpsPullRequestListJson(\n  raw: string,\n): Result.Result<\n  ReadonlyArray<NormalizedAzureDevOpsPullRequestRecord>,\n  Cause.Cause<Schema.SchemaError>\n> {\n  const result = decodeAzureDevOpsPullRequestList(raw);\n  if (Result.isSuccess(result)) {\n    const pullRequests: NormalizedAzureDevOpsPullRequestRecord[] = [];\n    for (const entry of result.success) {\n      const decodedEntry = decodeAzureDevOpsPullRequestEntry(entry);\n      if (Exit.isFailure(decodedEntry)) {\n        continue;\n      }\n      pullRequests.push(normalizeAzureDevOpsPullRequestRecord(decodedEntry.value));\n    }\n    return Result.succeed(pullRequests);\n  }\n  return Result.fail(result.failure);\n}\n\nexport function decodeAzureDevOpsPullRequestJson(\n  raw: string,\n): Result.Result<NormalizedAzureDevOpsPullRequestRecord, Cause.Cause<Schema.SchemaError>> {\n  const result = decodeAzureDevOpsPullRequest(raw);\n  if (Result.isSuccess(result)) {\n    return Result.succeed(normalizeAzureDevOpsPullRequestRecord(result.success));\n  }\n  return Result.fail(result.failure);\n}\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport type {\n  ChangeRequest,\n  ChangeRequestState,\n  SourceControlProviderError,\n  SourceControlProviderInfo,\n  SourceControlProviderKind,\n  SourceControlRepositoryCloneUrls,\n  SourceControlRepositoryVisibility,\n} from \"@salchi/contracts\";\n\nexport interface SourceControlProviderContext {\n  readonly provider: SourceControlProviderInfo;\n  readonly remoteName: string;\n  readonly remoteUrl: string;\n}\n\nexport interface SourceControlRefSelector {\n  readonly refName: string;\n  readonly owner?: string;\n  readonly repository?: string;\n}\n\nexport function parseSourceControlOwnerRef(\n  headSelector: string,\n): SourceControlRefSelector | undefined {\n  const match = /^([^:/\\s]+):(.+)$/u.exec(headSelector.trim());\n  const owner = match?.[1]?.trim();\n  const refName = match?.[2]?.trim();\n  return owner && refName ? { owner, refName } : undefined;\n}\n\nexport function normalizeSourceBranch(headSelector: string): string {\n  return parseSourceControlOwnerRef(headSelector)?.refName ?? headSelector.trim();\n}\n\nexport function sourceBranch(input: {\n  readonly headSelector: string;\n  readonly source?: SourceControlRefSelector;\n}): string {\n  return input.source?.refName ?? normalizeSourceBranch(input.headSelector);\n}\n\nexport function sourceControlRefFromInput(input: {\n  readonly headSelector: string;\n  readonly source?: SourceControlRefSelector;\n}): SourceControlRefSelector | undefined {\n  return input.source ?? parseSourceControlOwnerRef(input.headSelector);\n}\n\nexport interface SourceControlProviderShape {\n  readonly kind: SourceControlProviderKind;\n  readonly listChangeRequests: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProviderContext;\n    readonly source?: SourceControlRefSelector;\n    readonly headSelector: string;\n    readonly state: ChangeRequestState | \"all\";\n    readonly limit?: number;\n  }) => Effect.Effect<ReadonlyArray<ChangeRequest>, SourceControlProviderError>;\n  readonly getChangeRequest: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProviderContext;\n    readonly reference: string;\n  }) => Effect.Effect<ChangeRequest, SourceControlProviderError>;\n  readonly createChangeRequest: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProviderContext;\n    readonly source?: SourceControlRefSelector;\n    readonly target?: SourceControlRefSelector;\n    readonly baseRefName: string;\n    readonly headSelector: string;\n    readonly title: string;\n    readonly bodyFile: string;\n  }) => Effect.Effect<void, SourceControlProviderError>;\n  readonly getRepositoryCloneUrls: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProviderContext;\n    readonly repository: string;\n  }) => Effect.Effect<SourceControlRepositoryCloneUrls, SourceControlProviderError>;\n  readonly createRepository: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n    readonly visibility: SourceControlRepositoryVisibility;\n  }) => Effect.Effect<SourceControlRepositoryCloneUrls, SourceControlProviderError>;\n  readonly getDefaultBranch: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProviderContext;\n  }) => Effect.Effect<string | null, SourceControlProviderError>;\n  readonly checkoutChangeRequest: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProviderContext;\n    readonly reference: string;\n    readonly force?: boolean;\n  }) => Effect.Effect<void, SourceControlProviderError>;\n}\n\nexport class SourceControlProvider extends Context.Service<\n  SourceControlProvider,\n  SourceControlProviderShape\n>()(\"salchi/sourceControl/SourceControlProvider\") {}\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport {\n  TrimmedNonEmptyString,\n  type SourceControlRepositoryVisibility,\n  type VcsError,\n} from \"@salchi/contracts\";\n\nimport * as VcsProcess from \"../vcs/VcsProcess.ts\";\nimport * as AzureDevOpsPullRequests from \"./azureDevOpsPullRequests.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport class AzureDevOpsCliError extends Schema.TaggedErrorClass<AzureDevOpsCliError>()(\n  \"AzureDevOpsCliError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Azure DevOps CLI failed in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport interface AzureDevOpsRepositoryCloneUrls {\n  readonly nameWithOwner: string;\n  readonly url: string;\n  readonly sshUrl: string;\n}\n\nexport interface AzureDevOpsCliShape {\n  readonly execute: (input: {\n    readonly cwd: string;\n    readonly args: ReadonlyArray<string>;\n    readonly timeoutMs?: number;\n  }) => Effect.Effect<VcsProcess.VcsProcessOutput, AzureDevOpsCliError>;\n\n  readonly listPullRequests: (input: {\n    readonly cwd: string;\n    readonly headSelector: string;\n    readonly source?: SourceControlProvider.SourceControlRefSelector;\n    readonly state: \"open\" | \"closed\" | \"merged\" | \"all\";\n    readonly limit?: number;\n  }) => Effect.Effect<\n    ReadonlyArray<AzureDevOpsPullRequests.NormalizedAzureDevOpsPullRequestRecord>,\n    AzureDevOpsCliError\n  >;\n\n  readonly getPullRequest: (input: {\n    readonly cwd: string;\n    readonly reference: string;\n  }) => Effect.Effect<\n    AzureDevOpsPullRequests.NormalizedAzureDevOpsPullRequestRecord,\n    AzureDevOpsCliError\n  >;\n\n  readonly getRepositoryCloneUrls: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n  }) => Effect.Effect<AzureDevOpsRepositoryCloneUrls, AzureDevOpsCliError>;\n\n  readonly createRepository: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n    readonly visibility: SourceControlRepositoryVisibility;\n  }) => Effect.Effect<AzureDevOpsRepositoryCloneUrls, AzureDevOpsCliError>;\n\n  readonly createPullRequest: (input: {\n    readonly cwd: string;\n    readonly baseBranch: string;\n    readonly headSelector: string;\n    readonly source?: SourceControlProvider.SourceControlRefSelector;\n    readonly target?: SourceControlProvider.SourceControlRefSelector;\n    readonly title: string;\n    readonly bodyFile: string;\n  }) => Effect.Effect<void, AzureDevOpsCliError>;\n\n  readonly getDefaultBranch: (input: {\n    readonly cwd: string;\n  }) => Effect.Effect<string | null, AzureDevOpsCliError>;\n\n  readonly checkoutPullRequest: (input: {\n    readonly cwd: string;\n    readonly reference: string;\n    readonly remoteName?: string;\n  }) => Effect.Effect<void, AzureDevOpsCliError>;\n}\n\nexport class AzureDevOpsCli extends Context.Service<AzureDevOpsCli, AzureDevOpsCliShape>()(\n  \"salchi/sourceControl/AzureDevOpsCli\",\n) {}\n\nfunction errorText(error: VcsError | unknown): string {\n  if (typeof error === \"object\" && error !== null) {\n    const tag = \"_tag\" in error && typeof error._tag === \"string\" ? error._tag : \"\";\n    const detail = \"detail\" in error && typeof error.detail === \"string\" ? error.detail : \"\";\n    const message = \"message\" in error && typeof error.message === \"string\" ? error.message : \"\";\n    return [tag, detail, message].filter(Boolean).join(\"\\n\");\n  }\n\n  return String(error);\n}\n\nfunction normalizeAzureDevOpsCliError(\n  operation: \"execute\",\n  error: VcsError | unknown,\n): AzureDevOpsCliError {\n  const text = errorText(error);\n  const lower = text.toLowerCase();\n\n  if (lower.includes(\"command not found: az\") || lower.includes(\"enoent\")) {\n    return new AzureDevOpsCliError({\n      operation,\n      detail:\n        \"Azure CLI (`az`) with the Azure DevOps extension is required but not available on PATH.\",\n      cause: error,\n    });\n  }\n\n  if (\n    lower.includes(\"az devops login\") ||\n    lower.includes(\"please run az login\") ||\n    lower.includes(\"not logged in\") ||\n    lower.includes(\"authentication failed\") ||\n    lower.includes(\"unauthorized\")\n  ) {\n    return new AzureDevOpsCliError({\n      operation,\n      detail: \"Azure DevOps CLI is not authenticated. Run `az devops login` and retry.\",\n      cause: error,\n    });\n  }\n\n  if (\n    lower.includes(\"pull request\") &&\n    (lower.includes(\"not found\") || lower.includes(\"does not exist\"))\n  ) {\n    return new AzureDevOpsCliError({\n      operation,\n      detail: \"Pull request not found. Check the PR number or URL and try again.\",\n      cause: error,\n    });\n  }\n\n  return new AzureDevOpsCliError({\n    operation,\n    detail: text,\n    cause: error,\n  });\n}\n\nfunction normalizeChangeRequestId(reference: string): string {\n  const trimmed = reference.trim().replace(/^#/, \"\");\n  const urlMatch = /(?:pullrequest|pull-request|pull|_pulls?)\\/(\\d+)(?:\\D.*)?$/i.exec(trimmed);\n  return urlMatch?.[1] ?? trimmed;\n}\n\nfunction toAzureStatus(state: \"open\" | \"closed\" | \"merged\" | \"all\"): string {\n  switch (state) {\n    case \"open\":\n      return \"active\";\n    case \"closed\":\n      return \"abandoned\";\n    case \"merged\":\n      return \"completed\";\n    case \"all\":\n      return \"all\";\n  }\n}\n\nconst RawAzureDevOpsRepositorySchema = Schema.Struct({\n  name: TrimmedNonEmptyString,\n  webUrl: TrimmedNonEmptyString,\n  remoteUrl: TrimmedNonEmptyString,\n  sshUrl: TrimmedNonEmptyString,\n  project: Schema.optional(\n    Schema.Struct({\n      name: TrimmedNonEmptyString,\n    }),\n  ),\n  defaultBranch: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nfunction normalizeDefaultBranch(value: string | null | undefined): string | null {\n  const trimmed = value?.trim().replace(/^refs\\/heads\\//, \"\") ?? \"\";\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeRepositoryCloneUrls(\n  raw: Schema.Schema.Type<typeof RawAzureDevOpsRepositorySchema>,\n): AzureDevOpsRepositoryCloneUrls {\n  const projectName = raw.project?.name.trim();\n  return {\n    nameWithOwner: projectName ? `${projectName}/${raw.name}` : raw.name,\n    url: raw.remoteUrl,\n    sshUrl: raw.sshUrl,\n  };\n}\n\nfunction parseRepositorySpecifier(repository: string): {\n  readonly project: string | null;\n  readonly name: string;\n} {\n  const parts: Array<string> = [];\n  for (const part of repository.split(\"/\")) {\n    const trimmed = part.trim();\n    if (trimmed.length > 0) {\n      parts.push(trimmed);\n    }\n  }\n  return {\n    project: parts.length > 1 ? (parts.at(-2) ?? null) : null,\n    name: parts.at(-1) ?? repository.trim(),\n  };\n}\n\nfunction decodeAzureDevOpsJson<S extends Schema.Top>(\n  raw: string,\n  schema: S,\n  operation: \"getRepositoryCloneUrls\" | \"getDefaultBranch\" | \"createRepository\",\n  invalidDetail: string,\n): Effect.Effect<S[\"Type\"], AzureDevOpsCliError, S[\"DecodingServices\"]> {\n  return Schema.decodeEffect(Schema.fromJsonString(schema))(raw).pipe(\n    Effect.mapError(\n      (error) =>\n        new AzureDevOpsCliError({\n          operation,\n          detail: `${invalidDetail}: ${SchemaIssue.makeFormatterDefault()(error.issue)}`,\n          cause: error,\n        }),\n    ),\n  );\n}\n\nexport const make = Effect.fn(\"makeAzureDevOpsCli\")(function* () {\n  const process = yield* VcsProcess.VcsProcess;\n\n  const execute: AzureDevOpsCliShape[\"execute\"] = (input) =>\n    process\n      .run({\n        operation: \"AzureDevOpsCli.execute\",\n        command: \"az\",\n        args: input.args,\n        cwd: input.cwd,\n        timeoutMs: input.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n      })\n      .pipe(Effect.mapError((error) => normalizeAzureDevOpsCliError(\"execute\", error)));\n\n  const executeJson = (input: Parameters<AzureDevOpsCliShape[\"execute\"]>[0]) =>\n    execute({\n      ...input,\n      args: [...input.args, \"--only-show-errors\", \"--output\", \"json\"],\n    });\n\n  return AzureDevOpsCli.of({\n    execute,\n    listPullRequests: (input) =>\n      executeJson({\n        cwd: input.cwd,\n        args: [\n          \"repos\",\n          \"pr\",\n          \"list\",\n          \"--detect\",\n          \"true\",\n          \"--source-branch\",\n          SourceControlProvider.sourceBranch(input),\n          \"--status\",\n          toAzureStatus(input.state),\n          \"--top\",\n          String(input.limit ?? 20),\n        ],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          raw.length === 0\n            ? Effect.succeed([])\n            : Effect.sync(() =>\n                AzureDevOpsPullRequests.decodeAzureDevOpsPullRequestListJson(raw),\n              ).pipe(\n                Effect.flatMap((decoded) => {\n                  if (!Result.isSuccess(decoded)) {\n                    return Effect.fail(\n                      new AzureDevOpsCliError({\n                        operation: \"listPullRequests\",\n                        detail: `Azure DevOps CLI returned invalid PR list JSON: ${AzureDevOpsPullRequests.formatAzureDevOpsJsonDecodeError(decoded.failure)}`,\n                        cause: decoded.failure,\n                      }),\n                    );\n                  }\n\n                  return Effect.succeed(decoded.success);\n                }),\n              ),\n        ),\n      ),\n    getPullRequest: (input) =>\n      executeJson({\n        cwd: input.cwd,\n        args: [\n          \"repos\",\n          \"pr\",\n          \"show\",\n          \"--detect\",\n          \"true\",\n          \"--id\",\n          normalizeChangeRequestId(input.reference),\n        ],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          Effect.sync(() => AzureDevOpsPullRequests.decodeAzureDevOpsPullRequestJson(raw)).pipe(\n            Effect.flatMap((decoded) => {\n              if (!Result.isSuccess(decoded)) {\n                return Effect.fail(\n                  new AzureDevOpsCliError({\n                    operation: \"getPullRequest\",\n                    detail: `Azure DevOps CLI returned invalid pull request JSON: ${AzureDevOpsPullRequests.formatAzureDevOpsJsonDecodeError(decoded.failure)}`,\n                    cause: decoded.failure,\n                  }),\n                );\n              }\n\n              return Effect.succeed(decoded.success);\n            }),\n          ),\n        ),\n      ),\n    getRepositoryCloneUrls: (input) =>\n      executeJson({\n        cwd: input.cwd,\n        args: [\"repos\", \"show\", \"--detect\", \"true\", \"--repository\", input.repository],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeAzureDevOpsJson(\n            raw,\n            RawAzureDevOpsRepositorySchema,\n            \"getRepositoryCloneUrls\",\n            \"Azure DevOps CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map(normalizeRepositoryCloneUrls),\n      ),\n    createRepository: (input) => {\n      const repository = parseRepositorySpecifier(input.repository);\n      // Azure Repos access is governed by project/organization permissions.\n      // `az repos create` does not expose a per-repository visibility flag, so\n      // the generic source-control visibility input is intentionally not\n      // translated into CLI args for this provider.\n      return executeJson({\n        cwd: input.cwd,\n        args: [\n          \"repos\",\n          \"create\",\n          \"--detect\",\n          \"true\",\n          \"--name\",\n          repository.name,\n          ...(repository.project ? [\"--project\", repository.project] : []),\n        ],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeAzureDevOpsJson(\n            raw,\n            RawAzureDevOpsRepositorySchema,\n            \"createRepository\",\n            \"Azure DevOps CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map(normalizeRepositoryCloneUrls),\n      );\n    },\n    createPullRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"repos\",\n          \"pr\",\n          \"create\",\n          \"--only-show-errors\",\n          \"--detect\",\n          \"true\",\n          \"--target-branch\",\n          input.target?.refName ?? input.baseBranch,\n          \"--source-branch\",\n          SourceControlProvider.sourceBranch(input),\n          \"--title\",\n          input.title,\n          \"--description\",\n          `@${input.bodyFile}`,\n        ],\n      }).pipe(Effect.asVoid),\n    getDefaultBranch: (input) =>\n      executeJson({\n        cwd: input.cwd,\n        args: [\"repos\", \"show\", \"--detect\", \"true\"],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeAzureDevOpsJson(\n            raw,\n            RawAzureDevOpsRepositorySchema,\n            \"getDefaultBranch\",\n            \"Azure DevOps CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map((repo) => normalizeDefaultBranch(repo.defaultBranch)),\n      ),\n    checkoutPullRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"repos\",\n          \"pr\",\n          \"checkout\",\n          \"--only-show-errors\",\n          \"--detect\",\n          \"true\",\n          \"--id\",\n          normalizeChangeRequestId(input.reference),\n          \"--remote-name\",\n          input.remoteName ?? \"origin\",\n        ],\n      }).pipe(Effect.asVoid),\n  });\n});\n\nexport const layer = Layer.effect(AzureDevOpsCli, make());\n","import type {\n  SourceControlProviderAuth,\n  SourceControlProviderDiscoveryItem,\n  SourceControlProviderInfo,\n  SourceControlProviderKind,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\n\nimport type * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport type * as VcsProcess from \"../vcs/VcsProcess.ts\";\n\nexport interface SourceControlAuthProbeInput {\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly exitCode: VcsProcess.VcsProcessOutput[\"exitCode\"];\n}\n\nexport interface SourceControlUnknownRemoteRefinementInput {\n  readonly cwd: string;\n  readonly context: SourceControlProvider.SourceControlProviderContext;\n  readonly auth: SourceControlAuthProbeInput;\n}\n\ninterface SourceControlDiscoverySpecBase {\n  readonly kind: SourceControlProviderKind;\n  readonly label: string;\n  readonly installHint: string;\n}\n\nexport type SourceControlCliDiscoverySpec = SourceControlDiscoverySpecBase & {\n  readonly type: \"cli\";\n  readonly executable: string;\n  readonly versionArgs: ReadonlyArray<string>;\n  readonly authArgs: ReadonlyArray<string>;\n  readonly parseAuth: (input: SourceControlAuthProbeInput) => SourceControlProviderAuth;\n  readonly refineUnknownRemote?: (\n    input: SourceControlUnknownRemoteRefinementInput,\n  ) => SourceControlProviderInfo | null;\n};\n\nexport type SourceControlApiDiscoverySpec = SourceControlDiscoverySpecBase & {\n  readonly type: \"api\";\n  readonly probeAuth: Effect.Effect<SourceControlProviderAuth, never>;\n};\n\nexport type SourceControlProviderDiscoverySpec =\n  | SourceControlCliDiscoverySpec\n  | SourceControlApiDiscoverySpec;\n\ntype SourceControlCliRemoteRefinementSpec = SourceControlCliDiscoverySpec & {\n  readonly refineUnknownRemote: NonNullable<SourceControlCliDiscoverySpec[\"refineUnknownRemote\"]>;\n};\n\ninterface DiscoveryProbeResult {\n  readonly kind: SourceControlProviderKind;\n  readonly label: string;\n  readonly executable: string;\n  readonly status: \"available\" | \"missing\";\n  readonly version: Option.Option<string>;\n  readonly installHint: string;\n  readonly detail: Option.Option<string>;\n}\n\nexport function firstNonEmptyLine(text: string): Option.Option<string> {\n  const line = text\n    .split(/\\r?\\n/)\n    .map((entry) => entry.trim())\n    .find((entry) => entry.length > 0);\n  return line === undefined ? Option.none() : Option.some(line);\n}\n\nexport function detailFromCause(cause: unknown): Option.Option<string> {\n  if (cause instanceof Error && cause.message.trim().length > 0) {\n    return Option.some(cause.message.trim());\n  }\n  return Option.none();\n}\n\nfunction authAccount(account: string | undefined): Option.Option<string> {\n  const trimmed = account?.trim();\n  return trimmed === undefined || trimmed.length === 0 ? Option.none() : Option.some(trimmed);\n}\n\nfunction authHost(host: string | undefined): Option.Option<string> {\n  const trimmed = host?.trim();\n  return trimmed === undefined || trimmed.length === 0 ? Option.none() : Option.some(trimmed);\n}\n\nfunction authDetail(detail: string | undefined): Option.Option<string> {\n  const trimmed = detail?.trim();\n  return trimmed === undefined || trimmed.length === 0 ? Option.none() : Option.some(trimmed);\n}\n\nexport function providerAuth(input: {\n  readonly status: SourceControlProviderAuth[\"status\"];\n  readonly account?: string | undefined;\n  readonly host?: string | undefined;\n  readonly detail?: string | undefined;\n}): SourceControlProviderAuth {\n  return {\n    status: input.status,\n    account: authAccount(input.account),\n    host: authHost(input.host),\n    detail: authDetail(input.detail),\n  };\n}\n\nexport function unknownAuth(detail?: string): SourceControlProviderAuth {\n  return providerAuth({ status: \"unknown\", detail });\n}\n\nexport function combinedAuthOutput(input: SourceControlAuthProbeInput): string {\n  const parts: string[] = [];\n  for (const entry of [input.stdout, input.stderr]) {\n    if (entry.trim().length > 0) {\n      parts.push(entry);\n    }\n  }\n  return parts.join(\"\\n\");\n}\n\nfunction sanitizedAuthLines(text: string): ReadonlyArray<string> {\n  const lines: string[] = [];\n  for (const entry of text.split(/\\r?\\n/)) {\n    const line = entry.trim();\n    if (line.length === 0) continue;\n    if (/^[-\\s]*token(?:\\s+scopes?)?:/iu.test(line)) continue;\n    lines.push(line);\n  }\n  return lines;\n}\n\nexport function firstSafeAuthLine(text: string): string | undefined {\n  return sanitizedAuthLines(text)[0];\n}\n\nexport function parseCliHost(text: string): string | undefined {\n  return sanitizedAuthLines(text)\n    .map((line) => line.replace(/^[^a-z0-9]+/iu, \"\"))\n    .find((line) => /^[a-z0-9][a-z0-9.-]*(?::\\d+)?$/iu.test(line));\n}\n\nexport function matchFirst(text: string, patterns: ReadonlyArray<RegExp>): string | undefined {\n  for (const pattern of patterns) {\n    const match = pattern.exec(text);\n    const value = match?.[1]?.trim();\n    if (value && value.length > 0) return value;\n  }\n  return undefined;\n}\n\nfunction isCliRemoteRefinementSpec(\n  spec: SourceControlProviderDiscoverySpec,\n): spec is SourceControlCliRemoteRefinementSpec {\n  return spec.type === \"cli\" && spec.refineUnknownRemote !== undefined;\n}\n\nfunction probeCli(input: {\n  readonly spec: SourceControlCliDiscoverySpec;\n  readonly process: VcsProcess.VcsProcessShape;\n  readonly cwd: string;\n}): Effect.Effect<DiscoveryProbeResult> {\n  return input.process\n    .run({\n      operation: \"source-control.discovery.probe\",\n      command: input.spec.executable,\n      args: input.spec.versionArgs,\n      cwd: input.cwd,\n      timeoutMs: 5_000,\n      maxOutputBytes: 8_000,\n      appendTruncationMarker: true,\n    })\n    .pipe(\n      Effect.map(\n        (result) =>\n          ({\n            kind: input.spec.kind,\n            label: input.spec.label,\n            executable: input.spec.executable,\n            status: \"available\" as const,\n            version: Option.orElse(firstNonEmptyLine(result.stdout), () =>\n              firstNonEmptyLine(result.stderr),\n            ),\n            installHint: input.spec.installHint,\n            detail: Option.none<string>(),\n          }) satisfies DiscoveryProbeResult,\n      ),\n      Effect.catch((cause) =>\n        Effect.succeed({\n          kind: input.spec.kind,\n          label: input.spec.label,\n          executable: input.spec.executable,\n          status: \"missing\" as const,\n          version: Option.none<string>(),\n          installHint: input.spec.installHint,\n          detail: detailFromCause(cause),\n        } satisfies DiscoveryProbeResult),\n      ),\n    );\n}\n\nexport function probeSourceControlProvider(input: {\n  readonly spec: SourceControlProviderDiscoverySpec;\n  readonly process: VcsProcess.VcsProcessShape;\n  readonly cwd: string;\n}): Effect.Effect<SourceControlProviderDiscoveryItem> {\n  if (input.spec.type === \"api\") {\n    return input.spec.probeAuth.pipe(\n      Effect.map(\n        (auth) =>\n          ({\n            kind: input.spec.kind,\n            label: input.spec.label,\n            status: \"available\" as const,\n            version: Option.none<string>(),\n            installHint: input.spec.installHint,\n            detail: Option.none<string>(),\n            auth,\n          }) satisfies SourceControlProviderDiscoveryItem,\n      ),\n    );\n  }\n\n  const spec = input.spec;\n\n  return probeCli({\n    spec,\n    process: input.process,\n    cwd: input.cwd,\n  }).pipe(\n    Effect.flatMap((item) => {\n      if (item.status !== \"available\") {\n        return Effect.succeed({\n          ...item,\n          auth: unknownAuth(\"Hosting integration command was not found on the server PATH.\"),\n        } satisfies SourceControlProviderDiscoveryItem);\n      }\n\n      return input.process\n        .run({\n          operation: \"source-control.discovery.auth\",\n          command: spec.executable,\n          args: spec.authArgs,\n          cwd: input.cwd,\n          allowNonZeroExit: true,\n          timeoutMs: 5_000,\n          maxOutputBytes: 8_000,\n          appendTruncationMarker: true,\n        })\n        .pipe(\n          Effect.map(\n            (result) =>\n              ({\n                ...item,\n                auth: spec.parseAuth(result),\n              }) satisfies SourceControlProviderDiscoveryItem,\n          ),\n          Effect.catch((cause) =>\n            Effect.succeed({\n              ...item,\n              auth: unknownAuth(Option.getOrUndefined(detailFromCause(cause))),\n            } satisfies SourceControlProviderDiscoveryItem),\n          ),\n        );\n    }),\n  );\n}\n\nexport const refineUnknownRemoteProvider = Effect.fn(\"refineUnknownRemoteProvider\")(\n  function* (input: {\n    readonly specs: ReadonlyArray<SourceControlProviderDiscoverySpec>;\n    readonly process: VcsProcess.VcsProcessShape;\n    readonly cwd: string;\n    readonly context: SourceControlProvider.SourceControlProviderContext | null;\n  }): Effect.fn.Return<SourceControlProvider.SourceControlProviderContext | null> {\n    if (input.context === null || input.context.provider.kind !== \"unknown\") {\n      return input.context;\n    }\n    const context = input.context;\n\n    const providers = yield* Effect.forEach(input.specs.filter(isCliRemoteRefinementSpec), (spec) =>\n      input.process\n        .run({\n          operation: \"source-control.discovery.refine-unknown-remote\",\n          command: spec.executable,\n          args: spec.authArgs,\n          cwd: input.cwd,\n          allowNonZeroExit: true,\n          timeoutMs: 5_000,\n          maxOutputBytes: 8_000,\n          appendTruncationMarker: true,\n        })\n        .pipe(\n          Effect.map((auth) =>\n            spec.refineUnknownRemote({\n              cwd: input.cwd,\n              context,\n              auth,\n            }),\n          ),\n          Effect.catch(() => Effect.succeed(null)),\n        ),\n    );\n    const provider = providers.find((candidate) => candidate !== null);\n\n    return provider ? { ...context, provider } : context;\n  },\n);\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport { SourceControlProviderError, type ChangeRequest } from \"@salchi/contracts\";\n\nimport * as AzureDevOpsCli from \"./AzureDevOpsCli.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport * as SourceControlProviderDiscovery from \"./SourceControlProviderDiscovery.ts\";\n\nfunction providerError(\n  operation: string,\n  cause: AzureDevOpsCli.AzureDevOpsCliError,\n): SourceControlProviderError {\n  return new SourceControlProviderError({\n    provider: \"azure-devops\",\n    operation,\n    detail: cause.detail,\n    cause,\n  });\n}\n\nfunction parseAzureAuth(input: SourceControlProviderDiscovery.SourceControlAuthProbeInput) {\n  const account = input.stdout.trim().split(/\\r?\\n/)[0]?.trim();\n\n  if (input.exitCode !== 0) {\n    return SourceControlProviderDiscovery.providerAuth({\n      status: \"unauthenticated\",\n      detail:\n        SourceControlProviderDiscovery.firstSafeAuthLine(\n          SourceControlProviderDiscovery.combinedAuthOutput(input),\n        ) ?? \"Run `az login` to authenticate Azure CLI.\",\n    });\n  }\n\n  if (account !== undefined && account.length > 0) {\n    return SourceControlProviderDiscovery.providerAuth({\n      status: \"authenticated\",\n      account,\n      host: \"dev.azure.com\",\n    });\n  }\n\n  return SourceControlProviderDiscovery.providerAuth({\n    status: \"unknown\",\n    host: \"dev.azure.com\",\n    detail: \"Azure CLI account status could not be parsed.\",\n  });\n}\n\nexport const discovery = {\n  type: \"cli\",\n  kind: \"azure-devops\",\n  label: \"Azure DevOps\",\n  executable: \"az\",\n  versionArgs: [\"--version\"],\n  authArgs: [\"account\", \"show\", \"--query\", \"user.name\", \"-o\", \"tsv\"],\n  parseAuth: parseAzureAuth,\n  installHint:\n    \"Install the Azure command-line tools (`az`), then enable Azure DevOps support with `az extension add --name azure-devops`.\",\n} satisfies SourceControlProviderDiscovery.SourceControlCliDiscoverySpec;\n\nfunction toChangeRequest(summary: {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state: \"open\" | \"closed\" | \"merged\";\n  readonly updatedAt: ChangeRequest[\"updatedAt\"];\n}): ChangeRequest {\n  return {\n    provider: \"azure-devops\",\n    number: summary.number,\n    title: summary.title,\n    url: summary.url,\n    baseRefName: summary.baseRefName,\n    headRefName: summary.headRefName,\n    state: summary.state,\n    updatedAt: summary.updatedAt,\n    isCrossRepository: false,\n  };\n}\n\nexport const make = Effect.fn(\"makeAzureDevOpsSourceControlProvider\")(function* () {\n  const azure = yield* AzureDevOpsCli.AzureDevOpsCli;\n\n  return SourceControlProvider.SourceControlProvider.of({\n    kind: \"azure-devops\",\n    listChangeRequests: (input) => {\n      const source = SourceControlProvider.sourceControlRefFromInput(input);\n      return azure\n        .listPullRequests({\n          cwd: input.cwd,\n          headSelector: input.headSelector,\n          ...(source !== undefined ? { source } : {}),\n          state: input.state,\n          ...(input.limit !== undefined ? { limit: input.limit } : {}),\n        })\n        .pipe(\n          Effect.map((items) => items.map(toChangeRequest)),\n          Effect.mapError((error) => providerError(\"listChangeRequests\", error)),\n        );\n    },\n    getChangeRequest: (input) =>\n      azure.getPullRequest(input).pipe(\n        Effect.map(toChangeRequest),\n        Effect.mapError((error) => providerError(\"getChangeRequest\", error)),\n      ),\n    createChangeRequest: (input) => {\n      const source = SourceControlProvider.sourceControlRefFromInput(input);\n      return azure\n        .createPullRequest({\n          cwd: input.cwd,\n          baseBranch: input.baseRefName,\n          headSelector: input.headSelector,\n          ...(source !== undefined ? { source } : {}),\n          ...(input.target !== undefined ? { target: input.target } : {}),\n          title: input.title,\n          bodyFile: input.bodyFile,\n        })\n        .pipe(Effect.mapError((error) => providerError(\"createChangeRequest\", error)));\n    },\n    getRepositoryCloneUrls: (input) =>\n      azure\n        .getRepositoryCloneUrls(input)\n        .pipe(Effect.mapError((error) => providerError(\"getRepositoryCloneUrls\", error))),\n    createRepository: (input) =>\n      azure\n        .createRepository(input)\n        .pipe(Effect.mapError((error) => providerError(\"createRepository\", error))),\n    getDefaultBranch: (input) =>\n      azure\n        .getDefaultBranch({ cwd: input.cwd })\n        .pipe(Effect.mapError((error) => providerError(\"getDefaultBranch\", error))),\n    checkoutChangeRequest: (input) =>\n      azure\n        .checkoutPullRequest({\n          cwd: input.cwd,\n          reference: input.reference,\n          ...(input.context !== undefined ? { remoteName: input.context.remoteName } : {}),\n        })\n        .pipe(Effect.mapError((error) => providerError(\"checkoutChangeRequest\", error))),\n  });\n});\n\nexport const layer = Layer.effect(SourceControlProvider.SourceControlProvider, make());\n","import * as DateTime from \"effect/DateTime\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport { PositiveInt, TrimmedNonEmptyString } from \"@salchi/contracts\";\n\nexport interface NormalizedBitbucketPullRequestRecord {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state: \"open\" | \"closed\" | \"merged\";\n  readonly updatedAt: Option.Option<DateTime.Utc>;\n  readonly isCrossRepository?: boolean;\n  readonly headRepositoryNameWithOwner?: string | null;\n  readonly headRepositoryOwnerLogin?: string | null;\n}\n\nexport const BitbucketRepositoryRefSchema = Schema.Struct({\n  full_name: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  workspace: Schema.optional(\n    Schema.NullOr(\n      Schema.Struct({\n        slug: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n      }),\n    ),\n  ),\n});\n\nexport const BitbucketPullRequestBranchSchema = Schema.Struct({\n  repository: Schema.optional(Schema.NullOr(BitbucketRepositoryRefSchema)),\n  branch: Schema.Struct({\n    name: TrimmedNonEmptyString,\n  }),\n});\n\nexport const BitbucketPullRequestSchema = Schema.Struct({\n  id: PositiveInt,\n  title: TrimmedNonEmptyString,\n  state: Schema.optional(Schema.NullOr(Schema.String)),\n  updated_on: Schema.optional(Schema.OptionFromNullOr(Schema.DateTimeUtcFromString)),\n  links: Schema.Struct({\n    html: Schema.Struct({\n      href: TrimmedNonEmptyString,\n    }),\n  }),\n  source: BitbucketPullRequestBranchSchema,\n  destination: BitbucketPullRequestBranchSchema,\n});\n\nexport const BitbucketPullRequestListSchema = Schema.Struct({\n  values: Schema.Array(BitbucketPullRequestSchema),\n  next: Schema.optional(TrimmedNonEmptyString),\n});\n\nfunction trimOptionalString(value: string | null | undefined): string | null {\n  const trimmed = value?.trim() ?? \"\";\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction repositoryOwner(repository: Schema.Schema.Type<typeof BitbucketRepositoryRefSchema>) {\n  return (\n    trimOptionalString(repository.workspace?.slug) ??\n    (repository.full_name?.includes(\"/\") ? (repository.full_name.split(\"/\")[0] ?? null) : null)\n  );\n}\n\nfunction normalizeBitbucketPullRequestState(state: string | null | undefined) {\n  switch (state?.trim().toUpperCase()) {\n    case \"MERGED\":\n      return \"merged\" as const;\n    case \"DECLINED\":\n    case \"SUPERSEDED\":\n      return \"closed\" as const;\n    case \"OPEN\":\n    default:\n      return \"open\" as const;\n  }\n}\n\nexport function normalizeBitbucketPullRequestRecord(\n  raw: Schema.Schema.Type<typeof BitbucketPullRequestSchema>,\n): NormalizedBitbucketPullRequestRecord {\n  const headRepositoryNameWithOwner = trimOptionalString(raw.source.repository?.full_name);\n  const baseRepositoryNameWithOwner = trimOptionalString(raw.destination.repository?.full_name);\n  const headRepositoryOwnerLogin = raw.source.repository\n    ? repositoryOwner(raw.source.repository)\n    : null;\n  const isCrossRepository =\n    headRepositoryNameWithOwner !== null &&\n    baseRepositoryNameWithOwner !== null &&\n    headRepositoryNameWithOwner !== baseRepositoryNameWithOwner;\n\n  return {\n    number: raw.id,\n    title: raw.title,\n    url: raw.links.html.href,\n    baseRefName: raw.destination.branch.name,\n    headRefName: raw.source.branch.name,\n    state: normalizeBitbucketPullRequestState(raw.state),\n    updatedAt: raw.updated_on ?? Option.none(),\n    ...(isCrossRepository ? { isCrossRepository: true } : {}),\n    ...(headRepositoryNameWithOwner ? { headRepositoryNameWithOwner } : {}),\n    ...(headRepositoryOwnerLogin ? { headRepositoryOwnerLogin } : {}),\n  };\n}\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\n\nimport { VcsDriverKind, type VcsDriverKind as VcsDriverKindType } from \"@salchi/contracts\";\n\nconst ProjectVcsConfig = Schema.Struct({\n  vcs: Schema.optional(\n    Schema.Struct({\n      kind: Schema.optional(VcsDriverKind),\n    }),\n  ),\n  vcsKind: Schema.optional(VcsDriverKind),\n});\nconst isProjectVcsConfig = Schema.is(ProjectVcsConfig);\n\ninterface ProjectVcsConfigFile {\n  readonly vcs?:\n    | {\n        readonly kind?: VcsDriverKindType | undefined;\n      }\n    | undefined;\n  readonly vcsKind?: VcsDriverKindType | undefined;\n}\n\nexport interface VcsProjectConfigResolveInput {\n  readonly cwd: string;\n  readonly requestedKind?: VcsDriverKindType | \"auto\";\n}\n\nexport interface VcsProjectConfigShape {\n  readonly resolveKind: (\n    input: VcsProjectConfigResolveInput,\n  ) => Effect.Effect<VcsDriverKindType | \"auto\">;\n}\n\nexport class VcsProjectConfig extends Context.Service<VcsProjectConfig, VcsProjectConfigShape>()(\n  \"salchi/vcs/VcsProjectConfig\",\n) {}\n\nfunction configuredKind(config: ProjectVcsConfigFile): VcsDriverKindType | \"auto\" {\n  return config.vcs?.kind ?? config.vcsKind ?? \"auto\";\n}\n\nfunction parseConfig(raw: string): ProjectVcsConfigFile | null {\n  try {\n    const parsed = JSON.parse(raw) as unknown;\n    return isProjectVcsConfig(parsed) ? parsed : null;\n  } catch {\n    return null;\n  }\n}\n\nexport const make = Effect.fn(\"makeVcsProjectConfig\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  const findConfigPath = Effect.fn(\"VcsProjectConfig.findConfigPath\")(function* (cwd: string) {\n    let current = cwd;\n    while (true) {\n      const candidate = path.join(current, \".salchi\", \"vcs.json\");\n      if (yield* fileSystem.exists(candidate).pipe(Effect.orElseSucceed(() => false))) {\n        return candidate;\n      }\n\n      const parent = path.dirname(current);\n      if (parent === current) {\n        return null;\n      }\n      current = parent;\n    }\n  });\n\n  const readConfiguredKind = Effect.fn(\"VcsProjectConfig.readConfiguredKind\")(function* (\n    configPath: string,\n  ) {\n    const raw = yield* fileSystem.readFileString(configPath).pipe(\n      Effect.catch((error) =>\n        Effect.logWarning(\"failed to read VCS project config\", {\n          configPath,\n          error,\n        }).pipe(Effect.as(null)),\n      ),\n    );\n    if (raw === null) {\n      return \"auto\" as const;\n    }\n\n    const parsed = parseConfig(raw);\n    if (parsed === null) {\n      yield* Effect.logWarning(\"invalid VCS project config\", {\n        configPath,\n      });\n      return \"auto\" as const;\n    }\n\n    return configuredKind(parsed);\n  });\n\n  const resolveKind: VcsProjectConfigShape[\"resolveKind\"] = Effect.fn(\n    \"VcsProjectConfig.resolveKind\",\n  )(function* (input) {\n    if (input.requestedKind !== undefined && input.requestedKind !== \"auto\") {\n      return input.requestedKind;\n    }\n\n    const configPath = yield* findConfigPath(input.cwd);\n    if (configPath === null) {\n      return \"auto\";\n    }\n\n    return yield* readConfiguredKind(configPath);\n  });\n\n  return VcsProjectConfig.of({\n    resolveKind,\n  });\n});\n\nexport const layer = Layer.effect(VcsProjectConfig, make());\n","import * as Cache from \"effect/Cache\";\nimport * as Context from \"effect/Context\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\n\nimport type { VcsDriverKind, VcsError, VcsRepositoryIdentity } from \"@salchi/contracts\";\nimport { VcsUnsupportedOperationError } from \"@salchi/contracts\";\nimport * as GitVcsDriver from \"./GitVcsDriver.ts\";\nimport * as VcsProjectConfig from \"./VcsProjectConfig.ts\";\nimport * as VcsDriver from \"./VcsDriver.ts\";\n\nconst DETECTION_CACHE_CAPACITY = 2_048;\nconst DETECTION_CACHE_TTL = Duration.seconds(2);\n\nexport interface VcsDriverResolveInput {\n  readonly cwd: string;\n  readonly requestedKind?: VcsDriverKind | \"auto\";\n}\n\nexport interface VcsDriverHandle {\n  readonly kind: VcsDriverKind;\n  readonly repository: VcsRepositoryIdentity;\n  readonly driver: VcsDriver.VcsDriverShape;\n}\n\nexport interface VcsDriverRegistryShape {\n  readonly get: (kind: VcsDriverKind) => Effect.Effect<VcsDriver.VcsDriverShape, VcsError>;\n  readonly detect: (\n    input: VcsDriverResolveInput,\n  ) => Effect.Effect<VcsDriverHandle | null, VcsError>;\n  readonly resolve: (input: VcsDriverResolveInput) => Effect.Effect<VcsDriverHandle, VcsError>;\n}\n\nexport class VcsDriverRegistry extends Context.Service<VcsDriverRegistry, VcsDriverRegistryShape>()(\n  \"salchi/vcs/VcsDriverRegistry\",\n) {}\n\nconst unsupported = (operation: string, kind: VcsDriverKind, detail: string) =>\n  new VcsUnsupportedOperationError({\n    operation,\n    kind,\n    detail,\n  });\n\nfunction detectionCacheKey(input: {\n  readonly cwd: string;\n  readonly requestedKind: VcsDriverKind | \"auto\";\n}): string {\n  return `${input.requestedKind}\\0${input.cwd}`;\n}\n\nfunction parseDetectionCacheKey(key: string): {\n  readonly cwd: string;\n  readonly requestedKind: VcsDriverKind | \"auto\";\n} {\n  const separatorIndex = key.indexOf(\"\\0\");\n  if (separatorIndex === -1) {\n    return {\n      cwd: key,\n      requestedKind: \"auto\",\n    };\n  }\n  return {\n    requestedKind: key.slice(0, separatorIndex) as VcsDriverKind | \"auto\",\n    cwd: key.slice(separatorIndex + 1),\n  };\n}\n\nexport const make = Effect.fn(\"makeVcsDriverRegistry\")(function* () {\n  const projectConfig = yield* VcsProjectConfig.VcsProjectConfig;\n  const git = yield* GitVcsDriver.makeVcsDriverShape();\n  const drivers: Partial<Record<VcsDriverKind, VcsDriver.VcsDriverShape>> = {\n    git,\n  };\n\n  const get: VcsDriverRegistryShape[\"get\"] = (kind) => {\n    const driver = drivers[kind];\n    if (!driver) {\n      return Effect.fail(\n        unsupported(\"VcsDriverRegistry.get\", kind, `No ${kind} VCS driver is registered.`),\n      );\n    }\n    return Effect.succeed(driver);\n  };\n\n  const detectWithDriver = Effect.fn(\"VcsDriverRegistry.detectWithDriver\")(function* (\n    kind: VcsDriverKind,\n    driver: VcsDriver.VcsDriverShape,\n    cwd: string,\n  ) {\n    const repository = yield* driver.detectRepository(cwd);\n    if (!repository) {\n      return null;\n    }\n    return {\n      kind,\n      repository,\n      driver,\n    } satisfies VcsDriverHandle;\n  });\n\n  const detectResolvedKind = Effect.fn(\"VcsDriverRegistry.detectResolvedKind\")(function* (input: {\n    readonly cwd: string;\n    readonly requestedKind: VcsDriverKind | \"auto\";\n  }) {\n    const requestedKind = input.requestedKind;\n\n    if (requestedKind !== \"auto\" && requestedKind !== \"unknown\") {\n      const driver = yield* get(requestedKind);\n      return yield* detectWithDriver(requestedKind, driver, input.cwd);\n    }\n\n    return yield* detectWithDriver(\"git\", git, input.cwd);\n  });\n\n  const detectionCache = yield* Cache.makeWith<string, VcsDriverHandle | null, VcsError>(\n    (key) => detectResolvedKind(parseDetectionCacheKey(key)),\n    {\n      capacity: DETECTION_CACHE_CAPACITY,\n      timeToLive: (exit) => (Exit.isSuccess(exit) ? DETECTION_CACHE_TTL : Duration.zero),\n    },\n  );\n\n  const detect: VcsDriverRegistryShape[\"detect\"] = Effect.fn(\"VcsDriverRegistry.detect\")(\n    function* (input) {\n      const requestedKind = yield* projectConfig.resolveKind(input);\n      return yield* Cache.get(detectionCache, detectionCacheKey({ cwd: input.cwd, requestedKind }));\n    },\n  );\n\n  const resolve: VcsDriverRegistryShape[\"resolve\"] = Effect.fn(\"VcsDriverRegistry.resolve\")(\n    function* (input) {\n      const detected = yield* detect(input);\n      if (detected) {\n        return detected;\n      }\n\n      const requestedKind = input.requestedKind ?? \"auto\";\n      return yield* unsupported(\n        \"VcsDriverRegistry.resolve\",\n        requestedKind === \"auto\" ? \"unknown\" : requestedKind,\n        requestedKind === \"auto\"\n          ? `No supported VCS repository was detected at ${input.cwd}.`\n          : `No ${requestedKind} repository was detected at ${input.cwd}.`,\n      );\n    },\n  );\n\n  return VcsDriverRegistry.of({\n    get,\n    detect,\n    resolve,\n  });\n});\n\nexport const layer = Layer.effect(VcsDriverRegistry, make()).pipe(\n  Layer.provide(VcsProjectConfig.layer),\n);\n","import * as Config from \"effect/Config\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport {\n  TrimmedNonEmptyString,\n  type SourceControlProviderAuth,\n  type SourceControlRepositoryCloneUrls,\n  type SourceControlRepositoryVisibility,\n} from \"@salchi/contracts\";\nimport { HttpClient, HttpClientRequest, HttpClientResponse } from \"effect/unstable/http\";\nimport { WORKTREE_BRANCH_PREFIX, sanitizeBranchFragment } from \"@salchi/shared/git\";\nimport { detectSourceControlProviderFromRemoteUrl } from \"@salchi/shared/sourceControl\";\n\nimport * as BitbucketPullRequests from \"./bitbucketPullRequests.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport * as GitVcsDriver from \"../vcs/GitVcsDriver.ts\";\nimport * as VcsDriverRegistry from \"../vcs/VcsDriverRegistry.ts\";\n\nconst DEFAULT_API_BASE_URL = \"https://api.bitbucket.org/2.0\";\n\nconst BitbucketApiEnvConfig = Config.all({\n  baseUrl: Config.string(\"SALCHI_BITBUCKET_API_BASE_URL\").pipe(\n    Config.withDefault(DEFAULT_API_BASE_URL),\n  ),\n  accessToken: Config.string(\"SALCHI_BITBUCKET_ACCESS_TOKEN\").pipe(Config.option),\n  email: Config.string(\"SALCHI_BITBUCKET_EMAIL\").pipe(Config.option),\n  apiToken: Config.string(\"SALCHI_BITBUCKET_API_TOKEN\").pipe(Config.option),\n});\n\nexport class BitbucketApiError extends Schema.TaggedErrorClass<BitbucketApiError>()(\n  \"BitbucketApiError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    status: Schema.optional(Schema.Number),\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Bitbucket API failed in ${this.operation}: ${this.detail}`;\n  }\n}\nconst isBitbucketApiErrorValue = Schema.is(BitbucketApiError);\n\nconst RawBitbucketRepositorySchema = Schema.Struct({\n  full_name: TrimmedNonEmptyString,\n  links: Schema.Struct({\n    html: Schema.optional(\n      Schema.Struct({\n        href: TrimmedNonEmptyString,\n      }),\n    ),\n    clone: Schema.optional(\n      Schema.Array(\n        Schema.Struct({\n          name: TrimmedNonEmptyString,\n          href: TrimmedNonEmptyString,\n        }),\n      ),\n    ),\n  }),\n  mainbranch: Schema.optional(\n    Schema.NullOr(\n      Schema.Struct({\n        name: TrimmedNonEmptyString,\n      }),\n    ),\n  ),\n});\n\nconst RawBitbucketBranchingModelSchema = Schema.Struct({\n  development: Schema.optional(\n    Schema.Struct({\n      branch: Schema.optional(\n        Schema.NullOr(\n          Schema.Struct({\n            name: Schema.optional(TrimmedNonEmptyString),\n          }),\n        ),\n      ),\n      is_valid: Schema.optional(Schema.Boolean),\n      name: Schema.optional(Schema.NullOr(Schema.String)),\n      use_mainbranch: Schema.optional(Schema.Boolean),\n    }),\n  ),\n});\n\nconst BitbucketUserSchema = Schema.Struct({\n  username: Schema.optional(TrimmedNonEmptyString),\n  display_name: Schema.optional(TrimmedNonEmptyString),\n  account_id: Schema.optional(TrimmedNonEmptyString),\n});\n\nexport interface BitbucketRepositoryLocator {\n  readonly workspace: string;\n  readonly repoSlug: string;\n}\n\nexport interface BitbucketApiShape {\n  readonly probeAuth: Effect.Effect<SourceControlProviderAuth, never>;\n  readonly listPullRequests: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly headSelector: string;\n    readonly source?: SourceControlProvider.SourceControlRefSelector;\n    readonly state: \"open\" | \"closed\" | \"merged\" | \"all\";\n    readonly limit?: number;\n  }) => Effect.Effect<\n    ReadonlyArray<BitbucketPullRequests.NormalizedBitbucketPullRequestRecord>,\n    BitbucketApiError\n  >;\n  readonly getPullRequest: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly reference: string;\n  }) => Effect.Effect<\n    BitbucketPullRequests.NormalizedBitbucketPullRequestRecord,\n    BitbucketApiError\n  >;\n  readonly getRepositoryCloneUrls: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly repository: string;\n  }) => Effect.Effect<SourceControlRepositoryCloneUrls, BitbucketApiError>;\n  readonly createRepository: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n    readonly visibility: SourceControlRepositoryVisibility;\n  }) => Effect.Effect<SourceControlRepositoryCloneUrls, BitbucketApiError>;\n  readonly createPullRequest: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly baseBranch: string;\n    readonly headSelector: string;\n    readonly source?: SourceControlProvider.SourceControlRefSelector;\n    readonly target?: SourceControlProvider.SourceControlRefSelector;\n    readonly title: string;\n    readonly bodyFile: string;\n  }) => Effect.Effect<void, BitbucketApiError>;\n  readonly getDefaultBranch: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n  }) => Effect.Effect<string | null, BitbucketApiError>;\n  readonly checkoutPullRequest: (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly reference: string;\n    readonly force?: boolean;\n  }) => Effect.Effect<void, BitbucketApiError>;\n}\n\nexport class BitbucketApi extends Context.Service<BitbucketApi, BitbucketApiShape>()(\n  \"salchi/sourceControl/BitbucketApi\",\n) {}\n\nfunction nonEmpty(value: string | undefined): Option.Option<string> {\n  const trimmed = value?.trim();\n  return trimmed === undefined || trimmed.length === 0 ? Option.none() : Option.some(trimmed);\n}\n\nfunction normalizeChangeRequestId(reference: string): string {\n  const trimmed = reference.trim().replace(/^#/, \"\");\n  const urlMatch = /(?:pull-requests|pullrequests|pull-request|pull|pr)\\/(\\d+)(?:\\D.*)?$/i.exec(\n    trimmed,\n  );\n  return urlMatch?.[1] ?? trimmed;\n}\n\nfunction sourceWorkspace(input: {\n  readonly headSelector: string;\n  readonly source?: SourceControlProvider.SourceControlRefSelector;\n}): string | undefined {\n  if (input.source?.owner) return input.source.owner;\n  return SourceControlProvider.parseSourceControlOwnerRef(input.headSelector)?.owner;\n}\n\nfunction toBitbucketStates(state: \"open\" | \"closed\" | \"merged\" | \"all\"): ReadonlyArray<string> {\n  switch (state) {\n    case \"open\":\n      return [\"OPEN\"];\n    case \"closed\":\n      return [\"DECLINED\", \"SUPERSEDED\"];\n    case \"merged\":\n      return [\"MERGED\"];\n    case \"all\":\n      return [\"OPEN\", \"MERGED\", \"DECLINED\", \"SUPERSEDED\"];\n  }\n}\n\nfunction bitbucketQueryString(filters: ReadonlyArray<string>): string {\n  return filters.join(\" AND \");\n}\n\nfunction bitbucketStateFilter(states: ReadonlyArray<string>): string {\n  return states.length === 1\n    ? `state = \"${states[0]}\"`\n    : `(${states.map((state) => `state = \"${state}\"`).join(\" OR \")})`;\n}\n\nfunction parseBitbucketRepositorySlug(value: string): BitbucketRepositoryLocator | null {\n  const normalized = value.trim().replace(/\\.git$/u, \"\");\n  const parts = normalized.split(\"/\").filter((part) => part.length > 0);\n  if (parts.length < 2) return null;\n  const workspace = parts.at(-2);\n  const repoSlug = parts.at(-1);\n  return workspace && repoSlug ? { workspace, repoSlug } : null;\n}\n\nfunction requireRepositoryLocator(\n  operation: string,\n  repository: string,\n): Effect.Effect<BitbucketRepositoryLocator, BitbucketApiError> {\n  const locator = parseBitbucketRepositorySlug(repository);\n  return locator\n    ? Effect.succeed(locator)\n    : Effect.fail(\n        new BitbucketApiError({\n          operation,\n          detail: \"Bitbucket repositories must be specified as workspace/repository.\",\n        }),\n      );\n}\n\nfunction parseBitbucketRemoteUrl(remoteUrl: string): BitbucketRepositoryLocator | null {\n  const trimmed = remoteUrl.trim();\n  if (trimmed.startsWith(\"git@\")) {\n    const pathStart = trimmed.indexOf(\":\");\n    return pathStart < 0 ? null : parseBitbucketRepositorySlug(trimmed.slice(pathStart + 1));\n  }\n\n  try {\n    return parseBitbucketRepositorySlug(new URL(trimmed).pathname);\n  } catch {\n    return null;\n  }\n}\n\nfunction normalizeRepositoryCloneUrls(\n  raw: typeof RawBitbucketRepositorySchema.Type,\n): SourceControlRepositoryCloneUrls {\n  const httpClone =\n    raw.links.clone?.find((entry) => entry.name.toLowerCase() === \"https\")?.href ??\n    raw.links.html?.href;\n  const sshClone = raw.links.clone?.find((entry) => entry.name.toLowerCase() === \"ssh\")?.href;\n\n  return {\n    nameWithOwner: raw.full_name,\n    url: httpClone ?? raw.links.html?.href ?? raw.full_name,\n    sshUrl: sshClone ?? httpClone ?? raw.full_name,\n  };\n}\n\nfunction defaultChangeRequestTargetBranch(input: {\n  readonly repository: typeof RawBitbucketRepositorySchema.Type;\n  readonly branchingModel: typeof RawBitbucketBranchingModelSchema.Type | null;\n}): string | null {\n  const repositoryMainBranch = input.repository.mainbranch?.name ?? null;\n  const development = input.branchingModel?.development;\n  if (!development || development.use_mainbranch === true || development.is_valid === false) {\n    return repositoryMainBranch;\n  }\n\n  const developmentBranch = development.branch?.name?.trim() ?? development.name?.trim() ?? \"\";\n  if (developmentBranch.length === 0 || developmentBranch === \"null\") {\n    return repositoryMainBranch;\n  }\n\n  return developmentBranch;\n}\n\nfunction shouldPreferSshRemote(originRemoteUrl: string | null): boolean {\n  const trimmed = originRemoteUrl?.trim() ?? \"\";\n  return trimmed.startsWith(\"git@\") || trimmed.startsWith(\"ssh://\");\n}\n\nfunction selectCloneUrl(input: {\n  readonly cloneUrls: SourceControlRepositoryCloneUrls;\n  readonly originRemoteUrl: string | null;\n}): string {\n  return shouldPreferSshRemote(input.originRemoteUrl)\n    ? input.cloneUrls.sshUrl\n    : input.cloneUrls.url;\n}\n\nfunction checkoutBranchName(input: {\n  readonly pullRequestId: number;\n  readonly headBranch: string;\n  readonly isCrossRepository: boolean;\n}): string {\n  if (!input.isCrossRepository) {\n    return input.headBranch;\n  }\n\n  return `${WORKTREE_BRANCH_PREFIX}/pr-${input.pullRequestId}/${sanitizeBranchFragment(input.headBranch)}`;\n}\n\nfunction repositoryNameWithOwner(\n  repository: Schema.Schema.Type<\n    typeof BitbucketPullRequests.BitbucketPullRequestSchema\n  >[\"source\"][\"repository\"],\n): string | null {\n  const fullName = repository?.full_name?.trim() ?? \"\";\n  return fullName.length > 0 ? fullName : null;\n}\n\nfunction repositoryOwnerName(repositoryName: string): string {\n  return repositoryName.split(\"/\")[0]?.trim() || \"bitbucket\";\n}\n\nfunction authFromConfig(\n  config: Config.Success<typeof BitbucketApiEnvConfig>,\n): SourceControlProviderAuth {\n  if (Option.isSome(config.accessToken)) {\n    return {\n      status: \"unknown\",\n      account: Option.none(),\n      host: Option.some(\"bitbucket.org\"),\n      detail: Option.some(\"Bitbucket access token is configured.\"),\n    };\n  }\n\n  if (Option.isSome(config.email) && Option.isSome(config.apiToken)) {\n    return {\n      status: \"unknown\",\n      account: config.email,\n      host: Option.some(\"bitbucket.org\"),\n      detail: Option.some(\"Bitbucket API token is configured.\"),\n    };\n  }\n\n  return {\n    status: \"unauthenticated\",\n    account: Option.none(),\n    host: Option.some(\"bitbucket.org\"),\n    detail: Option.some(\"Set Bitbucket credentials on the server.\"),\n  };\n}\n\nfunction requestError(operation: string, cause: unknown): BitbucketApiError {\n  return new BitbucketApiError({\n    operation,\n    detail: cause instanceof Error ? cause.message : String(cause),\n    cause,\n  });\n}\n\nfunction isBitbucketApiError(cause: unknown): cause is BitbucketApiError {\n  return isBitbucketApiErrorValue(cause);\n}\n\nfunction responseError(\n  operation: string,\n  response: HttpClientResponse.HttpClientResponse,\n): Effect.Effect<never, BitbucketApiError> {\n  return response.text.pipe(\n    Effect.catch(() => Effect.succeed(\"\")),\n    Effect.flatMap((body) =>\n      Effect.fail(\n        new BitbucketApiError({\n          operation,\n          status: response.status,\n          detail:\n            body.trim().length > 0\n              ? `Bitbucket returned HTTP ${response.status}: ${body.trim()}`\n              : `Bitbucket returned HTTP ${response.status}.`,\n        }),\n      ),\n    ),\n  );\n}\n\nexport const make = Effect.fn(\"makeBitbucketApi\")(function* () {\n  const config = yield* BitbucketApiEnvConfig;\n  const httpClient = yield* HttpClient.HttpClient;\n  const fileSystem = yield* FileSystem.FileSystem;\n  const git = yield* GitVcsDriver.GitVcsDriver;\n  const vcsRegistry = yield* VcsDriverRegistry.VcsDriverRegistry;\n\n  const apiUrl = (path: string) => `${config.baseUrl.replace(/\\/+$/u, \"\")}${path}`;\n\n  const withAuth = (request: HttpClientRequest.HttpClientRequest) => {\n    if (Option.isSome(config.accessToken)) {\n      return request.pipe(HttpClientRequest.bearerToken(config.accessToken.value));\n    }\n    if (Option.isSome(config.email) && Option.isSome(config.apiToken)) {\n      return request.pipe(HttpClientRequest.basicAuth(config.email.value, config.apiToken.value));\n    }\n    return request;\n  };\n\n  const decodeResponse = <S extends Schema.Top>(\n    operation: string,\n    schema: S,\n    response: HttpClientResponse.HttpClientResponse,\n  ): Effect.Effect<S[\"Type\"], BitbucketApiError, S[\"DecodingServices\"]> =>\n    HttpClientResponse.matchStatus({\n      \"2xx\": (success) =>\n        HttpClientResponse.schemaBodyJson(schema)(success).pipe(\n          Effect.mapError(\n            (cause) =>\n              new BitbucketApiError({\n                operation,\n                detail: \"Bitbucket returned invalid JSON for the requested resource.\",\n                cause,\n              }),\n          ),\n        ),\n      orElse: (failed) => responseError(operation, failed),\n    })(response);\n\n  const executeJson = <S extends Schema.Top>(\n    operation: string,\n    request: HttpClientRequest.HttpClientRequest,\n    schema: S,\n  ): Effect.Effect<S[\"Type\"], BitbucketApiError, S[\"DecodingServices\"]> =>\n    httpClient.execute(withAuth(request.pipe(HttpClientRequest.acceptJson))).pipe(\n      Effect.mapError((cause) => requestError(operation, cause)),\n      Effect.flatMap((response) => decodeResponse(operation, schema, response)),\n    );\n\n  const resolveRepository = Effect.fn(\"BitbucketApi.resolveRepository\")(function* (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly repository?: string;\n  }) {\n    const fromRepository =\n      input.repository !== undefined ? parseBitbucketRepositorySlug(input.repository) : null;\n    if (fromRepository) return fromRepository;\n\n    const fromContext =\n      input.context?.provider.kind === \"bitbucket\"\n        ? parseBitbucketRemoteUrl(input.context.remoteUrl)\n        : null;\n    if (fromContext) return fromContext;\n\n    const handle = yield* vcsRegistry.resolve({ cwd: input.cwd }).pipe(\n      Effect.mapError(\n        (cause) =>\n          new BitbucketApiError({\n            operation: \"resolveRepository\",\n            detail: `Failed to resolve VCS repository for ${input.cwd}.`,\n            cause,\n          }),\n      ),\n    );\n    const remotes = yield* handle.driver.listRemotes(input.cwd).pipe(\n      Effect.mapError(\n        (cause) =>\n          new BitbucketApiError({\n            operation: \"resolveRepository\",\n            detail: `Failed to list remotes for ${input.cwd}.`,\n            cause,\n          }),\n      ),\n    );\n\n    for (const remote of remotes.remotes) {\n      if (detectSourceControlProviderFromRemoteUrl(remote.url)?.kind !== \"bitbucket\") continue;\n      const parsed = parseBitbucketRemoteUrl(remote.url);\n      if (parsed) return parsed;\n    }\n\n    return yield* new BitbucketApiError({\n      operation: \"resolveRepository\",\n      detail: `No Bitbucket repository remote was detected for ${input.cwd}.`,\n    });\n  });\n\n  const getRepositoryFromLocator = (repository: BitbucketRepositoryLocator) =>\n    executeJson(\n      \"getRepository\",\n      HttpClientRequest.get(\n        apiUrl(\n          `/repositories/${encodeURIComponent(repository.workspace)}/${encodeURIComponent(repository.repoSlug)}`,\n        ),\n      ),\n      RawBitbucketRepositorySchema,\n    );\n\n  const getRepository = (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly repository?: string;\n  }) => resolveRepository(input).pipe(Effect.flatMap(getRepositoryFromLocator));\n\n  const getBranchingModelFromLocator = (repository: BitbucketRepositoryLocator) =>\n    executeJson(\n      \"getBranchingModel\",\n      HttpClientRequest.get(\n        apiUrl(\n          `/repositories/${encodeURIComponent(repository.workspace)}/${encodeURIComponent(repository.repoSlug)}/branching-model`,\n        ),\n      ),\n      RawBitbucketBranchingModelSchema,\n    );\n\n  const getRawPullRequestFromRepository = (\n    repository: BitbucketRepositoryLocator,\n    reference: string,\n  ) =>\n    executeJson(\n      \"getPullRequest\",\n      HttpClientRequest.get(\n        apiUrl(\n          `/repositories/${encodeURIComponent(repository.workspace)}/${encodeURIComponent(repository.repoSlug)}/pullrequests/${encodeURIComponent(normalizeChangeRequestId(reference))}`,\n        ),\n      ),\n      BitbucketPullRequests.BitbucketPullRequestSchema,\n    );\n\n  const getRawPullRequest = (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly reference: string;\n  }) =>\n    resolveRepository(input).pipe(\n      Effect.flatMap((repository) => getRawPullRequestFromRepository(repository, input.reference)),\n    );\n\n  const readConfigValueNullable = (cwd: string, key: string) =>\n    git.readConfigValue(cwd, key).pipe(Effect.catch(() => Effect.succeed(null)));\n\n  const resolveCheckoutRemote = Effect.fn(\"BitbucketApi.resolveCheckoutRemote\")(function* (input: {\n    readonly cwd: string;\n    readonly context?: SourceControlProvider.SourceControlProviderContext;\n    readonly destinationRepository: BitbucketRepositoryLocator;\n    readonly sourceRepositoryName: string;\n    readonly isCrossRepository: boolean;\n  }) {\n    if (\n      input.context?.provider.kind === \"bitbucket\" &&\n      !input.isCrossRepository &&\n      parseBitbucketRemoteUrl(input.context.remoteUrl) !== null\n    ) {\n      return input.context.remoteName;\n    }\n\n    if (!input.isCrossRepository) {\n      const remoteName = yield* git\n        .resolvePrimaryRemoteName(input.cwd)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (remoteName) return remoteName;\n    }\n\n    const cloneUrls = yield* getRepository({\n      cwd: input.cwd,\n      repository: input.sourceRepositoryName,\n      ...(input.context ? { context: input.context } : {}),\n    }).pipe(Effect.map(normalizeRepositoryCloneUrls));\n    const originRemoteUrl = yield* readConfigValueNullable(input.cwd, \"remote.origin.url\");\n    return yield* git.ensureRemote({\n      cwd: input.cwd,\n      preferredName: input.isCrossRepository\n        ? repositoryOwnerName(input.sourceRepositoryName)\n        : input.destinationRepository.workspace,\n      url: selectCloneUrl({ cloneUrls, originRemoteUrl }),\n    });\n  });\n\n  return BitbucketApi.of({\n    probeAuth: executeJson(\n      \"probeAuth\",\n      HttpClientRequest.get(apiUrl(\"/user\")),\n      BitbucketUserSchema,\n    ).pipe(\n      Effect.map((user) => ({\n        status: \"authenticated\" as const,\n        account: nonEmpty(user.username ?? user.display_name ?? user.account_id),\n        host: Option.some(\"bitbucket.org\"),\n        detail: Option.none<string>(),\n      })),\n      Effect.catch(() => Effect.succeed(authFromConfig(config))),\n    ),\n    listPullRequests: (input) =>\n      resolveRepository(input).pipe(\n        Effect.flatMap((repository) => {\n          const states = toBitbucketStates(input.state);\n          const query: Record<string, string | ReadonlyArray<string>> = {\n            pagelen: String(Math.max(1, Math.min(input.limit ?? 20, 50))),\n            sort: \"-updated_on\",\n            q: bitbucketQueryString([\n              `source.branch.name = \"${SourceControlProvider.sourceBranch(input).replaceAll('\"', '\\\\\"')}\"`,\n              bitbucketStateFilter(states),\n            ]),\n            state: states,\n          };\n\n          return executeJson(\n            \"listPullRequests\",\n            HttpClientRequest.get(\n              apiUrl(\n                `/repositories/${encodeURIComponent(repository.workspace)}/${encodeURIComponent(repository.repoSlug)}/pullrequests`,\n              ),\n              { urlParams: query },\n            ),\n            BitbucketPullRequests.BitbucketPullRequestListSchema,\n          );\n        }),\n        Effect.map((list) =>\n          list.values.map(BitbucketPullRequests.normalizeBitbucketPullRequestRecord),\n        ),\n      ),\n    getPullRequest: (input) =>\n      getRawPullRequest(input).pipe(\n        Effect.map(BitbucketPullRequests.normalizeBitbucketPullRequestRecord),\n      ),\n    getRepositoryCloneUrls: (input) =>\n      getRepository(input).pipe(Effect.map(normalizeRepositoryCloneUrls)),\n    createRepository: (input) =>\n      requireRepositoryLocator(\"createRepository\", input.repository).pipe(\n        Effect.flatMap((repository) =>\n          executeJson(\n            \"createRepository\",\n            HttpClientRequest.post(\n              apiUrl(\n                `/repositories/${encodeURIComponent(repository.workspace)}/${encodeURIComponent(repository.repoSlug)}`,\n              ),\n            ).pipe(\n              HttpClientRequest.bodyJsonUnsafe({\n                scm: \"git\",\n                is_private: input.visibility === \"private\",\n              }),\n            ),\n            RawBitbucketRepositorySchema,\n          ),\n        ),\n        Effect.map(normalizeRepositoryCloneUrls),\n      ),\n    createPullRequest: (input) =>\n      Effect.gen(function* () {\n        const repository = yield* resolveRepository(input);\n        const description = yield* fileSystem.readFileString(input.bodyFile).pipe(\n          Effect.mapError(\n            (cause) =>\n              new BitbucketApiError({\n                operation: \"createPullRequest\",\n                detail: `Failed to read pull request body file ${input.bodyFile}.`,\n                cause,\n              }),\n          ),\n        );\n        const sourceOwner = sourceWorkspace(input);\n        const body = {\n          title: input.title,\n          description,\n          source: {\n            branch: {\n              name: SourceControlProvider.sourceBranch(input),\n            },\n            ...(sourceOwner\n              ? {\n                  repository: {\n                    full_name: `${sourceOwner}/${input.source?.repository ?? repository.repoSlug}`,\n                  },\n                }\n              : {}),\n          },\n          destination: {\n            branch: {\n              name: input.target?.refName ?? input.baseBranch,\n            },\n          },\n        };\n\n        yield* executeJson(\n          \"createPullRequest\",\n          HttpClientRequest.post(\n            apiUrl(\n              `/repositories/${encodeURIComponent(repository.workspace)}/${encodeURIComponent(repository.repoSlug)}/pullrequests`,\n            ),\n          ).pipe(HttpClientRequest.bodyJsonUnsafe(body)),\n          BitbucketPullRequests.BitbucketPullRequestSchema,\n        );\n      }),\n    getDefaultBranch: (input) =>\n      resolveRepository(input).pipe(\n        Effect.flatMap((locator) =>\n          Effect.all(\n            {\n              repository: getRepositoryFromLocator(locator),\n              branchingModel: getBranchingModelFromLocator(locator).pipe(\n                Effect.catch(() =>\n                  Effect.succeed<typeof RawBitbucketBranchingModelSchema.Type | null>(null),\n                ),\n              ),\n            },\n            { concurrency: \"unbounded\" },\n          ),\n        ),\n        Effect.map(defaultChangeRequestTargetBranch),\n      ),\n    // Bitbucket Cloud pull requests are Git-backed and Bitbucket does not provide\n    // an official checkout CLI. This provider-local path uses GitVcsDriver as a\n    // narrow escape hatch to materialize Bitbucket PR refs. Do not generalize this\n    // as the source-control provider model: if we support non-Git-compatible\n    // hosting providers or native JJ/Sapling checkout flows, move this into a\n    // VCS-specific change-request checkout capability.\n    checkoutPullRequest: (input) =>\n      Effect.gen(function* () {\n        const destinationRepository = yield* resolveRepository(input);\n        const pullRequest = yield* getRawPullRequestFromRepository(\n          destinationRepository,\n          input.reference,\n        );\n        const destinationRepositoryName =\n          repositoryNameWithOwner(pullRequest.destination.repository) ??\n          `${destinationRepository.workspace}/${destinationRepository.repoSlug}`;\n        const sourceRepositoryName =\n          repositoryNameWithOwner(pullRequest.source.repository) ?? destinationRepositoryName;\n        const isCrossRepository = sourceRepositoryName !== destinationRepositoryName;\n        const remoteName = yield* resolveCheckoutRemote({\n          cwd: input.cwd,\n          destinationRepository,\n          sourceRepositoryName,\n          isCrossRepository,\n          ...(input.context ? { context: input.context } : {}),\n        });\n        const remoteBranch = pullRequest.source.branch.name;\n        const localBranch = checkoutBranchName({\n          pullRequestId: pullRequest.id,\n          headBranch: remoteBranch,\n          isCrossRepository,\n        });\n        const localBranchNames = yield* git.listLocalBranchNames(input.cwd);\n        const localBranchExists = localBranchNames.includes(localBranch);\n\n        if (input.force === true || !localBranchExists) {\n          yield* git.fetchRemoteBranch({\n            cwd: input.cwd,\n            remoteName,\n            remoteBranch,\n            localBranch,\n          });\n        } else {\n          yield* git.fetchRemoteTrackingBranch({\n            cwd: input.cwd,\n            remoteName,\n            remoteBranch,\n          });\n        }\n\n        yield* git.setBranchUpstream({\n          cwd: input.cwd,\n          branch: localBranch,\n          remoteName,\n          remoteBranch,\n        });\n        yield* Effect.scoped(git.switchRef({ cwd: input.cwd, refName: localBranch }));\n      }).pipe(\n        Effect.mapError((cause) =>\n          isBitbucketApiError(cause)\n            ? cause\n            : new BitbucketApiError({\n                operation: \"checkoutPullRequest\",\n                detail: cause instanceof Error ? cause.message : String(cause),\n                cause,\n              }),\n        ),\n      ),\n  });\n});\n\nexport const layer = Layer.effect(BitbucketApi, make());\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport { SourceControlProviderError, type ChangeRequest } from \"@salchi/contracts\";\n\nimport * as BitbucketApi from \"./BitbucketApi.ts\";\nimport * as BitbucketPullRequests from \"./bitbucketPullRequests.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport type * as SourceControlProviderDiscovery from \"./SourceControlProviderDiscovery.ts\";\n\nfunction providerError(\n  operation: string,\n  cause: BitbucketApi.BitbucketApiError,\n): SourceControlProviderError {\n  return new SourceControlProviderError({\n    provider: \"bitbucket\",\n    operation,\n    detail: cause.detail,\n    cause,\n  });\n}\n\nfunction toChangeRequest(\n  summary: BitbucketPullRequests.NormalizedBitbucketPullRequestRecord,\n): ChangeRequest {\n  return {\n    provider: \"bitbucket\",\n    number: summary.number,\n    title: summary.title,\n    url: summary.url,\n    baseRefName: summary.baseRefName,\n    headRefName: summary.headRefName,\n    state: summary.state,\n    updatedAt: summary.updatedAt ?? Option.none(),\n    ...(summary.isCrossRepository !== undefined\n      ? { isCrossRepository: summary.isCrossRepository }\n      : {}),\n    ...(summary.headRepositoryNameWithOwner !== undefined\n      ? { headRepositoryNameWithOwner: summary.headRepositoryNameWithOwner }\n      : {}),\n    ...(summary.headRepositoryOwnerLogin !== undefined\n      ? { headRepositoryOwnerLogin: summary.headRepositoryOwnerLogin }\n      : {}),\n  };\n}\n\nexport const make = Effect.fn(\"makeBitbucketSourceControlProvider\")(function* () {\n  const bitbucket = yield* BitbucketApi.BitbucketApi;\n\n  return SourceControlProvider.SourceControlProvider.of({\n    kind: \"bitbucket\",\n    listChangeRequests: (input) => {\n      const source = SourceControlProvider.sourceControlRefFromInput(input);\n      return bitbucket\n        .listPullRequests({\n          cwd: input.cwd,\n          ...(input.context ? { context: input.context } : {}),\n          headSelector: input.headSelector,\n          ...(source ? { source } : {}),\n          state: input.state,\n          ...(input.limit !== undefined ? { limit: input.limit } : {}),\n        })\n        .pipe(\n          Effect.map((items) => items.map(toChangeRequest)),\n          Effect.mapError((error) => providerError(\"listChangeRequests\", error)),\n        );\n    },\n    getChangeRequest: (input) =>\n      bitbucket.getPullRequest(input).pipe(\n        Effect.map(toChangeRequest),\n        Effect.mapError((error) => providerError(\"getChangeRequest\", error)),\n      ),\n    createChangeRequest: (input) => {\n      const source = SourceControlProvider.sourceControlRefFromInput(input);\n      return bitbucket\n        .createPullRequest({\n          cwd: input.cwd,\n          ...(input.context ? { context: input.context } : {}),\n          baseBranch: input.baseRefName,\n          headSelector: input.headSelector,\n          ...(source ? { source } : {}),\n          ...(input.target ? { target: input.target } : {}),\n          title: input.title,\n          bodyFile: input.bodyFile,\n        })\n        .pipe(Effect.mapError((error) => providerError(\"createChangeRequest\", error)));\n    },\n    getRepositoryCloneUrls: (input) =>\n      bitbucket\n        .getRepositoryCloneUrls(input)\n        .pipe(Effect.mapError((error) => providerError(\"getRepositoryCloneUrls\", error))),\n    createRepository: (input) =>\n      bitbucket\n        .createRepository(input)\n        .pipe(Effect.mapError((error) => providerError(\"createRepository\", error))),\n    getDefaultBranch: (input) =>\n      bitbucket\n        .getDefaultBranch({\n          cwd: input.cwd,\n          ...(input.context ? { context: input.context } : {}),\n        })\n        .pipe(Effect.mapError((error) => providerError(\"getDefaultBranch\", error))),\n    checkoutChangeRequest: (input) =>\n      bitbucket\n        .checkoutPullRequest({\n          cwd: input.cwd,\n          ...(input.context ? { context: input.context } : {}),\n          reference: input.reference,\n          ...(input.force !== undefined ? { force: input.force } : {}),\n        })\n        .pipe(Effect.mapError((error) => providerError(\"checkoutChangeRequest\", error))),\n  });\n});\n\nexport const layer = Layer.effect(SourceControlProvider.SourceControlProvider, make());\n\nexport const makeDiscovery = Effect.fn(\"makeBitbucketSourceControlProviderDiscovery\")(function* () {\n  const bitbucket = yield* BitbucketApi.BitbucketApi;\n\n  return {\n    type: \"api\",\n    kind: \"bitbucket\",\n    label: \"Bitbucket\",\n    installHint:\n      \"Set Bitbucket credentials on the server using an email address and API token with pull request and repository scopes.\",\n    probeAuth: bitbucket.probeAuth,\n  } satisfies SourceControlProviderDiscovery.SourceControlApiDiscoverySpec;\n});\n","import * as Cause from \"effect/Cause\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport { PositiveInt, TrimmedNonEmptyString } from \"@salchi/contracts\";\nimport { decodeJsonResult, formatSchemaError } from \"@salchi/shared/schemaJson\";\n\nexport interface NormalizedGitHubPullRequestRecord {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state: \"open\" | \"closed\" | \"merged\";\n  readonly updatedAt: Option.Option<DateTime.Utc>;\n  readonly isCrossRepository?: boolean;\n  readonly headRepositoryNameWithOwner?: string | null;\n  readonly headRepositoryOwnerLogin?: string | null;\n}\n\nconst GitHubPullRequestSchema = Schema.Struct({\n  number: PositiveInt,\n  title: TrimmedNonEmptyString,\n  url: TrimmedNonEmptyString,\n  baseRefName: TrimmedNonEmptyString,\n  headRefName: TrimmedNonEmptyString,\n  state: Schema.optional(Schema.NullOr(Schema.String)),\n  mergedAt: Schema.optional(Schema.NullOr(Schema.String)),\n  updatedAt: Schema.optional(Schema.OptionFromNullOr(Schema.DateTimeUtcFromString)),\n  isCrossRepository: Schema.optional(Schema.Boolean),\n  headRepository: Schema.optional(\n    Schema.NullOr(\n      Schema.Struct({\n        nameWithOwner: Schema.String,\n      }),\n    ),\n  ),\n  headRepositoryOwner: Schema.optional(\n    Schema.NullOr(\n      Schema.Struct({\n        login: Schema.String,\n      }),\n    ),\n  ),\n});\n\nfunction trimOptionalString(value: string | null | undefined): string | null {\n  const trimmed = value?.trim() ?? \"\";\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeGitHubPullRequestState(input: {\n  state?: string | null | undefined;\n  mergedAt?: string | null | undefined;\n}): \"open\" | \"closed\" | \"merged\" {\n  const normalizedState = input.state?.trim().toUpperCase();\n  if (\n    (typeof input.mergedAt === \"string\" && input.mergedAt.trim().length > 0) ||\n    normalizedState === \"MERGED\"\n  ) {\n    return \"merged\";\n  }\n  if (normalizedState === \"CLOSED\") {\n    return \"closed\";\n  }\n  return \"open\";\n}\n\nfunction normalizeGitHubPullRequestRecord(\n  raw: Schema.Schema.Type<typeof GitHubPullRequestSchema>,\n): NormalizedGitHubPullRequestRecord {\n  const headRepositoryNameWithOwner = trimOptionalString(raw.headRepository?.nameWithOwner);\n  const headRepositoryOwnerLogin =\n    trimOptionalString(raw.headRepositoryOwner?.login) ??\n    (typeof headRepositoryNameWithOwner === \"string\" && headRepositoryNameWithOwner.includes(\"/\")\n      ? (headRepositoryNameWithOwner.split(\"/\")[0] ?? null)\n      : null);\n\n  return {\n    number: raw.number,\n    title: raw.title,\n    url: raw.url,\n    baseRefName: raw.baseRefName,\n    headRefName: raw.headRefName,\n    state: normalizeGitHubPullRequestState(raw),\n    updatedAt: raw.updatedAt ?? Option.none(),\n    ...(typeof raw.isCrossRepository === \"boolean\"\n      ? { isCrossRepository: raw.isCrossRepository }\n      : {}),\n    ...(headRepositoryNameWithOwner ? { headRepositoryNameWithOwner } : {}),\n    ...(headRepositoryOwnerLogin ? { headRepositoryOwnerLogin } : {}),\n  };\n}\n\nconst decodeGitHubPullRequestList = decodeJsonResult(Schema.Array(Schema.Unknown));\nconst decodeGitHubPullRequest = decodeJsonResult(GitHubPullRequestSchema);\nconst decodeGitHubPullRequestEntry = Schema.decodeUnknownExit(GitHubPullRequestSchema);\n\nexport const formatGitHubJsonDecodeError = formatSchemaError;\n\nexport function decodeGitHubPullRequestListJson(\n  raw: string,\n): Result.Result<\n  ReadonlyArray<NormalizedGitHubPullRequestRecord>,\n  Cause.Cause<Schema.SchemaError>\n> {\n  const result = decodeGitHubPullRequestList(raw);\n  if (Result.isSuccess(result)) {\n    const pullRequests: NormalizedGitHubPullRequestRecord[] = [];\n    for (const entry of result.success) {\n      const decodedEntry = decodeGitHubPullRequestEntry(entry);\n      if (Exit.isFailure(decodedEntry)) {\n        continue;\n      }\n      pullRequests.push(normalizeGitHubPullRequestRecord(decodedEntry.value));\n    }\n    return Result.succeed(pullRequests);\n  }\n  return Result.fail(result.failure);\n}\n\nexport function decodeGitHubPullRequestJson(\n  raw: string,\n): Result.Result<NormalizedGitHubPullRequestRecord, Cause.Cause<Schema.SchemaError>> {\n  const result = decodeGitHubPullRequest(raw);\n  if (Result.isSuccess(result)) {\n    return Result.succeed(normalizeGitHubPullRequestRecord(result.success));\n  }\n  return Result.fail(result.failure);\n}\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\n\nimport {\n  TrimmedNonEmptyString,\n  type SourceControlRepositoryVisibility,\n  type VcsError,\n} from \"@salchi/contracts\";\n\nimport * as VcsProcess from \"../vcs/VcsProcess.ts\";\nimport * as GitHubPullRequests from \"./gitHubPullRequests.ts\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport class GitHubCliError extends Schema.TaggedErrorClass<GitHubCliError>()(\"GitHubCliError\", {\n  operation: Schema.String,\n  detail: Schema.String,\n  cause: Schema.optional(Schema.Defect()),\n}) {\n  override get message(): string {\n    return `GitHub CLI failed in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport interface GitHubPullRequestSummary {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state?: \"open\" | \"closed\" | \"merged\";\n  readonly isCrossRepository?: boolean;\n  readonly headRepositoryNameWithOwner?: string | null;\n  readonly headRepositoryOwnerLogin?: string | null;\n}\n\nexport interface GitHubRepositoryCloneUrls {\n  readonly nameWithOwner: string;\n  readonly url: string;\n  readonly sshUrl: string;\n}\n\nexport interface GitHubCliShape {\n  readonly execute: (input: {\n    readonly cwd: string;\n    readonly args: ReadonlyArray<string>;\n    readonly timeoutMs?: number;\n  }) => Effect.Effect<VcsProcess.VcsProcessOutput, GitHubCliError>;\n\n  readonly listOpenPullRequests: (input: {\n    readonly cwd: string;\n    readonly repository?: string;\n    readonly headSelector: string;\n    readonly limit?: number;\n  }) => Effect.Effect<ReadonlyArray<GitHubPullRequestSummary>, GitHubCliError>;\n\n  readonly getPullRequest: (input: {\n    readonly cwd: string;\n    readonly repository?: string;\n    readonly reference: string;\n  }) => Effect.Effect<GitHubPullRequestSummary, GitHubCliError>;\n\n  readonly getRepositoryCloneUrls: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n  }) => Effect.Effect<GitHubRepositoryCloneUrls, GitHubCliError>;\n\n  readonly createRepository: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n    readonly visibility: SourceControlRepositoryVisibility;\n  }) => Effect.Effect<GitHubRepositoryCloneUrls, GitHubCliError>;\n\n  readonly createPullRequest: (input: {\n    readonly cwd: string;\n    readonly repository?: string;\n    readonly baseBranch: string;\n    readonly headSelector: string;\n    readonly title: string;\n    readonly bodyFile: string;\n  }) => Effect.Effect<void, GitHubCliError>;\n\n  readonly getDefaultBranch: (input: {\n    readonly cwd: string;\n    readonly repository?: string;\n  }) => Effect.Effect<string | null, GitHubCliError>;\n\n  readonly checkoutPullRequest: (input: {\n    readonly cwd: string;\n    readonly reference: string;\n    readonly force?: boolean;\n  }) => Effect.Effect<void, GitHubCliError>;\n}\n\nexport class GitHubCli extends Context.Service<GitHubCli, GitHubCliShape>()(\n  \"salchi/sourceControl/GitHubCli\",\n) {}\n\nfunction ghRepoArgs(repository: string | undefined): ReadonlyArray<string> {\n  return repository ? [\"--repo\", repository] : [];\n}\n\nfunction errorText(error: VcsError | unknown): string {\n  if (typeof error === \"object\" && error !== null) {\n    const tag = \"_tag\" in error && typeof error._tag === \"string\" ? error._tag : \"\";\n    const detail = \"detail\" in error && typeof error.detail === \"string\" ? error.detail : \"\";\n    const message = \"message\" in error && typeof error.message === \"string\" ? error.message : \"\";\n    return [tag, detail, message].filter(Boolean).join(\"\\n\");\n  }\n\n  return String(error);\n}\n\nfunction normalizeGitHubCliError(\n  operation: \"execute\" | \"stdout\",\n  error: VcsError | unknown,\n): GitHubCliError {\n  const text = errorText(error);\n  const lower = text.toLowerCase();\n\n  if (lower.includes(\"command not found: gh\") || lower.includes(\"enoent\")) {\n    return new GitHubCliError({\n      operation,\n      detail: \"GitHub CLI (`gh`) is required but not available on PATH.\",\n      cause: error,\n    });\n  }\n\n  if (\n    lower.includes(\"authentication failed\") ||\n    lower.includes(\"not logged in\") ||\n    lower.includes(\"gh auth login\") ||\n    lower.includes(\"no oauth token\")\n  ) {\n    return new GitHubCliError({\n      operation,\n      detail: \"GitHub CLI is not authenticated. Run `gh auth login` and retry.\",\n      cause: error,\n    });\n  }\n\n  if (\n    lower.includes(\"could not resolve to a pullrequest\") ||\n    lower.includes(\"repository.pullrequest\") ||\n    lower.includes(\"no pull requests found for branch\") ||\n    lower.includes(\"pull request not found\")\n  ) {\n    return new GitHubCliError({\n      operation,\n      detail: \"Pull request not found. Check the PR number or URL and try again.\",\n      cause: error,\n    });\n  }\n\n  return new GitHubCliError({\n    operation,\n    detail: text,\n    cause: error,\n  });\n}\n\nconst RawGitHubRepositoryCloneUrlsSchema = Schema.Struct({\n  nameWithOwner: TrimmedNonEmptyString,\n  url: TrimmedNonEmptyString,\n  sshUrl: TrimmedNonEmptyString,\n});\n\nfunction normalizeRepositoryCloneUrls(\n  raw: Schema.Schema.Type<typeof RawGitHubRepositoryCloneUrlsSchema>,\n): GitHubRepositoryCloneUrls {\n  return {\n    nameWithOwner: raw.nameWithOwner,\n    url: raw.url,\n    sshUrl: raw.sshUrl,\n  };\n}\n\n/**\n * `gh repo create` prints the canonical URL of the new repository on stdout\n * (e.g. `https://github.com/owner/repo`). Reading it back here avoids a\n * follow-up `gh repo view`, which can race GitHub's GraphQL eventual\n * consistency window and falsely report the just-created repo as missing.\n */\nfunction deriveRepositoryCloneUrlsFromCreateOutput(\n  stdout: string,\n  repository: string,\n): GitHubRepositoryCloneUrls {\n  const fallbackHost = \"github.com\";\n  const match = stdout.match(/https?:\\/\\/[^\\s]+/);\n  if (match) {\n    const cleaned = match[0].replace(/\\.git$/, \"\");\n    try {\n      const parsed = new URL(cleaned);\n      const pathname = parsed.pathname.replace(/^\\/+|\\/+$/g, \"\");\n      const segments = pathname.split(\"/\").filter(Boolean);\n      if (segments.length === 2) {\n        const nameWithOwner = `${segments[0]}/${segments[1]}`;\n        return {\n          nameWithOwner,\n          url: `${parsed.origin}/${nameWithOwner}`,\n          sshUrl: `git@${parsed.host}:${nameWithOwner}.git`,\n        };\n      }\n    } catch {\n      // Fall through to the input-derived defaults below.\n    }\n  }\n  return {\n    nameWithOwner: repository,\n    url: `https://${fallbackHost}/${repository}`,\n    sshUrl: `git@${fallbackHost}:${repository}.git`,\n  };\n}\n\nfunction decodeGitHubJson<S extends Schema.Top>(\n  raw: string,\n  schema: S,\n  operation: \"listOpenPullRequests\" | \"getPullRequest\" | \"getRepositoryCloneUrls\",\n  invalidDetail: string,\n): Effect.Effect<S[\"Type\"], GitHubCliError, S[\"DecodingServices\"]> {\n  return Schema.decodeEffect(Schema.fromJsonString(schema))(raw).pipe(\n    Effect.mapError(\n      (error) =>\n        new GitHubCliError({\n          operation,\n          detail: `${invalidDetail}: ${SchemaIssue.makeFormatterDefault()(error.issue)}`,\n          cause: error,\n        }),\n    ),\n  );\n}\n\nexport const make = Effect.fn(\"makeGitHubCli\")(function* () {\n  const process = yield* VcsProcess.VcsProcess;\n\n  const execute: GitHubCliShape[\"execute\"] = (input) =>\n    process\n      .run({\n        operation: \"GitHubCli.execute\",\n        command: \"gh\",\n        args: input.args,\n        cwd: input.cwd,\n        timeoutMs: input.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n      })\n      .pipe(Effect.mapError((error) => normalizeGitHubCliError(\"execute\", error)));\n\n  return GitHubCli.of({\n    execute,\n    listOpenPullRequests: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"pr\",\n          \"list\",\n          ...ghRepoArgs(input.repository),\n          \"--head\",\n          input.headSelector,\n          \"--state\",\n          \"open\",\n          \"--limit\",\n          String(input.limit ?? 1),\n          \"--json\",\n          \"number,title,url,baseRefName,headRefName,state,mergedAt,isCrossRepository,headRepository,headRepositoryOwner\",\n        ],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          raw.length === 0\n            ? Effect.succeed([])\n            : Effect.sync(() => GitHubPullRequests.decodeGitHubPullRequestListJson(raw)).pipe(\n                Effect.flatMap((decoded) => {\n                  if (!Result.isSuccess(decoded)) {\n                    return Effect.fail(\n                      new GitHubCliError({\n                        operation: \"listOpenPullRequests\",\n                        detail: `GitHub CLI returned invalid PR list JSON: ${GitHubPullRequests.formatGitHubJsonDecodeError(decoded.failure)}`,\n                        cause: decoded.failure,\n                      }),\n                    );\n                  }\n\n                  return Effect.succeed(\n                    decoded.success.map(({ updatedAt: _updatedAt, ...summary }) => summary),\n                  );\n                }),\n              ),\n        ),\n      ),\n    getPullRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"pr\",\n          \"view\",\n          input.reference,\n          ...ghRepoArgs(input.repository),\n          \"--json\",\n          \"number,title,url,baseRefName,headRefName,state,mergedAt,isCrossRepository,headRepository,headRepositoryOwner\",\n        ],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          Effect.sync(() => GitHubPullRequests.decodeGitHubPullRequestJson(raw)).pipe(\n            Effect.flatMap((decoded) => {\n              if (!Result.isSuccess(decoded)) {\n                return Effect.fail(\n                  new GitHubCliError({\n                    operation: \"getPullRequest\",\n                    detail: `GitHub CLI returned invalid pull request JSON: ${GitHubPullRequests.formatGitHubJsonDecodeError(decoded.failure)}`,\n                    cause: decoded.failure,\n                  }),\n                );\n              }\n\n              return Effect.succeed(\n                (({ updatedAt: _updatedAt, ...summary }) => summary)(decoded.success),\n              );\n            }),\n          ),\n        ),\n      ),\n    getRepositoryCloneUrls: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"repo\", \"view\", input.repository, \"--json\", \"nameWithOwner,url,sshUrl\"],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeGitHubJson(\n            raw,\n            RawGitHubRepositoryCloneUrlsSchema,\n            \"getRepositoryCloneUrls\",\n            \"GitHub CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map(normalizeRepositoryCloneUrls),\n      ),\n    createRepository: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"repo\", \"create\", input.repository, `--${input.visibility}`],\n      }).pipe(\n        Effect.map((result) =>\n          deriveRepositoryCloneUrlsFromCreateOutput(result.stdout, input.repository),\n        ),\n      ),\n    createPullRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"pr\",\n          \"create\",\n          ...ghRepoArgs(input.repository),\n          \"--base\",\n          input.baseBranch,\n          \"--head\",\n          input.headSelector,\n          \"--title\",\n          input.title,\n          \"--body-file\",\n          input.bodyFile,\n        ],\n      }).pipe(Effect.asVoid),\n    getDefaultBranch: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"repo\",\n          \"view\",\n          ...(input.repository ? [input.repository] : []),\n          \"--json\",\n          \"defaultBranchRef\",\n          \"--jq\",\n          \".defaultBranchRef.name\",\n        ],\n      }).pipe(\n        Effect.map((value) => {\n          const trimmed = value.stdout.trim();\n          return trimmed.length > 0 ? trimmed : null;\n        }),\n      ),\n    checkoutPullRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"pr\", \"checkout\", input.reference, ...(input.force ? [\"--force\"] : [])],\n      }).pipe(Effect.asVoid),\n  });\n});\n\nexport const layer = Layer.effect(GitHubCli, make());\n","import * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nconst GitHubAuthStatusAccountSchema = Schema.Struct({\n  state: Schema.String,\n  error: Schema.optional(Schema.String),\n  active: Schema.Boolean,\n  host: Schema.String,\n  login: Schema.String,\n});\n\nconst GitHubAuthStatusSchema = Schema.Struct({\n  hosts: Schema.Record(Schema.String, Schema.Array(GitHubAuthStatusAccountSchema)),\n});\n\nconst decodeGitHubAuthStatusJson = Schema.decodeUnknownOption(\n  Schema.fromJsonString(GitHubAuthStatusSchema),\n);\n\nexport interface GitHubAuthStatusAccount {\n  readonly host: string;\n  readonly account: string;\n  readonly authenticated: boolean;\n  readonly active: boolean;\n  readonly error: string | null;\n}\n\nexport interface GitHubAuthStatus {\n  readonly parsed: boolean;\n  readonly accounts: ReadonlyArray<GitHubAuthStatusAccount>;\n}\n\nfunction nonEmptyString(value: string): string | null {\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nexport function parseGitHubAuthStatus(text: string): GitHubAuthStatus {\n  return Option.match(decodeGitHubAuthStatusJson(text), {\n    onNone: () => ({ parsed: false, accounts: [] }),\n    onSome: (status) =>\n      ({\n        parsed: true,\n        accounts: Object.values(status.hosts).flatMap((accounts) =>\n          accounts.flatMap((account) => {\n            const host = nonEmptyString(account.host);\n            const login = nonEmptyString(account.login);\n            if (host === null || login === null) return [];\n\n            return [\n              {\n                host: host.toLowerCase(),\n                account: login,\n                authenticated: account.state === \"success\",\n                active: account.active,\n                error: account.error?.trim() || null,\n              },\n            ];\n          }),\n        ),\n      }) satisfies GitHubAuthStatus,\n  });\n}\n\nexport function findAuthenticatedGitHubAccount(\n  accounts: ReadonlyArray<GitHubAuthStatusAccount>,\n): GitHubAuthStatusAccount | undefined {\n  return (\n    accounts.find((account) => account.authenticated && account.active) ??\n    accounts.find((account) => account.authenticated)\n  );\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport {\n  SourceControlProviderError,\n  type ChangeRequest,\n  type ChangeRequestState,\n} from \"@salchi/contracts\";\n\nimport * as GitHubCli from \"./GitHubCli.ts\";\nimport { findAuthenticatedGitHubAccount, parseGitHubAuthStatus } from \"./gitHubAuthStatus.ts\";\nimport * as GitHubPullRequests from \"./gitHubPullRequests.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport * as SourceControlProviderDiscovery from \"./SourceControlProviderDiscovery.ts\";\nconst isSourceControlProviderError = Schema.is(SourceControlProviderError);\n\nfunction stripGitSuffix(path: string): string {\n  return path.replace(/\\.git$/iu, \"\");\n}\n\nfunction repositoryPathFromRemotePath(path: string): string | null {\n  const normalizedPath = path.replace(/^\\/+/u, \"\").replace(/\\/+$/u, \"\");\n  const parts = stripGitSuffix(normalizedPath)\n    .split(\"/\")\n    .filter((part) => part.length > 0);\n  if (parts.length < 2) {\n    return null;\n  }\n  return `${parts[0]}/${parts[1]}`;\n}\n\nfunction parseGitHubRepositorySelectorFromRemoteUrl(remoteUrl: string): string | null {\n  const trimmed = remoteUrl.trim();\n  if (trimmed.length === 0) {\n    return null;\n  }\n\n  const scpStyleMatch = /^git@([^:/\\s]+)[:/]([^?\\s#]+)$/iu.exec(trimmed);\n  if (scpStyleMatch?.[1] && scpStyleMatch[2]) {\n    const host = scpStyleMatch[1].toLowerCase();\n    const repository = repositoryPathFromRemotePath(scpStyleMatch[2]);\n    if (!repository) {\n      return null;\n    }\n    return host === \"github.com\" ? repository : `${host}/${repository}`;\n  }\n\n  try {\n    const parsed = new URL(trimmed);\n    const host = parsed.hostname.toLowerCase();\n    const repository = repositoryPathFromRemotePath(parsed.pathname);\n    if (!host || !repository) {\n      return null;\n    }\n    return host === \"github.com\" ? repository : `${host}/${repository}`;\n  } catch {\n    return null;\n  }\n}\n\nfunction repositorySelectorFromContext(\n  context: SourceControlProvider.SourceControlProviderContext | undefined,\n): string | undefined {\n  const selector = context ? parseGitHubRepositorySelectorFromRemoteUrl(context.remoteUrl) : null;\n  return selector ?? undefined;\n}\n\nfunction providerError(\n  operation: string,\n  cause: GitHubCli.GitHubCliError,\n): SourceControlProviderError {\n  return new SourceControlProviderError({\n    provider: \"github\",\n    operation,\n    detail: cause.detail,\n    cause,\n  });\n}\n\nfunction toChangeRequest(summary: GitHubCli.GitHubPullRequestSummary): ChangeRequest {\n  return {\n    provider: \"github\",\n    number: summary.number,\n    title: summary.title,\n    url: summary.url,\n    baseRefName: summary.baseRefName,\n    headRefName: summary.headRefName,\n    state: summary.state ?? \"open\",\n    updatedAt: Option.none(),\n    ...(summary.isCrossRepository !== undefined\n      ? { isCrossRepository: summary.isCrossRepository }\n      : {}),\n    ...(summary.headRepositoryNameWithOwner !== undefined\n      ? { headRepositoryNameWithOwner: summary.headRepositoryNameWithOwner }\n      : {}),\n    ...(summary.headRepositoryOwnerLogin !== undefined\n      ? { headRepositoryOwnerLogin: summary.headRepositoryOwnerLogin }\n      : {}),\n  };\n}\n\nfunction parseGitHubAuth(input: SourceControlProviderDiscovery.SourceControlAuthProbeInput) {\n  const output = SourceControlProviderDiscovery.combinedAuthOutput(input);\n  const authStatus = parseGitHubAuthStatus(input.stdout);\n  const authenticatedAccount = findAuthenticatedGitHubAccount(authStatus.accounts);\n  const host = authenticatedAccount?.host;\n\n  if (authenticatedAccount) {\n    return SourceControlProviderDiscovery.providerAuth({\n      status: \"authenticated\",\n      account: authenticatedAccount.account,\n      host,\n    });\n  }\n\n  const failedAccount = authStatus.accounts.find((entry) => entry.active) ?? authStatus.accounts[0];\n  if (authStatus.parsed) {\n    return SourceControlProviderDiscovery.providerAuth({\n      status: \"unauthenticated\",\n      host: failedAccount?.host,\n      detail:\n        failedAccount?.error ??\n        \"Run `gh auth login` to authenticate GitHub CLI with an active account.\",\n    });\n  }\n\n  if (input.exitCode !== 0) {\n    return SourceControlProviderDiscovery.providerAuth({\n      status: \"unauthenticated\",\n      host,\n      detail:\n        SourceControlProviderDiscovery.firstSafeAuthLine(output) ??\n        \"Run `gh auth login` to authenticate GitHub CLI.\",\n    });\n  }\n\n  return SourceControlProviderDiscovery.providerAuth({\n    status: \"unknown\",\n    host,\n    detail:\n      SourceControlProviderDiscovery.firstSafeAuthLine(output) ??\n      \"GitHub CLI auth status could not be parsed.\",\n  });\n}\n\nexport const discovery = {\n  type: \"cli\",\n  kind: \"github\",\n  label: \"GitHub\",\n  executable: \"gh\",\n  versionArgs: [\"--version\"],\n  authArgs: [\"auth\", \"status\", \"--json\", \"hosts\"],\n  parseAuth: parseGitHubAuth,\n  installHint:\n    \"Install the GitHub command-line tool (`gh`) via https://cli.github.com/ or your package manager (for example `brew install gh`).\",\n} satisfies SourceControlProviderDiscovery.SourceControlCliDiscoverySpec;\n\nexport const make = Effect.fn(\"makeGitHubSourceControlProvider\")(function* () {\n  const github = yield* GitHubCli.GitHubCli;\n\n  const listChangeRequests: SourceControlProvider.SourceControlProviderShape[\"listChangeRequests\"] =\n    (input) => {\n      const repository = repositorySelectorFromContext(input.context);\n      if (input.state === \"open\") {\n        return github\n          .listOpenPullRequests({\n            cwd: input.cwd,\n            ...(repository ? { repository } : {}),\n            headSelector: input.headSelector,\n            ...(input.limit !== undefined ? { limit: input.limit } : {}),\n          })\n          .pipe(\n            Effect.map((items) => items.map(toChangeRequest)),\n            Effect.mapError((error) => providerError(\"listChangeRequests\", error)),\n          );\n      }\n\n      const stateArg: ChangeRequestState | \"all\" = input.state;\n      return github\n        .execute({\n          cwd: input.cwd,\n          args: [\n            \"pr\",\n            \"list\",\n            ...(repository ? [\"--repo\", repository] : []),\n            \"--head\",\n            input.headSelector,\n            \"--state\",\n            stateArg,\n            \"--limit\",\n            String(input.limit ?? 20),\n            \"--json\",\n            \"number,title,url,baseRefName,headRefName,state,mergedAt,updatedAt,isCrossRepository,headRepository,headRepositoryOwner\",\n          ],\n        })\n        .pipe(\n          Effect.flatMap((result) => {\n            const raw = result.stdout.trim();\n            if (raw.length === 0) {\n              return Effect.succeed([]);\n            }\n            return Effect.sync(() => GitHubPullRequests.decodeGitHubPullRequestListJson(raw)).pipe(\n              Effect.flatMap((decoded) =>\n                Result.isSuccess(decoded)\n                  ? Effect.succeed(\n                      decoded.success.map((item) => ({\n                        ...toChangeRequest(item),\n                        updatedAt: item.updatedAt,\n                      })),\n                    )\n                  : Effect.fail(\n                      new SourceControlProviderError({\n                        provider: \"github\",\n                        operation: \"listChangeRequests\",\n                        detail: \"GitHub CLI returned invalid change request JSON.\",\n                        cause: decoded.failure,\n                      }),\n                    ),\n              ),\n            );\n          }),\n          Effect.mapError((error) =>\n            isSourceControlProviderError(error)\n              ? error\n              : providerError(\"listChangeRequests\", error),\n          ),\n        );\n    };\n\n  return SourceControlProvider.SourceControlProvider.of({\n    kind: \"github\",\n    listChangeRequests,\n    getChangeRequest: (input) => {\n      const repository = repositorySelectorFromContext(input.context);\n      return github\n        .getPullRequest({\n          ...input,\n          ...(repository ? { repository } : {}),\n        })\n        .pipe(\n          Effect.map(toChangeRequest),\n          Effect.mapError((error) => providerError(\"getChangeRequest\", error)),\n        );\n    },\n    createChangeRequest: (input) => {\n      const repository = repositorySelectorFromContext(input.context);\n      return github\n        .createPullRequest({\n          cwd: input.cwd,\n          ...(repository ? { repository } : {}),\n          baseBranch: input.baseRefName,\n          headSelector: input.headSelector,\n          title: input.title,\n          bodyFile: input.bodyFile,\n        })\n        .pipe(Effect.mapError((error) => providerError(\"createChangeRequest\", error)));\n    },\n    getRepositoryCloneUrls: (input) =>\n      github\n        .getRepositoryCloneUrls(input)\n        .pipe(Effect.mapError((error) => providerError(\"getRepositoryCloneUrls\", error))),\n    createRepository: (input) =>\n      github\n        .createRepository(input)\n        .pipe(Effect.mapError((error) => providerError(\"createRepository\", error))),\n    getDefaultBranch: (input) => {\n      const repository = repositorySelectorFromContext(input.context);\n      return github\n        .getDefaultBranch({\n          cwd: input.cwd,\n          ...(repository ? { repository } : {}),\n        })\n        .pipe(Effect.mapError((error) => providerError(\"getDefaultBranch\", error)));\n    },\n    checkoutChangeRequest: (input) =>\n      github\n        .checkoutPullRequest(input)\n        .pipe(Effect.mapError((error) => providerError(\"checkoutChangeRequest\", error))),\n  });\n});\n\nexport const layer = Layer.effect(SourceControlProvider.SourceControlProvider, make());\n","import * as Cause from \"effect/Cause\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport { PositiveInt, TrimmedNonEmptyString } from \"@salchi/contracts\";\nimport { decodeJsonResult, formatSchemaError } from \"@salchi/shared/schemaJson\";\n\nexport interface NormalizedGitLabMergeRequestRecord {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state: \"open\" | \"closed\" | \"merged\";\n  readonly updatedAt: Option.Option<DateTime.Utc>;\n  readonly isCrossRepository?: boolean;\n  readonly headRepositoryNameWithOwner?: string | null;\n  readonly headRepositoryOwnerLogin?: string | null;\n}\n\nconst GitLabProjectReferenceSchema = Schema.Struct({\n  path_with_namespace: Schema.optional(Schema.String),\n  pathWithNamespace: Schema.optional(Schema.String),\n  namespace: Schema.optional(\n    Schema.NullOr(\n      Schema.Struct({\n        path: Schema.optional(Schema.String),\n        full_path: Schema.optional(Schema.String),\n        fullPath: Schema.optional(Schema.String),\n      }),\n    ),\n  ),\n});\n\nconst GitLabMergeRequestSchema = Schema.Struct({\n  iid: PositiveInt,\n  title: TrimmedNonEmptyString,\n  web_url: TrimmedNonEmptyString,\n  source_branch: TrimmedNonEmptyString,\n  target_branch: TrimmedNonEmptyString,\n  state: Schema.optional(Schema.NullOr(Schema.String)),\n  updated_at: Schema.optional(Schema.OptionFromNullOr(Schema.DateTimeUtcFromString)),\n  source_project_id: Schema.optional(Schema.NullOr(Schema.Number)),\n  target_project_id: Schema.optional(Schema.NullOr(Schema.Number)),\n  source_project: Schema.optional(Schema.NullOr(GitLabProjectReferenceSchema)),\n  target_project: Schema.optional(Schema.NullOr(GitLabProjectReferenceSchema)),\n});\n\nfunction trimOptionalString(value: string | null | undefined): string | null {\n  const trimmed = value?.trim() ?? \"\";\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeGitLabMergeRequestState(\n  state: string | null | undefined,\n): \"open\" | \"closed\" | \"merged\" {\n  const normalized = state?.trim().toLowerCase();\n  if (normalized === \"merged\") {\n    return \"merged\";\n  }\n  if (normalized === \"closed\") {\n    return \"closed\";\n  }\n  return \"open\";\n}\n\nfunction projectPathWithNamespace(\n  project: Schema.Schema.Type<typeof GitLabProjectReferenceSchema> | null | undefined,\n): string | null {\n  const explicit =\n    trimOptionalString(project?.path_with_namespace) ??\n    trimOptionalString(project?.pathWithNamespace);\n  if (explicit) {\n    return explicit;\n  }\n\n  const namespacePath =\n    trimOptionalString(project?.namespace?.full_path) ??\n    trimOptionalString(project?.namespace?.fullPath) ??\n    trimOptionalString(project?.namespace?.path);\n  return namespacePath;\n}\n\nfunction ownerLoginFromPathWithNamespace(pathWithNamespace: string | null): string | null {\n  const [owner] = pathWithNamespace?.split(\"/\") ?? [];\n  return trimOptionalString(owner);\n}\n\nfunction normalizeGitLabMergeRequestRecord(\n  raw: Schema.Schema.Type<typeof GitLabMergeRequestSchema>,\n): NormalizedGitLabMergeRequestRecord {\n  const sourceProjectPath = projectPathWithNamespace(raw.source_project);\n  const targetProjectPath = projectPathWithNamespace(raw.target_project);\n  const isCrossRepository =\n    typeof raw.source_project_id === \"number\" && typeof raw.target_project_id === \"number\"\n      ? raw.source_project_id !== raw.target_project_id\n      : sourceProjectPath !== null && targetProjectPath !== null\n        ? sourceProjectPath.toLowerCase() !== targetProjectPath.toLowerCase()\n        : undefined;\n  const headRepositoryOwnerLogin = ownerLoginFromPathWithNamespace(sourceProjectPath);\n\n  return {\n    number: raw.iid,\n    title: raw.title,\n    url: raw.web_url,\n    baseRefName: raw.target_branch,\n    headRefName: raw.source_branch,\n    state: normalizeGitLabMergeRequestState(raw.state),\n    updatedAt: raw.updated_at ?? Option.none(),\n    ...(typeof isCrossRepository === \"boolean\" ? { isCrossRepository } : {}),\n    ...(sourceProjectPath ? { headRepositoryNameWithOwner: sourceProjectPath } : {}),\n    ...(headRepositoryOwnerLogin ? { headRepositoryOwnerLogin } : {}),\n  };\n}\n\nconst decodeGitLabMergeRequestList = decodeJsonResult(Schema.Array(Schema.Unknown));\nconst decodeGitLabMergeRequest = decodeJsonResult(GitLabMergeRequestSchema);\nconst decodeGitLabMergeRequestEntry = Schema.decodeUnknownExit(GitLabMergeRequestSchema);\n\nexport const formatGitLabJsonDecodeError = formatSchemaError;\n\nexport function decodeGitLabMergeRequestListJson(\n  raw: string,\n): Result.Result<\n  ReadonlyArray<NormalizedGitLabMergeRequestRecord>,\n  Cause.Cause<Schema.SchemaError>\n> {\n  const result = decodeGitLabMergeRequestList(raw);\n  if (Result.isSuccess(result)) {\n    const mergeRequests: NormalizedGitLabMergeRequestRecord[] = [];\n    for (const entry of result.success) {\n      const decodedEntry = decodeGitLabMergeRequestEntry(entry);\n      if (Exit.isFailure(decodedEntry)) {\n        continue;\n      }\n      mergeRequests.push(normalizeGitLabMergeRequestRecord(decodedEntry.value));\n    }\n    return Result.succeed(mergeRequests);\n  }\n  return Result.fail(result.failure);\n}\n\nexport function decodeGitLabMergeRequestJson(\n  raw: string,\n): Result.Result<NormalizedGitLabMergeRequestRecord, Cause.Cause<Schema.SchemaError>> {\n  const result = decodeGitLabMergeRequest(raw);\n  if (Result.isSuccess(result)) {\n    return Result.succeed(normalizeGitLabMergeRequestRecord(result.success));\n  }\n  return Result.fail(result.failure);\n}\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport type * as DateTime from \"effect/DateTime\";\n\nimport { TrimmedNonEmptyString, type SourceControlRepositoryVisibility } from \"@salchi/contracts\";\n\nimport * as VcsProcess from \"../vcs/VcsProcess.ts\";\nimport * as GitLabMergeRequests from \"./gitLabMergeRequests.ts\";\nimport type * as SourceControlProvider from \"./SourceControlProvider.ts\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport class GitLabCliError extends Schema.TaggedErrorClass<GitLabCliError>()(\"GitLabCliError\", {\n  operation: Schema.String,\n  detail: Schema.String,\n  cause: Schema.optional(Schema.Defect()),\n}) {\n  override get message(): string {\n    return `GitLab CLI failed in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport interface GitLabMergeRequestSummary {\n  readonly number: number;\n  readonly title: string;\n  readonly url: string;\n  readonly baseRefName: string;\n  readonly headRefName: string;\n  readonly state?: \"open\" | \"closed\" | \"merged\";\n  readonly updatedAt?: Option.Option<DateTime.Utc>;\n  readonly isCrossRepository?: boolean;\n  readonly headRepositoryNameWithOwner?: string | null;\n  readonly headRepositoryOwnerLogin?: string | null;\n}\n\nexport interface GitLabRepositoryCloneUrls {\n  readonly nameWithOwner: string;\n  readonly url: string;\n  readonly sshUrl: string;\n}\n\nexport interface GitLabCliShape {\n  readonly execute: (input: {\n    readonly cwd: string;\n    readonly args: ReadonlyArray<string>;\n    readonly timeoutMs?: number;\n  }) => Effect.Effect<VcsProcess.VcsProcessOutput, GitLabCliError>;\n\n  readonly listMergeRequests: (input: {\n    readonly cwd: string;\n    readonly headSelector: string;\n    readonly source?: SourceControlProvider.SourceControlRefSelector;\n    readonly state: \"open\" | \"closed\" | \"merged\" | \"all\";\n    readonly limit?: number;\n  }) => Effect.Effect<ReadonlyArray<GitLabMergeRequestSummary>, GitLabCliError>;\n\n  readonly getMergeRequest: (input: {\n    readonly cwd: string;\n    readonly reference: string;\n  }) => Effect.Effect<GitLabMergeRequestSummary, GitLabCliError>;\n\n  readonly getRepositoryCloneUrls: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n  }) => Effect.Effect<GitLabRepositoryCloneUrls, GitLabCliError>;\n\n  readonly createRepository: (input: {\n    readonly cwd: string;\n    readonly repository: string;\n    readonly visibility: SourceControlRepositoryVisibility;\n  }) => Effect.Effect<GitLabRepositoryCloneUrls, GitLabCliError>;\n\n  readonly createMergeRequest: (input: {\n    readonly cwd: string;\n    readonly baseBranch: string;\n    readonly headSelector: string;\n    readonly source?: SourceControlProvider.SourceControlRefSelector;\n    readonly target?: SourceControlProvider.SourceControlRefSelector;\n    readonly title: string;\n    readonly bodyFile: string;\n  }) => Effect.Effect<void, GitLabCliError>;\n\n  readonly getDefaultBranch: (input: {\n    readonly cwd: string;\n  }) => Effect.Effect<string | null, GitLabCliError>;\n\n  readonly checkoutMergeRequest: (input: {\n    readonly cwd: string;\n    readonly reference: string;\n    readonly force?: boolean;\n  }) => Effect.Effect<void, GitLabCliError>;\n}\n\nexport class GitLabCli extends Context.Service<GitLabCli, GitLabCliShape>()(\n  \"salchi/sourceControl/GitLabCli\",\n) {}\n\nfunction isVcsProcessSpawnError(error: unknown): boolean {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"_tag\" in error &&\n    error._tag === \"VcsProcessSpawnError\"\n  );\n}\n\nfunction normalizeGitLabCliError(operation: \"execute\" | \"stdout\", error: unknown): GitLabCliError {\n  if (error instanceof Error) {\n    if (error.message.includes(\"Command not found: glab\") || isVcsProcessSpawnError(error)) {\n      return new GitLabCliError({\n        operation,\n        detail: \"GitLab CLI (`glab`) is required but not available on PATH.\",\n        cause: error,\n      });\n    }\n\n    const lower = error.message.toLowerCase();\n    if (\n      lower.includes(\"authentication failed\") ||\n      lower.includes(\"not logged in\") ||\n      lower.includes(\"glab auth login\") ||\n      lower.includes(\"token\")\n    ) {\n      return new GitLabCliError({\n        operation,\n        detail: \"GitLab CLI is not authenticated. Run `glab auth login` and retry.\",\n        cause: error,\n      });\n    }\n\n    if (\n      lower.includes(\"merge request not found\") ||\n      lower.includes(\"not found\") ||\n      lower.includes(\"404\")\n    ) {\n      return new GitLabCliError({\n        operation,\n        detail: \"Merge request not found. Check the MR number or URL and try again.\",\n        cause: error,\n      });\n    }\n\n    return new GitLabCliError({\n      operation,\n      detail: `GitLab CLI command failed: ${error.message}`,\n      cause: error,\n    });\n  }\n\n  return new GitLabCliError({\n    operation,\n    detail: \"GitLab CLI command failed.\",\n    cause: error,\n  });\n}\n\nconst RawGitLabRepositoryCloneUrlsSchema = Schema.Struct({\n  path_with_namespace: TrimmedNonEmptyString,\n  web_url: TrimmedNonEmptyString,\n  http_url_to_repo: TrimmedNonEmptyString,\n  ssh_url_to_repo: TrimmedNonEmptyString,\n});\n\nconst RawGitLabDefaultBranchSchema = Schema.Struct({\n  default_branch: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n});\n\nconst RawGitLabNamespaceSchema = Schema.Struct({\n  id: Schema.Number,\n});\n\nfunction normalizeRepositoryCloneUrls(\n  raw: Schema.Schema.Type<typeof RawGitLabRepositoryCloneUrlsSchema>,\n): GitLabRepositoryCloneUrls {\n  return {\n    nameWithOwner: raw.path_with_namespace,\n    url: raw.web_url,\n    sshUrl: raw.ssh_url_to_repo,\n  };\n}\n\nfunction decodeGitLabJson<S extends Schema.Top>(\n  raw: string,\n  schema: S,\n  operation: \"getRepositoryCloneUrls\" | \"getDefaultBranch\" | \"createRepository\",\n  invalidDetail: string,\n): Effect.Effect<S[\"Type\"], GitLabCliError, S[\"DecodingServices\"]> {\n  return Schema.decodeEffect(Schema.fromJsonString(schema))(raw).pipe(\n    Effect.mapError(\n      (error) =>\n        new GitLabCliError({\n          operation,\n          detail: `${invalidDetail}: ${SchemaIssue.makeFormatterDefault()(error.issue)}`,\n          cause: error,\n        }),\n    ),\n  );\n}\n\nfunction stateArgs(state: \"open\" | \"closed\" | \"merged\" | \"all\"): ReadonlyArray<string> {\n  switch (state) {\n    case \"open\":\n      return [];\n    case \"closed\":\n      return [\"--closed\"];\n    case \"merged\":\n      return [\"--merged\"];\n    case \"all\":\n      return [\"--all\"];\n  }\n}\n\nfunction normalizeHeadSelector(headSelector: string): string {\n  const trimmed = headSelector.trim();\n  const ownerBranch = /^[^:]+:(.+)$/.exec(trimmed);\n  return ownerBranch?.[1]?.trim() || trimmed;\n}\n\nfunction sourceRefName(input: {\n  readonly headSelector: string;\n  readonly source?: SourceControlProvider.SourceControlRefSelector;\n}): string {\n  return input.source?.refName ?? normalizeHeadSelector(input.headSelector);\n}\n\nfunction sourceProjectIdentifier(\n  source: SourceControlProvider.SourceControlRefSelector | undefined,\n): string | null {\n  return source?.repository ?? source?.owner ?? null;\n}\n\nfunction toSummaryWithOptionalUpdatedAt(\n  record: GitLabMergeRequestSummary & {\n    readonly updatedAt: Option.Option<DateTime.Utc>;\n  },\n): GitLabMergeRequestSummary {\n  const { updatedAt, ...summary } = record;\n  return Option.isSome(updatedAt) ? { ...summary, updatedAt } : summary;\n}\n\nfunction parseRepositoryPath(repository: string): {\n  readonly namespacePath: string | null;\n  readonly projectPath: string;\n} {\n  const parts: Array<string> = [];\n  for (const part of repository.split(\"/\")) {\n    const trimmed = part.trim();\n    if (trimmed.length > 0) {\n      parts.push(trimmed);\n    }\n  }\n  const projectPath = parts.at(-1) ?? repository.trim();\n  const namespacePath = parts.length > 1 ? parts.slice(0, -1).join(\"/\") : null;\n  return { namespacePath, projectPath };\n}\n\nexport const make = Effect.fn(\"makeGitLabCli\")(function* () {\n  const process = yield* VcsProcess.VcsProcess;\n\n  const execute: GitLabCliShape[\"execute\"] = (input) =>\n    process\n      .run({\n        operation: \"GitLabCli.execute\",\n        command: \"glab\",\n        args: input.args,\n        cwd: input.cwd,\n        timeoutMs: input.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n      })\n      .pipe(Effect.mapError((error) => normalizeGitLabCliError(\"execute\", error)));\n\n  return GitLabCli.of({\n    execute,\n    listMergeRequests: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\n          \"mr\",\n          \"list\",\n          \"--source-branch\",\n          sourceRefName(input),\n          ...stateArgs(input.state),\n          \"--per-page\",\n          String(input.limit ?? 20),\n          \"--output\",\n          \"json\",\n        ],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          raw.length === 0\n            ? Effect.succeed([])\n            : Effect.sync(() => GitLabMergeRequests.decodeGitLabMergeRequestListJson(raw)).pipe(\n                Effect.flatMap((decoded) => {\n                  if (!Result.isSuccess(decoded)) {\n                    return Effect.fail(\n                      new GitLabCliError({\n                        operation: \"listMergeRequests\",\n                        detail: `GitLab CLI returned invalid MR list JSON: ${GitLabMergeRequests.formatGitLabJsonDecodeError(decoded.failure)}`,\n                        cause: decoded.failure,\n                      }),\n                    );\n                  }\n\n                  return Effect.succeed(decoded.success.map(toSummaryWithOptionalUpdatedAt));\n                }),\n              ),\n        ),\n      ),\n    getMergeRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"mr\", \"view\", input.reference, \"--output\", \"json\"],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          Effect.sync(() => GitLabMergeRequests.decodeGitLabMergeRequestJson(raw)).pipe(\n            Effect.flatMap((decoded) => {\n              if (!Result.isSuccess(decoded)) {\n                return Effect.fail(\n                  new GitLabCliError({\n                    operation: \"getMergeRequest\",\n                    detail: `GitLab CLI returned invalid merge request JSON: ${GitLabMergeRequests.formatGitLabJsonDecodeError(decoded.failure)}`,\n                    cause: decoded.failure,\n                  }),\n                );\n              }\n\n              return Effect.succeed(toSummaryWithOptionalUpdatedAt(decoded.success));\n            }),\n          ),\n        ),\n      ),\n    getRepositoryCloneUrls: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"api\", `projects/${encodeURIComponent(input.repository)}`],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeGitLabJson(\n            raw,\n            RawGitLabRepositoryCloneUrlsSchema,\n            \"getRepositoryCloneUrls\",\n            \"GitLab CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map(normalizeRepositoryCloneUrls),\n      ),\n    createRepository: (input) => {\n      const { namespacePath, projectPath } = parseRepositoryPath(input.repository);\n      const namespaceId: Effect.Effect<number | null, GitLabCliError> = namespacePath\n        ? execute({\n            cwd: input.cwd,\n            args: [\"api\", `namespaces/${encodeURIComponent(namespacePath)}`],\n          }).pipe(\n            Effect.map((result) => result.stdout.trim()),\n            Effect.flatMap((raw) =>\n              decodeGitLabJson(\n                raw,\n                RawGitLabNamespaceSchema,\n                \"createRepository\",\n                \"GitLab CLI returned invalid namespace JSON.\",\n              ),\n            ),\n            Effect.map((namespace) => namespace.id),\n          )\n        : Effect.succeed(null);\n\n      return namespaceId.pipe(\n        Effect.flatMap((resolvedNamespaceId) =>\n          execute({\n            cwd: input.cwd,\n            args: [\n              \"api\",\n              \"--method\",\n              \"POST\",\n              \"projects\",\n              \"--raw-field\",\n              `path=${projectPath}`,\n              \"--raw-field\",\n              `name=${projectPath}`,\n              \"--raw-field\",\n              `visibility=${input.visibility}`,\n              ...(resolvedNamespaceId === null\n                ? []\n                : [\"--raw-field\", `namespace_id=${resolvedNamespaceId}`]),\n            ],\n          }),\n        ),\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeGitLabJson(\n            raw,\n            RawGitLabRepositoryCloneUrlsSchema,\n            \"createRepository\",\n            \"GitLab CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map(normalizeRepositoryCloneUrls),\n      );\n    },\n    createMergeRequest: (input) => {\n      const sourceProject = sourceProjectIdentifier(input.source);\n      return execute({\n        cwd: input.cwd,\n        args: [\n          \"api\",\n          \"--method\",\n          \"POST\",\n          \"projects/:fullpath/merge_requests\",\n          \"--raw-field\",\n          `source_branch=${sourceRefName(input)}`,\n          \"--raw-field\",\n          `target_branch=${input.target?.refName ?? input.baseBranch}`,\n          ...(sourceProject ? [\"--raw-field\", `source_project_id=${sourceProject}`] : []),\n          \"--raw-field\",\n          `title=${input.title}`,\n          \"--field\",\n          `description=@${input.bodyFile}`,\n        ],\n      }).pipe(Effect.asVoid);\n    },\n    getDefaultBranch: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"api\", \"projects/:fullpath\"],\n      }).pipe(\n        Effect.map((result) => result.stdout.trim()),\n        Effect.flatMap((raw) =>\n          decodeGitLabJson(\n            raw,\n            RawGitLabDefaultBranchSchema,\n            \"getDefaultBranch\",\n            \"GitLab CLI returned invalid repository JSON.\",\n          ),\n        ),\n        Effect.map((value) => value.default_branch ?? null),\n      ),\n    checkoutMergeRequest: (input) =>\n      execute({\n        cwd: input.cwd,\n        args: [\"mr\", \"checkout\", input.reference],\n      }).pipe(Effect.asVoid),\n  });\n});\n\nexport const layer = Layer.effect(GitLabCli, make());\n","const HOST_LINE_PATTERN = /^(?:[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?|\\[[a-f0-9:.]+\\])(?::\\d+)?$/iu;\nconst LOGGED_IN_PATTERN = /Logged in to .+? as\\s+([^\\s(]+)/iu;\n\nexport interface GitLabAuthStatusHost {\n  readonly host: string;\n  readonly account: string | null;\n}\n\nexport function parseGitLabAuthStatusHosts(text: string): ReadonlyArray<GitLabAuthStatusHost> {\n  const hosts: GitLabAuthStatusHost[] = [];\n  let currentHost: string | null = null;\n  let currentLines: string[] = [];\n\n  const flush = () => {\n    if (currentHost === null) return;\n\n    const account = LOGGED_IN_PATTERN.exec(currentLines.join(\"\\n\"))?.[1]?.trim() || null;\n    hosts.push({ host: currentHost, account });\n    currentHost = null;\n    currentLines = [];\n  };\n\n  for (const rawLine of text.split(/\\r?\\n/)) {\n    const line = rawLine.trim();\n    if (line.length === 0) continue;\n\n    const isHostLine =\n      rawLine.length === rawLine.trimStart().length && HOST_LINE_PATTERN.test(line);\n    if (isHostLine) {\n      flush();\n      currentHost = line.toLowerCase();\n      continue;\n    }\n\n    if (currentHost !== null) {\n      currentLines.push(line);\n    }\n  }\n\n  flush();\n  return hosts;\n}\n\nexport function findAuthenticatedGitLabHost(\n  hosts: ReadonlyArray<GitLabAuthStatusHost>,\n): GitLabAuthStatusHost | undefined {\n  return hosts.find((host) => host.account !== null);\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport { SourceControlProviderError, type ChangeRequest } from \"@salchi/contracts\";\n\nimport * as GitLabCli from \"./GitLabCli.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport * as SourceControlProviderDiscovery from \"./SourceControlProviderDiscovery.ts\";\nimport { findAuthenticatedGitLabHost, parseGitLabAuthStatusHosts } from \"./gitLabAuthStatus.ts\";\n\nfunction providerError(\n  operation: string,\n  cause: GitLabCli.GitLabCliError,\n): SourceControlProviderError {\n  return new SourceControlProviderError({\n    provider: \"gitlab\",\n    operation,\n    detail: cause.detail,\n    cause,\n  });\n}\n\nfunction toChangeRequest(summary: GitLabCli.GitLabMergeRequestSummary): ChangeRequest {\n  return {\n    provider: \"gitlab\",\n    number: summary.number,\n    title: summary.title,\n    url: summary.url,\n    baseRefName: summary.baseRefName,\n    headRefName: summary.headRefName,\n    state: summary.state ?? \"open\",\n    updatedAt: summary.updatedAt ?? Option.none(),\n    ...(summary.isCrossRepository !== undefined\n      ? { isCrossRepository: summary.isCrossRepository }\n      : {}),\n    ...(summary.headRepositoryNameWithOwner !== undefined\n      ? { headRepositoryNameWithOwner: summary.headRepositoryNameWithOwner }\n      : {}),\n    ...(summary.headRepositoryOwnerLogin !== undefined\n      ? { headRepositoryOwnerLogin: summary.headRepositoryOwnerLogin }\n      : {}),\n  };\n}\n\nfunction parseGitLabAuth(input: SourceControlProviderDiscovery.SourceControlAuthProbeInput) {\n  const output = SourceControlProviderDiscovery.combinedAuthOutput(input);\n  const authenticatedHost = findAuthenticatedGitLabHost(parseGitLabAuthStatusHosts(output));\n  const account =\n    authenticatedHost?.account ??\n    SourceControlProviderDiscovery.matchFirst(output, [\n      /Logged in to .* as\\s+([^\\s(]+)/iu,\n      /Logged in to .* account\\s+([^\\s(]+)/iu,\n      /account:\\s*([^\\s(]+)/iu,\n    ]);\n  const host = authenticatedHost?.host ?? SourceControlProviderDiscovery.parseCliHost(output);\n\n  if (account) {\n    return SourceControlProviderDiscovery.providerAuth({ status: \"authenticated\", account, host });\n  }\n\n  if (input.exitCode !== 0) {\n    return SourceControlProviderDiscovery.providerAuth({\n      status: \"unauthenticated\",\n      host,\n      detail:\n        SourceControlProviderDiscovery.firstSafeAuthLine(output) ??\n        \"Run `glab auth login` to authenticate GitLab CLI.\",\n    });\n  }\n\n  return SourceControlProviderDiscovery.providerAuth({\n    status: \"unknown\",\n    host,\n    detail:\n      SourceControlProviderDiscovery.firstSafeAuthLine(output) ??\n      \"GitLab CLI auth status could not be parsed.\",\n  });\n}\n\nfunction refineUnknownGitLabRemote(\n  input: SourceControlProviderDiscovery.SourceControlUnknownRemoteRefinementInput,\n) {\n  const host = input.context.provider.name.toLowerCase();\n  const authenticated = parseGitLabAuthStatusHosts(\n    SourceControlProviderDiscovery.combinedAuthOutput(input.auth),\n  ).some((entry) => entry.account !== null && entry.host === host);\n\n  if (!authenticated) {\n    return null;\n  }\n\n  return {\n    kind: \"gitlab\",\n    name: \"GitLab Self-Hosted\",\n    baseUrl: input.context.provider.baseUrl,\n  } as const;\n}\n\nexport const discovery = {\n  type: \"cli\",\n  kind: \"gitlab\",\n  label: \"GitLab\",\n  executable: \"glab\",\n  versionArgs: [\"--version\"],\n  authArgs: [\"auth\", \"status\"],\n  parseAuth: parseGitLabAuth,\n  refineUnknownRemote: refineUnknownGitLabRemote,\n  installHint:\n    \"Install the GitLab command-line tool (`glab`) from https://gitlab.com/gitlab-org/cli or your package manager (for example `brew install glab`).\",\n} satisfies SourceControlProviderDiscovery.SourceControlCliDiscoverySpec;\n\nexport const make = Effect.fn(\"makeGitLabSourceControlProvider\")(function* () {\n  const gitlab = yield* GitLabCli.GitLabCli;\n\n  return SourceControlProvider.SourceControlProvider.of({\n    kind: \"gitlab\",\n    listChangeRequests: (input) => {\n      const source = SourceControlProvider.sourceControlRefFromInput(input);\n      return gitlab\n        .listMergeRequests({\n          cwd: input.cwd,\n          headSelector: input.headSelector,\n          ...(source ? { source } : {}),\n          state: input.state,\n          ...(input.limit !== undefined ? { limit: input.limit } : {}),\n        })\n        .pipe(\n          Effect.map((items) => items.map(toChangeRequest)),\n          Effect.mapError((error) => providerError(\"listChangeRequests\", error)),\n        );\n    },\n    getChangeRequest: (input) =>\n      gitlab.getMergeRequest(input).pipe(\n        Effect.map(toChangeRequest),\n        Effect.mapError((error) => providerError(\"getChangeRequest\", error)),\n      ),\n    createChangeRequest: (input) => {\n      const source = SourceControlProvider.sourceControlRefFromInput(input);\n      return gitlab\n        .createMergeRequest({\n          cwd: input.cwd,\n          baseBranch: input.baseRefName,\n          headSelector: input.headSelector,\n          ...(source ? { source } : {}),\n          ...(input.target ? { target: input.target } : {}),\n          title: input.title,\n          bodyFile: input.bodyFile,\n        })\n        .pipe(Effect.mapError((error) => providerError(\"createChangeRequest\", error)));\n    },\n    getRepositoryCloneUrls: (input) =>\n      gitlab\n        .getRepositoryCloneUrls(input)\n        .pipe(Effect.mapError((error) => providerError(\"getRepositoryCloneUrls\", error))),\n    createRepository: (input) =>\n      gitlab\n        .createRepository(input)\n        .pipe(Effect.mapError((error) => providerError(\"createRepository\", error))),\n    getDefaultBranch: (input) =>\n      gitlab\n        .getDefaultBranch(input)\n        .pipe(Effect.mapError((error) => providerError(\"getDefaultBranch\", error))),\n    checkoutChangeRequest: (input) =>\n      gitlab\n        .checkoutMergeRequest(input)\n        .pipe(Effect.mapError((error) => providerError(\"checkoutChangeRequest\", error))),\n  });\n});\n\nexport const layer = Layer.effect(SourceControlProvider.SourceControlProvider, make());\n","import * as Cache from \"effect/Cache\";\nimport * as Context from \"effect/Context\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport {\n  SourceControlProviderError,\n  type SourceControlProviderDiscoveryItem,\n} from \"@salchi/contracts\";\nimport type { SourceControlProviderKind } from \"@salchi/contracts\";\nimport { detectSourceControlProviderFromRemoteUrl } from \"@salchi/shared/sourceControl\";\n\nimport * as AzureDevOpsSourceControlProvider from \"./AzureDevOpsSourceControlProvider.ts\";\nimport * as BitbucketSourceControlProvider from \"./BitbucketSourceControlProvider.ts\";\nimport * as GitHubSourceControlProvider from \"./GitHubSourceControlProvider.ts\";\nimport * as GitLabSourceControlProvider from \"./GitLabSourceControlProvider.ts\";\nimport * as SourceControlProvider from \"./SourceControlProvider.ts\";\nimport * as SourceControlProviderDiscovery from \"./SourceControlProviderDiscovery.ts\";\nimport { ServerConfig } from \"../config.ts\";\nimport * as VcsDriverRegistry from \"../vcs/VcsDriverRegistry.ts\";\nimport * as VcsProcess from \"../vcs/VcsProcess.ts\";\n\nconst PROVIDER_DETECTION_CACHE_CAPACITY = 2_048;\nconst PROVIDER_DETECTION_CACHE_TTL = Duration.seconds(5);\n\nexport interface SourceControlProviderRegistration {\n  readonly kind: SourceControlProviderKind;\n  readonly provider: SourceControlProvider.SourceControlProviderShape;\n  readonly discovery: SourceControlProviderDiscovery.SourceControlProviderDiscoverySpec;\n}\n\nexport interface SourceControlProviderHandle {\n  readonly provider: SourceControlProvider.SourceControlProviderShape;\n  readonly context: SourceControlProvider.SourceControlProviderContext | null;\n}\n\nexport interface SourceControlProviderRegistryShape {\n  readonly get: (\n    kind: SourceControlProviderKind,\n  ) => Effect.Effect<SourceControlProvider.SourceControlProviderShape, SourceControlProviderError>;\n  readonly resolveHandle: (input: {\n    readonly cwd: string;\n  }) => Effect.Effect<SourceControlProviderHandle, SourceControlProviderError>;\n  readonly resolve: (input: {\n    readonly cwd: string;\n  }) => Effect.Effect<SourceControlProvider.SourceControlProviderShape, SourceControlProviderError>;\n  readonly discover: Effect.Effect<ReadonlyArray<SourceControlProviderDiscoveryItem>>;\n}\n\nexport class SourceControlProviderRegistry extends Context.Service<\n  SourceControlProviderRegistry,\n  SourceControlProviderRegistryShape\n>()(\"salchi/sourceControl/SourceControlProviderRegistry\") {}\n\nfunction unsupportedProvider(\n  kind: SourceControlProviderKind,\n): SourceControlProvider.SourceControlProviderShape {\n  const unsupported = (operation: string) =>\n    Effect.fail(\n      new SourceControlProviderError({\n        provider: kind,\n        operation,\n        detail: `No ${kind} source control provider is registered.`,\n      }),\n    );\n\n  return SourceControlProvider.SourceControlProvider.of({\n    kind,\n    listChangeRequests: () => unsupported(\"listChangeRequests\"),\n    getChangeRequest: () => unsupported(\"getChangeRequest\"),\n    createChangeRequest: () => unsupported(\"createChangeRequest\"),\n    getRepositoryCloneUrls: () => unsupported(\"getRepositoryCloneUrls\"),\n    createRepository: () => unsupported(\"createRepository\"),\n    getDefaultBranch: () => unsupported(\"getDefaultBranch\"),\n    checkoutChangeRequest: () => unsupported(\"checkoutChangeRequest\"),\n  });\n}\n\nfunction providerDetectionError(operation: string, cwd: string, cause: unknown) {\n  return new SourceControlProviderError({\n    provider: \"unknown\",\n    operation,\n    detail: `Failed to detect source control provider for ${cwd}.`,\n    cause,\n  });\n}\n\nfunction selectProviderContext(\n  remotes: ReadonlyArray<{\n    readonly name: string;\n    readonly url: string;\n  }>,\n): SourceControlProvider.SourceControlProviderContext | null {\n  const candidates: Array<SourceControlProvider.SourceControlProviderContext> = [];\n  for (const remote of remotes) {\n    const provider = detectSourceControlProviderFromRemoteUrl(remote.url);\n    if (provider) {\n      candidates.push({\n        provider,\n        remoteName: remote.name,\n        remoteUrl: remote.url,\n      });\n    }\n  }\n\n  return (\n    candidates.find((candidate) => candidate.remoteName === \"origin\") ??\n    candidates.find((candidate) => candidate.provider.kind !== \"unknown\") ??\n    candidates[0] ??\n    null\n  );\n}\n\nfunction bindProviderContext(\n  provider: SourceControlProvider.SourceControlProviderShape,\n  context: SourceControlProvider.SourceControlProviderContext | null,\n): SourceControlProvider.SourceControlProviderShape {\n  if (context === null) {\n    return provider;\n  }\n\n  return SourceControlProvider.SourceControlProvider.of({\n    kind: provider.kind,\n    listChangeRequests: (input) =>\n      provider.listChangeRequests({\n        ...input,\n        context: input.context ?? context,\n      }),\n    getChangeRequest: (input) =>\n      provider.getChangeRequest({\n        ...input,\n        context: input.context ?? context,\n      }),\n    createChangeRequest: (input) =>\n      provider.createChangeRequest({\n        ...input,\n        context: input.context ?? context,\n      }),\n    getRepositoryCloneUrls: (input) =>\n      provider.getRepositoryCloneUrls({\n        ...input,\n        context: input.context ?? context,\n      }),\n    createRepository: (input) => provider.createRepository(input),\n    getDefaultBranch: (input) =>\n      provider.getDefaultBranch({\n        ...input,\n        context: input.context ?? context,\n      }),\n    checkoutChangeRequest: (input) =>\n      provider.checkoutChangeRequest({\n        ...input,\n        context: input.context ?? context,\n      }),\n  });\n}\n\nexport const makeWithProviders = Effect.fn(\"makeSourceControlProviderRegistryWithProviders\")(\n  function* (registrations: ReadonlyArray<SourceControlProviderRegistration>) {\n    const config = yield* ServerConfig;\n    const process = yield* VcsProcess.VcsProcess;\n    const vcsRegistry = yield* VcsDriverRegistry.VcsDriverRegistry;\n    const providers = new Map<\n      SourceControlProviderKind,\n      SourceControlProvider.SourceControlProviderShape\n    >(registrations.map((registration) => [registration.kind, registration.provider]));\n    const discoverySpecs = registrations.map((registration) => registration.discovery);\n\n    const get: SourceControlProviderRegistryShape[\"get\"] = (kind) =>\n      Effect.succeed(providers.get(kind) ?? unsupportedProvider(kind));\n\n    const detectProviderContext = Effect.fn(\"SourceControlProviderRegistry.detectProviderContext\")(\n      function* (cwd: string) {\n        const handle = yield* vcsRegistry\n          .resolve({ cwd })\n          .pipe(Effect.mapError((error) => providerDetectionError(\"detectProvider\", cwd, error)));\n        const remotes = yield* handle.driver\n          .listRemotes(cwd)\n          .pipe(Effect.mapError((error) => providerDetectionError(\"detectProvider\", cwd, error)));\n        const context = selectProviderContext(remotes.remotes);\n\n        return yield* SourceControlProviderDiscovery.refineUnknownRemoteProvider({\n          specs: discoverySpecs,\n          process,\n          cwd,\n          context,\n        });\n      },\n    );\n\n    const providerContextCache = yield* Cache.makeWith<\n      string,\n      SourceControlProvider.SourceControlProviderContext | null,\n      SourceControlProviderError\n    >(detectProviderContext, {\n      capacity: PROVIDER_DETECTION_CACHE_CAPACITY,\n      timeToLive: (exit) => (Exit.isSuccess(exit) ? PROVIDER_DETECTION_CACHE_TTL : Duration.zero),\n    });\n\n    const resolveHandle: SourceControlProviderRegistryShape[\"resolveHandle\"] = (input) =>\n      Cache.get(providerContextCache, input.cwd).pipe(\n        Effect.map((context) => {\n          const kind = context?.provider.kind ?? \"unknown\";\n          const provider = providers.get(kind) ?? unsupportedProvider(kind);\n          return {\n            provider: bindProviderContext(provider, context),\n            context,\n          } satisfies SourceControlProviderHandle;\n        }),\n      );\n\n    return SourceControlProviderRegistry.of({\n      get,\n      resolveHandle,\n      resolve: (input) => resolveHandle(input).pipe(Effect.map((handle) => handle.provider)),\n      discover: Effect.all(\n        discoverySpecs.map((spec) =>\n          SourceControlProviderDiscovery.probeSourceControlProvider({\n            spec,\n            process,\n            cwd: config.cwd,\n          }),\n        ),\n        { concurrency: \"unbounded\" },\n      ),\n    });\n  },\n);\n\nexport const make = Effect.fn(\"makeSourceControlProviderRegistry\")(function* () {\n  const github = yield* GitHubSourceControlProvider.make();\n  const gitlab = yield* GitLabSourceControlProvider.make();\n  const bitbucket = yield* BitbucketSourceControlProvider.make();\n  const bitbucketDiscovery = yield* BitbucketSourceControlProvider.makeDiscovery();\n  const azureDevOps = yield* AzureDevOpsSourceControlProvider.make();\n  return yield* makeWithProviders([\n    {\n      kind: \"github\",\n      provider: github,\n      discovery: GitHubSourceControlProvider.discovery,\n    },\n    {\n      kind: \"gitlab\",\n      provider: gitlab,\n      discovery: GitLabSourceControlProvider.discovery,\n    },\n    {\n      kind: \"azure-devops\",\n      provider: azureDevOps,\n      discovery: AzureDevOpsSourceControlProvider.discovery,\n    },\n    {\n      kind: \"bitbucket\",\n      provider: bitbucket,\n      discovery: bitbucketDiscovery,\n    },\n  ]);\n});\n\nexport const layer = Layer.effect(SourceControlProviderRegistry, make());\n","import * as Arr from \"effect/Array\";\nimport * as Cache from \"effect/Cache\";\nimport * as Context from \"effect/Context\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Path from \"effect/Path\";\nimport * as Ref from \"effect/Ref\";\nimport {\n  GitActionProgressEvent,\n  GitActionProgressPhase,\n  GitCommandError,\n  GenerateCommitMessageInput,\n  GenerateCommitMessageResult,\n  GitPreparePullRequestThreadInput,\n  GitPreparePullRequestThreadResult,\n  GitPullRequestRefInput,\n  GitResolvePullRequestResult,\n  GitRunStackedActionInput,\n  GitRunStackedActionResult,\n  GitStackedAction,\n  VcsStatusInput,\n  type VcsStatusLocalResult,\n  type VcsStatusRemoteResult,\n  VcsStatusResult,\n  ModelSelection,\n} from \"@salchi/contracts\";\nimport {\n  detectSourceControlProviderFromGitRemoteUrl,\n  mergeGitStatusParts,\n  normalizeGitRemoteUrl,\n  resolveAutoFeatureBranchName,\n  sanitizeBranchFragment,\n  sanitizeFeatureBranchName,\n  WORKTREE_BRANCH_PREFIX,\n} from \"@salchi/shared/git\";\nimport {\n  getChangeRequestTerminologyForKind,\n  type ChangeRequestTerminology,\n} from \"@salchi/shared/sourceControl\";\n\nimport { GitManagerError } from \"@salchi/contracts\";\nimport { TextGeneration } from \"../textGeneration/TextGeneration.ts\";\nimport { ProjectSetupScriptRunner } from \"../project/Services/ProjectSetupScriptRunner.ts\";\nimport { extractBranchNameFromRemoteRef } from \"./remoteRefs.ts\";\nimport { ServerSettingsService } from \"../serverSettings.ts\";\nimport type { GitManagerServiceError } from \"@salchi/contracts\";\nimport { GitVcsDriver, type GitStatusDetails } from \"../vcs/GitVcsDriver.ts\";\nimport { SourceControlProviderRegistry } from \"../sourceControl/SourceControlProviderRegistry.ts\";\nimport type { ChangeRequest } from \"@salchi/contracts\";\n\nexport interface GitActionProgressReporter {\n  readonly publish: (event: GitActionProgressEvent) => Effect.Effect<void, never>;\n}\n\nexport interface GitRunStackedActionOptions {\n  readonly actionId?: string;\n  readonly progressReporter?: GitActionProgressReporter;\n}\n\nexport interface GitManagerShape {\n  readonly status: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusResult, GitManagerServiceError>;\n  readonly localStatus: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusLocalResult, GitManagerServiceError>;\n  readonly remoteStatus: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusRemoteResult | null, GitManagerServiceError>;\n  readonly invalidateLocalStatus: (cwd: string) => Effect.Effect<void, never>;\n  readonly invalidateRemoteStatus: (cwd: string) => Effect.Effect<void, never>;\n  readonly invalidateStatus: (cwd: string) => Effect.Effect<void, never>;\n  readonly resolvePullRequest: (\n    input: GitPullRequestRefInput,\n  ) => Effect.Effect<GitResolvePullRequestResult, GitManagerServiceError>;\n  readonly preparePullRequestThread: (\n    input: GitPreparePullRequestThreadInput,\n  ) => Effect.Effect<GitPreparePullRequestThreadResult, GitManagerServiceError>;\n  readonly runStackedAction: (\n    input: GitRunStackedActionInput,\n    options?: GitRunStackedActionOptions,\n  ) => Effect.Effect<GitRunStackedActionResult, GitManagerServiceError>;\n  readonly generateCommitMessage: (\n    input: GenerateCommitMessageInput,\n  ) => Effect.Effect<GenerateCommitMessageResult, GitManagerServiceError>;\n}\n\nexport class GitManager extends Context.Service<GitManager, GitManagerShape>()(\n  \"salchi/git/GitManager\",\n) {}\n\nconst COMMIT_TIMEOUT_MS = 10 * 60_000;\nconst MAX_PROGRESS_TEXT_LENGTH = 500;\nconst SHORT_SHA_LENGTH = 7;\nconst TOAST_DESCRIPTION_MAX = 72;\nconst STATUS_RESULT_CACHE_TTL = Duration.seconds(1);\nconst STATUS_RESULT_CACHE_CAPACITY = 2_048;\nconst PR_LOOKUP_CACHE_TTL = Duration.minutes(2);\nconst PR_LOOKUP_FAILURE_BASE_TTL = Duration.seconds(20);\nconst PR_LOOKUP_FAILURE_MAX_TTL = Duration.minutes(15);\nconst PR_LOOKUP_CACHE_CAPACITY = 2_048;\n\nexport function prLookupFailureTtl(consecutiveFailures: number): Duration.Duration {\n  const exponent = Math.max(0, consecutiveFailures - 1);\n  const backoffMs = Duration.toMillis(PR_LOOKUP_FAILURE_BASE_TTL) * Math.pow(2, exponent);\n  return Duration.min(Duration.millis(backoffMs), PR_LOOKUP_FAILURE_MAX_TTL);\n}\ntype StripProgressContext<T> = T extends any ? Omit<T, \"actionId\" | \"cwd\" | \"action\"> : never;\ntype GitActionProgressPayload = StripProgressContext<GitActionProgressEvent>;\ntype GitActionProgressEmitter = (event: GitActionProgressPayload) => Effect.Effect<void, never>;\n\nfunction isNotGitRepositoryError(error: GitCommandError): boolean {\n  return error.message.toLowerCase().includes(\"not a git repository\");\n}\n\ninterface OpenPrInfo {\n  number: number;\n  title: string;\n  url: string;\n  baseRefName: string;\n  headRefName: string;\n}\n\ninterface PullRequestInfo extends OpenPrInfo, PullRequestHeadRemoteInfo {\n  state: \"open\" | \"closed\" | \"merged\";\n  updatedAt: Option.Option<DateTime.Utc>;\n}\n\nconst pullRequestUpdatedAtDescOrder: Order.Order<PullRequestInfo> = Order.mapInput(\n  Order.flip(Option.makeOrder(DateTime.Order)),\n  (pullRequest) => pullRequest.updatedAt,\n);\n\ninterface ResolvedPullRequest {\n  number: number;\n  title: string;\n  url: string;\n  baseBranch: string;\n  headBranch: string;\n  state: \"open\" | \"closed\" | \"merged\";\n}\n\ninterface PullRequestHeadRemoteInfo {\n  isCrossRepository?: boolean | undefined;\n  headRepositoryNameWithOwner?: string | null | undefined;\n  headRepositoryOwnerLogin?: string | null | undefined;\n}\n\ninterface BranchHeadContext {\n  localBranch: string;\n  headBranch: string;\n  headSelectors: ReadonlyArray<string>;\n  preferredHeadSelector: string;\n  remoteName: string | null;\n  headRemoteUrlKey: string | null;\n  headRepositoryNameWithOwner: string | null;\n  headRepositoryOwnerLogin: string | null;\n  isCrossRepository: boolean;\n}\n\nfunction parseRepositoryNameFromPullRequestUrl(url: string): string | null {\n  const trimmed = url.trim();\n  const match = /^https:\\/\\/github\\.com\\/[^/]+\\/([^/]+)\\/pull\\/\\d+(?:\\/.*)?$/i.exec(trimmed);\n  const repositoryName = match?.[1]?.trim() ?? \"\";\n  return repositoryName.length > 0 ? repositoryName : null;\n}\n\nfunction resolveHeadRepositoryNameWithOwner(\n  pullRequest: ResolvedPullRequest & PullRequestHeadRemoteInfo,\n): string | null {\n  const explicitRepository = pullRequest.headRepositoryNameWithOwner?.trim() ?? \"\";\n  if (explicitRepository.length > 0) {\n    return explicitRepository;\n  }\n\n  if (!pullRequest.isCrossRepository) {\n    return null;\n  }\n\n  const ownerLogin = pullRequest.headRepositoryOwnerLogin?.trim() ?? \"\";\n  const repositoryName = parseRepositoryNameFromPullRequestUrl(pullRequest.url);\n  if (ownerLogin.length === 0 || !repositoryName) {\n    return null;\n  }\n\n  return `${ownerLogin}/${repositoryName}`;\n}\n\nfunction resolvePullRequestWorktreeLocalBranchName(\n  pullRequest: ResolvedPullRequest & PullRequestHeadRemoteInfo,\n): string {\n  if (!pullRequest.isCrossRepository) {\n    return pullRequest.headBranch;\n  }\n\n  const sanitizedHeadBranch = sanitizeBranchFragment(pullRequest.headBranch).trim();\n  const suffix = sanitizedHeadBranch.length > 0 ? sanitizedHeadBranch : \"head\";\n  return `${WORKTREE_BRANCH_PREFIX}/pr-${pullRequest.number}/${suffix}`;\n}\n\nfunction parseGitHubRepositoryNameWithOwnerFromRemoteUrl(url: string | null): string | null {\n  const trimmed = url?.trim() ?? \"\";\n  if (trimmed.length === 0) {\n    return null;\n  }\n\n  const match =\n    /^(?:git@github\\.com:|ssh:\\/\\/git@github\\.com\\/|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)([^/\\s]+\\/[^/\\s]+?)(?:\\.git)?\\/?$/i.exec(\n      trimmed,\n    );\n  const repositoryNameWithOwner = match?.[1]?.trim() ?? \"\";\n  return repositoryNameWithOwner.length > 0 ? repositoryNameWithOwner : null;\n}\n\nfunction parseRepositoryOwnerLogin(nameWithOwner: string | null): string | null {\n  const trimmed = nameWithOwner?.trim() ?? \"\";\n  if (trimmed.length === 0) {\n    return null;\n  }\n  const [ownerLogin] = trimmed.split(\"/\");\n  const normalizedOwnerLogin = ownerLogin?.trim() ?? \"\";\n  return normalizedOwnerLogin.length > 0 ? normalizedOwnerLogin : null;\n}\n\nfunction normalizeOptionalString(value: string | null | undefined): string | null {\n  const trimmed = value?.trim() ?? \"\";\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeOptionalRepositoryNameWithOwner(value: string | null | undefined): string | null {\n  const normalized = normalizeOptionalString(value);\n  return normalized ? normalized.toLowerCase() : null;\n}\n\nfunction normalizeOptionalOwnerLogin(value: string | null | undefined): string | null {\n  const normalized = normalizeOptionalString(value);\n  return normalized ? normalized.toLowerCase() : null;\n}\n\nfunction resolvePullRequestHeadRepositoryNameWithOwner(\n  pr: PullRequestHeadRemoteInfo & { url: string },\n) {\n  const explicitRepository = normalizeOptionalString(pr.headRepositoryNameWithOwner);\n  if (explicitRepository) {\n    return explicitRepository;\n  }\n\n  if (!pr.isCrossRepository) {\n    return null;\n  }\n\n  const ownerLogin = normalizeOptionalString(pr.headRepositoryOwnerLogin);\n  const repositoryName = parseRepositoryNameFromPullRequestUrl(pr.url);\n  if (!ownerLogin || !repositoryName) {\n    return null;\n  }\n\n  return `${ownerLogin}/${repositoryName}`;\n}\n\nfunction matchesBranchHeadContext(\n  pr: PullRequestInfo,\n  headContext: Pick<\n    BranchHeadContext,\n    \"headBranch\" | \"headRepositoryNameWithOwner\" | \"headRepositoryOwnerLogin\" | \"isCrossRepository\"\n  >,\n): boolean {\n  if (pr.headRefName !== headContext.headBranch) {\n    return false;\n  }\n\n  const expectedHeadRepository = normalizeOptionalRepositoryNameWithOwner(\n    headContext.headRepositoryNameWithOwner,\n  );\n  const expectedHeadOwner =\n    normalizeOptionalOwnerLogin(headContext.headRepositoryOwnerLogin) ??\n    parseRepositoryOwnerLogin(expectedHeadRepository);\n  const prHeadRepository = normalizeOptionalRepositoryNameWithOwner(\n    resolvePullRequestHeadRepositoryNameWithOwner(pr),\n  );\n  const prHeadOwner =\n    normalizeOptionalOwnerLogin(pr.headRepositoryOwnerLogin) ??\n    parseRepositoryOwnerLogin(prHeadRepository);\n\n  if (headContext.isCrossRepository) {\n    if (pr.isCrossRepository === false) {\n      return false;\n    }\n    if ((expectedHeadRepository || expectedHeadOwner) && !prHeadRepository && !prHeadOwner) {\n      return false;\n    }\n    if (expectedHeadRepository && prHeadRepository && expectedHeadRepository !== prHeadRepository) {\n      return false;\n    }\n    if (expectedHeadOwner && prHeadOwner && expectedHeadOwner !== prHeadOwner) {\n      return false;\n    }\n    return true;\n  }\n\n  if (pr.isCrossRepository === true) {\n    return false;\n  }\n  if (expectedHeadRepository && prHeadRepository && expectedHeadRepository !== prHeadRepository) {\n    return false;\n  }\n  if (expectedHeadOwner && prHeadOwner && expectedHeadOwner !== prHeadOwner) {\n    return false;\n  }\n  return true;\n}\n\nfunction toPullRequestInfo(summary: ChangeRequest): PullRequestInfo {\n  return {\n    number: summary.number,\n    title: summary.title,\n    url: summary.url,\n    baseRefName: summary.baseRefName,\n    headRefName: summary.headRefName,\n    state: summary.state ?? \"open\",\n    updatedAt: summary.updatedAt,\n    ...(summary.isCrossRepository !== undefined\n      ? { isCrossRepository: summary.isCrossRepository }\n      : {}),\n    ...(summary.headRepositoryNameWithOwner !== undefined\n      ? { headRepositoryNameWithOwner: summary.headRepositoryNameWithOwner }\n      : {}),\n    ...(summary.headRepositoryOwnerLogin !== undefined\n      ? { headRepositoryOwnerLogin: summary.headRepositoryOwnerLogin }\n      : {}),\n  };\n}\n\nfunction gitManagerError(operation: string, detail: string, cause?: unknown): GitManagerError {\n  return new GitManagerError({\n    operation,\n    detail,\n    ...(cause !== undefined ? { cause } : {}),\n  });\n}\n\nfunction limitContext(value: string, maxChars: number): string {\n  if (value.length <= maxChars) return value;\n  return `${value.slice(0, maxChars)}\\n\\n[truncated]`;\n}\n\nfunction shortenSha(sha: string | undefined): string | null {\n  if (!sha) return null;\n  return sha.slice(0, SHORT_SHA_LENGTH);\n}\n\nfunction truncateText(\n  value: string | undefined,\n  maxLength = TOAST_DESCRIPTION_MAX,\n): string | undefined {\n  if (!value) return undefined;\n  if (value.length <= maxLength) return value;\n  if (maxLength <= 3) return \"...\".slice(0, maxLength);\n  return `${value.slice(0, Math.max(0, maxLength - 3)).trimEnd()}...`;\n}\n\nfunction withDescription(title: string, description: string | undefined) {\n  return description ? { title, description } : { title };\n}\n\nfunction summarizeGitActionResult(\n  result: Pick<GitRunStackedActionResult, \"commit\" | \"push\" | \"pr\">,\n  terms: ChangeRequestTerminology,\n): {\n  title: string;\n  description?: string;\n} {\n  if (result.pr.status === \"created\" || result.pr.status === \"opened_existing\") {\n    const prNumber = result.pr.number ? ` #${result.pr.number}` : \"\";\n    const title = `${result.pr.status === \"created\" ? \"Created\" : \"Opened\"} ${terms.shortLabel}${prNumber}`;\n    return withDescription(title, truncateText(result.pr.title));\n  }\n\n  if (result.push.status === \"pushed\") {\n    const shortSha = shortenSha(result.commit.commitSha);\n    const branch = result.push.upstreamBranch ?? result.push.branch;\n    const pushedCommitPart = shortSha ? ` ${shortSha}` : \"\";\n    const branchPart = branch ? ` to ${branch}` : \"\";\n    return withDescription(\n      `Pushed${pushedCommitPart}${branchPart}`,\n      truncateText(result.commit.subject),\n    );\n  }\n\n  if (result.commit.status === \"created\") {\n    const shortSha = shortenSha(result.commit.commitSha);\n    const title = shortSha ? `Committed ${shortSha}` : \"Committed changes\";\n    return withDescription(title, truncateText(result.commit.subject));\n  }\n\n  return { title: \"Done\" };\n}\n\nfunction sanitizeCommitMessage(generated: {\n  subject: string;\n  body: string;\n  branch?: string | undefined;\n}): {\n  subject: string;\n  body: string;\n  branch?: string | undefined;\n} {\n  const rawSubject = generated.subject.trim().split(/\\r?\\n/g)[0]?.trim() ?? \"\";\n  const subject = rawSubject.replace(/[.]+$/g, \"\").trim();\n  const safeSubject = subject.length > 0 ? subject.slice(0, 72).trimEnd() : \"Update project files\";\n  return {\n    subject: safeSubject,\n    body: generated.body.trim(),\n    ...(generated.branch !== undefined ? { branch: generated.branch } : {}),\n  };\n}\n\nfunction sanitizeProgressText(value: string): string | null {\n  const trimmed = value.trim();\n  if (trimmed.length === 0) {\n    return null;\n  }\n  if (trimmed.length <= MAX_PROGRESS_TEXT_LENGTH) {\n    return trimmed;\n  }\n  return trimmed.slice(0, MAX_PROGRESS_TEXT_LENGTH).trimEnd();\n}\n\ninterface CommitAndBranchSuggestion {\n  subject: string;\n  body: string;\n  branch?: string | undefined;\n  commitMessage: string;\n}\n\nfunction isCommitAction(\n  action: GitStackedAction,\n): action is \"commit\" | \"commit_push\" | \"commit_push_pr\" {\n  return action === \"commit\" || action === \"commit_push\" || action === \"commit_push_pr\";\n}\n\nfunction formatCommitMessage(subject: string, body: string): string {\n  const trimmedBody = body.trim();\n  if (trimmedBody.length === 0) {\n    return subject;\n  }\n  return `${subject}\\n\\n${trimmedBody}`;\n}\n\nfunction parseCustomCommitMessage(raw: string): { subject: string; body: string } | null {\n  const normalized = raw.replace(/\\r\\n/g, \"\\n\").trim();\n  if (normalized.length === 0) {\n    return null;\n  }\n\n  const [firstLine, ...rest] = normalized.split(\"\\n\");\n  const subject = firstLine?.trim() ?? \"\";\n  if (subject.length === 0) {\n    return null;\n  }\n\n  return {\n    subject,\n    body: rest.join(\"\\n\").trim(),\n  };\n}\n\nfunction appendUnique(values: string[], next: string | null | undefined): void {\n  const trimmed = next?.trim() ?? \"\";\n  if (trimmed.length === 0 || values.includes(trimmed)) {\n    return;\n  }\n  values.push(trimmed);\n}\n\nfunction toStatusPr(pr: PullRequestInfo): {\n  number: number;\n  title: string;\n  url: string;\n  baseRef: string;\n  headRef: string;\n  state: \"open\" | \"closed\" | \"merged\";\n} {\n  return {\n    number: pr.number,\n    title: pr.title,\n    url: pr.url,\n    baseRef: pr.baseRefName,\n    headRef: pr.headRefName,\n    state: pr.state,\n  };\n}\n\nfunction normalizePullRequestReference(reference: string): string {\n  const trimmed = reference.trim();\n  const hashNumber = /^#(\\d+)$/.exec(trimmed);\n  return hashNumber?.[1] ?? trimmed;\n}\n\nfunction toResolvedPullRequest(pr: {\n  number: number;\n  title: string;\n  url: string;\n  baseRefName: string;\n  headRefName: string;\n  state?: \"open\" | \"closed\" | \"merged\";\n}): ResolvedPullRequest {\n  return {\n    number: pr.number,\n    title: pr.title,\n    url: pr.url,\n    baseBranch: pr.baseRefName,\n    headBranch: pr.headRefName,\n    state: pr.state ?? \"open\",\n  };\n}\n\nfunction shouldPreferSshRemote(url: string | null): boolean {\n  if (!url) return false;\n  const trimmed = url.trim();\n  return trimmed.startsWith(\"git@\") || trimmed.startsWith(\"ssh://\");\n}\n\nfunction toPullRequestHeadRemoteInfo(pr: {\n  isCrossRepository?: boolean | undefined;\n  headRepositoryNameWithOwner?: string | null | undefined;\n  headRepositoryOwnerLogin?: string | null | undefined;\n}): PullRequestHeadRemoteInfo {\n  return {\n    ...(pr.isCrossRepository !== undefined ? { isCrossRepository: pr.isCrossRepository } : {}),\n    ...(pr.headRepositoryNameWithOwner !== undefined\n      ? { headRepositoryNameWithOwner: pr.headRepositoryNameWithOwner }\n      : {}),\n    ...(pr.headRepositoryOwnerLogin !== undefined\n      ? { headRepositoryOwnerLogin: pr.headRepositoryOwnerLogin }\n      : {}),\n  };\n}\n\nexport const makeGitManager = Effect.fn(\"makeGitManager\")(function* () {\n  const gitCore = yield* GitVcsDriver;\n  const sourceControlProviders = yield* SourceControlProviderRegistry;\n  const textGeneration = yield* TextGeneration;\n  const projectSetupScriptRunner = yield* ProjectSetupScriptRunner;\n  const crypto = yield* Crypto.Crypto;\n\n  const sourceControlProvider = (cwd: string) => sourceControlProviders.resolve({ cwd });\n  const serverSettingsService = yield* ServerSettingsService;\n  const randomUUIDv4 = crypto.randomUUIDv4.pipe(\n    Effect.mapError((cause) =>\n      gitManagerError(\"randomUUIDv4\", \"Failed to generate Git operation identifier.\", cause),\n    ),\n  );\n\n  const createProgressEmitter = (\n    input: { cwd: string; action: GitStackedAction },\n    options?: GitRunStackedActionOptions,\n  ) =>\n    (options?.actionId === undefined ? randomUUIDv4 : Effect.succeed(options.actionId)).pipe(\n      Effect.map((actionId) => {\n        const reporter = options?.progressReporter;\n        const emit = (event: GitActionProgressPayload) =>\n          reporter\n            ? reporter.publish({\n                actionId,\n                cwd: input.cwd,\n                action: input.action,\n                ...event,\n              } as GitActionProgressEvent)\n            : Effect.void;\n\n        return {\n          actionId,\n          emit,\n        };\n      }),\n    );\n\n  const configurePullRequestHeadUpstreamBase = Effect.fn(\"configurePullRequestHeadUpstream\")(\n    function* (\n      cwd: string,\n      pullRequest: ResolvedPullRequest & PullRequestHeadRemoteInfo,\n      localBranch = pullRequest.headBranch,\n    ) {\n      const repositoryNameWithOwner = resolveHeadRepositoryNameWithOwner(pullRequest) ?? \"\";\n      if (repositoryNameWithOwner.length === 0 && pullRequest.isCrossRepository !== true) {\n        const remoteName = yield* gitCore.resolvePrimaryRemoteName(cwd);\n        yield* gitCore.fetchRemoteTrackingBranch({\n          cwd,\n          remoteName,\n          remoteBranch: pullRequest.headBranch,\n        });\n        yield* gitCore.setBranchUpstream({\n          cwd,\n          branch: localBranch,\n          remoteName,\n          remoteBranch: pullRequest.headBranch,\n        });\n        return;\n      }\n\n      if (repositoryNameWithOwner.length === 0) {\n        return;\n      }\n\n      const cloneUrls = yield* (yield* sourceControlProvider(cwd)).getRepositoryCloneUrls({\n        cwd,\n        repository: repositoryNameWithOwner,\n      });\n      const originRemoteUrl = yield* gitCore.readConfigValue(cwd, \"remote.origin.url\");\n      const remoteUrl = shouldPreferSshRemote(originRemoteUrl) ? cloneUrls.sshUrl : cloneUrls.url;\n      const preferredRemoteName =\n        pullRequest.headRepositoryOwnerLogin?.trim() ||\n        repositoryNameWithOwner.split(\"/\")[0]?.trim() ||\n        \"fork\";\n      const remoteName = yield* gitCore.ensureRemote({\n        cwd,\n        preferredName: preferredRemoteName,\n        url: remoteUrl,\n      });\n\n      yield* gitCore.fetchRemoteTrackingBranch({\n        cwd,\n        remoteName,\n        remoteBranch: pullRequest.headBranch,\n      });\n      yield* gitCore.setBranchUpstream({\n        cwd,\n        branch: localBranch,\n        remoteName,\n        remoteBranch: pullRequest.headBranch,\n      });\n    },\n  );\n\n  const configurePullRequestHeadUpstream = (\n    cwd: string,\n    pullRequest: ResolvedPullRequest & PullRequestHeadRemoteInfo,\n    localBranch = pullRequest.headBranch,\n  ) =>\n    configurePullRequestHeadUpstreamBase(cwd, pullRequest, localBranch).pipe(\n      Effect.catch((error) =>\n        Effect.logWarning(\n          `GitManager.configurePullRequestHeadUpstream: failed to configure upstream for ${localBranch} -> ${pullRequest.headBranch} in ${cwd}: ${error.message}`,\n        ).pipe(Effect.asVoid),\n      ),\n    );\n\n  const materializePullRequestHeadBranchBase = Effect.fn(\"materializePullRequestHeadBranch\")(\n    function* (\n      cwd: string,\n      pullRequest: ResolvedPullRequest & PullRequestHeadRemoteInfo,\n      localBranch = pullRequest.headBranch,\n    ) {\n      const repositoryNameWithOwner = resolveHeadRepositoryNameWithOwner(pullRequest) ?? \"\";\n\n      if (repositoryNameWithOwner.length === 0) {\n        yield* gitCore.fetchPullRequestBranch({\n          cwd,\n          prNumber: pullRequest.number,\n          branch: localBranch,\n        });\n        return;\n      }\n\n      const cloneUrls = yield* (yield* sourceControlProvider(cwd)).getRepositoryCloneUrls({\n        cwd,\n        repository: repositoryNameWithOwner,\n      });\n      const originRemoteUrl = yield* gitCore.readConfigValue(cwd, \"remote.origin.url\");\n      const remoteUrl = shouldPreferSshRemote(originRemoteUrl) ? cloneUrls.sshUrl : cloneUrls.url;\n      const preferredRemoteName =\n        pullRequest.headRepositoryOwnerLogin?.trim() ||\n        repositoryNameWithOwner.split(\"/\")[0]?.trim() ||\n        \"fork\";\n      const remoteName = yield* gitCore.ensureRemote({\n        cwd,\n        preferredName: preferredRemoteName,\n        url: remoteUrl,\n      });\n\n      yield* gitCore.fetchRemoteBranch({\n        cwd,\n        remoteName,\n        remoteBranch: pullRequest.headBranch,\n        localBranch,\n      });\n      yield* gitCore.setBranchUpstream({\n        cwd,\n        branch: localBranch,\n        remoteName,\n        remoteBranch: pullRequest.headBranch,\n      });\n    },\n  );\n\n  const materializePullRequestHeadBranch = (\n    cwd: string,\n    pullRequest: ResolvedPullRequest & PullRequestHeadRemoteInfo,\n    localBranch = pullRequest.headBranch,\n  ) =>\n    materializePullRequestHeadBranchBase(cwd, pullRequest, localBranch).pipe(\n      Effect.catch(() =>\n        gitCore.fetchPullRequestBranch({\n          cwd,\n          prNumber: pullRequest.number,\n          branch: localBranch,\n        }),\n      ),\n    );\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  const tempDir = process.env.TMPDIR ?? process.env.TEMP ?? process.env.TMP ?? \"/tmp\";\n  const canonicalizeExistingPath = (value: string) =>\n    fileSystem.realPath(value).pipe(Effect.catch(() => Effect.succeed(value)));\n  const normalizeStatusCacheKey = canonicalizeExistingPath;\n  const nonRepositoryStatusDetails = {\n    isRepo: false,\n    hasOriginRemote: false,\n    isDefaultBranch: false,\n    branch: null,\n    upstreamRef: null,\n    hasWorkingTreeChanges: false,\n    workingTree: {\n      files: [],\n      insertions: 0,\n      deletions: 0,\n      staged: { files: [], insertions: 0, deletions: 0 },\n      unstaged: { files: [], insertions: 0, deletions: 0 },\n    },\n    hasUpstream: false,\n    aheadCount: 0,\n    behindCount: 0,\n    aheadOfDefaultCount: 0,\n  } satisfies GitStatusDetails;\n  const readLocalStatus = Effect.fn(\"readLocalStatus\")(function* (cwd: string) {\n    const details = yield* gitCore\n      .statusDetailsLocal(cwd)\n      .pipe(\n        Effect.catchIf(isNotGitRepositoryError, () => Effect.succeed(nonRepositoryStatusDetails)),\n      );\n    const hostingProvider = details.isRepo\n      ? yield* resolveHostingProvider(cwd, details.branch)\n      : null;\n\n    return {\n      isRepo: details.isRepo,\n      ...(hostingProvider ? { sourceControlProvider: hostingProvider } : {}),\n      hasPrimaryRemote: details.hasOriginRemote,\n      isDefaultRef: details.isDefaultBranch,\n      refName: details.branch,\n      hasWorkingTreeChanges: details.hasWorkingTreeChanges,\n      workingTree: details.workingTree,\n    } satisfies VcsStatusLocalResult;\n  });\n  const localStatusResultCache = yield* Cache.makeWith(readLocalStatus, {\n    capacity: STATUS_RESULT_CACHE_CAPACITY,\n    timeToLive: (exit) => (Exit.isSuccess(exit) ? STATUS_RESULT_CACHE_TTL : Duration.zero),\n  });\n  const invalidateLocalStatusResultCache = (cwd: string) =>\n    normalizeStatusCacheKey(cwd).pipe(\n      Effect.flatMap((cacheKey) => Cache.invalidate(localStatusResultCache, cacheKey)),\n    );\n  // Provider lookups are slower and more rate-limit-sensitive than local git\n  // status, so cache them independently. Explicit refreshes bump the epoch.\n  const prLookupEpochByCwd = new Map<string, number>();\n  const prLookupEpoch = (cwd: string) => prLookupEpochByCwd.get(cwd) ?? 0;\n  const bumpPrLookupEpoch = (cwd: string) =>\n    normalizeStatusCacheKey(cwd).pipe(\n      Effect.map((cacheKey) => {\n        prLookupEpochByCwd.set(cacheKey, prLookupEpoch(cacheKey) + 1);\n      }),\n    );\n  const prLookupCacheKey = (cwd: string, details: { branch: string; upstreamRef: string | null }) =>\n    [cwd, details.branch, details.upstreamRef ?? \"\", String(prLookupEpoch(cwd))].join(\"\\u0000\");\n  const prLookupFailureStreakByKey = new Map<string, number>();\n  const nextPrLookupFailureTtl = (key: string) => {\n    if (\n      !prLookupFailureStreakByKey.has(key) &&\n      prLookupFailureStreakByKey.size >= PR_LOOKUP_CACHE_CAPACITY\n    ) {\n      const oldestKey = prLookupFailureStreakByKey.keys().next().value;\n      if (oldestKey !== undefined) prLookupFailureStreakByKey.delete(oldestKey);\n    }\n    const streak = (prLookupFailureStreakByKey.get(key) ?? 0) + 1;\n    prLookupFailureStreakByKey.set(key, streak);\n    return prLookupFailureTtl(streak);\n  };\n  const prLookupCache = yield* Cache.makeWith(\n    (key: string) => {\n      const [cwd = \"\", branch = \"\", upstreamRef = \"\"] = key.split(\"\\u0000\");\n      const details = {\n        branch,\n        upstreamRef: upstreamRef.length > 0 ? upstreamRef : null,\n      };\n      return Effect.gen(function* () {\n        const headContext = yield* resolveBranchHeadContext(cwd, details);\n        const latest = yield* findLatestPrForHeadContext(cwd, headContext);\n        return { latest, headContext };\n      });\n    },\n    {\n      capacity: PR_LOOKUP_CACHE_CAPACITY,\n      timeToLive: (exit, key) => {\n        if (Exit.isSuccess(exit)) {\n          prLookupFailureStreakByKey.delete(key);\n          return PR_LOOKUP_CACHE_TTL;\n        }\n        return nextPrLookupFailureTtl(key);\n      },\n    },\n  );\n  interface LastKnownPr {\n    readonly pr: ReturnType<typeof toStatusPr> | null;\n    readonly upstreamRef: string | null;\n    readonly headBranch: string;\n    readonly remoteName: string | null;\n    readonly headRemoteUrlKey: string | null;\n  }\n  const lastKnownPrByBranchKey = new Map<string, LastKnownPr>();\n  const rememberLastKnownPr = (branchKey: string, entry: LastKnownPr) => {\n    if (\n      !lastKnownPrByBranchKey.has(branchKey) &&\n      lastKnownPrByBranchKey.size >= PR_LOOKUP_CACHE_CAPACITY\n    ) {\n      const oldestKey = lastKnownPrByBranchKey.keys().next().value;\n      if (oldestKey !== undefined) lastKnownPrByBranchKey.delete(oldestKey);\n    }\n    lastKnownPrByBranchKey.set(branchKey, entry);\n  };\n  const resolveLastKnownPr = (\n    branchKey: string,\n    current: Pick<LastKnownPr, \"upstreamRef\" | \"headBranch\" | \"remoteName\" | \"headRemoteUrlKey\">,\n  ): ReturnType<typeof toStatusPr> | null => {\n    const lastKnown = lastKnownPrByBranchKey.get(branchKey);\n    if (!lastKnown || lastKnown.headBranch !== current.headBranch) return null;\n    if (lastKnown.headRemoteUrlKey !== null && current.headRemoteUrlKey !== null) {\n      return lastKnown.headRemoteUrlKey === current.headRemoteUrlKey ? lastKnown.pr : null;\n    }\n    if (\n      lastKnown.upstreamRef !== null &&\n      current.upstreamRef !== null &&\n      lastKnown.remoteName !== null &&\n      current.remoteName !== null\n    ) {\n      return lastKnown.remoteName === current.remoteName ? lastKnown.pr : null;\n    }\n    return lastKnown.pr;\n  };\n  const lookupStatusPr = Effect.fn(\"lookupStatusPr\")(function* (\n    cwd: string,\n    details: { branch: string; upstreamRef: string | null; isDefaultBranch: boolean },\n  ) {\n    const branchKey = `${cwd}\\u0000${details.branch}`;\n    return yield* Cache.get(prLookupCache, prLookupCacheKey(cwd, details)).pipe(\n      Effect.map(({ latest, headContext }) => {\n        if (!latest || (details.isDefaultBranch && latest.state !== \"open\")) {\n          return { pr: null, headContext };\n        }\n        return { pr: toStatusPr(latest), headContext };\n      }),\n      Effect.tap(({ pr, headContext }) =>\n        Effect.sync(() =>\n          rememberLastKnownPr(branchKey, {\n            pr,\n            upstreamRef: details.upstreamRef,\n            headBranch: headContext.headBranch,\n            remoteName: headContext.remoteName,\n            headRemoteUrlKey: headContext.headRemoteUrlKey,\n          }),\n        ),\n      ),\n      Effect.map(({ pr }) => pr),\n      Effect.catch((error) =>\n        Effect.logWarning(\"PR lookup failed; keeping last known PR state.\").pipe(\n          Effect.annotateLogs({\n            operation: \"lookupStatusPr\",\n            branch: details.branch,\n            errorTag:\n              typeof error === \"object\" && error !== null && \"_tag\" in error\n                ? String(error._tag)\n                : typeof error,\n          }),\n          Effect.andThen(resolveBranchHeadContext(cwd, details)),\n          Effect.map((headContext) =>\n            resolveLastKnownPr(branchKey, {\n              upstreamRef: details.upstreamRef,\n              headBranch: headContext.headBranch,\n              remoteName: headContext.remoteName,\n              headRemoteUrlKey: headContext.headRemoteUrlKey,\n            }),\n          ),\n        ),\n      ),\n    );\n  });\n  const readRemoteStatus = Effect.fn(\"readRemoteStatus\")(function* (cwd: string) {\n    const details = yield* gitCore\n      .statusDetailsRemote(cwd)\n      .pipe(Effect.catchIf(isNotGitRepositoryError, () => Effect.succeed(null)));\n    if (details === null || !details.isRepo) {\n      return null;\n    }\n\n    const pr =\n      details.branch !== null\n        ? yield* lookupStatusPr(cwd, {\n            branch: details.branch,\n            upstreamRef: details.upstreamRef,\n            isDefaultBranch: details.isDefaultBranch,\n          })\n        : null;\n\n    return {\n      hasUpstream: details.hasUpstream,\n      aheadCount: details.aheadCount,\n      behindCount: details.behindCount,\n      aheadOfDefaultCount: details.aheadOfDefaultCount,\n      pr,\n    } satisfies VcsStatusRemoteResult;\n  });\n  const remoteStatusResultCache = yield* Cache.makeWith(readRemoteStatus, {\n    capacity: STATUS_RESULT_CACHE_CAPACITY,\n    timeToLive: (exit) => (Exit.isSuccess(exit) ? STATUS_RESULT_CACHE_TTL : Duration.zero),\n  });\n  const invalidateRemoteStatusResultCache = (cwd: string) =>\n    normalizeStatusCacheKey(cwd).pipe(\n      Effect.flatMap((cacheKey) => Cache.invalidate(remoteStatusResultCache, cacheKey)),\n    );\n\n  const readConfigValueNullable = (cwd: string, key: string) =>\n    gitCore.readConfigValue(cwd, key).pipe(Effect.catch(() => Effect.succeed(null)));\n\n  const resolveHostingProvider = Effect.fn(\"resolveHostingProvider\")(function* (\n    cwd: string,\n    branch: string | null,\n  ) {\n    const preferredRemoteName =\n      branch === null\n        ? \"origin\"\n        : ((yield* readConfigValueNullable(cwd, `branch.${branch}.remote`)) ?? \"origin\");\n    const remoteUrl =\n      (yield* readConfigValueNullable(cwd, `remote.${preferredRemoteName}.url`)) ??\n      (yield* readConfigValueNullable(cwd, \"remote.origin.url\"));\n\n    return remoteUrl ? detectSourceControlProviderFromGitRemoteUrl(remoteUrl) : null;\n  });\n\n  const resolveRemoteRepositoryContext = Effect.fn(\"resolveRemoteRepositoryContext\")(function* (\n    cwd: string,\n    remoteName: string | null,\n  ) {\n    if (!remoteName) {\n      return {\n        remoteUrlKey: null,\n        repositoryNameWithOwner: null,\n        ownerLogin: null,\n      };\n    }\n\n    const remoteUrl = yield* readConfigValueNullable(cwd, `remote.${remoteName}.url`);\n    const repositoryNameWithOwner = parseGitHubRepositoryNameWithOwnerFromRemoteUrl(remoteUrl);\n    return {\n      remoteUrlKey: remoteUrl ? normalizeGitRemoteUrl(remoteUrl) : null,\n      repositoryNameWithOwner,\n      ownerLogin: parseRepositoryOwnerLogin(repositoryNameWithOwner),\n    };\n  });\n\n  const resolveBranchHeadContext = Effect.fn(\"resolveBranchHeadContext\")(function* (\n    cwd: string,\n    details: { branch: string; upstreamRef: string | null },\n  ) {\n    const remoteName = yield* readConfigValueNullable(cwd, `branch.${details.branch}.remote`);\n    const headBranchFromUpstream = details.upstreamRef\n      ? extractBranchNameFromRemoteRef(details.upstreamRef, { remoteName })\n      : \"\";\n    const headBranch = headBranchFromUpstream.length > 0 ? headBranchFromUpstream : details.branch;\n    const shouldProbeLocalBranchSelector =\n      headBranchFromUpstream.length === 0 || headBranch === details.branch;\n\n    const [remoteRepository, originRepository] = yield* Effect.all(\n      [\n        resolveRemoteRepositoryContext(cwd, remoteName),\n        resolveRemoteRepositoryContext(cwd, \"origin\"),\n      ],\n      { concurrency: \"unbounded\" },\n    );\n\n    const isCrossRepository =\n      remoteRepository.repositoryNameWithOwner !== null &&\n      originRepository.repositoryNameWithOwner !== null\n        ? remoteRepository.repositoryNameWithOwner.toLowerCase() !==\n          originRepository.repositoryNameWithOwner.toLowerCase()\n        : remoteName !== null &&\n          remoteName !== \"origin\" &&\n          remoteRepository.repositoryNameWithOwner !== null;\n\n    const ownerHeadSelector =\n      remoteRepository.ownerLogin && headBranch.length > 0\n        ? `${remoteRepository.ownerLogin}:${headBranch}`\n        : null;\n    const remoteAliasHeadSelector =\n      remoteName && headBranch.length > 0 ? `${remoteName}:${headBranch}` : null;\n    const shouldProbeRemoteOwnedSelectors =\n      isCrossRepository || (remoteName !== null && remoteName !== \"origin\");\n\n    const headSelectors: string[] = [];\n    if (isCrossRepository && shouldProbeRemoteOwnedSelectors) {\n      appendUnique(headSelectors, ownerHeadSelector);\n      appendUnique(\n        headSelectors,\n        remoteAliasHeadSelector !== ownerHeadSelector ? remoteAliasHeadSelector : null,\n      );\n    }\n    if (shouldProbeLocalBranchSelector) {\n      appendUnique(headSelectors, details.branch);\n    }\n    appendUnique(headSelectors, headBranch !== details.branch ? headBranch : null);\n    if (!isCrossRepository && shouldProbeRemoteOwnedSelectors) {\n      appendUnique(headSelectors, ownerHeadSelector);\n      appendUnique(\n        headSelectors,\n        remoteAliasHeadSelector !== ownerHeadSelector ? remoteAliasHeadSelector : null,\n      );\n    }\n\n    return {\n      localBranch: details.branch,\n      headBranch,\n      headSelectors,\n      preferredHeadSelector:\n        ownerHeadSelector && isCrossRepository ? ownerHeadSelector : headBranch,\n      remoteName,\n      headRemoteUrlKey:\n        remoteRepository.remoteUrlKey ??\n        (remoteName === null ? originRepository.remoteUrlKey : null),\n      headRepositoryNameWithOwner: remoteRepository.repositoryNameWithOwner,\n      headRepositoryOwnerLogin: remoteRepository.ownerLogin,\n      isCrossRepository,\n    } satisfies BranchHeadContext;\n  });\n\n  const findOpenPr = Effect.fn(\"findOpenPr\")(function* (\n    cwd: string,\n    headContext: Pick<\n      BranchHeadContext,\n      | \"headBranch\"\n      | \"headSelectors\"\n      | \"headRepositoryNameWithOwner\"\n      | \"headRepositoryOwnerLogin\"\n      | \"isCrossRepository\"\n    >,\n  ) {\n    for (const headSelector of headContext.headSelectors) {\n      const pullRequests = yield* (yield* sourceControlProvider(cwd)).listChangeRequests({\n        cwd,\n        headSelector,\n        state: \"open\",\n        limit: 1,\n      });\n      const normalizedPullRequests = pullRequests.map(toPullRequestInfo);\n\n      const firstPullRequest = normalizedPullRequests.find((pullRequest) =>\n        matchesBranchHeadContext(pullRequest, headContext),\n      );\n      if (firstPullRequest) {\n        return {\n          number: firstPullRequest.number,\n          title: firstPullRequest.title,\n          url: firstPullRequest.url,\n          baseRefName: firstPullRequest.baseRefName,\n          headRefName: firstPullRequest.headRefName,\n          state: \"open\",\n          updatedAt: Option.none(),\n        } satisfies PullRequestInfo;\n      }\n    }\n\n    return null;\n  });\n\n  const findLatestPrForHeadContext = Effect.fn(\"findLatestPrForHeadContext\")(function* (\n    cwd: string,\n    headContext: BranchHeadContext,\n  ) {\n    const parsedByNumber = new Map<number, PullRequestInfo>();\n\n    for (const headSelector of headContext.headSelectors) {\n      const pullRequests = yield* (yield* sourceControlProvider(cwd)).listChangeRequests({\n        cwd,\n        headSelector,\n        state: \"all\",\n        limit: 20,\n      });\n\n      for (const pr of pullRequests.map(toPullRequestInfo)) {\n        if (!matchesBranchHeadContext(pr, headContext)) {\n          continue;\n        }\n        parsedByNumber.set(pr.number, pr);\n      }\n    }\n\n    const parsed = Arr.sort(parsedByNumber.values(), pullRequestUpdatedAtDescOrder);\n\n    const latestOpenPr = parsed.find((pr) => pr.state === \"open\");\n    if (latestOpenPr) {\n      return latestOpenPr;\n    }\n    return parsed[0] ?? null;\n  });\n\n  const buildCompletionToast = Effect.fn(\"buildCompletionToast\")(function* (\n    cwd: string,\n    result: Pick<GitRunStackedActionResult, \"action\" | \"branch\" | \"commit\" | \"push\" | \"pr\">,\n  ) {\n    const terms = yield* sourceControlProvider(cwd).pipe(\n      Effect.map((provider) => getChangeRequestTerminologyForKind(provider.kind)),\n      Effect.catch(() => Effect.succeed(getChangeRequestTerminologyForKind(\"unknown\"))),\n    );\n    const summary = summarizeGitActionResult(result, terms);\n    let latestOpenPr: PullRequestInfo | null = null;\n    let currentBranchIsDefault = false;\n    let finalBranchContext: {\n      branch: string;\n      upstreamRef: string | null;\n      hasUpstream: boolean;\n    } | null = null;\n\n    if (result.action !== \"commit\") {\n      const finalStatus = yield* gitCore.statusDetails(cwd);\n      if (finalStatus.branch) {\n        finalBranchContext = {\n          branch: finalStatus.branch,\n          upstreamRef: finalStatus.upstreamRef,\n          hasUpstream: finalStatus.hasUpstream,\n        };\n        currentBranchIsDefault = finalStatus.isDefaultBranch;\n      }\n    }\n\n    const explicitResultPr =\n      (result.pr.status === \"created\" || result.pr.status === \"opened_existing\") && result.pr.url\n        ? {\n            url: result.pr.url,\n            state: \"open\" as const,\n          }\n        : null;\n    const shouldLookupExistingOpenPr =\n      (result.action === \"commit_push\" || result.action === \"push\") &&\n      result.push.status === \"pushed\" &&\n      result.branch.status !== \"created\" &&\n      !currentBranchIsDefault &&\n      explicitResultPr === null &&\n      finalBranchContext?.hasUpstream === true;\n\n    if (shouldLookupExistingOpenPr && finalBranchContext) {\n      latestOpenPr = yield* resolveBranchHeadContext(cwd, {\n        branch: finalBranchContext.branch,\n        upstreamRef: finalBranchContext.upstreamRef,\n      }).pipe(\n        Effect.flatMap((headContext) => findOpenPr(cwd, headContext)),\n        Effect.catch(() => Effect.succeed(null)),\n      );\n    }\n\n    const openPr = latestOpenPr ?? explicitResultPr;\n\n    const cta =\n      result.action === \"commit\" && result.commit.status === \"created\"\n        ? {\n            kind: \"run_action\" as const,\n            label: \"Push\",\n            action: { kind: \"push\" as const },\n          }\n        : (result.action === \"push\" ||\n              result.action === \"create_pr\" ||\n              result.action === \"commit_push\" ||\n              result.action === \"commit_push_pr\") &&\n            openPr?.url &&\n            (!currentBranchIsDefault ||\n              result.pr.status === \"created\" ||\n              result.pr.status === \"opened_existing\")\n          ? {\n              kind: \"open_pr\" as const,\n              label: `View ${terms.shortLabel}`,\n              url: openPr.url,\n            }\n          : (result.action === \"push\" || result.action === \"commit_push\") &&\n              result.push.status === \"pushed\" &&\n              !currentBranchIsDefault\n            ? {\n                kind: \"run_action\" as const,\n                label: `Create ${terms.shortLabel}`,\n                action: { kind: \"create_pr\" as const },\n              }\n            : {\n                kind: \"none\" as const,\n              };\n\n    return {\n      ...summary,\n      cta,\n    };\n  });\n\n  const resolveBaseBranch = Effect.fn(\"resolveBaseBranch\")(function* (\n    cwd: string,\n    branch: string,\n    upstreamRef: string | null,\n    headContext: Pick<BranchHeadContext, \"isCrossRepository\" | \"remoteName\">,\n  ) {\n    const configured = yield* gitCore.readConfigValue(cwd, `branch.${branch}.gh-merge-base`);\n    if (configured) return configured;\n\n    if (upstreamRef && !headContext.isCrossRepository) {\n      const upstreamBranch = extractBranchNameFromRemoteRef(upstreamRef, {\n        remoteName: headContext.remoteName,\n      });\n      if (upstreamBranch.length > 0 && upstreamBranch !== branch) {\n        return upstreamBranch;\n      }\n    }\n\n    const defaultFromProvider = yield* sourceControlProvider(cwd).pipe(\n      Effect.flatMap((provider) => provider.getDefaultBranch({ cwd })),\n      Effect.catch(() => Effect.succeed(null)),\n    );\n    if (defaultFromProvider) {\n      return defaultFromProvider;\n    }\n\n    return \"main\";\n  });\n\n  const resolveCommitAndBranchSuggestion = Effect.fn(\"resolveCommitAndBranchSuggestion\")(\n    function* (input: {\n      cwd: string;\n      branch: string | null;\n      commitMessage?: string;\n      /** When true, also produce a semantic feature branch name. */\n      includeBranch?: boolean;\n      filePaths?: readonly string[];\n      contextMode?: \"prepare\" | \"preview\" | \"staged\";\n      modelSelection: ModelSelection;\n    }) {\n      const context =\n        input.filePaths && input.filePaths.length > 0\n          ? yield* gitCore.prepareCommitContext(input.cwd, input.filePaths)\n          : input.contextMode === \"preview\"\n            ? yield* gitCore.readCommitPreviewContext(input.cwd)\n            : input.contextMode === \"staged\"\n              ? yield* gitCore.readStagedCommitContext(input.cwd)\n              : yield* gitCore.prepareCommitContext(input.cwd);\n      if (!context) {\n        return null;\n      }\n\n      const customCommit = parseCustomCommitMessage(input.commitMessage ?? \"\");\n      if (customCommit) {\n        return {\n          subject: customCommit.subject,\n          body: customCommit.body,\n          ...(input.includeBranch\n            ? { branch: sanitizeFeatureBranchName(customCommit.subject) }\n            : {}),\n          commitMessage: formatCommitMessage(customCommit.subject, customCommit.body),\n        };\n      }\n\n      const generated = yield* textGeneration\n        .generateCommitMessage({\n          cwd: input.cwd,\n          branch: input.branch,\n          stagedSummary: limitContext(context.stagedSummary, 8_000),\n          stagedPatch: limitContext(context.stagedPatch, 50_000),\n          ...(input.includeBranch ? { includeBranch: true } : {}),\n          modelSelection: input.modelSelection,\n        })\n        .pipe(Effect.map((result) => sanitizeCommitMessage(result)));\n\n      return {\n        subject: generated.subject,\n        body: generated.body,\n        ...(generated.branch !== undefined ? { branch: generated.branch } : {}),\n        commitMessage: formatCommitMessage(generated.subject, generated.body),\n      };\n    },\n  );\n\n  const runCommitStep = Effect.fn(\"runCommitStep\")(function* (\n    modelSelection: ModelSelection,\n    cwd: string,\n    action: \"commit\" | \"commit_push\" | \"commit_push_pr\",\n    branch: string | null,\n    commitMessage?: string,\n    preResolvedSuggestion?: CommitAndBranchSuggestion,\n    filePaths?: readonly string[],\n    progressReporter?: GitActionProgressReporter,\n    actionId?: string,\n  ) {\n    const emit = (event: GitActionProgressPayload) =>\n      progressReporter && actionId\n        ? progressReporter.publish({\n            actionId,\n            cwd,\n            action,\n            ...event,\n          } as GitActionProgressEvent)\n        : Effect.void;\n\n    let suggestion: CommitAndBranchSuggestion | null | undefined = preResolvedSuggestion;\n    if (!suggestion) {\n      const needsGeneration = !commitMessage?.trim();\n      if (needsGeneration) {\n        yield* emit({\n          kind: \"phase_started\",\n          phase: \"commit\",\n          label: \"Generating commit message...\",\n        });\n      }\n      suggestion = yield* resolveCommitAndBranchSuggestion({\n        cwd,\n        branch,\n        ...(commitMessage ? { commitMessage } : {}),\n        ...(filePaths ? { filePaths } : {}),\n        modelSelection,\n      });\n    }\n    if (!suggestion) {\n      return { status: \"skipped_no_changes\" as const };\n    }\n\n    yield* emit({\n      kind: \"phase_started\",\n      phase: \"commit\",\n      label: \"Committing...\",\n    });\n\n    let currentHookName: string | null = null;\n    const commitProgress =\n      progressReporter && actionId\n        ? {\n            onOutputLine: ({ stream, text }: { stream: \"stdout\" | \"stderr\"; text: string }) => {\n              const sanitized = sanitizeProgressText(text);\n              if (!sanitized) {\n                return Effect.void;\n              }\n              return emit({\n                kind: \"hook_output\",\n                hookName: currentHookName,\n                stream,\n                text: sanitized,\n              });\n            },\n            onHookStarted: (hookName: string) => {\n              currentHookName = hookName;\n              return emit({\n                kind: \"hook_started\",\n                hookName,\n              });\n            },\n            onHookFinished: ({\n              hookName,\n              exitCode,\n              durationMs,\n            }: {\n              hookName: string;\n              exitCode: number | null;\n              durationMs: number | null;\n            }) => {\n              if (currentHookName === hookName) {\n                currentHookName = null;\n              }\n              return emit({\n                kind: \"hook_finished\",\n                hookName,\n                exitCode,\n                durationMs,\n              });\n            },\n          }\n        : null;\n    const { commitSha } = yield* gitCore.commit(cwd, suggestion.subject, suggestion.body, {\n      timeoutMs: COMMIT_TIMEOUT_MS,\n      ...(commitProgress ? { progress: commitProgress } : {}),\n    });\n    if (currentHookName !== null) {\n      yield* emit({\n        kind: \"hook_finished\",\n        hookName: currentHookName,\n        exitCode: 0,\n        durationMs: null,\n      });\n      currentHookName = null;\n    }\n    return {\n      status: \"created\" as const,\n      commitSha,\n      subject: suggestion.subject,\n    };\n  });\n\n  const runPrStep = Effect.fn(\"runPrStep\")(function* (\n    modelSelection: ModelSelection,\n    cwd: string,\n    fallbackBranch: string | null,\n    emit: GitActionProgressEmitter,\n  ) {\n    const provider = yield* sourceControlProvider(cwd);\n    const terms = getChangeRequestTerminologyForKind(provider.kind);\n    const details = yield* gitCore.statusDetails(cwd);\n    const branch = details.branch ?? fallbackBranch;\n    if (!branch) {\n      return yield* gitManagerError(\n        \"runPrStep\",\n        \"Cannot create a pull request from detached HEAD.\",\n      );\n    }\n    if (!details.hasUpstream) {\n      return yield* gitManagerError(\n        \"runPrStep\",\n        \"Current branch has not been pushed. Push before creating a PR.\",\n      );\n    }\n\n    const headContext = yield* resolveBranchHeadContext(cwd, {\n      branch,\n      upstreamRef: details.upstreamRef,\n    });\n\n    const existing = yield* findOpenPr(cwd, headContext);\n    if (existing) {\n      return {\n        status: \"opened_existing\" as const,\n        url: existing.url,\n        number: existing.number,\n        baseBranch: existing.baseRefName,\n        headBranch: existing.headRefName,\n        title: existing.title,\n      };\n    }\n\n    const baseBranch = yield* resolveBaseBranch(cwd, branch, details.upstreamRef, headContext);\n    yield* emit({\n      kind: \"phase_started\",\n      phase: \"pr\",\n      label: `Generating ${terms.shortLabel} content...`,\n    });\n    const rangeContext = yield* gitCore.readRangeContext(cwd, baseBranch);\n\n    const generated = yield* textGeneration.generatePrContent({\n      cwd,\n      baseBranch,\n      headBranch: headContext.headBranch,\n      commitSummary: limitContext(rangeContext.commitSummary, 20_000),\n      diffSummary: limitContext(rangeContext.diffSummary, 20_000),\n      diffPatch: limitContext(rangeContext.diffPatch, 60_000),\n      modelSelection,\n    });\n\n    const bodyFile = path.join(tempDir, `salchi-pr-body-${process.pid}-${yield* randomUUIDv4}.md`);\n    yield* fileSystem\n      .writeFileString(bodyFile, generated.body)\n      .pipe(\n        Effect.mapError((cause) =>\n          gitManagerError(\"runPrStep\", \"Failed to write pull request body temp file.\", cause),\n        ),\n      );\n    yield* emit({\n      kind: \"phase_started\",\n      phase: \"pr\",\n      label: `Creating ${terms.singular}...`,\n    });\n    yield* provider\n      .createChangeRequest({\n        cwd,\n        baseRefName: baseBranch,\n        headSelector: headContext.preferredHeadSelector,\n        title: generated.title,\n        bodyFile,\n      })\n      .pipe(Effect.ensuring(fileSystem.remove(bodyFile).pipe(Effect.catch(() => Effect.void))));\n\n    const created = yield* findOpenPr(cwd, headContext);\n    if (!created) {\n      return {\n        status: \"created\" as const,\n        baseBranch,\n        headBranch: headContext.headBranch,\n        title: generated.title,\n      };\n    }\n\n    return {\n      status: \"created\" as const,\n      url: created.url,\n      number: created.number,\n      baseBranch: created.baseRefName,\n      headBranch: created.headRefName,\n      title: created.title,\n    };\n  });\n\n  const localStatus: GitManagerShape[\"localStatus\"] = Effect.fn(\"localStatus\")(function* (input) {\n    const cacheKey = yield* normalizeStatusCacheKey(input.cwd);\n    return yield* Cache.get(localStatusResultCache, cacheKey);\n  });\n  const remoteStatus: GitManagerShape[\"remoteStatus\"] = Effect.fn(\"remoteStatus\")(\n    function* (input) {\n      const cacheKey = yield* normalizeStatusCacheKey(input.cwd);\n      return yield* Cache.get(remoteStatusResultCache, cacheKey);\n    },\n  );\n  const status: GitManagerShape[\"status\"] = Effect.fn(\"status\")(function* (input) {\n    const [local, remote] = yield* Effect.all([localStatus(input), remoteStatus(input)]);\n    return mergeGitStatusParts(local, remote);\n  });\n  const invalidateLocalStatus: GitManagerShape[\"invalidateLocalStatus\"] = Effect.fn(\n    \"invalidateLocalStatus\",\n  )(function* (cwd) {\n    yield* invalidateLocalStatusResultCache(cwd);\n  });\n  const invalidateRemoteStatus: GitManagerShape[\"invalidateRemoteStatus\"] = Effect.fn(\n    \"invalidateRemoteStatus\",\n  )(function* (cwd) {\n    yield* invalidateRemoteStatusResultCache(cwd);\n  });\n  const invalidateStatus: GitManagerShape[\"invalidateStatus\"] = Effect.fn(\"invalidateStatus\")(\n    function* (cwd) {\n      yield* invalidateLocalStatusResultCache(cwd);\n      yield* invalidateRemoteStatusResultCache(cwd);\n      yield* bumpPrLookupEpoch(cwd);\n    },\n  );\n\n  const resolvePullRequest: GitManagerShape[\"resolvePullRequest\"] = Effect.fn(\"resolvePullRequest\")(\n    function* (input) {\n      const pullRequest = yield* (yield* sourceControlProvider(input.cwd))\n        .getChangeRequest({\n          cwd: input.cwd,\n          reference: normalizePullRequestReference(input.reference),\n        })\n        .pipe(Effect.map((resolved) => toResolvedPullRequest(resolved)));\n\n      return { pullRequest };\n    },\n  );\n\n  const preparePullRequestThread: GitManagerShape[\"preparePullRequestThread\"] = Effect.fn(\n    \"preparePullRequestThread\",\n  )(function* (input) {\n    const maybeRunSetupScript = (worktreePath: string) => {\n      if (!input.threadId) {\n        return Effect.void;\n      }\n      return projectSetupScriptRunner\n        .runForThread({\n          threadId: input.threadId,\n          projectCwd: input.cwd,\n          worktreePath,\n        })\n        .pipe(\n          Effect.catch((error) =>\n            Effect.logWarning(\n              `GitManager.preparePullRequestThread: failed to launch worktree setup script for thread ${input.threadId} in ${worktreePath}: ${error.message}`,\n            ).pipe(Effect.asVoid),\n          ),\n        );\n    };\n    return yield* Effect.gen(function* () {\n      const normalizedReference = normalizePullRequestReference(input.reference);\n      const rootWorktreePath = yield* canonicalizeExistingPath(input.cwd);\n      const pullRequestSummary = yield* (yield* sourceControlProvider(input.cwd)).getChangeRequest({\n        cwd: input.cwd,\n        reference: normalizedReference,\n      });\n      const pullRequest = toResolvedPullRequest(pullRequestSummary);\n\n      if (input.mode === \"local\") {\n        yield* (yield* sourceControlProvider(input.cwd)).checkoutChangeRequest({\n          cwd: input.cwd,\n          reference: normalizedReference,\n          force: true,\n        });\n        const details = yield* gitCore.statusDetails(input.cwd);\n        yield* configurePullRequestHeadUpstream(\n          input.cwd,\n          {\n            ...pullRequest,\n            ...toPullRequestHeadRemoteInfo(pullRequestSummary),\n          },\n          details.branch ?? pullRequest.headBranch,\n        );\n        return {\n          pullRequest,\n          branch: details.branch ?? pullRequest.headBranch,\n          worktreePath: null,\n        };\n      }\n\n      const ensureExistingWorktreeUpstream = Effect.fn(\"ensureExistingWorktreeUpstream\")(function* (\n        worktreePath: string,\n      ) {\n        const details = yield* gitCore.statusDetails(worktreePath);\n        yield* configurePullRequestHeadUpstream(\n          worktreePath,\n          {\n            ...pullRequest,\n            ...toPullRequestHeadRemoteInfo(pullRequestSummary),\n          },\n          details.branch ?? pullRequest.headBranch,\n        );\n      });\n\n      const pullRequestWithRemoteInfo = {\n        ...pullRequest,\n        ...toPullRequestHeadRemoteInfo(pullRequestSummary),\n      } as const;\n      const localPullRequestBranch =\n        resolvePullRequestWorktreeLocalBranchName(pullRequestWithRemoteInfo);\n\n      const findLocalHeadBranch = Effect.fn(\"findLocalHeadBranch\")(function* (cwd: string) {\n        const result = yield* gitCore.listRefs({ cwd });\n        const localBranch = result.refs.find(\n          (branch) => !branch.isRemote && branch.name === localPullRequestBranch,\n        );\n        if (localBranch) {\n          return localBranch;\n        }\n        if (localPullRequestBranch === pullRequest.headBranch) {\n          return null;\n        }\n\n        for (const branch of result.refs) {\n          if (branch.isRemote || branch.name !== pullRequest.headBranch || !branch.worktreePath) {\n            continue;\n          }\n\n          const worktreePath = yield* canonicalizeExistingPath(branch.worktreePath);\n          if (worktreePath !== rootWorktreePath) {\n            return branch;\n          }\n        }\n\n        return null;\n      });\n\n      const existingBranchBeforeFetch = yield* findLocalHeadBranch(input.cwd);\n      const existingBranchBeforeFetchPath = existingBranchBeforeFetch?.worktreePath\n        ? yield* canonicalizeExistingPath(existingBranchBeforeFetch.worktreePath)\n        : null;\n      if (\n        existingBranchBeforeFetch?.worktreePath &&\n        existingBranchBeforeFetchPath !== rootWorktreePath\n      ) {\n        yield* ensureExistingWorktreeUpstream(existingBranchBeforeFetch.worktreePath);\n        return {\n          pullRequest,\n          branch: localPullRequestBranch,\n          worktreePath: existingBranchBeforeFetch.worktreePath,\n        };\n      }\n      if (existingBranchBeforeFetchPath === rootWorktreePath) {\n        return yield* gitManagerError(\n          \"preparePullRequestThread\",\n          \"This PR branch is already checked out in the main repo. Use Local, or switch the main repo off that branch before creating a worktree thread.\",\n        );\n      }\n\n      yield* materializePullRequestHeadBranch(\n        input.cwd,\n        pullRequestWithRemoteInfo,\n        localPullRequestBranch,\n      );\n\n      const existingBranchAfterFetch = yield* findLocalHeadBranch(input.cwd);\n      const existingBranchAfterFetchPath = existingBranchAfterFetch?.worktreePath\n        ? yield* canonicalizeExistingPath(existingBranchAfterFetch.worktreePath)\n        : null;\n      if (\n        existingBranchAfterFetch?.worktreePath &&\n        existingBranchAfterFetchPath !== rootWorktreePath\n      ) {\n        yield* ensureExistingWorktreeUpstream(existingBranchAfterFetch.worktreePath);\n        return {\n          pullRequest,\n          branch: localPullRequestBranch,\n          worktreePath: existingBranchAfterFetch.worktreePath,\n        };\n      }\n      if (existingBranchAfterFetchPath === rootWorktreePath) {\n        return yield* gitManagerError(\n          \"preparePullRequestThread\",\n          \"This PR branch is already checked out in the main repo. Use Local, or switch the main repo off that branch before creating a worktree thread.\",\n        );\n      }\n\n      const worktree = yield* gitCore.createWorktree({\n        cwd: input.cwd,\n        refName: localPullRequestBranch,\n        path: null,\n      });\n      yield* ensureExistingWorktreeUpstream(worktree.worktree.path);\n      yield* maybeRunSetupScript(worktree.worktree.path);\n\n      return {\n        pullRequest,\n        branch: worktree.worktree.refName,\n        worktreePath: worktree.worktree.path,\n      };\n    }).pipe(Effect.ensuring(invalidateStatus(input.cwd)));\n  });\n\n  const runFeatureBranchStep = Effect.fn(\"runFeatureBranchStep\")(function* (\n    modelSelection: ModelSelection,\n    cwd: string,\n    branch: string | null,\n    commitMessage?: string,\n    filePaths?: readonly string[],\n  ) {\n    const suggestion = yield* resolveCommitAndBranchSuggestion({\n      cwd,\n      branch,\n      ...(commitMessage ? { commitMessage } : {}),\n      ...(filePaths ? { filePaths } : {}),\n      includeBranch: true,\n      modelSelection,\n    });\n    if (!suggestion) {\n      return yield* gitManagerError(\n        \"runFeatureBranchStep\",\n        \"Cannot create a feature branch because there are no changes to commit.\",\n      );\n    }\n\n    const preferredBranch = suggestion.branch ?? sanitizeFeatureBranchName(suggestion.subject);\n    const existingBranchNames = yield* gitCore.listLocalBranchNames(cwd);\n    const resolvedBranch = resolveAutoFeatureBranchName(existingBranchNames, preferredBranch);\n\n    yield* gitCore.createRef({ cwd, refName: resolvedBranch });\n    yield* Effect.scoped(gitCore.switchRef({ cwd, refName: resolvedBranch }));\n\n    return {\n      branchStep: { status: \"created\" as const, name: resolvedBranch },\n      resolvedCommitMessage: suggestion.commitMessage,\n      resolvedCommitSuggestion: suggestion,\n    };\n  });\n\n  const generateCommitMessage: GitManagerShape[\"generateCommitMessage\"] = Effect.fn(\n    \"generateCommitMessage\",\n  )(function* (input) {\n    const [initialStatus, modelSelection] = yield* Effect.all([\n      gitCore.statusDetails(input.cwd),\n      serverSettingsService.getSettings.pipe(\n        Effect.map((settings) => settings.textGenerationModelSelection),\n        Effect.mapError((cause) =>\n          gitManagerError(\"generateCommitMessage\", \"Failed to get server settings.\", cause),\n        ),\n      ),\n    ]);\n\n    const suggestion = yield* resolveCommitAndBranchSuggestion({\n      cwd: input.cwd,\n      branch: initialStatus.branch,\n      ...(input.filePaths ? { filePaths: input.filePaths } : {}),\n      contextMode: input.target === \"staged\" ? \"staged\" : \"preview\",\n      modelSelection,\n    });\n    if (!suggestion) {\n      return yield* gitManagerError(\n        \"generateCommitMessage\",\n        \"Cannot generate a commit message because there are no changes to commit.\",\n      );\n    }\n\n    return {\n      subject: suggestion.subject,\n      body: suggestion.body,\n      commitMessage: suggestion.commitMessage,\n    };\n  });\n\n  const runStackedAction: GitManagerShape[\"runStackedAction\"] = Effect.fn(\"runStackedAction\")(\n    function* (input, options) {\n      const progress = yield* createProgressEmitter(input, options);\n      const currentPhase = yield* Ref.make<Option.Option<GitActionProgressPhase>>(Option.none());\n\n      const runAction = Effect.fn(\"runStackedAction.runAction\")(function* (): Effect.fn.Return<\n        GitRunStackedActionResult,\n        GitManagerServiceError\n      > {\n        const initialStatus = yield* gitCore.statusDetails(input.cwd);\n        const wantsCommit = isCommitAction(input.action);\n        const wantsPush =\n          input.action === \"push\" ||\n          input.action === \"commit_push\" ||\n          input.action === \"commit_push_pr\" ||\n          (input.action === \"create_pr\" &&\n            (!initialStatus.hasUpstream || initialStatus.aheadCount > 0));\n        const wantsPr = input.action === \"create_pr\" || input.action === \"commit_push_pr\";\n\n        if (input.featureBranch && !wantsCommit) {\n          return yield* gitManagerError(\n            \"runStackedAction\",\n            \"Feature-branch checkout is only supported for commit actions.\",\n          );\n        }\n        if (input.action === \"create_pr\" && initialStatus.hasWorkingTreeChanges) {\n          return yield* gitManagerError(\n            \"runStackedAction\",\n            \"Commit local changes before creating a PR.\",\n          );\n        }\n\n        const phases: GitActionProgressPhase[] = [\n          ...(input.featureBranch ? ([\"branch\"] as const) : []),\n          ...(wantsCommit ? ([\"commit\"] as const) : []),\n          ...(wantsPush ? ([\"push\"] as const) : []),\n          ...(wantsPr ? ([\"pr\"] as const) : []),\n        ];\n\n        yield* progress.emit({\n          kind: \"action_started\",\n          phases,\n        });\n\n        if (!input.featureBranch && wantsPush && !initialStatus.branch) {\n          return yield* gitManagerError(\"runStackedAction\", \"Cannot push from detached HEAD.\");\n        }\n        if (!input.featureBranch && wantsPr && !initialStatus.branch) {\n          return yield* gitManagerError(\n            \"runStackedAction\",\n            \"Cannot create a pull request from detached HEAD.\",\n          );\n        }\n\n        let branchStep: { status: \"created\" | \"skipped_not_requested\"; name?: string };\n        let commitMessageForStep = input.commitMessage;\n        let preResolvedCommitSuggestion: CommitAndBranchSuggestion | undefined = undefined;\n\n        const modelSelection = yield* serverSettingsService.getSettings.pipe(\n          Effect.map((settings) => settings.textGenerationModelSelection),\n          Effect.mapError((cause) =>\n            gitManagerError(\"runStackedAction\", \"Failed to get server settings.\", cause),\n          ),\n        );\n\n        if (input.featureBranch) {\n          yield* Ref.set(currentPhase, Option.some(\"branch\"));\n          yield* progress.emit({\n            kind: \"phase_started\",\n            phase: \"branch\",\n            label: \"Preparing feature branch...\",\n          });\n          const result = yield* runFeatureBranchStep(\n            modelSelection,\n            input.cwd,\n            initialStatus.branch,\n            input.commitMessage,\n            input.filePaths,\n          );\n          branchStep = result.branchStep;\n          commitMessageForStep = result.resolvedCommitMessage;\n          preResolvedCommitSuggestion = result.resolvedCommitSuggestion;\n        } else {\n          branchStep = { status: \"skipped_not_requested\" as const };\n        }\n\n        const currentBranch = branchStep.name ?? initialStatus.branch;\n        const commitAction = isCommitAction(input.action) ? input.action : null;\n        const changeRequestTerms = wantsPr\n          ? yield* sourceControlProvider(input.cwd).pipe(\n              Effect.map((provider) => getChangeRequestTerminologyForKind(provider.kind)),\n              Effect.catch(() => Effect.succeed(getChangeRequestTerminologyForKind(\"unknown\"))),\n            )\n          : null;\n\n        const commit = commitAction\n          ? yield* Ref.set(currentPhase, Option.some(\"commit\")).pipe(\n              Effect.flatMap(() =>\n                runCommitStep(\n                  modelSelection,\n                  input.cwd,\n                  commitAction,\n                  currentBranch,\n                  commitMessageForStep,\n                  preResolvedCommitSuggestion,\n                  input.filePaths,\n                  options?.progressReporter,\n                  progress.actionId,\n                ),\n              ),\n            )\n          : { status: \"skipped_not_requested\" as const };\n\n        const push = wantsPush\n          ? yield* progress\n              .emit({\n                kind: \"phase_started\",\n                phase: \"push\",\n                label: \"Pushing...\",\n              })\n              .pipe(\n                Effect.tap(() => Ref.set(currentPhase, Option.some(\"push\"))),\n                Effect.flatMap(() => gitCore.pushCurrentBranch(input.cwd, currentBranch)),\n              )\n          : { status: \"skipped_not_requested\" as const };\n\n        const pr = wantsPr\n          ? yield* progress\n              .emit({\n                kind: \"phase_started\",\n                phase: \"pr\",\n                label: `Preparing ${changeRequestTerms?.shortLabel ?? \"PR\"}...`,\n              })\n              .pipe(\n                Effect.tap(() => Ref.set(currentPhase, Option.some(\"pr\"))),\n                Effect.flatMap(() =>\n                  runPrStep(modelSelection, input.cwd, currentBranch, progress.emit),\n                ),\n              )\n          : { status: \"skipped_not_requested\" as const };\n\n        const toast = yield* buildCompletionToast(input.cwd, {\n          action: input.action,\n          branch: branchStep,\n          commit,\n          push,\n          pr,\n        });\n\n        const result = {\n          action: input.action,\n          branch: branchStep,\n          commit,\n          push,\n          pr,\n          toast,\n        };\n        yield* progress.emit({\n          kind: \"action_finished\",\n          result,\n        });\n        return result;\n      });\n\n      return yield* runAction().pipe(\n        Effect.ensuring(invalidateStatus(input.cwd)),\n        Effect.tapError((error) =>\n          Effect.flatMap(Ref.get(currentPhase), (phase) =>\n            progress.emit({\n              kind: \"action_failed\",\n              phase: Option.getOrNull(phase),\n              message: error.message,\n            }),\n          ),\n        ),\n      );\n    },\n  );\n\n  return {\n    localStatus,\n    remoteStatus,\n    status,\n    invalidateLocalStatus,\n    invalidateRemoteStatus,\n    invalidateStatus,\n    resolvePullRequest,\n    preparePullRequestThread,\n    runStackedAction,\n    generateCommitMessage,\n  } satisfies GitManagerShape;\n});\n\nexport const layer = Layer.effect(GitManager, makeGitManager());\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  GitManagerError,\n  GitCommandError,\n  type GenerateCommitMessageInput,\n  type GenerateCommitMessageResult,\n  type VcsSwitchRefInput,\n  type VcsSwitchRefResult,\n  type VcsCreateRefInput,\n  type VcsCreateRefResult,\n  type VcsCreateWorktreeInput,\n  type VcsCreateWorktreeResult,\n  type VcsListRefsInput,\n  type VcsListRefsResult,\n  type GitManagerServiceError,\n  type GitPreparePullRequestThreadInput,\n  type GitPreparePullRequestThreadResult,\n  type GitPullRequestRefInput,\n  type VcsPullResult,\n  type VcsRevertUnstagedFilesInput,\n  type VcsRemoveWorktreeInput,\n  type VcsStageFilesInput,\n  type GitResolvePullRequestResult,\n  type GitRunStackedActionInput,\n  type GitRunStackedActionResult,\n  type VcsStatusInput,\n  type VcsStatusLocalResult,\n  type VcsStatusRemoteResult,\n  type VcsStatusResult,\n  type VcsUnstageFilesInput,\n  type VcsWorkingTreeDiffInput,\n  type VcsWorkingTreeDiffResult,\n} from \"@salchi/contracts\";\n\nimport { GitManager, type GitRunStackedActionOptions } from \"./GitManager.ts\";\nimport { GitVcsDriver } from \"../vcs/GitVcsDriver.ts\";\nimport { VcsDriverRegistry } from \"../vcs/VcsDriverRegistry.ts\";\n\nexport interface GitWorkflowServiceShape {\n  readonly status: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusResult, GitManagerServiceError>;\n  readonly localStatus: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusLocalResult, GitManagerServiceError>;\n  readonly remoteStatus: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusRemoteResult | null, GitManagerServiceError>;\n  readonly invalidateLocalStatus: (cwd: string) => Effect.Effect<void, never>;\n  readonly invalidateRemoteStatus: (cwd: string) => Effect.Effect<void, never>;\n  readonly invalidateStatus: (cwd: string) => Effect.Effect<void, never>;\n  readonly pullCurrentBranch: (cwd: string) => Effect.Effect<VcsPullResult, GitCommandError>;\n  readonly stageFiles: (input: VcsStageFilesInput) => Effect.Effect<void, GitCommandError>;\n  readonly unstageFiles: (input: VcsUnstageFilesInput) => Effect.Effect<void, GitCommandError>;\n  readonly revertUnstagedFiles: (\n    input: VcsRevertUnstagedFilesInput,\n  ) => Effect.Effect<void, GitCommandError>;\n  readonly readWorkingTreeDiff: (\n    input: VcsWorkingTreeDiffInput,\n  ) => Effect.Effect<VcsWorkingTreeDiffResult, GitCommandError>;\n  readonly runStackedAction: (\n    input: GitRunStackedActionInput,\n    options?: GitRunStackedActionOptions,\n  ) => Effect.Effect<GitRunStackedActionResult, GitManagerServiceError>;\n  readonly generateCommitMessage: (\n    input: GenerateCommitMessageInput,\n  ) => Effect.Effect<GenerateCommitMessageResult, GitManagerServiceError>;\n  readonly resolvePullRequest: (\n    input: GitPullRequestRefInput,\n  ) => Effect.Effect<GitResolvePullRequestResult, GitManagerServiceError>;\n  readonly preparePullRequestThread: (\n    input: GitPreparePullRequestThreadInput,\n  ) => Effect.Effect<GitPreparePullRequestThreadResult, GitManagerServiceError>;\n  readonly listRefs: (input: VcsListRefsInput) => Effect.Effect<VcsListRefsResult, GitCommandError>;\n  readonly createWorktree: (\n    input: VcsCreateWorktreeInput,\n  ) => Effect.Effect<VcsCreateWorktreeResult, GitCommandError>;\n  readonly removeWorktree: (input: VcsRemoveWorktreeInput) => Effect.Effect<void, GitCommandError>;\n  readonly createRef: (\n    input: VcsCreateRefInput,\n  ) => Effect.Effect<VcsCreateRefResult, GitCommandError>;\n  readonly switchRef: (\n    input: VcsSwitchRefInput,\n  ) => Effect.Effect<VcsSwitchRefResult, GitCommandError>;\n  readonly renameBranch: (input: {\n    readonly cwd: string;\n    readonly oldBranch: string;\n    readonly newBranch: string;\n  }) => Effect.Effect<{ readonly branch: string }, GitManagerServiceError>;\n}\n\nexport class GitWorkflowService extends Context.Service<\n  GitWorkflowService,\n  GitWorkflowServiceShape\n>()(\"salchi/git/GitWorkflowService\") {}\n\nconst unsupportedGitWorkflow = (operation: string, cwd: string, detail: string) =>\n  new GitManagerError({\n    operation,\n    detail: `${detail} (${cwd})`,\n  });\n\nconst unsupportedGitCommand = (operation: string, cwd: string, detail: string) =>\n  new GitCommandError({\n    operation,\n    command: \"vcs-route\",\n    cwd,\n    detail,\n  });\n\nfunction nonRepositoryLocalStatus(): VcsStatusLocalResult {\n  return {\n    isRepo: false,\n    hasPrimaryRemote: false,\n    isDefaultRef: false,\n    refName: null,\n    hasWorkingTreeChanges: false,\n    workingTree: {\n      files: [],\n      insertions: 0,\n      deletions: 0,\n      staged: { files: [], insertions: 0, deletions: 0 },\n      unstaged: { files: [], insertions: 0, deletions: 0 },\n    },\n  };\n}\n\nfunction nonRepositoryStatus(): VcsStatusResult {\n  return {\n    ...nonRepositoryLocalStatus(),\n    hasUpstream: false,\n    aheadCount: 0,\n    behindCount: 0,\n    aheadOfDefaultCount: 0,\n    pr: null,\n  };\n}\n\nfunction nonRepositoryListRefs(): VcsListRefsResult {\n  return {\n    refs: [],\n    isRepo: false,\n    hasPrimaryRemote: false,\n    nextCursor: null,\n    totalCount: 0,\n  };\n}\n\nexport const make = Effect.fn(\"makeGitWorkflowService\")(function* () {\n  const registry = yield* VcsDriverRegistry;\n  const git = yield* GitVcsDriver;\n  const gitManager = yield* GitManager;\n\n  const ensureGit = Effect.fn(\"GitWorkflowService.ensureGit\")(function* (\n    operation: string,\n    cwd: string,\n  ) {\n    const handle = yield* registry\n      .resolve({ cwd })\n      .pipe(\n        Effect.mapError((error) =>\n          unsupportedGitWorkflow(\n            operation,\n            cwd,\n            error instanceof Error ? error.message : String(error),\n          ),\n        ),\n      );\n    if (handle.kind !== \"git\") {\n      return yield* unsupportedGitWorkflow(\n        operation,\n        cwd,\n        `The ${operation} workflow currently supports Git repositories only; detected ${handle.kind}.`,\n      );\n    }\n  });\n\n  const ensureGitCommand = Effect.fn(\"GitWorkflowService.ensureGitCommand\")(function* (\n    operation: string,\n    cwd: string,\n  ) {\n    const handle = yield* registry\n      .resolve({ cwd })\n      .pipe(\n        Effect.mapError((error) =>\n          unsupportedGitCommand(\n            operation,\n            cwd,\n            error instanceof Error ? error.message : String(error),\n          ),\n        ),\n      );\n    if (handle.kind !== \"git\") {\n      return yield* unsupportedGitCommand(\n        operation,\n        cwd,\n        `The ${operation} command currently supports Git repositories only; detected ${handle.kind}.`,\n      );\n    }\n  });\n\n  const detectGitRepositoryForStatus = Effect.fn(\"GitWorkflowService.detectGitRepositoryForStatus\")(\n    function* (operation: string, cwd: string) {\n      const handle = yield* registry\n        .detect({ cwd })\n        .pipe(\n          Effect.mapError((error) =>\n            unsupportedGitWorkflow(\n              operation,\n              cwd,\n              error instanceof Error ? error.message : String(error),\n            ),\n          ),\n        );\n      if (!handle) {\n        return false;\n      }\n      if (handle.kind !== \"git\") {\n        return yield* unsupportedGitWorkflow(\n          operation,\n          cwd,\n          `The ${operation} workflow currently supports Git repositories only; detected ${handle.kind}.`,\n        );\n      }\n      return true;\n    },\n  );\n\n  const detectGitRepositoryForCommand = Effect.fn(\n    \"GitWorkflowService.detectGitRepositoryForCommand\",\n  )(function* (operation: string, cwd: string) {\n    const handle = yield* registry\n      .detect({ cwd })\n      .pipe(\n        Effect.mapError((error) =>\n          unsupportedGitCommand(\n            operation,\n            cwd,\n            error instanceof Error ? error.message : String(error),\n          ),\n        ),\n      );\n    if (!handle) {\n      return false;\n    }\n    if (handle.kind !== \"git\") {\n      return yield* unsupportedGitCommand(\n        operation,\n        cwd,\n        `The ${operation} command currently supports Git repositories only; detected ${handle.kind}.`,\n      );\n    }\n    return true;\n  });\n\n  const routeGitManager =\n    <Input extends { readonly cwd: string }, Output>(\n      operation: string,\n      run: (input: Input) => Effect.Effect<Output, GitManagerServiceError>,\n    ) =>\n    (input: Input) =>\n      ensureGit(operation, input.cwd).pipe(Effect.andThen(run(input)));\n\n  return GitWorkflowService.of({\n    status: (input) =>\n      detectGitRepositoryForStatus(\"GitWorkflowService.status\", input.cwd).pipe(\n        Effect.flatMap((isGitRepository) =>\n          isGitRepository ? gitManager.status(input) : Effect.succeed(nonRepositoryStatus()),\n        ),\n      ),\n    localStatus: (input) =>\n      detectGitRepositoryForStatus(\"GitWorkflowService.localStatus\", input.cwd).pipe(\n        Effect.flatMap((isGitRepository) =>\n          isGitRepository\n            ? gitManager.localStatus(input)\n            : Effect.succeed(nonRepositoryLocalStatus()),\n        ),\n      ),\n    remoteStatus: (input) =>\n      detectGitRepositoryForStatus(\"GitWorkflowService.remoteStatus\", input.cwd).pipe(\n        Effect.flatMap((isGitRepository) =>\n          isGitRepository ? gitManager.remoteStatus(input) : Effect.succeed(null),\n        ),\n      ),\n    invalidateLocalStatus: gitManager.invalidateLocalStatus,\n    invalidateRemoteStatus: gitManager.invalidateRemoteStatus,\n    invalidateStatus: gitManager.invalidateStatus,\n    pullCurrentBranch: (cwd) =>\n      ensureGitCommand(\"GitWorkflowService.pullCurrentBranch\", cwd).pipe(\n        Effect.andThen(git.pullCurrentBranch(cwd)),\n      ),\n    stageFiles: (input) =>\n      ensureGitCommand(\"GitWorkflowService.stageFiles\", input.cwd).pipe(\n        Effect.andThen(git.stageFiles(input)),\n      ),\n    unstageFiles: (input) =>\n      ensureGitCommand(\"GitWorkflowService.unstageFiles\", input.cwd).pipe(\n        Effect.andThen(git.unstageFiles(input)),\n      ),\n    revertUnstagedFiles: (input) =>\n      ensureGitCommand(\"GitWorkflowService.revertUnstagedFiles\", input.cwd).pipe(\n        Effect.andThen(git.revertUnstagedFiles(input)),\n      ),\n    readWorkingTreeDiff: (input) =>\n      ensureGitCommand(\"GitWorkflowService.readWorkingTreeDiff\", input.cwd).pipe(\n        Effect.andThen(git.readWorkingTreeDiff(input)),\n      ),\n    runStackedAction: (input, options) =>\n      ensureGit(\"GitWorkflowService.runStackedAction\", input.cwd).pipe(\n        Effect.andThen(gitManager.runStackedAction(input, options)),\n      ),\n    generateCommitMessage: (input) =>\n      ensureGit(\"GitWorkflowService.generateCommitMessage\", input.cwd).pipe(\n        Effect.andThen(gitManager.generateCommitMessage(input)),\n      ),\n    resolvePullRequest: routeGitManager(\n      \"GitWorkflowService.resolvePullRequest\",\n      gitManager.resolvePullRequest,\n    ),\n    preparePullRequestThread: routeGitManager(\n      \"GitWorkflowService.preparePullRequestThread\",\n      gitManager.preparePullRequestThread,\n    ),\n    listRefs: (input) =>\n      detectGitRepositoryForCommand(\"GitWorkflowService.listRefs\", input.cwd).pipe(\n        Effect.flatMap((isGitRepository) =>\n          isGitRepository ? git.listRefs(input) : Effect.succeed(nonRepositoryListRefs()),\n        ),\n      ),\n    createWorktree: (input) =>\n      ensureGitCommand(\"GitWorkflowService.createWorktree\", input.cwd).pipe(\n        Effect.andThen(git.createWorktree(input)),\n      ),\n    removeWorktree: (input) =>\n      ensureGitCommand(\"GitWorkflowService.removeWorktree\", input.cwd).pipe(\n        Effect.andThen(git.removeWorktree(input)),\n      ),\n    createRef: (input) =>\n      ensureGitCommand(\"GitWorkflowService.createRef\", input.cwd).pipe(\n        Effect.andThen(git.createRef(input)),\n      ),\n    switchRef: (input) =>\n      ensureGitCommand(\"GitWorkflowService.switchRef\", input.cwd).pipe(\n        Effect.andThen(Effect.scoped(git.switchRef(input))),\n      ),\n    renameBranch: (input) =>\n      ensureGit(\"GitWorkflowService.renameBranch\", input.cwd).pipe(\n        Effect.andThen(git.renameBranch(input)),\n      ),\n  });\n});\n\nexport const layer = Layer.effect(GitWorkflowService, make());\n","import * as Context from \"effect/Context\";\nimport * as Cause from \"effect/Cause\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schedule from \"effect/Schedule\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\nimport type {\n  GitManagerServiceError,\n  VcsStatusInput,\n  VcsStatusLocalResult,\n  VcsStatusRemoteResult,\n  VcsStatusResult,\n  VcsStatusStreamEvent,\n} from \"@salchi/contracts\";\nimport { mergeGitStatusParts } from \"@salchi/shared/git\";\n\nimport * as GitWorkflowService from \"../git/GitWorkflowService.ts\";\n\nconst DEFAULT_VCS_STATUS_REFRESH_INTERVAL = Duration.seconds(30);\nconst VCS_STATUS_REFRESH_FAILURE_BASE_DELAY = Duration.seconds(30);\nconst VCS_STATUS_REFRESH_FAILURE_MAX_DELAY = Duration.minutes(15);\n\ninterface VcsStatusChange {\n  readonly cwd: string;\n  readonly event: VcsStatusStreamEvent;\n}\n\ninterface CachedValue<T> {\n  readonly fingerprint: string;\n  readonly value: T;\n}\n\ninterface CachedVcsStatus {\n  readonly local: CachedValue<VcsStatusLocalResult> | null;\n  readonly remote: CachedValue<VcsStatusRemoteResult | null> | null;\n}\n\ninterface ActiveRemotePoller {\n  readonly fiber: Fiber.Fiber<void, never>;\n  readonly subscriberCount: number;\n}\n\ninterface StreamStatusOptions {\n  readonly automaticRemoteRefreshInterval?: Effect.Effect<Duration.Duration, never>;\n}\n\nexport function remoteRefreshFailureDelay(\n  consecutiveFailures: number,\n  configuredInterval: Duration.Duration,\n) {\n  const exponent = Math.max(0, consecutiveFailures - 1);\n  const backoffMs =\n    Duration.toMillis(VCS_STATUS_REFRESH_FAILURE_BASE_DELAY) * Math.pow(2, exponent);\n  const cappedBackoff = Duration.min(\n    Duration.millis(backoffMs),\n    VCS_STATUS_REFRESH_FAILURE_MAX_DELAY,\n  );\n  return Duration.max(configuredInterval, cappedBackoff);\n}\n\nexport interface VcsStatusBroadcasterShape {\n  readonly getStatus: (\n    input: VcsStatusInput,\n  ) => Effect.Effect<VcsStatusResult, GitManagerServiceError>;\n  readonly refreshLocalStatus: (\n    cwd: string,\n  ) => Effect.Effect<VcsStatusLocalResult, GitManagerServiceError>;\n  readonly refreshStatus: (cwd: string) => Effect.Effect<VcsStatusResult, GitManagerServiceError>;\n  readonly streamStatus: (\n    input: VcsStatusInput,\n    options?: StreamStatusOptions,\n  ) => Stream.Stream<VcsStatusStreamEvent, GitManagerServiceError>;\n}\n\nexport class VcsStatusBroadcaster extends Context.Service<\n  VcsStatusBroadcaster,\n  VcsStatusBroadcasterShape\n>()(\"salchi/vcs/VcsStatusBroadcaster\") {}\n\nfunction fingerprintStatusPart(status: unknown): string {\n  return JSON.stringify(status);\n}\n\nconst normalizeCwd = (cwd: string) =>\n  Effect.service(FileSystem.FileSystem).pipe(\n    Effect.flatMap((fs) => fs.realPath(cwd)),\n    Effect.orElseSucceed(() => cwd),\n  );\n\nexport const layer = Layer.effect(\n  VcsStatusBroadcaster,\n  Effect.gen(function* () {\n    const workflow = yield* GitWorkflowService.GitWorkflowService;\n    const fs = yield* FileSystem.FileSystem;\n    const changesPubSub = yield* Effect.acquireRelease(\n      PubSub.unbounded<VcsStatusChange>(),\n      (pubsub) => PubSub.shutdown(pubsub),\n    );\n    const broadcasterScope = yield* Effect.acquireRelease(Scope.make(), (scope) =>\n      Scope.close(scope, Exit.void),\n    );\n    const cacheRef = yield* Ref.make(new Map<string, CachedVcsStatus>());\n    const pollersRef = yield* SynchronizedRef.make(new Map<string, ActiveRemotePoller>());\n\n    const getCachedStatus = Effect.fn(\"VcsStatusBroadcaster.getCachedStatus\")(function* (\n      cwd: string,\n    ) {\n      return yield* Ref.get(cacheRef).pipe(Effect.map((cache) => cache.get(cwd) ?? null));\n    });\n\n    const updateCachedLocalStatus = Effect.fn(\"VcsStatusBroadcaster.updateCachedLocalStatus\")(\n      function* (cwd: string, local: VcsStatusLocalResult, options?: { publish?: boolean }) {\n        const nextLocal = {\n          fingerprint: fingerprintStatusPart(local),\n          value: local,\n        } satisfies CachedValue<VcsStatusLocalResult>;\n        const shouldPublish = yield* Ref.modify(cacheRef, (cache) => {\n          const previous = cache.get(cwd) ?? { local: null, remote: null };\n          const nextCache = new Map(cache);\n          nextCache.set(cwd, {\n            ...previous,\n            local: nextLocal,\n          });\n          return [previous.local?.fingerprint !== nextLocal.fingerprint, nextCache] as const;\n        });\n\n        if (options?.publish && shouldPublish) {\n          yield* PubSub.publish(changesPubSub, {\n            cwd,\n            event: {\n              _tag: \"localUpdated\",\n              local,\n            },\n          });\n        }\n\n        return local;\n      },\n    );\n\n    const updateCachedRemoteStatus = Effect.fn(\"VcsStatusBroadcaster.updateCachedRemoteStatus\")(\n      function* (\n        cwd: string,\n        remote: VcsStatusRemoteResult | null,\n        options?: { publish?: boolean },\n      ) {\n        const nextRemote = {\n          fingerprint: fingerprintStatusPart(remote),\n          value: remote,\n        } satisfies CachedValue<VcsStatusRemoteResult | null>;\n        const shouldPublish = yield* Ref.modify(cacheRef, (cache) => {\n          const previous = cache.get(cwd) ?? { local: null, remote: null };\n          const nextCache = new Map(cache);\n          nextCache.set(cwd, {\n            ...previous,\n            remote: nextRemote,\n          });\n          return [previous.remote?.fingerprint !== nextRemote.fingerprint, nextCache] as const;\n        });\n\n        if (options?.publish && shouldPublish) {\n          yield* PubSub.publish(changesPubSub, {\n            cwd,\n            event: {\n              _tag: \"remoteUpdated\",\n              remote,\n            },\n          });\n        }\n\n        return remote;\n      },\n    );\n\n    const loadLocalStatus = Effect.fn(\"VcsStatusBroadcaster.loadLocalStatus\")(function* (\n      cwd: string,\n    ) {\n      const local = yield* workflow.localStatus({ cwd });\n      return yield* updateCachedLocalStatus(cwd, local);\n    });\n\n    const readRemoteStatus = Effect.fn(\"VcsStatusBroadcaster.readRemoteStatus\")(function* (\n      cwd: string,\n    ) {\n      return yield* workflow\n        .remoteStatus({ cwd })\n        .pipe(\n          Effect.catchCause((cause) =>\n            Cause.hasInterruptsOnly(cause)\n              ? getCachedStatus(cwd).pipe(Effect.map((cached) => cached?.remote?.value ?? null))\n              : Effect.failCause(cause),\n          ),\n        );\n    });\n\n    const loadRemoteStatus = Effect.fn(\"VcsStatusBroadcaster.loadRemoteStatus\")(function* (\n      cwd: string,\n    ) {\n      const remote = yield* readRemoteStatus(cwd);\n      return yield* updateCachedRemoteStatus(cwd, remote);\n    });\n\n    const getOrLoadLocalStatus = Effect.fn(\"VcsStatusBroadcaster.getOrLoadLocalStatus\")(function* (\n      cwd: string,\n    ) {\n      const cached = yield* getCachedStatus(cwd);\n      if (cached?.local) {\n        return cached.local.value;\n      }\n      return yield* loadLocalStatus(cwd);\n    });\n\n    const getOrLoadRemoteStatus = Effect.fn(\"VcsStatusBroadcaster.getOrLoadRemoteStatus\")(\n      function* (cwd: string) {\n        const cached = yield* getCachedStatus(cwd);\n        if (cached?.remote) {\n          return cached.remote.value;\n        }\n        return yield* loadRemoteStatus(cwd);\n      },\n    );\n\n    const withFileSystem = Effect.provideService(FileSystem.FileSystem, fs);\n\n    const getStatus: VcsStatusBroadcasterShape[\"getStatus\"] = Effect.fn(\n      \"VcsStatusBroadcaster.getStatus\",\n    )(function* (input) {\n      const cwd = yield* withFileSystem(normalizeCwd(input.cwd));\n      const [local, remote] = yield* Effect.all([\n        getOrLoadLocalStatus(cwd),\n        getOrLoadRemoteStatus(cwd),\n      ]);\n      return mergeGitStatusParts(local, remote);\n    });\n\n    const refreshLocalStatus: VcsStatusBroadcasterShape[\"refreshLocalStatus\"] = Effect.fn(\n      \"VcsStatusBroadcaster.refreshLocalStatus\",\n    )(function* (rawCwd) {\n      const cwd = yield* withFileSystem(normalizeCwd(rawCwd));\n      yield* workflow.invalidateLocalStatus(cwd);\n      const local = yield* workflow.localStatus({ cwd });\n      return yield* updateCachedLocalStatus(cwd, local, { publish: true });\n    });\n\n    const refreshRemoteStatus = Effect.fn(\"VcsStatusBroadcaster.refreshRemoteStatus\")(function* (\n      cwd: string,\n    ) {\n      yield* workflow.invalidateRemoteStatus(cwd);\n      const remote = yield* readRemoteStatus(cwd);\n      return yield* updateCachedRemoteStatus(cwd, remote, { publish: true });\n    });\n\n    const refreshStatus: VcsStatusBroadcasterShape[\"refreshStatus\"] = Effect.fn(\n      \"VcsStatusBroadcaster.refreshStatus\",\n    )(function* (rawCwd) {\n      const cwd = yield* withFileSystem(normalizeCwd(rawCwd));\n      const [local, remote] = yield* Effect.all([\n        refreshLocalStatus(cwd),\n        refreshRemoteStatus(cwd),\n      ]);\n      return mergeGitStatusParts(local, remote);\n    });\n\n    const makeRemoteRefreshLoop = (\n      cwd: string,\n      automaticRemoteRefreshInterval: Effect.Effect<Duration.Duration, never>,\n      refreshImmediately: boolean,\n    ) => {\n      return Effect.gen(function* () {\n        const consecutiveFailuresRef = yield* Ref.make(0);\n        const refreshRemoteStatusIfEnabled = Effect.gen(function* () {\n          const configuredInterval = yield* automaticRemoteRefreshInterval;\n          const activeInterval = Duration.isZero(configuredInterval)\n            ? DEFAULT_VCS_STATUS_REFRESH_INTERVAL\n            : configuredInterval;\n          if (Duration.isZero(configuredInterval)) {\n            return activeInterval;\n          }\n\n          const exit = yield* refreshRemoteStatus(cwd).pipe(Effect.exit);\n          if (Exit.isSuccess(exit)) {\n            yield* Ref.set(consecutiveFailuresRef, 0);\n            return activeInterval;\n          }\n          if (Cause.hasInterruptsOnly(exit.cause)) {\n            yield* Ref.set(consecutiveFailuresRef, 0);\n            return activeInterval;\n          }\n\n          const consecutiveFailures = yield* Ref.updateAndGet(\n            consecutiveFailuresRef,\n            (count) => count + 1,\n          );\n          const nextDelay = remoteRefreshFailureDelay(consecutiveFailures, activeInterval);\n          yield* Effect.logWarning(\"VCS remote status refresh failed\", {\n            cwd,\n            detail: exit.cause.toString(),\n            consecutiveFailures,\n            nextDelayMs: Duration.toMillis(nextDelay),\n          });\n          return nextDelay;\n        });\n\n        if (!refreshImmediately) {\n          const configuredInterval = yield* automaticRemoteRefreshInterval;\n          yield* Effect.sleep(\n            Duration.isZero(configuredInterval)\n              ? DEFAULT_VCS_STATUS_REFRESH_INTERVAL\n              : configuredInterval,\n          );\n        }\n\n        return yield* refreshRemoteStatusIfEnabled.pipe(\n          Effect.repeat(\n            Schedule.identity<Duration.Duration>().pipe(\n              Schedule.addDelay(({ output: delay }) => Effect.succeed(delay)),\n            ),\n          ),\n          Effect.asVoid,\n        );\n      });\n    };\n\n    const retainRemotePoller = Effect.fn(\"VcsStatusBroadcaster.retainRemotePoller\")(function* (\n      cwd: string,\n      automaticRemoteRefreshInterval: Effect.Effect<Duration.Duration, never>,\n      refreshImmediately: boolean,\n    ) {\n      yield* SynchronizedRef.modifyEffect(pollersRef, (activePollers) => {\n        const existing = activePollers.get(cwd);\n        if (existing) {\n          const nextPollers = new Map(activePollers);\n          nextPollers.set(cwd, {\n            ...existing,\n            subscriberCount: existing.subscriberCount + 1,\n          });\n          return Effect.succeed([undefined, nextPollers] as const);\n        }\n\n        return makeRemoteRefreshLoop(cwd, automaticRemoteRefreshInterval, refreshImmediately).pipe(\n          Effect.forkIn(broadcasterScope),\n          Effect.map((fiber) => {\n            const nextPollers = new Map(activePollers);\n            nextPollers.set(cwd, {\n              fiber,\n              subscriberCount: 1,\n            });\n            return [undefined, nextPollers] as const;\n          }),\n        );\n      });\n    });\n\n    const releaseRemotePoller = Effect.fn(\"VcsStatusBroadcaster.releaseRemotePoller\")(function* (\n      cwd: string,\n    ) {\n      const pollerToInterrupt = yield* SynchronizedRef.modify(pollersRef, (activePollers) => {\n        const existing = activePollers.get(cwd);\n        if (!existing) {\n          return [null, activePollers] as const;\n        }\n\n        if (existing.subscriberCount > 1) {\n          const nextPollers = new Map(activePollers);\n          nextPollers.set(cwd, {\n            ...existing,\n            subscriberCount: existing.subscriberCount - 1,\n          });\n          return [null, nextPollers] as const;\n        }\n\n        const nextPollers = new Map(activePollers);\n        nextPollers.delete(cwd);\n        return [existing.fiber, nextPollers] as const;\n      });\n\n      if (pollerToInterrupt) {\n        yield* Fiber.interrupt(pollerToInterrupt).pipe(Effect.ignore);\n      }\n    });\n\n    const streamStatus: VcsStatusBroadcasterShape[\"streamStatus\"] = (input, options) =>\n      Stream.unwrap(\n        Effect.gen(function* () {\n          const cwd = yield* withFileSystem(normalizeCwd(input.cwd));\n          const subscription = yield* PubSub.subscribe(changesPubSub);\n          const initialLocal = yield* getOrLoadLocalStatus(cwd);\n          const cachedStatus = yield* getCachedStatus(cwd);\n          const initialRemote = cachedStatus?.remote?.value ?? null;\n          yield* retainRemotePoller(\n            cwd,\n            options?.automaticRemoteRefreshInterval ??\n              Effect.succeed(DEFAULT_VCS_STATUS_REFRESH_INTERVAL),\n            cachedStatus?.remote === null || cachedStatus?.remote === undefined,\n          );\n\n          const release = releaseRemotePoller(cwd).pipe(Effect.ignore, Effect.asVoid);\n\n          return Stream.concat(\n            Stream.make({\n              _tag: \"snapshot\" as const,\n              local: initialLocal,\n              remote: initialRemote,\n            }),\n            Stream.fromSubscription(subscription).pipe(\n              Stream.filter((event) => event.cwd === cwd),\n              Stream.map((event) => event.event),\n            ),\n          ).pipe(Stream.ensuring(release));\n        }),\n      );\n\n    return VcsStatusBroadcaster.of({\n      getStatus,\n      refreshLocalStatus,\n      refreshStatus,\n      streamStatus,\n    });\n  }),\n);\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  type VcsDriverKind,\n  type VcsError,\n  type VcsInitInput,\n  VcsUnsupportedOperationError,\n} from \"@salchi/contracts\";\nimport * as VcsDriverRegistry from \"./VcsDriverRegistry.ts\";\n\nexport interface VcsProvisioningServiceShape {\n  readonly initRepository: (input: VcsInitInput) => Effect.Effect<void, VcsError>;\n}\n\nexport class VcsProvisioningService extends Context.Service<\n  VcsProvisioningService,\n  VcsProvisioningServiceShape\n>()(\"salchi/vcs/VcsProvisioningService\") {}\n\nfunction resolveRequestedKind(\n  kind: VcsDriverKind | undefined,\n): Effect.Effect<VcsDriverKind, VcsUnsupportedOperationError> {\n  if (kind === undefined) {\n    return Effect.succeed(\"git\");\n  }\n  if (kind === \"unknown\") {\n    return Effect.fail(\n      new VcsUnsupportedOperationError({\n        operation: \"VcsProvisioningService.resolveRequestedKind\",\n        kind,\n        detail: \"A concrete VCS driver kind is required for repository provisioning.\",\n      }),\n    );\n  }\n  return Effect.succeed(kind);\n}\n\nexport const make = Effect.fn(\"makeVcsProvisioningService\")(function* () {\n  const registry = yield* VcsDriverRegistry.VcsDriverRegistry;\n\n  const initRepository: VcsProvisioningServiceShape[\"initRepository\"] = Effect.fn(\n    \"VcsProvisioningService.initRepository\",\n  )(function* (input) {\n    const kind = yield* resolveRequestedKind(input.kind);\n    const driver = yield* registry.get(kind);\n    return yield* driver.initRepository(input);\n  });\n\n  return VcsProvisioningService.of({\n    initRepository,\n  });\n});\n\nexport const layer = Layer.effect(VcsProvisioningService, make());\n","import type {\n  ServerProcessDiagnosticsEntry,\n  ServerProcessDiagnosticsResult,\n  ServerProcessSignal,\n  ServerSignalProcessResult,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport { collectUint8StreamText } from \"../stream/collectUint8StreamText.ts\";\n\nexport interface ProcessRow {\n  readonly pid: number;\n  readonly ppid: number;\n  readonly pgid: number | null;\n  readonly status: string;\n  readonly cpuPercent: number;\n  readonly rssBytes: number;\n  readonly elapsed: string;\n  readonly command: string;\n}\n\nconst PROCESS_QUERY_TIMEOUT_MS = 1_000;\nconst POSIX_PROCESS_QUERY_COMMAND = \"pid=,ppid=,pgid=,stat=,pcpu=,rss=,etime=,command=\";\nconst PROCESS_QUERY_MAX_OUTPUT_BYTES = 2 * 1024 * 1024;\n\nexport interface ProcessDiagnosticsShape {\n  readonly read: Effect.Effect<ServerProcessDiagnosticsResult>;\n  readonly signal: (input: {\n    readonly pid: number;\n    readonly signal: ServerProcessSignal;\n  }) => Effect.Effect<ServerSignalProcessResult>;\n}\n\nexport class ProcessDiagnostics extends Context.Service<\n  ProcessDiagnostics,\n  ProcessDiagnosticsShape\n>()(\"salchi/diagnostics/ProcessDiagnostics\") {}\n\nclass ProcessDiagnosticsError extends Schema.TaggedErrorClass<ProcessDiagnosticsError>()(\n  \"ProcessDiagnosticsError\",\n  {\n    message: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\nconst isProcessDiagnosticsError = Schema.is(ProcessDiagnosticsError);\n\nfunction toProcessDiagnosticsError(message: string, cause?: unknown): ProcessDiagnosticsError {\n  return new ProcessDiagnosticsError({\n    message,\n    ...(cause === undefined ? {} : { cause }),\n  });\n}\n\nfunction parsePositiveInt(value: string): number | null {\n  const parsed = Number.parseInt(value, 10);\n  return Number.isInteger(parsed) && parsed > 0 ? parsed : null;\n}\n\nfunction parseNonNegativeInt(value: string): number | null {\n  const parsed = Number.parseInt(value, 10);\n  return Number.isInteger(parsed) && parsed >= 0 ? parsed : null;\n}\n\nfunction parseNumber(value: string): number | null {\n  const parsed = Number.parseFloat(value);\n  return Number.isFinite(parsed) ? parsed : null;\n}\n\nexport function parsePosixProcessRows(output: string): ReadonlyArray<ProcessRow> {\n  const rows: ProcessRow[] = [];\n  const rowPattern =\n    /^\\s*(\\d+)\\s+(\\d+)\\s+(-?\\d+)\\s+(\\S+)\\s+([+-]?(?:\\d+\\.?\\d*|\\.\\d+))\\s+(\\d+)\\s+(\\S+)\\s+(.+)$/;\n\n  for (const line of output.split(/\\r?\\n/)) {\n    if (line.trim().length === 0) continue;\n\n    const match = rowPattern.exec(line);\n    if (!match) continue;\n\n    const pidText = match[1];\n    const ppidText = match[2];\n    const pgidText = match[3];\n    const status = match[4];\n    const cpuText = match[5];\n    const rssText = match[6];\n    const elapsed = match[7];\n    const command = match[8];\n    if (\n      pidText === undefined ||\n      ppidText === undefined ||\n      pgidText === undefined ||\n      status === undefined ||\n      cpuText === undefined ||\n      rssText === undefined ||\n      elapsed === undefined ||\n      command === undefined\n    ) {\n      continue;\n    }\n\n    const pid = parsePositiveInt(pidText);\n    const ppid = parseNonNegativeInt(ppidText);\n    const pgid = Number.parseInt(pgidText, 10);\n    const cpuPercent = parseNumber(cpuText);\n    const rssKiB = parseNonNegativeInt(rssText);\n    if (\n      pid === null ||\n      ppid === null ||\n      !Number.isInteger(pgid) ||\n      cpuPercent === null ||\n      rssKiB === null ||\n      !status ||\n      !elapsed ||\n      !command\n    ) {\n      continue;\n    }\n\n    rows.push({\n      pid,\n      ppid,\n      pgid,\n      status,\n      cpuPercent,\n      rssBytes: rssKiB * 1024,\n      elapsed,\n      command,\n    });\n  }\n\n  return rows;\n}\n\nfunction normalizeWindowsProcessRow(value: unknown): ProcessRow | null {\n  if (typeof value !== \"object\" || value === null) return null;\n  const record = value as Record<string, unknown>;\n  const pid = typeof record.ProcessId === \"number\" ? record.ProcessId : null;\n  const ppid = typeof record.ParentProcessId === \"number\" ? record.ParentProcessId : null;\n  const commandLine =\n    typeof record.CommandLine === \"string\" && record.CommandLine.trim().length > 0\n      ? record.CommandLine\n      : typeof record.Name === \"string\"\n        ? record.Name\n        : null;\n  const workingSet =\n    typeof record.WorkingSetSize === \"number\" && Number.isFinite(record.WorkingSetSize)\n      ? Math.max(0, Math.round(record.WorkingSetSize))\n      : 0;\n  const cpuPercent =\n    typeof record.PercentProcessorTime === \"number\" && Number.isFinite(record.PercentProcessorTime)\n      ? Math.max(0, record.PercentProcessorTime)\n      : 0;\n\n  if (!pid || pid <= 0 || ppid === null || ppid < 0 || !commandLine) return null;\n  return {\n    pid,\n    ppid,\n    pgid: null,\n    status: typeof record.Status === \"string\" && record.Status.length > 0 ? record.Status : \"Live\",\n    cpuPercent,\n    rssBytes: workingSet,\n    elapsed: \"\",\n    command: commandLine,\n  };\n}\n\nfunction parseWindowsProcessRows(output: string): ReadonlyArray<ProcessRow> {\n  if (output.trim().length === 0) return [];\n  try {\n    const parsed = JSON.parse(output) as unknown;\n    const records = Array.isArray(parsed) ? parsed : [parsed];\n    return records.flatMap((record) => {\n      const row = normalizeWindowsProcessRow(record);\n      return row ? [row] : [];\n    });\n  } catch {\n    return [];\n  }\n}\n\nexport function buildDescendantEntries(\n  rows: ReadonlyArray<ProcessRow>,\n  serverPid: number,\n): ReadonlyArray<ServerProcessDiagnosticsEntry> {\n  const childrenByParent = new Map<number, ProcessRow[]>();\n  for (const row of rows) {\n    const children = childrenByParent.get(row.ppid) ?? [];\n    children.push(row);\n    childrenByParent.set(row.ppid, children);\n  }\n\n  const entries: ServerProcessDiagnosticsEntry[] = [];\n  const visited = new Set<number>();\n  const stack = [...(childrenByParent.get(serverPid) ?? [])]\n    .toSorted((left, right) => left.pid - right.pid)\n    .map((row) => ({ row, depth: 0 }));\n\n  while (stack.length > 0) {\n    const item = stack.shift();\n    if (!item || visited.has(item.row.pid)) continue;\n    visited.add(item.row.pid);\n\n    const children = [...(childrenByParent.get(item.row.pid) ?? [])].toSorted(\n      (left, right) => left.pid - right.pid,\n    );\n    entries.push({\n      pid: item.row.pid,\n      ppid: item.row.ppid,\n      pgid: Option.fromNullishOr(item.row.pgid),\n      status: item.row.status,\n      cpuPercent: item.row.cpuPercent,\n      rssBytes: item.row.rssBytes,\n      elapsed: item.row.elapsed || \"n/a\",\n      command: item.row.command,\n      depth: item.depth,\n      childPids: children.map((child) => child.pid),\n    });\n\n    stack.unshift(...children.map((row) => ({ row, depth: item.depth + 1 })));\n  }\n\n  return entries;\n}\n\nexport function isDiagnosticsQueryProcess(row: ProcessRow, serverPid: number): boolean {\n  if (row.ppid !== serverPid) return false;\n\n  const command = row.command.trim();\n  return (\n    /(?:^|[/\\\\])ps\\s+-axo\\s+pid=,ppid=,pgid=,stat=,pcpu=,rss=,etime=,command=/.test(command) ||\n    (/\\bpowershell(?:\\.exe)?\\b/i.test(command) &&\n      /\\bGet-CimInstance\\s+Win32_Process\\b/i.test(command))\n  );\n}\n\nfunction makeResult(input: {\n  readonly serverPid: number;\n  readonly rows: ReadonlyArray<ProcessRow>;\n  readonly readAt: DateTime.Utc;\n  readonly error?: string;\n}): ServerProcessDiagnosticsResult {\n  const readAt = input.readAt;\n  const rows = input.rows.filter((row) => !isDiagnosticsQueryProcess(row, input.serverPid));\n  const processes = buildDescendantEntries(rows, input.serverPid);\n  const totalRssBytes = processes.reduce((total, process) => total + process.rssBytes, 0);\n  const totalCpuPercent = processes.reduce((total, process) => total + process.cpuPercent, 0);\n\n  return {\n    serverPid: input.serverPid,\n    readAt,\n    processCount: processes.length,\n    totalRssBytes,\n    totalCpuPercent,\n    processes,\n    error: input.error ? Option.some({ message: input.error }) : Option.none(),\n  };\n}\n\ninterface ProcessOutput {\n  readonly exitCode: number;\n  readonly stdout: string;\n  readonly stderr: string;\n}\n\nconst runProcess = Effect.fn(\"runProcess\")(\n  function* (input: {\n    readonly command: string;\n    readonly args: ReadonlyArray<string>;\n    readonly errorMessage: string;\n  }) {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const spawnCommand = resolveSpawnCommand(input.command, input.args);\n    const child = yield* spawner.spawn(\n      ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n        cwd: process.cwd(),\n        shell: spawnCommand.shell,\n      }),\n    );\n    const [stdout, stderr, exitCode] = yield* Effect.all(\n      [\n        collectUint8StreamText({\n          stream: child.stdout,\n          maxBytes: PROCESS_QUERY_MAX_OUTPUT_BYTES,\n          truncatedMarker: \"\\n\\n[truncated]\",\n        }),\n        collectUint8StreamText({\n          stream: child.stderr,\n          maxBytes: PROCESS_QUERY_MAX_OUTPUT_BYTES,\n          truncatedMarker: \"\\n\\n[truncated]\",\n        }),\n        child.exitCode,\n      ],\n      { concurrency: \"unbounded\" },\n    );\n\n    return {\n      exitCode,\n      stdout: stdout.text,\n      stderr: stderr.text,\n    } satisfies ProcessOutput;\n  },\n  (effect, input) =>\n    effect.pipe(\n      Effect.scoped,\n      Effect.timeoutOption(Duration.millis(PROCESS_QUERY_TIMEOUT_MS)),\n      Effect.flatMap((result) =>\n        Option.match(result, {\n          onNone: () => Effect.fail(toProcessDiagnosticsError(`${input.errorMessage} timed out.`)),\n          onSome: Effect.succeed,\n        }),\n      ),\n      Effect.mapError((cause) =>\n        isProcessDiagnosticsError(cause)\n          ? cause\n          : toProcessDiagnosticsError(input.errorMessage, cause),\n      ),\n    ),\n);\n\nfunction readPosixProcessRows(): Effect.Effect<\n  ReadonlyArray<ProcessRow>,\n  ProcessDiagnosticsError,\n  ChildProcessSpawner.ChildProcessSpawner\n> {\n  return runProcess({\n    command: \"ps\",\n    args: [\"-axo\", POSIX_PROCESS_QUERY_COMMAND],\n    errorMessage: \"Failed to query process diagnostics.\",\n  }).pipe(\n    Effect.flatMap((result) =>\n      result.exitCode !== 0\n        ? Effect.fail(toProcessDiagnosticsError(result.stderr.trim() || \"ps failed.\"))\n        : Effect.succeed(parsePosixProcessRows(result.stdout)),\n    ),\n  );\n}\n\nfunction readWindowsProcessRows(): Effect.Effect<\n  ReadonlyArray<ProcessRow>,\n  ProcessDiagnosticsError,\n  ChildProcessSpawner.ChildProcessSpawner\n> {\n  const command = [\n    \"$processes = Get-CimInstance Win32_Process | ForEach-Object {\",\n    '$perf = Get-CimInstance Win32_PerfFormattedData_PerfProc_Process -Filter \"IDProcess = $($_.ProcessId)\" -ErrorAction SilentlyContinue;',\n    \"[pscustomobject]@{ ProcessId = $_.ProcessId; ParentProcessId = $_.ParentProcessId; Name = $_.Name; CommandLine = $_.CommandLine; Status = $_.Status; WorkingSetSize = $_.WorkingSetSize; PercentProcessorTime = if ($perf) { $perf.PercentProcessorTime } else { 0 } }\",\n    \"};\",\n    \"$processes | ConvertTo-Json -Compress -Depth 3\",\n  ].join(\" \");\n\n  return runProcess({\n    command: \"powershell.exe\",\n    args: [\"-NoProfile\", \"-NonInteractive\", \"-Command\", command],\n    errorMessage: \"Failed to query process diagnostics.\",\n  }).pipe(\n    Effect.flatMap((result) =>\n      result.exitCode !== 0\n        ? Effect.fail(\n            toProcessDiagnosticsError(result.stderr.trim() || \"PowerShell process query failed.\"),\n          )\n        : Effect.succeed(parseWindowsProcessRows(result.stdout)),\n    ),\n  );\n}\n\nexport const readProcessRows = (platform = process.platform) =>\n  platform === \"win32\" ? readWindowsProcessRows() : readPosixProcessRows();\n\nexport function aggregateProcessDiagnostics(input: {\n  readonly serverPid: number;\n  readonly rows: ReadonlyArray<ProcessRow>;\n  readonly readAt: DateTime.Utc;\n}): ServerProcessDiagnosticsResult {\n  return makeResult(input);\n}\n\nfunction assertDescendantPid(\n  pid: number,\n): Effect.Effect<void, ProcessDiagnosticsError, ChildProcessSpawner.ChildProcessSpawner> {\n  if (pid === process.pid) {\n    return Effect.fail(toProcessDiagnosticsError(\"Refusing to signal the Salchi server process.\"));\n  }\n\n  return readProcessRows().pipe(\n    Effect.flatMap((rows) => {\n      const filteredRows = rows.filter((row) => !isDiagnosticsQueryProcess(row, process.pid));\n      const descendant = buildDescendantEntries(filteredRows, process.pid).some(\n        (entry) => entry.pid === pid,\n      );\n      return descendant\n        ? Effect.void\n        : Effect.fail(\n            toProcessDiagnosticsError(\n              `Process ${pid} is not a live descendant of the Salchi server.`,\n            ),\n          );\n    }),\n  );\n}\n\nexport const make = Effect.fn(\"makeProcessDiagnostics\")(function* () {\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\n  const read: ProcessDiagnosticsShape[\"read\"] = Effect.gen(function* () {\n    const readAt = yield* DateTime.now;\n    const rows = yield* readProcessRows().pipe(\n      Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n    );\n    return makeResult({ serverPid: process.pid, rows, readAt });\n  }).pipe(\n    Effect.catch((error: ProcessDiagnosticsError) =>\n      DateTime.now.pipe(\n        Effect.map((readAt) =>\n          makeResult({ serverPid: process.pid, rows: [], readAt, error: error.message }),\n        ),\n      ),\n    ),\n  );\n\n  const signal: ProcessDiagnosticsShape[\"signal\"] = Effect.fn(\"ProcessDiagnostics.signal\")(\n    function* (input) {\n      return yield* assertDescendantPid(input.pid).pipe(\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n        Effect.flatMap(() =>\n          Effect.try({\n            try: () => {\n              process.kill(input.pid, input.signal);\n              return {\n                pid: input.pid,\n                signal: input.signal,\n                signaled: true,\n                message: Option.none(),\n              };\n            },\n            catch: (cause) =>\n              toProcessDiagnosticsError(\n                `Failed to signal process ${input.pid} with ${input.signal}.`,\n                cause,\n              ),\n          }),\n        ),\n        Effect.catch((error: ProcessDiagnosticsError) =>\n          Effect.succeed({\n            pid: input.pid,\n            signal: input.signal,\n            signaled: false,\n            message: Option.some(error.message),\n          }),\n        ),\n      );\n    },\n  );\n\n  return ProcessDiagnostics.of({ read, signal });\n});\n\nexport const layer = Layer.effect(ProcessDiagnostics, make());\n","import type {\n  ServerProcessResourceHistoryBucket,\n  ServerProcessResourceHistoryInput,\n  ServerProcessResourceHistoryResult,\n  ServerProcessResourceHistorySummary,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport {\n  buildDescendantEntries,\n  isDiagnosticsQueryProcess,\n  type ProcessRow,\n  readProcessRows,\n} from \"./ProcessDiagnostics.ts\";\n\nconst SAMPLE_INTERVAL_MS = 5_000;\nconst RETENTION_MS = 60 * 60_000;\nconst MAX_RETAINED_SAMPLES = 20_000;\n\nexport interface ProcessResourceSample {\n  readonly sampledAt: DateTime.Utc;\n  readonly sampledAtMs: number;\n  readonly processKey: string;\n  readonly pid: number;\n  readonly ppid: number;\n  readonly command: string;\n  readonly cpuPercent: number;\n  readonly rssBytes: number;\n  readonly depth: number;\n  readonly isServerRoot: boolean;\n}\n\ninterface MonitorState {\n  readonly samples: ReadonlyArray<ProcessResourceSample>;\n  readonly lastError: string | null;\n}\n\nexport interface ProcessResourceMonitorShape {\n  readonly readHistory: (\n    input: ServerProcessResourceHistoryInput,\n  ) => Effect.Effect<ServerProcessResourceHistoryResult>;\n}\n\nexport class ProcessResourceMonitor extends Context.Service<\n  ProcessResourceMonitor,\n  ProcessResourceMonitorShape\n>()(\"salchi/diagnostics/ProcessResourceMonitor\") {}\n\nfunction dateTimeFromMillis(ms: number): DateTime.Utc {\n  return DateTime.makeUnsafe(ms);\n}\n\nfunction sampleKey(row: Pick<ProcessRow, \"pid\" | \"command\">): string {\n  return `${row.pid}:${row.command}`;\n}\n\nfunction findServerRootRow(rows: ReadonlyArray<ProcessRow>, serverPid: number): ProcessRow | null {\n  return rows.find((row) => row.pid === serverPid) ?? null;\n}\n\nexport function collectMonitoredSamples(input: {\n  readonly rows: ReadonlyArray<ProcessRow>;\n  readonly serverPid: number;\n  readonly sampledAt: DateTime.Utc;\n  readonly sampledAtMs: number;\n}): ReadonlyArray<ProcessResourceSample> {\n  const rows = input.rows.filter((row) => !isDiagnosticsQueryProcess(row, input.serverPid));\n  const root = findServerRootRow(rows, input.serverPid);\n  const descendants = buildDescendantEntries(rows, input.serverPid);\n  const samples: ProcessResourceSample[] = [];\n\n  if (root) {\n    samples.push({\n      sampledAt: input.sampledAt,\n      sampledAtMs: input.sampledAtMs,\n      processKey: sampleKey(root),\n      pid: root.pid,\n      ppid: root.ppid,\n      command: root.command,\n      cpuPercent: root.cpuPercent,\n      rssBytes: root.rssBytes,\n      depth: 0,\n      isServerRoot: true,\n    });\n  }\n\n  for (const process of descendants) {\n    samples.push({\n      sampledAt: input.sampledAt,\n      sampledAtMs: input.sampledAtMs,\n      processKey: sampleKey(process),\n      pid: process.pid,\n      ppid: process.ppid,\n      command: process.command,\n      cpuPercent: process.cpuPercent,\n      rssBytes: process.rssBytes,\n      depth: process.depth + 1,\n      isServerRoot: false,\n    });\n  }\n\n  return samples;\n}\n\nfunction trimSamples(\n  samples: ReadonlyArray<ProcessResourceSample>,\n  nowMs: number,\n): ReadonlyArray<ProcessResourceSample> {\n  const minSampledAtMs = nowMs - RETENTION_MS;\n  const retained = samples.filter((sample) => sample.sampledAtMs >= minSampledAtMs);\n  return retained.length <= MAX_RETAINED_SAMPLES\n    ? retained\n    : retained.slice(retained.length - MAX_RETAINED_SAMPLES);\n}\n\nfunction summarizeProcesses(\n  samples: ReadonlyArray<ProcessResourceSample>,\n): ReadonlyArray<ServerProcessResourceHistorySummary> {\n  const groups = new Map<string, ProcessResourceSample[]>();\n  for (const sample of samples) {\n    const processSamples = groups.get(sample.processKey) ?? [];\n    processSamples.push(sample);\n    groups.set(sample.processKey, processSamples);\n  }\n\n  return [...groups.entries()]\n    .map(([processKey, processSamples]) => {\n      const sorted = processSamples.toSorted((left, right) => left.sampledAtMs - right.sampledAtMs);\n      const first = sorted[0]!;\n      const latest = sorted[sorted.length - 1]!;\n      const cpuPercentTotal = sorted.reduce((total, sample) => total + sample.cpuPercent, 0);\n      const maxCpuPercent = Math.max(...sorted.map((sample) => sample.cpuPercent));\n      const maxRssBytes = Math.max(...sorted.map((sample) => sample.rssBytes));\n      const cpuSecondsApprox = sorted.reduce(\n        (total, sample) => total + (sample.cpuPercent / 100) * (SAMPLE_INTERVAL_MS / 1_000),\n        0,\n      );\n\n      return {\n        processKey,\n        pid: latest.pid,\n        ppid: latest.ppid,\n        command: latest.command,\n        depth: latest.depth,\n        isServerRoot: latest.isServerRoot,\n        firstSeenAt: first.sampledAt,\n        lastSeenAt: latest.sampledAt,\n        currentCpuPercent: latest.cpuPercent,\n        avgCpuPercent: cpuPercentTotal / sorted.length,\n        maxCpuPercent,\n        cpuSecondsApprox,\n        currentRssBytes: latest.rssBytes,\n        maxRssBytes,\n        sampleCount: sorted.length,\n      } satisfies ServerProcessResourceHistorySummary;\n    })\n    .toSorted((left, right) => right.cpuSecondsApprox - left.cpuSecondsApprox);\n}\n\nfunction buildBuckets(input: {\n  readonly samples: ReadonlyArray<ProcessResourceSample>;\n  readonly nowMs: number;\n  readonly windowMs: number;\n  readonly bucketMs: number;\n}): ReadonlyArray<ServerProcessResourceHistoryBucket> {\n  const bucketMs = Math.max(1_000, input.bucketMs);\n  const windowStartMs = input.nowMs - input.windowMs;\n  const buckets: ServerProcessResourceHistoryBucket[] = [];\n\n  for (let startedAtMs = windowStartMs; startedAtMs < input.nowMs; startedAtMs += bucketMs) {\n    const endedAtMs = Math.min(input.nowMs, startedAtMs + bucketMs);\n    const bucketSamples = input.samples.filter(\n      (sample) =>\n        sample.sampledAtMs >= startedAtMs &&\n        (endedAtMs === input.nowMs\n          ? sample.sampledAtMs <= endedAtMs\n          : sample.sampledAtMs < endedAtMs),\n    );\n    const samplesByRead = new Map<number, ProcessResourceSample[]>();\n    for (const sample of bucketSamples) {\n      const samplesAtTime = samplesByRead.get(sample.sampledAtMs) ?? [];\n      samplesAtTime.push(sample);\n      samplesByRead.set(sample.sampledAtMs, samplesAtTime);\n    }\n\n    const readTotals = [...samplesByRead.values()].map((samplesAtTime) => ({\n      cpuPercent: samplesAtTime.reduce((total, sample) => total + sample.cpuPercent, 0),\n      rssBytes: samplesAtTime.reduce((total, sample) => total + sample.rssBytes, 0),\n      processCount: samplesAtTime.length,\n    }));\n    const avgCpuPercent =\n      readTotals.length === 0\n        ? 0\n        : readTotals.reduce((total, read) => total + read.cpuPercent, 0) / readTotals.length;\n\n    buckets.push({\n      startedAt: dateTimeFromMillis(startedAtMs),\n      endedAt: dateTimeFromMillis(endedAtMs),\n      avgCpuPercent,\n      maxCpuPercent: readTotals.length ? Math.max(...readTotals.map((read) => read.cpuPercent)) : 0,\n      maxRssBytes: readTotals.length ? Math.max(...readTotals.map((read) => read.rssBytes)) : 0,\n      maxProcessCount: readTotals.length\n        ? Math.max(...readTotals.map((read) => read.processCount))\n        : 0,\n    });\n  }\n\n  return buckets;\n}\n\nexport function aggregateProcessResourceHistory(input: {\n  readonly samples: ReadonlyArray<ProcessResourceSample>;\n  readonly readAt: DateTime.Utc;\n  readonly readAtMs: number;\n  readonly windowMs: number;\n  readonly bucketMs: number;\n  readonly lastError: string | null;\n}): ServerProcessResourceHistoryResult {\n  const windowMs = Math.max(1_000, input.windowMs);\n  const bucketMs = Math.max(1_000, input.bucketMs);\n  const minSampledAtMs = input.readAtMs - windowMs;\n  const samples = input.samples.filter((sample) => sample.sampledAtMs >= minSampledAtMs);\n  const topProcesses = summarizeProcesses(samples);\n  const totalCpuSecondsApprox = samples.reduce(\n    (total, sample) => total + (sample.cpuPercent / 100) * (SAMPLE_INTERVAL_MS / 1_000),\n    0,\n  );\n\n  return {\n    readAt: input.readAt,\n    windowMs,\n    bucketMs,\n    sampleIntervalMs: SAMPLE_INTERVAL_MS,\n    retainedSampleCount: input.samples.length,\n    totalCpuSecondsApprox,\n    buckets: buildBuckets({ samples, nowMs: input.readAtMs, windowMs, bucketMs }),\n    topProcesses,\n    error: input.lastError ? Option.some({ message: input.lastError }) : Option.none(),\n  };\n}\n\nexport const make = Effect.fn(\"makeProcessResourceMonitor\")(function* () {\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const state = yield* Ref.make<MonitorState>({ samples: [], lastError: null });\n\n  const sampleOnce = Effect.gen(function* () {\n    const sampledAt = yield* DateTime.now;\n    const sampledAtMs = DateTime.toEpochMillis(sampledAt);\n    const rows = yield* readProcessRows().pipe(\n      Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n    );\n    const samples = collectMonitoredSamples({\n      rows,\n      serverPid: process.pid,\n      sampledAt,\n      sampledAtMs,\n    });\n    yield* Ref.update(state, (current) => ({\n      samples: trimSamples([...current.samples, ...samples], sampledAtMs),\n      lastError: null,\n    }));\n  }).pipe(\n    Effect.catch((error: unknown) =>\n      Ref.update(state, (current) => ({\n        ...current,\n        lastError: error instanceof Error ? error.message : \"Failed to sample process resources.\",\n      })),\n    ),\n  );\n\n  yield* Effect.forever(sampleOnce.pipe(Effect.andThen(Effect.sleep(SAMPLE_INTERVAL_MS)))).pipe(\n    Effect.forkScoped,\n  );\n\n  const readHistory: ProcessResourceMonitorShape[\"readHistory\"] = (input) =>\n    Effect.gen(function* () {\n      const readAt = yield* DateTime.now;\n      const readAtMs = DateTime.toEpochMillis(readAt);\n      const current = yield* Ref.get(state);\n      return aggregateProcessResourceHistory({\n        samples: current.samples,\n        readAt,\n        readAtMs,\n        windowMs: input.windowMs,\n        bucketMs: input.bucketMs,\n        lastError: current.lastError,\n      });\n    });\n\n  return ProcessResourceMonitor.of({ readHistory });\n});\n\nexport const layer = Layer.effect(ProcessResourceMonitor, make());\n","import type {\n  ServerTraceDiagnosticsErrorKind,\n  ServerTraceDiagnosticsFailureSummary,\n  ServerTraceDiagnosticsLogEvent,\n  ServerTraceDiagnosticsRecentFailure,\n  ServerTraceDiagnosticsResult,\n  ServerTraceDiagnosticsSpanOccurrence,\n  ServerTraceDiagnosticsSpanSummary,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as PlatformError from \"effect/PlatformError\";\n\ninterface TraceRecordLike {\n  readonly name?: unknown;\n  readonly traceId?: unknown;\n  readonly spanId?: unknown;\n  readonly startTimeUnixNano?: unknown;\n  readonly endTimeUnixNano?: unknown;\n  readonly durationMs?: unknown;\n  readonly exit?: unknown;\n  readonly events?: unknown;\n}\n\ninterface TraceEventLike {\n  readonly name?: unknown;\n  readonly timeUnixNano?: unknown;\n  readonly attributes?: unknown;\n}\n\nexport interface TraceDiagnosticsOptions {\n  readonly traceFilePath: string;\n  readonly maxFiles: number;\n  readonly slowSpanThresholdMs?: number;\n  readonly readAt?: DateTime.Utc;\n}\n\nexport interface TraceDiagnosticsShape {\n  readonly read: (options: TraceDiagnosticsOptions) => Effect.Effect<ServerTraceDiagnosticsResult>;\n}\n\nexport class TraceDiagnostics extends Context.Service<TraceDiagnostics, TraceDiagnosticsShape>()(\n  \"salchi/diagnostics/TraceDiagnostics\",\n) {}\n\ninterface TraceDiagnosticsInput {\n  readonly traceFilePath: string;\n  readonly files: ReadonlyArray<{ readonly path: string; readonly text: string }>;\n  readonly scannedFilePaths?: ReadonlyArray<string>;\n  readonly slowSpanThresholdMs?: number;\n  readonly readAt: DateTime.Utc;\n  readonly error?: TraceDiagnosticsErrorSummary;\n  readonly partialFailure?: boolean;\n}\n\ninterface TraceDiagnosticsErrorSummary {\n  readonly kind: ServerTraceDiagnosticsErrorKind;\n  readonly message: string;\n}\n\nconst DEFAULT_SLOW_SPAN_THRESHOLD_MS = 1_000;\nconst TOP_LIMIT = 10;\nconst RECENT_LIMIT = 20;\nfunction toRotatedTracePaths(traceFilePath: string, maxFiles: number): ReadonlyArray<string> {\n  const backupCount = Math.max(0, Math.floor(maxFiles));\n  const backups = Array.from(\n    { length: backupCount },\n    (_, index) => `${traceFilePath}.${backupCount - index}`,\n  );\n  return [...backups, traceFilePath];\n}\n\nfunction isRecordObject(value: unknown): value is TraceRecordLike {\n  return typeof value === \"object\" && value !== null;\n}\n\nfunction toStringValue(value: unknown): string | null {\n  return typeof value === \"string\" && value.trim().length > 0 ? value : null;\n}\n\nfunction toNumberValue(value: unknown): number | null {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction unixNanoToDateTime(value: unknown): DateTime.Utc | null {\n  const text = toStringValue(value);\n  if (!text) return null;\n  try {\n    const millis = Number(BigInt(text) / 1_000_000n);\n    return Option.getOrNull(DateTime.make(millis));\n  } catch {\n    return null;\n  }\n}\n\nfunction readExitTag(exit: unknown): string | null {\n  if (!isRecordObject(exit) || !(\"_tag\" in exit)) return null;\n  return toStringValue(exit._tag);\n}\n\nfunction readExitCause(exit: unknown): string {\n  if (!isRecordObject(exit) || !(\"cause\" in exit)) return \"Failure\";\n  return toStringValue(exit.cause)?.trim() ?? \"Failure\";\n}\n\nfunction isTraceEvent(value: unknown): value is TraceEventLike {\n  return typeof value === \"object\" && value !== null;\n}\n\nfunction readEventAttributes(event: TraceEventLike): Readonly<Record<string, unknown>> {\n  return typeof event.attributes === \"object\" && event.attributes !== null\n    ? (event.attributes as Readonly<Record<string, unknown>>)\n    : {};\n}\n\nfunction makeEmptyDiagnostics(input: {\n  readonly traceFilePath: string;\n  readonly scannedFilePaths: ReadonlyArray<string>;\n  readonly readAt: DateTime.Utc;\n  readonly slowSpanThresholdMs: number;\n  readonly error?: TraceDiagnosticsErrorSummary;\n  readonly partialFailure?: boolean;\n}): ServerTraceDiagnosticsResult {\n  return {\n    traceFilePath: input.traceFilePath,\n    scannedFilePaths: [...input.scannedFilePaths],\n    readAt: input.readAt,\n    recordCount: 0,\n    parseErrorCount: 0,\n    firstSpanAt: Option.none(),\n    lastSpanAt: Option.none(),\n    failureCount: 0,\n    interruptionCount: 0,\n    slowSpanThresholdMs: input.slowSpanThresholdMs,\n    slowSpanCount: 0,\n    logLevelCounts: {},\n    topSpansByCount: [],\n    slowestSpans: [],\n    commonFailures: [],\n    latestFailures: [],\n    latestWarningAndErrorLogs: [],\n    partialFailure: input.partialFailure ? Option.some(true) : Option.none(),\n    error: Option.fromNullishOr(input.error),\n  };\n}\n\nfunction isNotFoundError(error: PlatformError.PlatformError): boolean {\n  return error.reason._tag === \"NotFound\";\n}\n\nfunction platformErrorMessage(error: PlatformError.PlatformError): string {\n  return error.message || String(error);\n}\n\nfunction insertBoundedSlowestSpan(\n  slowestSpans: ServerTraceDiagnosticsSpanOccurrence[],\n  span: ServerTraceDiagnosticsSpanOccurrence,\n): void {\n  if (\n    slowestSpans.length >= TOP_LIMIT &&\n    span.durationMs <= slowestSpans[slowestSpans.length - 1]!.durationMs\n  ) {\n    return;\n  }\n\n  slowestSpans.push(span);\n  slowestSpans.sort((left, right) => right.durationMs - left.durationMs);\n  if (slowestSpans.length > TOP_LIMIT) {\n    slowestSpans.length = TOP_LIMIT;\n  }\n}\n\nexport function aggregateTraceDiagnostics(\n  input: TraceDiagnosticsInput,\n): ServerTraceDiagnosticsResult {\n  const readAt = input.readAt;\n  const slowSpanThresholdMs = input.slowSpanThresholdMs ?? DEFAULT_SLOW_SPAN_THRESHOLD_MS;\n  const scannedFilePaths = input.scannedFilePaths ?? input.files.map((file) => file.path);\n  if (input.files.length === 0) {\n    return makeEmptyDiagnostics({\n      traceFilePath: input.traceFilePath,\n      scannedFilePaths,\n      readAt,\n      slowSpanThresholdMs,\n      error: input.error ?? {\n        kind: \"trace-file-not-found\",\n        message: \"No local trace files were found.\",\n      },\n      ...(input.partialFailure ? { partialFailure: true } : {}),\n    });\n  }\n\n  let parseErrorCount = 0;\n  let recordCount = 0;\n  let failureCount = 0;\n  let interruptionCount = 0;\n  let slowSpanCount = 0;\n  let firstSpanAt: DateTime.Utc | null = null;\n  let lastSpanAt: DateTime.Utc | null = null;\n\n  const spansByName = new Map<\n    string,\n    { count: number; failureCount: number; totalDurationMs: number; maxDurationMs: number }\n  >();\n  const failuresByKey = new Map<string, ServerTraceDiagnosticsFailureSummary>();\n  const latestFailures: ServerTraceDiagnosticsRecentFailure[] = [];\n  const slowestSpans: ServerTraceDiagnosticsSpanOccurrence[] = [];\n  const latestWarningAndErrorLogs: ServerTraceDiagnosticsLogEvent[] = [];\n  const logLevelCounts: Record<string, number> = {};\n\n  for (const file of input.files) {\n    const lines = file.text.split(/\\r?\\n/);\n    for (const line of lines) {\n      if (line.trim().length === 0) continue;\n\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(line);\n      } catch {\n        parseErrorCount += 1;\n        continue;\n      }\n\n      if (!isRecordObject(parsed)) {\n        parseErrorCount += 1;\n        continue;\n      }\n\n      const name = toStringValue(parsed.name);\n      const traceId = toStringValue(parsed.traceId);\n      const spanId = toStringValue(parsed.spanId);\n      const durationMs = toNumberValue(parsed.durationMs);\n      const endedAt = unixNanoToDateTime(parsed.endTimeUnixNano);\n      const startedAt = unixNanoToDateTime(parsed.startTimeUnixNano);\n\n      if (!name || !traceId || !spanId || durationMs === null || !endedAt) {\n        parseErrorCount += 1;\n        continue;\n      }\n\n      recordCount += 1;\n      firstSpanAt =\n        startedAt && (firstSpanAt === null || DateTime.isLessThan(startedAt, firstSpanAt))\n          ? startedAt\n          : firstSpanAt;\n      lastSpanAt =\n        lastSpanAt === null || DateTime.isGreaterThan(endedAt, lastSpanAt) ? endedAt : lastSpanAt;\n\n      const exitTag = readExitTag(parsed.exit);\n      const isFailure = exitTag === \"Failure\";\n      const isInterrupted = exitTag === \"Interrupted\";\n      if (isFailure) failureCount += 1;\n      if (isInterrupted) interruptionCount += 1;\n\n      const spanSummary = spansByName.get(name) ?? {\n        count: 0,\n        failureCount: 0,\n        totalDurationMs: 0,\n        maxDurationMs: 0,\n      };\n      spanSummary.count += 1;\n      spanSummary.totalDurationMs += durationMs;\n      spanSummary.maxDurationMs = Math.max(spanSummary.maxDurationMs, durationMs);\n      if (isFailure) spanSummary.failureCount += 1;\n      spansByName.set(name, spanSummary);\n\n      const spanItem = { name, durationMs, endedAt, traceId, spanId };\n      if (durationMs >= slowSpanThresholdMs) {\n        slowSpanCount += 1;\n      }\n      insertBoundedSlowestSpan(slowestSpans, spanItem);\n\n      if (isFailure) {\n        const cause = readExitCause(parsed.exit);\n        latestFailures.push({ ...spanItem, cause });\n\n        const failureKey = `${name}\\0${cause}`;\n        const existing = failuresByKey.get(failureKey);\n        const isLatestFailure = !existing || DateTime.isGreaterThan(endedAt, existing.lastSeenAt);\n        failuresByKey.set(failureKey, {\n          name,\n          cause,\n          count: (existing?.count ?? 0) + 1,\n          lastSeenAt: isLatestFailure ? endedAt : existing!.lastSeenAt,\n          traceId: isLatestFailure ? traceId : existing!.traceId,\n          spanId: isLatestFailure ? spanId : existing!.spanId,\n        });\n      }\n\n      if (Array.isArray(parsed.events)) {\n        for (const rawEvent of parsed.events) {\n          if (!isTraceEvent(rawEvent)) continue;\n          const attributes = readEventAttributes(rawEvent);\n          const level = toStringValue(attributes[\"effect.logLevel\"]);\n          if (!level) continue;\n\n          logLevelCounts[level] = (logLevelCounts[level] ?? 0) + 1;\n          const normalizedLevel = level.toLowerCase();\n          if (\n            normalizedLevel !== \"warning\" &&\n            normalizedLevel !== \"warn\" &&\n            normalizedLevel !== \"error\" &&\n            normalizedLevel !== \"fatal\"\n          ) {\n            continue;\n          }\n\n          const seenAt = unixNanoToDateTime(rawEvent.timeUnixNano) ?? endedAt;\n          const message = toStringValue(rawEvent.name)?.trim() ?? \"Log event\";\n          latestWarningAndErrorLogs.push({\n            spanName: name,\n            level,\n            message,\n            seenAt,\n            traceId,\n            spanId,\n          });\n        }\n      }\n    }\n  }\n\n  const topSpansByCount: ServerTraceDiagnosticsSpanSummary[] = [...spansByName.entries()]\n    .map(([name, span]) => ({\n      name,\n      count: span.count,\n      failureCount: span.failureCount,\n      totalDurationMs: span.totalDurationMs,\n      averageDurationMs: span.count > 0 ? span.totalDurationMs / span.count : 0,\n      maxDurationMs: span.maxDurationMs,\n    }))\n    .toSorted((left, right) => right.count - left.count || right.maxDurationMs - left.maxDurationMs)\n    .slice(0, TOP_LIMIT);\n\n  return {\n    traceFilePath: input.traceFilePath,\n    scannedFilePaths,\n    readAt,\n    recordCount,\n    parseErrorCount,\n    firstSpanAt: Option.fromNullishOr(firstSpanAt),\n    lastSpanAt: Option.fromNullishOr(lastSpanAt),\n    failureCount,\n    interruptionCount,\n    slowSpanThresholdMs,\n    slowSpanCount,\n    logLevelCounts,\n    topSpansByCount,\n    slowestSpans,\n    commonFailures: [...failuresByKey.values()]\n      .toSorted(\n        (left, right) =>\n          right.count - left.count ||\n          DateTime.toEpochMillis(right.lastSeenAt) - DateTime.toEpochMillis(left.lastSeenAt),\n      )\n      .slice(0, TOP_LIMIT),\n    latestFailures: latestFailures\n      .toSorted(\n        (left, right) =>\n          DateTime.toEpochMillis(right.endedAt) - DateTime.toEpochMillis(left.endedAt),\n      )\n      .slice(0, RECENT_LIMIT),\n    latestWarningAndErrorLogs: latestWarningAndErrorLogs\n      .toSorted(\n        (left, right) => DateTime.toEpochMillis(right.seenAt) - DateTime.toEpochMillis(left.seenAt),\n      )\n      .slice(0, RECENT_LIMIT),\n    partialFailure: input.partialFailure ? Option.some(true) : Option.none(),\n    error: Option.fromNullishOr(input.error),\n  };\n}\n\ntype TraceFileReadResult =\n  | { readonly _tag: \"Loaded\"; readonly path: string; readonly text: string }\n  | { readonly _tag: \"Missing\"; readonly path: string }\n  | { readonly _tag: \"Failed\"; readonly path: string; readonly message: string };\n\nfunction readTraceFile(\n  fileSystem: FileSystem.FileSystem,\n  path: string,\n): Effect.Effect<TraceFileReadResult> {\n  return fileSystem.readFileString(path).pipe(\n    Effect.map((text) => ({ _tag: \"Loaded\" as const, path, text })),\n    Effect.catch((error: PlatformError.PlatformError) =>\n      Effect.succeed(\n        isNotFoundError(error)\n          ? { _tag: \"Missing\" as const, path }\n          : { _tag: \"Failed\" as const, path, message: platformErrorMessage(error) },\n      ),\n    ),\n  );\n}\n\nexport const make = Effect.fn(\"makeTraceDiagnostics\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n\n  const read: TraceDiagnosticsShape[\"read\"] = Effect.fn(\"TraceDiagnostics.read\")(\n    function* (options) {\n      const readAt = options.readAt ?? (yield* DateTime.now);\n      const slowSpanThresholdMs = options.slowSpanThresholdMs ?? DEFAULT_SLOW_SPAN_THRESHOLD_MS;\n      const paths = toRotatedTracePaths(options.traceFilePath, options.maxFiles);\n      const results = yield* Effect.all(\n        paths.map((path) => readTraceFile(fileSystem, path)),\n        {\n          concurrency: 1,\n        },\n      );\n      const files = results.flatMap((result) =>\n        result._tag === \"Loaded\" ? [{ path: result.path, text: result.text }] : [],\n      );\n      const readFailure = results.find((result) => result._tag === \"Failed\");\n      const readFailureError = readFailure\n        ? ({\n            kind: \"trace-file-read-failed\",\n            message: readFailure.message.trim() || `Failed to read ${readFailure.path}.`,\n          } satisfies TraceDiagnosticsErrorSummary)\n        : undefined;\n\n      if (files.length === 0) {\n        return makeEmptyDiagnostics({\n          traceFilePath: options.traceFilePath,\n          scannedFilePaths: paths,\n          readAt,\n          slowSpanThresholdMs,\n          error:\n            readFailureError ??\n            ({\n              kind: \"trace-file-not-found\",\n              message: \"No local trace files were found.\",\n            } satisfies TraceDiagnosticsErrorSummary),\n        });\n      }\n\n      return aggregateTraceDiagnostics({\n        traceFilePath: options.traceFilePath,\n        files,\n        scannedFilePaths: paths,\n        readAt,\n        slowSpanThresholdMs,\n        ...(readFailureError ? { partialFailure: true, error: readFailureError } : {}),\n      });\n    },\n  );\n\n  return TraceDiagnostics.of({ read });\n});\n\nexport const layer = Layer.effect(TraceDiagnostics, make());\n\nexport function readTraceDiagnostics(\n  options: TraceDiagnosticsOptions,\n): Effect.Effect<ServerTraceDiagnosticsResult, never, TraceDiagnostics> {\n  return Effect.gen(function* () {\n    const diagnostics = yield* TraceDiagnostics;\n    return yield* diagnostics.read(options);\n  });\n}\n","import {\n  type SourceControlDiscoveryResult,\n  type VcsDiscoveryItem,\n  type VcsDriverKind,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\n\nimport { ServerConfig } from \"../config.ts\";\nimport * as VcsProcess from \"../vcs/VcsProcess.ts\";\nimport * as SourceControlProviderDiscovery from \"./SourceControlProviderDiscovery.ts\";\nimport * as SourceControlProviderRegistry from \"./SourceControlProviderRegistry.ts\";\n\ninterface DiscoveryProbe {\n  readonly label: string;\n  readonly executable?: string;\n  readonly versionArgs?: ReadonlyArray<string>;\n  readonly implemented: boolean;\n  readonly installHint: string;\n}\n\ntype VcsProbe = DiscoveryProbe & {\n  readonly kind: VcsDriverKind;\n  readonly executable: string;\n  readonly versionArgs: ReadonlyArray<string>;\n};\n\ninterface DiscoveryProbeResult<Kind extends string> {\n  readonly kind: Kind;\n  readonly label: string;\n  readonly executable?: string;\n  readonly implemented: boolean;\n  readonly status: \"available\" | \"missing\";\n  readonly version: Option.Option<string>;\n  readonly installHint: string;\n  readonly detail: Option.Option<string>;\n}\n\nconst VCS_PROBES: ReadonlyArray<VcsProbe> = [\n  {\n    kind: \"git\",\n    label: \"Git\",\n    executable: \"git\",\n    versionArgs: [\"--version\"],\n    implemented: true,\n    installHint: \"Install Git from https://git-scm.com/downloads or with your package manager.\",\n  },\n  {\n    kind: \"jj\",\n    label: \"Jujutsu\",\n    executable: \"jj\",\n    versionArgs: [\"--version\"],\n    implemented: false,\n    installHint: \"Install Jujutsu with `brew install jj` or from https://github.com/jj-vcs/jj.\",\n  },\n];\n\nexport interface SourceControlDiscoveryShape {\n  readonly discover: Effect.Effect<SourceControlDiscoveryResult>;\n}\n\nexport class SourceControlDiscovery extends Context.Service<\n  SourceControlDiscovery,\n  SourceControlDiscoveryShape\n>()(\"salchi/sourceControl/SourceControlDiscovery\") {}\n\nexport const layer = Layer.effect(\n  SourceControlDiscovery,\n  Effect.gen(function* () {\n    const config = yield* ServerConfig;\n    const process = yield* VcsProcess.VcsProcess;\n    const sourceControlProviders =\n      yield* SourceControlProviderRegistry.SourceControlProviderRegistry;\n\n    const probe = <Kind extends VcsDriverKind>(\n      input: DiscoveryProbe & { readonly kind: Kind },\n    ): Effect.Effect<DiscoveryProbeResult<Kind>> => {\n      const executable = input.executable;\n      const versionArgs = input.versionArgs;\n\n      if (!executable || !versionArgs) {\n        return Effect.succeed({\n          kind: input.kind,\n          label: input.label,\n          implemented: input.implemented,\n          status: \"missing\" as const,\n          version: Option.none<string>(),\n          installHint: input.installHint,\n          detail: Option.some(input.installHint),\n        } satisfies DiscoveryProbeResult<Kind>);\n      }\n\n      return process\n        .run({\n          operation: \"source-control.discovery.probe\",\n          command: executable,\n          args: versionArgs,\n          cwd: config.cwd,\n          timeoutMs: 5_000,\n          maxOutputBytes: 8_000,\n          appendTruncationMarker: true,\n        })\n        .pipe(\n          Effect.map(\n            (result) =>\n              ({\n                kind: input.kind,\n                label: input.label,\n                executable,\n                implemented: input.implemented,\n                status: \"available\" as const,\n                version: Option.orElse(\n                  SourceControlProviderDiscovery.firstNonEmptyLine(result.stdout),\n                  () => SourceControlProviderDiscovery.firstNonEmptyLine(result.stderr),\n                ),\n                installHint: input.installHint,\n                detail: Option.none<string>(),\n              }) satisfies DiscoveryProbeResult<Kind>,\n          ),\n          Effect.catch((cause) =>\n            Effect.succeed({\n              kind: input.kind,\n              label: input.label,\n              executable,\n              implemented: input.implemented,\n              status: \"missing\" as const,\n              version: Option.none<string>(),\n              installHint: input.installHint,\n              detail: SourceControlProviderDiscovery.detailFromCause(cause),\n            } satisfies DiscoveryProbeResult<Kind>),\n          ),\n        );\n    };\n\n    return SourceControlDiscovery.of({\n      discover: Effect.all({\n        versionControlSystems: Effect.all(\n          VCS_PROBES.map((entry) => probe(entry)) as ReadonlyArray<Effect.Effect<VcsDiscoveryItem>>,\n          { concurrency: \"unbounded\" },\n        ),\n        sourceControlProviders: sourceControlProviders.discover,\n      }),\n    });\n  }),\n);\n","import * as NodeOS from \"node:os\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  SourceControlRepositoryError,\n  type SourceControlCloneRepositoryInput,\n  type SourceControlCloneRepositoryResult,\n  type SourceControlCloneProtocol,\n  type SourceControlProviderKind,\n  type SourceControlPublishRepositoryInput,\n  type SourceControlPublishRepositoryResult,\n  type SourceControlRepositoryCloneUrls,\n  type SourceControlRepositoryInfo,\n  type SourceControlRepositoryLookupInput,\n} from \"@salchi/contracts\";\n\nimport { ServerConfig } from \"../config.ts\";\nimport * as GitVcsDriver from \"../vcs/GitVcsDriver.ts\";\nimport * as SourceControlProviderRegistry from \"./SourceControlProviderRegistry.ts\";\nconst isSourceControlRepositoryError = Schema.is(SourceControlRepositoryError);\n\nexport interface SourceControlRepositoryServiceShape {\n  readonly lookupRepository: (\n    input: SourceControlRepositoryLookupInput,\n  ) => Effect.Effect<SourceControlRepositoryInfo, SourceControlRepositoryError>;\n  readonly cloneRepository: (\n    input: SourceControlCloneRepositoryInput,\n  ) => Effect.Effect<SourceControlCloneRepositoryResult, SourceControlRepositoryError>;\n  readonly publishRepository: (\n    input: SourceControlPublishRepositoryInput,\n  ) => Effect.Effect<SourceControlPublishRepositoryResult, SourceControlRepositoryError>;\n}\n\nexport class SourceControlRepositoryService extends Context.Service<\n  SourceControlRepositoryService,\n  SourceControlRepositoryServiceShape\n>()(\"salchi/sourceControl/SourceControlRepositoryService\") {}\n\nfunction detailFromUnknown(cause: unknown): string {\n  if (typeof cause === \"object\" && cause !== null) {\n    if (\"detail\" in cause && typeof cause.detail === \"string\" && cause.detail.length > 0) {\n      return cause.detail;\n    }\n    if (\"message\" in cause && typeof cause.message === \"string\" && cause.message.length > 0) {\n      return cause.message;\n    }\n  }\n\n  return \"An unexpected source control error occurred.\";\n}\n\nfunction repositoryError(input: {\n  readonly operation: string;\n  readonly provider: SourceControlProviderKind;\n  readonly detail: string;\n  readonly cause?: unknown;\n}): SourceControlRepositoryError {\n  return new SourceControlRepositoryError({\n    provider: input.provider,\n    operation: input.operation,\n    detail: input.detail,\n    ...(input.cause === undefined ? {} : { cause: input.cause }),\n  });\n}\n\nfunction mapRepositoryError(operation: string, provider: SourceControlProviderKind) {\n  return Effect.mapError((cause: unknown) =>\n    isSourceControlRepositoryError(cause)\n      ? cause\n      : repositoryError({\n          operation,\n          provider,\n          detail: detailFromUnknown(cause),\n          cause,\n        }),\n  );\n}\n\nfunction toRepositoryInfo(\n  provider: SourceControlProviderKind,\n  urls: SourceControlRepositoryCloneUrls,\n): SourceControlRepositoryInfo {\n  return {\n    provider,\n    nameWithOwner: urls.nameWithOwner,\n    url: urls.url,\n    sshUrl: urls.sshUrl,\n  };\n}\n\nfunction selectRemoteUrl(\n  urls: SourceControlRepositoryCloneUrls,\n  protocol: SourceControlCloneProtocol | undefined,\n): string {\n  switch (protocol ?? \"auto\") {\n    case \"https\":\n      return urls.url;\n    case \"ssh\":\n    case \"auto\":\n      return urls.sshUrl;\n  }\n}\n\nfunction expandHomePath(input: string, path: Path.Path): string {\n  if (input === \"~\") {\n    return NodeOS.homedir();\n  }\n  if (input.startsWith(\"~/\") || input.startsWith(\"~\\\\\")) {\n    return path.join(NodeOS.homedir(), input.slice(2));\n  }\n  return input;\n}\n\nexport const make = Effect.fn(\"makeSourceControlRepositoryService\")(function* () {\n  const config = yield* ServerConfig;\n  const fileSystem = yield* FileSystem.FileSystem;\n  const git = yield* GitVcsDriver.GitVcsDriver;\n  const path = yield* Path.Path;\n  const providers = yield* SourceControlProviderRegistry.SourceControlProviderRegistry;\n\n  const ensureConcreteProvider = (input: {\n    readonly operation: string;\n    readonly provider: SourceControlProviderKind;\n  }) => {\n    if (input.provider !== \"unknown\") {\n      return Effect.succeed(input.provider);\n    }\n\n    return Effect.fail(\n      repositoryError({\n        operation: input.operation,\n        provider: input.provider,\n        detail: \"Choose a source control provider before continuing.\",\n      }),\n    );\n  };\n\n  const lookupRepository = Effect.fn(\"SourceControlRepositoryService.lookupRepository\")(function* (\n    input: SourceControlRepositoryLookupInput,\n  ) {\n    const providerKind = yield* ensureConcreteProvider({\n      operation: \"lookupRepository\",\n      provider: input.provider,\n    });\n    const provider = yield* providers.get(providerKind);\n    const urls = yield* provider.getRepositoryCloneUrls({\n      cwd: input.cwd ?? config.cwd,\n      repository: input.repository.trim(),\n    });\n    return toRepositoryInfo(providerKind, urls);\n  });\n\n  const normalizeDestinationPath = Effect.fn(\"SourceControlRepositoryService.normalizeDestination\")(\n    function* (destinationPath: string) {\n      const trimmed = destinationPath.trim();\n      if (trimmed.length === 0) {\n        return yield* repositoryError({\n          operation: \"cloneRepository\",\n          provider: \"unknown\",\n          detail: \"Choose a destination path before cloning.\",\n        });\n      }\n\n      return path.resolve(expandHomePath(trimmed, path));\n    },\n  );\n\n  const prepareDestination = Effect.fn(\"SourceControlRepositoryService.prepareDestination\")(\n    function* (destinationPath: string) {\n      const normalizedDestination = yield* normalizeDestinationPath(destinationPath);\n      if (yield* fileSystem.exists(normalizedDestination).pipe(Effect.orElseSucceed(() => false))) {\n        const entries = yield* fileSystem\n          .readDirectory(normalizedDestination, { recursive: false })\n          .pipe(\n            Effect.mapError((cause) =>\n              repositoryError({\n                operation: \"cloneRepository\",\n                provider: \"unknown\",\n                detail: \"Destination path already exists and is not a directory.\",\n                cause,\n              }),\n            ),\n          );\n        if (entries.length > 0) {\n          return yield* repositoryError({\n            operation: \"cloneRepository\",\n            provider: \"unknown\",\n            detail: \"Destination path already exists and is not empty.\",\n          });\n        }\n      } else {\n        yield* fileSystem.makeDirectory(path.dirname(normalizedDestination), { recursive: true });\n      }\n\n      return {\n        destinationPath: normalizedDestination,\n        parentPath: path.dirname(normalizedDestination),\n        directoryName: path.basename(normalizedDestination),\n      };\n    },\n  );\n\n  const cloneRepository = Effect.fn(\"SourceControlRepositoryService.cloneRepository\")(function* (\n    input: SourceControlCloneRepositoryInput,\n  ) {\n    const preparedDestination = yield* prepareDestination(input.destinationPath);\n    let repository: SourceControlRepositoryInfo | null = null;\n    let remoteUrl = input.remoteUrl?.trim() ?? null;\n    let provider: SourceControlProviderKind = input.provider ?? \"unknown\";\n\n    if (input.provider && input.repository) {\n      repository = yield* lookupRepository({\n        provider: input.provider,\n        repository: input.repository,\n        cwd: preparedDestination.parentPath,\n      });\n      remoteUrl = selectRemoteUrl(repository, input.protocol);\n      provider = input.provider;\n    }\n\n    if (!remoteUrl) {\n      return yield* repositoryError({\n        operation: \"cloneRepository\",\n        provider,\n        detail: \"Enter a repository path or clone URL before cloning.\",\n      });\n    }\n\n    yield* git.execute({\n      operation: \"SourceControlRepositoryService.cloneRepository\",\n      cwd: preparedDestination.parentPath,\n      args: [\"clone\", remoteUrl, preparedDestination.directoryName],\n      timeoutMs: 120_000,\n      maxOutputBytes: 256 * 1024,\n    });\n\n    return {\n      cwd: preparedDestination.destinationPath,\n      remoteUrl,\n      repository,\n    };\n  });\n\n  const publishRepository = Effect.fn(\"SourceControlRepositoryService.publishRepository\")(\n    function* (input: SourceControlPublishRepositoryInput) {\n      const providerKind = yield* ensureConcreteProvider({\n        operation: \"publishRepository\",\n        provider: input.provider,\n      });\n      const provider = yield* providers.get(providerKind);\n      const urls = yield* provider.createRepository({\n        cwd: input.cwd,\n        repository: input.repository.trim(),\n        visibility: input.visibility,\n      });\n      const remoteUrl = selectRemoteUrl(urls, input.protocol);\n      const remoteName = yield* git.ensureRemote({\n        cwd: input.cwd,\n        preferredName: input.remoteName?.trim() || \"origin\",\n        url: remoteUrl,\n      });\n\n      // An empty local repo (no commits) would make `git push HEAD:...` fail\n      // with an opaque \"src refspec HEAD does not match any\". Treat this as a\n      // partial success: the remote was created and wired up, but there is\n      // nothing to push yet.\n      const hasCommits = yield* git\n        .execute({\n          operation: \"SourceControlRepositoryService.publishRepository.headCheck\",\n          cwd: input.cwd,\n          args: [\"rev-parse\", \"--verify\", \"HEAD\"],\n        })\n        .pipe(\n          Effect.map(() => true),\n          Effect.catch(() => Effect.succeed(false)),\n        );\n      if (!hasCommits) {\n        const details = yield* git\n          .statusDetails(input.cwd)\n          .pipe(Effect.catch(() => Effect.succeed(null)));\n        return {\n          repository: toRepositoryInfo(providerKind, urls),\n          remoteName,\n          remoteUrl,\n          branch: details?.branch ?? \"main\",\n          status: \"remote_added\" as const,\n        };\n      }\n\n      const pushResult = yield* git.pushCurrentBranch(input.cwd, null, { remoteName });\n\n      return {\n        repository: toRepositoryInfo(providerKind, urls),\n        remoteName,\n        remoteUrl,\n        branch: pushResult.branch,\n        ...(pushResult.upstreamBranch ? { upstreamBranch: pushResult.upstreamBranch } : {}),\n        status: \"pushed\" as const,\n      };\n    },\n  );\n\n  return SourceControlRepositoryService.of({\n    lookupRepository: (input) =>\n      lookupRepository(input).pipe(mapRepositoryError(\"lookupRepository\", input.provider)),\n    cloneRepository: (input) =>\n      cloneRepository(input).pipe(\n        mapRepositoryError(\"cloneRepository\", input.provider ?? \"unknown\"),\n      ),\n    publishRepository: (input) =>\n      publishRepository(input).pipe(mapRepositoryError(\"publishRepository\", input.provider)),\n  });\n});\n\nexport const layer = Layer.effect(SourceControlRepositoryService, make());\n","import type {\n  AuthSessionId,\n  ServerPushConfig,\n  ServerPushSendResult,\n  ServerPushSubscriptionStatus,\n  ServerRegisterPushSubscriptionInput,\n  ServerSendTestPushNotificationInput,\n  ServerUnregisterPushSubscriptionInput,\n  ServerPushNotificationPayload,\n} from \"@salchi/contracts\";\nimport { ServerPushNotificationError } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport type WebPushSendInput = {\n  readonly payload: ServerPushNotificationPayload;\n};\n\nexport interface WebPushServiceShape {\n  readonly getConfig: Effect.Effect<ServerPushConfig, ServerPushNotificationError>;\n  readonly registerSubscription: (\n    sessionId: AuthSessionId,\n    input: ServerRegisterPushSubscriptionInput,\n  ) => Effect.Effect<ServerPushSubscriptionStatus, ServerPushNotificationError>;\n  readonly unregisterSubscription: (\n    sessionId: AuthSessionId,\n    input: ServerUnregisterPushSubscriptionInput,\n  ) => Effect.Effect<ServerPushSubscriptionStatus, ServerPushNotificationError>;\n  readonly sendTestNotification: (\n    sessionId: AuthSessionId,\n    input: ServerSendTestPushNotificationInput,\n  ) => Effect.Effect<ServerPushSendResult, ServerPushNotificationError>;\n  readonly sendToActiveSubscriptions: (\n    input: WebPushSendInput,\n  ) => Effect.Effect<ServerPushSendResult, ServerPushNotificationError>;\n}\n\nexport class WebPushService extends Context.Service<WebPushService, WebPushServiceShape>()(\n  \"salchi/push/Services/WebPushService\",\n) {}\n","import * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport {\n  DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL,\n  type AuthAccessStreamEvent,\n  AuthSessionId,\n  CommandId,\n  EventId,\n  type OrchestrationCommand,\n  type GitActionProgressEvent,\n  type GitManagerServiceError,\n  OrchestrationDispatchCommandError,\n  type OrchestrationEvent,\n  type OrchestrationShellStreamEvent,\n  OrchestrationGetFullThreadDiffError,\n  OrchestrationGetSnapshotError,\n  OrchestrationGetTurnDiffError,\n  ORCHESTRATION_WS_METHODS,\n  ProjectListDirectoryEntriesError,\n  ProjectReadFileError,\n  ProjectSearchEntriesError,\n  ProjectWriteFileError,\n  ProjectDeleteEntryError,\n  OrchestrationReplayEventsError,\n  FilesystemBrowseError,\n  ThreadId,\n  type TerminalEvent,\n  WS_METHODS,\n  WsRpcGroup,\n} from \"@salchi/contracts\";\nimport {\n  computeOrchestrationThreadDetailFingerprint,\n  orchestrationThreadDetailFingerprintsEqual,\n} from \"@salchi/shared/orchestrationThreadDetailFingerprint\";\nimport { isOrchestrationThreadDetailEvent } from \"@salchi/shared/orchestrationThreadDetailEvents\";\nimport { clamp } from \"effect/Number\";\nimport { HttpClient, HttpRouter, HttpServerRequest } from \"effect/unstable/http\";\nimport { RpcSerialization, RpcServer } from \"effect/unstable/rpc\";\n\nimport { CheckpointDiffQuery } from \"./checkpointing/Services/CheckpointDiffQuery.ts\";\nimport { ServerConfig } from \"./config.ts\";\nimport { probeDevServerUrl } from \"./devServerReachability.ts\";\nimport * as OpenVsxProvider from \"./theme/openVsxProvider.ts\";\nimport { Keybindings } from \"./keybindings.ts\";\nimport * as ExternalLauncher from \"./process/externalLauncher.ts\";\nimport { normalizeDispatchCommand } from \"./orchestration/Normalizer.ts\";\nimport {\n  projectActivityEvent,\n  projectThreadDetailSnapshot,\n} from \"./orchestration/ActivityPayloadProjection.ts\";\nimport { OrchestrationEngineService } from \"./orchestration/Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"./orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport {\n  observeRpcEffect,\n  observeRpcStream,\n  observeRpcStreamEffect,\n} from \"./observability/RpcInstrumentation.ts\";\nimport { ignoreCauseUnlessInterrupted } from \"./effect/logCauseUnlessInterrupted.ts\";\nimport { ProviderRegistry } from \"./provider/Services/ProviderRegistry.ts\";\nimport { ProviderService } from \"./provider/Services/ProviderService.ts\";\nimport * as ProviderMaintenanceRunner from \"./provider/providerMaintenanceRunner.ts\";\nimport { ServerLifecycleEvents } from \"./serverLifecycleEvents.ts\";\nimport { ServerRuntimeStartup } from \"./serverRuntimeStartup.ts\";\nimport { redactServerSettingsForClient, ServerSettingsService } from \"./serverSettings.ts\";\nimport { TerminalManager } from \"./terminal/Services/Manager.ts\";\nimport { WorkspaceEntries } from \"./workspace/Services/WorkspaceEntries.ts\";\nimport { WorkspaceFileSystem } from \"./workspace/Services/WorkspaceFileSystem.ts\";\nimport { WorkspacePathOutsideRootError } from \"./workspace/Services/WorkspacePaths.ts\";\nimport { VcsStatusBroadcaster } from \"./vcs/VcsStatusBroadcaster.ts\";\nimport { VcsProvisioningService } from \"./vcs/VcsProvisioningService.ts\";\nimport { GitWorkflowService } from \"./git/GitWorkflowService.ts\";\nimport { ProjectSetupScriptRunner } from \"./project/Services/ProjectSetupScriptRunner.ts\";\nimport { RepositoryIdentityResolver } from \"./project/Services/RepositoryIdentityResolver.ts\";\nimport { ServerEnvironment } from \"./environment/Services/ServerEnvironment.ts\";\nimport { ServerAuth } from \"./auth/Services/ServerAuth.ts\";\nimport * as ProcessDiagnostics from \"./diagnostics/ProcessDiagnostics.ts\";\nimport * as ProcessResourceMonitor from \"./diagnostics/ProcessResourceMonitor.ts\";\nimport * as TraceDiagnostics from \"./diagnostics/TraceDiagnostics.ts\";\nimport * as SourceControlDiscoveryLayer from \"./sourceControl/SourceControlDiscovery.ts\";\nimport { SourceControlRepositoryService } from \"./sourceControl/SourceControlRepositoryService.ts\";\nimport * as AzureDevOpsCli from \"./sourceControl/AzureDevOpsCli.ts\";\nimport * as BitbucketApi from \"./sourceControl/BitbucketApi.ts\";\nimport * as GitHubCli from \"./sourceControl/GitHubCli.ts\";\nimport * as GitLabCli from \"./sourceControl/GitLabCli.ts\";\nimport * as SourceControlProviderRegistry from \"./sourceControl/SourceControlProviderRegistry.ts\";\nimport * as GitVcsDriver from \"./vcs/GitVcsDriver.ts\";\nimport * as VcsDriverRegistry from \"./vcs/VcsDriverRegistry.ts\";\nimport * as VcsProjectConfig from \"./vcs/VcsProjectConfig.ts\";\nimport * as VcsProcess from \"./vcs/VcsProcess.ts\";\nimport {\n  BootstrapCredentialService,\n  type BootstrapCredentialChange,\n} from \"./auth/Services/BootstrapCredentialService.ts\";\nimport {\n  SessionCredentialService,\n  type SessionCredentialChange,\n} from \"./auth/Services/SessionCredentialService.ts\";\nimport { respondToAuthError } from \"./auth/http.ts\";\nimport { WebPushService } from \"./push/Services/WebPushService.ts\";\nconst isOrchestrationDispatchCommandError = Schema.is(OrchestrationDispatchCommandError);\nconst isOrchestrationGetSnapshotError = Schema.is(OrchestrationGetSnapshotError);\nconst isWorkspacePathOutsideRootError = Schema.is(WorkspacePathOutsideRootError);\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\nconst THREAD_DETAIL_RECONCILE_EVENT_LIMIT = 500;\n\ntype OrderedCatchupInput =\n  | {\n      readonly kind: \"caught-up\";\n    }\n  | {\n      readonly kind: \"event\";\n      readonly event: OrchestrationEvent;\n    };\n\ninterface OrderedCatchupState {\n  readonly bufferedEvents: ReadonlyArray<OrchestrationEvent>;\n  readonly caughtUp: boolean;\n  readonly emittedSequence: number;\n}\n\nfunction selectOrderedUniqueCatchupEvents(\n  events: ReadonlyArray<OrchestrationEvent>,\n  emittedSequence: number,\n): ReadonlyArray<OrchestrationEvent> {\n  const seenSequences = new Set<number>();\n  const orderedEvents = events\n    .filter((event) => event.sequence > emittedSequence)\n    .toSorted((left, right) => left.sequence - right.sequence);\n  const uniqueEvents: OrchestrationEvent[] = [];\n\n  for (const event of orderedEvents) {\n    if (seenSequences.has(event.sequence)) {\n      continue;\n    }\n    seenSequences.add(event.sequence);\n    uniqueEvents.push(event);\n  }\n\n  return uniqueEvents;\n}\n\nfunction streamOrderedCatchupEvents<E, R1, R2>(input: {\n  readonly fromSequenceExclusive: number;\n  readonly replayStream: Stream.Stream<OrchestrationEvent, E, R1>;\n  readonly liveStream: Stream.Stream<OrchestrationEvent, E, R2>;\n}): Stream.Stream<OrchestrationEvent, E, R1 | R2> {\n  const replayItems = Stream.concat(\n    input.replayStream.pipe(\n      Stream.map((event): OrderedCatchupInput => ({\n        kind: \"event\",\n        event,\n      })),\n    ),\n    Stream.succeed({\n      kind: \"caught-up\",\n    } satisfies OrderedCatchupInput),\n  );\n  const liveItems = input.liveStream.pipe(\n    Stream.filter((event) => event.sequence > input.fromSequenceExclusive),\n    Stream.map((event): OrderedCatchupInput => ({\n      kind: \"event\",\n      event,\n    })),\n  );\n\n  return Stream.merge(replayItems, liveItems).pipe(\n    Stream.mapAccum(\n      (): OrderedCatchupState => ({\n        bufferedEvents: [],\n        caughtUp: false,\n        emittedSequence: input.fromSequenceExclusive,\n      }),\n      (state, item) => {\n        if (!state.caughtUp) {\n          if (item.kind === \"caught-up\") {\n            const orderedEvents = selectOrderedUniqueCatchupEvents(\n              state.bufferedEvents,\n              state.emittedSequence,\n            );\n            const nextState: OrderedCatchupState = {\n              bufferedEvents: [],\n              caughtUp: true,\n              emittedSequence: orderedEvents.at(-1)?.sequence ?? state.emittedSequence,\n            };\n            return [nextState, orderedEvents] as const;\n          }\n\n          const nextState: OrderedCatchupState = {\n            ...state,\n            bufferedEvents: [...state.bufferedEvents, item.event],\n          };\n          return [nextState, [] as ReadonlyArray<OrchestrationEvent>] as const;\n        }\n\n        if (item.kind === \"caught-up\" || item.event.sequence <= state.emittedSequence) {\n          return [state, [] as ReadonlyArray<OrchestrationEvent>] as const;\n        }\n\n        const nextState: OrderedCatchupState = {\n          ...state,\n          emittedSequence: item.event.sequence,\n        };\n        return [nextState, [item.event]] as const;\n      },\n    ),\n  );\n}\n\nconst PROVIDER_STATUS_DEBOUNCE_MS = 200;\n\nfunction toAuthAccessStreamEvent(\n  change: BootstrapCredentialChange | SessionCredentialChange,\n  revision: number,\n  currentSessionId: AuthSessionId,\n): AuthAccessStreamEvent {\n  switch (change.type) {\n    case \"pairingLinkUpserted\":\n      return {\n        version: 1,\n        revision,\n        type: \"pairingLinkUpserted\",\n        payload: change.pairingLink,\n      };\n    case \"pairingLinkRemoved\":\n      return {\n        version: 1,\n        revision,\n        type: \"pairingLinkRemoved\",\n        payload: { id: change.id },\n      };\n    case \"clientUpserted\":\n      return {\n        version: 1,\n        revision,\n        type: \"clientUpserted\",\n        payload: {\n          ...change.clientSession,\n          current: change.clientSession.sessionId === currentSessionId,\n        },\n      };\n    case \"clientRemoved\":\n      return {\n        version: 1,\n        revision,\n        type: \"clientRemoved\",\n        payload: { sessionId: change.sessionId },\n      };\n  }\n}\n\nconst makeWsRpcLayer = (currentSessionId: AuthSessionId) =>\n  WsRpcGroup.toLayer(\n    Effect.gen(function* () {\n      const crypto = yield* Crypto.Crypto;\n      const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n      const orchestrationEngine = yield* OrchestrationEngineService;\n      const checkpointDiffQuery = yield* CheckpointDiffQuery;\n      const keybindings = yield* Keybindings;\n      const externalLauncher = yield* ExternalLauncher.ExternalLauncher;\n      const gitWorkflow = yield* GitWorkflowService;\n      const vcsProvisioning = yield* VcsProvisioningService;\n      const vcsStatusBroadcaster = yield* VcsStatusBroadcaster;\n      const terminalManager = yield* TerminalManager;\n      const providerRegistry = yield* ProviderRegistry;\n      const providerService = yield* ProviderService;\n      const providerMaintenanceRunner = yield* ProviderMaintenanceRunner.ProviderMaintenanceRunner;\n      const config = yield* ServerConfig;\n      const lifecycleEvents = yield* ServerLifecycleEvents;\n      const serverSettings = yield* ServerSettingsService;\n      const startup = yield* ServerRuntimeStartup;\n      const workspaceEntries = yield* WorkspaceEntries;\n      const workspaceFileSystem = yield* WorkspaceFileSystem;\n      const projectSetupScriptRunner = yield* ProjectSetupScriptRunner;\n      const repositoryIdentityResolver = yield* RepositoryIdentityResolver;\n      const serverEnvironment = yield* ServerEnvironment;\n      const serverAuth = yield* ServerAuth;\n      const sourceControlDiscovery = yield* SourceControlDiscoveryLayer.SourceControlDiscovery;\n      const httpClient = yield* HttpClient.HttpClient;\n      const automaticGitFetchInterval = serverSettings.getSettings.pipe(\n        Effect.map((settings) => settings.automaticGitFetchInterval),\n        Effect.catch((cause) =>\n          Effect.logWarning(\"Failed to read automatic Git fetch interval setting\", {\n            detail: cause.message,\n          }).pipe(Effect.as(DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL)),\n        ),\n      );\n      const sourceControlRepositories = yield* SourceControlRepositoryService;\n      const bootstrapCredentials = yield* BootstrapCredentialService;\n      const sessions = yield* SessionCredentialService;\n      const processDiagnostics = yield* ProcessDiagnostics.ProcessDiagnostics;\n      const processResourceMonitor = yield* ProcessResourceMonitor.ProcessResourceMonitor;\n      const webPush = yield* WebPushService;\n      const toDispatchCommandError = (cause: unknown, fallbackMessage: string) =>\n        isOrchestrationDispatchCommandError(cause)\n          ? cause\n          : new OrchestrationDispatchCommandError({\n              message: cause instanceof Error ? cause.message : fallbackMessage,\n              cause,\n            });\n      const randomUUID = crypto.randomUUIDv4.pipe(\n        Effect.mapError((cause) =>\n          toDispatchCommandError(cause, \"Failed to generate orchestration command identifier.\"),\n        ),\n      );\n      const serverEventId = randomUUID.pipe(Effect.map(EventId.make));\n      const serverCommandId = (tag: string) =>\n        randomUUID.pipe(Effect.map((uuid) => CommandId.make(`server:${tag}:${uuid}`)));\n\n      const loadAuthAccessSnapshot = () =>\n        Effect.all({\n          pairingLinks: serverAuth.listPairingLinks().pipe(Effect.orDie),\n          clientSessions: serverAuth.listClientSessions(currentSessionId).pipe(Effect.orDie),\n        });\n\n      const appendSetupScriptActivity = (input: {\n        readonly threadId: ThreadId;\n        readonly kind: \"setup-script.requested\" | \"setup-script.started\" | \"setup-script.failed\";\n        readonly summary: string;\n        readonly createdAt: string;\n        readonly payload: Record<string, unknown>;\n        readonly tone: \"info\" | \"error\";\n      }) =>\n        Effect.all({\n          commandId: serverCommandId(\"setup-script-activity\"),\n          activityId: serverEventId,\n        }).pipe(\n          Effect.flatMap(({ commandId, activityId }) =>\n            orchestrationEngine.dispatch({\n              type: \"thread.activity.append\",\n              commandId,\n              threadId: input.threadId,\n              activity: {\n                id: activityId,\n                tone: input.tone,\n                kind: input.kind,\n                summary: input.summary,\n                payload: input.payload,\n                turnId: null,\n                createdAt: input.createdAt,\n              },\n              createdAt: input.createdAt,\n            }),\n          ),\n        );\n\n      const toBootstrapDispatchCommandCauseError = (cause: Cause.Cause<unknown>) => {\n        const error = Cause.squash(cause);\n        return isOrchestrationDispatchCommandError(error)\n          ? error\n          : new OrchestrationDispatchCommandError({\n              message:\n                error instanceof Error ? error.message : \"Failed to bootstrap thread turn start.\",\n              cause,\n            });\n      };\n\n      const enrichProjectEvent = (\n        event: OrchestrationEvent,\n      ): Effect.Effect<OrchestrationEvent, never, never> => {\n        switch (event.type) {\n          case \"project.created\":\n            return repositoryIdentityResolver.resolve(event.payload.workspaceRoot).pipe(\n              Effect.map((repositoryIdentity) => ({\n                ...event,\n                payload: {\n                  ...event.payload,\n                  repositoryIdentity,\n                },\n              })),\n            );\n          case \"project.meta-updated\":\n            return Effect.gen(function* () {\n              const workspaceRoot =\n                event.payload.workspaceRoot ??\n                Option.match(\n                  yield* projectionSnapshotQuery.getProjectShellById(event.payload.projectId),\n                  {\n                    onNone: () => null,\n                    onSome: (project) => project.workspaceRoot,\n                  },\n                ) ??\n                null;\n              if (workspaceRoot === null) {\n                return event;\n              }\n\n              const repositoryIdentity = yield* repositoryIdentityResolver.resolve(workspaceRoot);\n              return {\n                ...event,\n                payload: {\n                  ...event.payload,\n                  repositoryIdentity,\n                },\n              } satisfies OrchestrationEvent;\n            }).pipe(Effect.catch(() => Effect.succeed(event)));\n          default:\n            return Effect.succeed(event);\n        }\n      };\n\n      const enrichOrchestrationEvents = (events: ReadonlyArray<OrchestrationEvent>) =>\n        Effect.forEach(events, enrichProjectEvent, { concurrency: 4 });\n\n      const toShellStreamEvent = (\n        event: OrchestrationEvent,\n      ): Effect.Effect<Option.Option<OrchestrationShellStreamEvent>, never, never> => {\n        switch (event.type) {\n          case \"project.created\":\n          case \"project.meta-updated\":\n            return projectionSnapshotQuery.getProjectShellById(event.payload.projectId).pipe(\n              Effect.map((project) =>\n                Option.map(project, (nextProject) => ({\n                  kind: \"project-upserted\" as const,\n                  sequence: event.sequence,\n                  project: nextProject,\n                })),\n              ),\n              Effect.catch(() => Effect.succeed(Option.none())),\n            );\n          case \"project.deleted\":\n            return Effect.succeed(\n              Option.some({\n                kind: \"project-removed\" as const,\n                sequence: event.sequence,\n                projectId: event.payload.projectId,\n              }),\n            );\n          case \"thread.deleted\":\n          case \"thread.archived\":\n            return Effect.succeed(\n              Option.some({\n                kind: \"thread-removed\" as const,\n                sequence: event.sequence,\n                threadId: event.payload.threadId,\n              }),\n            );\n          case \"thread.unarchived\":\n            return projectionSnapshotQuery.getThreadShellById(event.payload.threadId).pipe(\n              Effect.map((thread) =>\n                Option.map(thread, (nextThread) => ({\n                  kind: \"thread-upserted\" as const,\n                  sequence: event.sequence,\n                  thread: nextThread,\n                })),\n              ),\n              Effect.catch(() => Effect.succeed(Option.none())),\n            );\n          default:\n            if (event.aggregateKind !== \"thread\") {\n              return Effect.succeed(Option.none());\n            }\n            return projectionSnapshotQuery\n              .getThreadShellById(ThreadId.make(event.aggregateId))\n              .pipe(\n                Effect.map((thread) =>\n                  Option.map(thread, (nextThread) => ({\n                    kind: \"thread-upserted\" as const,\n                    sequence: event.sequence,\n                    thread: nextThread,\n                  })),\n                ),\n                Effect.catch(() => Effect.succeed(Option.none())),\n              );\n        }\n      };\n\n      const dispatchBootstrapTurnStart = (\n        command: Extract<OrchestrationCommand, { type: \"thread.turn.start\" }>,\n      ): Effect.Effect<{ readonly sequence: number }, OrchestrationDispatchCommandError> =>\n        Effect.gen(function* () {\n          const bootstrap = command.bootstrap;\n          const { bootstrap: _bootstrap, ...finalTurnStartCommand } = command;\n          let createdThread = false;\n          let targetProjectId = bootstrap?.createThread?.projectId;\n          let targetProjectCwd = bootstrap?.prepareWorktree?.projectCwd;\n          let targetWorktreePath = bootstrap?.createThread?.worktreePath ?? null;\n\n          const cleanupCreatedThread = () =>\n            createdThread\n              ? serverCommandId(\"bootstrap-thread-delete\").pipe(\n                  Effect.flatMap((commandId) =>\n                    orchestrationEngine.dispatch({\n                      type: \"thread.delete\",\n                      commandId,\n                      threadId: command.threadId,\n                    }),\n                  ),\n                  Effect.ignoreCause({ log: true }),\n                )\n              : Effect.void;\n\n          const recordSetupScriptLaunchFailure = (input: {\n            readonly error: unknown;\n            readonly requestedAt: string;\n            readonly worktreePath: string;\n          }) => {\n            const detail =\n              input.error instanceof Error ? input.error.message : \"Unknown setup failure.\";\n            return appendSetupScriptActivity({\n              threadId: command.threadId,\n              kind: \"setup-script.failed\",\n              summary: \"Setup script failed to start\",\n              createdAt: input.requestedAt,\n              payload: {\n                detail,\n                worktreePath: input.worktreePath,\n              },\n              tone: \"error\",\n            }).pipe(\n              Effect.ignoreCause({ log: false }),\n              Effect.flatMap(() =>\n                Effect.logWarning(\"bootstrap turn start failed to launch setup script\", {\n                  threadId: command.threadId,\n                  worktreePath: input.worktreePath,\n                  detail,\n                }),\n              ),\n            );\n          };\n\n          const recordSetupScriptStarted = (input: {\n            readonly requestedAt: string;\n            readonly worktreePath: string;\n            readonly scriptId: string;\n            readonly scriptName: string;\n            readonly terminalId: string;\n          }) =>\n            Effect.gen(function* () {\n              const startedAt = yield* nowIso;\n              const payload = {\n                scriptId: input.scriptId,\n                scriptName: input.scriptName,\n                terminalId: input.terminalId,\n                worktreePath: input.worktreePath,\n              };\n              yield* Effect.all([\n                appendSetupScriptActivity({\n                  threadId: command.threadId,\n                  kind: \"setup-script.requested\",\n                  summary: \"Starting setup script\",\n                  createdAt: input.requestedAt,\n                  payload,\n                  tone: \"info\",\n                }),\n                appendSetupScriptActivity({\n                  threadId: command.threadId,\n                  kind: \"setup-script.started\",\n                  summary: \"Setup script started\",\n                  createdAt: startedAt,\n                  payload,\n                  tone: \"info\",\n                }),\n              ]).pipe(\n                Effect.asVoid,\n                Effect.catch((error) =>\n                  Effect.logWarning(\n                    \"bootstrap turn start launched setup script but failed to record setup activity\",\n                    {\n                      threadId: command.threadId,\n                      worktreePath: input.worktreePath,\n                      scriptId: input.scriptId,\n                      terminalId: input.terminalId,\n                      detail: error.message,\n                    },\n                  ),\n                ),\n              );\n            });\n\n          const runSetupProgram = () =>\n            Effect.gen(function* () {\n              if (!bootstrap?.runSetupScript || !targetWorktreePath) {\n                return;\n              }\n              const worktreePath = targetWorktreePath;\n              const requestedAt = yield* nowIso;\n              yield* projectSetupScriptRunner\n                .runForThread({\n                  threadId: command.threadId,\n                  ...(targetProjectId ? { projectId: targetProjectId } : {}),\n                  ...(targetProjectCwd ? { projectCwd: targetProjectCwd } : {}),\n                  worktreePath,\n                })\n                .pipe(\n                  Effect.matchEffect({\n                    onFailure: (error) =>\n                      recordSetupScriptLaunchFailure({\n                        error,\n                        requestedAt,\n                        worktreePath,\n                      }),\n                    onSuccess: (setupResult) => {\n                      if (setupResult.status !== \"started\") {\n                        return Effect.void;\n                      }\n                      return recordSetupScriptStarted({\n                        requestedAt,\n                        worktreePath,\n                        scriptId: setupResult.scriptId,\n                        scriptName: setupResult.scriptName,\n                        terminalId: setupResult.terminalId,\n                      });\n                    },\n                  }),\n                );\n            });\n\n          const bootstrapProgram = Effect.gen(function* () {\n            if (bootstrap?.createThread) {\n              yield* orchestrationEngine.dispatch({\n                type: \"thread.create\",\n                commandId: yield* serverCommandId(\"bootstrap-thread-create\"),\n                threadId: command.threadId,\n                projectId: bootstrap.createThread.projectId,\n                title: bootstrap.createThread.title,\n                modelSelection: bootstrap.createThread.modelSelection,\n                runtimeMode: bootstrap.createThread.runtimeMode,\n                interactionMode: bootstrap.createThread.interactionMode,\n                branch: bootstrap.createThread.branch,\n                worktreePath: bootstrap.createThread.worktreePath,\n                createdAt: bootstrap.createThread.createdAt,\n              });\n              createdThread = true;\n            }\n\n            if (bootstrap?.prepareWorktree) {\n              const worktree = yield* gitWorkflow.createWorktree({\n                cwd: bootstrap.prepareWorktree.projectCwd,\n                refName: bootstrap.prepareWorktree.baseBranch,\n                newRefName: bootstrap.prepareWorktree.branch,\n                path: null,\n              });\n              targetWorktreePath = worktree.worktree.path;\n              yield* orchestrationEngine.dispatch({\n                type: \"thread.meta.update\",\n                commandId: yield* serverCommandId(\"bootstrap-thread-meta-update\"),\n                threadId: command.threadId,\n                branch: worktree.worktree.refName,\n                worktreePath: targetWorktreePath,\n              });\n              yield* refreshGitStatus(targetWorktreePath);\n            }\n\n            yield* runSetupProgram();\n\n            return yield* orchestrationEngine.dispatch(finalTurnStartCommand);\n          });\n\n          return yield* bootstrapProgram.pipe(\n            Effect.catchCause((cause) => {\n              const dispatchError = toBootstrapDispatchCommandCauseError(cause);\n              if (Cause.hasInterruptsOnly(cause)) {\n                return Effect.fail(dispatchError);\n              }\n              return cleanupCreatedThread().pipe(Effect.flatMap(() => Effect.fail(dispatchError)));\n            }),\n          );\n        });\n\n      const dispatchNormalizedCommand = (\n        normalizedCommand: OrchestrationCommand,\n      ): Effect.Effect<{ readonly sequence: number }, OrchestrationDispatchCommandError> => {\n        const dispatchEffect =\n          normalizedCommand.type === \"thread.turn.start\" && normalizedCommand.bootstrap\n            ? dispatchBootstrapTurnStart(normalizedCommand)\n            : orchestrationEngine\n                .dispatch(normalizedCommand)\n                .pipe(\n                  Effect.mapError((cause) =>\n                    toDispatchCommandError(cause, \"Failed to dispatch orchestration command\"),\n                  ),\n                );\n\n        return startup\n          .enqueueCommand(dispatchEffect)\n          .pipe(\n            Effect.mapError((cause) =>\n              toDispatchCommandError(cause, \"Failed to dispatch orchestration command\"),\n            ),\n          );\n      };\n\n      const loadServerConfig = Effect.gen(function* () {\n        const keybindingsConfig = yield* keybindings.loadConfigState;\n        const providers = yield* providerRegistry.getProviders;\n        const settings = redactServerSettingsForClient(yield* serverSettings.getSettings);\n        const environment = yield* serverEnvironment.getDescriptor;\n        const auth = yield* serverAuth.getDescriptor();\n\n        return {\n          environment,\n          auth,\n          cwd: config.cwd,\n          keybindingsConfigPath: config.keybindingsConfigPath,\n          keybindings: keybindingsConfig.keybindings,\n          issues: keybindingsConfig.issues,\n          providers,\n          availableEditors: ExternalLauncher.resolveAvailableEditors(),\n          observability: {\n            logsDirectoryPath: config.logsDir,\n            localTracingEnabled: true,\n            ...(config.otlpTracesUrl !== undefined ? { otlpTracesUrl: config.otlpTracesUrl } : {}),\n            otlpTracesEnabled: config.otlpTracesUrl !== undefined,\n            ...(config.otlpMetricsUrl !== undefined\n              ? { otlpMetricsUrl: config.otlpMetricsUrl }\n              : {}),\n            otlpMetricsEnabled: config.otlpMetricsUrl !== undefined,\n          },\n          settings,\n        };\n      });\n\n      const refreshGitStatus = (cwd: string) =>\n        vcsStatusBroadcaster\n          .refreshStatus(cwd)\n          .pipe(Effect.ignoreCause({ log: true }), Effect.forkDetach, Effect.asVoid);\n\n      return WsRpcGroup.of({\n        [ORCHESTRATION_WS_METHODS.dispatchCommand]: (command) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.dispatchCommand,\n            Effect.gen(function* () {\n              const normalizedCommand = yield* normalizeDispatchCommand(command);\n              const shouldStopSessionAfterArchive =\n                normalizedCommand.type === \"thread.archive\"\n                  ? yield* projectionSnapshotQuery\n                      .getThreadShellById(normalizedCommand.threadId)\n                      .pipe(\n                        Effect.map(\n                          Option.match({\n                            onNone: () => false,\n                            onSome: (thread) =>\n                              thread.session !== null && thread.session.status !== \"stopped\",\n                          }),\n                        ),\n                        Effect.catch(() => Effect.succeed(false)),\n                      )\n                  : false;\n              const result = yield* dispatchNormalizedCommand(normalizedCommand);\n              if (normalizedCommand.type === \"thread.archive\") {\n                if (shouldStopSessionAfterArchive) {\n                  yield* Effect.gen(function* () {\n                    const stopCommand = yield* normalizeDispatchCommand({\n                      type: \"thread.session.stop\",\n                      commandId: CommandId.make(\n                        `session-stop-for-archive:${normalizedCommand.commandId}`,\n                      ),\n                      threadId: normalizedCommand.threadId,\n                      createdAt: yield* nowIso,\n                    });\n\n                    yield* dispatchNormalizedCommand(stopCommand);\n                  }).pipe(\n                    Effect.catchCause((cause) =>\n                      Effect.logWarning(\"failed to stop provider session during archive\", {\n                        threadId: normalizedCommand.threadId,\n                        cause,\n                      }),\n                    ),\n                  );\n                }\n\n                yield* terminalManager.close({ threadId: normalizedCommand.threadId }).pipe(\n                  Effect.catch((error) =>\n                    Effect.logWarning(\"failed to close thread terminals after archive\", {\n                      threadId: normalizedCommand.threadId,\n                      error: error.message,\n                    }),\n                  ),\n                );\n              }\n              return result;\n            }).pipe(\n              Effect.mapError((cause) =>\n                isOrchestrationDispatchCommandError(cause)\n                  ? cause\n                  : new OrchestrationDispatchCommandError({\n                      message: \"Failed to dispatch orchestration command\",\n                      cause,\n                    }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.getTurnDiff]: (input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.getTurnDiff,\n            checkpointDiffQuery.getTurnDiff(input).pipe(\n              Effect.mapError(\n                (cause) =>\n                  new OrchestrationGetTurnDiffError({\n                    message: \"Failed to load turn diff\",\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.getFullThreadDiff]: (input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.getFullThreadDiff,\n            checkpointDiffQuery.getFullThreadDiff(input).pipe(\n              Effect.mapError(\n                (cause) =>\n                  new OrchestrationGetFullThreadDiffError({\n                    message: \"Failed to load full thread diff\",\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.replayEvents]: (input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.replayEvents,\n            Stream.runCollect(\n              orchestrationEngine.readEvents(\n                clamp(input.fromSequenceExclusive, {\n                  maximum: Number.MAX_SAFE_INTEGER,\n                  minimum: 0,\n                }),\n              ),\n            ).pipe(\n              Effect.map((events) => Array.from(events)),\n              Effect.flatMap(enrichOrchestrationEvents),\n              Effect.map((events) => events.map(projectActivityEvent)),\n              Effect.mapError(\n                (cause) =>\n                  new OrchestrationReplayEventsError({\n                    message: \"Failed to replay orchestration events\",\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.probeSync]: (input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.probeSync,\n            projectionSnapshotQuery.getSnapshotSequence().pipe(\n              Effect.map(({ snapshotSequence }) => ({\n                clientSequence: input.clientSequence,\n                serverSequence: snapshotSequence,\n                behind: snapshotSequence > input.clientSequence,\n              })),\n              Effect.mapError(\n                (cause) =>\n                  new OrchestrationGetSnapshotError({\n                    message: \"Failed to probe orchestration sync state\",\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.reconcileThreadDetail]: (input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.reconcileThreadDetail,\n            Effect.gen(function* () {\n              const snapshotOption = yield* projectionSnapshotQuery\n                .getThreadDetailSnapshotById(input.threadId, input.page ?? {})\n                .pipe(\n                  Effect.mapError(\n                    (cause) =>\n                      new OrchestrationGetSnapshotError({\n                        message: `Failed to load thread ${input.threadId}`,\n                        cause,\n                      }),\n                  ),\n                );\n\n              if (Option.isNone(snapshotOption)) {\n                return yield* new OrchestrationGetSnapshotError({\n                  message: `Thread ${input.threadId} was not found`,\n                  cause: input.threadId,\n                });\n              }\n\n              const snapshot = projectThreadDetailSnapshot(snapshotOption.value);\n              const serverSequence = snapshot.snapshotSequence;\n              const serverFingerprint = computeOrchestrationThreadDetailFingerprint(snapshot);\n              const snapshotResult = (\n                reason:\n                  | \"missing-client-verification\"\n                  | \"unverified-client-cursor\"\n                  | \"fingerprint-mismatch\"\n                  | \"too-many-events\",\n              ) => ({\n                kind: \"snapshot\" as const,\n                reason,\n                serverSequence,\n                serverFingerprint,\n                snapshot,\n              });\n\n              if (input.clientSequence === null) {\n                return snapshotResult(\"missing-client-verification\");\n              }\n\n              if (\n                input.verifiedSequence !== input.clientSequence ||\n                input.verifiedFingerprint === null\n              ) {\n                return snapshotResult(\"unverified-client-cursor\");\n              }\n\n              if (input.clientSequence >= serverSequence) {\n                if (\n                  orchestrationThreadDetailFingerprintsEqual(\n                    input.verifiedFingerprint,\n                    serverFingerprint,\n                  )\n                ) {\n                  return {\n                    kind: \"current\" as const,\n                    serverSequence,\n                    serverFingerprint,\n                  };\n                }\n                return snapshotResult(\"fingerprint-mismatch\");\n              }\n\n              const replayedEvents = yield* Stream.runCollect(\n                orchestrationEngine.readEvents(\n                  clamp(input.clientSequence, {\n                    maximum: Number.MAX_SAFE_INTEGER,\n                    minimum: 0,\n                  }),\n                ),\n              ).pipe(\n                Effect.map((events) => Array.from(events)),\n                Effect.flatMap(enrichOrchestrationEvents),\n                Effect.mapError(\n                  (cause) =>\n                    new OrchestrationGetSnapshotError({\n                      message: `Failed to reconcile thread ${input.threadId}`,\n                      cause,\n                    }),\n                ),\n              );\n              const threadDetailEvents = replayedEvents.filter(\n                (event) =>\n                  event.aggregateKind === \"thread\" &&\n                  event.aggregateId === input.threadId &&\n                  isOrchestrationThreadDetailEvent(event),\n              );\n\n              if (threadDetailEvents.length > THREAD_DETAIL_RECONCILE_EVENT_LIMIT) {\n                return snapshotResult(\"too-many-events\");\n              }\n\n              return {\n                kind: \"events\" as const,\n                serverSequence,\n                serverFingerprint,\n                events: threadDetailEvents.map(projectActivityEvent),\n              };\n            }),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.subscribeShell]: (_input) =>\n          observeRpcStreamEffect(\n            ORCHESTRATION_WS_METHODS.subscribeShell,\n            Effect.gen(function* () {\n              const [snapshotDuration, snapshot] = yield* projectionSnapshotQuery\n                .getShellSnapshot()\n                .pipe(\n                  Effect.withSpan(\"orchestration.getShellSnapshot\"),\n                  Effect.timed,\n                  Effect.tapError((cause) =>\n                    Effect.logError(\"orchestration shell snapshot load failed\", { cause }),\n                  ),\n                  Effect.mapError(\n                    (cause) =>\n                      new OrchestrationGetSnapshotError({\n                        message: \"Failed to load orchestration shell snapshot\",\n                        cause,\n                      }),\n                  ),\n                );\n              const snapshotDurationMs = Duration.toMillis(snapshotDuration);\n              if (snapshotDurationMs > 2_000) {\n                yield* Effect.logWarning(\"slow orchestration shell snapshot\", {\n                  durationMs: snapshotDurationMs,\n                });\n              }\n\n              const toShellItemStream = <E, R>(events: Stream.Stream<OrchestrationEvent, E, R>) =>\n                events.pipe(\n                  Stream.mapEffect(toShellStreamEvent),\n                  Stream.flatMap((event) =>\n                    Option.isSome(event) ? Stream.succeed(event.value) : Stream.empty,\n                  ),\n                );\n              const replayStream = orchestrationEngine.readEvents(snapshot.snapshotSequence).pipe(\n                Stream.mapError(\n                  (cause) =>\n                    new OrchestrationGetSnapshotError({\n                      message: \"Failed to replay orchestration shell events\",\n                      cause,\n                    }),\n                ),\n              );\n              const catchupStream = streamOrderedCatchupEvents({\n                fromSequenceExclusive: snapshot.snapshotSequence,\n                replayStream,\n                liveStream: orchestrationEngine.streamDomainEvents,\n              });\n\n              return Stream.concat(\n                Stream.make({\n                  kind: \"snapshot\" as const,\n                  snapshot,\n                }),\n                toShellItemStream(catchupStream),\n              );\n            }),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.getArchivedShellSnapshot]: (_input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.getArchivedShellSnapshot,\n            projectionSnapshotQuery.getArchivedShellSnapshot().pipe(\n              Effect.tapError((cause) =>\n                Effect.logError(\"orchestration archived shell snapshot load failed\", { cause }),\n              ),\n              Effect.mapError(\n                (cause) =>\n                  new OrchestrationGetSnapshotError({\n                    message: \"Failed to load archived orchestration shell snapshot\",\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.getThreadDetailPage]: (input) =>\n          observeRpcEffect(\n            ORCHESTRATION_WS_METHODS.getThreadDetailPage,\n            projectionSnapshotQuery.getThreadDetailSnapshotById(input.threadId, input.page).pipe(\n              Effect.flatMap((snapshot) =>\n                Option.isSome(snapshot)\n                  ? Effect.succeed(projectThreadDetailSnapshot(snapshot.value))\n                  : Effect.fail(\n                      new OrchestrationGetSnapshotError({\n                        message: `Thread ${input.threadId} was not found`,\n                        cause: input.threadId,\n                      }),\n                    ),\n              ),\n              Effect.mapError((cause) =>\n                isOrchestrationGetSnapshotError(cause)\n                  ? cause\n                  : new OrchestrationGetSnapshotError({\n                      message: `Failed to load thread ${input.threadId}`,\n                      cause,\n                    }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [ORCHESTRATION_WS_METHODS.subscribeThread]: (input) =>\n          observeRpcStreamEffect(\n            ORCHESTRATION_WS_METHODS.subscribeThread,\n            Effect.gen(function* () {\n              const threadDetailSnapshot = yield* projectionSnapshotQuery\n                .getThreadDetailSnapshotById(input.threadId, input.page ?? {})\n                .pipe(\n                  Effect.mapError(\n                    (cause) =>\n                      new OrchestrationGetSnapshotError({\n                        message: `Failed to load thread ${input.threadId}`,\n                        cause,\n                      }),\n                  ),\n                );\n\n              if (Option.isNone(threadDetailSnapshot)) {\n                return yield* new OrchestrationGetSnapshotError({\n                  message: `Thread ${input.threadId} was not found`,\n                  cause: input.threadId,\n                });\n              }\n\n              const snapshot = projectThreadDetailSnapshot(threadDetailSnapshot.value);\n              const isSubscribedThreadDetailEvent = (event: OrchestrationEvent) =>\n                event.aggregateKind === \"thread\" &&\n                event.aggregateId === input.threadId &&\n                isOrchestrationThreadDetailEvent(event);\n              const toThreadItemStream = <E, R>(events: Stream.Stream<OrchestrationEvent, E, R>) =>\n                events.pipe(\n                  Stream.filter(isSubscribedThreadDetailEvent),\n                  Stream.map((event) => ({\n                    kind: \"event\" as const,\n                    event: projectActivityEvent(event),\n                  })),\n                );\n              const replayStream = orchestrationEngine.readEvents(snapshot.snapshotSequence).pipe(\n                Stream.mapError(\n                  (cause) =>\n                    new OrchestrationGetSnapshotError({\n                      message: `Failed to replay thread ${input.threadId}`,\n                      cause,\n                    }),\n                ),\n              );\n              const catchupStream = streamOrderedCatchupEvents({\n                fromSequenceExclusive: snapshot.snapshotSequence,\n                replayStream,\n                liveStream: orchestrationEngine.streamDomainEvents,\n              });\n\n              return Stream.concat(\n                Stream.make({\n                  kind: \"snapshot\" as const,\n                  snapshot,\n                }),\n                toThreadItemStream(catchupStream),\n              );\n            }),\n            { \"rpc.aggregate\": \"orchestration\" },\n          ),\n        [WS_METHODS.serverGetConfig]: (_input) =>\n          observeRpcEffect(WS_METHODS.serverGetConfig, loadServerConfig, {\n            \"rpc.aggregate\": \"server\",\n          }),\n        [WS_METHODS.serverRefreshProviders]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverRefreshProviders,\n            (input.instanceId !== undefined\n              ? providerRegistry.refreshInstance(input.instanceId)\n              : providerRegistry.refresh()\n            ).pipe(Effect.map((providers) => ({ providers }))),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.serverRefreshUsageLimits]: (_input) =>\n          observeRpcEffect(WS_METHODS.serverRefreshUsageLimits, providerService.refreshUsage(), {\n            \"rpc.aggregate\": \"server\",\n          }),\n        [WS_METHODS.serverUpdateProvider]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverUpdateProvider,\n            providerMaintenanceRunner.updateProvider(input),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverUpsertKeybinding]: (rule) =>\n          observeRpcEffect(\n            WS_METHODS.serverUpsertKeybinding,\n            Effect.gen(function* () {\n              const keybindingsConfig = yield* keybindings.upsertKeybindingRule(rule);\n              return { keybindings: keybindingsConfig, issues: [] };\n            }),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.serverRemoveKeybinding]: (rule) =>\n          observeRpcEffect(\n            WS_METHODS.serverRemoveKeybinding,\n            Effect.gen(function* () {\n              const keybindingsConfig = yield* keybindings.removeKeybindingRule(rule);\n              return { keybindings: keybindingsConfig, issues: [] };\n            }),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.serverGetSettings]: (_input) =>\n          observeRpcEffect(\n            WS_METHODS.serverGetSettings,\n            serverSettings.getSettings.pipe(Effect.map(redactServerSettingsForClient)),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverUpdateSettings]: ({ patch }) =>\n          observeRpcEffect(\n            WS_METHODS.serverUpdateSettings,\n            serverSettings.updateSettings(patch).pipe(Effect.map(redactServerSettingsForClient)),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverDiscoverSourceControl]: (_input) =>\n          observeRpcEffect(\n            WS_METHODS.serverDiscoverSourceControl,\n            sourceControlDiscovery.discover,\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverGetTraceDiagnostics]: (_input) =>\n          observeRpcEffect(\n            WS_METHODS.serverGetTraceDiagnostics,\n            TraceDiagnostics.readTraceDiagnostics({\n              traceFilePath: config.serverTracePath,\n              maxFiles: config.traceMaxFiles,\n            }),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverGetProcessDiagnostics]: (_input) =>\n          observeRpcEffect(WS_METHODS.serverGetProcessDiagnostics, processDiagnostics.read, {\n            \"rpc.aggregate\": \"server\",\n          }),\n        [WS_METHODS.serverGetProcessResourceHistory]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverGetProcessResourceHistory,\n            processResourceMonitor.readHistory(input),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverSignalProcess]: (input) =>\n          observeRpcEffect(WS_METHODS.serverSignalProcess, processDiagnostics.signal(input), {\n            \"rpc.aggregate\": \"server\",\n          }),\n        [WS_METHODS.serverProbeDevServerUrl]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverProbeDevServerUrl,\n            Effect.promise(() => probeDevServerUrl(input.url)).pipe(\n              Effect.map((reachable) => ({ reachable })),\n            ),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverGetPushConfig]: (_input) =>\n          observeRpcEffect(WS_METHODS.serverGetPushConfig, webPush.getConfig, {\n            \"rpc.aggregate\": \"server\",\n          }),\n        [WS_METHODS.serverRegisterPushSubscription]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverRegisterPushSubscription,\n            webPush.registerSubscription(currentSessionId, input),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverUnregisterPushSubscription]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverUnregisterPushSubscription,\n            webPush.unregisterSubscription(currentSessionId, input),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.serverSendTestPushNotification]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.serverSendTestPushNotification,\n            webPush.sendTestNotification(currentSessionId, input),\n            {\n              \"rpc.aggregate\": \"server\",\n            },\n          ),\n        [WS_METHODS.themesSearch]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.themesSearch,\n            OpenVsxProvider.searchThemes(input).pipe(\n              Effect.provideService(HttpClient.HttpClient, httpClient),\n            ),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.themesPreview]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.themesPreview,\n            OpenVsxProvider.previewTheme(input).pipe(\n              Effect.provideService(HttpClient.HttpClient, httpClient),\n            ),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.themesImport]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.themesImport,\n            OpenVsxProvider.importTheme(input).pipe(\n              Effect.provideService(HttpClient.HttpClient, httpClient),\n            ),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.sourceControlLookupRepository]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.sourceControlLookupRepository,\n            sourceControlRepositories.lookupRepository(input),\n            {\n              \"rpc.aggregate\": \"source-control\",\n            },\n          ),\n        [WS_METHODS.sourceControlCloneRepository]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.sourceControlCloneRepository,\n            sourceControlRepositories.cloneRepository(input),\n            {\n              \"rpc.aggregate\": \"source-control\",\n            },\n          ),\n        [WS_METHODS.sourceControlPublishRepository]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.sourceControlPublishRepository,\n            sourceControlRepositories\n              .publishRepository(input)\n              .pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            {\n              \"rpc.aggregate\": \"source-control\",\n            },\n          ),\n        [WS_METHODS.projectsSearchEntries]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.projectsSearchEntries,\n            workspaceEntries.search(input).pipe(\n              Effect.mapError(\n                (cause) =>\n                  new ProjectSearchEntriesError({\n                    message: `Failed to search workspace entries: ${cause.detail}`,\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"workspace\" },\n          ),\n        [WS_METHODS.projectsListDirectoryEntries]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.projectsListDirectoryEntries,\n            workspaceEntries.listDirectory(input).pipe(\n              Effect.mapError(\n                (cause) =>\n                  new ProjectListDirectoryEntriesError({\n                    message: `Failed to list workspace entries: ${cause.detail}`,\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"workspace\" },\n          ),\n        [WS_METHODS.projectsReadFile]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.projectsReadFile,\n            workspaceFileSystem.readFile(input).pipe(\n              Effect.mapError((cause) => {\n                const message = isWorkspacePathOutsideRootError(cause)\n                  ? \"Workspace file path must stay within the project root.\"\n                  : cause.detail;\n                return new ProjectReadFileError({\n                  message,\n                  cause,\n                });\n              }),\n            ),\n            { \"rpc.aggregate\": \"workspace\" },\n          ),\n        [WS_METHODS.projectsWriteFile]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.projectsWriteFile,\n            workspaceFileSystem.writeFile(input).pipe(\n              Effect.mapError((cause) => {\n                const message = isWorkspacePathOutsideRootError(cause)\n                  ? \"Workspace file path must stay within the project root.\"\n                  : \"Failed to write workspace file\";\n                return new ProjectWriteFileError({\n                  message,\n                  cause,\n                });\n              }),\n            ),\n            { \"rpc.aggregate\": \"workspace\" },\n          ),\n        [WS_METHODS.projectsDeleteEntry]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.projectsDeleteEntry,\n            workspaceFileSystem.deleteEntry(input).pipe(\n              Effect.mapError((cause) => {\n                const message = isWorkspacePathOutsideRootError(cause)\n                  ? \"Workspace entry path must stay within the project root.\"\n                  : cause.detail;\n                return new ProjectDeleteEntryError({\n                  message,\n                  cause,\n                });\n              }),\n            ),\n            { \"rpc.aggregate\": \"workspace\" },\n          ),\n        [WS_METHODS.shellOpenInEditor]: (input) =>\n          observeRpcEffect(WS_METHODS.shellOpenInEditor, externalLauncher.launchEditor(input), {\n            \"rpc.aggregate\": \"workspace\",\n          }),\n        [WS_METHODS.filesystemBrowse]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.filesystemBrowse,\n            workspaceEntries.browse(input).pipe(\n              Effect.mapError(\n                (cause) =>\n                  new FilesystemBrowseError({\n                    message: cause.detail,\n                    cause,\n                  }),\n              ),\n            ),\n            { \"rpc.aggregate\": \"workspace\" },\n          ),\n        [WS_METHODS.subscribeVcsStatus]: (input) =>\n          observeRpcStream(\n            WS_METHODS.subscribeVcsStatus,\n            vcsStatusBroadcaster.streamStatus(input, {\n              automaticRemoteRefreshInterval: automaticGitFetchInterval,\n            }),\n            {\n              \"rpc.aggregate\": \"vcs\",\n            },\n          ),\n        [WS_METHODS.vcsRefreshStatus]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsRefreshStatus,\n            vcsStatusBroadcaster.refreshStatus(input.cwd),\n            {\n              \"rpc.aggregate\": \"vcs\",\n            },\n          ),\n        [WS_METHODS.vcsStageFiles]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsStageFiles,\n            gitWorkflow\n              .stageFiles(input)\n              .pipe(Effect.andThen(vcsStatusBroadcaster.refreshLocalStatus(input.cwd))),\n            {\n              \"rpc.aggregate\": \"vcs\",\n            },\n          ),\n        [WS_METHODS.vcsUnstageFiles]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsUnstageFiles,\n            gitWorkflow\n              .unstageFiles(input)\n              .pipe(Effect.andThen(vcsStatusBroadcaster.refreshLocalStatus(input.cwd))),\n            {\n              \"rpc.aggregate\": \"vcs\",\n            },\n          ),\n        [WS_METHODS.vcsRevertUnstagedFiles]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsRevertUnstagedFiles,\n            gitWorkflow\n              .revertUnstagedFiles(input)\n              .pipe(Effect.andThen(vcsStatusBroadcaster.refreshLocalStatus(input.cwd))),\n            {\n              \"rpc.aggregate\": \"vcs\",\n            },\n          ),\n        [WS_METHODS.vcsGetWorkingTreeDiff]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsGetWorkingTreeDiff,\n            gitWorkflow.readWorkingTreeDiff(input),\n            {\n              \"rpc.aggregate\": \"vcs\",\n            },\n          ),\n        [WS_METHODS.vcsPull]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsPull,\n            gitWorkflow.pullCurrentBranch(input.cwd).pipe(\n              Effect.matchCauseEffect({\n                onFailure: (cause) => Effect.failCause(cause),\n                onSuccess: (result) =>\n                  refreshGitStatus(input.cwd).pipe(Effect.ignore({ log: true }), Effect.as(result)),\n              }),\n            ),\n            { \"rpc.aggregate\": \"git\" },\n          ),\n        [WS_METHODS.gitRunStackedAction]: (input) =>\n          observeRpcStream(\n            WS_METHODS.gitRunStackedAction,\n            Stream.callback<GitActionProgressEvent, GitManagerServiceError>((queue) =>\n              gitWorkflow\n                .runStackedAction(input, {\n                  actionId: input.actionId,\n                  progressReporter: {\n                    publish: (event) => Queue.offer(queue, event).pipe(Effect.asVoid),\n                  },\n                })\n                .pipe(\n                  Effect.matchCauseEffect({\n                    onFailure: (cause) => Queue.failCause(queue, cause),\n                    onSuccess: () =>\n                      refreshGitStatus(input.cwd).pipe(\n                        Effect.andThen(Queue.end(queue).pipe(Effect.asVoid)),\n                      ),\n                  }),\n                ),\n            ),\n            { \"rpc.aggregate\": \"vcs\" },\n          ),\n        [WS_METHODS.gitGenerateCommitMessage]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.gitGenerateCommitMessage,\n            gitWorkflow.generateCommitMessage(input),\n            { \"rpc.aggregate\": \"git\" },\n          ),\n        [WS_METHODS.gitResolvePullRequest]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.gitResolvePullRequest,\n            gitWorkflow.resolvePullRequest(input),\n            {\n              \"rpc.aggregate\": \"git\",\n            },\n          ),\n        [WS_METHODS.gitPreparePullRequestThread]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.gitPreparePullRequestThread,\n            gitWorkflow\n              .preparePullRequestThread(input)\n              .pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            { \"rpc.aggregate\": \"git\" },\n          ),\n        [WS_METHODS.vcsListRefs]: (input) =>\n          observeRpcEffect(WS_METHODS.vcsListRefs, gitWorkflow.listRefs(input), {\n            \"rpc.aggregate\": \"vcs\",\n          }),\n        [WS_METHODS.vcsCreateWorktree]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsCreateWorktree,\n            gitWorkflow.createWorktree(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            { \"rpc.aggregate\": \"vcs\" },\n          ),\n        [WS_METHODS.vcsRemoveWorktree]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsRemoveWorktree,\n            gitWorkflow.removeWorktree(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            { \"rpc.aggregate\": \"vcs\" },\n          ),\n        [WS_METHODS.vcsCreateRef]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsCreateRef,\n            gitWorkflow.createRef(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            { \"rpc.aggregate\": \"vcs\" },\n          ),\n        [WS_METHODS.vcsSwitchRef]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsSwitchRef,\n            gitWorkflow.switchRef(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            { \"rpc.aggregate\": \"vcs\" },\n          ),\n        [WS_METHODS.vcsInit]: (input) =>\n          observeRpcEffect(\n            WS_METHODS.vcsInit,\n            vcsProvisioning\n              .initRepository(input)\n              .pipe(Effect.tap(() => refreshGitStatus(input.cwd))),\n            { \"rpc.aggregate\": \"vcs\" },\n          ),\n        [WS_METHODS.terminalOpen]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalOpen, terminalManager.open(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.terminalWrite]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalWrite, terminalManager.write(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.terminalResize]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalResize, terminalManager.resize(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.terminalClear]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalClear, terminalManager.clear(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.terminalSnapshot]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalSnapshot, terminalManager.snapshot(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.terminalRestart]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalRestart, terminalManager.restart(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.terminalClose]: (input) =>\n          observeRpcEffect(WS_METHODS.terminalClose, terminalManager.close(input), {\n            \"rpc.aggregate\": \"terminal\",\n          }),\n        [WS_METHODS.subscribeTerminalEvents]: (_input) =>\n          observeRpcStream(\n            WS_METHODS.subscribeTerminalEvents,\n            Stream.callback<TerminalEvent>((queue) =>\n              Effect.acquireRelease(\n                terminalManager.subscribe((event) => Queue.offer(queue, event)),\n                (unsubscribe) => Effect.sync(unsubscribe),\n              ),\n            ),\n            { \"rpc.aggregate\": \"terminal\" },\n          ),\n        [WS_METHODS.subscribeServerConfig]: (_input) =>\n          observeRpcStreamEffect(\n            WS_METHODS.subscribeServerConfig,\n            Effect.gen(function* () {\n              const keybindingsUpdates = keybindings.streamChanges.pipe(\n                Stream.map((event) => ({\n                  version: 1 as const,\n                  type: \"keybindingsUpdated\" as const,\n                  payload: {\n                    keybindings: event.keybindings,\n                    issues: event.issues,\n                  },\n                })),\n              );\n              const providerStatuses = providerRegistry.streamChanges.pipe(\n                Stream.map((providers) => ({\n                  version: 1 as const,\n                  type: \"providerStatuses\" as const,\n                  payload: { providers },\n                })),\n                Stream.debounce(Duration.millis(PROVIDER_STATUS_DEBOUNCE_MS)),\n              );\n              const settingsUpdates = serverSettings.streamChanges.pipe(\n                Stream.map((settings) => redactServerSettingsForClient(settings)),\n                Stream.map((settings) => ({\n                  version: 1 as const,\n                  type: \"settingsUpdated\" as const,\n                  payload: { settings },\n                })),\n              );\n\n              yield* ignoreCauseUnlessInterrupted(providerRegistry.refresh(), {\n                message: \"server config subscription provider refresh failed\",\n              }).pipe(Effect.forkScoped);\n\n              const liveUpdates = Stream.merge(\n                keybindingsUpdates,\n                Stream.merge(providerStatuses, settingsUpdates),\n              );\n\n              return Stream.concat(\n                Stream.make({\n                  version: 1 as const,\n                  type: \"snapshot\" as const,\n                  config: yield* loadServerConfig,\n                }),\n                liveUpdates,\n              );\n            }),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.subscribeServerLifecycle]: (_input) =>\n          observeRpcStreamEffect(\n            WS_METHODS.subscribeServerLifecycle,\n            Effect.gen(function* () {\n              const snapshot = yield* lifecycleEvents.snapshot;\n              const snapshotEvents = Array.from(snapshot.events).toSorted(\n                (left, right) => left.sequence - right.sequence,\n              );\n              const liveEvents = lifecycleEvents.stream.pipe(\n                Stream.filter((event) => event.sequence > snapshot.sequence),\n              );\n              return Stream.concat(Stream.fromIterable(snapshotEvents), liveEvents);\n            }),\n            { \"rpc.aggregate\": \"server\" },\n          ),\n        [WS_METHODS.subscribeAuthAccess]: (_input) =>\n          observeRpcStreamEffect(\n            WS_METHODS.subscribeAuthAccess,\n            Effect.gen(function* () {\n              const initialSnapshot = yield* loadAuthAccessSnapshot();\n              const revisionRef = yield* Ref.make(1);\n              const accessChanges: Stream.Stream<\n                BootstrapCredentialChange | SessionCredentialChange\n              > = Stream.merge(bootstrapCredentials.streamChanges, sessions.streamChanges);\n\n              const liveEvents: Stream.Stream<AuthAccessStreamEvent> = accessChanges.pipe(\n                Stream.mapEffect((change) =>\n                  Ref.updateAndGet(revisionRef, (revision) => revision + 1).pipe(\n                    Effect.map((revision) =>\n                      toAuthAccessStreamEvent(change, revision, currentSessionId),\n                    ),\n                  ),\n                ),\n              );\n\n              return Stream.concat(\n                Stream.make({\n                  version: 1 as const,\n                  revision: 1,\n                  type: \"snapshot\" as const,\n                  payload: initialSnapshot,\n                }),\n                liveEvents,\n              );\n            }),\n            { \"rpc.aggregate\": \"auth\" },\n          ),\n      });\n    }),\n  );\n\nexport const websocketRpcRouteLayer = Layer.unwrap(\n  Effect.succeed(\n    HttpRouter.add(\n      \"GET\",\n      \"/ws\",\n      Effect.gen(function* () {\n        const request = yield* HttpServerRequest.HttpServerRequest;\n        const serverAuth = yield* ServerAuth;\n        const sessions = yield* SessionCredentialService;\n        const session = yield* serverAuth.authenticateWebSocketUpgrade(request);\n        const rpcWebSocketHttpEffect = yield* RpcServer.toHttpEffectWebsocket(WsRpcGroup, {\n          disableTracing: true,\n        }).pipe(\n          Effect.provide(\n            makeWsRpcLayer(session.sessionId).pipe(\n              Layer.provideMerge(RpcSerialization.layerJson),\n              Layer.provide(\n                SourceControlDiscoveryLayer.layer.pipe(\n                  Layer.provide(\n                    SourceControlProviderRegistry.layer.pipe(\n                      Layer.provide(\n                        Layer.mergeAll(\n                          AzureDevOpsCli.layer,\n                          BitbucketApi.layer,\n                          GitHubCli.layer,\n                          GitLabCli.layer,\n                        ),\n                      ),\n                      Layer.provideMerge(GitVcsDriver.layer),\n                      Layer.provide(\n                        VcsDriverRegistry.layer.pipe(Layer.provide(VcsProjectConfig.layer)),\n                      ),\n                    ),\n                  ),\n                  Layer.provide(VcsProcess.layer),\n                ),\n              ),\n            ),\n          ),\n        );\n        return yield* Effect.acquireUseRelease(\n          sessions.markConnected(session.sessionId),\n          () => rpcWebSocketHttpEffect,\n          () => sessions.markDisconnected(session.sessionId),\n        );\n      }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n    ),\n  ),\n);\n","import * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as Encoding from \"effect/Encoding\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport { homedir } from \"node:os\";\nimport { ServerConfig } from \"../config.ts\";\n\nconst CodexAuthJsonSchema = Schema.Struct({\n  tokens: Schema.Struct({\n    account_id: Schema.String,\n  }),\n});\n\nconst ClaudeJsonSchema = Schema.Struct({\n  userID: Schema.String,\n});\n\nclass IdentifyUserError extends Schema.TaggedErrorClass<IdentifyUserError>()(\"IdentifyUserError\", {\n  message: Schema.String,\n  cause: Schema.optional(Schema.Defect()),\n}) {}\n\nconst hash = (value: string) =>\n  Crypto.Crypto.pipe(\n    Effect.flatMap((crypto) => crypto.digest(\"SHA-256\", new TextEncoder().encode(value))),\n    Effect.map(Encoding.encodeHex),\n    Effect.mapError(\n      (cause) =>\n        new IdentifyUserError({\n          message: \"Failed to hash identifier\",\n          cause,\n        }),\n    ),\n  );\n\nconst getCodexAccountId = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  const authJsonPath = path.join(homedir(), \".codex\", \"auth.json\");\n  const authJson = yield* Effect.flatMap(\n    fileSystem.readFileString(authJsonPath),\n    Schema.decodeEffect(Schema.fromJsonString(CodexAuthJsonSchema)),\n  );\n\n  return authJson.tokens.account_id;\n});\n\nconst getClaudeUserId = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  const claudeJsonPath = path.join(homedir(), \".claude.json\");\n  const claudeJson = yield* Effect.flatMap(\n    fileSystem.readFileString(claudeJsonPath),\n    Schema.decodeEffect(Schema.fromJsonString(ClaudeJsonSchema)),\n  );\n\n  return claudeJson.userID;\n});\n\nconst upsertAnonymousId = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const { anonymousIdPath } = yield* ServerConfig;\n\n  const anonymousId = yield* fileSystem.readFileString(anonymousIdPath).pipe(\n    Effect.catch(() =>\n      Crypto.Crypto.pipe(\n        Effect.flatMap((crypto) => crypto.randomUUIDv4),\n        Effect.tap((randomId) => fileSystem.writeFileString(anonymousIdPath, randomId)),\n      ),\n    ),\n  );\n\n  return anonymousId;\n});\n\n/**\n * getTelemetryIdentifier - Users are \"identified\" by finding the first match of the following, then hashing the value.\n * 1. ~/.codex/auth.json tokens.account_id\n * 2. ~/.claude.json userID\n * 3. ~/.salchi/telemetry/anonymous-id\n */\nexport const getTelemetryIdentifier = Effect.gen(function* () {\n  const codexAccountId = yield* Effect.result(getCodexAccountId);\n  if (codexAccountId._tag === \"Success\") {\n    return yield* hash(codexAccountId.success);\n  }\n\n  const claudeUserId = yield* Effect.result(getClaudeUserId);\n  if (claudeUserId._tag === \"Success\") {\n    return yield* hash(claudeUserId.success);\n  }\n\n  const anonymousId = yield* Effect.result(upsertAnonymousId);\n  if (anonymousId._tag === \"Success\") {\n    return yield* hash(anonymousId.success);\n  }\n\n  return null;\n}).pipe(\n  Effect.tapError((error) => Effect.logWarning(\"Failed to get identifier\", { cause: error })),\n  Effect.orElseSucceed(() => null),\n);\n","/**\n * AnalyticsServiceLive - Anonymous PostHog telemetry layer.\n *\n * Persists a random installation-scoped anonymous id to state dir, buffers\n * events in memory, and flushes batches to PostHog over Effect HttpClient.\n *\n * @module AnalyticsServiceLive\n */\n\nimport * as Config from \"effect/Config\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport { HttpClient, HttpClientRequest, HttpClientResponse } from \"effect/unstable/http\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { AnalyticsService, type AnalyticsServiceShape } from \"../Services/AnalyticsService.ts\";\nimport { getTelemetryIdentifier } from \"../Identify.ts\";\nimport packageJson from \"../../../package.json\" with { type: \"json\" };\n\ninterface BufferedAnalyticsEvent {\n  readonly event: string;\n  readonly properties?: Readonly<Record<string, unknown>>;\n  readonly capturedAt: string;\n}\n\nconst ANALYTICS_REQUEST_TIMEOUT = \"5 seconds\";\nexport const ANALYTICS_SHUTDOWN_TIMEOUT = \"1 second\";\n\nconst TelemetryEnvConfig = Config.all({\n  posthogKey: Config.string(\"SALCHI_POSTHOG_KEY\").pipe(\n    Config.option,\n    Config.map(Option.getOrUndefined),\n  ),\n  posthogHost: Config.string(\"SALCHI_POSTHOG_HOST\").pipe(\n    Config.withDefault(\"https://us.i.posthog.com\"),\n  ),\n  enabled: Config.boolean(\"SALCHI_TELEMETRY_ENABLED\").pipe(Config.withDefault(true)),\n  flushBatchSize: Config.number(\"SALCHI_TELEMETRY_FLUSH_BATCH_SIZE\").pipe(Config.withDefault(20)),\n  maxBufferedEvents: Config.number(\"SALCHI_TELEMETRY_MAX_BUFFERED_EVENTS\").pipe(\n    Config.withDefault(1_000),\n  ),\n});\n\nconst makeAnalyticsService = Effect.gen(function* () {\n  const telemetryConfig = yield* TelemetryEnvConfig;\n  const httpClient = yield* HttpClient.HttpClient;\n  const serverConfig = yield* ServerConfig;\n  const posthogKey = telemetryConfig.posthogKey?.trim();\n  const identifier = telemetryConfig.enabled && posthogKey ? yield* getTelemetryIdentifier : null;\n  const bufferRef = yield* Ref.make<ReadonlyArray<BufferedAnalyticsEvent>>([]);\n  const clientType = serverConfig.mode === \"desktop\" ? \"desktop-app\" : \"cli-web-client\";\n\n  const enqueueBufferedEvent = (event: string, properties?: Readonly<Record<string, unknown>>) =>\n    Effect.flatMap(DateTime.now, (now) =>\n      Ref.modify(bufferRef, (current) => {\n        const appended = [\n          ...current,\n          {\n            event,\n            ...(properties ? { properties } : {}),\n            capturedAt: DateTime.formatIso(now),\n          } satisfies BufferedAnalyticsEvent,\n        ];\n\n        const next =\n          appended.length > telemetryConfig.maxBufferedEvents\n            ? appended.slice(appended.length - telemetryConfig.maxBufferedEvents)\n            : appended;\n\n        return [\n          {\n            size: next.length,\n            dropped: next.length !== appended.length,\n          } as const,\n          next,\n        ] as const;\n      }),\n    );\n\n  const sendBatch = Effect.fn(\"sendBatch\")(function* (\n    events: ReadonlyArray<BufferedAnalyticsEvent>,\n  ) {\n    if (!telemetryConfig.enabled || !posthogKey || !identifier) return;\n\n    const payload = {\n      api_key: posthogKey,\n      batch: events.map((event) => ({\n        event: event.event,\n        distinct_id: identifier,\n        properties: {\n          ...event.properties,\n          $process_person_profile: false,\n          platform: process.platform,\n          wsl: process.env.WSL_DISTRO_NAME,\n          arch: process.arch,\n          salchiVersion: packageJson.version,\n          clientType,\n        },\n        timestamp: event.capturedAt,\n      })),\n    };\n\n    yield* HttpClientRequest.post(`${telemetryConfig.posthogHost}/batch/`).pipe(\n      HttpClientRequest.bodyJson(payload),\n      Effect.flatMap(httpClient.execute),\n      Effect.flatMap(HttpClientResponse.filterStatusOk),\n      Effect.timeout(ANALYTICS_REQUEST_TIMEOUT),\n    );\n  });\n\n  const flush: AnalyticsServiceShape[\"flush\"] = Effect.gen(function* () {\n    while (true) {\n      const batch = yield* Ref.modify(bufferRef, (current) => {\n        if (current.length === 0) {\n          return [[] as ReadonlyArray<BufferedAnalyticsEvent>, current] as const;\n        }\n        const nextBatch = current.slice(0, telemetryConfig.flushBatchSize);\n        const remaining = current.slice(nextBatch.length);\n        return [nextBatch, remaining] as const;\n      });\n\n      if (batch.length === 0) {\n        return;\n      }\n\n      yield* sendBatch(batch).pipe(\n        Effect.catch((error) =>\n          Ref.update(bufferRef, (current) => [...batch, ...current]).pipe(\n            Effect.flatMap(() => Effect.fail(error)),\n          ),\n        ),\n      );\n    }\n  }).pipe(Effect.catch((cause) => Effect.logError(\"Failed to flush telemetry\", { cause })));\n\n  const record: AnalyticsServiceShape[\"record\"] = Effect.fn(\"record\")(\n    function* (event, properties) {\n      if (!telemetryConfig.enabled || !posthogKey || !identifier) return;\n\n      const enqueueResult = yield* enqueueBufferedEvent(event, properties);\n      if (enqueueResult.dropped) {\n        yield* Effect.logDebug(\"analytics buffer full; dropping oldest event\", {\n          size: enqueueResult.size,\n          event,\n        });\n      }\n    },\n  );\n\n  yield* Effect.forever(Effect.sleep(1000).pipe(Effect.flatMap(() => flush)), {\n    disableYield: true,\n  }).pipe(Effect.forkScoped);\n\n  yield* Effect.addFinalizer(() =>\n    flush.pipe(\n      Effect.interruptible,\n      Effect.timeoutOption(ANALYTICS_SHUTDOWN_TIMEOUT),\n      Effect.flatMap(\n        Option.match({\n          onNone: () => Effect.logWarning(\"Telemetry flush timed out during shutdown\"),\n          onSome: () => Effect.void,\n        }),\n      ),\n    ),\n  );\n\n  return {\n    record,\n    flush,\n  } satisfies AnalyticsServiceShape;\n});\n\nexport const AnalyticsServiceLayerLive = Layer.effect(AnalyticsService, makeAnalyticsService);\n","/**\n * ProviderSessionRuntimeRepository - Repository interface for provider runtime sessions.\n *\n * Owns persistence operations for provider runtime metadata and resume cursors.\n *\n * @module ProviderSessionRuntimeRepository\n */\nimport {\n  IsoDateTime,\n  ProviderInstanceId,\n  ProviderSessionRuntimeStatus,\n  RuntimeMode,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { ProviderSessionRuntimeRepositoryError } from \"../Errors.ts\";\n\nexport const ProviderSessionRuntime = Schema.Struct({\n  threadId: ThreadId,\n  providerName: Schema.String,\n  /**\n   * User-defined routing key for the configured provider instance that\n   * owns this session. Nullable only at the storage/migration boundary:\n   * rows persisted before the driver/instance split carry only\n   * `providerName`. Repository consumers must materialize a concrete\n   * instance id before routing.\n   */\n  providerInstanceId: Schema.NullOr(ProviderInstanceId),\n  adapterKey: Schema.String,\n  runtimeMode: RuntimeMode,\n  status: ProviderSessionRuntimeStatus,\n  lastSeenAt: IsoDateTime,\n  resumeCursor: Schema.NullOr(Schema.Unknown),\n  runtimePayload: Schema.NullOr(Schema.Unknown),\n});\nexport type ProviderSessionRuntime = typeof ProviderSessionRuntime.Type;\n\nexport const GetProviderSessionRuntimeInput = Schema.Struct({ threadId: ThreadId });\nexport type GetProviderSessionRuntimeInput = typeof GetProviderSessionRuntimeInput.Type;\n\nexport const DeleteProviderSessionRuntimeInput = Schema.Struct({ threadId: ThreadId });\nexport type DeleteProviderSessionRuntimeInput = typeof DeleteProviderSessionRuntimeInput.Type;\n\n/**\n * ProviderSessionRuntimeRepositoryShape - Service API for provider runtime records.\n */\nexport interface ProviderSessionRuntimeRepositoryShape {\n  /**\n   * Insert or replace a provider runtime row.\n   *\n   * Upserts by canonical `threadId`, including JSON payload/cursor fields.\n   */\n  readonly upsert: (\n    runtime: ProviderSessionRuntime,\n  ) => Effect.Effect<void, ProviderSessionRuntimeRepositoryError>;\n\n  /**\n   * Read provider runtime state by canonical thread id.\n   */\n  readonly getByThreadId: (\n    input: GetProviderSessionRuntimeInput,\n  ) => Effect.Effect<Option.Option<ProviderSessionRuntime>, ProviderSessionRuntimeRepositoryError>;\n\n  /**\n   * List all provider runtime rows.\n   *\n   * Returned in ascending last-seen order.\n   */\n  readonly list: () => Effect.Effect<\n    ReadonlyArray<ProviderSessionRuntime>,\n    ProviderSessionRuntimeRepositoryError\n  >;\n\n  /**\n   * Delete provider runtime state by canonical thread id.\n   */\n  readonly deleteByThreadId: (\n    input: DeleteProviderSessionRuntimeInput,\n  ) => Effect.Effect<void, ProviderSessionRuntimeRepositoryError>;\n}\n\n/**\n * ProviderSessionRuntimeRepository - Service tag for provider runtime persistence.\n */\nexport class ProviderSessionRuntimeRepository extends Context.Service<\n  ProviderSessionRuntimeRepository,\n  ProviderSessionRuntimeRepositoryShape\n>()(\"salchi/persistence/Services/ProviderSessionRuntime/ProviderSessionRuntimeRepository\") {}\n","import * as Schema from \"effect/Schema\";\n\nimport type { CheckpointServiceError } from \"../checkpointing/Errors.ts\";\n\n/**\n * ProviderAdapterValidationError - Invalid adapter API input.\n */\nexport class ProviderAdapterValidationError extends Schema.TaggedErrorClass<ProviderAdapterValidationError>()(\n  \"ProviderAdapterValidationError\",\n  {\n    provider: Schema.String,\n    operation: Schema.String,\n    issue: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider adapter validation failed (${this.provider}) in ${this.operation}: ${this.issue}`;\n  }\n}\n\n/**\n * ProviderAdapterSessionNotFoundError - Adapter-owned session id is unknown.\n */\nexport class ProviderAdapterSessionNotFoundError extends Schema.TaggedErrorClass<ProviderAdapterSessionNotFoundError>()(\n  \"ProviderAdapterSessionNotFoundError\",\n  {\n    provider: Schema.String,\n    threadId: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Unknown ${this.provider} adapter thread: ${this.threadId}`;\n  }\n}\n\n/**\n * ProviderAdapterSessionClosedError - Adapter session exists but is closed.\n */\nexport class ProviderAdapterSessionClosedError extends Schema.TaggedErrorClass<ProviderAdapterSessionClosedError>()(\n  \"ProviderAdapterSessionClosedError\",\n  {\n    provider: Schema.String,\n    threadId: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `${this.provider} adapter thread is closed: ${this.threadId}`;\n  }\n}\n\n/**\n * ProviderAdapterRequestError - Provider protocol request failed or timed out.\n */\nexport class ProviderAdapterRequestError extends Schema.TaggedErrorClass<ProviderAdapterRequestError>()(\n  \"ProviderAdapterRequestError\",\n  {\n    provider: Schema.String,\n    method: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider adapter request failed (${this.provider}) for ${this.method}: ${this.detail}`;\n  }\n}\n\n/**\n * ProviderAdapterProcessError - Provider process lifecycle failure.\n */\nexport class ProviderAdapterProcessError extends Schema.TaggedErrorClass<ProviderAdapterProcessError>()(\n  \"ProviderAdapterProcessError\",\n  {\n    provider: Schema.String,\n    threadId: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider adapter process error (${this.provider}) for thread ${this.threadId}: ${this.detail}`;\n  }\n}\n\n/**\n * ProviderValidationError - Invalid provider API input.\n */\nexport class ProviderValidationError extends Schema.TaggedErrorClass<ProviderValidationError>()(\n  \"ProviderValidationError\",\n  {\n    operation: Schema.String,\n    issue: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider validation failed in ${this.operation}: ${this.issue}`;\n  }\n}\n\n/**\n * ProviderUnsupportedError - Requested provider is not implemented.\n */\nexport class ProviderUnsupportedError extends Schema.TaggedErrorClass<ProviderUnsupportedError>()(\n  \"ProviderUnsupportedError\",\n  {\n    provider: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider '${this.provider}' is not implemented`;\n  }\n}\n\n/**\n * ProviderInstanceNotFoundError - Lookup against the instance registry failed.\n *\n * Distinct from `ProviderUnsupportedError`: the driver is registered, but no\n * instance with the requested id has been bootstrapped — typically because\n * the persisted instance id refers to an instance the user removed from\n * settings, or because routing is asked for an instance before the registry\n * has finished its first reload.\n */\nexport class ProviderInstanceNotFoundError extends Schema.TaggedErrorClass<ProviderInstanceNotFoundError>()(\n  \"ProviderInstanceNotFoundError\",\n  {\n    instanceId: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `No provider instance bound to id '${this.instanceId}'`;\n  }\n}\n\n/**\n * ProviderDriverError - A driver `create` call failed before producing an\n * instance. Surfaced to the registry, which marks the offending entry as\n * an \"unavailable\" shadow snapshot rather than crashing the server.\n */\nexport class ProviderDriverError extends Schema.TaggedErrorClass<ProviderDriverError>()(\n  \"ProviderDriverError\",\n  {\n    driver: Schema.String,\n    instanceId: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider driver '${this.driver}' failed to create instance '${this.instanceId}': ${this.detail}`;\n  }\n}\n\n/**\n * ProviderSessionNotFoundError - Provider-facing session not found.\n */\nexport class ProviderSessionNotFoundError extends Schema.TaggedErrorClass<ProviderSessionNotFoundError>()(\n  \"ProviderSessionNotFoundError\",\n  {\n    threadId: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Unknown provider thread: ${this.threadId}`;\n  }\n}\n\n/**\n * ProviderSessionDirectoryPersistenceError - Session directory persistence failure.\n */\nexport class ProviderSessionDirectoryPersistenceError extends Schema.TaggedErrorClass<ProviderSessionDirectoryPersistenceError>()(\n  \"ProviderSessionDirectoryPersistenceError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Provider session directory persistence error in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport type ProviderAdapterError =\n  | ProviderAdapterValidationError\n  | ProviderAdapterSessionNotFoundError\n  | ProviderAdapterSessionClosedError\n  | ProviderAdapterRequestError\n  | ProviderAdapterProcessError;\n\nexport type ProviderServiceError =\n  | ProviderValidationError\n  | ProviderUnsupportedError\n  | ProviderInstanceNotFoundError\n  | ProviderSessionNotFoundError\n  | ProviderSessionDirectoryPersistenceError\n  | ProviderAdapterError\n  | CheckpointServiceError;\n","import type {\n  ProviderInstanceId,\n  ProviderDriverKind,\n  ProviderSessionRuntimeStatus,\n  RuntimeMode,\n  ThreadId,\n} from \"@salchi/contracts\";\nimport * as Option from \"effect/Option\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type {\n  ProviderSessionDirectoryPersistenceError,\n  ProviderValidationError,\n} from \"../Errors.ts\";\n\nexport interface ProviderRuntimeBinding {\n  readonly threadId: ThreadId;\n  readonly provider: ProviderDriverKind;\n  /**\n   * Routing key for the configured provider instance that owns this\n   * session. The persistence layer promotes legacy null rows before\n   * exposing bindings; runtime callers must not infer this from `provider`.\n   */\n  readonly providerInstanceId?: ProviderInstanceId;\n  readonly adapterKey?: string;\n  readonly status?: ProviderSessionRuntimeStatus;\n  readonly resumeCursor?: unknown | null;\n  readonly runtimePayload?: unknown | null;\n  readonly runtimeMode?: RuntimeMode;\n}\n\nexport interface ProviderRuntimeBindingWithMetadata extends ProviderRuntimeBinding {\n  readonly lastSeenAt: string;\n}\n\nexport type ProviderSessionDirectoryReadError = ProviderSessionDirectoryPersistenceError;\n\nexport type ProviderSessionDirectoryWriteError =\n  | ProviderValidationError\n  | ProviderSessionDirectoryPersistenceError;\n\nexport interface ProviderSessionDirectoryShape {\n  readonly upsert: (\n    binding: ProviderRuntimeBinding,\n  ) => Effect.Effect<void, ProviderSessionDirectoryWriteError>;\n\n  readonly getProvider: (\n    threadId: ThreadId,\n  ) => Effect.Effect<ProviderDriverKind, ProviderSessionDirectoryReadError>;\n\n  readonly getBinding: (\n    threadId: ThreadId,\n  ) => Effect.Effect<Option.Option<ProviderRuntimeBinding>, ProviderSessionDirectoryReadError>;\n\n  readonly listThreadIds: () => Effect.Effect<\n    ReadonlyArray<ThreadId>,\n    ProviderSessionDirectoryPersistenceError\n  >;\n\n  readonly listBindings: () => Effect.Effect<\n    ReadonlyArray<ProviderRuntimeBindingWithMetadata>,\n    ProviderSessionDirectoryPersistenceError\n  >;\n}\n\nexport class ProviderSessionDirectory extends Context.Service<\n  ProviderSessionDirectory,\n  ProviderSessionDirectoryShape\n>()(\"salchi/provider/Services/ProviderSessionDirectory\") {}\n","import { defaultInstanceIdForDriver, ProviderDriverKind, type ThreadId } from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ProviderSessionRuntime } from \"../../persistence/Services/ProviderSessionRuntime.ts\";\nimport { ProviderSessionRuntimeRepository } from \"../../persistence/Services/ProviderSessionRuntime.ts\";\nimport { ProviderSessionDirectoryPersistenceError, ProviderValidationError } from \"../Errors.ts\";\nimport {\n  ProviderSessionDirectory,\n  type ProviderRuntimeBinding,\n  type ProviderRuntimeBindingWithMetadata,\n  type ProviderSessionDirectoryShape,\n} from \"../Services/ProviderSessionDirectory.ts\";\nconst decodeProviderDriverKindValue = Schema.decodeUnknownEffect(ProviderDriverKind);\n\nfunction toPersistenceError(operation: string) {\n  return (cause: unknown) =>\n    new ProviderSessionDirectoryPersistenceError({\n      operation,\n      detail: `Failed to execute ${operation}.`,\n      cause,\n    });\n}\n\nfunction decodeProviderDriverKind(\n  providerName: string,\n  operation: string,\n): Effect.Effect<ProviderDriverKind, ProviderSessionDirectoryPersistenceError> {\n  return decodeProviderDriverKindValue(providerName).pipe(\n    Effect.mapError(\n      (cause) =>\n        new ProviderSessionDirectoryPersistenceError({\n          operation,\n          detail: `Unknown persisted provider '${providerName}'.`,\n          cause,\n        }),\n    ),\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction mergeRuntimePayload(\n  existing: unknown | null,\n  next: unknown | null | undefined,\n): unknown | null {\n  if (next === undefined) {\n    return existing ?? null;\n  }\n  if (isRecord(existing) && isRecord(next)) {\n    return { ...existing, ...next };\n  }\n  return next;\n}\n\nfunction toRuntimeBinding(\n  runtime: ProviderSessionRuntime,\n  operation: string,\n): Effect.Effect<ProviderRuntimeBindingWithMetadata, ProviderSessionDirectoryPersistenceError> {\n  return decodeProviderDriverKind(runtime.providerName, operation).pipe(\n    Effect.map(\n      (provider) =>\n        ({\n          threadId: runtime.threadId,\n          provider,\n          // Migration boundary only: rows written before the instance split\n          // have a null provider_instance_id. Promote them as they leave\n          // persistence so hot routing code never has to infer an instance\n          // from a driver kind.\n          providerInstanceId: runtime.providerInstanceId ?? defaultInstanceIdForDriver(provider),\n          adapterKey: runtime.adapterKey,\n          runtimeMode: runtime.runtimeMode,\n          status: runtime.status,\n          resumeCursor: runtime.resumeCursor,\n          runtimePayload: runtime.runtimePayload,\n          lastSeenAt: runtime.lastSeenAt,\n        }) satisfies ProviderRuntimeBindingWithMetadata,\n    ),\n  );\n}\n\nconst makeProviderSessionDirectory = Effect.gen(function* () {\n  const repository = yield* ProviderSessionRuntimeRepository;\n\n  const getBinding = (threadId: ThreadId) =>\n    repository.getByThreadId({ threadId }).pipe(\n      Effect.mapError(toPersistenceError(\"ProviderSessionDirectory.getBinding:getByThreadId\")),\n      Effect.flatMap((runtime) =>\n        Option.match(runtime, {\n          onNone: () => Effect.succeed(Option.none<ProviderRuntimeBinding>()),\n          onSome: (value) =>\n            toRuntimeBinding(value, \"ProviderSessionDirectory.getBinding\").pipe(\n              Effect.map((binding) => Option.some(binding)),\n            ),\n        }),\n      ),\n    );\n\n  const upsert: ProviderSessionDirectoryShape[\"upsert\"] = Effect.fn(function* (binding) {\n    const existing = yield* repository\n      .getByThreadId({ threadId: binding.threadId })\n      .pipe(Effect.mapError(toPersistenceError(\"ProviderSessionDirectory.upsert:getByThreadId\")));\n\n    const existingRuntime = Option.getOrUndefined(existing);\n    const resolvedThreadId = binding.threadId ?? existingRuntime?.threadId;\n    if (!resolvedThreadId) {\n      return yield* new ProviderValidationError({\n        operation: \"ProviderSessionDirectory.upsert\",\n        issue: \"threadId must be a non-empty string.\",\n      });\n    }\n\n    const now = DateTime.formatIso(yield* DateTime.now);\n    const providerChanged =\n      existingRuntime !== undefined && existingRuntime.providerName !== binding.provider;\n    const providerInstanceId =\n      binding.providerInstanceId ?? (!providerChanged ? existingRuntime?.providerInstanceId : null);\n    if (providerInstanceId === null || providerInstanceId === undefined) {\n      return yield* new ProviderValidationError({\n        operation: \"ProviderSessionDirectory.upsert\",\n        issue: \"providerInstanceId is required for provider session runtime bindings.\",\n      });\n    }\n    yield* repository\n      .upsert({\n        threadId: resolvedThreadId,\n        providerName: binding.provider,\n        providerInstanceId,\n        adapterKey:\n          binding.adapterKey ??\n          (providerChanged ? binding.provider : (existingRuntime?.adapterKey ?? binding.provider)),\n        runtimeMode: binding.runtimeMode ?? existingRuntime?.runtimeMode ?? \"full-access\",\n        status: binding.status ?? existingRuntime?.status ?? \"running\",\n        lastSeenAt: now,\n        resumeCursor:\n          binding.resumeCursor !== undefined\n            ? binding.resumeCursor\n            : (existingRuntime?.resumeCursor ?? null),\n        runtimePayload: mergeRuntimePayload(\n          existingRuntime?.runtimePayload ?? null,\n          binding.runtimePayload,\n        ),\n      })\n      .pipe(Effect.mapError(toPersistenceError(\"ProviderSessionDirectory.upsert:upsert\")));\n  });\n\n  const getProvider: ProviderSessionDirectoryShape[\"getProvider\"] = (threadId) =>\n    getBinding(threadId).pipe(\n      Effect.flatMap((binding) =>\n        Option.match(binding, {\n          onSome: (value) => Effect.succeed(value.provider),\n          onNone: () =>\n            Effect.fail(\n              new ProviderSessionDirectoryPersistenceError({\n                operation: \"ProviderSessionDirectory.getProvider\",\n                detail: `No persisted provider binding found for thread '${threadId}'.`,\n              }),\n            ),\n        }),\n      ),\n    );\n\n  const listThreadIds: ProviderSessionDirectoryShape[\"listThreadIds\"] = () =>\n    repository.list().pipe(\n      Effect.mapError(toPersistenceError(\"ProviderSessionDirectory.listThreadIds:list\")),\n      Effect.map((rows) => rows.map((row) => row.threadId)),\n    );\n\n  const listBindings: ProviderSessionDirectoryShape[\"listBindings\"] = () =>\n    repository.list().pipe(\n      Effect.mapError(toPersistenceError(\"ProviderSessionDirectory.listBindings:list\")),\n      Effect.flatMap((rows) =>\n        Effect.forEach(\n          rows,\n          (row) => toRuntimeBinding(row, \"ProviderSessionDirectory.listBindings\"),\n          { concurrency: \"unbounded\" },\n        ),\n      ),\n    );\n\n  return {\n    upsert,\n    getProvider,\n    getBinding,\n    listThreadIds,\n    listBindings,\n  } satisfies ProviderSessionDirectoryShape;\n});\n\nexport const ProviderSessionDirectoryLive = Layer.effect(\n  ProviderSessionDirectory,\n  makeProviderSessionDirectory,\n);\n\nexport function makeProviderSessionDirectoryLive() {\n  return Layer.effect(ProviderSessionDirectory, makeProviderSessionDirectory);\n}\n","import { ThreadId } from \"@salchi/contracts\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Struct from \"effect/Struct\";\n\nimport {\n  toPersistenceDecodeError,\n  toPersistenceSqlError,\n  type ProviderSessionRuntimeRepositoryError,\n} from \"../Errors.ts\";\nimport {\n  ProviderSessionRuntime,\n  ProviderSessionRuntimeRepository,\n  type ProviderSessionRuntimeRepositoryShape,\n} from \"../Services/ProviderSessionRuntime.ts\";\n\nconst ProviderSessionRuntimeDbRowSchema = ProviderSessionRuntime.mapFields(\n  Struct.assign({\n    resumeCursor: Schema.NullOr(Schema.fromJsonString(Schema.Unknown)),\n    runtimePayload: Schema.NullOr(Schema.fromJsonString(Schema.Unknown)),\n  }),\n);\n\nconst decodeRuntime = Schema.decodeUnknownEffect(ProviderSessionRuntime);\n\nconst GetRuntimeRequestSchema = Schema.Struct({\n  threadId: ThreadId,\n});\n\nconst DeleteRuntimeRequestSchema = GetRuntimeRequestSchema;\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown): ProviderSessionRuntimeRepositoryError =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeProviderSessionRuntimeRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertRuntimeRow = SqlSchema.void({\n    Request: ProviderSessionRuntimeDbRowSchema,\n    execute: (runtime) =>\n      sql`\n        INSERT INTO provider_session_runtime (\n          thread_id,\n          provider_name,\n          provider_instance_id,\n          adapter_key,\n          runtime_mode,\n          status,\n          last_seen_at,\n          resume_cursor_json,\n          runtime_payload_json\n        )\n        VALUES (\n          ${runtime.threadId},\n          ${runtime.providerName},\n          ${runtime.providerInstanceId},\n          ${runtime.adapterKey},\n          ${runtime.runtimeMode},\n          ${runtime.status},\n          ${runtime.lastSeenAt},\n          ${runtime.resumeCursor},\n          ${runtime.runtimePayload}\n        )\n        ON CONFLICT (thread_id)\n        DO UPDATE SET\n          provider_name = excluded.provider_name,\n          provider_instance_id = excluded.provider_instance_id,\n          adapter_key = excluded.adapter_key,\n          runtime_mode = excluded.runtime_mode,\n          status = excluded.status,\n          last_seen_at = excluded.last_seen_at,\n          resume_cursor_json = excluded.resume_cursor_json,\n          runtime_payload_json = excluded.runtime_payload_json\n      `,\n  });\n\n  const getRuntimeRowByThreadId = SqlSchema.findOneOption({\n    Request: GetRuntimeRequestSchema,\n    Result: ProviderSessionRuntimeDbRowSchema,\n    execute: ({ threadId }) =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          provider_name AS \"providerName\",\n          provider_instance_id AS \"providerInstanceId\",\n          adapter_key AS \"adapterKey\",\n          runtime_mode AS \"runtimeMode\",\n          status,\n          last_seen_at AS \"lastSeenAt\",\n          resume_cursor_json AS \"resumeCursor\",\n          runtime_payload_json AS \"runtimePayload\"\n        FROM provider_session_runtime\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const listRuntimeRows = SqlSchema.findAll({\n    Request: Schema.Void,\n    Result: ProviderSessionRuntimeDbRowSchema,\n    execute: () =>\n      sql`\n        SELECT\n          thread_id AS \"threadId\",\n          provider_name AS \"providerName\",\n          provider_instance_id AS \"providerInstanceId\",\n          adapter_key AS \"adapterKey\",\n          runtime_mode AS \"runtimeMode\",\n          status,\n          last_seen_at AS \"lastSeenAt\",\n          resume_cursor_json AS \"resumeCursor\",\n          runtime_payload_json AS \"runtimePayload\"\n        FROM provider_session_runtime\n        ORDER BY last_seen_at ASC, thread_id ASC\n      `,\n  });\n\n  const deleteRuntimeByThreadId = SqlSchema.void({\n    Request: DeleteRuntimeRequestSchema,\n    execute: ({ threadId }) =>\n      sql`\n        DELETE FROM provider_session_runtime\n        WHERE thread_id = ${threadId}\n      `,\n  });\n\n  const upsert: ProviderSessionRuntimeRepositoryShape[\"upsert\"] = (runtime) =>\n    upsertRuntimeRow(runtime).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProviderSessionRuntimeRepository.upsert:query\",\n          \"ProviderSessionRuntimeRepository.upsert:encodeRequest\",\n        ),\n      ),\n    );\n\n  const getByThreadId: ProviderSessionRuntimeRepositoryShape[\"getByThreadId\"] = (input) =>\n    getRuntimeRowByThreadId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProviderSessionRuntimeRepository.getByThreadId:query\",\n          \"ProviderSessionRuntimeRepository.getByThreadId:decodeRow\",\n        ),\n      ),\n      Effect.flatMap((runtimeRowOption) =>\n        Option.match(runtimeRowOption, {\n          onNone: () => Effect.succeed(Option.none()),\n          onSome: (row) =>\n            decodeRuntime(row).pipe(\n              Effect.mapError(\n                toPersistenceDecodeError(\n                  \"ProviderSessionRuntimeRepository.getByThreadId:rowToRuntime\",\n                ),\n              ),\n              Effect.map((runtime) => Option.some(runtime)),\n            ),\n        }),\n      ),\n    );\n\n  const list: ProviderSessionRuntimeRepositoryShape[\"list\"] = () =>\n    listRuntimeRows(undefined).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"ProviderSessionRuntimeRepository.list:query\",\n          \"ProviderSessionRuntimeRepository.list:decodeRows\",\n        ),\n      ),\n      Effect.flatMap((rows) =>\n        Effect.forEach(\n          rows,\n          (row) =>\n            decodeRuntime(row).pipe(\n              Effect.mapError(\n                toPersistenceDecodeError(\"ProviderSessionRuntimeRepository.list:rowToRuntime\"),\n              ),\n            ),\n          { concurrency: \"unbounded\" },\n        ),\n      ),\n    );\n\n  const deleteByThreadId: ProviderSessionRuntimeRepositoryShape[\"deleteByThreadId\"] = (input) =>\n    deleteRuntimeByThreadId(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlError(\"ProviderSessionRuntimeRepository.deleteByThreadId:query\"),\n      ),\n    );\n\n  return {\n    upsert,\n    getByThreadId,\n    list,\n    deleteByThreadId,\n  } satisfies ProviderSessionRuntimeRepositoryShape;\n});\n\nexport const ProviderSessionRuntimeRepositoryLive = Layer.effect(\n  ProviderSessionRuntimeRepository,\n  makeProviderSessionRuntimeRepository,\n);\n","/**\n * ProviderAdapterRegistry - Lookup boundary for provider adapter implementations.\n *\n * Maps a `ProviderInstanceId` (the new per-instance routing key) or a\n * `ProviderDriverKind` (legacy single-instance-per-driver key) to the concrete\n * adapter service (Codex, Claude, etc). It does not own session lifecycle\n * or routing rules; `ProviderService` uses this registry together with\n * `ProviderSessionDirectory`.\n *\n * During the driver/instance migration this tag exposes both flavours:\n *\n *   - `getByInstance` / `listInstances` — new per-instance routing. Callers\n *     that already know an `instanceId` (threads, sessions, events)\n *     should prefer these.\n *     (`defaultInstanceIdForDriver(kind) === kind`), matching the pre-Slice-D\n *     behaviour. New code should not grow additional callers of the kind-keyed\n *     methods; they exist so the settings UI, WS refresh RPC, and a handful\n *     of legacy persisted rows can still be routed during the rollout.\n *\n * @module ProviderAdapterRegistry\n */\nimport type { ProviderDriverKind, ProviderInstanceId } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as PubSub from \"effect/PubSub\";\nimport type * as Scope from \"effect/Scope\";\nimport type * as Stream from \"effect/Stream\";\n\nimport type { ProviderAdapterError, ProviderUnsupportedError } from \"../Errors.ts\";\nimport type { ProviderAdapterShape } from \"./ProviderAdapter.ts\";\nimport type { ProviderContinuationIdentity } from \"../ProviderDriver.ts\";\n\nexport interface ProviderInstanceRoutingInfo {\n  readonly instanceId: ProviderInstanceId;\n  readonly driverKind: ProviderDriverKind;\n  readonly displayName: string | undefined;\n  readonly accentColor?: string | undefined;\n  readonly enabled: boolean;\n  readonly continuationIdentity: ProviderContinuationIdentity;\n}\n\n/**\n * ProviderAdapterRegistryShape - Service API for adapter lookup.\n */\nexport interface ProviderAdapterRegistryShape {\n  /**\n   * Resolve the adapter for a specific instance id. Returns\n   * `ProviderUnsupportedError` if no such instance is currently registered\n   * (which covers \"never configured\" *and* \"configured but the driver is\n   * unavailable in this build\" — both surface the same failure to callers\n   * that expect a working adapter).\n   */\n  readonly getByInstance: (\n    instanceId: ProviderInstanceId,\n  ) => Effect.Effect<ProviderAdapterShape<ProviderAdapterError>, ProviderUnsupportedError>;\n\n  readonly getInstanceInfo: (\n    instanceId: ProviderInstanceId,\n  ) => Effect.Effect<ProviderInstanceRoutingInfo, ProviderUnsupportedError>;\n\n  /**\n   * List all live instance ids. Excludes unavailable/shadow instances —\n   * callers of this method want something they can pass to `getByInstance`.\n   */\n  readonly listInstances: () => Effect.Effect<ReadonlyArray<ProviderInstanceId>>;\n\n  /**\n   * Legacy: list provider kinds whose default instance is currently\n   * registered.\n   *\n   * @deprecated Prefer `listInstances`. Retained for migration-era call\n   * sites that iterate providers to build UI/metrics.\n   */\n  readonly listProviders: () => Effect.Effect<ReadonlyArray<ProviderDriverKind>>;\n\n  /**\n   * Change notification stream mirroring `ProviderInstanceRegistry.streamChanges`.\n   * Emits one `void` tick whenever the set of live instances changes\n   * (instance added, removed, or rebuilt after a settings edit). Consumers\n   * that fan out `adapter.streamEvents` per instance — e.g. `ProviderService`'s\n   * runtime event bus — re-pull `listInstances` on each tick and fork new\n   * subscriptions for instances they haven't seen yet.\n   */\n  readonly streamChanges: Stream.Stream<void>;\n\n  /**\n   * Acquire a change subscription synchronously in the caller's current fiber.\n   * Consumers that must avoid missing a publish between initial reconciliation\n   * and watcher startup should use this, then fork `Stream.fromSubscription`.\n   */\n  readonly subscribeChanges: Effect.Effect<PubSub.Subscription<void>, never, Scope.Scope>;\n}\n\n/**\n * ProviderAdapterRegistry - Service tag for provider adapter lookup.\n */\nexport class ProviderAdapterRegistry extends Context.Service<\n  ProviderAdapterRegistry,\n  ProviderAdapterRegistryShape\n>()(\"salchi/provider/Services/ProviderAdapterRegistry\") {}\n","/**\n * ProviderAdapterRegistryLive — facade over `ProviderInstanceRegistry`.\n *\n * `ProviderAdapterRegistry` historically mapped one `ProviderDriverKind` to one\n * adapter via the four `<X>AdapterLive` singleton Layers. The per-instance\n * refactor moved adapter construction inside each `ProviderDriver.create()`:\n * adapters are now bundled on the `ProviderInstance` that the\n * `ProviderInstanceRegistry` owns.\n *\n * This facade fulfills the `ProviderAdapterRegistryShape` contract by doing\n * dynamic look-ups against `ProviderInstanceRegistry` on every call. That\n * means settings-driven hot-reload shows up here automatically — adding a\n * new instance via settings makes `getByInstance` resolve immediately\n * without rebuilding the facade.\n *\n * @module ProviderAdapterRegistryLive\n */\nimport {\n  defaultInstanceIdForDriver,\n  ProviderInstanceId,\n  type ProviderDriverKind,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { ProviderUnsupportedError } from \"../Errors.ts\";\nimport { ProviderInstanceRegistry } from \"../Services/ProviderInstanceRegistry.ts\";\nimport {\n  ProviderAdapterRegistry,\n  type ProviderAdapterRegistryShape,\n} from \"../Services/ProviderAdapterRegistry.ts\";\n\nconst makeProviderAdapterRegistry = Effect.fn(\"makeProviderAdapterRegistry\")(function* () {\n  const registry = yield* ProviderInstanceRegistry;\n\n  const getByInstance: ProviderAdapterRegistryShape[\"getByInstance\"] = (instanceId) =>\n    registry.getInstance(instanceId).pipe(\n      Effect.flatMap((instance) =>\n        instance === undefined\n          ? Effect.fail(\n              new ProviderUnsupportedError({\n                provider: instanceId,\n              }),\n            )\n          : Effect.succeed(instance.adapter),\n      ),\n    );\n\n  const getInstanceInfo: ProviderAdapterRegistryShape[\"getInstanceInfo\"] = (instanceId) =>\n    registry.getInstance(instanceId).pipe(\n      Effect.flatMap((instance) =>\n        instance === undefined\n          ? Effect.fail(\n              new ProviderUnsupportedError({\n                provider: instanceId,\n              }),\n            )\n          : Effect.succeed({\n              instanceId: instance.instanceId,\n              driverKind: instance.driverKind,\n              displayName: instance.displayName,\n              accentColor: instance.accentColor,\n              enabled: instance.enabled,\n              continuationIdentity: instance.continuationIdentity,\n            }),\n      ),\n    );\n\n  const listInstances: ProviderAdapterRegistryShape[\"listInstances\"] = () =>\n    registry.listInstances.pipe(\n      Effect.map((instances) => instances.map((instance) => instance.instanceId)),\n    );\n\n  const listProviders: ProviderAdapterRegistryShape[\"listProviders\"] = () =>\n    registry.listInstances.pipe(\n      Effect.map((instances) => {\n        const kinds = new Set<ProviderDriverKind>();\n        for (const instance of instances) {\n          const defaultId = defaultInstanceIdForDriver(instance.driverKind);\n          if (instance.instanceId === defaultId) {\n            // Only the default-instance rows show up through the legacy\n            // shim — custom instances like `codex_personal` have no\n            // `ProviderDriverKind` equivalent.\n            kinds.add(instance.driverKind);\n          }\n        }\n        return Array.from(kinds);\n      }),\n    );\n\n  return {\n    getByInstance,\n    getInstanceInfo,\n    listInstances,\n    listProviders,\n    // Proxy directly — the facade has no state of its own; the instance\n    // registry already coalesces adds/removes/rebuilds into one emission.\n    streamChanges: registry.streamChanges,\n    subscribeChanges: registry.subscribeChanges,\n  } satisfies ProviderAdapterRegistryShape;\n});\n\nexport const ProviderAdapterRegistryLive = Layer.effect(\n  ProviderAdapterRegistry,\n  makeProviderAdapterRegistry(),\n);\n\n// Exposed for tests that want to build a facade over a pre-assembled\n// `ProviderInstanceRegistry` without pulling in the whole boot graph.\nexport { makeProviderAdapterRegistry };\n\n// Re-export for consumers that need the accessor shape. The service tag\n// itself lives in `Services/ProviderAdapterRegistry.ts`.\nexport { ProviderAdapterRegistry } from \"../Services/ProviderAdapterRegistry.ts\";\n// Re-export for consumers (including tests) that construct a\n// `ProviderInstanceId` before calling `getByInstance`.\nexport { ProviderInstanceId };\n","// @effect-diagnostics nodeBuiltinImport:off\n/**\n * Provider event logger helper.\n *\n * Best-effort writer for observability logs. Each record is formatted as a\n * single effect-style text line in a thread-scoped file. Failures are\n * downgraded to warnings so provider runtime behavior is unaffected.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { ThreadId } from \"@salchi/contracts\";\nimport { RotatingFileSink } from \"@salchi/shared/logging\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Logger from \"effect/Logger\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\n\nimport { toSafeThreadAttachmentSegment } from \"../../attachmentStore.ts\";\n\nconst DEFAULT_MAX_BYTES = 10 * 1024 * 1024;\nconst DEFAULT_MAX_FILES = 10;\nconst DEFAULT_BATCH_WINDOW_MS = 200;\nconst GLOBAL_THREAD_SEGMENT = \"_global\";\nconst LOG_SCOPE = \"provider-observability\";\nconst encodeUnknownJsonString = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);\n\nexport type EventNdjsonStream = \"native\" | \"canonical\" | \"orchestration\";\n\nexport interface EventNdjsonLogger {\n  readonly filePath: string;\n  write: (event: unknown, threadId: ThreadId | null) => Effect.Effect<void>;\n  close: () => Effect.Effect<void>;\n}\n\nexport interface EventNdjsonLoggerOptions {\n  readonly stream: EventNdjsonStream;\n  readonly maxBytes?: number;\n  readonly maxFiles?: number;\n  readonly batchWindowMs?: number;\n}\n\ninterface ThreadWriter {\n  writeMessage: (message: string) => Effect.Effect<void>;\n  close: () => Effect.Effect<void>;\n}\n\ninterface LoggerState {\n  readonly threadWriters: Map<string, ThreadWriter>;\n  readonly failedSegments: Set<string>;\n}\n\nfunction logWarning(message: string, context: Record<string, unknown>): Effect.Effect<void> {\n  return Effect.logWarning(message, context).pipe(Effect.annotateLogs({ scope: LOG_SCOPE }));\n}\n\nfunction resolveThreadSegment(raw: string | null | undefined): string {\n  const normalized = typeof raw === \"string\" ? toSafeThreadAttachmentSegment(raw) : null;\n  return normalized ?? GLOBAL_THREAD_SEGMENT;\n}\n\nfunction formatLoggerMessage(message: unknown): string {\n  if (Array.isArray(message)) {\n    return message.map((part) => (typeof part === \"string\" ? part : String(part))).join(\" \");\n  }\n  return typeof message === \"string\" ? message : String(message);\n}\n\nfunction makeLineLogger(streamLabel: string): Logger.Logger<unknown, string> {\n  return Logger.make(\n    ({ date, message }) =>\n      `[${date.toISOString()}] ${streamLabel}: ${formatLoggerMessage(message)}\\n`,\n  );\n}\n\nfunction resolveStreamLabel(stream: EventNdjsonStream): string {\n  switch (stream) {\n    case \"native\":\n      return \"NTIVE\";\n    case \"canonical\":\n    case \"orchestration\":\n    default:\n      return \"CANON\";\n  }\n}\n\nconst toLogMessage = Effect.fn(\"toLogMessage\")(function* (\n  event: unknown,\n): Effect.fn.Return<string | undefined> {\n  return yield* encodeUnknownJsonString(event).pipe(\n    Effect.catch((error) =>\n      logWarning(\"failed to serialize provider event log record\", { error }).pipe(\n        Effect.as(undefined),\n      ),\n    ),\n  );\n});\n\nconst makeThreadWriter = Effect.fn(\"makeThreadWriter\")(function* (input: {\n  readonly filePath: string;\n  readonly maxBytes: number;\n  readonly maxFiles: number;\n  readonly batchWindowMs: number;\n  readonly streamLabel: string;\n}): Effect.fn.Return<ThreadWriter | undefined> {\n  const sinkResult = yield* Effect.sync(() => {\n    try {\n      return {\n        ok: true as const,\n        sink: new RotatingFileSink({\n          filePath: input.filePath,\n          maxBytes: input.maxBytes,\n          maxFiles: input.maxFiles,\n          throwOnError: true,\n        }),\n      };\n    } catch (error) {\n      return { ok: false as const, error };\n    }\n  });\n\n  if (!sinkResult.ok) {\n    yield* logWarning(\"failed to initialize provider thread log file\", {\n      filePath: input.filePath,\n      error: sinkResult.error,\n    });\n    return undefined;\n  }\n\n  const sink = sinkResult.sink;\n  const scope = yield* Scope.make();\n  const lineLogger = makeLineLogger(input.streamLabel);\n  const batchedLogger = yield* Logger.batched(lineLogger, {\n    window: input.batchWindowMs,\n    flush: Effect.fn(\"makeThreadWriter.flush\")(function* (messages) {\n      const flushResult = yield* Effect.sync(() => {\n        try {\n          for (const message of messages) {\n            sink.write(message);\n          }\n          return { ok: true as const };\n        } catch (error) {\n          return { ok: false as const, error };\n        }\n      });\n\n      if (!flushResult.ok) {\n        yield* logWarning(\"provider event log batch flush failed\", {\n          filePath: input.filePath,\n          error: flushResult.error,\n        });\n      }\n    }),\n  }).pipe(Effect.provideService(Scope.Scope, scope));\n\n  const loggerLayer = Logger.layer([batchedLogger], { mergeWithExisting: false });\n\n  return {\n    writeMessage(message: string) {\n      return Effect.log(message).pipe(Effect.provide(loggerLayer));\n    },\n    close() {\n      return Scope.close(scope, Exit.void);\n    },\n  } satisfies ThreadWriter;\n});\n\nexport const makeEventNdjsonLogger = Effect.fn(\"makeEventNdjsonLogger\")(function* (\n  filePath: string,\n  options: EventNdjsonLoggerOptions,\n): Effect.fn.Return<EventNdjsonLogger | undefined> {\n  const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n  const maxFiles = options.maxFiles ?? DEFAULT_MAX_FILES;\n  const batchWindowMs = options.batchWindowMs ?? DEFAULT_BATCH_WINDOW_MS;\n  const streamLabel = resolveStreamLabel(options.stream);\n\n  const directoryReady = yield* Effect.sync(() => {\n    try {\n      fs.mkdirSync(path.dirname(filePath), { recursive: true });\n      return true;\n    } catch (error) {\n      return { ok: false as const, error };\n    }\n  });\n  if (directoryReady !== true) {\n    yield* logWarning(\"failed to create provider event log directory\", {\n      filePath,\n      error: directoryReady.error,\n    });\n    return undefined;\n  }\n\n  const stateRef = yield* SynchronizedRef.make<LoggerState>({\n    threadWriters: new Map(),\n    failedSegments: new Set(),\n  });\n\n  const resolveThreadWriter = Effect.fn(\"resolveThreadWriter\")(function* (\n    threadSegment: string,\n  ): Effect.fn.Return<ThreadWriter | undefined> {\n    return yield* SynchronizedRef.modifyEffect(stateRef, (state) => {\n      if (state.failedSegments.has(threadSegment)) {\n        return Effect.succeed([undefined, state] as const);\n      }\n\n      const existing = state.threadWriters.get(threadSegment);\n      if (existing) {\n        return Effect.succeed([existing, state] as const);\n      }\n\n      return makeThreadWriter({\n        filePath: path.join(path.dirname(filePath), `${threadSegment}.log`),\n        maxBytes,\n        maxFiles,\n        batchWindowMs,\n        streamLabel,\n      }).pipe(\n        Effect.map((writer) => {\n          if (!writer) {\n            const nextFailedSegments = new Set(state.failedSegments);\n            nextFailedSegments.add(threadSegment);\n            return [\n              undefined,\n              {\n                ...state,\n                failedSegments: nextFailedSegments,\n              },\n            ] as const;\n          }\n\n          const nextThreadWriters = new Map(state.threadWriters);\n          nextThreadWriters.set(threadSegment, writer);\n          return [\n            writer,\n            {\n              ...state,\n              threadWriters: nextThreadWriters,\n            },\n          ] as const;\n        }),\n      );\n    });\n  });\n\n  const write = Effect.fn(\"write\")(function* (event: unknown, threadId: ThreadId | null) {\n    const threadSegment = resolveThreadSegment(threadId);\n    const message = yield* toLogMessage(event);\n    if (!message) {\n      return;\n    }\n\n    const writer = yield* resolveThreadWriter(threadSegment);\n    if (!writer) {\n      return;\n    }\n\n    yield* writer.writeMessage(message);\n  });\n\n  const close = Effect.fn(\"close\")(function* () {\n    yield* SynchronizedRef.modifyEffect(stateRef, (state) =>\n      Effect.gen(function* () {\n        for (const writer of state.threadWriters.values()) {\n          yield* writer.close();\n        }\n\n        return [\n          undefined,\n          {\n            threadWriters: new Map<string, ThreadWriter>(),\n            failedSegments: new Set<string>(),\n          },\n        ] as const;\n      }),\n    );\n  });\n\n  return {\n    filePath,\n    write,\n    close,\n  } satisfies EventNdjsonLogger;\n});\n","/**\n * ProviderEventLoggers — single observability service that owns the two\n * shared NDJSON streams the provider runtime writes:\n *\n *   - `native`    — provider-protocol events as the SDK emits them, written\n *                   from inside each `<X>Adapter` factory.\n *   - `canonical` — runtime events after `ProviderService` has normalized\n *                   them onto `ProviderRuntimeEvent`.\n *\n * Why a service tag and not constructor options?\n *\n *   - Adapters are now constructed *inside* drivers (`<X>Driver.create()`),\n *     not at the boot Layer. There is no longer a single `make<X>AdapterLive(options)`\n *     call site where we can hand an `EventNdjsonLogger` in by hand.\n *   - Multiple driver instances per kind (`codex_personal`, `codex_work`)\n *     should share one underlying log writer per stream — opening N writers\n *     against the same rotating file would race the rotation logic. Owning\n *     the loggers on a single tag keeps that invariant intact.\n *   - Tests can swap one (or both) loggers with in-memory recorders by\n *     `Layer.succeed(ProviderEventLoggers, { native, canonical })` instead of\n *     juggling per-Layer option threading.\n *\n * Both fields are optional. `makeEventNdjsonLogger` returns `undefined` when\n * the target directory cannot be created; we forward that as `undefined`\n * rather than failing the boot Layer, matching the previous best-effort\n * behavior of `server.ts`.\n *\n * @module provider/Layers/ProviderEventLoggers\n */\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { type EventNdjsonLogger, makeEventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\n\nexport interface ProviderEventLoggersShape {\n  readonly native: EventNdjsonLogger | undefined;\n  readonly canonical: EventNdjsonLogger | undefined;\n}\n\n/**\n * Shared logger pair for native + canonical provider event streams.\n *\n * Service value is intentionally a struct of two optional loggers rather\n * than two parallel tags. Construction site is one place\n * (`ProviderEventLoggersLive`); consumers (drivers, `ProviderService`) read\n * one tag and pluck the field they need.\n */\nexport class ProviderEventLoggers extends Context.Service<\n  ProviderEventLoggers,\n  ProviderEventLoggersShape\n>()(\"salchi/provider/Layers/ProviderEventLoggers\") {}\n\n/**\n * Constant value used by tests / boot layers that want to opt out of native\n * + canonical logging entirely. Keeps the tag non-optional in the type\n * system while letting the runtime treat absence as a no-op.\n */\nexport const NoOpProviderEventLoggers: ProviderEventLoggersShape = {\n  native: undefined,\n  canonical: undefined,\n};\n\n/**\n * Live Layer that builds both loggers from `ServerConfig.providerEventLogPath`.\n * If the directory create fails for either stream, the corresponding field\n * is `undefined` and writes from that stream become no-ops downstream.\n */\nexport const ProviderEventLoggersLive = Layer.effect(\n  ProviderEventLoggers,\n  Effect.gen(function* () {\n    const { providerEventLogPath } = yield* ServerConfig;\n    const native = yield* makeEventNdjsonLogger(providerEventLogPath, {\n      stream: \"native\",\n    });\n    const canonical = yield* makeEventNdjsonLogger(providerEventLogPath, {\n      stream: \"canonical\",\n    });\n    return {\n      native,\n      canonical,\n    } satisfies ProviderEventLoggersShape;\n  }),\n);\n","/**\n * ProviderServiceLive - Cross-provider orchestration layer.\n *\n * Routes validated transport/API calls to provider adapters through\n * `ProviderAdapterRegistry` and `ProviderSessionDirectory`, and exposes a\n * unified provider event stream for subscribers.\n *\n * It does not implement provider protocol details (adapter concern).\n *\n * @module ProviderServiceLive\n */\nimport {\n  ApprovalRequestId,\n  ModelSelection,\n  NonNegativeInt,\n  ThreadId,\n  ProviderInterruptTurnInput,\n  ProviderRespondToRequestInput,\n  ProviderRespondToUserInputInput,\n  ProviderSendTurnInput,\n  ProviderSteerTurnInput,\n  ProviderSessionStartInput,\n  ProviderStopSessionInput,\n  type ProviderInstanceId,\n  type ProviderDriverKind,\n  type ProviderRuntimeEvent,\n  type ProviderSession,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Clock from \"effect/Clock\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport * as Stream from \"effect/Stream\";\n\nimport {\n  increment,\n  providerMetricAttributes,\n  providerRuntimeEventsTotal,\n  providerSessionsTotal,\n  providerTurnDuration,\n  providerTurnsTotal,\n  providerTurnMetricAttributes,\n  withMetrics,\n} from \"../../observability/Metrics.ts\";\nimport { type ProviderAdapterError, ProviderValidationError } from \"../Errors.ts\";\nimport type { ProviderAdapterShape } from \"../Services/ProviderAdapter.ts\";\nimport { ProviderAdapterRegistry } from \"../Services/ProviderAdapterRegistry.ts\";\nimport { ProviderService, type ProviderServiceShape } from \"../Services/ProviderService.ts\";\nimport {\n  ProviderSessionDirectory,\n  type ProviderRuntimeBinding,\n} from \"../Services/ProviderSessionDirectory.ts\";\nimport { type EventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\nimport { ProviderEventLoggers } from \"./ProviderEventLoggers.ts\";\nimport { AnalyticsService } from \"../../telemetry/Services/AnalyticsService.ts\";\nconst isModelSelection = Schema.is(ModelSelection);\n\n/**\n * Hook for tests that want to override the canonical event logger pulled\n * from `ProviderEventLoggers`. Production wiring leaves this undefined and\n * reads the logger off the tag.\n */\nexport interface ProviderServiceLiveOptions {\n  readonly canonicalEventLogger?: EventNdjsonLogger;\n  readonly usageCacheTtlMs?: number;\n  readonly now?: () => number;\n}\n\nexport const PROVIDER_USAGE_CACHE_TTL_MS = 20_000;\n\nconst ProviderRollbackConversationInput = Schema.Struct({\n  threadId: ThreadId,\n  numTurns: NonNegativeInt,\n});\n\nfunction toValidationError(\n  operation: string,\n  issue: string,\n  cause?: unknown,\n): ProviderValidationError {\n  return new ProviderValidationError({\n    operation,\n    issue,\n    ...(cause !== undefined ? { cause } : {}),\n  });\n}\n\nconst decodeInputOrValidationError = <S extends Schema.Top>(input: {\n  readonly operation: string;\n  readonly schema: S;\n  readonly payload: unknown;\n}) => {\n  const decodeProviderRequestInput = Schema.decodeUnknownEffect(input.schema);\n  return decodeProviderRequestInput(input.payload).pipe(\n    Effect.mapError(\n      (schemaError) =>\n        new ProviderValidationError({\n          operation: input.operation,\n          issue: SchemaIssue.makeFormatterDefault()(schemaError.issue),\n          cause: schemaError,\n        }),\n    ),\n  );\n};\n\nfunction toRuntimeStatus(session: ProviderSession): \"starting\" | \"running\" | \"stopped\" | \"error\" {\n  switch (session.status) {\n    case \"connecting\":\n      return \"starting\";\n    case \"error\":\n      return \"error\";\n    case \"closed\":\n      return \"stopped\";\n    case \"ready\":\n    case \"running\":\n    default:\n      return \"running\";\n  }\n}\n\nfunction toRuntimePayloadFromSession(\n  session: ProviderSession,\n  extra?: {\n    readonly modelSelection?: unknown;\n    readonly lastRuntimeEvent?: string;\n    readonly lastRuntimeEventAt?: string;\n  },\n): Record<string, unknown> {\n  return {\n    cwd: session.cwd ?? null,\n    model: session.model ?? null,\n    activeTurnId: session.activeTurnId ?? null,\n    lastError: session.lastError ?? null,\n    ...(extra?.modelSelection !== undefined ? { modelSelection: extra.modelSelection } : {}),\n    ...(extra?.lastRuntimeEvent !== undefined ? { lastRuntimeEvent: extra.lastRuntimeEvent } : {}),\n    ...(extra?.lastRuntimeEventAt !== undefined\n      ? { lastRuntimeEventAt: extra.lastRuntimeEventAt }\n      : {}),\n  };\n}\n\nfunction readPersistedModelSelection(\n  runtimePayload: ProviderRuntimeBinding[\"runtimePayload\"],\n): ModelSelection | undefined {\n  if (!runtimePayload || typeof runtimePayload !== \"object\" || Array.isArray(runtimePayload)) {\n    return undefined;\n  }\n  const raw = \"modelSelection\" in runtimePayload ? runtimePayload.modelSelection : undefined;\n  return isModelSelection(raw) ? raw : undefined;\n}\n\nfunction readPersistedCwd(\n  runtimePayload: ProviderRuntimeBinding[\"runtimePayload\"],\n): string | undefined {\n  if (!runtimePayload || typeof runtimePayload !== \"object\" || Array.isArray(runtimePayload)) {\n    return undefined;\n  }\n  const rawCwd = \"cwd\" in runtimePayload ? runtimePayload.cwd : undefined;\n  if (typeof rawCwd !== \"string\") return undefined;\n  const trimmed = rawCwd.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction readPersistedApprovalGrant(\n  runtimePayload: ProviderRuntimeBinding[\"runtimePayload\"],\n): boolean {\n  return (\n    runtimePayload !== null &&\n    typeof runtimePayload === \"object\" &&\n    !Array.isArray(runtimePayload) &&\n    \"approvalGranted\" in runtimePayload &&\n    runtimePayload.approvalGranted === true\n  );\n}\n\nconst dieOnMissingBindingInstanceId = (\n  operation: string,\n  payload: {\n    readonly providerInstanceId?: ProviderInstanceId | undefined;\n    readonly provider?: ProviderDriverKind | undefined;\n  },\n): ProviderInstanceId => {\n  if (payload.providerInstanceId !== undefined) {\n    return payload.providerInstanceId;\n  }\n  throw new Error(\n    payload.provider\n      ? `${operation}: provider instance id is required for provider '${payload.provider}'.`\n      : `${operation}: provider instance id is required.`,\n  );\n};\n\nconst correlateRuntimeEventWithInstance = (\n  source: {\n    readonly instanceId: ProviderInstanceId;\n    readonly provider: ProviderDriverKind;\n  },\n  event: ProviderRuntimeEvent,\n): ProviderRuntimeEvent => {\n  if (event.provider !== source.provider) {\n    throw new Error(\n      `ProviderService.streamEvents: provider instance '${source.instanceId}' is backed by driver '${source.provider}' but emitted driver '${event.provider}'.`,\n    );\n  }\n  if (event.providerInstanceId !== undefined && event.providerInstanceId !== source.instanceId) {\n    throw new Error(\n      `ProviderService.streamEvents: provider instance '${source.instanceId}' emitted event for instance '${event.providerInstanceId}'.`,\n    );\n  }\n  return { ...event, providerInstanceId: source.instanceId };\n};\n\nconst makeProviderService = Effect.fn(\"makeProviderService\")(function* (\n  options?: ProviderServiceLiveOptions,\n) {\n  const analytics = yield* Effect.service(AnalyticsService);\n  const eventLoggers = yield* ProviderEventLoggers;\n  // Options-provided logger wins (test overrides); otherwise we take whatever\n  // the `ProviderEventLoggers` tag exposes — `undefined` means \"no canonical\n  // log writer is attached\", which downstream code already handles as a\n  // no-op.\n  const canonicalEventLogger = options?.canonicalEventLogger ?? eventLoggers.canonical;\n\n  const registry = yield* ProviderAdapterRegistry;\n  const directory = yield* ProviderSessionDirectory;\n  const runtimeEventPubSub = yield* PubSub.unbounded<ProviderRuntimeEvent>();\n  const usageRefreshSemaphore = yield* Semaphore.make(1);\n  let cachedUsageRefresh:\n    | {\n        readonly expiresAtMs: number;\n        readonly value: Effect.Success<ReturnType<ProviderServiceShape[\"refreshUsage\"]>>;\n      }\n    | undefined;\n  const nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\n  const publishRuntimeEvent = (event: ProviderRuntimeEvent): Effect.Effect<void> =>\n    Effect.succeed(event).pipe(\n      Effect.tap((canonicalEvent) =>\n        canonicalEventLogger\n          ? canonicalEventLogger.write(canonicalEvent, canonicalEvent.threadId)\n          : Effect.void,\n      ),\n      Effect.flatMap((canonicalEvent) => PubSub.publish(runtimeEventPubSub, canonicalEvent)),\n      Effect.asVoid,\n    );\n\n  const requireBindingInstanceId = (\n    operation: string,\n    payload: {\n      readonly providerInstanceId?: ProviderInstanceId | undefined;\n      readonly provider?: ProviderDriverKind | undefined;\n    },\n  ): Effect.Effect<ProviderInstanceId, ProviderValidationError> =>\n    payload.providerInstanceId !== undefined\n      ? Effect.succeed(payload.providerInstanceId)\n      : Effect.fail(\n          toValidationError(\n            operation,\n            payload.provider\n              ? `Provider instance id is required for provider '${payload.provider}'.`\n              : \"Provider instance id is required.\",\n          ),\n        );\n\n  const upsertSessionBinding = (\n    session: ProviderSession,\n    threadId: ThreadId,\n    extra?: {\n      readonly modelSelection?: unknown;\n      readonly lastRuntimeEvent?: string;\n      readonly lastRuntimeEventAt?: string;\n    },\n  ) =>\n    Effect.gen(function* () {\n      const providerInstanceId = yield* requireBindingInstanceId(\n        \"ProviderService.upsertSessionBinding\",\n        session,\n      );\n      yield* directory.upsert({\n        threadId,\n        provider: session.provider,\n        providerInstanceId,\n        runtimeMode: session.runtimeMode,\n        status: toRuntimeStatus(session),\n        ...(session.resumeCursor !== undefined ? { resumeCursor: session.resumeCursor } : {}),\n        runtimePayload: toRuntimePayloadFromSession(session, extra),\n      });\n    });\n\n  const processRuntimeEvent = (\n    source: {\n      readonly instanceId: ProviderInstanceId;\n      readonly provider: ProviderDriverKind;\n      readonly adapter: ProviderAdapterShape<ProviderAdapterError>;\n    },\n    event: ProviderRuntimeEvent,\n  ): Effect.Effect<void> =>\n    Effect.sync(() => correlateRuntimeEventWithInstance(source, event)).pipe(\n      Effect.flatMap((canonicalEvent) => {\n        const approvalRequestId =\n          canonicalEvent.type === \"request.opened\" &&\n          canonicalEvent.requestId !== undefined &&\n          canonicalEvent.payload.requestType !== \"tool_user_input\"\n            ? ApprovalRequestId.make(canonicalEvent.requestId)\n            : null;\n        return increment(providerRuntimeEventsTotal, {\n          provider: canonicalEvent.provider,\n          eventType: canonicalEvent.type,\n        }).pipe(\n          Effect.andThen(publishRuntimeEvent(canonicalEvent)),\n          Effect.andThen(\n            approvalRequestId !== null\n              ? directory.getBinding(canonicalEvent.threadId).pipe(\n                  Effect.flatMap((binding) =>\n                    Option.match(binding, {\n                      onNone: () => Effect.void,\n                      onSome: (value) =>\n                        value.providerInstanceId === source.instanceId &&\n                        readPersistedApprovalGrant(value.runtimePayload)\n                          ? source.adapter.respondToRequest(\n                              canonicalEvent.threadId,\n                              approvalRequestId,\n                              \"acceptForSession\",\n                            )\n                          : Effect.void,\n                    }),\n                  ),\n                  Effect.catchCause((cause) =>\n                    Effect.logWarning(\"provider.request.auto-approval-failed\", {\n                      threadId: canonicalEvent.threadId,\n                      requestId: canonicalEvent.requestId,\n                      provider: canonicalEvent.provider,\n                      cause,\n                    }),\n                  ),\n                )\n              : Effect.void,\n          ),\n        );\n      }),\n    );\n\n  // `subscribedAdapters` is our source-of-truth for \"which instance adapters\n  // are currently wired into the runtime event bus\". It both tracks the set\n  // of live subscriptions (so `reconcileInstanceSubscriptions` can diff and\n  // fork only the *new* or *rebuilt* ones) and serves as the dynamic adapter\n  // list consumed by `stopStaleSessionsForThread`, `listSessions`, and\n  // `runStopAll` — replacing the pre-Slice-D startup snapshot so hot-added\n  // instances become visible to those call sites as soon as settings edits\n  // land.\n  const subscribedAdapters = yield* Ref.make(\n    new Map<ProviderInstanceId, ProviderAdapterShape<ProviderAdapterError>>(),\n  );\n\n  const getAdapterEntries = Ref.get(subscribedAdapters).pipe(\n    Effect.map((map) => Array.from(map.entries())),\n  );\n\n  // Rebuild the map of id → adapter from the registry and fork a new event\n  // subscription for every instance that is either brand new or whose adapter\n  // identity changed (indicating the underlying `ProviderInstance` was torn\n  // down and rebuilt by `ProviderInstanceRegistry.reconcile`). Orphaned\n  // fibers for removed/replaced instances exit on their own because their\n  // adapter's `streamEvents` source terminates when the old scope closes.\n  const reconcileInstanceSubscriptions = Effect.gen(function* () {\n    const previous = yield* Ref.get(subscribedAdapters);\n    const currentIds = yield* registry.listInstances();\n    const next = new Map<ProviderInstanceId, ProviderAdapterShape<ProviderAdapterError>>();\n    for (const id of currentIds) {\n      const adapterOption = yield* registry\n        .getByInstance(id)\n        .pipe(Effect.tapError(Effect.logWarning), Effect.option);\n      if (Option.isNone(adapterOption)) continue;\n      const adapter = adapterOption.value;\n      next.set(id, adapter);\n      if (previous.get(id) !== adapter) {\n        yield* Stream.runForEach(adapter.streamEvents, (event) =>\n          processRuntimeEvent(\n            {\n              instanceId: id,\n              provider: adapter.provider,\n              adapter,\n            },\n            event,\n          ),\n        ).pipe(Effect.forkScoped);\n      }\n    }\n    yield* Ref.set(subscribedAdapters, next);\n  });\n\n  const instanceChanges = yield* registry.subscribeChanges;\n  yield* reconcileInstanceSubscriptions;\n  yield* Stream.runForEach(\n    Stream.fromSubscription(instanceChanges),\n    () => reconcileInstanceSubscriptions,\n  ).pipe(Effect.forkScoped);\n\n  const recoverSessionForThread = Effect.fn(\"recoverSessionForThread\")(function* (input: {\n    readonly binding: ProviderRuntimeBinding;\n    readonly operation: string;\n  }) {\n    const bindingInstanceId = yield* requireBindingInstanceId(input.operation, input.binding);\n    yield* Effect.annotateCurrentSpan({\n      \"provider.operation\": \"recover-session\",\n      \"provider.kind\": input.binding.provider,\n      \"provider.instance_id\": bindingInstanceId,\n      \"provider.thread_id\": input.binding.threadId,\n    });\n    return yield* Effect.gen(function* () {\n      const adapter = yield* registry.getByInstance(bindingInstanceId);\n      const hasResumeCursor =\n        input.binding.resumeCursor !== null && input.binding.resumeCursor !== undefined;\n      const hasActiveSession = yield* adapter.hasSession(input.binding.threadId);\n      if (hasActiveSession) {\n        const activeSessions = yield* adapter.listSessions();\n        const existing = activeSessions.find(\n          (session) => session.threadId === input.binding.threadId,\n        );\n        if (existing) {\n          yield* upsertSessionBinding(\n            { ...existing, providerInstanceId: bindingInstanceId },\n            input.binding.threadId,\n          );\n          yield* analytics.record(\"provider.session.recovered\", {\n            provider: existing.provider,\n            strategy: \"adopt-existing\",\n            hasResumeCursor: existing.resumeCursor !== undefined,\n          });\n          return { adapter, session: existing } as const;\n        }\n      }\n\n      if (!hasResumeCursor) {\n        return yield* toValidationError(\n          input.operation,\n          `Cannot recover thread '${input.binding.threadId}' because no provider resume state is persisted.`,\n        );\n      }\n\n      const persistedCwd = readPersistedCwd(input.binding.runtimePayload);\n      const persistedModelSelection = readPersistedModelSelection(input.binding.runtimePayload);\n\n      const resumed = yield* adapter.startSession({\n        threadId: input.binding.threadId,\n        provider: input.binding.provider,\n        providerInstanceId: bindingInstanceId,\n        ...(persistedCwd ? { cwd: persistedCwd } : {}),\n        ...(persistedModelSelection ? { modelSelection: persistedModelSelection } : {}),\n        ...(hasResumeCursor ? { resumeCursor: input.binding.resumeCursor } : {}),\n        runtimeMode: input.binding.runtimeMode ?? \"full-access\",\n      });\n      if (resumed.provider !== adapter.provider) {\n        return yield* toValidationError(\n          input.operation,\n          `Adapter/provider mismatch while recovering thread '${input.binding.threadId}'. Expected '${adapter.provider}', received '${resumed.provider}'.`,\n        );\n      }\n\n      yield* upsertSessionBinding(\n        { ...resumed, providerInstanceId: bindingInstanceId },\n        input.binding.threadId,\n      );\n      yield* analytics.record(\"provider.session.recovered\", {\n        provider: resumed.provider,\n        strategy: \"resume-thread\",\n        hasResumeCursor: resumed.resumeCursor !== undefined,\n      });\n      return { adapter, session: resumed } as const;\n    }).pipe(\n      withMetrics({\n        counter: providerSessionsTotal,\n        attributes: providerMetricAttributes(input.binding.provider, {\n          operation: \"recover\",\n        }),\n      }),\n    );\n  });\n\n  const resolveRoutableSession = Effect.fn(\"resolveRoutableSession\")(function* (input: {\n    readonly threadId: ThreadId;\n    readonly operation: string;\n    readonly allowRecovery: boolean;\n  }) {\n    const bindingOption = yield* directory.getBinding(input.threadId);\n    const binding = Option.getOrUndefined(bindingOption);\n    if (!binding) {\n      return yield* toValidationError(\n        input.operation,\n        `Cannot route thread '${input.threadId}' because no persisted provider binding exists.`,\n      );\n    }\n    const instanceId = yield* requireBindingInstanceId(input.operation, binding);\n    const adapter = yield* registry.getByInstance(instanceId);\n\n    const hasRequestedSession = yield* adapter.hasSession(input.threadId);\n    if (hasRequestedSession) {\n      return {\n        adapter,\n        instanceId,\n        threadId: input.threadId,\n        isActive: true,\n      } as const;\n    }\n\n    if (!input.allowRecovery) {\n      return {\n        adapter,\n        instanceId,\n        threadId: input.threadId,\n        isActive: false,\n      } as const;\n    }\n\n    const recovered = yield* recoverSessionForThread({\n      binding,\n      operation: input.operation,\n    });\n    return {\n      adapter: recovered.adapter,\n      instanceId,\n      threadId: input.threadId,\n      isActive: true,\n    } as const;\n  });\n\n  const stopStaleSessionsForThread = Effect.fn(\"stopStaleSessionsForThread\")(function* (input: {\n    readonly threadId: ThreadId;\n    readonly currentInstanceId: ProviderInstanceId;\n  }) {\n    const currentAdapters = yield* getAdapterEntries;\n    yield* Effect.forEach(\n      currentAdapters,\n      ([instanceId, adapter]) =>\n        instanceId === input.currentInstanceId\n          ? Effect.void\n          : Effect.gen(function* () {\n              const hasSession = yield* adapter.hasSession(input.threadId);\n              if (!hasSession) {\n                return;\n              }\n\n              yield* adapter.stopSession(input.threadId).pipe(\n                Effect.tap(() =>\n                  analytics.record(\"provider.session.stopped\", {\n                    provider: adapter.provider,\n                  }),\n                ),\n                Effect.catchCause((cause) =>\n                  Effect.logWarning(\"provider.session.stop-stale-failed\", {\n                    threadId: input.threadId,\n                    provider: adapter.provider,\n                    cause,\n                  }),\n                ),\n              );\n            }),\n      { discard: true },\n    );\n  });\n\n  const startSession: ProviderServiceShape[\"startSession\"] = Effect.fn(\"startSession\")(\n    function* (threadId, rawInput) {\n      const parsed = yield* decodeInputOrValidationError({\n        operation: \"ProviderService.startSession\",\n        schema: ProviderSessionStartInput,\n        payload: rawInput,\n      });\n\n      const resolvedInstanceId = yield* requireBindingInstanceId(\n        \"ProviderService.startSession\",\n        parsed,\n      );\n      let metricProvider = parsed.provider ?? String(resolvedInstanceId);\n      yield* Effect.annotateCurrentSpan({\n        \"provider.operation\": \"start-session\",\n        \"provider.instance_id\": resolvedInstanceId,\n        \"provider.thread_id\": threadId,\n        \"provider.runtime_mode\": parsed.runtimeMode,\n      });\n      return yield* Effect.gen(function* () {\n        const instanceInfo = yield* registry.getInstanceInfo(resolvedInstanceId);\n        const resolvedProvider = instanceInfo.driverKind;\n        metricProvider = resolvedProvider;\n        if (parsed.provider !== undefined && parsed.provider !== resolvedProvider) {\n          return yield* toValidationError(\n            \"ProviderService.startSession\",\n            `Provider instance '${resolvedInstanceId}' belongs to driver '${resolvedProvider}', not '${parsed.provider}'.`,\n          );\n        }\n        const input = {\n          ...parsed,\n          threadId,\n          provider: resolvedProvider,\n        };\n        if (!instanceInfo.enabled) {\n          return yield* toValidationError(\n            \"ProviderService.startSession\",\n            `Provider instance '${resolvedInstanceId}' is disabled in Salchi settings.`,\n          );\n        }\n        const persistedBinding = Option.getOrUndefined(yield* directory.getBinding(threadId));\n        const effectiveResumeCursor =\n          input.resumeCursor ??\n          (persistedBinding?.providerInstanceId === resolvedInstanceId\n            ? persistedBinding.resumeCursor\n            : undefined);\n        const effectiveCwd =\n          input.cwd ??\n          (persistedBinding?.providerInstanceId === resolvedInstanceId\n            ? readPersistedCwd(persistedBinding.runtimePayload)\n            : undefined);\n        yield* Effect.annotateCurrentSpan({\n          \"provider.kind\": resolvedProvider,\n          \"provider.resume_cursor.source\":\n            input.resumeCursor !== undefined\n              ? \"request\"\n              : effectiveResumeCursor !== undefined &&\n                  persistedBinding?.providerInstanceId === resolvedInstanceId\n                ? \"persisted\"\n                : \"none\",\n          \"provider.resume_cursor.present\": effectiveResumeCursor !== undefined,\n          \"provider.cwd.source\":\n            input.cwd !== undefined\n              ? \"request\"\n              : effectiveCwd !== undefined &&\n                  persistedBinding?.providerInstanceId === resolvedInstanceId\n                ? \"persisted\"\n                : \"none\",\n          \"provider.cwd.effective\": effectiveCwd ?? \"\",\n        });\n        const adapter = yield* registry.getByInstance(resolvedInstanceId);\n        const session = yield* adapter.startSession({\n          ...input,\n          providerInstanceId: resolvedInstanceId,\n          ...(effectiveCwd !== undefined ? { cwd: effectiveCwd } : {}),\n          ...(effectiveResumeCursor !== undefined ? { resumeCursor: effectiveResumeCursor } : {}),\n        });\n\n        if (session.provider !== adapter.provider) {\n          return yield* toValidationError(\n            \"ProviderService.startSession\",\n            `Adapter/provider mismatch: requested '${adapter.provider}', received '${session.provider}'.`,\n          );\n        }\n        const sessionWithInstance = {\n          ...session,\n          providerInstanceId: resolvedInstanceId,\n        };\n\n        yield* stopStaleSessionsForThread({\n          threadId,\n          currentInstanceId: resolvedInstanceId,\n        });\n        yield* upsertSessionBinding(sessionWithInstance, threadId, {\n          modelSelection: input.modelSelection,\n        });\n        yield* analytics.record(\"provider.session.started\", {\n          provider: sessionWithInstance.provider,\n          runtimeMode: input.runtimeMode,\n          hasResumeCursor: sessionWithInstance.resumeCursor !== undefined,\n          hasCwd: typeof effectiveCwd === \"string\" && effectiveCwd.trim().length > 0,\n          hasModel:\n            typeof input.modelSelection?.model === \"string\" &&\n            input.modelSelection.model.trim().length > 0,\n        });\n\n        return sessionWithInstance;\n      }).pipe(\n        withMetrics({\n          counter: providerSessionsTotal,\n          attributes: () =>\n            providerMetricAttributes(metricProvider, {\n              operation: \"start\",\n            }),\n        }),\n      );\n    },\n  );\n\n  const registerMaterializedSessionBinding: ProviderServiceShape[\"registerMaterializedSessionBinding\"] =\n    Effect.fn(\"registerMaterializedSessionBinding\")(function* (input) {\n      const instanceInfo = yield* registry.getInstanceInfo(input.providerInstanceId);\n      if (instanceInfo.driverKind !== input.provider) {\n        return yield* toValidationError(\n          \"ProviderService.registerMaterializedSessionBinding\",\n          `Provider instance '${input.providerInstanceId}' belongs to driver '${instanceInfo.driverKind}', not '${input.provider}'.`,\n        );\n      }\n      yield* directory.upsert({\n        threadId: input.threadId,\n        provider: input.provider,\n        providerInstanceId: input.providerInstanceId,\n        runtimeMode: input.runtimeMode,\n        resumeCursor: input.resumeCursor,\n        runtimePayload: input.runtimePayload,\n        status: input.status,\n      });\n    });\n\n  const sendTurn: ProviderServiceShape[\"sendTurn\"] = Effect.fn(\"sendTurn\")(function* (rawInput) {\n    const parsed = yield* decodeInputOrValidationError({\n      operation: \"ProviderService.sendTurn\",\n      schema: ProviderSendTurnInput,\n      payload: rawInput,\n    });\n\n    const input = {\n      ...parsed,\n      attachments: parsed.attachments ?? [],\n    };\n    if (!input.input && input.attachments.length === 0) {\n      return yield* toValidationError(\n        \"ProviderService.sendTurn\",\n        \"Either input text or at least one attachment is required\",\n      );\n    }\n    yield* Effect.annotateCurrentSpan({\n      \"provider.operation\": \"send-turn\",\n      \"provider.thread_id\": input.threadId,\n      \"provider.interaction_mode\": input.interactionMode,\n      \"provider.attachment_count\": input.attachments.length,\n    });\n    let metricProvider = \"unknown\";\n    let metricModel = input.modelSelection?.model;\n    return yield* Effect.gen(function* () {\n      const routed = yield* resolveRoutableSession({\n        threadId: input.threadId,\n        operation: \"ProviderService.sendTurn\",\n        allowRecovery: true,\n      });\n      metricProvider = routed.adapter.provider;\n      metricModel = input.modelSelection?.model;\n      yield* Effect.annotateCurrentSpan({\n        \"provider.kind\": routed.adapter.provider,\n        ...(input.modelSelection?.model ? { \"provider.model\": input.modelSelection.model } : {}),\n      });\n      const turn = yield* routed.adapter.sendTurn(input);\n      yield* directory.upsert({\n        threadId: input.threadId,\n        provider: routed.adapter.provider,\n        providerInstanceId: routed.instanceId,\n        status: \"running\",\n        ...(turn.resumeCursor !== undefined ? { resumeCursor: turn.resumeCursor } : {}),\n        runtimePayload: {\n          ...(input.modelSelection !== undefined ? { modelSelection: input.modelSelection } : {}),\n          activeTurnId: turn.turnId,\n          lastRuntimeEvent: \"provider.sendTurn\",\n          lastRuntimeEventAt: yield* nowIso,\n        },\n      });\n      yield* analytics.record(\"provider.turn.sent\", {\n        provider: routed.adapter.provider,\n        model: input.modelSelection?.model,\n        interactionMode: input.interactionMode,\n        attachmentCount: input.attachments.length,\n        hasInput: typeof input.input === \"string\" && input.input.trim().length > 0,\n      });\n      return turn;\n    }).pipe(\n      withMetrics({\n        counter: providerTurnsTotal,\n        timer: providerTurnDuration,\n        attributes: () =>\n          providerTurnMetricAttributes({\n            provider: metricProvider,\n            model: metricModel,\n            extra: {\n              operation: \"send\",\n            },\n          }),\n      }),\n    );\n  });\n\n  const steerTurn: ProviderServiceShape[\"steerTurn\"] = Effect.fn(\"steerTurn\")(function* (rawInput) {\n    const parsed = yield* decodeInputOrValidationError({\n      operation: \"ProviderService.steerTurn\",\n      schema: ProviderSteerTurnInput,\n      payload: rawInput,\n    });\n    const input = {\n      ...parsed,\n      attachments: parsed.attachments ?? [],\n    };\n    if (!input.input && input.attachments.length === 0) {\n      return yield* toValidationError(\n        \"ProviderService.steerTurn\",\n        \"Either input text or at least one attachment is required\",\n      );\n    }\n\n    const routed = yield* resolveRoutableSession({\n      threadId: input.threadId,\n      operation: \"ProviderService.steerTurn\",\n      allowRecovery: false,\n    });\n    if (!routed.isActive) {\n      return yield* toValidationError(\n        \"ProviderService.steerTurn\",\n        `Cannot steer thread '${input.threadId}' because no active provider session exists`,\n      );\n    }\n    if (routed.adapter.capabilities.activeTurnSteering === \"unsupported\") {\n      return yield* toValidationError(\n        \"ProviderService.steerTurn\",\n        `Provider '${routed.adapter.provider}' does not support active-turn steering`,\n      );\n    }\n\n    yield* Effect.annotateCurrentSpan({\n      \"provider.operation\": \"steer-turn\",\n      \"provider.kind\": routed.adapter.provider,\n      \"provider.thread_id\": input.threadId,\n      \"provider.turn_id\": input.expectedTurnId,\n      \"provider.attachment_count\": input.attachments.length,\n    });\n    const turn = yield* routed.adapter.steerTurn(input);\n    if (turn.turnId !== input.expectedTurnId) {\n      return yield* toValidationError(\n        \"ProviderService.steerTurn\",\n        `Provider returned turn '${turn.turnId}' while steering expected turn '${input.expectedTurnId}'`,\n      );\n    }\n    return turn;\n  });\n\n  const interruptTurn: ProviderServiceShape[\"interruptTurn\"] = Effect.fn(\"interruptTurn\")(\n    function* (rawInput) {\n      const input = yield* decodeInputOrValidationError({\n        operation: \"ProviderService.interruptTurn\",\n        schema: ProviderInterruptTurnInput,\n        payload: rawInput,\n      });\n      let metricProvider = \"unknown\";\n      return yield* Effect.gen(function* () {\n        const routed = yield* resolveRoutableSession({\n          threadId: input.threadId,\n          operation: \"ProviderService.interruptTurn\",\n          allowRecovery: true,\n        });\n        metricProvider = routed.adapter.provider;\n        yield* Effect.annotateCurrentSpan({\n          \"provider.operation\": \"interrupt-turn\",\n          \"provider.kind\": routed.adapter.provider,\n          \"provider.thread_id\": input.threadId,\n          \"provider.turn_id\": input.turnId,\n        });\n        yield* routed.adapter.interruptTurn(routed.threadId, input.turnId);\n        yield* analytics.record(\"provider.turn.interrupted\", {\n          provider: routed.adapter.provider,\n        });\n      }).pipe(\n        withMetrics({\n          counter: providerTurnsTotal,\n          outcomeAttributes: () =>\n            providerMetricAttributes(metricProvider, {\n              operation: \"interrupt\",\n            }),\n        }),\n      );\n    },\n  );\n\n  const respondToRequest: ProviderServiceShape[\"respondToRequest\"] = Effect.fn(\"respondToRequest\")(\n    function* (rawInput) {\n      const input = yield* decodeInputOrValidationError({\n        operation: \"ProviderService.respondToRequest\",\n        schema: ProviderRespondToRequestInput,\n        payload: rawInput,\n      });\n      let metricProvider = \"unknown\";\n      return yield* Effect.gen(function* () {\n        const routed = yield* resolveRoutableSession({\n          threadId: input.threadId,\n          operation: \"ProviderService.respondToRequest\",\n          allowRecovery: true,\n        });\n        metricProvider = routed.adapter.provider;\n        yield* Effect.annotateCurrentSpan({\n          \"provider.operation\": \"respond-to-request\",\n          \"provider.kind\": routed.adapter.provider,\n          \"provider.thread_id\": input.threadId,\n          \"provider.request_id\": input.requestId,\n        });\n        if (input.decision === \"acceptForSession\") {\n          yield* directory.upsert({\n            threadId: input.threadId,\n            provider: routed.adapter.provider,\n            providerInstanceId: routed.instanceId,\n            runtimePayload: {\n              approvalGranted: true,\n            },\n          });\n        }\n        yield* routed.adapter.respondToRequest(routed.threadId, input.requestId, input.decision);\n        yield* analytics.record(\"provider.request.responded\", {\n          provider: routed.adapter.provider,\n          decision: input.decision,\n        });\n      }).pipe(\n        withMetrics({\n          counter: providerTurnsTotal,\n          outcomeAttributes: () =>\n            providerMetricAttributes(metricProvider, {\n              operation: \"approval-response\",\n            }),\n        }),\n      );\n    },\n  );\n\n  const respondToUserInput: ProviderServiceShape[\"respondToUserInput\"] = Effect.fn(\n    \"respondToUserInput\",\n  )(function* (rawInput) {\n    const input = yield* decodeInputOrValidationError({\n      operation: \"ProviderService.respondToUserInput\",\n      schema: ProviderRespondToUserInputInput,\n      payload: rawInput,\n    });\n    let metricProvider = \"unknown\";\n    return yield* Effect.gen(function* () {\n      const routed = yield* resolveRoutableSession({\n        threadId: input.threadId,\n        operation: \"ProviderService.respondToUserInput\",\n        allowRecovery: true,\n      });\n      metricProvider = routed.adapter.provider;\n      yield* Effect.annotateCurrentSpan({\n        \"provider.operation\": \"respond-to-user-input\",\n        \"provider.kind\": routed.adapter.provider,\n        \"provider.thread_id\": input.threadId,\n        \"provider.request_id\": input.requestId,\n      });\n      yield* routed.adapter.respondToUserInput(routed.threadId, input.requestId, input.answers);\n    }).pipe(\n      withMetrics({\n        counter: providerTurnsTotal,\n        outcomeAttributes: () =>\n          providerMetricAttributes(metricProvider, {\n            operation: \"user-input-response\",\n          }),\n      }),\n    );\n  });\n\n  const stopSession: ProviderServiceShape[\"stopSession\"] = Effect.fn(\"stopSession\")(\n    function* (rawInput) {\n      const input = yield* decodeInputOrValidationError({\n        operation: \"ProviderService.stopSession\",\n        schema: ProviderStopSessionInput,\n        payload: rawInput,\n      });\n      let metricProvider = \"unknown\";\n      return yield* Effect.gen(function* () {\n        const routed = yield* resolveRoutableSession({\n          threadId: input.threadId,\n          operation: \"ProviderService.stopSession\",\n          allowRecovery: false,\n        });\n        metricProvider = routed.adapter.provider;\n        yield* Effect.annotateCurrentSpan({\n          \"provider.operation\": \"stop-session\",\n          \"provider.kind\": routed.adapter.provider,\n          \"provider.thread_id\": input.threadId,\n        });\n        if (routed.isActive) {\n          yield* routed.adapter.stopSession(routed.threadId);\n        }\n        yield* directory.upsert({\n          threadId: input.threadId,\n          provider: routed.adapter.provider,\n          providerInstanceId: routed.instanceId,\n          status: \"stopped\",\n          runtimePayload: {\n            activeTurnId: null,\n          },\n        });\n        yield* analytics.record(\"provider.session.stopped\", {\n          provider: routed.adapter.provider,\n        });\n      }).pipe(\n        withMetrics({\n          counter: providerSessionsTotal,\n          outcomeAttributes: () =>\n            providerMetricAttributes(metricProvider, {\n              operation: \"stop\",\n            }),\n        }),\n      );\n    },\n  );\n\n  const listSessions: ProviderServiceShape[\"listSessions\"] = Effect.fn(\"listSessions\")(\n    function* () {\n      const currentAdapters = yield* getAdapterEntries;\n      const sessionsByProvider = yield* Effect.forEach(currentAdapters, ([instanceId, adapter]) =>\n        adapter.listSessions().pipe(\n          Effect.map((sessions) =>\n            sessions.map((session) => ({\n              ...session,\n              providerInstanceId: instanceId,\n            })),\n          ),\n        ),\n      );\n      const activeSessions = sessionsByProvider.flatMap((sessions) => sessions);\n      const persistedBindings = yield* directory.listThreadIds().pipe(\n        Effect.flatMap((threadIds) =>\n          Effect.forEach(\n            threadIds,\n            (threadId) =>\n              directory\n                .getBinding(threadId)\n                .pipe(Effect.orElseSucceed(() => Option.none<ProviderRuntimeBinding>())),\n            { concurrency: \"unbounded\" },\n          ),\n        ),\n        Effect.orElseSucceed(() => [] as Array<Option.Option<ProviderRuntimeBinding>>),\n      );\n      const bindingsByThreadId = new Map<ThreadId, ProviderRuntimeBinding>();\n      for (const bindingOption of persistedBindings) {\n        const binding = Option.getOrUndefined(bindingOption);\n        if (binding) {\n          bindingsByThreadId.set(binding.threadId, binding);\n        }\n      }\n\n      const sessions: ProviderSession[] = [];\n      for (const session of activeSessions) {\n        const binding = bindingsByThreadId.get(session.threadId);\n        if (!binding) {\n          sessions.push(session);\n          continue;\n        }\n\n        const overrides: {\n          resumeCursor?: ProviderSession[\"resumeCursor\"];\n          runtimeMode?: ProviderSession[\"runtimeMode\"];\n          providerInstanceId?: ProviderSession[\"providerInstanceId\"];\n        } = {};\n        overrides.providerInstanceId = dieOnMissingBindingInstanceId(\n          \"ProviderService.listSessions\",\n          binding,\n        );\n        if (binding.provider !== session.provider) {\n          return yield* Effect.die(\n            new Error(\n              `ProviderService.listSessions: thread '${session.threadId}' is active on provider '${session.provider}' but persisted binding names provider '${binding.provider}'.`,\n            ),\n          );\n        }\n        if (overrides.providerInstanceId !== session.providerInstanceId) {\n          return yield* Effect.die(\n            new Error(\n              `ProviderService.listSessions: thread '${session.threadId}' is active on provider instance '${session.providerInstanceId}' but persisted binding names '${overrides.providerInstanceId}'.`,\n            ),\n          );\n        }\n        if (session.resumeCursor === undefined && binding.resumeCursor !== undefined) {\n          overrides.resumeCursor = binding.resumeCursor;\n        }\n        if (binding.runtimeMode !== undefined) {\n          overrides.runtimeMode = binding.runtimeMode;\n        }\n        sessions.push(Object.assign({}, session, overrides));\n      }\n      return sessions;\n    },\n  );\n\n  const getCapabilities: ProviderServiceShape[\"getCapabilities\"] = (instanceId) =>\n    registry.getByInstance(instanceId).pipe(Effect.map((adapter) => adapter.capabilities));\n\n  const getInstanceInfo: ProviderServiceShape[\"getInstanceInfo\"] = (instanceId) =>\n    registry.getInstanceInfo(instanceId);\n\n  const rollbackConversation: ProviderServiceShape[\"rollbackConversation\"] = Effect.fn(\n    \"rollbackConversation\",\n  )(function* (rawInput) {\n    const input = yield* decodeInputOrValidationError({\n      operation: \"ProviderService.rollbackConversation\",\n      schema: ProviderRollbackConversationInput,\n      payload: rawInput,\n    });\n    if (input.numTurns === 0) {\n      return;\n    }\n    let metricProvider = \"unknown\";\n    return yield* Effect.gen(function* () {\n      const routed = yield* resolveRoutableSession({\n        threadId: input.threadId,\n        operation: \"ProviderService.rollbackConversation\",\n        allowRecovery: true,\n      });\n      metricProvider = routed.adapter.provider;\n      yield* Effect.annotateCurrentSpan({\n        \"provider.operation\": \"rollback-conversation\",\n        \"provider.kind\": routed.adapter.provider,\n        \"provider.thread_id\": input.threadId,\n        \"provider.rollback_turns\": input.numTurns,\n      });\n      yield* routed.adapter.rollbackThread(routed.threadId, input.numTurns);\n      yield* analytics.record(\"provider.conversation.rolled_back\", {\n        provider: routed.adapter.provider,\n        turns: input.numTurns,\n      });\n    }).pipe(\n      withMetrics({\n        counter: providerTurnsTotal,\n        outcomeAttributes: () =>\n          providerMetricAttributes(metricProvider, {\n            operation: \"rollback\",\n          }),\n      }),\n    );\n  });\n\n  const refreshUsageUncached: ProviderServiceShape[\"refreshUsage\"] = Effect.fn(\n    \"refreshUsageUncached\",\n  )(function* () {\n    const entries = yield* getAdapterEntries;\n    yield* Effect.forEach(\n      entries,\n      ([instanceId, adapter]) => {\n        const refresh = adapter.refreshUsage;\n        if (!refresh) {\n          return Effect.void;\n        }\n        return refresh().pipe(\n          Effect.catchCause((cause) =>\n            Effect.logDebug(\"provider.usage.refresh-failed\", {\n              instanceId,\n              provider: adapter.provider,\n              cause,\n            }),\n          ),\n        );\n      },\n      { concurrency: 2, discard: true },\n    );\n\n    const accountRateLimits = yield* Effect.forEach(\n      entries,\n      ([instanceId, adapter]) =>\n        Effect.gen(function* () {\n          const getAccountRateLimits = adapter.getAccountRateLimits;\n          if (!getAccountRateLimits) {\n            return [];\n          }\n          const rateLimits = yield* getAccountRateLimits().pipe(\n            Effect.catchCause((cause) =>\n              Effect.logDebug(\"provider.account-rate-limits.failed\", {\n                instanceId,\n                provider: adapter.provider,\n                cause,\n              }).pipe(Effect.as(undefined)),\n            ),\n          );\n          if (rateLimits === undefined) {\n            return [];\n          }\n          return [\n            {\n              providerInstanceId: instanceId,\n              provider: adapter.provider,\n              rateLimits,\n            },\n          ];\n        }),\n      { concurrency: 2 },\n    ).pipe(Effect.map((results) => results.flat()));\n\n    return { accountRateLimits };\n  });\n\n  const refreshUsage: ProviderServiceShape[\"refreshUsage\"] = () =>\n    usageRefreshSemaphore.withPermit(\n      Effect.gen(function* () {\n        const nowMs = options?.now?.() ?? (yield* Clock.currentTimeMillis);\n        if (cachedUsageRefresh && cachedUsageRefresh.expiresAtMs > nowMs) {\n          return cachedUsageRefresh.value;\n        }\n        return yield* refreshUsageUncached().pipe(\n          Effect.tap((value) =>\n            Effect.gen(function* () {\n              const refreshedAtMs = options?.now?.() ?? (yield* Clock.currentTimeMillis);\n              cachedUsageRefresh = {\n                expiresAtMs:\n                  refreshedAtMs +\n                  Math.max(0, options?.usageCacheTtlMs ?? PROVIDER_USAGE_CACHE_TTL_MS),\n                value,\n              };\n            }),\n          ),\n        );\n      }),\n    );\n\n  const runStopAll = Effect.fn(\"runStopAll\")(function* () {\n    const threadIds = yield* directory.listThreadIds();\n    const currentAdapters = yield* getAdapterEntries;\n    const activeSessions = yield* Effect.forEach(currentAdapters, ([instanceId, adapter]) =>\n      adapter.listSessions().pipe(\n        Effect.map((sessions) =>\n          sessions.map((session) => ({\n            ...session,\n            providerInstanceId: instanceId,\n          })),\n        ),\n      ),\n    ).pipe(Effect.map((sessionsByAdapter) => sessionsByAdapter.flatMap((sessions) => sessions)));\n    yield* Effect.forEach(activeSessions, (session) =>\n      Effect.flatMap(nowIso, (lastRuntimeEventAt) =>\n        upsertSessionBinding(session, session.threadId, {\n          lastRuntimeEvent: \"provider.stopAll\",\n          lastRuntimeEventAt,\n        }),\n      ),\n    ).pipe(Effect.asVoid);\n    yield* Effect.forEach(currentAdapters, ([, adapter]) => adapter.stopAll()).pipe(Effect.asVoid);\n    const bindings = yield* directory.listBindings().pipe(Effect.orElseSucceed(() => []));\n    yield* Effect.forEach(bindings, (binding) =>\n      Effect.gen(function* () {\n        const providerInstanceId = dieOnMissingBindingInstanceId(\n          \"ProviderService.stopAll\",\n          binding,\n        );\n        return yield* directory.upsert({\n          threadId: binding.threadId,\n          provider: binding.provider,\n          providerInstanceId,\n          status: \"stopped\",\n          runtimePayload: {\n            activeTurnId: null,\n            lastRuntimeEvent: \"provider.stopAll\",\n            lastRuntimeEventAt: yield* nowIso,\n          },\n        });\n      }),\n    ).pipe(Effect.asVoid);\n    yield* analytics.record(\"provider.sessions.stopped_all\", {\n      sessionCount: threadIds.length,\n    });\n  });\n\n  yield* Effect.addFinalizer(() =>\n    runStopAll().pipe(\n      Effect.catchCause((cause) =>\n        Effect.logWarning(\"failed to stop provider service\", { cause: Cause.pretty(cause) }),\n      ),\n    ),\n  );\n\n  return {\n    startSession,\n    registerMaterializedSessionBinding,\n    sendTurn,\n    steerTurn,\n    interruptTurn,\n    respondToRequest,\n    respondToUserInput,\n    stopSession,\n    listSessions,\n    getCapabilities,\n    getInstanceInfo,\n    rollbackConversation,\n    refreshUsage,\n    // Each access creates a fresh PubSub subscription so that multiple\n    // consumers (ProviderRuntimeIngestion, CheckpointReactor, etc.) each\n    // independently receive all runtime events.\n    get streamEvents(): ProviderServiceShape[\"streamEvents\"] {\n      return Stream.fromPubSub(runtimeEventPubSub);\n    },\n  } satisfies ProviderServiceShape;\n});\n\nexport const ProviderServiceLive = Layer.effect(ProviderService, makeProviderService());\n\nexport function makeProviderServiceLive(options?: ProviderServiceLiveOptions) {\n  return Layer.effect(ProviderService, makeProviderService(options));\n}\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n","import * as Clock from \"effect/Clock\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schedule from \"effect/Schedule\";\nimport type { OrchestrationThreadActivity, OrchestrationThreadShell } from \"@salchi/contracts\";\nimport { isRecord } from \"@salchi/shared/Record\";\n\nimport { ProjectionSnapshotQuery } from \"../../orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport { ProviderSessionDirectory } from \"../Services/ProviderSessionDirectory.ts\";\nimport {\n  ProviderSessionReaper,\n  type ProviderSessionReaperShape,\n} from \"../Services/ProviderSessionReaper.ts\";\nimport { ProviderService } from \"../Services/ProviderService.ts\";\n\nconst DEFAULT_INACTIVITY_THRESHOLD_MS = 10 * 60 * 1000;\nconst DEFAULT_SWEEP_INTERVAL_MS = 60 * 1000;\nconst DEFAULT_MAX_IDLE_READY_ROOT_SESSIONS = 4;\n\nexport interface ProviderSessionReaperLiveOptions {\n  readonly inactivityThresholdMs?: number;\n  readonly sweepIntervalMs?: number;\n  readonly maxIdleReadyRootSessions?: number;\n}\n\nfunction activityIdentity(\n  activity: OrchestrationThreadActivity,\n  field: \"taskId\" | \"subagentId\",\n): string | null {\n  if (!isRecord(activity.payload)) {\n    return null;\n  }\n  const value = activity.payload[field];\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction subagentActivityIsTerminal(activity: OrchestrationThreadActivity): boolean {\n  if (!isRecord(activity.payload)) {\n    return false;\n  }\n  return (\n    activity.payload.status === \"completed\" ||\n    activity.payload.status === \"failed\" ||\n    activity.payload.status === \"stopped\" ||\n    activity.payload.status === \"interrupted\"\n  );\n}\n\nexport function hasLiveBackgroundActivity(\n  activities: ReadonlyArray<OrchestrationThreadActivity>,\n): boolean {\n  const liveTasks = new Set<string>();\n  const liveSubagents = new Set<string>();\n\n  for (const activity of activities) {\n    if (activity.kind === \"task.started\" || activity.kind === \"task.progress\") {\n      const taskId = activityIdentity(activity, \"taskId\");\n      if (taskId) liveTasks.add(taskId);\n    } else if (activity.kind === \"task.completed\") {\n      const taskId = activityIdentity(activity, \"taskId\");\n      if (taskId) liveTasks.delete(taskId);\n    } else if (activity.kind === \"subagent.started\" || activity.kind === \"subagent.updated\") {\n      const subagentId = activityIdentity(activity, \"subagentId\");\n      if (subagentId) {\n        if (subagentActivityIsTerminal(activity)) {\n          liveSubagents.delete(subagentId);\n        } else {\n          liveSubagents.add(subagentId);\n        }\n      }\n    } else if (activity.kind === \"subagent.completed\") {\n      const subagentId = activityIdentity(activity, \"subagentId\");\n      if (subagentId) liveSubagents.delete(subagentId);\n    }\n  }\n\n  return liveTasks.size > 0 || liveSubagents.size > 0;\n}\n\nexport function threadIdsWithLiveDescendants(\n  threads: ReadonlyArray<OrchestrationThreadShell>,\n): ReadonlySet<string> {\n  const threadsById = new Map(threads.map((thread) => [String(thread.id), thread]));\n  const owners = new Set<string>();\n  for (const thread of threads) {\n    const session = thread.session;\n    if (\n      session?.activeTurnId == null &&\n      session?.status !== \"starting\" &&\n      session?.status !== \"running\"\n    ) {\n      continue;\n    }\n\n    let ownerId = thread.createdByThreadId;\n    const visited = new Set<string>();\n    while (ownerId !== null && !visited.has(String(ownerId))) {\n      const normalizedOwnerId = String(ownerId);\n      visited.add(normalizedOwnerId);\n      owners.add(normalizedOwnerId);\n      ownerId = threadsById.get(normalizedOwnerId)?.createdByThreadId ?? null;\n    }\n  }\n  return owners;\n}\n\nconst makeProviderSessionReaper = (options?: ProviderSessionReaperLiveOptions) =>\n  Effect.gen(function* () {\n    const providerService = yield* ProviderService;\n    const directory = yield* ProviderSessionDirectory;\n    const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n\n    const inactivityThresholdMs = Math.max(\n      1,\n      options?.inactivityThresholdMs ?? DEFAULT_INACTIVITY_THRESHOLD_MS,\n    );\n    const sweepIntervalMs = Math.max(1, options?.sweepIntervalMs ?? DEFAULT_SWEEP_INTERVAL_MS);\n    const maxIdleReadyRootSessions = Math.max(\n      0,\n      options?.maxIdleReadyRootSessions ?? DEFAULT_MAX_IDLE_READY_ROOT_SESSIONS,\n    );\n\n    const sweep = Effect.gen(function* () {\n      const bindings = yield* directory.listBindings();\n      const shellSnapshot = yield* projectionSnapshotQuery.getShellSnapshot();\n      const threadsById = new Map(shellSnapshot.threads.map((thread) => [thread.id, thread]));\n      const liveDescendantOwnerIds = threadIdsWithLiveDescendants(shellSnapshot.threads);\n      const now = yield* Clock.currentTimeMillis;\n      let reapedCount = 0;\n      const candidates: Array<{\n        readonly binding: (typeof bindings)[number];\n        readonly idleDurationMs: number;\n        readonly lastSeenMs: number;\n        readonly isIdleReadyRoot: boolean;\n      }> = [];\n\n      for (const binding of bindings) {\n        if (binding.status === \"stopped\") {\n          continue;\n        }\n\n        const lastSeenMs = Date.parse(binding.lastSeenAt);\n        if (Number.isNaN(lastSeenMs)) {\n          yield* Effect.logWarning(\"provider.session.reaper.invalid-last-seen\", {\n            threadId: binding.threadId,\n            provider: binding.provider,\n            lastSeenAt: binding.lastSeenAt,\n          });\n          continue;\n        }\n\n        const idleDurationMs = now - lastSeenMs;\n        const thread = threadsById.get(binding.threadId);\n        const isIdleReadyRoot =\n          thread?.createdByThreadId == null && thread?.session?.status === \"ready\";\n        if (thread?.session?.activeTurnId != null) {\n          yield* Effect.logDebug(\"provider.session.reaper.skipped-active-turn\", {\n            threadId: binding.threadId,\n            activeTurnId: thread.session.activeTurnId,\n            idleDurationMs,\n          });\n          continue;\n        }\n\n        if (idleDurationMs < inactivityThresholdMs && !isIdleReadyRoot) {\n          continue;\n        }\n\n        if (liveDescendantOwnerIds.has(String(binding.threadId))) {\n          yield* Effect.logDebug(\"provider.session.reaper.skipped-live-descendant\", {\n            threadId: binding.threadId,\n            idleDurationMs,\n          });\n          continue;\n        }\n\n        const hasBackgroundActivity = yield* projectionSnapshotQuery\n          .getThreadDetailById(binding.threadId)\n          .pipe(\n            Effect.map(\n              Option.match({\n                onNone: () => false,\n                onSome: (detail) => hasLiveBackgroundActivity(detail.activities),\n              }),\n            ),\n            Effect.catchCause((cause) =>\n              Effect.logWarning(\"provider.session.reaper.background-check-failed\", {\n                threadId: binding.threadId,\n                cause,\n              }).pipe(Effect.as(true)),\n            ),\n          );\n        if (hasBackgroundActivity) {\n          yield* Effect.logDebug(\"provider.session.reaper.skipped-background-work\", {\n            threadId: binding.threadId,\n            idleDurationMs,\n          });\n          continue;\n        }\n\n        candidates.push({\n          binding,\n          idleDurationMs,\n          lastSeenMs,\n          isIdleReadyRoot,\n        });\n      }\n\n      const overCapacityThreadIds = new Set(\n        candidates\n          .filter((candidate) => candidate.isIdleReadyRoot)\n          .toSorted(\n            (left, right) =>\n              right.lastSeenMs - left.lastSeenMs ||\n              String(right.binding.threadId).localeCompare(String(left.binding.threadId)),\n          )\n          .slice(maxIdleReadyRootSessions)\n          .map((candidate) => candidate.binding.threadId),\n      );\n\n      for (const candidate of candidates) {\n        const { binding, idleDurationMs } = candidate;\n        const reason =\n          idleDurationMs >= inactivityThresholdMs\n            ? \"inactivity_threshold\"\n            : overCapacityThreadIds.has(binding.threadId)\n              ? \"idle_ready_capacity\"\n              : null;\n        if (reason === null) {\n          continue;\n        }\n\n        const reaped = yield* providerService.stopSession({ threadId: binding.threadId }).pipe(\n          Effect.tap(() =>\n            Effect.logInfo(\"provider.session.reaped\", {\n              threadId: binding.threadId,\n              provider: binding.provider,\n              idleDurationMs,\n              reason,\n            }),\n          ),\n          Effect.as(true),\n          Effect.catchCause((cause) =>\n            Effect.logWarning(\"provider.session.reaper.stop-failed\", {\n              threadId: binding.threadId,\n              provider: binding.provider,\n              idleDurationMs,\n              cause,\n            }).pipe(Effect.as(false)),\n          ),\n        );\n\n        if (reaped) {\n          reapedCount += 1;\n        }\n      }\n\n      if (reapedCount > 0) {\n        yield* Effect.logInfo(\"provider.session.reaper.sweep-complete\", {\n          reapedCount,\n          totalBindings: bindings.length,\n        });\n      }\n    });\n\n    const start: ProviderSessionReaperShape[\"start\"] = () =>\n      Effect.gen(function* () {\n        yield* Effect.forkScoped(\n          sweep.pipe(\n            Effect.catch((error: unknown) =>\n              Effect.logWarning(\"provider.session.reaper.sweep-failed\", {\n                error,\n              }),\n            ),\n            Effect.catchDefect((defect: unknown) =>\n              Effect.logWarning(\"provider.session.reaper.sweep-defect\", {\n                defect,\n              }),\n            ),\n            Effect.repeat(Schedule.spaced(Duration.millis(sweepIntervalMs))),\n          ),\n        );\n\n        yield* Effect.logInfo(\"provider.session.reaper.started\", {\n          inactivityThresholdMs,\n          sweepIntervalMs,\n          maxIdleReadyRootSessions,\n        });\n      });\n\n    return {\n      start,\n    } satisfies ProviderSessionReaperShape;\n  });\n\nexport const makeProviderSessionReaperLive = (options?: ProviderSessionReaperLiveOptions) =>\n  Layer.effect(ProviderSessionReaper, makeProviderSessionReaper(options));\n\nexport const ProviderSessionReaperLive = makeProviderSessionReaperLive();\n","import type {\n  ProviderDriverKind,\n  ModelCapabilities,\n  ServerProvider,\n  ServerProviderAuth,\n  ServerProviderSkill,\n  ServerProviderSlashCommand,\n  ServerProviderModel,\n  ServerProviderState,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Data from \"effect/Data\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport { normalizeModelSlug } from \"@salchi/shared/model\";\nimport { isWindowsCommandNotFound } from \"../processRunner.ts\";\nimport { createProviderVersionAdvisory } from \"./providerMaintenance.ts\";\nimport { collectUint8StreamText } from \"../stream/collectUint8StreamText.ts\";\n\nexport const DEFAULT_TIMEOUT_MS = 4_000;\n// Auth status checks involve disk/network lookups and can be slow on first run (especially Windows)\nexport const AUTH_PROBE_TIMEOUT_MS = 10_000;\n\nexport interface CommandResult {\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly code: number;\n}\n\nexport class ProviderCommandExecutionError extends Data.TaggedError(\n  \"ProviderCommandExecutionError\",\n)<{\n  readonly message: string;\n}> {}\n\nexport interface ProviderProbeResult {\n  readonly installed: boolean;\n  readonly version: string | null;\n  readonly status: Exclude<ServerProviderState, \"disabled\">;\n  readonly auth: ServerProviderAuth;\n  readonly message?: string;\n}\n\nexport interface ServerProviderPresentation {\n  readonly displayName: string;\n  readonly badgeLabel?: string;\n  readonly showInteractionModeToggle?: boolean;\n  readonly requiresNewThreadForModelChange?: boolean;\n}\n\nexport type ServerProviderDraft = Omit<ServerProvider, \"instanceId\" | \"driver\">;\n\nexport function nonEmptyTrimmed(value: string | undefined): string | undefined {\n  if (!value) return undefined;\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function isCommandMissingCause(error: { readonly message: string }): boolean {\n  const lower = error.message.toLowerCase();\n  return lower.includes(\"enoent\") || lower.includes(\"notfound\");\n}\n\nexport const spawnAndCollect = (binaryPath: string, command: ChildProcess.Command) =>\n  Effect.gen(function* () {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const child = yield* spawner.spawn(command);\n    const [stdout, stderr, exitCode] = yield* Effect.all(\n      [\n        collectStreamAsString(child.stdout),\n        collectStreamAsString(child.stderr),\n        child.exitCode.pipe(Effect.map(Number)),\n      ],\n      { concurrency: \"unbounded\" },\n    );\n\n    const result: CommandResult = { stdout, stderr, code: exitCode };\n    if (isWindowsCommandNotFound(exitCode, stderr)) {\n      return yield* new ProviderCommandExecutionError({ message: `spawn ${binaryPath} ENOENT` });\n    }\n    return result;\n  }).pipe(Effect.scoped);\n\nexport function detailFromResult(\n  result: CommandResult & { readonly timedOut?: boolean },\n): string | undefined {\n  if (result.timedOut) return \"Timed out while running command.\";\n  const stderr = nonEmptyTrimmed(result.stderr);\n  if (stderr) return stderr;\n  const stdout = nonEmptyTrimmed(result.stdout);\n  if (stdout) return stdout;\n  if (result.code !== 0) {\n    return `Command exited with code ${result.code}.`;\n  }\n  return undefined;\n}\n\nexport function extractAuthBoolean(value: unknown): boolean | undefined {\n  if (globalThis.Array.isArray(value)) {\n    for (const entry of value) {\n      const nested = extractAuthBoolean(entry);\n      if (nested !== undefined) return nested;\n    }\n    return undefined;\n  }\n\n  if (!value || typeof value !== \"object\") return undefined;\n\n  const record = value as Record<string, unknown>;\n  for (const key of [\"authenticated\", \"isAuthenticated\", \"loggedIn\", \"isLoggedIn\"] as const) {\n    if (typeof record[key] === \"boolean\") return record[key];\n  }\n  for (const key of [\"auth\", \"status\", \"session\", \"account\"] as const) {\n    const nested = extractAuthBoolean(record[key]);\n    if (nested !== undefined) return nested;\n  }\n  return undefined;\n}\n\nexport function parseGenericCliVersion(output: string): string | null {\n  const match = output.match(/\\b(\\d+\\.\\d+\\.\\d+)\\b/);\n  return match?.[1] ?? null;\n}\n\nexport function providerModelsFromSettings(\n  builtInModels: ReadonlyArray<ServerProviderModel>,\n  provider: ProviderDriverKind,\n  customModels: ReadonlyArray<string>,\n  customModelCapabilities: ModelCapabilities,\n): ReadonlyArray<ServerProviderModel> {\n  const resolvedBuiltInModels = [...builtInModels];\n  const seen = new Set(resolvedBuiltInModels.map((model) => model.slug));\n  const customEntries: ServerProviderModel[] = [];\n\n  for (const candidate of customModels) {\n    const normalized = normalizeModelSlug(candidate, provider);\n    if (!normalized || seen.has(normalized)) {\n      continue;\n    }\n    seen.add(normalized);\n    customEntries.push({\n      slug: normalized,\n      name: normalized,\n      isCustom: true,\n      capabilities: customModelCapabilities,\n    });\n  }\n\n  return [...resolvedBuiltInModels, ...customEntries];\n}\n\nexport function buildSelectOptionDescriptor(input: {\n  readonly id: string;\n  readonly label: string;\n  readonly options:\n    | ReadonlyArray<{ value: string; label: string; isDefault?: boolean | undefined }>\n    | undefined;\n  readonly description?: string;\n  readonly promptInjectedValues?: ReadonlyArray<string>;\n}) {\n  const options = (input.options ?? []).map((option) =>\n    option.isDefault\n      ? { id: option.value, label: option.label, isDefault: true }\n      : { id: option.value, label: option.label },\n  );\n  const currentValue = options.find((option) => option.isDefault)?.id;\n  return {\n    id: input.id,\n    label: input.label,\n    type: \"select\" as const,\n    options,\n    ...(currentValue ? { currentValue } : {}),\n    ...(input.description ? { description: input.description } : {}),\n    ...(input.promptInjectedValues && input.promptInjectedValues.length > 0\n      ? { promptInjectedValues: [...input.promptInjectedValues] }\n      : {}),\n  };\n}\n\nexport function buildBooleanOptionDescriptor(input: {\n  readonly id: string;\n  readonly label: string;\n  readonly currentValue?: boolean;\n  readonly description?: string;\n}) {\n  return {\n    id: input.id,\n    label: input.label,\n    type: \"boolean\" as const,\n    ...(input.description ? { description: input.description } : {}),\n    ...(typeof input.currentValue === \"boolean\" ? { currentValue: input.currentValue } : {}),\n  };\n}\n\nexport function buildServerProvider(input: {\n  driver?: ProviderDriverKind;\n  presentation: ServerProviderPresentation;\n  enabled: boolean;\n  checkedAt: string;\n  models: ReadonlyArray<ServerProviderModel>;\n  slashCommands?: ReadonlyArray<ServerProviderSlashCommand>;\n  skills?: ReadonlyArray<ServerProviderSkill>;\n  probe: ProviderProbeResult;\n}): ServerProviderDraft {\n  const versionAdvisory = input.driver\n    ? createProviderVersionAdvisory({\n        driver: input.driver,\n        currentVersion: input.probe.version,\n        checkedAt: input.checkedAt,\n      })\n    : undefined;\n  return {\n    displayName: input.presentation.displayName,\n    ...(input.presentation.badgeLabel ? { badgeLabel: input.presentation.badgeLabel } : {}),\n    ...(typeof input.presentation.showInteractionModeToggle === \"boolean\"\n      ? { showInteractionModeToggle: input.presentation.showInteractionModeToggle }\n      : {}),\n    ...(typeof input.presentation.requiresNewThreadForModelChange === \"boolean\"\n      ? { requiresNewThreadForModelChange: input.presentation.requiresNewThreadForModelChange }\n      : {}),\n    enabled: input.enabled,\n    installed: input.probe.installed,\n    version: input.probe.version,\n    status: input.enabled ? input.probe.status : \"disabled\",\n    auth: input.probe.auth,\n    checkedAt: input.checkedAt,\n    ...(input.probe.message ? { message: input.probe.message } : {}),\n    models: input.models,\n    slashCommands: [...(input.slashCommands ?? [])],\n    skills: [...(input.skills ?? [])],\n    ...(versionAdvisory ? { versionAdvisory } : {}),\n  };\n}\n\nexport const collectStreamAsString = <E>(\n  stream: Stream.Stream<Uint8Array, E>,\n): Effect.Effect<string, E> =>\n  collectUint8StreamText({ stream }).pipe(Effect.map((collected) => collected.text));\n","import { pathToFileURL } from \"node:url\";\n\nimport type { ChatAttachment, ProviderApprovalDecision, RuntimeMode } from \"@salchi/contracts\";\nimport {\n  createOpencodeClient,\n  type Agent,\n  type FilePartInput,\n  type OpencodeClient,\n  type PermissionRuleset,\n  type ProviderListResponse,\n  type QuestionAnswer,\n  type QuestionRequest,\n} from \"@opencode-ai/sdk/v2\";\nimport * as Cause from \"effect/Cause\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as P from \"effect/Predicate\";\nimport * as Ref from \"effect/Ref\";\nimport * as Result from \"effect/Result\";\nimport * as Scope from \"effect/Scope\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { isWindowsCommandNotFound } from \"../processRunner.ts\";\nimport { collectStreamAsString } from \"./providerSnapshot.ts\";\nimport * as NetService from \"@salchi/shared/Net\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\nconst encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);\nconst OPENCODE_EMPTY_CONFIG_CONTENT = \"{}\";\n\nconst OPENCODE_SERVER_READY_PREFIX = \"opencode server listening\";\nconst DEFAULT_OPENCODE_SERVER_TIMEOUT_MS = 5_000;\nconst DEFAULT_HOSTNAME = \"127.0.0.1\";\nexport interface OpenCodeServerProcess {\n  readonly url: string;\n  readonly exitCode: Effect.Effect<number, never>;\n}\n\nexport interface OpenCodeServerConnection {\n  readonly url: string;\n  readonly exitCode: Effect.Effect<number, never> | null;\n  readonly external: boolean;\n}\n\nconst OPENCODE_RUNTIME_ERROR_TAG = \"OpenCodeRuntimeError\";\nexport class OpenCodeRuntimeError extends Data.TaggedError(OPENCODE_RUNTIME_ERROR_TAG)<{\n  readonly operation: string;\n  readonly cause?: unknown;\n  readonly detail: string;\n}> {\n  static readonly is = (u: unknown): u is OpenCodeRuntimeError =>\n    P.isTagged(u, OPENCODE_RUNTIME_ERROR_TAG);\n}\n\nfunction encodeJsonStringForDiagnostics(input: unknown): string | undefined {\n  const result = encodeUnknownJsonStringExit(input);\n  return Exit.isSuccess(result) ? result.value : undefined;\n}\n\nexport function openCodeRuntimeErrorDetail(cause: unknown): string {\n  if (OpenCodeRuntimeError.is(cause)) return cause.detail;\n  if (cause instanceof Error && cause.message.trim().length > 0) return cause.message.trim();\n  if (cause && typeof cause === \"object\") {\n    // SDK v2 throws { response, request, error? } shapes — extract what's useful\n    const anyCause = cause as Record<string, unknown>;\n    const status = (anyCause.response as { status?: number } | undefined)?.status;\n    const body = anyCause.error ?? anyCause.data ?? anyCause.body;\n    const encodedBody = encodeJsonStringForDiagnostics(body ?? cause);\n    if (encodedBody) {\n      return `status=${status ?? \"?\"} body=${encodedBody}`;\n    }\n  }\n  return String(cause);\n}\n\nexport const runOpenCodeSdk = <A>(\n  operation: string,\n  fn: () => Promise<A>,\n): Effect.Effect<A, OpenCodeRuntimeError> =>\n  Effect.tryPromise({\n    try: fn,\n    catch: (cause) =>\n      new OpenCodeRuntimeError({ operation, detail: openCodeRuntimeErrorDetail(cause), cause }),\n  }).pipe(Effect.withSpan(`opencode.${operation}`));\n\nexport interface OpenCodeCommandResult {\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly code: number;\n}\n\nexport interface OpenCodeInventory {\n  readonly providerList: ProviderListResponse;\n  readonly agents: ReadonlyArray<Agent>;\n}\n\nexport interface ParsedOpenCodeModelSlug {\n  readonly providerID: string;\n  readonly modelID: string;\n}\n\nexport interface OpenCodeRuntimeShape {\n  /**\n   * Spawns a local OpenCode server process. Its lifetime is bound to the caller's\n   * `Scope.Scope` — the child is killed automatically when that scope closes.\n   * Consumers that want a long-lived server must create and hold a scope explicitly\n   * (see {@link Scope.make}) and close it when done.\n   */\n  readonly startOpenCodeServerProcess: (input: {\n    readonly binaryPath: string;\n    readonly environment?: NodeJS.ProcessEnv;\n    readonly port?: number;\n    readonly hostname?: string;\n    readonly timeoutMs?: number;\n  }) => Effect.Effect<OpenCodeServerProcess, OpenCodeRuntimeError, Scope.Scope>;\n  /**\n   * Returns a handle to either an externally-managed OpenCode server (when\n   * `serverUrl` is provided — no lifetime is attached to the caller's scope) or a\n   * freshly spawned local server whose lifetime is bound to the caller's scope.\n   */\n  readonly connectToOpenCodeServer: (input: {\n    readonly binaryPath: string;\n    readonly serverUrl?: string | null;\n    readonly environment?: NodeJS.ProcessEnv;\n    readonly port?: number;\n    readonly hostname?: string;\n    readonly timeoutMs?: number;\n  }) => Effect.Effect<OpenCodeServerConnection, OpenCodeRuntimeError, Scope.Scope>;\n  readonly runOpenCodeCommand: (input: {\n    readonly binaryPath: string;\n    readonly args: ReadonlyArray<string>;\n    readonly environment?: NodeJS.ProcessEnv;\n  }) => Effect.Effect<OpenCodeCommandResult, OpenCodeRuntimeError>;\n  readonly createOpenCodeSdkClient: (input: {\n    readonly baseUrl: string;\n    readonly directory: string;\n    readonly serverPassword?: string;\n  }) => OpencodeClient;\n  readonly loadOpenCodeInventory: (\n    client: OpencodeClient,\n  ) => Effect.Effect<OpenCodeInventory, OpenCodeRuntimeError>;\n}\n\nfunction parseServerUrlFromOutput(output: string): string | null {\n  for (const line of output.split(\"\\n\")) {\n    if (!line.startsWith(OPENCODE_SERVER_READY_PREFIX)) {\n      continue;\n    }\n    const match = line.match(/on\\s+(https?:\\/\\/[^\\s]+)/);\n    return match?.[1] ?? null;\n  }\n  return null;\n}\n\nexport function parseOpenCodeModelSlug(\n  slug: string | null | undefined,\n): ParsedOpenCodeModelSlug | null {\n  if (typeof slug !== \"string\") {\n    return null;\n  }\n\n  const trimmed = slug.trim();\n  const separator = trimmed.indexOf(\"/\");\n  if (separator <= 0 || separator === trimmed.length - 1) {\n    return null;\n  }\n\n  return {\n    providerID: trimmed.slice(0, separator),\n    modelID: trimmed.slice(separator + 1),\n  };\n}\n\nexport function openCodeQuestionId(\n  index: number,\n  question: QuestionRequest[\"questions\"][number],\n): string {\n  const header = question.header\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9_-]+/g, \"-\");\n  return header.length > 0 ? `question-${index}-${header}` : `question-${index}`;\n}\n\nexport function toOpenCodeFileParts(input: {\n  readonly attachments: ReadonlyArray<ChatAttachment> | undefined;\n  readonly resolveAttachmentPath: (attachment: ChatAttachment) => string | null;\n}): Array<FilePartInput> {\n  const parts: Array<FilePartInput> = [];\n\n  for (const attachment of input.attachments ?? []) {\n    const attachmentPath = input.resolveAttachmentPath(attachment);\n    if (!attachmentPath) {\n      continue;\n    }\n\n    parts.push({\n      type: \"file\",\n      mime: attachment.mimeType,\n      filename: attachment.name,\n      url: pathToFileURL(attachmentPath).href,\n    });\n  }\n\n  return parts;\n}\n\nexport function buildOpenCodePermissionRules(runtimeMode: RuntimeMode): PermissionRuleset {\n  if (runtimeMode === \"full-access\") {\n    return [{ permission: \"*\", pattern: \"*\", action: \"allow\" }];\n  }\n\n  return [\n    { permission: \"*\", pattern: \"*\", action: \"ask\" },\n    { permission: \"bash\", pattern: \"*\", action: \"ask\" },\n    { permission: \"edit\", pattern: \"*\", action: \"ask\" },\n    { permission: \"webfetch\", pattern: \"*\", action: \"ask\" },\n    { permission: \"websearch\", pattern: \"*\", action: \"ask\" },\n    { permission: \"codesearch\", pattern: \"*\", action: \"ask\" },\n    { permission: \"external_directory\", pattern: \"*\", action: \"ask\" },\n    { permission: \"doom_loop\", pattern: \"*\", action: \"ask\" },\n    { permission: \"question\", pattern: \"*\", action: \"allow\" },\n  ];\n}\n\nexport function toOpenCodePermissionReply(\n  decision: ProviderApprovalDecision,\n): \"once\" | \"always\" | \"reject\" {\n  switch (decision) {\n    case \"accept\":\n      return \"once\";\n    case \"acceptForSession\":\n      return \"always\";\n    case \"decline\":\n    case \"cancel\":\n    default:\n      return \"reject\";\n  }\n}\n\nexport function toOpenCodeQuestionAnswers(\n  request: QuestionRequest,\n  answers: Record<string, unknown>,\n): Array<QuestionAnswer> {\n  return request.questions.map((question, index) => {\n    const raw =\n      answers[openCodeQuestionId(index, question)] ??\n      answers[question.header] ??\n      answers[question.question];\n    if (Array.isArray(raw)) {\n      return raw.filter((value): value is string => typeof value === \"string\");\n    }\n    if (typeof raw === \"string\") {\n      return raw.trim().length > 0 ? [raw] : [];\n    }\n    return [];\n  });\n}\n\nfunction ensureRuntimeError(\n  operation: OpenCodeRuntimeError[\"operation\"],\n  detail: string,\n  cause: unknown,\n): OpenCodeRuntimeError {\n  return OpenCodeRuntimeError.is(cause)\n    ? cause\n    : new OpenCodeRuntimeError({ operation, detail, cause });\n}\n\nconst makeOpenCodeRuntime = Effect.gen(function* () {\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const netService = yield* NetService.NetService;\n\n  const runOpenCodeCommand: OpenCodeRuntimeShape[\"runOpenCodeCommand\"] = (input) =>\n    Effect.gen(function* () {\n      const environment = input.environment ?? process.env;\n      const spawnCommand = resolveSpawnCommand(input.binaryPath, input.args, {\n        env: environment,\n      });\n      const child = yield* spawner.spawn(\n        ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n          shell: spawnCommand.shell,\n          env: environment,\n        }),\n      );\n      const [stdout, stderr, code] = yield* Effect.all(\n        [collectStreamAsString(child.stdout), collectStreamAsString(child.stderr), child.exitCode],\n        { concurrency: \"unbounded\" },\n      );\n      const exitCode = Number(code);\n      if (isWindowsCommandNotFound(exitCode, stderr)) {\n        return yield* new OpenCodeRuntimeError({\n          operation: \"runOpenCodeCommand\",\n          detail: `spawn ${input.binaryPath} ENOENT`,\n        });\n      }\n      return {\n        stdout,\n        stderr,\n        code: exitCode,\n      } satisfies OpenCodeCommandResult;\n    }).pipe(\n      Effect.scoped,\n      Effect.mapError((cause) =>\n        ensureRuntimeError(\n          \"runOpenCodeCommand\",\n          `Failed to execute '${input.binaryPath} ${input.args.join(\" \")}': ${openCodeRuntimeErrorDetail(cause)}`,\n          cause,\n        ),\n      ),\n    );\n\n  const startOpenCodeServerProcess: OpenCodeRuntimeShape[\"startOpenCodeServerProcess\"] = (input) =>\n    Effect.gen(function* () {\n      // Bind this server's lifetime to the caller's scope. When the caller's\n      // scope closes, the spawned child is killed and all associated fibers\n      // are interrupted automatically — no `close()` method needed.\n      const runtimeScope = yield* Scope.Scope;\n\n      const hostname = input.hostname ?? DEFAULT_HOSTNAME;\n      const port =\n        input.port ??\n        (yield* netService.findAvailablePort(0).pipe(\n          Effect.mapError(\n            (cause) =>\n              new OpenCodeRuntimeError({\n                operation: \"startOpenCodeServerProcess\",\n                detail: `Failed to find available port: ${openCodeRuntimeErrorDetail(cause)}`,\n                cause,\n              }),\n          ),\n        ));\n      const timeoutMs = input.timeoutMs ?? DEFAULT_OPENCODE_SERVER_TIMEOUT_MS;\n      const args = [\"serve\", `--hostname=${hostname}`, `--port=${port}`];\n      const environment = {\n        ...(input.environment ?? process.env),\n        OPENCODE_CONFIG_CONTENT: OPENCODE_EMPTY_CONFIG_CONTENT,\n      };\n      const spawnCommand = resolveSpawnCommand(input.binaryPath, args, {\n        env: environment,\n      });\n\n      const child = yield* spawner\n        .spawn(\n          ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n            detached: process.platform !== \"win32\",\n            shell: spawnCommand.shell,\n            env: environment,\n          }),\n        )\n        .pipe(\n          Effect.provideService(Scope.Scope, runtimeScope),\n          Effect.mapError(\n            (cause) =>\n              new OpenCodeRuntimeError({\n                operation: \"startOpenCodeServerProcess\",\n                detail: `Failed to spawn OpenCode server process: ${openCodeRuntimeErrorDetail(cause)}`,\n                cause,\n              }),\n          ),\n        );\n\n      const killOpenCodeProcessGroup = (signal: NodeJS.Signals) =>\n        process.platform === \"win32\"\n          ? child.kill({ killSignal: signal, forceKillAfter: \"1 second\" }).pipe(Effect.asVoid)\n          : Effect.sync(() => {\n              try {\n                process.kill(-Number(child.pid), signal);\n              } catch {\n                // The direct child may already have exited after starting the\n                // server; the process group kill is best-effort cleanup for\n                // any serve process left in that group.\n              }\n            });\n      const terminateChild = killOpenCodeProcessGroup(\"SIGTERM\").pipe(\n        Effect.andThen(Effect.sleep(\"1 second\")),\n        Effect.andThen(killOpenCodeProcessGroup(\"SIGKILL\")),\n        Effect.ignore,\n      );\n      yield* Scope.addFinalizer(runtimeScope, terminateChild);\n\n      const stdoutRef = yield* Ref.make(\"\");\n      const stderrRef = yield* Ref.make(\"\");\n      const readyDeferred = yield* Deferred.make<string, OpenCodeRuntimeError>();\n\n      const setReadyFromStdoutChunk = (chunk: string) =>\n        Ref.updateAndGet(stdoutRef, (stdout) => `${stdout}${chunk}`).pipe(\n          Effect.flatMap((nextStdout) => {\n            const parsed = parseServerUrlFromOutput(nextStdout);\n            return parsed\n              ? Deferred.succeed(readyDeferred, parsed).pipe(Effect.ignore)\n              : Effect.void;\n          }),\n        );\n\n      const stdoutFiber = yield* child.stdout.pipe(\n        Stream.decodeText(),\n        Stream.runForEach(setReadyFromStdoutChunk),\n        Effect.ignore,\n        Effect.forkIn(runtimeScope),\n      );\n      const stderrFiber = yield* child.stderr.pipe(\n        Stream.decodeText(),\n        Stream.runForEach((chunk) => Ref.update(stderrRef, (stderr) => `${stderr}${chunk}`)),\n        Effect.ignore,\n        Effect.forkIn(runtimeScope),\n      );\n\n      const exitFiber = yield* child.exitCode.pipe(\n        Effect.flatMap((code) =>\n          Effect.gen(function* () {\n            const stdout = yield* Ref.get(stdoutRef);\n            const stderr = yield* Ref.get(stderrRef);\n            const exitCode = Number(code);\n            yield* Deferred.fail(\n              readyDeferred,\n              new OpenCodeRuntimeError({\n                operation: \"startOpenCodeServerProcess\",\n                detail: [\n                  `OpenCode server exited before startup completed (code: ${String(exitCode)}).`,\n                  stdout.trim() ? `stdout:\\n${stdout.trim()}` : null,\n                  stderr.trim() ? `stderr:\\n${stderr.trim()}` : null,\n                ]\n                  .filter(Boolean)\n                  .join(\"\\n\\n\"),\n                cause: { exitCode, stdout, stderr },\n              }),\n            ).pipe(Effect.ignore);\n          }),\n        ),\n        Effect.ignore,\n        Effect.forkIn(runtimeScope),\n      );\n\n      const readyExit = yield* Effect.exit(\n        Deferred.await(readyDeferred).pipe(Effect.timeoutOption(timeoutMs)),\n      );\n\n      // Startup-time fibers are no longer needed once ready has resolved (either\n      // way). The exit fiber is only interrupted on failure; on success it keeps\n      // the caller's `exitCode` effect observable until the scope closes.\n      yield* Fiber.interrupt(stdoutFiber).pipe(Effect.ignore);\n      yield* Fiber.interrupt(stderrFiber).pipe(Effect.ignore);\n\n      if (Exit.isFailure(readyExit)) {\n        yield* Fiber.interrupt(exitFiber).pipe(Effect.ignore);\n        const squashed = Cause.squash(readyExit.cause);\n        return yield* ensureRuntimeError(\n          \"startOpenCodeServerProcess\",\n          `Failed while waiting for OpenCode server startup: ${openCodeRuntimeErrorDetail(squashed)}`,\n          squashed,\n        );\n      }\n\n      const readyOption = readyExit.value;\n      if (Option.isNone(readyOption)) {\n        yield* Fiber.interrupt(exitFiber).pipe(Effect.ignore);\n        return yield* new OpenCodeRuntimeError({\n          operation: \"startOpenCodeServerProcess\",\n          detail: `Timed out waiting for OpenCode server start after ${timeoutMs}ms.`,\n        });\n      }\n\n      return {\n        url: readyOption.value,\n        exitCode: child.exitCode.pipe(\n          Effect.map(Number),\n          Effect.orElseSucceed(() => 0),\n        ),\n      } satisfies OpenCodeServerProcess;\n    });\n\n  const connectToOpenCodeServer: OpenCodeRuntimeShape[\"connectToOpenCodeServer\"] = (input) => {\n    const serverUrl = input.serverUrl?.trim();\n    if (serverUrl) {\n      // We don't own externally-configured servers — no scope interaction.\n      return Effect.succeed({\n        url: serverUrl,\n        exitCode: null,\n        external: true,\n      });\n    }\n\n    return startOpenCodeServerProcess({\n      binaryPath: input.binaryPath,\n      ...(input.environment !== undefined ? { environment: input.environment } : {}),\n      ...(input.port !== undefined ? { port: input.port } : {}),\n      ...(input.hostname !== undefined ? { hostname: input.hostname } : {}),\n      ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n    }).pipe(\n      Effect.map((server) => ({\n        url: server.url,\n        exitCode: server.exitCode,\n        external: false,\n      })),\n    );\n  };\n\n  const createOpenCodeSdkClient: OpenCodeRuntimeShape[\"createOpenCodeSdkClient\"] = (input) =>\n    createOpencodeClient({\n      baseUrl: input.baseUrl,\n      directory: input.directory,\n      ...(input.serverPassword\n        ? {\n            headers: {\n              Authorization: `Basic ${Buffer.from(`opencode:${input.serverPassword}`, \"utf8\").toString(\"base64\")}`,\n            },\n          }\n        : {}),\n      throwOnError: true,\n    });\n\n  const loadProviders = (client: OpencodeClient) =>\n    runOpenCodeSdk(\"provider.list\", () => client.provider.list()).pipe(\n      Effect.filterMapOrFail(\n        (list) =>\n          list.data\n            ? Result.succeed(list.data)\n            : Result.fail(\n                new OpenCodeRuntimeError({\n                  operation: \"provider.list\",\n                  detail: \"OpenCode provider list was empty.\",\n                }),\n              ),\n        (result) => result,\n      ),\n    );\n\n  const loadAgents = (client: OpencodeClient) =>\n    runOpenCodeSdk(\"app.agents\", () => client.app.agents()).pipe(\n      Effect.map((result) => result.data ?? []),\n    );\n\n  const loadOpenCodeInventory: OpenCodeRuntimeShape[\"loadOpenCodeInventory\"] = (client) =>\n    Effect.all([loadProviders(client), loadAgents(client)], { concurrency: \"unbounded\" }).pipe(\n      Effect.map(([providerList, agents]) => ({ providerList, agents })),\n    );\n\n  return {\n    startOpenCodeServerProcess,\n    connectToOpenCodeServer,\n    runOpenCodeCommand,\n    createOpenCodeSdkClient,\n    loadOpenCodeInventory,\n  } satisfies OpenCodeRuntimeShape;\n});\n\nexport class OpenCodeRuntime extends Context.Service<OpenCodeRuntime, OpenCodeRuntimeShape>()(\n  \"salchi/provider/opencodeRuntime\",\n) {}\n\nexport const OpenCodeRuntimeLive = Layer.effect(OpenCodeRuntime, makeOpenCodeRuntime).pipe(\n  Layer.provide(NetService.layer),\n);\n","import * as Schema from \"effect/Schema\";\nimport type { ProjectionRepositoryError } from \"../persistence/Errors.ts\";\nimport type { VcsError } from \"@salchi/contracts\";\n\n/**\n * CheckpointUnavailableError - Expected checkpoint does not exist.\n */\nexport class CheckpointUnavailableError extends Schema.TaggedErrorClass<CheckpointUnavailableError>()(\n  \"CheckpointUnavailableError\",\n  {\n    threadId: Schema.String,\n    turnCount: Schema.Number,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Checkpoint unavailable for thread ${this.threadId} turn ${this.turnCount}: ${this.detail}`;\n  }\n}\n\n/**\n * CheckpointInvariantError - Inconsistent provider/filesystem/catalog state.\n */\nexport class CheckpointInvariantError extends Schema.TaggedErrorClass<CheckpointInvariantError>()(\n  \"CheckpointInvariantError\",\n  {\n    operation: Schema.String,\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message(): string {\n    return `Checkpoint invariant violation in ${this.operation}: ${this.detail}`;\n  }\n}\n\nexport type CheckpointStoreError = VcsError | CheckpointInvariantError | CheckpointUnavailableError;\n\nexport type CheckpointServiceError = CheckpointStoreError | ProjectionRepositoryError;\n","import * as Encoding from \"effect/Encoding\";\nimport { CheckpointRef, ProjectId, type ThreadId } from \"@salchi/contracts\";\n\nexport const CHECKPOINT_REFS_PREFIX = \"refs/salchi/checkpoints\";\n\nexport function checkpointRefForThreadTurn(threadId: ThreadId, turnCount: number): CheckpointRef {\n  return CheckpointRef.make(\n    `${CHECKPOINT_REFS_PREFIX}/${Encoding.encodeBase64Url(threadId)}/turn/${turnCount}`,\n  );\n}\n\nexport function checkpointStartRefForThreadTurn(\n  threadId: ThreadId,\n  turnCount: number,\n): CheckpointRef {\n  return CheckpointRef.make(\n    `${CHECKPOINT_REFS_PREFIX}/${Encoding.encodeBase64Url(threadId)}/turn-start/${turnCount}`,\n  );\n}\n\nexport function checkpointAttributedRefForThreadTurn(\n  threadId: ThreadId,\n  turnCount: number,\n): CheckpointRef {\n  return CheckpointRef.make(\n    `${CHECKPOINT_REFS_PREFIX}/${Encoding.encodeBase64Url(threadId)}/turn-attributed/${turnCount}`,\n  );\n}\n\nexport function resolveThreadWorkspaceCwd(input: {\n  readonly thread: {\n    readonly projectId: ProjectId;\n    readonly worktreePath: string | null;\n  };\n  readonly projects: ReadonlyArray<{\n    readonly id: ProjectId;\n    readonly workspaceRoot: string;\n  }>;\n}): string | undefined {\n  const worktreeCwd = input.thread.worktreePath ?? undefined;\n  if (worktreeCwd) {\n    return worktreeCwd;\n  }\n\n  return input.projects.find((project) => project.id === input.thread.projectId)?.workspaceRoot;\n}\n","/**\n * CheckpointStore - Repository interface for filesystem-backed workspace checkpoints.\n *\n * Owns hidden Git-ref checkpoint capture/restore and diff computation for a\n * workspace thread timeline. It does not store user-facing checkpoint metadata\n * and does not coordinate provider conversation rollback.\n *\n * Uses Effect `Context.Service` for dependency injection and exposes typed\n * domain errors for checkpoint storage operations.\n *\n * @module CheckpointStore\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type { CheckpointStoreError } from \"../Errors.ts\";\nimport { CheckpointRef } from \"@salchi/contracts\";\n\nexport interface CaptureCheckpointInput {\n  readonly cwd: string;\n  readonly checkpointRef: CheckpointRef;\n}\n\nexport interface CaptureOverlayCheckpointInput {\n  readonly cwd: string;\n  readonly baseCheckpointRef: CheckpointRef;\n  readonly checkpointRef: CheckpointRef;\n  readonly entries: ReadonlyArray<{\n    readonly path: string;\n    readonly blobSha: string | null;\n  }>;\n}\n\nexport interface RestoreCheckpointInput {\n  readonly cwd: string;\n  readonly checkpointRef: CheckpointRef;\n  readonly fallbackToHead?: boolean;\n}\n\nexport interface DiffCheckpointsInput {\n  readonly cwd: string;\n  readonly fromCheckpointRef: CheckpointRef;\n  readonly toCheckpointRef: CheckpointRef;\n  readonly fallbackFromToHead?: boolean;\n  readonly ignoreWhitespace: boolean;\n  readonly paths?: ReadonlyArray<string>;\n}\n\nexport interface DeleteCheckpointRefsInput {\n  readonly cwd: string;\n  readonly checkpointRefs: ReadonlyArray<CheckpointRef>;\n}\n\nexport interface HashFileBlobInput {\n  readonly cwd: string;\n  readonly path: string;\n}\n\nexport interface ReadCheckpointFileBlobInput {\n  readonly cwd: string;\n  readonly checkpointRef: CheckpointRef;\n  readonly path: string;\n}\n\nexport const CHECKPOINT_DIFF_PATHSPEC_LIMIT = 500;\n\n/**\n * CheckpointStoreShape - Service API for checkpoint capture/restore and diff access.\n */\nexport interface CheckpointStoreShape {\n  /**\n   * Check whether cwd is inside a Git worktree.\n   */\n  readonly isGitRepository: (cwd: string) => Effect.Effect<boolean, CheckpointStoreError>;\n\n  /**\n   * Capture a checkpoint commit and store it at the provided checkpoint ref.\n   *\n   * Uses an isolated temporary Git index and writes a hidden ref.\n   */\n  readonly captureCheckpoint: (\n    input: CaptureCheckpointInput,\n  ) => Effect.Effect<void, CheckpointStoreError>;\n\n  /**\n   * Capture a synthetic checkpoint by overlaying specific blob entries on top of a base checkpoint.\n   */\n  readonly captureOverlayCheckpoint: (\n    input: CaptureOverlayCheckpointInput,\n  ) => Effect.Effect<void, CheckpointStoreError>;\n\n  /**\n   * Check whether a checkpoint ref exists.\n   */\n  readonly hasCheckpointRef: (\n    input: Omit<RestoreCheckpointInput, \"fallbackToHead\">,\n  ) => Effect.Effect<boolean, CheckpointStoreError>;\n\n  /**\n   * Restore workspace/staging state to a checkpoint.\n   *\n   * Optionally falls back to current `HEAD` when the checkpoint ref is missing.\n   */\n  readonly restoreCheckpoint: (\n    input: RestoreCheckpointInput,\n  ) => Effect.Effect<boolean, CheckpointStoreError>;\n\n  /**\n   * Compute patch diff between two checkpoint refs.\n   *\n   * Can optionally treat missing \"from\" ref as `HEAD`.\n   */\n  readonly diffCheckpoints: (\n    input: DiffCheckpointsInput,\n  ) => Effect.Effect<string, CheckpointStoreError>;\n\n  /**\n   * Writes the current file content to the VCS object store and returns its blob SHA.\n   *\n   * Returns `null` when the file is missing from the working tree.\n   */\n  readonly hashFileBlob: (\n    input: HashFileBlobInput,\n  ) => Effect.Effect<string | null, CheckpointStoreError>;\n\n  /**\n   * Resolves a file's blob SHA from a checkpoint tree.\n   *\n   * Returns `null` when the path does not exist in that checkpoint.\n   */\n  readonly readCheckpointFileBlob: (\n    input: ReadCheckpointFileBlobInput,\n  ) => Effect.Effect<string | null, CheckpointStoreError>;\n\n  /**\n   * Delete the provided checkpoint refs.\n   *\n   * Best-effort delete: missing refs are tolerated.\n   */\n  readonly deleteCheckpointRefs: (\n    input: DeleteCheckpointRefsInput,\n  ) => Effect.Effect<void, CheckpointStoreError>;\n}\n\n/**\n * CheckpointStore - Service tag for checkpoint persistence and restore operations.\n */\nexport class CheckpointStore extends Context.Service<CheckpointStore, CheckpointStoreShape>()(\n  \"salchi/checkpointing/Services/CheckpointStore\",\n) {}\n","import {\n  type CheckpointRef,\n  OrchestrationGetTurnDiffResult,\n  type ThreadId,\n  type OrchestrationGetFullThreadDiffResult,\n  type OrchestrationGetTurnDiffResult as OrchestrationGetTurnDiffResultType,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport { ProjectionSnapshotQuery } from \"../../orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport { CheckpointInvariantError, CheckpointUnavailableError } from \"../Errors.ts\";\nimport {\n  checkpointAttributedRefForThreadTurn,\n  checkpointRefForThreadTurn,\n  checkpointStartRefForThreadTurn,\n} from \"../Utils.ts\";\nimport { CHECKPOINT_DIFF_PATHSPEC_LIMIT, CheckpointStore } from \"../Services/CheckpointStore.ts\";\nimport {\n  CheckpointDiffQuery,\n  type CheckpointDiffQueryShape,\n} from \"../Services/CheckpointDiffQuery.ts\";\n\nconst isTurnDiffResult = Schema.is(OrchestrationGetTurnDiffResult);\n\nfunction buildTurnDiffResult(\n  input: {\n    readonly threadId: ThreadId;\n    readonly fromTurnCount: number;\n    readonly toTurnCount: number;\n  },\n  diff: string,\n): OrchestrationGetTurnDiffResultType {\n  return {\n    threadId: input.threadId,\n    fromTurnCount: input.fromTurnCount,\n    toTurnCount: input.toTurnCount,\n    diff,\n  };\n}\n\nconst make = Effect.gen(function* () {\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const checkpointStore = yield* CheckpointStore;\n\n  const getTurnDiff: CheckpointDiffQueryShape[\"getTurnDiff\"] = Effect.fn(\"getTurnDiff\")(\n    function* (input) {\n      const operation = \"CheckpointDiffQuery.getTurnDiff\";\n      const ignoreWhitespace = input.ignoreWhitespace ?? true;\n      yield* Effect.annotateCurrentSpan({\n        \"checkpoint.thread_id\": input.threadId,\n        \"checkpoint.from_turn_count\": input.fromTurnCount,\n        \"checkpoint.to_turn_count\": input.toTurnCount,\n        \"checkpoint.ignore_whitespace\": ignoreWhitespace,\n      });\n\n      if (input.fromTurnCount === input.toTurnCount) {\n        const emptyDiff: OrchestrationGetTurnDiffResultType = {\n          threadId: input.threadId,\n          fromTurnCount: input.fromTurnCount,\n          toTurnCount: input.toTurnCount,\n          diff: \"\",\n        };\n        if (!isTurnDiffResult(emptyDiff)) {\n          return yield* new CheckpointInvariantError({\n            operation,\n            detail: \"Computed turn diff result does not satisfy contract schema.\",\n          });\n        }\n        return emptyDiff;\n      }\n\n      const threadContext = yield* projectionSnapshotQuery\n        .getThreadCheckpointContext(input.threadId)\n        .pipe(Effect.withSpan(\"checkpoint.turnDiff.lookupContext\"));\n      if (Option.isNone(threadContext)) {\n        return yield* new CheckpointInvariantError({\n          operation,\n          detail: `Thread '${input.threadId}' not found.`,\n        });\n      }\n\n      const maxTurnCount = threadContext.value.checkpoints.reduce(\n        (max, checkpoint) => Math.max(max, checkpoint.checkpointTurnCount),\n        0,\n      );\n      if (input.toTurnCount > maxTurnCount) {\n        return yield* new CheckpointUnavailableError({\n          threadId: input.threadId,\n          turnCount: input.toTurnCount,\n          detail: `Turn diff range exceeds current turn count: requested ${input.toTurnCount}, current ${maxTurnCount}.`,\n        });\n      }\n\n      const workspaceCwd = threadContext.value.worktreePath ?? threadContext.value.workspaceRoot;\n      if (!workspaceCwd) {\n        return yield* new CheckpointInvariantError({\n          operation,\n          detail: `Workspace path missing for thread '${input.threadId}' when computing turn diff.`,\n        });\n      }\n\n      let fromCheckpointRef =\n        input.fromTurnCount === 0\n          ? checkpointRefForThreadTurn(input.threadId, 0)\n          : threadContext.value.checkpoints.find(\n              (checkpoint) => checkpoint.checkpointTurnCount === input.fromTurnCount,\n            )?.checkpointRef;\n      if (!fromCheckpointRef) {\n        return yield* new CheckpointUnavailableError({\n          threadId: input.threadId,\n          turnCount: input.fromTurnCount,\n          detail: `Checkpoint ref is unavailable for turn ${input.fromTurnCount}.`,\n        });\n      }\n\n      const toCheckpoint = threadContext.value.checkpoints.find(\n        (checkpoint) => checkpoint.checkpointTurnCount === input.toTurnCount,\n      );\n      if (!toCheckpoint?.checkpointRef) {\n        return yield* new CheckpointUnavailableError({\n          threadId: input.threadId,\n          turnCount: input.toTurnCount,\n          detail: `Checkpoint ref is unavailable for turn ${input.toTurnCount}.`,\n        });\n      }\n      let toCheckpointRef = toCheckpoint.checkpointRef;\n      let paths: ReadonlyArray<string> | undefined;\n\n      if (input.toTurnCount - input.fromTurnCount === 1) {\n        if (toCheckpoint.attribution === \"edit-snapshots\") {\n          const startRef = checkpointStartRefForThreadTurn(input.threadId, input.toTurnCount);\n          const attributedRef = checkpointAttributedRefForThreadTurn(\n            input.threadId,\n            input.toTurnCount,\n          );\n          const [startExists, attributedExists] = yield* Effect.all(\n            [\n              checkpointStore.hasCheckpointRef({\n                cwd: workspaceCwd,\n                checkpointRef: startRef,\n              }),\n              checkpointStore.hasCheckpointRef({\n                cwd: workspaceCwd,\n                checkpointRef: attributedRef,\n              }),\n            ],\n            { concurrency: 2 },\n          );\n          if (startExists && attributedExists) {\n            fromCheckpointRef = startRef;\n            toCheckpointRef = attributedRef;\n          }\n        } else if (\n          toCheckpoint.attribution === \"touched-paths\" &&\n          toCheckpoint.files.length > 0 &&\n          toCheckpoint.files.length <= CHECKPOINT_DIFF_PATHSPEC_LIMIT\n        ) {\n          paths = toCheckpoint.files.map((file) => file.path);\n        }\n      }\n\n      const diff = yield* checkpointStore\n        .diffCheckpoints({\n          cwd: workspaceCwd,\n          fromCheckpointRef,\n          toCheckpointRef,\n          fallbackFromToHead: false,\n          ignoreWhitespace,\n          ...(paths !== undefined ? { paths } : {}),\n        })\n        .pipe(Effect.withSpan(\"checkpoint.turnDiff.diffCheckpoints\"));\n\n      const turnDiff = buildTurnDiffResult(input, diff);\n      if (!isTurnDiffResult(turnDiff)) {\n        return yield* new CheckpointInvariantError({\n          operation,\n          detail: \"Computed turn diff result does not satisfy contract schema.\",\n        });\n      }\n\n      return turnDiff;\n    },\n  );\n\n  const getFullThreadDiff: CheckpointDiffQueryShape[\"getFullThreadDiff\"] = Effect.fn(\n    \"CheckpointDiffQuery.getFullThreadDiff\",\n  )(function* (input) {\n    const operation = \"CheckpointDiffQuery.getFullThreadDiff\";\n    const ignoreWhitespace = input.ignoreWhitespace ?? true;\n    yield* Effect.annotateCurrentSpan({\n      \"checkpoint.thread_id\": input.threadId,\n      \"checkpoint.from_turn_count\": 0,\n      \"checkpoint.to_turn_count\": input.toTurnCount,\n      \"checkpoint.ignore_whitespace\": ignoreWhitespace,\n      \"checkpoint.diff_kind\": \"full-thread\",\n    });\n\n    if (input.toTurnCount === 0) {\n      const emptyDiff = buildTurnDiffResult(\n        {\n          threadId: input.threadId,\n          fromTurnCount: 0,\n          toTurnCount: 0,\n        },\n        \"\",\n      );\n      if (!isTurnDiffResult(emptyDiff)) {\n        return yield* new CheckpointInvariantError({\n          operation,\n          detail: \"Computed full thread diff result does not satisfy contract schema.\",\n        });\n      }\n      return emptyDiff satisfies OrchestrationGetFullThreadDiffResult;\n    }\n\n    const threadContext = yield* projectionSnapshotQuery\n      .getFullThreadDiffContext(input.threadId, input.toTurnCount)\n      .pipe(Effect.withSpan(\"checkpoint.fullThread.lookupContext\"));\n\n    if (Option.isNone(threadContext)) {\n      return yield* new CheckpointInvariantError({\n        operation,\n        detail: `Thread '${input.threadId}' not found.`,\n      });\n    }\n\n    if (input.toTurnCount > threadContext.value.latestCheckpointTurnCount) {\n      return yield* new CheckpointUnavailableError({\n        threadId: input.threadId,\n        turnCount: input.toTurnCount,\n        detail: `Turn diff range exceeds current turn count: requested ${input.toTurnCount}, current ${threadContext.value.latestCheckpointTurnCount}.`,\n      });\n    }\n\n    const workspaceCwd = threadContext.value.worktreePath ?? threadContext.value.workspaceRoot;\n    if (!workspaceCwd) {\n      return yield* new CheckpointInvariantError({\n        operation,\n        detail: `Workspace path missing for thread '${input.threadId}' when computing full thread diff.`,\n      });\n    }\n\n    if (!threadContext.value.toCheckpointRef) {\n      return yield* new CheckpointUnavailableError({\n        threadId: input.threadId,\n        turnCount: input.toTurnCount,\n        detail: `Checkpoint ref is unavailable for turn ${input.toTurnCount}.`,\n      });\n    }\n\n    const diff = yield* checkpointStore\n      .diffCheckpoints({\n        cwd: workspaceCwd,\n        fromCheckpointRef: checkpointRefForThreadTurn(input.threadId, 0),\n        toCheckpointRef: threadContext.value.toCheckpointRef as CheckpointRef,\n        fallbackFromToHead: false,\n        ignoreWhitespace,\n      })\n      .pipe(Effect.withSpan(\"checkpoint.fullThread.diffCheckpoints\"));\n\n    const turnDiff = buildTurnDiffResult(\n      {\n        threadId: input.threadId,\n        fromTurnCount: 0,\n        toTurnCount: input.toTurnCount,\n      },\n      diff,\n    );\n    if (!isTurnDiffResult(turnDiff)) {\n      return yield* new CheckpointInvariantError({\n        operation,\n        detail: \"Computed full thread diff result does not satisfy contract schema.\",\n      });\n    }\n\n    return turnDiff satisfies OrchestrationGetFullThreadDiffResult;\n  });\n\n  return {\n    getTurnDiff,\n    getFullThreadDiff,\n  } satisfies CheckpointDiffQueryShape;\n});\n\nexport const CheckpointDiffQueryLive = Layer.effect(CheckpointDiffQuery, make);\n","/**\n * CheckpointStoreLive - Filesystem checkpoint store adapter layer.\n *\n * Resolves the active VCS driver once per checkpoint operation and delegates\n * checkpoint-specific behavior to the driver's optional checkpoint capability.\n *\n * @module CheckpointStoreLive\n */\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { CheckpointStore, type CheckpointStoreShape } from \"../Services/CheckpointStore.ts\";\nimport { VcsUnsupportedOperationError } from \"@salchi/contracts\";\nimport { VcsDriverRegistry } from \"../../vcs/VcsDriverRegistry.ts\";\nimport type { VcsCheckpointOps } from \"../../vcs/VcsDriver.ts\";\n\nconst makeCheckpointStore = Effect.gen(function* () {\n  const vcsRegistry = yield* VcsDriverRegistry;\n\n  const resolveCheckpoints = Effect.fn(\"CheckpointStore.resolveCheckpoints\")(function* (\n    operation: string,\n    cwd: string,\n  ) {\n    const handle = yield* vcsRegistry.resolve({ cwd });\n    if (!handle.driver.checkpoints) {\n      return yield* new VcsUnsupportedOperationError({\n        operation,\n        kind: handle.kind,\n        detail: `${handle.kind} driver does not implement checkpoint operations.`,\n      });\n    }\n    return handle.driver.checkpoints satisfies VcsCheckpointOps;\n  });\n\n  const isGitRepository: CheckpointStoreShape[\"isGitRepository\"] = (cwd) =>\n    vcsRegistry.resolve({ cwd, requestedKind: \"git\" }).pipe(\n      Effect.map(() => true),\n      Effect.catch(() => Effect.succeed(false)),\n    );\n\n  const captureCheckpoint: CheckpointStoreShape[\"captureCheckpoint\"] = Effect.fn(\n    \"captureCheckpoint\",\n  )(function* (input) {\n    const checkpoints = yield* resolveCheckpoints(\"CheckpointStore.captureCheckpoint\", input.cwd);\n    return yield* checkpoints.captureCheckpoint(input);\n  });\n\n  const captureOverlayCheckpoint: CheckpointStoreShape[\"captureOverlayCheckpoint\"] = Effect.fn(\n    \"captureOverlayCheckpoint\",\n  )(function* (input) {\n    const checkpoints = yield* resolveCheckpoints(\n      \"CheckpointStore.captureOverlayCheckpoint\",\n      input.cwd,\n    );\n    return yield* checkpoints.captureOverlayCheckpoint(input);\n  });\n\n  const hasCheckpointRef: CheckpointStoreShape[\"hasCheckpointRef\"] = Effect.fn(\"hasCheckpointRef\")(\n    function* (input) {\n      const checkpoints = yield* resolveCheckpoints(\"CheckpointStore.hasCheckpointRef\", input.cwd);\n      return yield* checkpoints.hasCheckpointRef(input);\n    },\n  );\n\n  const restoreCheckpoint: CheckpointStoreShape[\"restoreCheckpoint\"] = Effect.fn(\n    \"restoreCheckpoint\",\n  )(function* (input) {\n    const checkpoints = yield* resolveCheckpoints(\"CheckpointStore.restoreCheckpoint\", input.cwd);\n    return yield* checkpoints.restoreCheckpoint(input);\n  });\n\n  const diffCheckpoints: CheckpointStoreShape[\"diffCheckpoints\"] = Effect.fn(\"diffCheckpoints\")(\n    function* (input) {\n      const checkpoints = yield* resolveCheckpoints(\"CheckpointStore.diffCheckpoints\", input.cwd);\n      return yield* checkpoints.diffCheckpoints(input);\n    },\n  );\n\n  const hashFileBlob: CheckpointStoreShape[\"hashFileBlob\"] = Effect.fn(\"hashFileBlob\")(\n    function* (input) {\n      const checkpoints = yield* resolveCheckpoints(\"CheckpointStore.hashFileBlob\", input.cwd);\n      return yield* checkpoints.hashFileBlob(input);\n    },\n  );\n\n  const readCheckpointFileBlob: CheckpointStoreShape[\"readCheckpointFileBlob\"] = Effect.fn(\n    \"readCheckpointFileBlob\",\n  )(function* (input) {\n    const checkpoints = yield* resolveCheckpoints(\n      \"CheckpointStore.readCheckpointFileBlob\",\n      input.cwd,\n    );\n    return yield* checkpoints.readCheckpointFileBlob(input);\n  });\n\n  const deleteCheckpointRefs: CheckpointStoreShape[\"deleteCheckpointRefs\"] = Effect.fn(\n    \"deleteCheckpointRefs\",\n  )(function* (input) {\n    const checkpoints = yield* resolveCheckpoints(\n      \"CheckpointStore.deleteCheckpointRefs\",\n      input.cwd,\n    );\n    return yield* checkpoints.deleteCheckpointRefs(input);\n  });\n\n  return {\n    isGitRepository,\n    captureCheckpoint,\n    captureOverlayCheckpoint,\n    hasCheckpointRef,\n    restoreCheckpoint,\n    diffCheckpoints,\n    hashFileBlob,\n    readCheckpointFileBlob,\n    deleteCheckpointRefs,\n  } satisfies CheckpointStoreShape;\n});\n\nexport const CheckpointStoreLive = Layer.effect(CheckpointStore, makeCheckpointStore);\n","import { TextGenerationError } from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\n\nconst isTextGenerationError = Schema.is(TextGenerationError);\n\n/** Convert an Effect Schema to a flat JSON Schema object, inlining `$defs` when present. */\nexport function toJsonSchemaObject(schema: Schema.Top): unknown {\n  const document = Schema.toJsonSchemaDocument(schema);\n  if (document.definitions && Object.keys(document.definitions).length > 0) {\n    return { ...document.schema, $defs: document.definitions };\n  }\n  return document.schema;\n}\n\n/** Truncate a text section to `maxChars`, appending a `[truncated]` marker when needed. */\nexport function limitSection(value: string, maxChars: number): string {\n  if (value.length <= maxChars) return value;\n  const truncated = value.slice(0, maxChars);\n  return `${truncated}\\n\\n[truncated]`;\n}\n\n/** Normalise a raw commit subject to imperative-mood, ≤72 chars, no trailing period. */\nexport function sanitizeCommitSubject(raw: string): string {\n  const singleLine = raw.trim().split(/\\r?\\n/g)[0]?.trim() ?? \"\";\n  const withoutTrailingPeriod = singleLine.replace(/[.]+$/g, \"\").trim();\n  if (withoutTrailingPeriod.length === 0) {\n    return \"Update project files\";\n  }\n\n  if (withoutTrailingPeriod.length <= 72) {\n    return withoutTrailingPeriod;\n  }\n  return withoutTrailingPeriod.slice(0, 72).trimEnd();\n}\n\n/** Normalise a raw PR title to a single line with a sensible fallback. */\nexport function sanitizePrTitle(raw: string): string {\n  const singleLine = raw.trim().split(/\\r?\\n/g)[0]?.trim() ?? \"\";\n  if (singleLine.length > 0) {\n    return singleLine;\n  }\n  return \"Update project changes\";\n}\n\n/** Normalise a raw thread title to a compact single-line sidebar-safe label. */\nexport function sanitizeThreadTitle(raw: string): string {\n  const normalized = raw\n    .trim()\n    .split(/\\r?\\n/g)[0]\n    ?.trim()\n    .replace(/^['\"`]+|['\"`]+$/g, \"\")\n    .trim()\n    .replace(/\\s+/g, \" \");\n\n  if (!normalized || normalized.trim().length === 0) {\n    return \"New thread\";\n  }\n\n  if (normalized.length <= 50) {\n    return normalized;\n  }\n\n  return `${normalized.slice(0, 47).trimEnd()}...`;\n}\n\n/** CLI name to human-readable label, e.g. \"codex\" → \"Codex CLI (`codex`)\" */\nfunction cliLabel(cliName: string): string {\n  const capitalized = cliName.charAt(0).toUpperCase() + cliName.slice(1);\n  return `${capitalized} CLI (\\`${cliName}\\`)`;\n}\n\n/**\n * Normalize an unknown error from a CLI text generation process into a\n * typed `TextGenerationError`. Parameterized by CLI name so both Codex\n * and Claude (and future providers) can share the same logic.\n */\nexport function normalizeCliError(\n  cliName: string,\n  operation: string,\n  error: unknown,\n  fallback: string,\n): TextGenerationError {\n  if (isTextGenerationError(error)) {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    const lower = error.message.toLowerCase();\n    if (\n      error.message.includes(`Command not found: ${cliName}`) ||\n      lower.includes(`spawn ${cliName}`) ||\n      lower.includes(\"enoent\")\n    ) {\n      return new TextGenerationError({\n        operation,\n        detail: `${cliLabel(cliName)} is required but not available on PATH.`,\n        cause: error,\n      });\n    }\n    return new TextGenerationError({\n      operation,\n      detail: `${fallback}: ${error.message}`,\n      cause: error,\n    });\n  }\n\n  return new TextGenerationError({\n    operation,\n    detail: fallback,\n    cause: error,\n  });\n}\n","/**\n * Shared prompt builders for text generation providers.\n *\n * Extracts the prompt construction logic that is identical across\n * Codex, Claude, and any future CLI-based text generation backends.\n *\n * @module textGenerationPrompts\n */\nimport * as Schema from \"effect/Schema\";\nimport type { ChatAttachment } from \"@salchi/contracts\";\n\nimport { limitSection } from \"./TextGenerationUtils.ts\";\nimport type { TextGenerationPolicy } from \"./TextGenerationPolicy.ts\";\n\nfunction policyInstruction(instruction: string | undefined): ReadonlyArray<string> {\n  const trimmed = instruction?.trim();\n  return trimmed ? [\"\", \"Additional instructions:\", limitSection(trimmed, 4_000)] : [];\n}\n\n// ---------------------------------------------------------------------------\n// Commit message\n// ---------------------------------------------------------------------------\n\nexport interface CommitMessagePromptInput {\n  branch: string | null;\n  stagedSummary: string;\n  stagedPatch: string;\n  includeBranch: boolean;\n  policy?: TextGenerationPolicy | undefined;\n}\n\nexport function buildCommitMessagePrompt(input: CommitMessagePromptInput) {\n  const wantsBranch = input.includeBranch;\n\n  const prompt = [\n    \"You write concise git commit messages.\",\n    wantsBranch\n      ? \"Return a JSON object with keys: subject, body, branch.\"\n      : \"Return a JSON object with keys: subject, body.\",\n    \"Rules:\",\n    \"- subject must be imperative, <= 72 chars, and no trailing period\",\n    \"- body can be empty string or short bullet points\",\n    ...(wantsBranch\n      ? [\"- branch must be a short semantic git branch fragment for this change\"]\n      : []),\n    \"- capture the primary user-visible or developer-visible change\",\n    ...policyInstruction(input.policy?.commitInstructions),\n    \"\",\n    `Branch: ${input.branch ?? \"(detached)\"}`,\n    \"\",\n    \"Staged files:\",\n    limitSection(input.stagedSummary, 6_000),\n    \"\",\n    \"Staged patch:\",\n    limitSection(input.stagedPatch, 40_000),\n  ].join(\"\\n\");\n\n  if (wantsBranch) {\n    return {\n      prompt,\n      outputSchema: Schema.Struct({\n        subject: Schema.String,\n        body: Schema.String,\n        branch: Schema.String,\n      }),\n    };\n  }\n\n  return {\n    prompt,\n    outputSchema: Schema.Struct({\n      subject: Schema.String,\n      body: Schema.String,\n    }),\n  };\n}\n\n// ---------------------------------------------------------------------------\n// PR content\n// ---------------------------------------------------------------------------\n\nexport interface PrContentPromptInput {\n  baseBranch: string;\n  headBranch: string;\n  commitSummary: string;\n  diffSummary: string;\n  diffPatch: string;\n  policy?: TextGenerationPolicy | undefined;\n}\n\nexport function buildPrContentPrompt(input: PrContentPromptInput) {\n  const prompt = [\n    \"You write GitHub pull request content.\",\n    \"Return a JSON object with keys: title, body.\",\n    \"Rules:\",\n    \"- title should be concise and specific\",\n    \"- body must be markdown and include headings '## Summary' and '## Testing'\",\n    \"- under Summary, provide short bullet points\",\n    \"- under Testing, include bullet points with concrete checks or 'Not run' where appropriate\",\n    ...policyInstruction(input.policy?.changeRequestInstructions),\n    \"\",\n    `Base branch: ${input.baseBranch}`,\n    `Head branch: ${input.headBranch}`,\n    \"\",\n    \"Commits:\",\n    limitSection(input.commitSummary, 12_000),\n    \"\",\n    \"Diff stat:\",\n    limitSection(input.diffSummary, 12_000),\n    \"\",\n    \"Diff patch:\",\n    limitSection(input.diffPatch, 40_000),\n  ].join(\"\\n\");\n\n  const outputSchema = Schema.Struct({\n    title: Schema.String,\n    body: Schema.String,\n  });\n\n  return { prompt, outputSchema };\n}\n\n// ---------------------------------------------------------------------------\n// Branch name\n// ---------------------------------------------------------------------------\n\nexport interface BranchNamePromptInput {\n  message: string;\n  attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  policy?: TextGenerationPolicy | undefined;\n}\n\ninterface PromptFromMessageInput {\n  instruction: string;\n  responseShape: string;\n  rules: ReadonlyArray<string>;\n  message: string;\n  attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  additionalInstructions?: string | undefined;\n}\n\nfunction buildPromptFromMessage(input: PromptFromMessageInput): string {\n  const attachmentLines = (input.attachments ?? []).map(\n    (attachment) => `- ${attachment.name} (${attachment.mimeType}, ${attachment.sizeBytes} bytes)`,\n  );\n\n  const promptSections = [\n    input.instruction,\n    input.responseShape,\n    \"Rules:\",\n    ...input.rules.map((rule) => `- ${rule}`),\n    \"\",\n    \"User message:\",\n    limitSection(input.message, 8_000),\n    ...policyInstruction(input.additionalInstructions),\n  ];\n  if (attachmentLines.length > 0) {\n    promptSections.push(\n      \"\",\n      \"Attachment metadata:\",\n      limitSection(attachmentLines.join(\"\\n\"), 4_000),\n    );\n  }\n\n  return promptSections.join(\"\\n\");\n}\n\nexport function buildBranchNamePrompt(input: BranchNamePromptInput) {\n  const prompt = buildPromptFromMessage({\n    instruction: \"You generate concise git branch names.\",\n    responseShape: \"Return a JSON object with key: branch.\",\n    rules: [\n      \"Branch should describe the requested work from the user message.\",\n      \"Keep it short and specific (2-6 words).\",\n      \"Use plain words only, no issue prefixes and no punctuation-heavy text.\",\n      \"If images are attached, use them as primary context for visual/UI issues.\",\n    ],\n    message: input.message,\n    attachments: input.attachments,\n    additionalInstructions: input.policy?.branchInstructions,\n  });\n  const outputSchema = Schema.Struct({\n    branch: Schema.String,\n  });\n\n  return { prompt, outputSchema };\n}\n\n// ---------------------------------------------------------------------------\n// Thread title\n// ---------------------------------------------------------------------------\n\nexport interface ThreadTitlePromptInput {\n  message: string;\n  attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  policy?: TextGenerationPolicy | undefined;\n}\n\nexport function buildThreadTitlePrompt(input: ThreadTitlePromptInput) {\n  const prompt = buildPromptFromMessage({\n    instruction: \"You write concise thread titles for coding conversations.\",\n    responseShape: \"Return a JSON object with key: title.\",\n    rules: [\n      \"Title should summarize the user's request, not restate it verbatim.\",\n      \"Keep it short and specific (3-8 words).\",\n      \"Avoid quotes, filler, prefixes, and trailing punctuation.\",\n      \"If images are attached, use them as primary context for visual/UI issues.\",\n    ],\n    message: input.message,\n    attachments: input.attachments,\n    additionalInstructions: input.policy?.threadTitleInstructions,\n  });\n  const outputSchema = Schema.Struct({\n    title: Schema.String,\n  });\n\n  return { prompt, outputSchema };\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\n/**\n * Expand a leading `~` (or `~/…`, `~\\…`) in a user-supplied path to the\n * current user's home directory. Spawned processes don't get shell\n * expansion, so env vars like `CODEX_HOME=~/.codex-work` would be passed\n * verbatim and treated as relative paths by the receiver.\n *\n * Matches the behavior of the other `expandHomePath` helpers in the\n * workspace layers and CLI bootstrap: `~` alone and both `~/` and `~\\`\n * separators are handled. Returns the input unchanged if it doesn't\n * start with `~` or is empty. Does not handle `~user` (other-user)\n * expansion.\n */\nexport function expandHomePath(value: string): string {\n  if (!value) return value;\n  if (value === \"~\") return homedir();\n  if (value.startsWith(\"~/\") || value.startsWith(\"~\\\\\")) {\n    return join(homedir(), value.slice(2));\n  }\n  return value;\n}\n","import * as NodeOS from \"node:os\";\n\nimport type { ClaudeSettings } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Path from \"effect/Path\";\n\nimport { expandHomePath } from \"../../pathExpansion.ts\";\n\nexport const resolveClaudeHomePath = Effect.fn(\"resolveClaudeHomePath\")(function* (\n  config: Pick<ClaudeSettings, \"homePath\">,\n): Effect.fn.Return<string, never, Path.Path> {\n  const path = yield* Path.Path;\n  const homePath = config.homePath.trim();\n  return path.resolve(homePath.length > 0 ? expandHomePath(homePath) : NodeOS.homedir());\n});\n\nexport const makeClaudeEnvironment = Effect.fn(\"makeClaudeEnvironment\")(function* (\n  config: Pick<ClaudeSettings, \"homePath\">,\n  baseEnv: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<NodeJS.ProcessEnv, never, Path.Path> {\n  const homePath = config.homePath.trim();\n  if (homePath.length === 0) return baseEnv;\n  const resolvedHomePath = yield* resolveClaudeHomePath(config);\n  return {\n    ...baseEnv,\n    HOME: resolvedHomePath,\n  };\n});\n\nexport const makeClaudeContinuationGroupKey = Effect.fn(\"makeClaudeContinuationGroupKey\")(\n  function* (config: Pick<ClaudeSettings, \"homePath\">): Effect.fn.Return<string, never, Path.Path> {\n    const resolvedHomePath = yield* resolveClaudeHomePath(config);\n    return `claude:home:${resolvedHomePath}`;\n  },\n);\n\nexport const makeClaudeCapabilitiesCacheKey = Effect.fn(\"makeClaudeCapabilitiesCacheKey\")(\n  function* (\n    config: Pick<ClaudeSettings, \"binaryPath\" | \"homePath\">,\n  ): Effect.fn.Return<string, never, Path.Path> {\n    const resolvedHomePath = yield* resolveClaudeHomePath(config);\n    return `${config.binaryPath}\\0${resolvedHomePath}`;\n  },\n);\n","import {\n  type ClaudeSettings,\n  type ModelCapabilities,\n  type ModelSelection,\n  ProviderDriverKind,\n  type ServerProviderAuth,\n  type ServerProviderModel,\n  type ServerProviderSlashCommand,\n  type ServerProviderState,\n} from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Result from \"effect/Result\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport {\n  createModelCapabilities,\n  getModelSelectionStringOptionValue,\n  getProviderOptionCurrentValue,\n  getProviderOptionDescriptors,\n} from \"@salchi/shared/model\";\nimport { compareSemverVersions } from \"@salchi/shared/semver\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\nimport {\n  query as claudeQuery,\n  type AccountInfo as ClaudeAccountInfo,\n  type SlashCommand as ClaudeSlashCommand,\n  type SDKUserMessage,\n} from \"@anthropic-ai/claude-agent-sdk\";\n\nimport {\n  buildBooleanOptionDescriptor,\n  buildSelectOptionDescriptor,\n  buildServerProvider,\n  AUTH_PROBE_TIMEOUT_MS,\n  DEFAULT_TIMEOUT_MS,\n  detailFromResult,\n  extractAuthBoolean,\n  isCommandMissingCause,\n  parseGenericCliVersion,\n  providerModelsFromSettings,\n  spawnAndCollect,\n  type CommandResult,\n  type ServerProviderDraft,\n} from \"../providerSnapshot.ts\";\nimport { makeClaudeEnvironment } from \"../Drivers/ClaudeHome.ts\";\n\nconst DEFAULT_CLAUDE_MODEL_CAPABILITIES: ModelCapabilities = createModelCapabilities({\n  optionDescriptors: [],\n});\n\nconst PROVIDER = ProviderDriverKind.make(\"claudeAgent\");\nconst CLAUDE_PRESENTATION = {\n  displayName: \"Claude\",\n  showInteractionModeToggle: true,\n} as const;\nconst MINIMUM_CLAUDE_OPUS_5_VERSION = \"2.1.219\";\nconst MINIMUM_CLAUDE_FABLE_5_VERSION = \"2.1.170\";\nconst MINIMUM_CLAUDE_OPUS_4_8_VERSION = \"2.1.154\";\nconst MINIMUM_CLAUDE_OPUS_4_7_VERSION = \"2.1.111\";\nconst VERSION_GATED_MODEL_REQUIREMENTS = [\n  {\n    slug: \"claude-opus-5\",\n    name: \"Claude Opus 5\",\n    minimumVersion: MINIMUM_CLAUDE_OPUS_5_VERSION,\n  },\n  {\n    slug: \"claude-fable-5\",\n    name: \"Claude Fable 5\",\n    minimumVersion: MINIMUM_CLAUDE_FABLE_5_VERSION,\n  },\n  {\n    slug: \"claude-opus-4-8\",\n    name: \"Claude Opus 4.8\",\n    minimumVersion: MINIMUM_CLAUDE_OPUS_4_8_VERSION,\n  },\n  {\n    slug: \"claude-opus-4-7\",\n    name: \"Claude Opus 4.7\",\n    minimumVersion: MINIMUM_CLAUDE_OPUS_4_7_VERSION,\n  },\n] as const;\n\nfunction createModernClaudeOpusCapabilities(defaultEffort: \"high\" | \"xhigh\"): ModelCapabilities {\n  return createModelCapabilities({\n    optionDescriptors: [\n      buildSelectOptionDescriptor({\n        id: \"effort\",\n        label: \"Reasoning\",\n        options: [\n          { value: \"low\", label: \"Low\" },\n          { value: \"medium\", label: \"Medium\" },\n          { value: \"high\", label: \"High\", isDefault: defaultEffort === \"high\" },\n          { value: \"xhigh\", label: \"Extra High\", isDefault: defaultEffort === \"xhigh\" },\n          { value: \"max\", label: \"Max\" },\n          { value: \"ultrathink\", label: \"Ultrathink\" },\n        ],\n        promptInjectedValues: [\"ultrathink\"],\n      }),\n      buildBooleanOptionDescriptor({\n        id: \"fastMode\",\n        label: \"Fast Mode\",\n      }),\n      buildSelectOptionDescriptor({\n        id: \"contextWindow\",\n        label: \"Context Window\",\n        options: [\n          { value: \"200k\", label: \"200k\", isDefault: true },\n          { value: \"1m\", label: \"1M\" },\n        ],\n      }),\n    ],\n  });\n}\n\nconst BUILT_IN_MODELS: ReadonlyArray<ServerProviderModel> = [\n  {\n    slug: \"claude-opus-5\",\n    name: \"Claude Opus 5\",\n    isCustom: false,\n    capabilities: createModernClaudeOpusCapabilities(\"high\"),\n  },\n  {\n    slug: \"claude-fable-5\",\n    name: \"Claude Fable 5\",\n    isCustom: false,\n    capabilities: createModelCapabilities({\n      optionDescriptors: [\n        buildSelectOptionDescriptor({\n          id: \"effort\",\n          label: \"Reasoning\",\n          options: [\n            { value: \"low\", label: \"Low\" },\n            { value: \"medium\", label: \"Medium\" },\n            { value: \"high\", label: \"High\", isDefault: true },\n            { value: \"xhigh\", label: \"Extra High\" },\n            { value: \"max\", label: \"Max\" },\n            { value: \"ultrathink\", label: \"Ultrathink\" },\n          ],\n          promptInjectedValues: [\"ultrathink\"],\n        }),\n      ],\n    }),\n  },\n  {\n    slug: \"claude-opus-4-8\",\n    name: \"Claude Opus 4.8\",\n    isCustom: false,\n    capabilities: createModernClaudeOpusCapabilities(\"high\"),\n  },\n  {\n    slug: \"claude-opus-4-7\",\n    name: \"Claude Opus 4.7\",\n    isCustom: false,\n    capabilities: createModernClaudeOpusCapabilities(\"xhigh\"),\n  },\n  {\n    slug: \"claude-opus-4-6\",\n    name: \"Claude Opus 4.6\",\n    isCustom: false,\n    capabilities: createModelCapabilities({\n      optionDescriptors: [\n        buildSelectOptionDescriptor({\n          id: \"effort\",\n          label: \"Reasoning\",\n          options: [\n            { value: \"low\", label: \"Low\" },\n            { value: \"medium\", label: \"Medium\" },\n            { value: \"high\", label: \"High\", isDefault: true },\n            { value: \"max\", label: \"Max\" },\n            { value: \"ultrathink\", label: \"Ultrathink\" },\n          ],\n          promptInjectedValues: [\"ultrathink\"],\n        }),\n        buildBooleanOptionDescriptor({\n          id: \"fastMode\",\n          label: \"Fast Mode\",\n        }),\n        buildSelectOptionDescriptor({\n          id: \"contextWindow\",\n          label: \"Context Window\",\n          options: [\n            { value: \"200k\", label: \"200k\", isDefault: true },\n            { value: \"1m\", label: \"1M\" },\n          ],\n        }),\n      ],\n    }),\n  },\n  {\n    slug: \"claude-opus-4-5\",\n    name: \"Claude Opus 4.5\",\n    isCustom: false,\n    capabilities: createModelCapabilities({\n      optionDescriptors: [\n        buildSelectOptionDescriptor({\n          id: \"effort\",\n          label: \"Reasoning\",\n          options: [\n            { value: \"low\", label: \"Low\" },\n            { value: \"medium\", label: \"Medium\" },\n            { value: \"high\", label: \"High\", isDefault: true },\n            { value: \"max\", label: \"Max\" },\n          ],\n        }),\n        buildBooleanOptionDescriptor({\n          id: \"fastMode\",\n          label: \"Fast Mode\",\n        }),\n      ],\n    }),\n  },\n  {\n    slug: \"claude-sonnet-4-6\",\n    name: \"Claude Sonnet 4.6\",\n    isCustom: false,\n    capabilities: createModelCapabilities({\n      optionDescriptors: [\n        buildSelectOptionDescriptor({\n          id: \"effort\",\n          label: \"Reasoning\",\n          options: [\n            { value: \"low\", label: \"Low\" },\n            { value: \"medium\", label: \"Medium\" },\n            { value: \"high\", label: \"High\", isDefault: true },\n            { value: \"ultrathink\", label: \"Ultrathink\" },\n          ],\n          promptInjectedValues: [\"ultrathink\"],\n        }),\n        buildSelectOptionDescriptor({\n          id: \"contextWindow\",\n          label: \"Context Window\",\n          options: [\n            { value: \"200k\", label: \"200k\", isDefault: true },\n            { value: \"1m\", label: \"1M\" },\n          ],\n        }),\n      ],\n    }),\n  },\n  {\n    slug: \"claude-haiku-4-5\",\n    name: \"Claude Haiku 4.5\",\n    isCustom: false,\n    capabilities: createModelCapabilities({\n      optionDescriptors: [\n        buildBooleanOptionDescriptor({\n          id: \"thinking\",\n          label: \"Thinking\",\n        }),\n      ],\n    }),\n  },\n];\n\nfunction getUnsupportedClaudeModelRequirements(version: string | null | undefined) {\n  return VERSION_GATED_MODEL_REQUIREMENTS.filter(\n    (requirement) => !version || compareSemverVersions(version, requirement.minimumVersion) < 0,\n  );\n}\n\nfunction getBuiltInClaudeModelsForVersion(\n  version: string | null | undefined,\n): ReadonlyArray<ServerProviderModel> {\n  const unsupportedSlugs = new Set<string>(\n    getUnsupportedClaudeModelRequirements(version).map((requirement) => requirement.slug),\n  );\n  return BUILT_IN_MODELS.filter((model) => !unsupportedSlugs.has(model.slug));\n}\n\nfunction formatClaudeModelUpgradeMessage(version: string | null): string | undefined {\n  const newestUnsupportedModel = getUnsupportedClaudeModelRequirements(version)[0];\n  if (!newestUnsupportedModel) {\n    return undefined;\n  }\n  const versionLabel = version ? `v${version}` : \"the installed version\";\n  return `Claude Code ${versionLabel} is too old for ${newestUnsupportedModel.name}. Upgrade to v${newestUnsupportedModel.minimumVersion} or newer to access it.`;\n}\n\nexport function getClaudeModelCapabilities(model: string | null | undefined): ModelCapabilities {\n  const slug = model?.trim();\n  return (\n    BUILT_IN_MODELS.find((candidate) => candidate.slug === slug)?.capabilities ??\n    DEFAULT_CLAUDE_MODEL_CAPABILITIES\n  );\n}\n\nexport function resolveClaudeEffort(\n  caps: ModelCapabilities,\n  raw: string | null | undefined,\n): string | undefined {\n  const descriptors = getProviderOptionDescriptors({\n    caps,\n    ...(raw ? { selections: [{ id: \"effort\", value: raw }] } : {}),\n  });\n  const effortDescriptor = descriptors.find((descriptor) => descriptor.id === \"effort\");\n  const value = getProviderOptionCurrentValue(effortDescriptor);\n  return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Normalize a resolved Claude effort value into one suitable for the Claude\n * CLI's `--effort` flag.\n *\n * Mirrors the mapping used when invoking the Claude Agent SDK\n * ({@link getEffectiveClaudeAgentEffort} in ClaudeAdapter): the Opus 4.7+\n * capability `\"xhigh\"` is rewritten to the accepted CLI value `\"max\"`, and\n * `\"ultrathink\"` is filtered out because it is a prompt-prefix mode rather\n * than a CLI-effort value. Returns `undefined` when no flag should be passed.\n */\nexport function normalizeClaudeCliEffort(effort: string | null | undefined): string | undefined {\n  if (!effort || effort === \"ultrathink\") {\n    return undefined;\n  }\n  if (effort === \"xhigh\") {\n    return \"max\";\n  }\n  return effort;\n}\n\nexport function resolveClaudeApiModelId(modelSelection: ModelSelection): string {\n  switch (getModelSelectionStringOptionValue(modelSelection, \"contextWindow\")) {\n    case \"1m\":\n      return `${modelSelection.model}[1m]`;\n    default:\n      return modelSelection.model;\n  }\n}\n\nfunction toTitleCaseWords(value: string): string {\n  const parts: Array<string> = [];\n  for (const part of value.split(/[\\s_-]+/g)) {\n    if (part.length > 0) {\n      parts.push(part[0]!.toUpperCase() + part.slice(1).toLowerCase());\n    }\n  }\n  return parts.join(\" \");\n}\n\nfunction claudeSubscriptionLabel(subscriptionType: string | undefined): string | undefined {\n  const normalized = subscriptionType?.toLowerCase().replace(/[\\s_-]+/g, \"\");\n  if (!normalized) return undefined;\n\n  switch (normalized) {\n    case \"claudemaxsubscription\":\n      return \"Max\";\n    case \"claudemax5xsubscription\":\n      return \"Max 5x\";\n    case \"claudemax20xsubscription\":\n      return \"Max 20x\";\n    case \"claudeenterprisesubscription\":\n      return \"Enterprise\";\n    case \"claudeteamsubscription\":\n      return \"Team\";\n    case \"claudeprosubscription\":\n      return \"Pro\";\n    case \"claudefreesubscription\":\n      return \"Free\";\n    case \"max\":\n    case \"maxplan\":\n      return \"Max\";\n    case \"max5\":\n      return \"Max 5x\";\n    case \"max20\":\n      return \"Max 20x\";\n    case \"enterprise\":\n      return \"Enterprise\";\n    case \"team\":\n      return \"Team\";\n    case \"pro\":\n      return \"Pro\";\n    case \"free\":\n      return \"Free\";\n    default:\n      return toTitleCaseWords(subscriptionType!);\n  }\n}\n\nfunction normalizeClaudeAuthMethod(authMethod: string | undefined): string | undefined {\n  const normalized = authMethod?.toLowerCase().replace(/[\\s_-]+/g, \"\");\n  if (!normalized) return undefined;\n  if (\n    normalized === \"apikey\" ||\n    normalized === \"anthropicapikey\" ||\n    normalized === \"anthropicauthtoken\"\n  ) {\n    return \"apiKey\";\n  }\n  return undefined;\n}\n\nfunction formatClaudeSubscriptionAuthLabel(subscriptionType: string): string {\n  const subscriptionLabel =\n    claudeSubscriptionLabel(subscriptionType) ?? toTitleCaseWords(subscriptionType);\n  const normalized = subscriptionLabel.toLowerCase().replace(/[\\s_-]+/g, \"\");\n\n  if (normalized.startsWith(\"claude\") && normalized.endsWith(\"subscription\")) {\n    return subscriptionLabel;\n  }\n  if (normalized.startsWith(\"claude\")) {\n    return `${subscriptionLabel} Subscription`;\n  }\n  if (normalized.endsWith(\"subscription\")) {\n    return `Claude ${subscriptionLabel}`;\n  }\n  return `Claude ${subscriptionLabel} Subscription`;\n}\n\nfunction claudeAuthMetadata(input: {\n  readonly subscriptionType: string | undefined;\n  readonly authMethod: string | undefined;\n}): { readonly type: string; readonly label: string } | undefined {\n  if (normalizeClaudeAuthMethod(input.authMethod) === \"apiKey\") {\n    return {\n      type: \"apiKey\",\n      label: \"Claude API Key\",\n    };\n  }\n\n  if (input.subscriptionType) {\n    return {\n      type: input.subscriptionType,\n      label: formatClaudeSubscriptionAuthLabel(input.subscriptionType),\n    };\n  }\n\n  return undefined;\n}\n\nfunction parseClaudeAuthStatusFromOutput(result: CommandResult): {\n  readonly status: Exclude<ServerProviderState, \"disabled\">;\n  readonly auth: Pick<ServerProviderAuth, \"status\">;\n  readonly message?: string;\n} {\n  const lowerOutput = `${result.stdout}\\n${result.stderr}`.toLowerCase();\n\n  if (\n    lowerOutput.includes(\"unknown command\") ||\n    lowerOutput.includes(\"unrecognized command\") ||\n    lowerOutput.includes(\"unexpected argument\")\n  ) {\n    return {\n      status: \"warning\",\n      auth: { status: \"unknown\" },\n      message:\n        \"Claude Agent authentication status command is unavailable in this version of Claude.\",\n    };\n  }\n\n  if (\n    lowerOutput.includes(\"not logged in\") ||\n    lowerOutput.includes(\"login required\") ||\n    lowerOutput.includes(\"authentication required\") ||\n    lowerOutput.includes(\"run `claude login`\") ||\n    lowerOutput.includes(\"run claude login\")\n  ) {\n    return {\n      status: \"error\",\n      auth: { status: \"unauthenticated\" },\n      message: \"Claude is not authenticated. Run `claude auth login` and try again.\",\n    };\n  }\n\n  const trimmedStdout = result.stdout.trim();\n  let parsedAuth: boolean | undefined;\n  let parsedJson = false;\n  if (trimmedStdout.startsWith(\"{\") || trimmedStdout.startsWith(\"[\")) {\n    try {\n      parsedAuth = extractAuthBoolean(JSON.parse(trimmedStdout) as unknown);\n      parsedJson = true;\n    } catch {\n      // Fall through to the command exit status for non-JSON output.\n    }\n  }\n\n  if (parsedAuth === true) {\n    return { status: \"ready\", auth: { status: \"authenticated\" } };\n  }\n  if (parsedAuth === false) {\n    return {\n      status: \"error\",\n      auth: { status: \"unauthenticated\" },\n      message: \"Claude is not authenticated. Run `claude auth login` and try again.\",\n    };\n  }\n  if (parsedJson) {\n    return {\n      status: \"warning\",\n      auth: { status: \"unknown\" },\n      message:\n        \"Could not verify Claude authentication status from JSON output (missing auth marker).\",\n    };\n  }\n  if (result.code === 0) {\n    return { status: \"ready\", auth: { status: \"authenticated\" } };\n  }\n\n  const detail = detailFromResult(result);\n  return {\n    status: \"warning\",\n    auth: { status: \"unknown\" },\n    message: detail\n      ? `Could not verify Claude authentication status. ${detail}`\n      : \"Could not verify Claude authentication status.\",\n  };\n}\n\n// ── SDK capability probe ────────────────────────────────────────────\n\nconst CAPABILITIES_PROBE_TIMEOUT_MS = 8_000;\n\nfunction nonEmptyProbeString(value: string): string | undefined {\n  const candidate = value.trim();\n  return candidate ? candidate : undefined;\n}\n\ntype ClaudeCapabilitiesProbe = {\n  readonly email: ClaudeAccountInfo[\"email\"];\n  readonly organization: ClaudeAccountInfo[\"organization\"];\n  readonly subscriptionType: ClaudeAccountInfo[\"subscriptionType\"];\n  readonly tokenSource: ClaudeAccountInfo[\"tokenSource\"];\n  readonly apiKeySource: ClaudeAccountInfo[\"apiKeySource\"];\n  readonly apiProvider: ClaudeAccountInfo[\"apiProvider\"];\n  readonly slashCommands: ReadonlyArray<ServerProviderSlashCommand>;\n};\n\ntype ClaudeAuthProbeResult = {\n  readonly status: Exclude<ServerProviderState, \"disabled\">;\n  readonly auth: Pick<ServerProviderAuth, \"status\">;\n  readonly message?: string;\n};\n\nfunction hasClaudeCredentialSource(value: string | undefined): boolean {\n  const normalized = value\n    ?.trim()\n    .toLowerCase()\n    .replace(/[\\s_-]+/g, \"\");\n  return normalized !== undefined && normalized !== \"\" && normalized !== \"none\";\n}\n\nfunction claudeCapabilitiesAuthStatus(\n  capabilities: ClaudeCapabilitiesProbe,\n): ServerProviderAuth[\"status\"] {\n  if (capabilities.apiProvider && capabilities.apiProvider !== \"firstParty\") {\n    // Claude Code delegates authentication to the configured cloud provider.\n    return \"authenticated\";\n  }\n\n  if (\n    capabilities.email ||\n    capabilities.organization ||\n    capabilities.subscriptionType ||\n    hasClaudeCredentialSource(capabilities.tokenSource) ||\n    hasClaudeCredentialSource(capabilities.apiKeySource)\n  ) {\n    return \"authenticated\";\n  }\n\n  if (\n    capabilities.apiProvider === \"firstParty\" &&\n    (capabilities.tokenSource?.trim().toLowerCase() === \"none\" ||\n      capabilities.apiKeySource?.trim().toLowerCase() === \"none\")\n  ) {\n    return \"unauthenticated\";\n  }\n\n  return \"unknown\";\n}\n\nfunction parseClaudeInitializationCommands(\n  commands: ReadonlyArray<ClaudeSlashCommand> | undefined,\n): ReadonlyArray<ServerProviderSlashCommand> {\n  return dedupeSlashCommands(\n    (commands ?? []).flatMap((command) => {\n      const name = nonEmptyProbeString(command.name);\n      if (!name) {\n        return [];\n      }\n\n      const description = nonEmptyProbeString(command.description);\n      const argumentHint = nonEmptyProbeString(command.argumentHint);\n\n      return [\n        {\n          name,\n          ...(description ? { description } : {}),\n          ...(argumentHint ? { input: { hint: argumentHint } } : {}),\n        } satisfies ServerProviderSlashCommand,\n      ];\n    }),\n  );\n}\n\nfunction dedupeSlashCommands(\n  commands: ReadonlyArray<ServerProviderSlashCommand>,\n): ReadonlyArray<ServerProviderSlashCommand> {\n  const commandsByName = new Map<string, ServerProviderSlashCommand>();\n\n  for (const command of commands) {\n    const name = nonEmptyProbeString(command.name);\n    if (!name) {\n      continue;\n    }\n\n    const key = name.toLowerCase();\n    const existing = commandsByName.get(key);\n    if (!existing) {\n      commandsByName.set(key, {\n        ...command,\n        name,\n      });\n      continue;\n    }\n\n    commandsByName.set(key, {\n      ...existing,\n      ...(existing.description\n        ? {}\n        : command.description\n          ? { description: command.description }\n          : {}),\n      ...(existing.input?.hint\n        ? {}\n        : command.input?.hint\n          ? { input: { hint: command.input.hint } }\n          : {}),\n    });\n  }\n\n  return [...commandsByName.values()];\n}\n\nfunction waitForAbortSignal(signal: AbortSignal): Promise<void> {\n  if (signal.aborted) {\n    return Promise.resolve();\n  }\n  return new Promise((resolve) => {\n    signal.addEventListener(\"abort\", () => resolve(), { once: true });\n  });\n}\n\n/**\n * Probe account information by spawning a lightweight Claude Agent SDK\n * session and reading the initialization result.\n *\n * We pass a never-yielding AsyncIterable as the prompt so that no user\n * message is ever written to the subprocess stdin. This means the Claude\n * Code subprocess completes its local initialization IPC (returning\n * account info and slash commands) but never starts an API request to\n * Anthropic. We read the init data and then abort the subprocess.\n *\n * This is used as a fallback when `claude auth status` does not include\n * subscription type information.\n */\nconst probeClaudeCapabilities = (\n  claudeSettings: ClaudeSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) => {\n  const abort = new AbortController();\n  return Effect.gen(function* () {\n    const claudeEnvironment = yield* makeClaudeEnvironment(claudeSettings, environment);\n    return yield* Effect.tryPromise(async () => {\n      const q = claudeQuery({\n        // Never yield — we only need initialization data, not a conversation.\n        // This prevents any prompt from reaching the Anthropic API.\n        // oxlint-disable-next-line require-yield\n        prompt: (async function* (): AsyncGenerator<SDKUserMessage> {\n          await waitForAbortSignal(abort.signal);\n        })(),\n        options: {\n          persistSession: false,\n          pathToClaudeCodeExecutable: claudeSettings.binaryPath,\n          abortController: abort,\n          settingSources: [\"user\", \"project\", \"local\"],\n          allowedTools: [],\n          env: claudeEnvironment,\n          stderr: () => {},\n        },\n      });\n      const init = await q.initializationResult();\n      const account: ClaudeAccountInfo | undefined = init.account;\n      return {\n        email: account?.email,\n        organization: account?.organization,\n        subscriptionType: account?.subscriptionType,\n        tokenSource: account?.tokenSource,\n        apiKeySource: account?.apiKeySource,\n        apiProvider: account?.apiProvider,\n        slashCommands: parseClaudeInitializationCommands(init.commands),\n      } satisfies ClaudeCapabilitiesProbe;\n    });\n  }).pipe(\n    Effect.ensuring(\n      Effect.sync(() => {\n        if (!abort.signal.aborted) abort.abort();\n      }),\n    ),\n    Effect.timeoutOption(CAPABILITIES_PROBE_TIMEOUT_MS),\n    Effect.result,\n    Effect.map((result) => {\n      if (Result.isFailure(result)) return undefined;\n      return Option.isSome(result.success) ? result.success.value : undefined;\n    }),\n  );\n};\n\nconst runClaudeCommand = Effect.fn(\"runClaudeCommand\")(function* (\n  claudeSettings: ClaudeSettings,\n  args: ReadonlyArray<string>,\n  environment: NodeJS.ProcessEnv = process.env,\n) {\n  const claudeEnvironment = yield* makeClaudeEnvironment(claudeSettings, environment);\n  const spawnCommand = resolveSpawnCommand(claudeSettings.binaryPath, args, {\n    env: claudeEnvironment,\n  });\n  const command = ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n    env: claudeEnvironment,\n    shell: spawnCommand.shell,\n  });\n  return yield* spawnAndCollect(claudeSettings.binaryPath, command);\n});\n\nexport const checkClaudeProviderStatus = Effect.fn(\"checkClaudeProviderStatus\")(function* (\n  claudeSettings: ClaudeSettings,\n  resolveCapabilities?: (\n    claudeSettings: ClaudeSettings,\n  ) => Effect.Effect<ClaudeCapabilitiesProbe | undefined>,\n  environment: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<\n  ServerProviderDraft,\n  never,\n  ChildProcessSpawner.ChildProcessSpawner | Path.Path\n> {\n  const checkedAt = DateTime.formatIso(yield* DateTime.now);\n  const allModels = providerModelsFromSettings(\n    BUILT_IN_MODELS,\n    PROVIDER,\n    claudeSettings.customModels,\n    DEFAULT_CLAUDE_MODEL_CAPABILITIES,\n  );\n\n  if (!claudeSettings.enabled) {\n    return buildServerProvider({\n      presentation: CLAUDE_PRESENTATION,\n      enabled: false,\n      checkedAt,\n      models: allModels,\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Claude is disabled in Salchi settings.\",\n      },\n    });\n  }\n\n  const versionProbe = yield* runClaudeCommand(claudeSettings, [\"--version\"], environment).pipe(\n    Effect.timeoutOption(DEFAULT_TIMEOUT_MS),\n    Effect.result,\n  );\n\n  if (Result.isFailure(versionProbe)) {\n    const error = versionProbe.failure;\n    return buildServerProvider({\n      presentation: CLAUDE_PRESENTATION,\n      enabled: claudeSettings.enabled,\n      checkedAt,\n      models: allModels,\n      probe: {\n        installed: !isCommandMissingCause(error),\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: isCommandMissingCause(error)\n          ? \"Claude Agent CLI (`claude`) is not installed or not on PATH.\"\n          : `Failed to execute Claude Agent CLI health check: ${error instanceof Error ? error.message : String(error)}.`,\n      },\n    });\n  }\n\n  if (Option.isNone(versionProbe.success)) {\n    return buildServerProvider({\n      presentation: CLAUDE_PRESENTATION,\n      enabled: claudeSettings.enabled,\n      checkedAt,\n      models: allModels,\n      probe: {\n        installed: true,\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message:\n          \"Claude Agent CLI is installed but failed to run. Timed out while running command.\",\n      },\n    });\n  }\n\n  const version = versionProbe.success.value;\n  const parsedVersion = parseGenericCliVersion(`${version.stdout}\\n${version.stderr}`);\n  if (version.code !== 0) {\n    const detail = detailFromResult(version);\n    return buildServerProvider({\n      presentation: CLAUDE_PRESENTATION,\n      enabled: claudeSettings.enabled,\n      checkedAt,\n      models: allModels,\n      probe: {\n        installed: true,\n        version: parsedVersion,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: detail\n          ? `Claude Agent CLI is installed but failed to run. ${detail}`\n          : \"Claude Agent CLI is installed but failed to run.\",\n      },\n    });\n  }\n\n  const models = providerModelsFromSettings(\n    getBuiltInClaudeModelsForVersion(parsedVersion),\n    PROVIDER,\n    claudeSettings.customModels,\n    DEFAULT_CLAUDE_MODEL_CAPABILITIES,\n  );\n  const claudeModelUpgradeMessage = formatClaudeModelUpgradeMessage(parsedVersion);\n\n  const capabilities = resolveCapabilities\n    ? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))\n    : undefined;\n  const slashCommands = capabilities?.slashCommands ?? [];\n  const dedupedSlashCommands = dedupeSlashCommands(slashCommands);\n\n  const sdkAuthStatus = capabilities ? claudeCapabilitiesAuthStatus(capabilities) : \"unknown\";\n  let resolvedAuth: ClaudeAuthProbeResult;\n  if (sdkAuthStatus === \"authenticated\") {\n    resolvedAuth = { status: \"ready\", auth: { status: \"authenticated\" } };\n  } else if (sdkAuthStatus === \"unauthenticated\") {\n    resolvedAuth = {\n      status: \"error\",\n      auth: { status: \"unauthenticated\" },\n      message: \"Claude is not authenticated. Run `claude auth login` and try again.\",\n    };\n  } else {\n    const authProbe = yield* runClaudeCommand(claudeSettings, [\"auth\", \"status\"], environment).pipe(\n      Effect.timeoutOption(AUTH_PROBE_TIMEOUT_MS),\n      Effect.result,\n    );\n\n    if (Result.isSuccess(authProbe) && Option.isSome(authProbe.success)) {\n      resolvedAuth = parseClaudeAuthStatusFromOutput(authProbe.success.value);\n    } else {\n      resolvedAuth = {\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message:\n          Result.isSuccess(authProbe) && Option.isNone(authProbe.success)\n            ? \"Could not verify Claude authentication status. Timed out while running command.\"\n            : \"Could not verify Claude authentication status.\",\n      };\n    }\n  }\n\n  if (resolvedAuth.auth.status !== \"authenticated\") {\n    return buildServerProvider({\n      presentation: CLAUDE_PRESENTATION,\n      enabled: claudeSettings.enabled,\n      checkedAt,\n      models,\n      slashCommands: dedupedSlashCommands,\n      probe: {\n        installed: true,\n        version: parsedVersion,\n        status: resolvedAuth.status,\n        auth: resolvedAuth.auth,\n        ...(resolvedAuth.message\n          ? { message: resolvedAuth.message }\n          : claudeModelUpgradeMessage\n            ? { message: claudeModelUpgradeMessage }\n            : {}),\n      },\n    });\n  }\n\n  const authMetadata = claudeAuthMetadata({\n    subscriptionType: capabilities?.subscriptionType,\n    authMethod: capabilities?.tokenSource ?? capabilities?.apiKeySource,\n  });\n  return buildServerProvider({\n    presentation: CLAUDE_PRESENTATION,\n    enabled: claudeSettings.enabled,\n    checkedAt,\n    models,\n    slashCommands: dedupedSlashCommands,\n    probe: {\n      installed: true,\n      version: parsedVersion,\n      status: \"ready\",\n      auth: {\n        status: \"authenticated\",\n        ...(capabilities?.email ? { email: capabilities.email } : {}),\n        ...(authMetadata ? authMetadata : {}),\n      },\n      ...(claudeModelUpgradeMessage ? { message: claudeModelUpgradeMessage } : {}),\n    },\n  });\n});\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\nexport const makePendingClaudeProvider = (\n  claudeSettings: ClaudeSettings,\n): Effect.Effect<ServerProviderDraft> =>\n  Effect.gen(function* () {\n    const checkedAt = yield* nowIso;\n    const models = providerModelsFromSettings(\n      BUILT_IN_MODELS,\n      PROVIDER,\n      claudeSettings.customModels,\n      DEFAULT_CLAUDE_MODEL_CAPABILITIES,\n    );\n\n    if (!claudeSettings.enabled) {\n      return buildServerProvider({\n        presentation: CLAUDE_PRESENTATION,\n        enabled: false,\n        checkedAt,\n        models,\n        probe: {\n          installed: false,\n          version: null,\n          status: \"warning\",\n          auth: { status: \"unknown\" },\n          message: \"Claude is disabled in Salchi settings.\",\n        },\n      });\n    }\n\n    return buildServerProvider({\n      presentation: CLAUDE_PRESENTATION,\n      enabled: true,\n      checkedAt,\n      models,\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Claude provider status has not been checked in this session yet.\",\n      },\n    });\n  });\n\nexport { probeClaudeCapabilities };\n","/**\n * ClaudeTextGeneration – Text generation layer using the Claude CLI.\n *\n * Implements the same TextGenerationShape contract as CodexTextGeneration but\n * delegates to the `claude` CLI (`claude -p`) with structured JSON output\n * instead of the `codex exec` CLI.\n *\n * @module ClaudeTextGeneration\n */\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { type ClaudeSettings, type ModelSelection } from \"@salchi/contracts\";\nimport { sanitizeBranchFragment, sanitizeFeatureBranchName } from \"@salchi/shared/git\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport { TextGenerationError } from \"@salchi/contracts\";\nimport { type TextGenerationShape } from \"./TextGeneration.ts\";\nimport {\n  buildBranchNamePrompt,\n  buildCommitMessagePrompt,\n  buildPrContentPrompt,\n  buildThreadTitlePrompt,\n} from \"./TextGenerationPrompts.ts\";\nimport {\n  normalizeCliError,\n  sanitizeCommitSubject,\n  sanitizePrTitle,\n  sanitizeThreadTitle,\n  toJsonSchemaObject,\n} from \"./TextGenerationUtils.ts\";\nimport {\n  getModelSelectionStringOptionValue,\n  getProviderOptionDescriptors,\n} from \"@salchi/shared/model\";\nimport {\n  getClaudeModelCapabilities,\n  normalizeClaudeCliEffort,\n  resolveClaudeApiModelId,\n  resolveClaudeEffort,\n} from \"../provider/Layers/ClaudeProvider.ts\";\nimport { makeClaudeEnvironment } from \"../provider/Drivers/ClaudeHome.ts\";\n\nconst CLAUDE_TIMEOUT_MS = 180_000;\n\n/**\n * Schema for the wrapper JSON returned by `claude -p --output-format json`.\n * We only care about `structured_output`.\n */\nconst ClaudeOutputEnvelope = Schema.Struct({\n  structured_output: Schema.Unknown,\n});\n\nconst encodeJsonString = Schema.encodeEffect(Schema.UnknownFromJsonString);\nconst decodeClaudeOutputEnvelope = Schema.decodeEffect(Schema.fromJsonString(ClaudeOutputEnvelope));\n\nexport const makeClaudeTextGeneration = Effect.fn(\"makeClaudeTextGeneration\")(function* (\n  claudeSettings: ClaudeSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) {\n  const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const claudeEnvironment = yield* makeClaudeEnvironment(claudeSettings, environment);\n\n  const readStreamAsString = <E>(\n    operation: string,\n    stream: Stream.Stream<Uint8Array, E>,\n  ): Effect.Effect<string, TextGenerationError> =>\n    stream.pipe(\n      Stream.decodeText(),\n      Stream.runFold(\n        () => \"\",\n        (acc, chunk) => acc + chunk,\n      ),\n      Effect.mapError((cause) =>\n        normalizeCliError(\"claude\", operation, cause, \"Failed to collect process output\"),\n      ),\n    );\n\n  const encodeJsonForOperation = (\n    operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\",\n    value: unknown,\n    detail: string,\n  ): Effect.Effect<string, TextGenerationError> =>\n    encodeJsonString(value).pipe(\n      Effect.mapError(\n        (cause) =>\n          new TextGenerationError({\n            operation,\n            detail,\n            cause,\n          }),\n      ),\n    );\n\n  /**\n   * Spawn the Claude CLI with structured JSON output and return the parsed,\n   * schema-validated result.\n   */\n  const runClaudeJson = Effect.fn(\"runClaudeJson\")(function* <S extends Schema.Top>({\n    operation,\n    cwd,\n    prompt,\n    outputSchemaJson,\n    modelSelection,\n  }: {\n    operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\";\n    cwd: string;\n    prompt: string;\n    outputSchemaJson: S;\n    modelSelection: ModelSelection;\n  }): Effect.fn.Return<S[\"Type\"], TextGenerationError, S[\"DecodingServices\"]> {\n    const jsonSchemaStr = yield* encodeJsonForOperation(\n      operation,\n      toJsonSchemaObject(outputSchemaJson),\n      \"Failed to encode structured output schema.\",\n    );\n    const caps = getClaudeModelCapabilities(modelSelection.model);\n    const descriptors = getProviderOptionDescriptors({\n      caps,\n      selections: modelSelection.options,\n    });\n    const findDescriptor = (id: string) => descriptors.find((descriptor) => descriptor.id === id);\n    const rawEffortSelection = getModelSelectionStringOptionValue(modelSelection, \"effort\");\n    const resolvedEffort = resolveClaudeEffort(caps, rawEffortSelection);\n    const cliEffort = normalizeClaudeCliEffort(resolvedEffort);\n    const thinkingDescriptor = findDescriptor(\"thinking\");\n    const fastModeDescriptor = findDescriptor(\"fastMode\");\n    const thinking =\n      thinkingDescriptor?.type === \"boolean\" ? thinkingDescriptor.currentValue : undefined;\n    const fastMode =\n      fastModeDescriptor?.type === \"boolean\" ? fastModeDescriptor.currentValue : undefined;\n    const settings = {\n      ...(typeof thinking === \"boolean\" ? { alwaysThinkingEnabled: thinking } : {}),\n      ...(fastMode ? { fastMode: true } : {}),\n    };\n    const settingsJson =\n      Object.keys(settings).length > 0\n        ? yield* encodeJsonForOperation(\n            operation,\n            settings,\n            \"Failed to encode Claude CLI settings.\",\n          )\n        : undefined;\n\n    const runClaudeCommand = Effect.fn(\"runClaudeJson.runClaudeCommand\")(function* () {\n      const commandName = claudeSettings.binaryPath || \"claude\";\n      const commandArgs = [\n        \"-p\",\n        \"--output-format\",\n        \"json\",\n        \"--json-schema\",\n        jsonSchemaStr,\n        \"--model\",\n        resolveClaudeApiModelId(modelSelection),\n        ...(cliEffort ? [\"--effort\", cliEffort] : []),\n        ...(settingsJson ? [\"--settings\", settingsJson] : []),\n        \"--dangerously-skip-permissions\",\n      ];\n      const spawnCommand = resolveSpawnCommand(commandName, commandArgs, {\n        env: claudeEnvironment,\n      });\n      const command = ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n        env: claudeEnvironment,\n        cwd,\n        shell: spawnCommand.shell,\n        stdin: {\n          stream: Stream.encodeText(Stream.make(prompt)),\n        },\n      });\n\n      const child = yield* commandSpawner\n        .spawn(command)\n        .pipe(\n          Effect.mapError((cause) =>\n            normalizeCliError(\"claude\", operation, cause, \"Failed to spawn Claude CLI process\"),\n          ),\n        );\n\n      const [stdout, stderr, exitCode] = yield* Effect.all(\n        [\n          readStreamAsString(operation, child.stdout),\n          readStreamAsString(operation, child.stderr),\n          child.exitCode.pipe(\n            Effect.mapError((cause) =>\n              normalizeCliError(\"claude\", operation, cause, \"Failed to read Claude CLI exit code\"),\n            ),\n          ),\n        ],\n        { concurrency: \"unbounded\" },\n      );\n\n      if (exitCode !== 0) {\n        const stderrDetail = stderr.trim();\n        const stdoutDetail = stdout.trim();\n        const detail = stderrDetail.length > 0 ? stderrDetail : stdoutDetail;\n        return yield* new TextGenerationError({\n          operation,\n          detail:\n            detail.length > 0\n              ? `Claude CLI command failed: ${detail}`\n              : `Claude CLI command failed with code ${exitCode}.`,\n        });\n      }\n\n      return stdout;\n    });\n\n    const rawStdout = yield* runClaudeCommand().pipe(\n      Effect.scoped,\n      Effect.timeoutOption(CLAUDE_TIMEOUT_MS),\n      Effect.flatMap(\n        Option.match({\n          onNone: () =>\n            Effect.fail(\n              new TextGenerationError({ operation, detail: \"Claude CLI request timed out.\" }),\n            ),\n          onSome: (value) => Effect.succeed(value),\n        }),\n      ),\n    );\n\n    const envelope = yield* decodeClaudeOutputEnvelope(rawStdout).pipe(\n      Effect.catchTag(\"SchemaError\", (cause) =>\n        Effect.fail(\n          new TextGenerationError({\n            operation,\n            detail: \"Claude CLI returned unexpected output format.\",\n            cause,\n          }),\n        ),\n      ),\n    );\n\n    const decodeOutput = Schema.decodeEffect(outputSchemaJson);\n    return yield* decodeOutput(envelope.structured_output).pipe(\n      Effect.catchTag(\"SchemaError\", (cause) =>\n        Effect.fail(\n          new TextGenerationError({\n            operation,\n            detail: \"Claude returned invalid structured output.\",\n            cause,\n          }),\n        ),\n      ),\n    );\n  });\n\n  // ---------------------------------------------------------------------------\n  // TextGenerationShape methods\n  // ---------------------------------------------------------------------------\n\n  const generateCommitMessage: TextGenerationShape[\"generateCommitMessage\"] = Effect.fn(\n    \"ClaudeTextGeneration.generateCommitMessage\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildCommitMessagePrompt({\n      branch: input.branch,\n      stagedSummary: input.stagedSummary,\n      stagedPatch: input.stagedPatch,\n      includeBranch: input.includeBranch === true,\n    });\n\n    const generated = yield* runClaudeJson({\n      operation: \"generateCommitMessage\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      subject: sanitizeCommitSubject(generated.subject),\n      body: generated.body.trim(),\n      ...(\"branch\" in generated && typeof generated.branch === \"string\"\n        ? { branch: sanitizeFeatureBranchName(generated.branch) }\n        : {}),\n    };\n  });\n\n  const generatePrContent: TextGenerationShape[\"generatePrContent\"] = Effect.fn(\n    \"ClaudeTextGeneration.generatePrContent\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildPrContentPrompt({\n      baseBranch: input.baseBranch,\n      headBranch: input.headBranch,\n      commitSummary: input.commitSummary,\n      diffSummary: input.diffSummary,\n      diffPatch: input.diffPatch,\n    });\n\n    const generated = yield* runClaudeJson({\n      operation: \"generatePrContent\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizePrTitle(generated.title),\n      body: generated.body.trim(),\n    };\n  });\n\n  const generateBranchName: TextGenerationShape[\"generateBranchName\"] = Effect.fn(\n    \"ClaudeTextGeneration.generateBranchName\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildBranchNamePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runClaudeJson({\n      operation: \"generateBranchName\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      branch: sanitizeBranchFragment(generated.branch),\n    };\n  });\n\n  const generateThreadTitle: TextGenerationShape[\"generateThreadTitle\"] = Effect.fn(\n    \"ClaudeTextGeneration.generateThreadTitle\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildThreadTitlePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runClaudeJson({\n      operation: \"generateThreadTitle\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizeThreadTitle(generated.title),\n    };\n  });\n\n  return {\n    generateCommitMessage,\n    generatePrContent,\n    generateBranchName,\n    generateThreadTitle,\n  } satisfies TextGenerationShape;\n});\n","export interface ParsedCliArgs {\n  readonly flags: Record<string, string | null>;\n  readonly positionals: string[];\n}\n\nexport interface ParseCliArgsOptions {\n  readonly booleanFlags?: readonly string[];\n}\n\n/**\n * Parse CLI-style arguments into flags and positionals.\n *\n * Accepts a string (split by whitespace) or a pre-split argv array.\n * Supports `--key value`, `--key=value`, and `--flag` (boolean) syntax.\n *\n *   parseCliArgs(\"\")\n *     → { flags: {}, positionals: [] }\n *\n *   parseCliArgs(\"--chrome\")\n *     → { flags: { chrome: null }, positionals: [] }\n *\n *   parseCliArgs(\"--chrome --effort high\")\n *     → { flags: { chrome: null, effort: \"high\" }, positionals: [] }\n *\n *   parseCliArgs(\"--effort=high\")\n *     → { flags: { effort: \"high\" }, positionals: [] }\n *\n *   parseCliArgs([\"1.2.3\", \"--root\", \"/path\", \"--github-output\"], { booleanFlags: [\"github-output\"] })\n *     → { flags: { root: \"/path\", \"github-output\": null }, positionals: [\"1.2.3\"] }\n */\nexport function parseCliArgs(\n  args: string | readonly string[],\n  options?: ParseCliArgsOptions,\n): ParsedCliArgs {\n  const tokens =\n    typeof args === \"string\" ? args.trim().split(/\\s+/).filter(Boolean) : Array.from(args);\n  const booleanSet = options?.booleanFlags ? new Set(options.booleanFlags) : undefined;\n\n  const flags: Record<string, string | null> = {};\n  const positionals: string[] = [];\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]!;\n\n    if (token.startsWith(\"--\")) {\n      const rest = token.slice(2);\n      if (!rest) continue;\n\n      // Handle --key=value syntax\n      const eqIndex = rest.indexOf(\"=\");\n      if (eqIndex !== -1) {\n        flags[rest.slice(0, eqIndex)] = rest.slice(eqIndex + 1);\n        continue;\n      }\n\n      // Known boolean flag — never consumes next token\n      if (booleanSet?.has(rest)) {\n        flags[rest] = null;\n        continue;\n      }\n\n      // Handle --key value or --flag (boolean)\n      const next = tokens[i + 1];\n      if (next !== undefined && !next.startsWith(\"--\")) {\n        flags[rest] = next;\n        i++;\n      } else {\n        flags[rest] = null;\n      }\n    } else {\n      positionals.push(token);\n    }\n  }\n\n  return { flags, positionals };\n}\n","const USED_PERCENT_FIELDS = [\n  \"usedPercentage\",\n  \"used_percentage\",\n  \"usedPercent\",\n  \"used_percent\",\n  \"usagePercentage\",\n  \"usage_percentage\",\n  \"usagePercent\",\n  \"usage_percent\",\n  \"percentUsed\",\n  \"percent_used\",\n] as const;\n\nconst USED_FRACTION_FIELDS = [\n  \"utilization\",\n  \"usedFraction\",\n  \"used_fraction\",\n  \"usageFraction\",\n  \"usage_fraction\",\n] as const;\n\nconst REMAINING_PERCENT_FIELDS = [\n  \"remainingPercentage\",\n  \"remaining_percentage\",\n  \"remainingPercent\",\n  \"remaining_percent\",\n  \"percentRemaining\",\n  \"percent_remaining\",\n] as const;\n\nconst REMAINING_FRACTION_FIELDS = [\"remainingFraction\", \"remaining_fraction\"] as const;\nconst LIMIT_FIELDS = [\"limit\", \"quota\", \"maximum\", \"max\"] as const;\nconst USED_VALUE_FIELDS = [\"used\", \"usage\", \"consumed\", \"current\"] as const;\nconst REMAINING_VALUE_FIELDS = [\"remaining\", \"available\"] as const;\n\nfunction asFiniteNumber(value: unknown): number | null {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  if (typeof value === \"string\" && value.trim().length > 0) {\n    const parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n  return null;\n}\n\nfunction readFirstFiniteNumber(\n  record: Record<string, unknown>,\n  fieldNames: ReadonlyArray<string>,\n): number | null {\n  for (const fieldName of fieldNames) {\n    const value = asFiniteNumber(record[fieldName]);\n    if (value !== null) {\n      return value;\n    }\n  }\n  return null;\n}\n\nexport function readFirstPresentValue(\n  record: Record<string, unknown>,\n  fieldNames: ReadonlyArray<string>,\n): unknown {\n  for (const fieldName of fieldNames) {\n    const value = record[fieldName];\n    if (value !== undefined && value !== null) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction clampPercent(value: number): number {\n  return Math.max(0, Math.min(100, value));\n}\n\nfunction clampPercentLikeValue(value: number): number {\n  return clampPercent(value >= 0 && value <= 1 ? value * 100 : value);\n}\n\nexport function normalizeUsageWindowUsedPercent(record: Record<string, unknown>): number | null {\n  const usedPercent = readFirstFiniteNumber(record, USED_PERCENT_FIELDS);\n  if (usedPercent !== null) {\n    return clampPercent(usedPercent);\n  }\n\n  const usedFraction = readFirstFiniteNumber(record, USED_FRACTION_FIELDS);\n  if (usedFraction !== null) {\n    return clampPercentLikeValue(usedFraction);\n  }\n\n  const remainingPercent = readFirstFiniteNumber(record, REMAINING_PERCENT_FIELDS);\n  if (remainingPercent !== null) {\n    return clampPercent(100 - remainingPercent);\n  }\n\n  const remainingFraction = readFirstFiniteNumber(record, REMAINING_FRACTION_FIELDS);\n  if (remainingFraction !== null) {\n    return clampPercent(100 - clampPercentLikeValue(remainingFraction));\n  }\n\n  const limit = readFirstFiniteNumber(record, LIMIT_FIELDS);\n  if (limit === null || limit <= 0) {\n    return null;\n  }\n\n  const used = readFirstFiniteNumber(record, USED_VALUE_FIELDS);\n  if (used !== null) {\n    return clampPercent((used / limit) * 100);\n  }\n\n  const remaining = readFirstFiniteNumber(record, REMAINING_VALUE_FIELDS);\n  return remaining === null ? null : clampPercent(((limit - remaining) / limit) * 100);\n}\n","import { pathToFileURL } from \"node:url\";\n\nimport type { ChatAttachment } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport type * as FileSystem from \"effect/FileSystem\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\n\nimport { resolveAttachmentPath } from \"../attachmentStore.ts\";\nimport { ProviderAdapterRequestError } from \"./Errors.ts\";\n\nexport interface ProviderAttachmentReference {\n  readonly attachment: ChatAttachment;\n  readonly path: string;\n  readonly fileUrl: string;\n}\n\nexport function toProviderAttachmentReference(\n  attachment: ChatAttachment,\n  path: string,\n): ProviderAttachmentReference {\n  return {\n    attachment,\n    path,\n    fileUrl: pathToFileURL(path).href,\n  };\n}\n\nexport function toAcpAttachmentResourceLink(\n  attachment: ChatAttachment,\n  path: string,\n): EffectAcpSchema.ContentBlock {\n  const reference = toProviderAttachmentReference(attachment, path);\n  return {\n    type: \"resource_link\",\n    uri: reference.fileUrl,\n    name: attachment.name,\n    mimeType: attachment.mimeType,\n    size: attachment.sizeBytes,\n  } satisfies EffectAcpSchema.ContentBlock;\n}\n\nexport function buildAcpAttachmentPromptParts(input: {\n  readonly attachments: ReadonlyArray<ChatAttachment> | undefined;\n  readonly attachmentsDir: string;\n  readonly fileSystem: FileSystem.FileSystem;\n  readonly provider: string;\n  readonly method: string;\n}): Effect.Effect<EffectAcpSchema.ContentBlock[], ProviderAdapterRequestError> {\n  return Effect.forEach(input.attachments ?? [], (attachment) =>\n    Effect.gen(function* () {\n      const attachmentPath = resolveAttachmentPath({\n        attachmentsDir: input.attachmentsDir,\n        attachment,\n      });\n      if (!attachmentPath) {\n        return yield* new ProviderAdapterRequestError({\n          provider: input.provider,\n          method: input.method,\n          detail: `Invalid attachment id '${attachment.id}'.`,\n        });\n      }\n      if (attachment.type === \"pdf\") {\n        return toAcpAttachmentResourceLink(attachment, attachmentPath);\n      }\n      const bytes = yield* input.fileSystem.readFile(attachmentPath).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderAdapterRequestError({\n              provider: input.provider,\n              method: input.method,\n              detail: cause.message,\n              cause,\n            }),\n        ),\n      );\n      return {\n        type: \"image\",\n        data: Buffer.from(bytes).toString(\"base64\"),\n        mimeType: attachment.mimeType,\n      } satisfies EffectAcpSchema.ContentBlock;\n    }),\n  );\n}\n\nexport function formatPdfAttachmentReferenceText(\n  references: ReadonlyArray<ProviderAttachmentReference>,\n): string | null {\n  const pdfReferences = references.filter((reference) => reference.attachment.type === \"pdf\");\n  if (pdfReferences.length === 0) {\n    return null;\n  }\n\n  const lines = pdfReferences.map(\n    ({ attachment, path }) =>\n      `- ${attachment.name} (${attachment.mimeType}, ${attachment.sizeBytes} bytes): ${path}`,\n  );\n  return [\n    \"Attached PDF files are available at these local paths:\",\n    ...lines,\n    \"Use these paths if you need to inspect the PDFs.\",\n  ].join(\"\\n\");\n}\n","import {\n  EventId,\n  MessageId,\n  type ProviderDriverKind,\n  type ProviderInstanceId,\n  type ProviderRuntimeEvent,\n  RuntimeItemId,\n  ThreadId,\n  type TurnId,\n} from \"@salchi/contracts\";\nimport { z } from \"zod/v4\";\n\nexport const INDEPENDENT_THREAD_TOOL_NAMESPACE = \"salchi\";\nexport const INDEPENDENT_THREAD_TOOL_NAME = \"create_thread\";\nexport const INDEPENDENT_THREAD_TOOL_METHOD = \"salchi/thread/create\";\nexport const INDEPENDENT_THREAD_MCP_SERVER_NAME = \"salchi\";\nexport const INDEPENDENT_THREAD_TOOL_RESULT_MARKER = \"salchi.thread.independent.created\";\n\nexport const INDEPENDENT_THREAD_TOOL_ALIASES = [\n  INDEPENDENT_THREAD_TOOL_NAME,\n  \"createThread\",\n  \"create_independent_thread\",\n  \"createIndependentThread\",\n  \"salchi_create_thread\",\n] as const;\n\nconst INDEPENDENT_THREAD_TOOL_ALIAS_SET = new Set<string>(INDEPENDENT_THREAD_TOOL_ALIASES);\n\nexport type IndependentThreadToolArguments = {\n  readonly requestedThreadId?: ThreadId;\n  readonly title: string;\n  readonly initialPrompt?: string;\n  readonly titleSeed?: string;\n  readonly checkoutMode?: \"inherit\" | \"local\" | \"worktree\";\n  readonly branch?: string | null;\n  readonly worktreePath?: string | null;\n  readonly workspaceRoot?: string | null;\n};\n\nexport type ProviderDynamicToolSpec = {\n  readonly deferLoading?: boolean;\n  readonly description: string;\n  readonly inputSchema: unknown;\n  readonly name: string;\n  readonly namespace?: string | null;\n};\n\nexport type IndependentThreadToolRuntimeResult = {\n  readonly payload: Extract<\n    ProviderRuntimeEvent,\n    { readonly type: \"thread.independent.created\" }\n  >[\"payload\"];\n  readonly text: string;\n  readonly structuredContent: {\n    readonly type: typeof INDEPENDENT_THREAD_TOOL_RESULT_MARKER;\n    readonly version: 1;\n    readonly payload: IndependentThreadToolRuntimeResult[\"payload\"];\n  };\n};\n\nexport const INDEPENDENT_THREAD_TOOL_DESCRIPTION =\n  \"Create a new independent top-level Salchi thread with its own provider session. This is not a subagent or child thread.\";\n\nexport const INDEPENDENT_THREAD_TOOL_INPUT_SCHEMA = {\n  type: \"object\",\n  additionalProperties: false,\n  properties: {\n    title: {\n      type: \"string\",\n      minLength: 1,\n      description: \"Concise title for the independent thread.\",\n    },\n    initialPrompt: {\n      type: \"string\",\n      minLength: 1,\n      description:\n        \"First user-style prompt to run in the new thread. Include enough context for the thread to work independently.\",\n    },\n    titleSeed: {\n      type: \"string\",\n      minLength: 1,\n      description: \"Optional short source text for title generation.\",\n    },\n    checkoutMode: {\n      type: \"string\",\n      enum: [\"inherit\", \"local\", \"worktree\"],\n      description:\n        \"Optional checkout placement. Use 'inherit' to reuse the source thread checkout, 'local' to run in the project workspace root, or 'worktree' to run in a specific worktreePath.\",\n    },\n    branch: {\n      type: [\"string\", \"null\"],\n      minLength: 1,\n      description:\n        \"Optional branch label for the new thread. Use null when switching checkouts and the branch is unknown.\",\n    },\n    worktreePath: {\n      type: [\"string\", \"null\"],\n      minLength: 1,\n      description:\n        \"Optional absolute path for a dedicated worktree or checkout. Use null with checkoutMode 'local' to force the project workspace root.\",\n    },\n    projectRoot: {\n      type: [\"string\", \"null\"],\n      minLength: 1,\n      description:\n        \"Optional absolute path to another project folder. When provided, Salchi creates or reuses that project and creates the independent thread there.\",\n    },\n    workspaceRoot: {\n      type: [\"string\", \"null\"],\n      minLength: 1,\n      description: \"Alias for projectRoot. Prefer projectRoot for new calls.\",\n    },\n    threadId: {\n      type: \"string\",\n      minLength: 1,\n      description: \"Optional stable Salchi thread id when one was supplied by the client.\",\n    },\n  },\n  required: [\"title\", \"initialPrompt\"],\n} as const;\n\nexport const INDEPENDENT_THREAD_TOOL_ZOD_INPUT_SHAPE = {\n  title: z.string().min(1).describe(\"Concise title for the independent thread.\"),\n  initialPrompt: z\n    .string()\n    .min(1)\n    .describe(\"First user-style prompt to run in the new independent thread.\"),\n  titleSeed: z\n    .string()\n    .min(1)\n    .optional()\n    .describe(\"Optional short source text for title generation.\"),\n  checkoutMode: z\n    .enum([\"inherit\", \"local\", \"worktree\"])\n    .optional()\n    .describe(\"Optional checkout placement for the independent thread.\"),\n  branch: z\n    .string()\n    .min(1)\n    .nullable()\n    .optional()\n    .describe(\n      \"Optional branch label. Use null when switching checkouts and the branch is unknown.\",\n    ),\n  worktreePath: z\n    .string()\n    .min(1)\n    .nullable()\n    .optional()\n    .describe(\"Optional absolute path for a dedicated worktree or checkout.\"),\n  projectRoot: z\n    .string()\n    .min(1)\n    .nullable()\n    .optional()\n    .describe(\"Optional absolute path to another project folder.\"),\n  workspaceRoot: z.string().min(1).nullable().optional().describe(\"Alias for projectRoot.\"),\n  threadId: z.string().min(1).optional().describe(\"Optional stable Salchi thread id.\"),\n} as const;\n\nexport const INDEPENDENT_THREAD_TOOL_SPEC = {\n  name: INDEPENDENT_THREAD_TOOL_NAME,\n  namespace: INDEPENDENT_THREAD_TOOL_NAMESPACE,\n  description: INDEPENDENT_THREAD_TOOL_DESCRIPTION,\n  inputSchema: INDEPENDENT_THREAD_TOOL_INPUT_SCHEMA,\n} as const satisfies ProviderDynamicToolSpec;\n\nexport const INDEPENDENT_THREAD_TOOL_MCP_INSTRUCTIONS =\n  \"Use create_thread when the user asks to start a separate independent Salchi thread. This creates a root Salchi thread, not a subagent or child thread.\";\n\nexport const INDEPENDENT_THREAD_TOOL_CODEX_INSTRUCTIONS = `## create_thread availability\n\nThe dynamic tool \\`create_thread\\` is available in namespace \\`salchi\\`.\n\nUse it when the user asks you to start another independent thread, split work into a separate thread, launch parallel investigation or implementation work, or preserve the current conversation while opening a separate work stream.\n\nThis creates an independent top-level Salchi thread with its own provider session. It is not a subagent, not a child thread, and not part of the current thread's execution tree.\n\nArguments:\n\n* \\`title\\` (string, required): concise title for the new thread.\n* \\`initialPrompt\\` (string, required): first user-style prompt for the new thread. Include enough context for that thread to proceed independently.\n* \\`titleSeed\\` (string, optional): short source text for title generation when useful.\n* \\`checkoutMode\\` (\"inherit\" | \"local\" | \"worktree\", optional): use \"inherit\" or omit it to reuse this thread's checkout, use \"local\" to start in the project workspace root, or use \"worktree\" with \\`worktreePath\\` to start in a specific worktree.\n* \\`branch\\` (string | null, optional): branch label for the new thread. Include it when known; use null if switching checkouts and the branch is unknown.\n* \\`worktreePath\\` (string | null, optional): absolute path for a dedicated worktree or checkout. Set null with \\`checkoutMode: \"local\"\\` to force the project workspace root.\n* \\`projectRoot\\` (string | null, optional): absolute path to another project folder. When provided, Salchi creates or reuses that project and creates the independent thread there.\n* \\`threadId\\` (string, optional): stable id only when the client already provided one.\n\nAfter the tool returns success, continue the current thread normally unless the user asked you to stop.`;\n\nfunction asPlainRecord(value: unknown): Record<string, unknown> | null {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return null;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction readStringField(\n  record: Record<string, unknown>,\n  fieldNames: ReadonlyArray<string>,\n): string | undefined {\n  for (const fieldName of fieldNames) {\n    const raw = record[fieldName];\n    if (typeof raw !== \"string\") {\n      continue;\n    }\n    const trimmed = raw.trim();\n    if (trimmed.length > 0) {\n      return trimmed;\n    }\n  }\n  return undefined;\n}\n\nfunction readNullableStringField(\n  record: Record<string, unknown>,\n  fieldNames: ReadonlyArray<string>,\n): { readonly specified: boolean; readonly value?: string | null } {\n  for (const fieldName of fieldNames) {\n    if (!Object.hasOwn(record, fieldName)) {\n      continue;\n    }\n    const raw = record[fieldName];\n    if (raw === null) {\n      return { specified: true, value: null };\n    }\n    if (typeof raw !== \"string\") {\n      continue;\n    }\n    const trimmed = raw.trim();\n    if (trimmed.length > 0) {\n      return { specified: true, value: trimmed };\n    }\n  }\n  return { specified: false };\n}\n\nfunction readCheckoutMode(\n  record: Record<string, unknown>,\n): IndependentThreadToolArguments[\"checkoutMode\"] {\n  const raw = readStringField(record, [\"checkoutMode\", \"checkout\"]);\n  switch (raw?.toLowerCase().replace(/[-_\\s]+/g, \"\")) {\n    case \"inherit\":\n      return \"inherit\";\n    case \"local\":\n    case \"localcheckout\":\n    case \"workspace\":\n    case \"workspaceroot\":\n      return \"local\";\n    case \"worktree\":\n      return \"worktree\";\n    default:\n      return undefined;\n  }\n}\n\nexport function isIndependentThreadToolCall(input: {\n  readonly namespace?: string | null;\n  readonly tool: string;\n}): boolean {\n  const namespace = input.namespace?.trim();\n  const tool = input.tool.trim();\n  return (\n    (!namespace || namespace === INDEPENDENT_THREAD_TOOL_NAMESPACE) &&\n    INDEPENDENT_THREAD_TOOL_ALIAS_SET.has(tool)\n  );\n}\n\nexport function parseIndependentThreadToolArguments(\n  argumentsValue: unknown,\n): IndependentThreadToolArguments {\n  const record = asPlainRecord(argumentsValue);\n  if (!record) {\n    throw new Error(\"create_thread arguments must be an object\");\n  }\n  const initialPrompt = readStringField(record, [\"initialPrompt\", \"prompt\", \"input\", \"message\"]);\n  if (!initialPrompt) {\n    throw new Error(\"create_thread requires a non-empty initialPrompt\");\n  }\n  const title = readStringField(record, [\"title\", \"name\"]);\n  if (!title) {\n    throw new Error(\"create_thread requires a non-empty title\");\n  }\n  const titleSeed = readStringField(record, [\"titleSeed\"]);\n  const requestedThreadId = readStringField(record, [\"threadId\"]);\n  const checkoutMode = readCheckoutMode(record);\n  const branch = readNullableStringField(record, [\"branch\", \"branchName\"]);\n  const worktreePath = readNullableStringField(record, [\n    \"worktreePath\",\n    \"worktree\",\n    \"checkoutPath\",\n    \"cwd\",\n  ]);\n  const workspaceRoot = readNullableStringField(record, [\n    \"projectRoot\",\n    \"workspaceRoot\",\n    \"projectPath\",\n    \"folderPath\",\n    \"folder\",\n    \"directory\",\n  ]);\n  const resolvedWorktreePath =\n    checkoutMode === \"local\"\n      ? null\n      : worktreePath.specified\n        ? (worktreePath.value ?? null)\n        : undefined;\n  const checkoutChanged =\n    worktreePath.specified || checkoutMode === \"local\" || checkoutMode === \"worktree\";\n  const resolvedBranch = branch.specified\n    ? (branch.value ?? null)\n    : checkoutChanged\n      ? null\n      : undefined;\n  return {\n    ...(requestedThreadId ? { requestedThreadId: ThreadId.make(requestedThreadId) } : {}),\n    title,\n    initialPrompt,\n    ...(titleSeed ? { titleSeed } : {}),\n    ...(checkoutMode ? { checkoutMode } : {}),\n    ...(resolvedBranch !== undefined ? { branch: resolvedBranch } : {}),\n    ...(resolvedWorktreePath !== undefined ? { worktreePath: resolvedWorktreePath } : {}),\n    ...(workspaceRoot.specified ? { workspaceRoot: workspaceRoot.value ?? null } : {}),\n  };\n}\n\nexport function createIndependentThreadToolRuntimeResult(input: {\n  readonly argumentsValue: unknown;\n  readonly sourceThreadId: ThreadId;\n  readonly idPrefix: string;\n  readonly sourceItemId?: RuntimeItemId | string;\n  readonly providerThreadId?: string;\n}): IndependentThreadToolRuntimeResult {\n  const parsedArguments = parseIndependentThreadToolArguments(input.argumentsValue);\n  const sourceItemId =\n    typeof input.sourceItemId === \"string\"\n      ? RuntimeItemId.make(input.sourceItemId)\n      : input.sourceItemId;\n  const threadId =\n    parsedArguments.requestedThreadId ?? ThreadId.make(`${input.idPrefix}:independent-thread`);\n  const initialMessageId = MessageId.make(`${input.idPrefix}:initial-message`);\n  const payload: IndependentThreadToolRuntimeResult[\"payload\"] = {\n    threadId,\n    title: parsedArguments.title,\n    createdByThreadId: input.sourceThreadId,\n    initialMessageId,\n    ...(sourceItemId ? { sourceItemId } : {}),\n    ...(input.providerThreadId ? { providerThreadId: input.providerThreadId } : {}),\n    ...(parsedArguments.initialPrompt ? { initialPrompt: parsedArguments.initialPrompt } : {}),\n    ...(parsedArguments.titleSeed ? { titleSeed: parsedArguments.titleSeed } : {}),\n    ...(parsedArguments.branch !== undefined ? { branch: parsedArguments.branch } : {}),\n    ...(parsedArguments.worktreePath !== undefined\n      ? { worktreePath: parsedArguments.worktreePath }\n      : {}),\n    ...(parsedArguments.workspaceRoot !== undefined\n      ? { workspaceRoot: parsedArguments.workspaceRoot }\n      : {}),\n  };\n\n  return {\n    payload,\n    text: `Created independent thread '${payload.threadId}' (${payload.title}) from '${input.sourceThreadId}'.`,\n    structuredContent: {\n      type: INDEPENDENT_THREAD_TOOL_RESULT_MARKER,\n      version: 1,\n      payload,\n    },\n  };\n}\n\nexport function makeIndependentThreadCreatedRuntimeEvent(input: {\n  readonly provider: ProviderDriverKind;\n  readonly providerInstanceId?: ProviderInstanceId;\n  readonly eventId: EventId;\n  readonly createdAt: string;\n  readonly sourceThreadId: ThreadId;\n  readonly turnId?: TurnId;\n  readonly idPrefix: string;\n  readonly argumentsValue: unknown;\n  readonly sourceItemId?: RuntimeItemId | string;\n  readonly providerThreadId?: string;\n  readonly raw?: ProviderRuntimeEvent[\"raw\"];\n  readonly providerRefs?: ProviderRuntimeEvent[\"providerRefs\"];\n}): ProviderRuntimeEvent {\n  const result = createIndependentThreadToolRuntimeResult({\n    argumentsValue: input.argumentsValue,\n    sourceThreadId: input.sourceThreadId,\n    idPrefix: input.idPrefix,\n    ...(input.sourceItemId ? { sourceItemId: input.sourceItemId } : {}),\n    ...(input.providerThreadId ? { providerThreadId: input.providerThreadId } : {}),\n  });\n\n  return {\n    type: \"thread.independent.created\",\n    eventId: input.eventId,\n    provider: input.provider,\n    ...(input.providerInstanceId ? { providerInstanceId: input.providerInstanceId } : {}),\n    createdAt: input.createdAt,\n    threadId: input.sourceThreadId,\n    ...(input.turnId ? { turnId: input.turnId } : {}),\n    ...(result.payload.sourceItemId ? { itemId: result.payload.sourceItemId } : {}),\n    payload: result.payload,\n    ...(input.providerRefs ? { providerRefs: input.providerRefs } : {}),\n    ...(input.raw ? { raw: input.raw } : {}),\n  };\n}\n","/**\n * ClaudeAdapterLive - Scoped live implementation for the Claude Agent provider adapter.\n *\n * Wraps `@anthropic-ai/claude-agent-sdk` query sessions behind the generic\n * provider adapter contract and emits canonical runtime events.\n *\n * @module ClaudeAdapterLive\n */\nimport {\n  type CanUseTool,\n  createSdkMcpServer,\n  query,\n  tool,\n  type Options as ClaudeQueryOptions,\n  type PermissionMode,\n  type PermissionResult,\n  type PermissionUpdate,\n  type SDKControlGetContextUsageResponse,\n  type SDKMessage,\n  type SDKRateLimitEvent,\n  type SDKResultMessage,\n  type SettingSource,\n  type SDKUserMessage,\n  type ModelUsage,\n} from \"@anthropic-ai/claude-agent-sdk\";\nimport { parseCliArgs } from \"@salchi/shared/cliArgs\";\nimport {\n  ApprovalRequestId,\n  type CanonicalItemType,\n  type CanonicalRequestType,\n  type ClaudeSettings,\n  EventId,\n  type ProviderApprovalDecision,\n  ProviderDriverKind,\n  ProviderInstanceId,\n  type ModelSelection,\n  ProviderItemId,\n  type ProviderRuntimeEvent,\n  type ProviderRuntimeTurnStatus,\n  type ProviderSendTurnInput,\n  type ProviderSession,\n  type ThreadTokenUsageSnapshot,\n  type ProviderUserInputAnswers,\n  type RuntimeContentStreamKind,\n  RuntimeItemId,\n  RuntimeRequestId,\n  RuntimeSubagentId,\n  RuntimeTaskId,\n  ThreadId,\n  TurnId,\n  type UserInputQuestion,\n} from \"@salchi/contracts\";\nimport {\n  applyClaudePromptEffortPrefix,\n  getModelSelectionBooleanOptionValue,\n  getModelSelectionStringOptionValue,\n  getProviderOptionDescriptors,\n  resolvePromptInjectedEffort,\n} from \"@salchi/shared/model\";\nimport {\n  normalizeUsageWindowUsedPercent,\n  readFirstPresentValue,\n} from \"@salchi/shared/rateLimitUsage\";\nimport * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport * as Clock from \"effect/Clock\";\n\nimport { resolveAttachmentPath } from \"../../attachmentStore.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport {\n  formatPdfAttachmentReferenceText,\n  toProviderAttachmentReference,\n  type ProviderAttachmentReference,\n} from \"../attachmentInputs.ts\";\nimport { makeClaudeEnvironment, resolveClaudeHomePath } from \"../Drivers/ClaudeHome.ts\";\nimport {\n  INDEPENDENT_THREAD_MCP_SERVER_NAME,\n  INDEPENDENT_THREAD_TOOL_DESCRIPTION,\n  INDEPENDENT_THREAD_TOOL_ZOD_INPUT_SHAPE,\n  INDEPENDENT_THREAD_TOOL_MCP_INSTRUCTIONS,\n  INDEPENDENT_THREAD_TOOL_NAME,\n  createIndependentThreadToolRuntimeResult,\n  makeIndependentThreadCreatedRuntimeEvent,\n} from \"../IndependentThreadTool.ts\";\nimport {\n  getClaudeModelCapabilities,\n  normalizeClaudeCliEffort,\n  resolveClaudeApiModelId,\n  resolveClaudeEffort,\n} from \"./ClaudeProvider.ts\";\nimport {\n  ProviderAdapterProcessError,\n  ProviderAdapterRequestError,\n  ProviderAdapterSessionClosedError,\n  ProviderAdapterSessionNotFoundError,\n  ProviderAdapterValidationError,\n  type ProviderAdapterError,\n} from \"../Errors.ts\";\nimport { type ClaudeAdapterShape } from \"../Services/ClaudeAdapter.ts\";\nimport { type EventNdjsonLogger, makeEventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\nconst encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);\nconst decodeUnknownJsonStringExit = Schema.decodeUnknownExit(Schema.UnknownFromJsonString);\n\nconst PROVIDER = ProviderDriverKind.make(\"claudeAgent\");\nconst CLAUDE_USAGE_REFRESH_TIMEOUT = Duration.seconds(10);\nconst CLAUDE_INTERRUPT_TIMEOUT = Duration.seconds(10);\nconst CLAUDE_RATE_LIMIT_RESET_STALE_GRACE_MS = 2 * 60 * 1000;\nconst CLAUDE_OAUTH_USAGE_CACHE_TTL_MS = 15 * 1000;\nconst CLAUDE_OAUTH_USAGE_URL = \"https://api.anthropic.com/api/oauth/usage\";\nconst CLAUDE_OAUTH_TOKEN_URL = \"https://platform.claude.com/v1/oauth/token\";\nconst CLAUDE_OAUTH_CLIENT_ID = \"22422756-60c9-4084-8eb7-27705fd5cf9a\";\nconst CLAUDE_OAUTH_BETA_HEADER = \"oauth-2025-04-20\";\nconst CLAUDE_AUTH_FAILURE_MESSAGE =\n  \"Claude is not authenticated. Run `claude auth login` and try again.\";\n// Claude Code added rate-limit statusline support in 2.1.80; this endpoint\n// is more aggressively rate-limited for non-Claude-Code user agents.\nconst CLAUDE_OAUTH_USAGE_USER_AGENT = \"claude-code/2.1.80\";\nconst CLAUDE_OAUTH_REFRESH_SKEW_MS = 60 * 1000;\nconst CLAUDE_STATUSLINE_CAPTURE_ENV = \"SALCHI_CLAUDE_STATUSLINE_CAPTURE_PATH\";\nconst CLAUDE_OAUTH_DEFAULT_SCOPES = [\n  \"user:profile\",\n  \"user:inference\",\n  \"user:sessions:claude_code\",\n  \"user:mcp_servers\",\n  \"user:file_upload\",\n] as const;\ntype ClaudeTextStreamKind = Extract<RuntimeContentStreamKind, \"assistant_text\" | \"reasoning_text\">;\ntype ClaudeToolResultStreamKind = Extract<\n  RuntimeContentStreamKind,\n  \"command_output\" | \"file_change_output\"\n>;\ntype ClaudeSdkEffort = NonNullable<ClaudeQueryOptions[\"effort\"]>;\ntype ClaudeAccountUsageSource = \"claude.oauth.usage\" | \"claude.statusline\";\n\nconst ClaudeIndependentThreadToolInputSchema = INDEPENDENT_THREAD_TOOL_ZOD_INPUT_SHAPE;\n\nfunction shellQuote(value: string): string {\n  return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n}\n\nfunction readNonEmptyString(record: Record<string, unknown>, fieldNames: ReadonlyArray<string>) {\n  for (const fieldName of fieldNames) {\n    const value = record[fieldName];\n    if (typeof value !== \"string\") {\n      continue;\n    }\n    const trimmed = value.trim();\n    if (trimmed.length > 0) {\n      return trimmed;\n    }\n  }\n  return undefined;\n}\n\nfunction readClaudeToolUseId(extra: unknown): string | undefined {\n  const record = asRecord(extra);\n  if (!record) {\n    return undefined;\n  }\n  return (\n    readNonEmptyString(record, [\"toolUseID\", \"toolUseId\", \"tool_use_id\"]) ??\n    readNonEmptyString(asRecord(record.toolUseBlock) ?? {}, [\n      \"id\",\n      \"toolUseID\",\n      \"toolUseId\",\n      \"tool_use_id\",\n    ])\n  );\n}\n\nfunction makeClaudeStatuslineCaptureCommand(): string {\n  const script = [\n    \"let input='';\",\n    \"process.stdin.setEncoding('utf8');\",\n    \"process.stdin.on('data',(chunk)=>{input+=chunk;});\",\n    \"process.stdin.on('end',()=>{\",\n    `const path=process.env.${CLAUDE_STATUSLINE_CAPTURE_ENV};`,\n    \"if(!path)process.exit(0);\",\n    \"try{JSON.parse(input);require('fs').writeFileSync(path,input);}catch{}\",\n    \"});\",\n  ].join(\"\");\n\n  return `${shellQuote(process.execPath)} -e ${shellQuote(script)}`;\n}\n\nfunction safeFileComponent(value: string): string {\n  return value.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n}\n\nfunction encodeJsonStringForDiagnostics(input: unknown): string | undefined {\n  const result = encodeUnknownJsonStringExit(input);\n  return Exit.isSuccess(result) ? result.value : undefined;\n}\n\ntype PromptQueueItem =\n  | {\n      readonly type: \"message\";\n      readonly message: SDKUserMessage;\n    }\n  | {\n      readonly type: \"terminate\";\n    };\n\ninterface ClaudeResumeState {\n  readonly threadId?: ThreadId;\n  readonly resume?: string;\n  readonly resumeSessionAt?: string;\n  readonly turnCount?: number;\n}\n\ninterface ClaudeTurnState {\n  readonly turnId: TurnId;\n  readonly startedAt: string;\n  /**\n   * True for turns auto-started by assistant output arriving without an\n   * active turn (background agent/subagent responses between user prompts).\n   * Synthetic turns are auto-closed by the next sendTurn; real turns are\n   * steered instead (the queued message continues the same turn).\n   */\n  readonly synthetic?: boolean;\n  readonly items: Array<unknown>;\n  readonly assistantTextBlocks: Map<number, AssistantTextBlockState>;\n  readonly assistantTextBlockOrder: Array<AssistantTextBlockState>;\n  readonly capturedProposedPlanKeys: Set<string>;\n  nextSyntheticAssistantBlockIndex: number;\n}\n\ninterface AssistantTextBlockState {\n  readonly itemId: string;\n  readonly blockIndex: number;\n  emittedTextDelta: boolean;\n  fallbackText: string;\n  streamClosed: boolean;\n  completionEmitted: boolean;\n}\n\ninterface PendingApproval {\n  readonly requestType: CanonicalRequestType;\n  readonly detail?: string;\n  readonly suggestions?: ReadonlyArray<PermissionUpdate>;\n  readonly decision: Deferred.Deferred<ProviderApprovalDecision>;\n}\n\ninterface PendingUserInput {\n  readonly questions: ReadonlyArray<UserInputQuestion>;\n  readonly answers: Deferred.Deferred<ProviderUserInputAnswers>;\n}\n\ninterface ToolInFlight {\n  readonly itemId: string;\n  readonly itemType: CanonicalItemType;\n  readonly toolName: string;\n  readonly title: string;\n  readonly detail?: string;\n  readonly input: Record<string, unknown>;\n  readonly partialInputJson: string;\n  readonly lastEmittedInputFingerprint?: string;\n}\n\ninterface ClaudeTaskState {\n  readonly id: string;\n  subject: string;\n  status: PlanStep[\"status\"];\n  readonly blockedBy: Set<string>;\n}\n\ninterface ClaudeBackgroundTask {\n  readonly description?: string;\n  readonly taskType?: string;\n}\n\ninterface ClaudeSessionContext {\n  session: ProviderSession;\n  readonly promptQueue: Queue.Queue<PromptQueueItem>;\n  readonly query: ClaudeQueryRuntime;\n  streamFiber: Fiber.Fiber<void, Error> | undefined;\n  usageRefreshFiber: Fiber.Fiber<void, never> | undefined;\n  readonly startedAt: string;\n  readonly basePermissionMode: PermissionMode | undefined;\n  currentApiModelId: string | undefined;\n  resumeSessionId: string | undefined;\n  readonly pendingApprovals: Map<ApprovalRequestId, PendingApproval>;\n  readonly pendingUserInputs: Map<ApprovalRequestId, PendingUserInput>;\n  readonly turns: Array<{\n    id: TurnId;\n    items: Array<unknown>;\n  }>;\n  readonly inFlightTools: Map<number, ToolInFlight>;\n  readonly claudeTasks: Map<string, ClaudeTaskState>;\n  readonly liveBackgroundTasks: Map<string, ClaudeBackgroundTask>;\n  turnState: ClaudeTurnState | undefined;\n  lastKnownContextWindow: number | undefined;\n  lastKnownTokenUsage: ThreadTokenUsageSnapshot | undefined;\n  lastKnownRateLimits: SDKRateLimitEvent | undefined;\n  lastKnownOAuthUsageFingerprint: string | undefined;\n  readonly statuslineCapturePath: string | undefined;\n  lastKnownStatuslineUsageFingerprint: string | undefined;\n  lastKnownTotalProcessedTokens: number | undefined;\n  lastAssistantUuid: string | undefined;\n  lastThreadStartedId: string | undefined;\n  terminalTurnFailure: string | undefined;\n  stopped: boolean;\n}\n\ninterface ClaudeQueryRuntime extends AsyncIterable<SDKMessage> {\n  readonly interrupt: () => Promise<void>;\n  readonly stopTask: (taskId: string) => Promise<void>;\n  readonly setModel: (model?: string) => Promise<void>;\n  readonly setPermissionMode: (mode: PermissionMode) => Promise<void>;\n  readonly setMaxThinkingTokens: (maxThinkingTokens: number | null) => Promise<void>;\n  readonly getContextUsage?: () => Promise<SDKControlGetContextUsageResponse>;\n  readonly close: () => void;\n}\n\nexport interface ClaudeAdapterLiveOptions {\n  readonly instanceId?: ProviderInstanceId;\n  readonly environment?: NodeJS.ProcessEnv;\n  readonly createQuery?: (input: {\n    readonly prompt: AsyncIterable<SDKUserMessage>;\n    readonly options: ClaudeQueryOptions;\n  }) => ClaudeQueryRuntime;\n  readonly enableOAuthUsage?: boolean;\n  readonly enableStatuslineUsage?: boolean;\n  readonly fetchOAuthUsage?: (input: {\n    readonly accessToken: string;\n    readonly environment: NodeJS.ProcessEnv;\n  }) => Promise<unknown>;\n  readonly nativeEventLogPath?: string;\n  readonly nativeEventLogger?: EventNdjsonLogger;\n}\n\ninterface ClaudeOAuthCredentials {\n  readonly accessToken: string;\n  readonly refreshToken: string | null;\n  readonly expiresAt: number | null;\n  readonly scopes: ReadonlyArray<string>;\n  readonly subscriptionType: string | null;\n  readonly rateLimitTier: string | null;\n}\n\nfunction isUuid(value: string): boolean {\n  return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n}\n\nfunction isSyntheticClaudeThreadId(value: string): boolean {\n  return value.startsWith(\"claude-thread-\");\n}\n\nfunction hasDurableClaudeSessionId(message: SDKMessage): boolean {\n  if (message.type !== \"system\") {\n    return true;\n  }\n\n  return (\n    message.subtype !== \"hook_started\" &&\n    message.subtype !== \"hook_progress\" &&\n    message.subtype !== \"hook_response\"\n  );\n}\n\nfunction toMessage(cause: unknown, fallback: string): string {\n  if (cause instanceof Error && cause.message.length > 0) {\n    return cause.message;\n  }\n  return fallback;\n}\n\nfunction decodeUnknownJsonText(value: string, fallback: string): Effect.Effect<unknown, string> {\n  const result = decodeUnknownJsonStringExit(value);\n  return Exit.isSuccess(result)\n    ? Effect.succeed(result.value)\n    : Effect.fail(toMessage(result.cause, fallback));\n}\n\nfunction encodeUnknownJsonText(value: unknown, fallback: string): Effect.Effect<string, string> {\n  const result = encodeUnknownJsonStringExit(value);\n  return Exit.isSuccess(result)\n    ? Effect.succeed(result.value)\n    : Effect.fail(toMessage(result.cause, fallback));\n}\n\nfunction asUnknownRecord(value: unknown): Record<string, unknown> | undefined {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n}\n\nfunction asFiniteNumber(value: unknown): number | undefined {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  if (typeof value === \"string\" && value.trim().length > 0) {\n    const parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : undefined;\n  }\n  return undefined;\n}\n\nfunction asNonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): ReadonlyArray<string> {\n  return Array.isArray(value)\n    ? value.filter((entry): entry is string => typeof entry === \"string\" && entry.length > 0)\n    : [];\n}\n\nfunction parseClaudeOAuthCredentials(value: unknown): ClaudeOAuthCredentials | undefined {\n  const root = asUnknownRecord(value);\n  const oauth = asUnknownRecord(root?.claudeAiOauth);\n  const accessToken = asNonEmptyString(oauth?.accessToken);\n  if (!accessToken) {\n    return undefined;\n  }\n\n  const scopes = readStringArray(oauth?.scopes);\n  if (!scopes.includes(\"user:inference\") || !scopes.includes(\"user:profile\")) {\n    return undefined;\n  }\n\n  return {\n    accessToken,\n    refreshToken: asNonEmptyString(oauth?.refreshToken) ?? null,\n    expiresAt: asFiniteNumber(oauth?.expiresAt) ?? null,\n    scopes,\n    subscriptionType: asNonEmptyString(oauth?.subscriptionType) ?? null,\n    rateLimitTier: asNonEmptyString(oauth?.rateLimitTier) ?? null,\n  };\n}\n\nfunction shouldRefreshClaudeOAuthCredentials(\n  credentials: ClaudeOAuthCredentials,\n  nowMs: number,\n): boolean {\n  return (\n    credentials.refreshToken !== null &&\n    credentials.expiresAt !== null &&\n    credentials.expiresAt <= nowMs + CLAUDE_OAUTH_REFRESH_SKEW_MS\n  );\n}\n\nfunction normalizeClaudeOAuthScopes(value: unknown, fallback: ReadonlyArray<string>) {\n  if (typeof value !== \"string\") {\n    return fallback.length > 0 ? fallback : CLAUDE_OAUTH_DEFAULT_SCOPES;\n  }\n  const scopes = value.split(\" \").filter((scope) => scope.length > 0);\n  return scopes.length > 0 ? scopes : fallback;\n}\n\nfunction normalizeClaudeOAuthUsageWindow(\n  value: unknown,\n  windowDurationMins: number,\n): Record<string, unknown> | undefined {\n  const record = asUnknownRecord(value);\n  if (!record) {\n    return undefined;\n  }\n\n  const usedPercent = normalizeUsageWindowUsedPercent(record);\n  const resetsAt = readFirstPresentValue(record, [\"resets_at\", \"resetsAt\", \"reset_at\", \"resetAt\"]);\n  const status = asNonEmptyString(record.status);\n  if (usedPercent === null && resetsAt === undefined && status === undefined) {\n    return undefined;\n  }\n\n  return {\n    ...(usedPercent !== null ? { usedPercent } : {}),\n    windowDurationMins,\n    ...(resetsAt !== undefined ? { resetsAt } : {}),\n    ...(status !== undefined ? { status } : {}),\n  };\n}\n\nfunction normalizeClaudeAccountUsageRateLimits(\n  value: unknown,\n  source: ClaudeAccountUsageSource,\n): Record<string, unknown> | undefined {\n  const record = asUnknownRecord(value);\n  if (!record) {\n    return undefined;\n  }\n\n  const primary = normalizeClaudeOAuthUsageWindow(\n    readFirstPresentValue(record, [\"five_hour\", \"fiveHour\", \"primary\"]),\n    5 * 60,\n  );\n  const secondary =\n    normalizeClaudeOAuthUsageWindow(\n      readFirstPresentValue(record, [\"seven_day\", \"sevenDay\", \"weekly\", \"secondary\"]),\n      7 * 24 * 60,\n    ) ??\n    normalizeClaudeOAuthUsageWindow(\n      readFirstPresentValue(record, [\"seven_day_sonnet\", \"sevenDaySonnet\"]),\n      7 * 24 * 60,\n    ) ??\n    normalizeClaudeOAuthUsageWindow(\n      readFirstPresentValue(record, [\"seven_day_opus\", \"sevenDayOpus\"]),\n      7 * 24 * 60,\n    );\n\n  if (!primary && !secondary) {\n    return undefined;\n  }\n\n  return {\n    source,\n    ...(primary ? { primary } : {}),\n    ...(secondary ? { secondary } : {}),\n  };\n}\n\nasync function defaultFetchClaudeOAuthUsage(input: {\n  readonly accessToken: string;\n  readonly environment: NodeJS.ProcessEnv;\n}): Promise<unknown> {\n  // @effect-diagnostics-next-line globalFetch:off - This default callback is a Promise boundary for Claude OAuth usage probes.\n  const response = await fetch(CLAUDE_OAUTH_USAGE_URL, {\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"User-Agent\": CLAUDE_OAUTH_USAGE_USER_AGENT,\n      Authorization: `Bearer ${input.accessToken}`,\n      \"anthropic-beta\": CLAUDE_OAUTH_BETA_HEADER,\n    },\n    signal: AbortSignal.timeout(Duration.toMillis(CLAUDE_USAGE_REFRESH_TIMEOUT)),\n  });\n  if (!response.ok) {\n    throw new Error(`Claude OAuth usage request failed with HTTP ${response.status}.`);\n  }\n  return response.json();\n}\n\nfunction toProcessError(\n  cause: unknown,\n  fallback: string,\n  threadId: ThreadId,\n): ProviderAdapterProcessError {\n  return new ProviderAdapterProcessError({\n    provider: PROVIDER,\n    threadId,\n    detail: toMessage(cause, fallback),\n    cause,\n  });\n}\n\nfunction normalizeClaudeStreamMessages(\n  cause: Cause.Cause<{ readonly message: string }>,\n): ReadonlyArray<string> {\n  const errors: Array<string> = [];\n  for (const error of Cause.prettyErrors(cause)) {\n    const message = error.message.trim();\n    if (message.length > 0) {\n      errors.push(message);\n    }\n  }\n  if (errors.length > 0) {\n    return errors;\n  }\n\n  const squashed = toMessage(Cause.squash(cause), \"\").trim();\n  return squashed.length > 0 ? [squashed] : [];\n}\n\nfunction claudeTimestampMs(value: number | undefined): number | undefined {\n  if (value === undefined || !Number.isFinite(value) || value <= 0) {\n    return undefined;\n  }\n  return value < 10_000_000_000 ? value * 1000 : value;\n}\n\nfunction isFreshClaudeRateLimitEvent(message: SDKRateLimitEvent, nowMs: number): boolean {\n  const resetCandidates = [\n    claudeTimestampMs(message.rate_limit_info.resetsAt),\n    claudeTimestampMs(message.rate_limit_info.overageResetsAt),\n  ].filter((value): value is number => value !== undefined);\n\n  if (resetCandidates.length === 0) {\n    return true;\n  }\n\n  return Math.max(...resetCandidates) + CLAUDE_RATE_LIMIT_RESET_STALE_GRACE_MS >= nowMs;\n}\n\nfunction getEffectiveClaudeAgentEffort(effort: string | null | undefined): ClaudeSdkEffort | null {\n  const normalized = normalizeClaudeCliEffort(effort);\n  return normalized ? (normalized as ClaudeSdkEffort) : null;\n}\n\nfunction isClaudeInterruptedMessage(message: string): boolean {\n  const normalized = message.toLowerCase();\n  return (\n    normalized.includes(\"all fibers interrupted without error\") ||\n    normalized.includes(\"request was aborted\") ||\n    normalized.includes(\"interrupted by user\")\n  );\n}\n\nfunction isClaudeInterruptedCause(cause: Cause.Cause<{ readonly message: string }>): boolean {\n  return (\n    Cause.hasInterruptsOnly(cause) ||\n    normalizeClaudeStreamMessages(cause).some(isClaudeInterruptedMessage)\n  );\n}\n\nfunction messageFromClaudeStreamCause(\n  cause: Cause.Cause<{ readonly message: string }>,\n  fallback: string,\n): string {\n  return normalizeClaudeStreamMessages(cause)[0] ?? fallback;\n}\n\nfunction interruptionMessageFromClaudeCause(\n  cause: Cause.Cause<{ readonly message: string }>,\n): string {\n  const message = messageFromClaudeStreamCause(cause, \"Claude runtime interrupted.\");\n  return isClaudeInterruptedMessage(message) ? \"Claude runtime interrupted.\" : message;\n}\n\nfunction resultErrorsText(result: SDKResultMessage): string {\n  return \"errors\" in result && Array.isArray(result.errors)\n    ? result.errors.join(\" \").toLowerCase()\n    : \"\";\n}\n\nfunction resultUserFacingError(result: SDKResultMessage): string | undefined {\n  if (result.subtype === \"success\" || !Array.isArray(result.errors)) {\n    return undefined;\n  }\n  return result.errors.find((error) => !error.startsWith(\"[ede_diagnostic]\"));\n}\n\nfunction isInterruptedResult(result: SDKResultMessage): boolean {\n  if (\n    result.terminal_reason === \"aborted_tools\" ||\n    result.terminal_reason === \"aborted_streaming\"\n  ) {\n    return true;\n  }\n\n  const errors = resultErrorsText(result);\n  if (errors.includes(\"interrupt\")) {\n    return true;\n  }\n\n  return (\n    result.subtype === \"error_during_execution\" &&\n    result.is_error === false &&\n    (errors.includes(\"request was aborted\") ||\n      errors.includes(\"interrupted by user\") ||\n      errors.includes(\"aborted\"))\n  );\n}\n\nfunction asRuntimeItemId(value: string): RuntimeItemId {\n  return RuntimeItemId.make(value);\n}\n\nfunction asRuntimeSubagentId(value: string): RuntimeSubagentId {\n  return RuntimeSubagentId.make(value);\n}\n\nfunction claudeSubagentRoleFromInput(input: Record<string, unknown>): string | undefined {\n  return (\n    readString(input.subagent_type) ??\n    readString(input.subagentType) ??\n    readString(input.agent_type) ??\n    readString(input.agentType) ??\n    readString(input.task_type) ??\n    readString(input.taskType) ??\n    readString(input.role)\n  );\n}\n\nfunction claudeSubagentIdFromTool(tool: ToolInFlight): RuntimeSubagentId {\n  return asRuntimeSubagentId(tool.itemId);\n}\n\nfunction claudeSubagentCommonPayload(tool: ToolInFlight) {\n  const role = claudeSubagentRoleFromInput(tool.input);\n  const nickname = readString(tool.input.name) ?? readString(tool.input.label);\n  const prompt = readString(tool.input.prompt);\n  const summary = readString(tool.input.description) ?? tool.detail;\n\n  return {\n    subagentId: claudeSubagentIdFromTool(tool),\n    sourceItemId: asRuntimeItemId(tool.itemId),\n    ...(role ? { role } : {}),\n    ...(nickname ? { nickname } : {}),\n    ...(prompt ? { prompt } : {}),\n    ...(summary ? { summary } : {}),\n  };\n}\n\nfunction claudeSubagentCompletionStatus(\n  status: ProviderRuntimeTurnStatus | \"completed\" | \"failed\" | \"stopped\" | \"interrupted\",\n): \"completed\" | \"failed\" | \"stopped\" | \"interrupted\" {\n  switch (status) {\n    case \"completed\":\n    case \"failed\":\n    case \"stopped\":\n    case \"interrupted\":\n      return status;\n    case \"cancelled\":\n      return \"stopped\";\n    default:\n      return \"failed\";\n  }\n}\n\nfunction claudeSubagentCompletionStatusFromTaskStatus(\n  status: unknown,\n): \"completed\" | \"failed\" | \"stopped\" | \"interrupted\" {\n  switch (readString(status)) {\n    case \"completed\":\n    case \"failed\":\n    case \"stopped\":\n    case \"interrupted\":\n      return readString(status) as \"completed\" | \"failed\" | \"stopped\" | \"interrupted\";\n    case \"cancelled\":\n    case \"canceled\":\n      return \"stopped\";\n    default:\n      return \"completed\";\n  }\n}\n\nfunction maxClaudeContextWindowFromModelUsage(\n  modelUsage: Record<string, ModelUsage> | undefined,\n): number | undefined {\n  if (!modelUsage) return undefined;\n\n  let maxContextWindow: number | undefined;\n  for (const value of Object.values(modelUsage)) {\n    const contextWindow = value.contextWindow;\n    maxContextWindow = Math.max(maxContextWindow ?? 0, contextWindow);\n  }\n\n  return maxContextWindow;\n}\n\nfunction selectedClaudeContextWindow(\n  modelSelection: ModelSelection | undefined,\n): number | undefined {\n  const optionValue = getModelSelectionStringOptionValue(modelSelection, \"contextWindow\");\n  if (optionValue === \"1m\") {\n    return 1_000_000;\n  }\n  if (optionValue === \"200k\") {\n    return 200_000;\n  }\n  const caps = getClaudeModelCapabilities(modelSelection?.model);\n  const hasContextWindowOption = getProviderOptionDescriptors({ caps }).some(\n    (descriptor) => descriptor.type === \"select\" && descriptor.id === \"contextWindow\",\n  );\n  if (hasContextWindowOption) {\n    return 200_000;\n  }\n  switch (modelSelection?.model) {\n    case \"claude-opus-4-8\":\n    case \"claude-opus-4-7\":\n      return 1_000_000;\n  }\n  return undefined;\n}\n\nfunction finiteNonNegativeInteger(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n    ? Math.round(value)\n    : undefined;\n}\n\nfunction finitePositiveInteger(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) && value > 0\n    ? Math.round(value)\n    : undefined;\n}\n\nfunction claudeUsageInputTokens(usage: Record<string, unknown>): number {\n  return (\n    (finiteNonNegativeInteger(usage.input_tokens) ?? 0) +\n    (finiteNonNegativeInteger(usage.cache_creation_input_tokens) ?? 0) +\n    (finiteNonNegativeInteger(usage.cache_read_input_tokens) ?? 0)\n  );\n}\n\nfunction claudeUsageOutputTokens(usage: Record<string, unknown>): number {\n  return finiteNonNegativeInteger(usage.output_tokens) ?? 0;\n}\n\nfunction lastClaudeUsageIteration(\n  value: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n  const iterations = Array.isArray(value.iterations) ? value.iterations : [];\n  return iterations.findLast(\n    (iteration): iteration is Record<string, unknown> =>\n      iteration !== null && typeof iteration === \"object\" && !Array.isArray(iteration),\n  );\n}\n\nfunction claudeTotalProcessedTokens(value: unknown): number | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return undefined;\n  }\n\n  const usage = value as Record<string, unknown>;\n  const explicitTotal = finiteNonNegativeInteger(usage.total_tokens);\n  if (explicitTotal !== undefined && explicitTotal > 0) {\n    return explicitTotal;\n  }\n\n  const total = claudeUsageInputTokens(usage) + claudeUsageOutputTokens(usage);\n  return total > 0 ? total : undefined;\n}\n\nfunction makeClaudeTokenUsageSnapshot(input: {\n  readonly activeTokens: number;\n  readonly inputTokens?: number;\n  readonly outputTokens?: number;\n  readonly contextWindow?: number;\n  readonly totalProcessedTokens?: number;\n  readonly lastUsedTokens?: number;\n  readonly compactsAutomatically?: boolean;\n}): ThreadTokenUsageSnapshot | undefined {\n  const activeTokens = finiteNonNegativeInteger(input.activeTokens);\n  if (activeTokens === undefined || activeTokens <= 0) {\n    return undefined;\n  }\n\n  const maxTokens = finitePositiveInteger(input.contextWindow);\n  const usedTokens = maxTokens !== undefined ? Math.min(activeTokens, maxTokens) : activeTokens;\n  const lastUsedTokens =\n    finiteNonNegativeInteger(input.lastUsedTokens) ??\n    (maxTokens !== undefined ? Math.min(activeTokens, maxTokens) : activeTokens);\n  const totalProcessedTokens = finiteNonNegativeInteger(input.totalProcessedTokens);\n  const inputTokens = finiteNonNegativeInteger(input.inputTokens);\n  const outputTokens = finiteNonNegativeInteger(input.outputTokens);\n\n  return {\n    usedTokens,\n    lastUsedTokens,\n    ...(totalProcessedTokens !== undefined && totalProcessedTokens > usedTokens\n      ? { totalProcessedTokens }\n      : {}),\n    ...(inputTokens !== undefined && inputTokens > 0 ? { inputTokens } : {}),\n    ...(outputTokens !== undefined && outputTokens > 0 ? { outputTokens } : {}),\n    ...(maxTokens !== undefined ? { maxTokens } : {}),\n    ...(input.compactsAutomatically !== undefined\n      ? { compactsAutomatically: input.compactsAutomatically }\n      : {}),\n  };\n}\n\nfunction normalizeClaudeActiveTokenUsage(\n  value: unknown,\n  contextWindow?: number,\n  totalProcessedTokens?: number,\n): ThreadTokenUsageSnapshot | undefined {\n  if (!value || typeof value !== \"object\") {\n    return undefined;\n  }\n\n  const usage = value as Record<string, unknown>;\n  const activeUsage = lastClaudeUsageIteration(usage) ?? usage;\n  const inputTokens = claudeUsageInputTokens(activeUsage);\n  const outputTokens = claudeUsageOutputTokens(activeUsage);\n  const activeTokens = claudeTotalProcessedTokens(activeUsage) ?? inputTokens + outputTokens;\n  if (activeTokens <= 0) {\n    return undefined;\n  }\n\n  return makeClaudeTokenUsageSnapshot({\n    activeTokens,\n    inputTokens,\n    outputTokens,\n    ...(contextWindow !== undefined ? { contextWindow } : {}),\n    ...(totalProcessedTokens !== undefined ? { totalProcessedTokens } : {}),\n  });\n}\n\nfunction normalizeClaudeContextUsageApiSnapshot(\n  value: SDKControlGetContextUsageResponse,\n  totalProcessedTokens?: number,\n): ThreadTokenUsageSnapshot | undefined {\n  return makeClaudeTokenUsageSnapshot({\n    activeTokens: value.totalTokens,\n    contextWindow: value.maxTokens,\n    ...(totalProcessedTokens !== undefined ? { totalProcessedTokens } : {}),\n    compactsAutomatically: value.isAutoCompactEnabled,\n  });\n}\n\nfunction compactBoundaryTokenUsageSnapshot(\n  message: Record<string, unknown>,\n  contextWindow?: number,\n  totalProcessedTokens?: number,\n): ThreadTokenUsageSnapshot | undefined {\n  const metadata = message.compact_metadata;\n  if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n    return undefined;\n  }\n\n  const compactMetadata = metadata as Record<string, unknown>;\n  const postTokens = finiteNonNegativeInteger(compactMetadata.post_tokens);\n  if (postTokens === undefined || postTokens <= 0) {\n    return undefined;\n  }\n\n  const preTokens = finiteNonNegativeInteger(compactMetadata.pre_tokens);\n  return makeClaudeTokenUsageSnapshot({\n    activeTokens: postTokens,\n    ...(preTokens !== undefined ? { lastUsedTokens: preTokens } : {}),\n    ...(contextWindow !== undefined ? { contextWindow } : {}),\n    ...(totalProcessedTokens !== undefined ? { totalProcessedTokens } : {}),\n  });\n}\n\nfunction normalizeClaudeTaskProgressTokenUsage(\n  value: unknown,\n  context: ClaudeSessionContext,\n): ThreadTokenUsageSnapshot | undefined {\n  const totalTokens = claudeTotalProcessedTokens(value);\n  if (totalTokens === undefined || totalTokens <= 0) {\n    return undefined;\n  }\n\n  const lastUsedTokens = context.lastKnownTokenUsage?.usedTokens;\n  const activeTokens =\n    lastUsedTokens !== undefined ? Math.max(totalTokens, lastUsedTokens) : totalTokens;\n  if (lastUsedTokens !== undefined && activeTokens === lastUsedTokens) {\n    return undefined;\n  }\n\n  const usage = value as Record<string, unknown>;\n  const snapshot = makeClaudeTokenUsageSnapshot({\n    activeTokens,\n    ...(context.lastKnownContextWindow !== undefined\n      ? { contextWindow: context.lastKnownContextWindow }\n      : {}),\n    totalProcessedTokens: Math.max(\n      totalTokens,\n      context.lastKnownTotalProcessedTokens ?? totalTokens,\n    ),\n  });\n  if (!snapshot) {\n    return undefined;\n  }\n\n  const toolUses = finiteNonNegativeInteger(usage.tool_uses);\n  const durationMs = finiteNonNegativeInteger(usage.duration_ms);\n  return {\n    ...snapshot,\n    ...(toolUses !== undefined ? { toolUses } : {}),\n    ...(durationMs !== undefined ? { durationMs } : {}),\n  };\n}\n\nfunction normalizeClaudeContextUsage(\n  usage: SDKControlGetContextUsageResponse,\n): ThreadTokenUsageSnapshot | undefined {\n  const totalTokens = Number.isFinite(usage.totalTokens) ? Math.max(0, usage.totalTokens) : 0;\n  if (totalTokens <= 0) {\n    return undefined;\n  }\n\n  const rawPercentage = Number.isFinite(usage.percentage) ? usage.percentage : undefined;\n  const usedPercentage =\n    rawPercentage !== undefined && rawPercentage > 0\n      ? rawPercentage <= 1\n        ? rawPercentage * 100\n        : rawPercentage\n      : undefined;\n  const inferredMaxTokens =\n    usedPercentage !== undefined && usedPercentage > 0\n      ? Math.round(totalTokens / (usedPercentage / 100))\n      : undefined;\n  const maxTokens =\n    Number.isFinite(usage.rawMaxTokens) && usage.rawMaxTokens > 0\n      ? usage.rawMaxTokens\n      : Number.isFinite(usage.maxTokens) && usage.maxTokens > 0\n        ? usage.maxTokens\n        : inferredMaxTokens !== undefined && inferredMaxTokens > 0\n          ? inferredMaxTokens\n          : undefined;\n  const usedTokens = maxTokens !== undefined ? Math.min(totalTokens, maxTokens) : totalTokens;\n\n  return {\n    usedTokens,\n    lastUsedTokens: usedTokens,\n    ...(totalTokens > usedTokens ? { totalProcessedTokens: totalTokens } : {}),\n    ...(maxTokens !== undefined ? { maxTokens } : {}),\n  };\n}\n\nfunction asCanonicalTurnId(value: TurnId): TurnId {\n  return value;\n}\n\nfunction asRuntimeRequestId(value: ApprovalRequestId): RuntimeRequestId {\n  return RuntimeRequestId.make(value);\n}\n\nfunction readClaudeResumeState(resumeCursor: unknown): ClaudeResumeState | undefined {\n  if (!resumeCursor || typeof resumeCursor !== \"object\") {\n    return undefined;\n  }\n  const cursor = resumeCursor as {\n    threadId?: unknown;\n    resume?: unknown;\n    sessionId?: unknown;\n    resumeSessionAt?: unknown;\n    turnCount?: unknown;\n  };\n\n  const threadIdCandidate = typeof cursor.threadId === \"string\" ? cursor.threadId : undefined;\n  const threadId =\n    threadIdCandidate && !isSyntheticClaudeThreadId(threadIdCandidate)\n      ? ThreadId.make(threadIdCandidate)\n      : undefined;\n  const resumeCandidate =\n    typeof cursor.resume === \"string\"\n      ? cursor.resume\n      : typeof cursor.sessionId === \"string\"\n        ? cursor.sessionId\n        : undefined;\n  const resume = resumeCandidate && isUuid(resumeCandidate) ? resumeCandidate : undefined;\n  const resumeSessionAt =\n    typeof cursor.resumeSessionAt === \"string\" ? cursor.resumeSessionAt : undefined;\n  const turnCountValue = typeof cursor.turnCount === \"number\" ? cursor.turnCount : undefined;\n\n  return {\n    ...(threadId ? { threadId } : {}),\n    ...(resume ? { resume } : {}),\n    ...(resumeSessionAt ? { resumeSessionAt } : {}),\n    ...(turnCountValue !== undefined && Number.isInteger(turnCountValue) && turnCountValue >= 0\n      ? { turnCount: turnCountValue }\n      : {}),\n  };\n}\n\nfunction classifyToolItemType(toolName: string): CanonicalItemType {\n  const normalized = toolName.toLowerCase();\n  if (normalized.includes(\"agent\")) {\n    return \"collab_agent_tool_call\";\n  }\n  if (\n    normalized === \"task\" ||\n    normalized === \"agent\" ||\n    normalized.includes(\"subagent\") ||\n    normalized.includes(\"sub-agent\")\n  ) {\n    return \"collab_agent_tool_call\";\n  }\n  if (\n    normalized.includes(\"bash\") ||\n    normalized.includes(\"command\") ||\n    normalized.includes(\"shell\") ||\n    normalized.includes(\"terminal\")\n  ) {\n    return \"command_execution\";\n  }\n  if (\n    normalized.includes(\"edit\") ||\n    normalized.includes(\"write\") ||\n    normalized.includes(\"file\") ||\n    normalized.includes(\"patch\") ||\n    normalized.includes(\"replace\") ||\n    normalized.includes(\"create\") ||\n    normalized.includes(\"delete\")\n  ) {\n    return \"file_change\";\n  }\n  if (normalized.includes(\"mcp\")) {\n    return \"mcp_tool_call\";\n  }\n  if (normalized.includes(\"websearch\") || normalized.includes(\"web search\")) {\n    return \"web_search\";\n  }\n  if (normalized.includes(\"image\")) {\n    return \"image_view\";\n  }\n  return \"dynamic_tool_call\";\n}\n\nfunction isReadOnlyToolName(toolName: string): boolean {\n  const normalized = toolName.toLowerCase();\n  return (\n    normalized === \"read\" ||\n    normalized.includes(\"read file\") ||\n    normalized.includes(\"view\") ||\n    normalized.includes(\"grep\") ||\n    normalized.includes(\"glob\") ||\n    normalized.includes(\"search\")\n  );\n}\n\nfunction classifyRequestType(toolName: string): CanonicalRequestType {\n  if (isReadOnlyToolName(toolName)) {\n    return \"file_read_approval\";\n  }\n  const itemType = classifyToolItemType(toolName);\n  return itemType === \"command_execution\"\n    ? \"command_execution_approval\"\n    : itemType === \"file_change\"\n      ? \"file_change_approval\"\n      : \"dynamic_tool_call\";\n}\n\nfunction isTodoTool(toolName: string): boolean {\n  return toolName.toLowerCase().includes(\"todowrite\");\n}\n\ntype PlanStep = {\n  step: string;\n  status: \"pending\" | \"inProgress\" | \"completed\";\n};\n\nfunction extractPlanStepsFromTodoInput(input: Record<string, unknown>): PlanStep[] | null {\n  // TodoWrite format: { todos: [{ content, status, activeForm? }] }\n  const todos = input.todos;\n  if (!Array.isArray(todos) || todos.length === 0) {\n    return null;\n  }\n  return todos\n    .filter((t): t is Record<string, unknown> => t !== null && typeof t === \"object\")\n    .map((todo) => ({\n      step:\n        typeof todo.content === \"string\" && todo.content.trim().length > 0\n          ? todo.content.trim()\n          : \"Task\",\n      status:\n        todo.status === \"completed\"\n          ? \"completed\"\n          : todo.status === \"in_progress\"\n            ? \"inProgress\"\n            : \"pending\",\n    }));\n}\n\nfunction isClaudeTaskTool(toolName: string): boolean {\n  return toolName === \"TaskCreate\" || toolName === \"TaskUpdate\" || toolName === \"TaskList\";\n}\n\nfunction normalizeClaudeTaskStatus(value: unknown): PlanStep[\"status\"] {\n  return value === \"completed\" ? \"completed\" : value === \"in_progress\" ? \"inProgress\" : \"pending\";\n}\n\nfunction readString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction readTrimmedStringArray(value: unknown): Array<string> {\n  return Array.isArray(value)\n    ? value.flatMap((entry) => {\n        const text = readString(entry);\n        return text ? [text] : [];\n      })\n    : [];\n}\n\nfunction readClaudeToolUseResult(message: SDKMessage): Record<string, unknown> | undefined {\n  if (message.type !== \"user\") {\n    return undefined;\n  }\n  const result = (message as { readonly tool_use_result?: unknown }).tool_use_result;\n  return result !== null && typeof result === \"object\" && !Array.isArray(result)\n    ? (result as Record<string, unknown>)\n    : undefined;\n}\n\nfunction readClaudeTaskFromResult(\n  result: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n  const task = result?.task;\n  return task !== null && typeof task === \"object\" && !Array.isArray(task)\n    ? (task as Record<string, unknown>)\n    : undefined;\n}\n\nfunction applyClaudeTaskToolResult(\n  tasks: Map<string, ClaudeTaskState>,\n  tool: ToolInFlight,\n  result: Record<string, unknown> | undefined,\n): boolean {\n  if (!isClaudeTaskTool(tool.toolName)) {\n    return false;\n  }\n\n  let changed = false;\n  if (tool.toolName === \"TaskList\") {\n    const resultTasks = result?.tasks;\n    if (!Array.isArray(resultTasks)) {\n      return false;\n    }\n    tasks.clear();\n    for (const entry of resultTasks) {\n      if (entry === null || typeof entry !== \"object\" || Array.isArray(entry)) {\n        continue;\n      }\n      const task = entry as Record<string, unknown>;\n      const id = readString(task.id);\n      const subject = readString(task.subject);\n      if (!id || !subject) {\n        continue;\n      }\n      tasks.set(id, {\n        id,\n        subject,\n        status: normalizeClaudeTaskStatus(task.status),\n        blockedBy: new Set(readTrimmedStringArray(task.blockedBy)),\n      });\n    }\n    return tasks.size > 0;\n  }\n\n  if (tool.toolName === \"TaskCreate\") {\n    const resultTask = readClaudeTaskFromResult(result);\n    const id = readString(resultTask?.id);\n    const subject = readString(resultTask?.subject) ?? readString(tool.input.subject);\n    if (!id || !subject) {\n      return false;\n    }\n    tasks.set(id, {\n      id,\n      subject,\n      status: normalizeClaudeTaskStatus(tool.input.status),\n      blockedBy: new Set(readTrimmedStringArray(tool.input.blockedBy)),\n    });\n    return true;\n  }\n\n  const taskId = readString(tool.input.taskId) ?? readString(result?.taskId);\n  if (!taskId) {\n    return false;\n  }\n  const task = tasks.get(taskId);\n  if (!task) {\n    return false;\n  }\n  const subject = readString(tool.input.subject);\n  if (subject && task.subject !== subject) {\n    task.subject = subject;\n    changed = true;\n  }\n  if (typeof tool.input.status === \"string\") {\n    const status = normalizeClaudeTaskStatus(tool.input.status);\n    if (task.status !== status) {\n      task.status = status;\n      changed = true;\n    }\n  }\n  for (const dependency of readTrimmedStringArray(tool.input.addBlockedBy)) {\n    if (!task.blockedBy.has(dependency)) {\n      task.blockedBy.add(dependency);\n      changed = true;\n    }\n  }\n  for (const dependency of readTrimmedStringArray(tool.input.removeBlockedBy)) {\n    if (task.blockedBy.delete(dependency)) {\n      changed = true;\n    }\n  }\n  return changed;\n}\n\nfunction planStepsFromClaudeTasks(tasks: Map<string, ClaudeTaskState>): PlanStep[] {\n  return Array.from(tasks.values()).map((task) => {\n    const blockedBy = Array.from(task.blockedBy);\n    const blockedSuffix = blockedBy.length > 0 ? ` (blocked by #${blockedBy.join(\", #\")})` : \"\";\n    return {\n      step: `${task.subject}${blockedSuffix}`,\n      status: task.status,\n    };\n  });\n}\n\nfunction summarizeToolRequest(toolName: string, input: Record<string, unknown>): string {\n  const commandValue = input.command ?? input.cmd;\n  const command = typeof commandValue === \"string\" ? commandValue : undefined;\n  if (command && command.trim().length > 0) {\n    return `${toolName}: ${command.trim().slice(0, 400)}`;\n  }\n\n  // For agent/subagent tools, prefer human-readable description or prompt over raw JSON\n  const itemType = classifyToolItemType(toolName);\n  if (itemType === \"collab_agent_tool_call\") {\n    const description =\n      typeof input.description === \"string\" ? input.description.trim() : undefined;\n    const prompt = typeof input.prompt === \"string\" ? input.prompt.trim() : undefined;\n    const subagentType =\n      typeof input.subagent_type === \"string\" ? input.subagent_type.trim() : undefined;\n    const label = description || (prompt ? prompt.slice(0, 200) : undefined);\n    if (label) {\n      return subagentType ? `${subagentType}: ${label}` : label;\n    }\n  }\n\n  const serialized = encodeJsonStringForDiagnostics(input) ?? \"[unserializable input]\";\n  if (serialized.length <= 400) {\n    return `${toolName}: ${serialized}`;\n  }\n  return `${toolName}: ${serialized.slice(0, 397)}...`;\n}\n\nfunction titleForTool(itemType: CanonicalItemType): string {\n  switch (itemType) {\n    case \"command_execution\":\n      return \"Command run\";\n    case \"file_change\":\n      return \"File change\";\n    case \"mcp_tool_call\":\n      return \"MCP tool call\";\n    case \"collab_agent_tool_call\":\n      return \"Subagent task\";\n    case \"web_search\":\n      return \"Web search\";\n    case \"image_view\":\n      return \"Image view\";\n    case \"dynamic_tool_call\":\n      return \"Tool call\";\n    default:\n      return \"Item\";\n  }\n}\n\nconst SUPPORTED_CLAUDE_IMAGE_MIME_TYPES = new Set([\n  \"image/gif\",\n  \"image/jpeg\",\n  \"image/png\",\n  \"image/webp\",\n]);\nconst CLAUDE_SETTING_SOURCES = [\n  \"user\",\n  \"project\",\n  \"local\",\n] as const satisfies ReadonlyArray<SettingSource>;\n\nfunction buildPromptText(\n  input: ProviderSendTurnInput,\n  boundInstanceId: ProviderInstanceId,\n): string {\n  const rawEffort =\n    input.modelSelection?.instanceId === boundInstanceId\n      ? getModelSelectionStringOptionValue(input.modelSelection, \"effort\")\n      : null;\n  const claudeModel =\n    input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection.model : undefined;\n  const caps = getClaudeModelCapabilities(claudeModel);\n\n  const promptEffort = resolvePromptInjectedEffort(caps, rawEffort);\n  return applyClaudePromptEffortPrefix(input.input?.trim() ?? \"\", promptEffort);\n}\n\nfunction buildUserMessage(input: {\n  readonly sdkContent: Array<Record<string, unknown>>;\n}): SDKUserMessage {\n  return {\n    type: \"user\",\n    session_id: \"\",\n    parent_tool_use_id: null,\n    message: {\n      role: \"user\",\n      content: input.sdkContent as unknown as SDKUserMessage[\"message\"][\"content\"],\n    },\n  } as SDKUserMessage;\n}\n\nfunction buildClaudeImageContentBlock(input: {\n  readonly mimeType: string;\n  readonly bytes: Uint8Array;\n}): Record<string, unknown> {\n  return {\n    type: \"image\",\n    source: {\n      type: \"base64\",\n      media_type: input.mimeType,\n      data: Buffer.from(input.bytes).toString(\"base64\"),\n    },\n  };\n}\n\nconst buildUserMessageEffect = Effect.fn(\"buildUserMessageEffect\")(function* (\n  input: ProviderSendTurnInput,\n  dependencies: {\n    readonly fileSystem: FileSystem.FileSystem;\n    readonly attachmentsDir: string;\n    readonly boundInstanceId: ProviderInstanceId;\n  },\n) {\n  const text = buildPromptText(input, dependencies.boundInstanceId);\n  const sdkContent: Array<Record<string, unknown>> = [];\n  const pdfReferences: ProviderAttachmentReference[] = [];\n\n  if (text.length > 0) {\n    sdkContent.push({ type: \"text\", text });\n  }\n\n  for (const attachment of input.attachments ?? []) {\n    if (attachment.type === \"pdf\") {\n      const attachmentPath = resolveAttachmentPath({\n        attachmentsDir: dependencies.attachmentsDir,\n        attachment,\n      });\n      if (!attachmentPath) {\n        return yield* new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"turn/start\",\n          detail: `Invalid attachment id '${attachment.id}'.`,\n        });\n      }\n      pdfReferences.push(toProviderAttachmentReference(attachment, attachmentPath));\n      continue;\n    }\n\n    if (attachment.type !== \"image\") {\n      continue;\n    }\n\n    if (!SUPPORTED_CLAUDE_IMAGE_MIME_TYPES.has(attachment.mimeType)) {\n      return yield* new ProviderAdapterRequestError({\n        provider: PROVIDER,\n        method: \"turn/start\",\n        detail: `Unsupported Claude image attachment type '${attachment.mimeType}'.`,\n      });\n    }\n\n    const attachmentPath = resolveAttachmentPath({\n      attachmentsDir: dependencies.attachmentsDir,\n      attachment,\n    });\n    if (!attachmentPath) {\n      return yield* new ProviderAdapterRequestError({\n        provider: PROVIDER,\n        method: \"turn/start\",\n        detail: `Invalid attachment id '${attachment.id}'.`,\n      });\n    }\n\n    const bytes = yield* dependencies.fileSystem.readFile(attachmentPath).pipe(\n      Effect.mapError(\n        (cause) =>\n          new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"turn/start\",\n            detail: toMessage(cause, \"Failed to read attachment file.\"),\n            cause,\n          }),\n      ),\n    );\n\n    sdkContent.push(\n      buildClaudeImageContentBlock({\n        mimeType: attachment.mimeType,\n        bytes,\n      }),\n    );\n  }\n\n  const pdfReferenceText = formatPdfAttachmentReferenceText(pdfReferences);\n  if (pdfReferenceText) {\n    sdkContent.push({ type: \"text\", text: pdfReferenceText });\n  }\n\n  return buildUserMessage({ sdkContent });\n});\n\nfunction turnStatusFromResult(result: SDKResultMessage): ProviderRuntimeTurnStatus {\n  if (result.subtype === \"success\") {\n    return \"completed\";\n  }\n\n  const errors = resultErrorsText(result);\n  if (isInterruptedResult(result)) {\n    return \"interrupted\";\n  }\n  if (errors.includes(\"cancel\")) {\n    return \"cancelled\";\n  }\n  return \"failed\";\n}\n\nfunction streamKindFromDeltaType(deltaType: string): ClaudeTextStreamKind {\n  return deltaType.includes(\"thinking\") ? \"reasoning_text\" : \"assistant_text\";\n}\n\nfunction nativeProviderRefs(\n  _context: ClaudeSessionContext,\n  options?: {\n    readonly providerItemId?: string | undefined;\n  },\n): NonNullable<ProviderRuntimeEvent[\"providerRefs\"]> {\n  if (options?.providerItemId) {\n    return {\n      providerItemId: ProviderItemId.make(options.providerItemId),\n    };\n  }\n  return {};\n}\n\nfunction extractAssistantTextBlocks(message: SDKMessage): Array<string> {\n  if (message.type !== \"assistant\") {\n    return [];\n  }\n\n  const content = (message.message as { content?: unknown } | undefined)?.content;\n  if (!Array.isArray(content)) {\n    return [];\n  }\n\n  const fragments: string[] = [];\n  for (const block of content) {\n    if (!block || typeof block !== \"object\") {\n      continue;\n    }\n    const candidate = block as { type?: unknown; text?: unknown };\n    if (\n      candidate.type === \"text\" &&\n      typeof candidate.text === \"string\" &&\n      candidate.text.length > 0\n    ) {\n      fragments.push(candidate.text);\n    }\n  }\n\n  return fragments;\n}\n\nfunction extractContentBlockText(block: unknown): string {\n  if (!block || typeof block !== \"object\") {\n    return \"\";\n  }\n\n  const candidate = block as { type?: unknown; text?: unknown };\n  return candidate.type === \"text\" && typeof candidate.text === \"string\" ? candidate.text : \"\";\n}\n\nfunction extractTextContent(value: unknown): string {\n  if (typeof value === \"string\") {\n    return value;\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((entry) => extractTextContent(entry)).join(\"\");\n  }\n\n  if (!value || typeof value !== \"object\") {\n    return \"\";\n  }\n\n  const record = value as {\n    text?: unknown;\n    content?: unknown;\n  };\n\n  if (typeof record.text === \"string\") {\n    return record.text;\n  }\n\n  return extractTextContent(record.content);\n}\n\nfunction extractExitPlanModePlan(value: unknown): string | undefined {\n  if (!value || typeof value !== \"object\") {\n    return undefined;\n  }\n\n  const record = value as {\n    plan?: unknown;\n  };\n  return typeof record.plan === \"string\" && record.plan.trim().length > 0\n    ? record.plan.trim()\n    : undefined;\n}\n\nfunction exitPlanCaptureKey(input: {\n  readonly toolUseId?: string | undefined;\n  readonly planMarkdown: string;\n}): string {\n  return input.toolUseId && input.toolUseId.length > 0\n    ? `tool:${input.toolUseId}`\n    : `plan:${input.planMarkdown}`;\n}\n\nfunction tryParseJsonRecord(value: string): Record<string, unknown> | undefined {\n  const result = decodeUnknownJsonStringExit(value);\n  if (!Exit.isSuccess(result)) {\n    return undefined;\n  }\n  const parsed = result.value;\n  return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n    ? (parsed as Record<string, unknown>)\n    : undefined;\n}\n\nfunction toolInputFingerprint(input: Record<string, unknown>): string | undefined {\n  return encodeJsonStringForDiagnostics(input);\n}\n\nfunction toolResultStreamKind(itemType: CanonicalItemType): ClaudeToolResultStreamKind | undefined {\n  switch (itemType) {\n    case \"command_execution\":\n      return \"command_output\";\n    case \"file_change\":\n      return \"file_change_output\";\n    default:\n      return undefined;\n  }\n}\n\nfunction toolResultBlocksFromUserMessage(message: SDKMessage): Array<{\n  readonly toolUseId: string;\n  readonly block: Record<string, unknown>;\n  readonly text: string;\n  readonly isError: boolean;\n}> {\n  if (message.type !== \"user\") {\n    return [];\n  }\n\n  const content = (message.message as { content?: unknown } | undefined)?.content;\n  if (!Array.isArray(content)) {\n    return [];\n  }\n\n  const blocks: Array<{\n    readonly toolUseId: string;\n    readonly block: Record<string, unknown>;\n    readonly text: string;\n    readonly isError: boolean;\n  }> = [];\n\n  for (const entry of content) {\n    if (!entry || typeof entry !== \"object\") {\n      continue;\n    }\n\n    const block = entry as Record<string, unknown>;\n    if (block.type !== \"tool_result\") {\n      continue;\n    }\n\n    const toolUseId = typeof block.tool_use_id === \"string\" ? block.tool_use_id : undefined;\n    if (!toolUseId) {\n      continue;\n    }\n\n    blocks.push({\n      toolUseId,\n      block,\n      text: extractTextContent(block.content),\n      isError: block.is_error === true,\n    });\n  }\n\n  return blocks;\n}\n\nfunction toSessionError(\n  threadId: ThreadId,\n  cause: unknown,\n): ProviderAdapterSessionNotFoundError | ProviderAdapterSessionClosedError | undefined {\n  const normalized = toMessage(cause, \"\").toLowerCase();\n  if (normalized.includes(\"unknown session\") || normalized.includes(\"not found\")) {\n    return new ProviderAdapterSessionNotFoundError({\n      provider: PROVIDER,\n      threadId,\n      cause,\n    });\n  }\n  if (normalized.includes(\"closed\")) {\n    return new ProviderAdapterSessionClosedError({\n      provider: PROVIDER,\n      threadId,\n      cause,\n    });\n  }\n  return undefined;\n}\n\nfunction toRequestError(threadId: ThreadId, method: string, cause: unknown): ProviderAdapterError {\n  const sessionError = toSessionError(threadId, cause);\n  if (sessionError) {\n    return sessionError;\n  }\n  return new ProviderAdapterRequestError({\n    provider: PROVIDER,\n    method,\n    detail: toMessage(cause, `${method} failed`),\n    cause,\n  });\n}\n\nfunction sdkMessageType(value: unknown): string | undefined {\n  if (!value || typeof value !== \"object\") {\n    return undefined;\n  }\n  const record = value as { type?: unknown };\n  return typeof record.type === \"string\" ? record.type : undefined;\n}\n\nfunction sdkMessageSubtype(value: unknown): string | undefined {\n  if (!value || typeof value !== \"object\") {\n    return undefined;\n  }\n  const record = value as { subtype?: unknown };\n  return typeof record.subtype === \"string\" ? record.subtype : undefined;\n}\n\nfunction sdkNativeMethod(message: SDKMessage): string {\n  const subtype = sdkMessageSubtype(message);\n  if (subtype) {\n    return `claude/${message.type}/${subtype}`;\n  }\n\n  if (message.type === \"stream_event\") {\n    const streamType = sdkMessageType(message.event);\n    if (streamType) {\n      const deltaType =\n        streamType === \"content_block_delta\"\n          ? sdkMessageType((message.event as { delta?: unknown }).delta)\n          : undefined;\n      if (deltaType) {\n        return `claude/${message.type}/${streamType}/${deltaType}`;\n      }\n      return `claude/${message.type}/${streamType}`;\n    }\n  }\n\n  return `claude/${message.type}`;\n}\n\nfunction sdkNativeItemId(message: SDKMessage): string | undefined {\n  if (message.type === \"assistant\") {\n    const maybeId = (message.message as { id?: unknown }).id;\n    if (typeof maybeId === \"string\") {\n      return maybeId;\n    }\n    return undefined;\n  }\n\n  if (message.type === \"user\") {\n    return toolResultBlocksFromUserMessage(message)[0]?.toolUseId;\n  }\n\n  if (message.type === \"stream_event\") {\n    const event = message.event as {\n      type?: unknown;\n      content_block?: { id?: unknown };\n    };\n    if (event.type === \"content_block_start\" && typeof event.content_block?.id === \"string\") {\n      return event.content_block.id;\n    }\n  }\n\n  return undefined;\n}\n\nexport const makeClaudeAdapter = Effect.fn(\"makeClaudeAdapter\")(function* (\n  claudeSettings: ClaudeSettings,\n  options?: ClaudeAdapterLiveOptions,\n) {\n  const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(\"claudeAgent\");\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const serverConfig = yield* ServerConfig;\n  const claudeHomePath = yield* resolveClaudeHomePath(claudeSettings).pipe(\n    Effect.provideService(Path.Path, path),\n  );\n  const claudeCredentialsPath = path.join(claudeHomePath, \".claude\", \".credentials.json\");\n  const crypto = yield* Crypto.Crypto;\n  const claudeEnvironment = yield* makeClaudeEnvironment(claudeSettings, options?.environment).pipe(\n    Effect.provideService(Path.Path, path),\n  );\n  const claudeOAuthUsageEnabled = options?.enableOAuthUsage ?? options?.createQuery === undefined;\n  const claudeStatuslineUsageEnabled =\n    options?.enableStatuslineUsage ?? options?.createQuery === undefined;\n  const fetchClaudeOAuthUsage = options?.fetchOAuthUsage ?? defaultFetchClaudeOAuthUsage;\n  const claudeStatuslineCaptureDir = path.join(serverConfig.stateDir, \"claude-statusline\");\n  const claudeStatuslineCaptureCommand = makeClaudeStatuslineCaptureCommand();\n  let cachedClaudeOAuthUsage:\n    | {\n        readonly fetchedAtMs: number;\n        readonly usage: unknown;\n      }\n    | undefined;\n  let refreshedClaudeOAuthCredentials: ClaudeOAuthCredentials | undefined;\n  const nativeEventLogger =\n    options?.nativeEventLogger ??\n    (options?.nativeEventLogPath !== undefined\n      ? yield* makeEventNdjsonLogger(options.nativeEventLogPath, {\n          stream: \"native\",\n        })\n      : undefined);\n\n  const createQuery =\n    options?.createQuery ??\n    ((input: {\n      readonly prompt: AsyncIterable<SDKUserMessage>;\n      readonly options: ClaudeQueryOptions;\n    }) =>\n      query({\n        prompt: input.prompt,\n        options: input.options,\n      }) as ClaudeQueryRuntime);\n\n  const sessions = new Map<ThreadId, ClaudeSessionContext>();\n  const runtimeEventQueue = yield* Queue.unbounded<ProviderRuntimeEvent>();\n\n  const nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n  const randomUUIDv4 = crypto.randomUUIDv4.pipe(\n    Effect.mapError(\n      (cause) =>\n        new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"crypto/randomUUIDv4\",\n          detail: \"Failed to generate Claude runtime identifier.\",\n          cause,\n        }),\n    ),\n  );\n  const nextEventId = Effect.map(randomUUIDv4, (id) => EventId.make(id));\n  const makeEventStamp = () => Effect.all({ eventId: nextEventId, createdAt: nowIso });\n\n  const offerRuntimeEvent = (event: ProviderRuntimeEvent): Effect.Effect<void> =>\n    Queue.offer(runtimeEventQueue, event).pipe(Effect.asVoid);\n\n  const readClaudeOAuthCredentials = Effect.fn(\"readClaudeOAuthCredentials\")(function* () {\n    if (refreshedClaudeOAuthCredentials) {\n      const nowMs = yield* Clock.currentTimeMillis;\n      if (!shouldRefreshClaudeOAuthCredentials(refreshedClaudeOAuthCredentials, nowMs)) {\n        return refreshedClaudeOAuthCredentials;\n      }\n    }\n\n    const text = yield* fileSystem\n      .readFileString(claudeCredentialsPath)\n      .pipe(Effect.catch(() => Effect.void));\n    if (!text) {\n      return undefined;\n    }\n\n    const parsed = yield* decodeUnknownJsonText(text, \"Failed to parse Claude credentials.\").pipe(\n      Effect.catch(() => Effect.void),\n    );\n    return parseClaudeOAuthCredentials(parsed);\n  });\n\n  const refreshClaudeOAuthCredentials = Effect.fn(\"refreshClaudeOAuthCredentials\")(function* (\n    credentials: ClaudeOAuthCredentials,\n  ) {\n    const refreshToken = credentials.refreshToken;\n    if (!refreshToken) {\n      return credentials;\n    }\n\n    const scopes =\n      credentials.scopes.length > 0 ? credentials.scopes : [...CLAUDE_OAUTH_DEFAULT_SCOPES];\n    const body = yield* encodeUnknownJsonText(\n      {\n        grant_type: \"refresh_token\",\n        refresh_token: refreshToken,\n        client_id: CLAUDE_OAUTH_CLIENT_ID,\n        scope: scopes.join(\" \"),\n      },\n      \"Failed to encode Claude OAuth refresh request.\",\n    );\n    const response = yield* Effect.tryPromise({\n      try: () =>\n        // @effect-diagnostics-next-line globalFetchInEffect:off - Claude OAuth token refresh is isolated at this Promise boundary.\n        fetch(CLAUDE_OAUTH_TOKEN_URL, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n          body,\n          signal: AbortSignal.timeout(Duration.toMillis(CLAUDE_USAGE_REFRESH_TIMEOUT)),\n        }),\n      catch: (cause) => toMessage(cause, \"Claude OAuth token refresh failed.\"),\n    });\n    if (!response.ok) {\n      return yield* Effect.fail(`Claude OAuth token refresh failed with HTTP ${response.status}.`);\n    }\n\n    const payload = asUnknownRecord(\n      yield* Effect.tryPromise({\n        try: () => response.json() as Promise<unknown>,\n        catch: (cause) => toMessage(cause, \"Failed to parse Claude OAuth refresh response.\"),\n      }),\n    );\n    const accessToken = asNonEmptyString(payload?.access_token);\n    const expiresInSeconds = asFiniteNumber(payload?.expires_in);\n    if (!accessToken) {\n      return yield* Effect.fail(\"Claude OAuth token refresh response did not include a token.\");\n    }\n\n    const nowMs = yield* Clock.currentTimeMillis;\n    const refreshed = {\n      accessToken,\n      refreshToken: asNonEmptyString(payload?.refresh_token) ?? refreshToken,\n      expiresAt:\n        expiresInSeconds !== undefined ? nowMs + Math.max(0, expiresInSeconds) * 1000 : null,\n      scopes: normalizeClaudeOAuthScopes(payload?.scope, scopes),\n      subscriptionType: credentials.subscriptionType,\n      rateLimitTier: credentials.rateLimitTier,\n    } satisfies ClaudeOAuthCredentials;\n    refreshedClaudeOAuthCredentials = refreshed;\n    return refreshed;\n  });\n\n  const getClaudeOAuthCredentials = Effect.fn(\"getClaudeOAuthCredentials\")(function* () {\n    const credentials = yield* readClaudeOAuthCredentials();\n    if (!credentials) {\n      return undefined;\n    }\n\n    const nowMs = yield* Clock.currentTimeMillis;\n    if (!shouldRefreshClaudeOAuthCredentials(credentials, nowMs)) {\n      return credentials;\n    }\n\n    return yield* refreshClaudeOAuthCredentials(credentials);\n  });\n\n  const readClaudeOAuthUsage = Effect.fn(\"readClaudeOAuthUsage\")(function* () {\n    if (!claudeOAuthUsageEnabled) {\n      return undefined;\n    }\n\n    const nowMs = yield* Clock.currentTimeMillis;\n    if (\n      cachedClaudeOAuthUsage &&\n      nowMs - cachedClaudeOAuthUsage.fetchedAtMs < CLAUDE_OAUTH_USAGE_CACHE_TTL_MS\n    ) {\n      return cachedClaudeOAuthUsage.usage;\n    }\n\n    const credentials = yield* getClaudeOAuthCredentials();\n    if (!credentials) {\n      return undefined;\n    }\n\n    const usage = yield* Effect.tryPromise({\n      try: () =>\n        fetchClaudeOAuthUsage({\n          accessToken: credentials.accessToken,\n          environment: claudeEnvironment,\n        }),\n      catch: (cause) => toMessage(cause, \"Claude OAuth usage refresh failed.\"),\n    }).pipe(\n      Effect.timeoutOption(CLAUDE_USAGE_REFRESH_TIMEOUT),\n      Effect.flatMap(\n        Option.match({\n          onNone: () => Effect.fail(\"Claude OAuth usage refresh timed out.\"),\n          onSome: (value) => Effect.succeed(value),\n        }),\n      ),\n    );\n\n    cachedClaudeOAuthUsage = {\n      fetchedAtMs: nowMs,\n      usage,\n    };\n    return usage;\n  });\n\n  const readClaudeStatuslineUsage = Effect.fn(\"readClaudeStatuslineUsage\")(function* (\n    context: ClaudeSessionContext,\n  ) {\n    if (!claudeStatuslineUsageEnabled || !context.statuslineCapturePath) {\n      return undefined;\n    }\n\n    const text = yield* fileSystem\n      .readFileString(context.statuslineCapturePath)\n      .pipe(Effect.catch(() => Effect.void));\n    if (!text) {\n      return undefined;\n    }\n\n    const parsed = yield* decodeUnknownJsonText(\n      text,\n      \"Failed to parse Claude statusline usage.\",\n    ).pipe(Effect.catch(() => Effect.void));\n    const record = asUnknownRecord(parsed);\n    return record?.rate_limits ?? record?.rateLimits;\n  });\n\n  const refreshClaudeContextUsage = Effect.fn(\"refreshClaudeContextUsage\")(function* (\n    context: ClaudeSessionContext,\n  ) {\n    if (context.stopped) {\n      return;\n    }\n    const getContextUsage = context.query.getContextUsage;\n    if (!getContextUsage) {\n      return;\n    }\n\n    const usage = yield* Effect.tryPromise({\n      try: () => getContextUsage(),\n      catch: (cause) => toMessage(cause, \"Claude context usage refresh failed.\"),\n    }).pipe(\n      Effect.timeoutOption(CLAUDE_USAGE_REFRESH_TIMEOUT),\n      Effect.flatMap(\n        Option.match({\n          onNone: () => Effect.fail(\"Claude context usage refresh timed out.\"),\n          onSome: (value) => Effect.succeed(value),\n        }),\n      ),\n    );\n    const normalizedUsage = normalizeClaudeContextUsage(usage);\n    if (!normalizedUsage) {\n      return;\n    }\n\n    context.lastKnownTokenUsage = normalizedUsage;\n    if (normalizedUsage.maxTokens !== undefined) {\n      context.lastKnownContextWindow = normalizedUsage.maxTokens;\n    }\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"thread.token-usage.updated\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      payload: {\n        usage: normalizedUsage,\n      },\n      providerRefs: nativeProviderRefs(context),\n      raw: {\n        source: \"claude.sdk.message\",\n        method: \"getContextUsage\",\n        payload: usage,\n      },\n    });\n  });\n\n  const refreshClaudeOAuthUsage = Effect.fn(\"refreshClaudeOAuthUsage\")(function* (\n    context: ClaudeSessionContext,\n  ) {\n    if (context.stopped) {\n      return;\n    }\n\n    const usage = yield* readClaudeOAuthUsage();\n    const rateLimits = normalizeClaudeAccountUsageRateLimits(usage, \"claude.oauth.usage\");\n    if (!rateLimits) {\n      return;\n    }\n\n    const fingerprint =\n      encodeJsonStringForDiagnostics(rateLimits) ?? \"[unserializable rate limits]\";\n    if (context.lastKnownOAuthUsageFingerprint === fingerprint) {\n      return;\n    }\n    context.lastKnownOAuthUsageFingerprint = fingerprint;\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"account.rate-limits.updated\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      providerInstanceId: context.session.providerInstanceId,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      payload: {\n        rateLimits,\n      },\n      providerRefs: nativeProviderRefs(context),\n      raw: {\n        source: \"claude.oauth.usage\",\n        method: \"GET /api/oauth/usage\",\n        payload: usage,\n      },\n    });\n  });\n\n  const refreshClaudeStatuslineUsage = Effect.fn(\"refreshClaudeStatuslineUsage\")(function* (\n    context: ClaudeSessionContext,\n  ) {\n    if (context.stopped) {\n      return;\n    }\n\n    const usage = yield* readClaudeStatuslineUsage(context);\n    const rateLimits = normalizeClaudeAccountUsageRateLimits(usage, \"claude.statusline\");\n    if (!rateLimits) {\n      return;\n    }\n\n    const fingerprint =\n      encodeJsonStringForDiagnostics(rateLimits) ?? \"[unserializable rate limits]\";\n    if (context.lastKnownStatuslineUsageFingerprint === fingerprint) {\n      return;\n    }\n    context.lastKnownStatuslineUsageFingerprint = fingerprint;\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"account.rate-limits.updated\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      providerInstanceId: context.session.providerInstanceId,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      payload: {\n        rateLimits,\n      },\n      providerRefs: nativeProviderRefs(context),\n      raw: {\n        source: \"claude.statusline\",\n        method: \"statusLine\",\n        payload: usage,\n      },\n    });\n  });\n\n  const refreshClaudeContextUsageBestEffort = (context: ClaudeSessionContext) =>\n    refreshClaudeContextUsage(context).pipe(\n      Effect.catch((detail) =>\n        Effect.logDebug(\"claude.usage.refresh.failed\", {\n          threadId: context.session.threadId,\n          detail,\n        }),\n      ),\n    );\n\n  const refreshClaudeOAuthUsageBestEffort = (context: ClaudeSessionContext) =>\n    refreshClaudeOAuthUsage(context).pipe(\n      Effect.catch((detail) =>\n        Effect.logDebug(\"claude.oauth-usage.refresh.failed\", {\n          threadId: context.session.threadId,\n          detail,\n        }),\n      ),\n    );\n\n  const refreshClaudeStatuslineUsageBestEffort = (context: ClaudeSessionContext) =>\n    refreshClaudeStatuslineUsage(context).pipe(\n      Effect.catch((detail) =>\n        Effect.logDebug(\"claude.statusline-usage.refresh.failed\", {\n          threadId: context.session.threadId,\n          detail,\n        }),\n      ),\n    );\n\n  const refreshClaudeUsageBestEffort = (context: ClaudeSessionContext) =>\n    Effect.all(\n      [\n        refreshClaudeContextUsageBestEffort(context),\n        refreshClaudeOAuthUsageBestEffort(context),\n        refreshClaudeStatuslineUsageBestEffort(context),\n      ],\n      {\n        concurrency: \"unbounded\",\n        discard: true,\n      },\n    );\n\n  const emitClaudeRateLimits = Effect.fn(\"emitClaudeRateLimits\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKRateLimitEvent,\n  ) {\n    const nowMs = yield* Clock.currentTimeMillis;\n    if (!isFreshClaudeRateLimitEvent(message, nowMs)) {\n      if (context.lastKnownRateLimits === message) {\n        context.lastKnownRateLimits = undefined;\n      }\n      return;\n    }\n\n    context.lastKnownRateLimits = message;\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      providerRefs: nativeProviderRefs(context),\n      raw: {\n        source: \"claude.sdk.message\" as const,\n        method: sdkNativeMethod(message),\n        messageType: message.type,\n        payload: message,\n      },\n      type: \"account.rate-limits.updated\",\n      payload: {\n        rateLimits: message,\n      },\n    });\n  });\n\n  const logNativeSdkMessage = Effect.fn(\"logNativeSdkMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (!nativeEventLogger) {\n      return;\n    }\n\n    const observedAt = yield* nowIso;\n    const itemId = sdkNativeItemId(message);\n\n    yield* nativeEventLogger.write(\n      {\n        observedAt,\n        event: {\n          id:\n            \"uuid\" in message && typeof message.uuid === \"string\"\n              ? message.uuid\n              : yield* randomUUIDv4,\n          kind: \"notification\",\n          provider: PROVIDER,\n          createdAt: observedAt,\n          method: sdkNativeMethod(message),\n          ...(typeof message.session_id === \"string\"\n            ? { providerThreadId: message.session_id }\n            : {}),\n          ...(context.turnState\n            ? {\n                turnId: asCanonicalTurnId(context.turnState.turnId),\n              }\n            : {}),\n          ...(itemId ? { itemId: ProviderItemId.make(itemId) } : {}),\n          payload: message,\n        },\n      },\n      context.session.threadId,\n    );\n  });\n\n  const snapshotThread = Effect.fn(\"snapshotThread\")(function* (context: ClaudeSessionContext) {\n    const threadId = context.session.threadId;\n    if (!threadId) {\n      return yield* new ProviderAdapterValidationError({\n        provider: PROVIDER,\n        operation: \"readThread\",\n        issue: \"Session thread id is not initialized yet.\",\n      });\n    }\n    return {\n      threadId,\n      turns: context.turns.map((turn) => ({\n        id: turn.id,\n        items: [...turn.items],\n      })),\n    };\n  });\n\n  const updateResumeCursor = Effect.fn(\"updateResumeCursor\")(function* (\n    context: ClaudeSessionContext,\n  ) {\n    const threadId = context.session.threadId;\n    if (!threadId) return;\n\n    const resumeCursor = {\n      threadId,\n      ...(context.resumeSessionId ? { resume: context.resumeSessionId } : {}),\n      ...(context.lastAssistantUuid ? { resumeSessionAt: context.lastAssistantUuid } : {}),\n      turnCount: context.turns.length,\n    };\n\n    context.session = {\n      ...context.session,\n      resumeCursor,\n      updatedAt: yield* nowIso,\n    };\n  });\n\n  const ensureAssistantTextBlock = Effect.fn(\"ensureAssistantTextBlock\")(function* (\n    context: ClaudeSessionContext,\n    blockIndex: number,\n    options?: {\n      readonly fallbackText?: string;\n      readonly streamClosed?: boolean;\n    },\n  ) {\n    const turnState = context.turnState;\n    if (!turnState) {\n      return undefined;\n    }\n\n    const existing = turnState.assistantTextBlocks.get(blockIndex);\n    if (existing && !existing.completionEmitted) {\n      if (existing.fallbackText.length === 0 && options?.fallbackText) {\n        existing.fallbackText = options.fallbackText;\n      }\n      if (options?.streamClosed) {\n        existing.streamClosed = true;\n      }\n      return { blockIndex, block: existing };\n    }\n\n    const block: AssistantTextBlockState = {\n      itemId: yield* randomUUIDv4,\n      blockIndex,\n      emittedTextDelta: false,\n      fallbackText: options?.fallbackText ?? \"\",\n      streamClosed: options?.streamClosed ?? false,\n      completionEmitted: false,\n    };\n    turnState.assistantTextBlocks.set(blockIndex, block);\n    turnState.assistantTextBlockOrder.push(block);\n    return { blockIndex, block };\n  });\n\n  const createSyntheticAssistantTextBlock = Effect.fn(\"createSyntheticAssistantTextBlock\")(\n    function* (context: ClaudeSessionContext, fallbackText: string) {\n      const turnState = context.turnState;\n      if (!turnState) {\n        return undefined;\n      }\n\n      const blockIndex = turnState.nextSyntheticAssistantBlockIndex;\n      turnState.nextSyntheticAssistantBlockIndex -= 1;\n      return yield* ensureAssistantTextBlock(context, blockIndex, {\n        fallbackText,\n        streamClosed: true,\n      });\n    },\n  );\n\n  const completeAssistantTextBlock = Effect.fn(\"completeAssistantTextBlock\")(function* (\n    context: ClaudeSessionContext,\n    block: AssistantTextBlockState,\n    options?: {\n      readonly force?: boolean;\n      readonly rawMethod?: string;\n      readonly rawPayload?: unknown;\n    },\n  ) {\n    const turnState = context.turnState;\n    if (!turnState || block.completionEmitted) {\n      return;\n    }\n\n    if (!options?.force && !block.streamClosed) {\n      return;\n    }\n\n    if (!block.emittedTextDelta && block.fallbackText.length > 0) {\n      const deltaStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"content.delta\",\n        eventId: deltaStamp.eventId,\n        provider: PROVIDER,\n        createdAt: deltaStamp.createdAt,\n        threadId: context.session.threadId,\n        turnId: turnState.turnId,\n        itemId: asRuntimeItemId(block.itemId),\n        payload: {\n          streamKind: \"assistant_text\",\n          delta: block.fallbackText,\n        },\n        providerRefs: nativeProviderRefs(context),\n        ...(options?.rawMethod || options?.rawPayload\n          ? {\n              raw: {\n                source: \"claude.sdk.message\" as const,\n                ...(options.rawMethod ? { method: options.rawMethod } : {}),\n                payload: options?.rawPayload,\n              },\n            }\n          : {}),\n      });\n    }\n\n    block.completionEmitted = true;\n    if (turnState.assistantTextBlocks.get(block.blockIndex) === block) {\n      turnState.assistantTextBlocks.delete(block.blockIndex);\n    }\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"item.completed\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      itemId: asRuntimeItemId(block.itemId),\n      threadId: context.session.threadId,\n      turnId: turnState.turnId,\n      payload: {\n        itemType: \"assistant_message\",\n        status: \"completed\",\n        title: \"Assistant message\",\n        ...(block.fallbackText.length > 0 ? { detail: block.fallbackText } : {}),\n      },\n      providerRefs: nativeProviderRefs(context),\n      ...(options?.rawMethod || options?.rawPayload\n        ? {\n            raw: {\n              source: \"claude.sdk.message\" as const,\n              ...(options.rawMethod ? { method: options.rawMethod } : {}),\n              payload: options?.rawPayload,\n            },\n          }\n        : {}),\n    });\n  });\n\n  const backfillAssistantTextBlocksFromSnapshot = Effect.fn(\n    \"backfillAssistantTextBlocksFromSnapshot\",\n  )(function* (context: ClaudeSessionContext, message: SDKMessage) {\n    const turnState = context.turnState;\n    if (!turnState) {\n      return;\n    }\n\n    const snapshotTextBlocks = extractAssistantTextBlocks(message);\n    if (snapshotTextBlocks.length === 0) {\n      return;\n    }\n\n    const orderedBlocks = turnState.assistantTextBlockOrder.map((block) => ({\n      blockIndex: block.blockIndex,\n      block,\n    }));\n\n    for (const [position, text] of snapshotTextBlocks.entries()) {\n      const existingEntry = orderedBlocks[position];\n      const entry =\n        existingEntry ??\n        (yield* createSyntheticAssistantTextBlock(context, text).pipe(\n          Effect.map((created) => {\n            if (!created) {\n              return undefined;\n            }\n            orderedBlocks.push(created);\n            return created;\n          }),\n        ));\n      if (!entry) {\n        continue;\n      }\n\n      if (entry.block.fallbackText.length === 0) {\n        entry.block.fallbackText = text;\n      }\n\n      if (entry.block.streamClosed && !entry.block.completionEmitted) {\n        yield* completeAssistantTextBlock(context, entry.block, {\n          rawMethod: \"claude/assistant\",\n          rawPayload: message,\n        });\n      }\n    }\n  });\n\n  const ensureThreadId = Effect.fn(\"ensureThreadId\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (typeof message.session_id !== \"string\" || message.session_id.length === 0) {\n      return;\n    }\n    if (!hasDurableClaudeSessionId(message)) {\n      return;\n    }\n    const nextThreadId = message.session_id;\n    context.resumeSessionId = message.session_id;\n    yield* updateResumeCursor(context);\n\n    if (context.lastThreadStartedId !== nextThreadId) {\n      context.lastThreadStartedId = nextThreadId;\n      const stamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"thread.started\",\n        eventId: stamp.eventId,\n        provider: PROVIDER,\n        createdAt: stamp.createdAt,\n        threadId: context.session.threadId,\n        payload: {\n          providerThreadId: nextThreadId,\n        },\n        providerRefs: {},\n        raw: {\n          source: \"claude.sdk.message\",\n          method: \"claude/thread/started\",\n          payload: {\n            session_id: message.session_id,\n          },\n        },\n      });\n    }\n  });\n\n  const emitRuntimeError = Effect.fn(\"emitRuntimeError\")(function* (\n    context: ClaudeSessionContext,\n    message: string,\n    cause?: unknown,\n  ) {\n    if (cause !== undefined) {\n      void cause;\n    }\n    const turnState = context.turnState;\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"runtime.error\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(turnState ? { turnId: asCanonicalTurnId(turnState.turnId) } : {}),\n      payload: {\n        message,\n        class: \"provider_error\",\n        ...(cause !== undefined ? { detail: cause } : {}),\n      },\n      providerRefs: nativeProviderRefs(context),\n    });\n  });\n\n  const emitRuntimeWarning = Effect.fn(\"emitRuntimeWarning\")(function* (\n    context: ClaudeSessionContext,\n    message: string,\n    detail?: unknown,\n  ) {\n    const turnState = context.turnState;\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"runtime.warning\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(turnState ? { turnId: asCanonicalTurnId(turnState.turnId) } : {}),\n      payload: {\n        message,\n        ...(detail !== undefined ? { detail } : {}),\n      },\n      providerRefs: nativeProviderRefs(context),\n    });\n  });\n\n  const emitThreadTokenUsage = Effect.fn(\"emitThreadTokenUsage\")(function* (\n    context: ClaudeSessionContext,\n    usage: ThreadTokenUsageSnapshot | undefined,\n    options?: {\n      readonly rawMethod?: string;\n      readonly rawPayload?: unknown;\n    },\n  ) {\n    if (!usage) {\n      return;\n    }\n\n    context.lastKnownTokenUsage = usage;\n    context.lastKnownTotalProcessedTokens =\n      usage.totalProcessedTokens ?? context.lastKnownTotalProcessedTokens;\n\n    const turnState = context.turnState;\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"thread.token-usage.updated\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(turnState ? { turnId: turnState.turnId } : {}),\n      payload: {\n        usage,\n      },\n      providerRefs: nativeProviderRefs(context),\n      ...(options?.rawMethod || options?.rawPayload\n        ? {\n            raw: {\n              source: \"claude.sdk.message\" as const,\n              ...(options.rawMethod ? { method: options.rawMethod } : {}),\n              payload: options.rawPayload,\n            },\n          }\n        : {}),\n    });\n  });\n\n  const queryCurrentContextUsage = Effect.fn(\"queryCurrentContextUsage\")(function* (\n    context: ClaudeSessionContext,\n    totalProcessedTokens?: number,\n  ) {\n    if (!context.query.getContextUsage) {\n      return undefined;\n    }\n\n    const usage = yield* Effect.promise(async () => {\n      try {\n        return await context.query.getContextUsage?.();\n      } catch {\n        return undefined;\n      }\n    }).pipe(Effect.timeoutOption(CLAUDE_USAGE_REFRESH_TIMEOUT), Effect.map(Option.getOrUndefined));\n    if (!usage) {\n      return undefined;\n    }\n\n    context.lastKnownContextWindow = usage.maxTokens;\n    return normalizeClaudeContextUsageApiSnapshot(usage, totalProcessedTokens);\n  });\n\n  const emitProposedPlanCompleted = Effect.fn(\"emitProposedPlanCompleted\")(function* (\n    context: ClaudeSessionContext,\n    input: {\n      readonly planMarkdown: string;\n      readonly toolUseId?: string | undefined;\n      readonly rawSource: \"claude.sdk.message\" | \"claude.sdk.permission\";\n      readonly rawMethod: string;\n      readonly rawPayload: unknown;\n    },\n  ) {\n    const turnState = context.turnState;\n    const planMarkdown = input.planMarkdown.trim();\n    if (!turnState || planMarkdown.length === 0) {\n      return;\n    }\n\n    const captureKey = exitPlanCaptureKey({\n      toolUseId: input.toolUseId,\n      planMarkdown,\n    });\n    if (turnState.capturedProposedPlanKeys.has(captureKey)) {\n      return;\n    }\n    turnState.capturedProposedPlanKeys.add(captureKey);\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"turn.proposed.completed\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      turnId: turnState.turnId,\n      payload: {\n        planMarkdown,\n      },\n      providerRefs: nativeProviderRefs(context, {\n        providerItemId: input.toolUseId,\n      }),\n      raw: {\n        source: input.rawSource,\n        method: input.rawMethod,\n        payload: input.rawPayload,\n      },\n    });\n  });\n\n  const emitClaudeTaskPlanUpdated = Effect.fn(\"emitClaudeTaskPlanUpdated\")(function* (\n    context: ClaudeSessionContext,\n    input: {\n      readonly toolUseId: string;\n      readonly rawMethod: string;\n      readonly rawPayload: unknown;\n    },\n  ) {\n    const plan = planStepsFromClaudeTasks(context.claudeTasks);\n    if (plan.length === 0) {\n      return;\n    }\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"turn.plan.updated\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      payload: {\n        explanation: \"Claude Tasks\",\n        plan,\n      },\n      providerRefs: nativeProviderRefs(context, {\n        providerItemId: input.toolUseId,\n      }),\n      raw: {\n        source: \"claude.sdk.message\",\n        method: input.rawMethod,\n        payload: input.rawPayload,\n      },\n    });\n  });\n\n  const completeTurn = Effect.fn(\"completeTurn\")(function* (\n    context: ClaudeSessionContext,\n    status: ProviderRuntimeTurnStatus,\n    errorMessage?: string,\n    result?: SDKResultMessage,\n  ) {\n    const resultContextWindow = maxClaudeContextWindowFromModelUsage(result?.modelUsage);\n    if (resultContextWindow !== undefined) {\n      context.lastKnownContextWindow = resultContextWindow;\n    }\n\n    const maxTokens = resultContextWindow ?? context.lastKnownContextWindow;\n    const accumulatedTotalProcessedTokens = claudeTotalProcessedTokens(result?.usage);\n    if (accumulatedTotalProcessedTokens !== undefined) {\n      context.lastKnownTotalProcessedTokens = accumulatedTotalProcessedTokens;\n    }\n\n    const contextUsageSnapshot = yield* queryCurrentContextUsage(\n      context,\n      accumulatedTotalProcessedTokens ?? context.lastKnownTotalProcessedTokens,\n    );\n    const resultUsageRecord =\n      result?.usage && typeof result.usage === \"object\" && !Array.isArray(result.usage)\n        ? (result.usage as Record<string, unknown>)\n        : undefined;\n    const hasResultUsageIteration =\n      resultUsageRecord !== undefined && lastClaudeUsageIteration(resultUsageRecord) !== undefined;\n    const resultHasActiveUsage =\n      resultUsageRecord !== undefined &&\n      (hasResultUsageIteration ||\n        claudeUsageInputTokens(resultUsageRecord) + claudeUsageOutputTokens(resultUsageRecord) > 0);\n    const resultTotalOnly =\n      resultUsageRecord !== undefined &&\n      !resultHasActiveUsage &&\n      claudeTotalProcessedTokens(resultUsageRecord) !== undefined;\n    const resultIterationSnapshot = resultUsageRecord\n      ? normalizeClaudeActiveTokenUsage(\n          resultUsageRecord,\n          maxTokens,\n          accumulatedTotalProcessedTokens ?? context.lastKnownTotalProcessedTokens,\n        )\n      : undefined;\n    const lastGoodUsage = context.lastKnownTokenUsage;\n    const resultCostUsd =\n      typeof result?.total_cost_usd === \"number\" && Number.isFinite(result.total_cost_usd)\n        ? result.total_cost_usd\n        : undefined;\n    const baseUsageSnapshot: ThreadTokenUsageSnapshot | undefined =\n      contextUsageSnapshot ??\n      (resultTotalOnly && lastGoodUsage\n        ? {\n            ...lastGoodUsage,\n            ...(typeof maxTokens === \"number\" && Number.isFinite(maxTokens) && maxTokens > 0\n              ? { maxTokens }\n              : {}),\n            ...(typeof accumulatedTotalProcessedTokens === \"number\" &&\n            Number.isFinite(accumulatedTotalProcessedTokens) &&\n            accumulatedTotalProcessedTokens > lastGoodUsage.usedTokens\n              ? {\n                  totalProcessedTokens: accumulatedTotalProcessedTokens,\n                }\n              : {}),\n          }\n        : resultIterationSnapshot) ??\n      (lastGoodUsage\n        ? {\n            ...lastGoodUsage,\n            ...(typeof maxTokens === \"number\" && Number.isFinite(maxTokens) && maxTokens > 0\n              ? { maxTokens }\n              : {}),\n            ...(typeof accumulatedTotalProcessedTokens === \"number\" &&\n            Number.isFinite(accumulatedTotalProcessedTokens) &&\n            accumulatedTotalProcessedTokens > lastGoodUsage.usedTokens\n              ? {\n                  totalProcessedTokens: accumulatedTotalProcessedTokens,\n                }\n              : {}),\n          }\n        : undefined);\n    const usageSnapshot: ThreadTokenUsageSnapshot | undefined = baseUsageSnapshot\n      ? {\n          ...baseUsageSnapshot,\n          ...(resultCostUsd !== undefined ? { costUsd: resultCostUsd } : {}),\n        }\n      : undefined;\n\n    const turnState = context.turnState;\n    if (!turnState) {\n      yield* emitThreadTokenUsage(context, usageSnapshot, {\n        rawMethod: \"claude/result\",\n        rawPayload: result ?? { status },\n      });\n\n      yield* Effect.logInfo(\"claude.turn.result-without-active-turn\", {\n        threadId: context.session.threadId,\n        status,\n        numTurns: result?.num_turns,\n        hasUsage: result?.usage !== undefined,\n        ...(errorMessage ? { errorMessage } : {}),\n      });\n      return;\n    }\n\n    for (const [index, tool] of context.inFlightTools.entries()) {\n      const toolStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"item.completed\",\n        eventId: toolStamp.eventId,\n        provider: PROVIDER,\n        createdAt: toolStamp.createdAt,\n        threadId: context.session.threadId,\n        turnId: turnState.turnId,\n        itemId: asRuntimeItemId(tool.itemId),\n        payload: {\n          itemType: tool.itemType,\n          status: status === \"completed\" ? \"completed\" : \"failed\",\n          title: tool.title,\n          ...(tool.detail ? { detail: tool.detail } : {}),\n          data: {\n            toolName: tool.toolName,\n            input: tool.input,\n          },\n        },\n        providerRefs: nativeProviderRefs(context, {\n          providerItemId: tool.itemId,\n        }),\n        raw: {\n          source: \"claude.sdk.message\",\n          method: \"claude/result\",\n          payload: result ?? { status },\n        },\n      });\n      if (tool.itemType === \"collab_agent_tool_call\") {\n        const subagentStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"subagent.completed\",\n          eventId: subagentStamp.eventId,\n          provider: PROVIDER,\n          createdAt: subagentStamp.createdAt,\n          threadId: context.session.threadId,\n          turnId: turnState.turnId,\n          itemId: asRuntimeItemId(tool.itemId),\n          payload: {\n            ...claudeSubagentCommonPayload(tool),\n            status: claudeSubagentCompletionStatus(status),\n            ...(errorMessage ? { error: errorMessage } : {}),\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: tool.itemId,\n          }),\n          raw: {\n            source: \"claude.sdk.message\",\n            method: \"claude/result\",\n            payload: result ?? { status },\n          },\n        });\n      }\n      context.inFlightTools.delete(index);\n    }\n    // Clear any remaining stale entries (e.g. from interrupted content blocks)\n    context.inFlightTools.clear();\n\n    for (const block of turnState.assistantTextBlockOrder) {\n      yield* completeAssistantTextBlock(context, block, {\n        force: true,\n        rawMethod: \"claude/result\",\n        rawPayload: result ?? { status },\n      });\n    }\n\n    context.turns.push({\n      id: turnState.turnId,\n      items: [...turnState.items],\n    });\n\n    yield* emitThreadTokenUsage(context, usageSnapshot, {\n      rawMethod: \"claude/result\",\n      rawPayload: result ?? { status },\n    });\n\n    const stamp = yield* makeEventStamp();\n    yield* offerRuntimeEvent({\n      type: \"turn.completed\",\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      turnId: turnState.turnId,\n      payload: {\n        state: status,\n        ...(result?.stop_reason !== undefined ? { stopReason: result.stop_reason } : {}),\n        ...(result?.usage ? { usage: result.usage } : {}),\n        ...(result?.modelUsage ? { modelUsage: result.modelUsage } : {}),\n        ...(typeof result?.total_cost_usd === \"number\"\n          ? { totalCostUsd: result.total_cost_usd }\n          : {}),\n        ...(errorMessage ? { errorMessage } : {}),\n      },\n      providerRefs: nativeProviderRefs(context),\n    });\n\n    const updatedAt = yield* nowIso;\n    context.turnState = undefined;\n    context.session = {\n      ...context.session,\n      status: \"ready\",\n      activeTurnId: undefined,\n      updatedAt,\n      ...(status === \"failed\" && errorMessage ? { lastError: errorMessage } : {}),\n    };\n    yield* updateResumeCursor(context);\n  });\n\n  const handleStreamEvent = Effect.fn(\"handleStreamEvent\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (message.type !== \"stream_event\") {\n      return;\n    }\n\n    const { event } = message;\n\n    if (event.type === \"message_delta\") {\n      if (message.parent_tool_use_id !== null && message.parent_tool_use_id !== undefined) {\n        return;\n      }\n\n      const snapshot = normalizeClaudeActiveTokenUsage(\n        event.usage,\n        context.lastKnownContextWindow,\n        context.lastKnownTotalProcessedTokens,\n      );\n      yield* emitThreadTokenUsage(context, snapshot, {\n        rawMethod: \"claude/stream_event/message_delta\",\n        rawPayload: message,\n      });\n      return;\n    }\n\n    if (event.type === \"content_block_delta\") {\n      if (\n        (event.delta.type === \"text_delta\" || event.delta.type === \"thinking_delta\") &&\n        context.turnState\n      ) {\n        const deltaText =\n          event.delta.type === \"text_delta\"\n            ? event.delta.text\n            : typeof event.delta.thinking === \"string\"\n              ? event.delta.thinking\n              : \"\";\n        if (deltaText.length === 0) {\n          return;\n        }\n        const streamKind = streamKindFromDeltaType(event.delta.type);\n        const assistantBlockEntry =\n          event.delta.type === \"text_delta\"\n            ? yield* ensureAssistantTextBlock(context, event.index)\n            : context.turnState.assistantTextBlocks.get(event.index)\n              ? {\n                  blockIndex: event.index,\n                  block: context.turnState.assistantTextBlocks.get(\n                    event.index,\n                  ) as AssistantTextBlockState,\n                }\n              : undefined;\n        if (assistantBlockEntry?.block && event.delta.type === \"text_delta\") {\n          assistantBlockEntry.block.emittedTextDelta = true;\n        }\n        const stamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"content.delta\",\n          eventId: stamp.eventId,\n          provider: PROVIDER,\n          createdAt: stamp.createdAt,\n          threadId: context.session.threadId,\n          turnId: context.turnState.turnId,\n          ...(assistantBlockEntry?.block\n            ? {\n                itemId: asRuntimeItemId(assistantBlockEntry.block.itemId),\n              }\n            : {}),\n          payload: {\n            streamKind,\n            delta: deltaText,\n          },\n          providerRefs: nativeProviderRefs(context),\n          raw: {\n            source: \"claude.sdk.message\",\n            method: \"claude/stream_event/content_block_delta\",\n            payload: message,\n          },\n        });\n        return;\n      }\n\n      if (event.delta.type === \"input_json_delta\") {\n        const tool = context.inFlightTools.get(event.index);\n        if (!tool || typeof event.delta.partial_json !== \"string\") {\n          return;\n        }\n\n        const partialInputJson = tool.partialInputJson + event.delta.partial_json;\n        const parsedInput = tryParseJsonRecord(partialInputJson);\n        const detail = parsedInput ? summarizeToolRequest(tool.toolName, parsedInput) : tool.detail;\n        let nextTool: ToolInFlight = {\n          ...tool,\n          partialInputJson,\n          ...(parsedInput ? { input: parsedInput } : {}),\n          ...(detail ? { detail } : {}),\n        };\n\n        const nextFingerprint =\n          parsedInput && Object.keys(parsedInput).length > 0\n            ? toolInputFingerprint(parsedInput)\n            : undefined;\n        context.inFlightTools.set(event.index, nextTool);\n\n        if (\n          !parsedInput ||\n          !nextFingerprint ||\n          tool.lastEmittedInputFingerprint === nextFingerprint\n        ) {\n          return;\n        }\n\n        nextTool = {\n          ...nextTool,\n          lastEmittedInputFingerprint: nextFingerprint,\n        };\n        context.inFlightTools.set(event.index, nextTool);\n\n        const stamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"item.updated\",\n          eventId: stamp.eventId,\n          provider: PROVIDER,\n          createdAt: stamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState\n            ? {\n                turnId: asCanonicalTurnId(context.turnState.turnId),\n              }\n            : {}),\n          itemId: asRuntimeItemId(nextTool.itemId),\n          payload: {\n            itemType: nextTool.itemType,\n            status: \"inProgress\",\n            title: nextTool.title,\n            ...(nextTool.detail ? { detail: nextTool.detail } : {}),\n            data: {\n              toolName: nextTool.toolName,\n              input: nextTool.input,\n            },\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: nextTool.itemId,\n          }),\n          raw: {\n            source: \"claude.sdk.message\",\n            method: \"claude/stream_event/content_block_delta/input_json_delta\",\n            payload: message,\n          },\n        });\n\n        if (nextTool.itemType === \"collab_agent_tool_call\") {\n          const subagentStamp = yield* makeEventStamp();\n          yield* offerRuntimeEvent({\n            type: \"subagent.updated\",\n            eventId: subagentStamp.eventId,\n            provider: PROVIDER,\n            createdAt: subagentStamp.createdAt,\n            threadId: context.session.threadId,\n            ...(context.turnState\n              ? {\n                  turnId: asCanonicalTurnId(context.turnState.turnId),\n                }\n              : {}),\n            itemId: asRuntimeItemId(nextTool.itemId),\n            payload: {\n              ...claudeSubagentCommonPayload(nextTool),\n              status: \"running\",\n              ...(nextTool.detail ? { description: nextTool.detail } : {}),\n              lastToolName: nextTool.toolName,\n            },\n            providerRefs: nativeProviderRefs(context, {\n              providerItemId: nextTool.itemId,\n            }),\n            raw: {\n              source: \"claude.sdk.message\",\n              method: \"claude/stream_event/content_block_delta/input_json_delta\",\n              payload: message,\n            },\n          });\n        }\n\n        // Emit plan update when TodoWrite input is parsed\n        if (parsedInput && isTodoTool(nextTool.toolName)) {\n          const planSteps = extractPlanStepsFromTodoInput(parsedInput);\n          if (planSteps && planSteps.length > 0) {\n            const planStamp = yield* makeEventStamp();\n            yield* offerRuntimeEvent({\n              type: \"turn.plan.updated\",\n              eventId: planStamp.eventId,\n              provider: PROVIDER,\n              createdAt: planStamp.createdAt,\n              threadId: context.session.threadId,\n              ...(context.turnState\n                ? {\n                    turnId: asCanonicalTurnId(context.turnState.turnId),\n                  }\n                : {}),\n              payload: {\n                plan: planSteps,\n              },\n              providerRefs: nativeProviderRefs(context),\n            });\n          }\n        }\n      }\n      return;\n    }\n\n    if (event.type === \"content_block_start\") {\n      const { index, content_block: block } = event;\n      if (block.type === \"text\") {\n        yield* ensureAssistantTextBlock(context, index, {\n          fallbackText: extractContentBlockText(block),\n        });\n        return;\n      }\n      if (\n        block.type !== \"tool_use\" &&\n        block.type !== \"server_tool_use\" &&\n        block.type !== \"mcp_tool_use\"\n      ) {\n        return;\n      }\n\n      const toolName = block.name;\n      const itemType = classifyToolItemType(toolName);\n      const toolInput =\n        typeof block.input === \"object\" && block.input !== null\n          ? (block.input as Record<string, unknown>)\n          : {};\n      const itemId = block.id;\n      const detail = summarizeToolRequest(toolName, toolInput);\n      const inputFingerprint =\n        Object.keys(toolInput).length > 0 ? toolInputFingerprint(toolInput) : undefined;\n\n      const tool: ToolInFlight = {\n        itemId,\n        itemType,\n        toolName,\n        title: titleForTool(itemType),\n        detail,\n        input: toolInput,\n        partialInputJson: \"\",\n        ...(inputFingerprint ? { lastEmittedInputFingerprint: inputFingerprint } : {}),\n      };\n      context.inFlightTools.set(index, tool);\n\n      const stamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"item.started\",\n        eventId: stamp.eventId,\n        provider: PROVIDER,\n        createdAt: stamp.createdAt,\n        threadId: context.session.threadId,\n        ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n        itemId: asRuntimeItemId(tool.itemId),\n        payload: {\n          itemType: tool.itemType,\n          status: \"inProgress\",\n          title: tool.title,\n          ...(tool.detail ? { detail: tool.detail } : {}),\n          data: {\n            toolName: tool.toolName,\n            input: toolInput,\n          },\n        },\n        providerRefs: nativeProviderRefs(context, {\n          providerItemId: tool.itemId,\n        }),\n        raw: {\n          source: \"claude.sdk.message\",\n          method: \"claude/stream_event/content_block_start\",\n          payload: message,\n        },\n      });\n\n      if (tool.itemType === \"collab_agent_tool_call\") {\n        const subagentStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"subagent.started\",\n          eventId: subagentStamp.eventId,\n          provider: PROVIDER,\n          createdAt: subagentStamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n          itemId: asRuntimeItemId(tool.itemId),\n          payload: {\n            ...claudeSubagentCommonPayload(tool),\n            status: \"running\",\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: tool.itemId,\n          }),\n          raw: {\n            source: \"claude.sdk.message\",\n            method: \"claude/stream_event/content_block_start\",\n            payload: message,\n          },\n        });\n      }\n      return;\n    }\n\n    if (event.type === \"content_block_stop\") {\n      const { index } = event;\n      const assistantBlock = context.turnState?.assistantTextBlocks.get(index);\n      if (assistantBlock) {\n        assistantBlock.streamClosed = true;\n        yield* completeAssistantTextBlock(context, assistantBlock, {\n          rawMethod: \"claude/stream_event/content_block_stop\",\n          rawPayload: message,\n        });\n        return;\n      }\n      const tool = context.inFlightTools.get(index);\n      if (!tool) {\n        return;\n      }\n    }\n  });\n\n  const handleUserMessage = Effect.fn(\"handleUserMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (message.type !== \"user\") {\n      return;\n    }\n\n    if (context.turnState) {\n      context.turnState.items.push(message.message);\n    }\n\n    for (const toolResult of toolResultBlocksFromUserMessage(message)) {\n      const toolEntry = Array.from(context.inFlightTools.entries()).find(\n        ([, tool]) => tool.itemId === toolResult.toolUseId,\n      );\n      if (!toolEntry) {\n        continue;\n      }\n\n      const [index, tool] = toolEntry;\n      const itemStatus = toolResult.isError ? \"failed\" : \"completed\";\n      const toolUseResult = readClaudeToolUseResult(message);\n      const toolData = {\n        toolName: tool.toolName,\n        input: tool.input,\n        result: toolResult.block,\n      };\n\n      const updatedStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"item.updated\",\n        eventId: updatedStamp.eventId,\n        provider: PROVIDER,\n        createdAt: updatedStamp.createdAt,\n        threadId: context.session.threadId,\n        ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n        itemId: asRuntimeItemId(tool.itemId),\n        payload: {\n          itemType: tool.itemType,\n          status: toolResult.isError ? \"failed\" : \"inProgress\",\n          title: tool.title,\n          ...(tool.detail ? { detail: tool.detail } : {}),\n          data: toolData,\n        },\n        providerRefs: nativeProviderRefs(context, {\n          providerItemId: tool.itemId,\n        }),\n        raw: {\n          source: \"claude.sdk.message\",\n          method: \"claude/user\",\n          payload: message,\n        },\n      });\n\n      const streamKind = toolResultStreamKind(tool.itemType);\n      if (streamKind && toolResult.text.length > 0 && context.turnState) {\n        const deltaStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"content.delta\",\n          eventId: deltaStamp.eventId,\n          provider: PROVIDER,\n          createdAt: deltaStamp.createdAt,\n          threadId: context.session.threadId,\n          turnId: context.turnState.turnId,\n          itemId: asRuntimeItemId(tool.itemId),\n          payload: {\n            streamKind,\n            delta: toolResult.text,\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: tool.itemId,\n          }),\n          raw: {\n            source: \"claude.sdk.message\",\n            method: \"claude/user\",\n            payload: message,\n          },\n        });\n      }\n\n      const completedStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"item.completed\",\n        eventId: completedStamp.eventId,\n        provider: PROVIDER,\n        createdAt: completedStamp.createdAt,\n        threadId: context.session.threadId,\n        ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n        itemId: asRuntimeItemId(tool.itemId),\n        payload: {\n          itemType: tool.itemType,\n          status: itemStatus,\n          title: tool.title,\n          ...(tool.detail ? { detail: tool.detail } : {}),\n          data: toolData,\n        },\n        providerRefs: nativeProviderRefs(context, {\n          providerItemId: tool.itemId,\n        }),\n        raw: {\n          source: \"claude.sdk.message\",\n          method: \"claude/user\",\n          payload: message,\n        },\n      });\n\n      if (tool.itemType === \"collab_agent_tool_call\") {\n        const resultSummary = readString(toolResult.text)?.slice(0, 500);\n        const subagentStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"subagent.completed\",\n          eventId: subagentStamp.eventId,\n          provider: PROVIDER,\n          createdAt: subagentStamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n          itemId: asRuntimeItemId(tool.itemId),\n          payload: {\n            ...claudeSubagentCommonPayload(tool),\n            status: claudeSubagentCompletionStatus(itemStatus),\n            ...(resultSummary ? { summary: resultSummary } : {}),\n            ...(toolResult.isError && resultSummary ? { error: resultSummary } : {}),\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: tool.itemId,\n          }),\n          raw: {\n            source: \"claude.sdk.message\",\n            method: \"claude/user\",\n            payload: message,\n          },\n        });\n      }\n\n      if (\n        !toolResult.isError &&\n        applyClaudeTaskToolResult(context.claudeTasks, tool, toolUseResult)\n      ) {\n        yield* emitClaudeTaskPlanUpdated(context, {\n          toolUseId: tool.itemId,\n          rawMethod: \"claude/user\",\n          rawPayload: message,\n        });\n      }\n\n      context.inFlightTools.delete(index);\n    }\n  });\n\n  const handleAssistantMessage = Effect.fn(\"handleAssistantMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (message.type !== \"assistant\") {\n      return;\n    }\n\n    // Auto-start a synthetic turn for assistant messages that arrive without\n    // an active turn (e.g., background agent/subagent responses between user prompts).\n    if (!context.turnState) {\n      const turnId = TurnId.make(yield* randomUUIDv4);\n      const startedAt = yield* nowIso;\n      context.turnState = {\n        turnId,\n        startedAt,\n        synthetic: true,\n        items: [],\n        assistantTextBlocks: new Map(),\n        assistantTextBlockOrder: [],\n        capturedProposedPlanKeys: new Set(),\n        nextSyntheticAssistantBlockIndex: -1,\n      };\n      context.session = {\n        ...context.session,\n        status: \"running\",\n        activeTurnId: turnId,\n        updatedAt: startedAt,\n      };\n      const turnStartedStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"turn.started\",\n        eventId: turnStartedStamp.eventId,\n        provider: PROVIDER,\n        createdAt: turnStartedStamp.createdAt,\n        threadId: context.session.threadId,\n        turnId,\n        payload: {},\n        providerRefs: {\n          ...nativeProviderRefs(context),\n          providerTurnId: turnId,\n        },\n        raw: {\n          source: \"claude.sdk.message\",\n          method: \"claude/synthetic-turn-start\",\n          payload: {},\n        },\n      });\n    }\n\n    const content = message.message?.content;\n    if (Array.isArray(content)) {\n      for (const block of content) {\n        if (!block || typeof block !== \"object\") {\n          continue;\n        }\n        const toolUse = block as {\n          type?: unknown;\n          id?: unknown;\n          name?: unknown;\n          input?: unknown;\n        };\n        if (toolUse.type !== \"tool_use\" || toolUse.name !== \"ExitPlanMode\") {\n          continue;\n        }\n        const planMarkdown = extractExitPlanModePlan(toolUse.input);\n        if (!planMarkdown) {\n          continue;\n        }\n        yield* emitProposedPlanCompleted(context, {\n          planMarkdown,\n          toolUseId: typeof toolUse.id === \"string\" ? toolUse.id : undefined,\n          rawSource: \"claude.sdk.message\",\n          rawMethod: \"claude/assistant\",\n          rawPayload: message,\n        });\n      }\n    }\n\n    if (context.turnState) {\n      context.turnState.items.push(message.message);\n      yield* backfillAssistantTextBlocksFromSnapshot(context, message);\n    }\n\n    context.lastAssistantUuid = message.uuid;\n    yield* updateResumeCursor(context);\n  });\n\n  const handleResultMessage = Effect.fn(\"handleResultMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (message.type !== \"result\") {\n      return;\n    }\n\n    if (context.terminalTurnFailure !== undefined) {\n      const terminalTurnFailure = context.terminalTurnFailure;\n      context.terminalTurnFailure = undefined;\n      yield* completeTurn(context, \"failed\", terminalTurnFailure, message);\n      return;\n    }\n\n    const status = turnStatusFromResult(message);\n    const errorMessage = resultUserFacingError(message);\n\n    if (status === \"failed\") {\n      yield* emitRuntimeError(context, errorMessage ?? \"Claude turn failed.\");\n    }\n\n    yield* completeTurn(context, status, errorMessage, message);\n  });\n\n  const handleSystemMessage = Effect.fn(\"handleSystemMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    if (message.type !== \"system\") {\n      return;\n    }\n\n    const stamp = yield* makeEventStamp();\n    const base = {\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      providerRefs: nativeProviderRefs(context),\n      raw: {\n        source: \"claude.sdk.message\" as const,\n        method: sdkNativeMethod(message),\n        messageType: `${message.type}:${message.subtype}`,\n        payload: message,\n      },\n    };\n\n    if ((message as { readonly subtype: string }).subtype === \"thinking_tokens\") {\n      return;\n    }\n\n    switch (message.subtype) {\n      case \"init\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"session.configured\",\n          payload: {\n            config: message as Record<string, unknown>,\n          },\n        });\n        return;\n      case \"status\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"session.state.changed\",\n          payload: {\n            state: message.status === \"compacting\" ? \"waiting\" : \"running\",\n            reason: `status:${message.status ?? \"active\"}`,\n            detail: message,\n          },\n        });\n        return;\n      case \"api_retry\":\n        if (message.error === \"authentication_failed\") {\n          if (context.terminalTurnFailure !== undefined) {\n            return;\n          }\n          context.terminalTurnFailure = CLAUDE_AUTH_FAILURE_MESSAGE;\n          yield* emitRuntimeError(context, CLAUDE_AUTH_FAILURE_MESSAGE, message);\n          yield* Effect.tryPromise({\n            try: () => context.query.interrupt(),\n            catch: (cause) =>\n              toProcessError(\n                cause,\n                \"Failed to interrupt Claude after an authentication failure.\",\n                context.session.threadId,\n              ),\n          }).pipe(\n            Effect.timeoutOption(CLAUDE_INTERRUPT_TIMEOUT),\n            Effect.flatMap(\n              Option.match({\n                onNone: () =>\n                  Effect.fail(\n                    new ProviderAdapterProcessError({\n                      provider: PROVIDER,\n                      threadId: context.session.threadId,\n                      detail: \"Timed out interrupting Claude after an authentication failure.\",\n                    }),\n                  ),\n                onSome: () => Effect.void,\n              }),\n            ),\n          );\n          return;\n        }\n        yield* emitRuntimeWarning(\n          context,\n          `Claude API request failed (${message.error}); retrying attempt ${message.attempt} of ${message.max_retries}.`,\n          message,\n        );\n        return;\n      case \"compact_boundary\":\n        yield* emitThreadTokenUsage(\n          context,\n          compactBoundaryTokenUsageSnapshot(\n            message as unknown as Record<string, unknown>,\n            context.lastKnownContextWindow,\n            context.lastKnownTotalProcessedTokens,\n          ),\n          {\n            rawMethod: \"claude/system/compact_boundary\",\n            rawPayload: message,\n          },\n        );\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"thread.state.changed\",\n          payload: {\n            state: \"compacted\",\n            detail: message,\n          },\n        });\n        return;\n      case \"hook_started\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"hook.started\",\n          payload: {\n            hookId: message.hook_id,\n            hookName: message.hook_name,\n            hookEvent: message.hook_event,\n          },\n        });\n        return;\n      case \"hook_progress\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"hook.progress\",\n          payload: {\n            hookId: message.hook_id,\n            output: message.output,\n            stdout: message.stdout,\n            stderr: message.stderr,\n          },\n        });\n        return;\n      case \"hook_response\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"hook.completed\",\n          payload: {\n            hookId: message.hook_id,\n            outcome: message.outcome,\n            output: message.output,\n            stdout: message.stdout,\n            stderr: message.stderr,\n            ...(typeof message.exit_code === \"number\" ? { exitCode: message.exit_code } : {}),\n          },\n        });\n        return;\n      case \"task_started\":\n        context.liveBackgroundTasks.set(message.task_id, {\n          ...(message.description ? { description: message.description } : {}),\n          ...(message.task_type ? { taskType: message.task_type } : {}),\n        });\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"task.started\",\n          payload: {\n            taskId: RuntimeTaskId.make(message.task_id),\n            description: message.description,\n            ...(message.task_type ? { taskType: message.task_type } : {}),\n          },\n        });\n        {\n          const subagentStamp = yield* makeEventStamp();\n          yield* offerRuntimeEvent({\n            ...base,\n            eventId: subagentStamp.eventId,\n            createdAt: subagentStamp.createdAt,\n            type: \"subagent.started\",\n            payload: {\n              subagentId: asRuntimeSubagentId(message.task_id),\n              status: \"running\",\n              ...(message.description ? { summary: message.description } : {}),\n              ...(message.task_type ? { role: message.task_type } : {}),\n            },\n          });\n        }\n        return;\n      case \"task_progress\":\n        yield* emitThreadTokenUsage(\n          context,\n          normalizeClaudeTaskProgressTokenUsage(message.usage, context),\n          {\n            rawMethod: \"claude/system/task_progress\",\n            rawPayload: message,\n          },\n        );\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"task.progress\",\n          payload: {\n            taskId: RuntimeTaskId.make(message.task_id),\n            description: message.description,\n            ...(message.summary ? { summary: message.summary } : {}),\n            ...(message.usage ? { usage: message.usage } : {}),\n            ...(message.last_tool_name ? { lastToolName: message.last_tool_name } : {}),\n          },\n        });\n        {\n          const subagentStamp = yield* makeEventStamp();\n          yield* offerRuntimeEvent({\n            ...base,\n            eventId: subagentStamp.eventId,\n            createdAt: subagentStamp.createdAt,\n            type: \"subagent.updated\",\n            payload: {\n              subagentId: asRuntimeSubagentId(message.task_id),\n              status: \"running\",\n              description: message.description,\n              ...(message.summary ? { summary: message.summary } : {}),\n              ...(message.usage ? { usage: message.usage } : {}),\n              ...(message.last_tool_name ? { lastToolName: message.last_tool_name } : {}),\n            },\n          });\n        }\n        return;\n      case \"task_notification\":\n        context.liveBackgroundTasks.delete(message.task_id);\n        yield* emitThreadTokenUsage(\n          context,\n          normalizeClaudeTaskProgressTokenUsage(message.usage, context),\n          {\n            rawMethod: \"claude/system/task_notification\",\n            rawPayload: message,\n          },\n        );\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"task.completed\",\n          payload: {\n            taskId: RuntimeTaskId.make(message.task_id),\n            status: message.status,\n            ...(message.summary ? { summary: message.summary } : {}),\n            ...(message.usage ? { usage: message.usage } : {}),\n          },\n        });\n        {\n          const subagentStamp = yield* makeEventStamp();\n          yield* offerRuntimeEvent({\n            ...base,\n            eventId: subagentStamp.eventId,\n            createdAt: subagentStamp.createdAt,\n            type: \"subagent.completed\",\n            payload: {\n              subagentId: asRuntimeSubagentId(message.task_id),\n              status: claudeSubagentCompletionStatusFromTaskStatus(message.status),\n              ...(message.summary ? { summary: message.summary } : {}),\n              ...(message.usage ? { usage: message.usage } : {}),\n            },\n          });\n        }\n        return;\n      case \"files_persisted\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"files.persisted\",\n          payload: {\n            files: Array.isArray(message.files)\n              ? message.files.map((file: { filename: string; file_id: string }) => ({\n                  filename: file.filename,\n                  fileId: file.file_id,\n                }))\n              : [],\n            ...(Array.isArray(message.failed)\n              ? {\n                  failed: message.failed.map((entry: { filename: string; error: string }) => ({\n                    filename: entry.filename,\n                    error: entry.error,\n                  })),\n                }\n              : {}),\n          },\n        });\n        return;\n      case \"permission_denied\":\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"tool.denied\",\n          payload: {\n            toolName: message.tool_name,\n            ...(message.tool_use_id ? { toolUseId: message.tool_use_id } : {}),\n            ...(message.decision_reason ? { reason: message.decision_reason } : {}),\n            ...(message.agent_id ? { agentId: message.agent_id } : {}),\n          },\n        });\n        return;\n      case \"mirror_error\":\n        yield* emitRuntimeError(\n          context,\n          `Claude workspace mirror error: ${message.error}`,\n          message,\n        );\n        return;\n      default:\n        yield* emitRuntimeWarning(\n          context,\n          `Unhandled Claude system message subtype '${message.subtype}'.`,\n          message,\n        );\n        return;\n    }\n  });\n\n  const handleSdkTelemetryMessage = Effect.fn(\"handleSdkTelemetryMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    const stamp = yield* makeEventStamp();\n    const base = {\n      eventId: stamp.eventId,\n      provider: PROVIDER,\n      createdAt: stamp.createdAt,\n      threadId: context.session.threadId,\n      ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n      providerRefs: nativeProviderRefs(context),\n      raw: {\n        source: \"claude.sdk.message\" as const,\n        method: sdkNativeMethod(message),\n        messageType: message.type,\n        payload: message,\n      },\n    };\n\n    if (message.type === \"tool_progress\") {\n      yield* offerRuntimeEvent({\n        ...base,\n        type: \"tool.progress\",\n        payload: {\n          toolUseId: message.tool_use_id,\n          toolName: message.tool_name,\n          elapsedSeconds: message.elapsed_time_seconds,\n          ...(message.task_id ? { summary: `task:${message.task_id}` } : {}),\n        },\n      });\n      return;\n    }\n\n    if (message.type === \"tool_use_summary\") {\n      yield* offerRuntimeEvent({\n        ...base,\n        type: \"tool.summary\",\n        payload: {\n          summary: message.summary,\n          ...(message.preceding_tool_use_ids.length > 0\n            ? {\n                precedingToolUseIds: message.preceding_tool_use_ids,\n              }\n            : {}),\n        },\n      });\n      return;\n    }\n\n    if (message.type === \"auth_status\") {\n      yield* offerRuntimeEvent({\n        ...base,\n        type: \"auth.status\",\n        payload: {\n          isAuthenticating: message.isAuthenticating,\n          output: message.output,\n          ...(message.error ? { error: message.error } : {}),\n        },\n      });\n      return;\n    }\n\n    if (message.type === \"rate_limit_event\") {\n      const nowMs = yield* Clock.currentTimeMillis;\n      if (isFreshClaudeRateLimitEvent(message, nowMs)) {\n        context.lastKnownRateLimits = message;\n        yield* offerRuntimeEvent({\n          ...base,\n          type: \"account.rate-limits.updated\",\n          payload: {\n            rateLimits: message,\n          },\n        });\n      } else if (context.lastKnownRateLimits === message) {\n        context.lastKnownRateLimits = undefined;\n      }\n      return;\n    }\n  });\n\n  const handleSdkMessage = Effect.fn(\"handleSdkMessage\")(function* (\n    context: ClaudeSessionContext,\n    message: SDKMessage,\n  ) {\n    yield* logNativeSdkMessage(context, message);\n    yield* ensureThreadId(context, message);\n\n    switch (message.type) {\n      case \"stream_event\":\n        yield* handleStreamEvent(context, message);\n        return;\n      case \"user\":\n        yield* handleUserMessage(context, message);\n        return;\n      case \"assistant\":\n        yield* handleAssistantMessage(context, message);\n        return;\n      case \"result\":\n        yield* handleResultMessage(context, message);\n        yield* refreshClaudeStatuslineUsageBestEffort(context);\n        return;\n      case \"system\":\n        yield* handleSystemMessage(context, message);\n        return;\n      case \"tool_progress\":\n      case \"tool_use_summary\":\n      case \"auth_status\":\n      case \"rate_limit_event\":\n        yield* handleSdkTelemetryMessage(context, message);\n        return;\n      default:\n        yield* emitRuntimeWarning(\n          context,\n          `Unhandled Claude SDK message type '${message.type}'.`,\n          message,\n        );\n        return;\n    }\n  });\n\n  const runSdkStream = (\n    context: ClaudeSessionContext,\n  ): Effect.Effect<void, ProviderAdapterProcessError> =>\n    Stream.fromAsyncIterable(context.query, (cause) =>\n      toProcessError(cause, \"Claude runtime stream failed.\", context.session.threadId),\n    ).pipe(\n      Stream.takeWhile(() => !context.stopped),\n      Stream.runForEach((message) =>\n        handleSdkMessage(context, message).pipe(\n          Effect.mapError((cause) =>\n            toProcessError(\n              cause,\n              \"Failed to process Claude runtime event.\",\n              context.session.threadId,\n            ),\n          ),\n        ),\n      ),\n    );\n\n  const handleStreamExit = Effect.fn(\"handleStreamExit\")(function* (\n    context: ClaudeSessionContext,\n    exit: Exit.Exit<void, ProviderAdapterProcessError>,\n  ) {\n    if (context.stopped) {\n      return;\n    }\n\n    if (context.terminalTurnFailure !== undefined) {\n      const terminalTurnFailure = context.terminalTurnFailure;\n      context.terminalTurnFailure = undefined;\n      if (context.turnState) {\n        yield* completeTurn(context, \"failed\", terminalTurnFailure);\n      }\n    } else if (Exit.isFailure(exit)) {\n      if (isClaudeInterruptedCause(exit.cause)) {\n        if (context.turnState) {\n          yield* completeTurn(\n            context,\n            \"interrupted\",\n            interruptionMessageFromClaudeCause(exit.cause),\n          );\n        }\n      } else {\n        const message = messageFromClaudeStreamCause(exit.cause, \"Claude runtime stream failed.\");\n        yield* emitRuntimeError(context, message, Cause.pretty(exit.cause));\n        yield* completeTurn(context, \"failed\", message);\n      }\n    } else if (context.turnState) {\n      yield* completeTurn(context, \"interrupted\", \"Claude runtime stream ended.\");\n    }\n\n    yield* stopSessionInternal(context, {\n      emitExitEvent: true,\n    });\n  });\n\n  const stopSessionInternal = Effect.fn(\"stopSessionInternal\")(function* (\n    context: ClaudeSessionContext,\n    options?: { readonly emitExitEvent?: boolean },\n  ) {\n    if (context.stopped) return;\n\n    context.stopped = true;\n\n    for (const [requestId, pending] of context.pendingApprovals) {\n      yield* Deferred.succeed(pending.decision, \"cancel\");\n      const stamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"request.resolved\",\n        eventId: stamp.eventId,\n        provider: PROVIDER,\n        createdAt: stamp.createdAt,\n        threadId: context.session.threadId,\n        ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n        requestId: asRuntimeRequestId(requestId),\n        payload: {\n          requestType: pending.requestType,\n          decision: \"cancel\",\n        },\n        providerRefs: nativeProviderRefs(context),\n      });\n    }\n    context.pendingApprovals.clear();\n\n    if (context.turnState) {\n      yield* completeTurn(context, \"interrupted\", \"Session stopped.\");\n    }\n\n    yield* Queue.shutdown(context.promptQueue);\n\n    const streamFiber = context.streamFiber;\n    context.streamFiber = undefined;\n    if (streamFiber && streamFiber.pollUnsafe() === undefined) {\n      yield* Fiber.interrupt(streamFiber);\n    }\n\n    const usageRefreshFiber = context.usageRefreshFiber;\n    context.usageRefreshFiber = undefined;\n    if (usageRefreshFiber && usageRefreshFiber.pollUnsafe() === undefined) {\n      yield* Fiber.interrupt(usageRefreshFiber);\n    }\n\n    yield* Effect.try({\n      try: () => context.query.close(),\n      catch: (cause) =>\n        new ProviderAdapterProcessError({\n          provider: PROVIDER,\n          threadId: context.session.threadId,\n          detail: toMessage(cause, \"Failed to close Claude runtime query.\"),\n          cause,\n        }),\n    }).pipe(\n      Effect.catch((cause) =>\n        emitRuntimeError(context, \"Failed to close Claude runtime query.\", cause),\n      ),\n    );\n\n    const updatedAt = yield* nowIso;\n    context.session = {\n      ...context.session,\n      status: \"closed\",\n      activeTurnId: undefined,\n      updatedAt,\n    };\n\n    if (options?.emitExitEvent !== false) {\n      const stamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"session.exited\",\n        eventId: stamp.eventId,\n        provider: PROVIDER,\n        createdAt: stamp.createdAt,\n        threadId: context.session.threadId,\n        payload: {\n          reason: \"Session stopped\",\n          exitKind: \"graceful\",\n        },\n        providerRefs: {},\n      });\n    }\n\n    sessions.delete(context.session.threadId);\n  });\n\n  const requireSession = (\n    threadId: ThreadId,\n  ): Effect.Effect<ClaudeSessionContext, ProviderAdapterError> => {\n    const context = sessions.get(threadId);\n    if (!context) {\n      return Effect.fail(\n        new ProviderAdapterSessionNotFoundError({\n          provider: PROVIDER,\n          threadId,\n        }),\n      );\n    }\n    if (context.stopped || context.session.status === \"closed\") {\n      return Effect.fail(\n        new ProviderAdapterSessionClosedError({\n          provider: PROVIDER,\n          threadId,\n        }),\n      );\n    }\n    return Effect.succeed(context);\n  };\n\n  const startSession: ClaudeAdapterShape[\"startSession\"] = Effect.fn(\"startSession\")(\n    function* (input) {\n      if (input.provider !== undefined && input.provider !== PROVIDER) {\n        return yield* new ProviderAdapterValidationError({\n          provider: PROVIDER,\n          operation: \"startSession\",\n          issue: `Expected provider '${PROVIDER}' but received '${input.provider}'.`,\n        });\n      }\n\n      const existingContext = sessions.get(input.threadId);\n      if (existingContext) {\n        yield* Effect.logWarning(\"claude.session.replacing\", {\n          threadId: input.threadId,\n          existingSessionStatus: existingContext.session.status,\n          reason: \"startSession called with existing active session\",\n        });\n        yield* stopSessionInternal(existingContext, {\n          emitExitEvent: false,\n        }).pipe(\n          // Replacement cleanup is best-effort: never block the new session on\n          // either typed failures or unexpected defects from tearing down the old one.\n          Effect.catchCause((cause) =>\n            Effect.logWarning(\"claude.session.replace.stop-failed\", {\n              threadId: input.threadId,\n              cause,\n            }),\n          ),\n        );\n      }\n\n      const startedAt = yield* nowIso;\n      const resumeState = readClaudeResumeState(input.resumeCursor);\n      const threadId = input.threadId;\n      const statuslineCapturePath = claudeStatuslineUsageEnabled\n        ? path.join(claudeStatuslineCaptureDir, `${safeFileComponent(threadId)}.json`)\n        : undefined;\n      if (statuslineCapturePath) {\n        yield* fileSystem\n          .makeDirectory(path.dirname(statuslineCapturePath), {\n            recursive: true,\n          })\n          .pipe(\n            Effect.mapError(\n              (cause) =>\n                new ProviderAdapterProcessError({\n                  provider: PROVIDER,\n                  threadId,\n                  detail: toMessage(\n                    cause,\n                    \"Failed to prepare Claude statusline capture directory.\",\n                  ),\n                  cause,\n                }),\n            ),\n          );\n      }\n      const existingResumeSessionId = resumeState?.resume;\n      const newSessionId = existingResumeSessionId === undefined ? yield* randomUUIDv4 : undefined;\n      const sessionId = existingResumeSessionId ?? newSessionId;\n\n      const runtimeContext = yield* Effect.context<never>();\n      const runFork = Effect.runForkWith(runtimeContext);\n      const runPromise = Effect.runPromiseWith(runtimeContext);\n\n      const promptQueue = yield* Queue.unbounded<PromptQueueItem>();\n      const prompt = Stream.fromQueue(promptQueue).pipe(\n        Stream.filter((item) => item.type === \"message\"),\n        Stream.map((item) => item.message),\n        Stream.catchCause((cause) =>\n          Cause.hasInterruptsOnly(cause) ? Stream.empty : Stream.failCause(cause),\n        ),\n        Stream.toAsyncIterable,\n      );\n\n      const pendingApprovals = new Map<ApprovalRequestId, PendingApproval>();\n      const pendingUserInputs = new Map<ApprovalRequestId, PendingUserInput>();\n      const inFlightTools = new Map<number, ToolInFlight>();\n      const claudeTasks = new Map<string, ClaudeTaskState>();\n      const liveBackgroundTasks = new Map<string, ClaudeBackgroundTask>();\n\n      const contextRef = yield* Ref.make<ClaudeSessionContext | undefined>(undefined);\n\n      /**\n       * Handle AskUserQuestion tool calls by emitting a `user-input.requested`\n       * runtime event and waiting for the user to respond via `respondToUserInput`.\n       */\n      const handleAskUserQuestion = Effect.fn(\"handleAskUserQuestion\")(function* (\n        context: ClaudeSessionContext,\n        toolInput: Record<string, unknown>,\n        callbackOptions: {\n          readonly signal: AbortSignal;\n          readonly toolUseID?: string;\n        },\n      ) {\n        const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n\n        // Parse questions from the SDK's AskUserQuestion input.\n        // `id` MUST equal the full question text — Claude SDK >= 2.1.121 looks\n        // up answers by question text in `mapToolResultToToolResultBlockParam`,\n        // so the key the UI uses to keep its draft answer must match the SDK's\n        // expected lookup key. See https://github.com/JoseRFelix/salchi/issues/2388\n        const rawQuestions = Array.isArray(toolInput.questions) ? toolInput.questions : [];\n        const questions: Array<UserInputQuestion> = rawQuestions.map(\n          (q: Record<string, unknown>, idx: number) => ({\n            id: typeof q.question === \"string\" && q.question.length > 0 ? q.question : `q-${idx}`,\n            header: typeof q.header === \"string\" ? q.header : `Question ${idx + 1}`,\n            question: typeof q.question === \"string\" ? q.question : \"\",\n            options: Array.isArray(q.options)\n              ? q.options.map((opt: Record<string, unknown>) => ({\n                  label: typeof opt.label === \"string\" ? opt.label : \"\",\n                  description: typeof opt.description === \"string\" ? opt.description : \"\",\n                }))\n              : [],\n            multiSelect: typeof q.multiSelect === \"boolean\" ? q.multiSelect : false,\n          }),\n        );\n\n        const answersDeferred = yield* Deferred.make<ProviderUserInputAnswers>();\n        let aborted = false;\n        const pendingInput: PendingUserInput = {\n          questions,\n          answers: answersDeferred,\n        };\n\n        // Emit user-input.requested so the UI can present the questions.\n        const requestedStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"user-input.requested\",\n          eventId: requestedStamp.eventId,\n          provider: PROVIDER,\n          createdAt: requestedStamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState\n            ? {\n                turnId: asCanonicalTurnId(context.turnState.turnId),\n              }\n            : {}),\n          requestId: asRuntimeRequestId(requestId),\n          payload: { questions },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: callbackOptions.toolUseID,\n          }),\n          raw: {\n            source: \"claude.sdk.permission\",\n            method: \"canUseTool/AskUserQuestion\",\n            payload: {\n              toolName: \"AskUserQuestion\",\n              input: toolInput,\n            },\n          },\n        });\n\n        pendingUserInputs.set(requestId, pendingInput);\n\n        // Handle abort (e.g. turn interrupted while waiting for user input).\n        const onAbort = () => {\n          if (!pendingUserInputs.has(requestId)) {\n            return;\n          }\n          aborted = true;\n          pendingUserInputs.delete(requestId);\n          runFork(Deferred.succeed(answersDeferred, {} as ProviderUserInputAnswers));\n        };\n        callbackOptions.signal.addEventListener(\"abort\", onAbort, {\n          once: true,\n        });\n\n        // Block until the user provides answers.\n        const answers = yield* Deferred.await(answersDeferred);\n        pendingUserInputs.delete(requestId);\n\n        // Emit user-input.resolved so the UI knows the interaction completed.\n        const resolvedStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"user-input.resolved\",\n          eventId: resolvedStamp.eventId,\n          provider: PROVIDER,\n          createdAt: resolvedStamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState\n            ? {\n                turnId: asCanonicalTurnId(context.turnState.turnId),\n              }\n            : {}),\n          requestId: asRuntimeRequestId(requestId),\n          payload: { answers },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: callbackOptions.toolUseID,\n          }),\n          raw: {\n            source: \"claude.sdk.permission\",\n            method: \"canUseTool/AskUserQuestion/resolved\",\n            payload: { answers },\n          },\n        });\n\n        if (aborted) {\n          return {\n            behavior: \"deny\",\n            message: \"User cancelled tool execution.\",\n          } satisfies PermissionResult;\n        }\n\n        // Return the answers to the SDK in the expected format:\n        // { questions: [...], answers: { questionText: selectedLabel } }\n        return {\n          behavior: \"allow\",\n          updatedInput: {\n            questions: toolInput.questions,\n            answers,\n          },\n        } satisfies PermissionResult;\n      });\n\n      const canUseToolEffect = Effect.fn(\"canUseTool\")(function* (\n        toolName: Parameters<CanUseTool>[0],\n        toolInput: Parameters<CanUseTool>[1],\n        callbackOptions: Parameters<CanUseTool>[2],\n      ) {\n        const context = yield* Ref.get(contextRef);\n        if (!context) {\n          return {\n            behavior: \"deny\",\n            message: \"Claude session context is unavailable.\",\n          } satisfies PermissionResult;\n        }\n\n        // Handle AskUserQuestion: surface clarifying questions to the\n        // user via the user-input runtime event channel, regardless of\n        // runtime mode (plan mode relies on this heavily).\n        if (toolName === \"AskUserQuestion\") {\n          return yield* handleAskUserQuestion(context, toolInput, callbackOptions);\n        }\n\n        if (toolName === \"ExitPlanMode\") {\n          const planMarkdown = extractExitPlanModePlan(toolInput);\n          if (planMarkdown) {\n            yield* emitProposedPlanCompleted(context, {\n              planMarkdown,\n              toolUseId: callbackOptions.toolUseID,\n              rawSource: \"claude.sdk.permission\",\n              rawMethod: \"canUseTool/ExitPlanMode\",\n              rawPayload: {\n                toolName,\n                input: toolInput,\n              },\n            });\n          }\n\n          return {\n            behavior: \"deny\",\n            message:\n              \"The client captured your proposed plan. Stop here and wait for the user's feedback or implementation request in a later turn.\",\n          } satisfies PermissionResult;\n        }\n\n        const runtimeMode = input.runtimeMode ?? \"full-access\";\n        if (runtimeMode === \"full-access\") {\n          return {\n            behavior: \"allow\",\n            updatedInput: toolInput,\n          } satisfies PermissionResult;\n        }\n\n        const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n        const requestType = classifyRequestType(toolName);\n        const detail = summarizeToolRequest(toolName, toolInput);\n        const decisionDeferred = yield* Deferred.make<ProviderApprovalDecision>();\n        const pendingApproval: PendingApproval = {\n          requestType,\n          detail,\n          decision: decisionDeferred,\n          ...(callbackOptions.suggestions ? { suggestions: callbackOptions.suggestions } : {}),\n        };\n\n        const requestedStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"request.opened\",\n          eventId: requestedStamp.eventId,\n          provider: PROVIDER,\n          createdAt: requestedStamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n          requestId: asRuntimeRequestId(requestId),\n          payload: {\n            requestType,\n            detail,\n            args: {\n              toolName,\n              input: toolInput,\n              ...(callbackOptions.toolUseID ? { toolUseId: callbackOptions.toolUseID } : {}),\n            },\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: callbackOptions.toolUseID,\n          }),\n          raw: {\n            source: \"claude.sdk.permission\",\n            method: \"canUseTool/request\",\n            payload: {\n              toolName,\n              input: toolInput,\n            },\n          },\n        });\n\n        pendingApprovals.set(requestId, pendingApproval);\n\n        const onAbort = () => {\n          if (!pendingApprovals.has(requestId)) {\n            return;\n          }\n          pendingApprovals.delete(requestId);\n          runFork(Deferred.succeed(decisionDeferred, \"cancel\"));\n        };\n\n        callbackOptions.signal.addEventListener(\"abort\", onAbort, {\n          once: true,\n        });\n\n        const decision = yield* Deferred.await(decisionDeferred);\n        pendingApprovals.delete(requestId);\n\n        const resolvedStamp = yield* makeEventStamp();\n        yield* offerRuntimeEvent({\n          type: \"request.resolved\",\n          eventId: resolvedStamp.eventId,\n          provider: PROVIDER,\n          createdAt: resolvedStamp.createdAt,\n          threadId: context.session.threadId,\n          ...(context.turnState ? { turnId: asCanonicalTurnId(context.turnState.turnId) } : {}),\n          requestId: asRuntimeRequestId(requestId),\n          payload: {\n            requestType,\n            decision,\n          },\n          providerRefs: nativeProviderRefs(context, {\n            providerItemId: callbackOptions.toolUseID,\n          }),\n          raw: {\n            source: \"claude.sdk.permission\",\n            method: \"canUseTool/decision\",\n            payload: {\n              decision,\n            },\n          },\n        });\n\n        if (decision === \"accept\" || decision === \"acceptForSession\") {\n          return {\n            behavior: \"allow\",\n            updatedInput: toolInput,\n            ...(decision === \"acceptForSession\" && pendingApproval.suggestions\n              ? {\n                  updatedPermissions: [...pendingApproval.suggestions],\n                }\n              : {}),\n          } satisfies PermissionResult;\n        }\n\n        return {\n          behavior: \"deny\",\n          message:\n            decision === \"cancel\"\n              ? \"User cancelled tool execution.\"\n              : \"User declined tool execution.\",\n        } satisfies PermissionResult;\n      });\n\n      const canUseTool: CanUseTool = (toolName, toolInput, callbackOptions) =>\n        runPromise(canUseToolEffect(toolName, toolInput, callbackOptions));\n\n      const claudeBinaryPath = claudeSettings.binaryPath;\n      const extraArgs = parseCliArgs(claudeSettings.launchArgs).flags;\n      const modelSelection =\n        input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection : undefined;\n      const caps = getClaudeModelCapabilities(modelSelection?.model);\n      const descriptors = getProviderOptionDescriptors({ caps });\n      const apiModelId = modelSelection ? resolveClaudeApiModelId(modelSelection) : undefined;\n      const initialContextWindow = selectedClaudeContextWindow(modelSelection);\n      const rawEffort = getModelSelectionStringOptionValue(modelSelection, \"effort\");\n      const effort = resolveClaudeEffort(caps, rawEffort) ?? null;\n      const fastModeSupported = descriptors.some(\n        (descriptor) => descriptor.type === \"boolean\" && descriptor.id === \"fastMode\",\n      );\n      const thinkingSupported = descriptors.some(\n        (descriptor) => descriptor.type === \"boolean\" && descriptor.id === \"thinking\",\n      );\n      const fastMode =\n        getModelSelectionBooleanOptionValue(modelSelection, \"fastMode\") === true &&\n        fastModeSupported;\n      const thinking = thinkingSupported\n        ? getModelSelectionBooleanOptionValue(modelSelection, \"thinking\")\n        : undefined;\n      const effectiveEffort = getEffectiveClaudeAgentEffort(effort);\n      const runtimeModeToPermission: Record<string, PermissionMode> = {\n        \"auto-accept-edits\": \"acceptEdits\",\n        \"full-access\": \"bypassPermissions\",\n      };\n      const permissionMode = runtimeModeToPermission[input.runtimeMode];\n      const settings = {\n        ...(typeof thinking === \"boolean\" ? { alwaysThinkingEnabled: thinking } : {}),\n        ...(fastMode ? { fastMode: true } : {}),\n        ...(statuslineCapturePath\n          ? {\n              statusLine: {\n                type: \"command\" as const,\n                command: claudeStatuslineCaptureCommand,\n              },\n            }\n          : {}),\n      };\n      const queryEnvironment = {\n        ...claudeEnvironment,\n        ...(statuslineCapturePath\n          ? { [CLAUDE_STATUSLINE_CAPTURE_ENV]: statuslineCapturePath }\n          : {}),\n      };\n      const additionalDirectories = Array.from(\n        new Set(\n          [input.cwd, serverConfig.attachmentsDir].filter((entry): entry is string =>\n            Boolean(entry),\n          ),\n        ),\n      );\n      const salchiMcpServer = createSdkMcpServer({\n        name: INDEPENDENT_THREAD_MCP_SERVER_NAME,\n        version: \"0.1.0\",\n        instructions: INDEPENDENT_THREAD_TOOL_MCP_INSTRUCTIONS,\n        alwaysLoad: true,\n        tools: [\n          tool(\n            INDEPENDENT_THREAD_TOOL_NAME,\n            INDEPENDENT_THREAD_TOOL_DESCRIPTION,\n            ClaudeIndependentThreadToolInputSchema,\n            async (args, extra) =>\n              runPromise(\n                Effect.gen(function* () {\n                  const context = yield* Ref.get(contextRef);\n                  if (!context) {\n                    return {\n                      isError: true,\n                      content: [\n                        {\n                          type: \"text\" as const,\n                          text: \"Claude session context is unavailable.\",\n                        },\n                      ],\n                    };\n                  }\n\n                  const stamp = yield* makeEventStamp();\n                  const toolUseId = readClaudeToolUseId(extra);\n                  const idPrefix = `claude-tool:${toolUseId ?? stamp.eventId}`;\n                  const result = createIndependentThreadToolRuntimeResult({\n                    argumentsValue: args,\n                    sourceThreadId: context.session.threadId,\n                    idPrefix,\n                    sourceItemId: idPrefix,\n                    ...(sessionId ? { providerThreadId: sessionId } : {}),\n                  });\n                  yield* offerRuntimeEvent(\n                    makeIndependentThreadCreatedRuntimeEvent({\n                      provider: PROVIDER,\n                      providerInstanceId: boundInstanceId,\n                      eventId: stamp.eventId,\n                      createdAt: stamp.createdAt,\n                      sourceThreadId: context.session.threadId,\n                      ...(context.turnState\n                        ? { turnId: asCanonicalTurnId(context.turnState.turnId) }\n                        : {}),\n                      idPrefix,\n                      argumentsValue: args,\n                      sourceItemId: idPrefix,\n                      ...(sessionId ? { providerThreadId: sessionId } : {}),\n                      raw: {\n                        source: \"claude.sdk.message\",\n                        method: \"mcp/create_thread\",\n                        payload: {\n                          toolName: INDEPENDENT_THREAD_TOOL_NAME,\n                          input: args,\n                        },\n                      },\n                    }),\n                  );\n\n                  return {\n                    content: [\n                      {\n                        type: \"text\" as const,\n                        text: result.text,\n                      },\n                    ],\n                    structuredContent: result.structuredContent,\n                  };\n                }),\n              ),\n            { alwaysLoad: true },\n          ),\n        ],\n      });\n      const queryOptions: ClaudeQueryOptions = {\n        ...(input.cwd ? { cwd: input.cwd } : {}),\n        ...(apiModelId ? { model: apiModelId } : {}),\n        pathToClaudeCodeExecutable: claudeBinaryPath,\n        systemPrompt: { type: \"preset\", preset: \"claude_code\" },\n        settingSources: [...CLAUDE_SETTING_SOURCES],\n        // The SDK type lags the CLI here: Opus 4.7+ accepts `xhigh` even though\n        // the published `Options[\"effort\"]` union currently stops at `max`.\n        ...(effectiveEffort\n          ? {\n              effort: effectiveEffort as unknown as NonNullable<ClaudeQueryOptions[\"effort\"]>,\n            }\n          : {}),\n        ...(permissionMode ? { permissionMode } : {}),\n        ...(permissionMode === \"bypassPermissions\"\n          ? { allowDangerouslySkipPermissions: true }\n          : {}),\n        ...(Object.keys(settings).length > 0 ? { settings } : {}),\n        ...(existingResumeSessionId ? { resume: existingResumeSessionId } : {}),\n        ...(newSessionId ? { sessionId: newSessionId } : {}),\n        includePartialMessages: true,\n        canUseTool,\n        mcpServers: {\n          [INDEPENDENT_THREAD_MCP_SERVER_NAME]: salchiMcpServer,\n        },\n        env: queryEnvironment,\n        ...(additionalDirectories.length > 0 ? { additionalDirectories } : {}),\n        ...(Object.keys(extraArgs).length > 0 ? { extraArgs } : {}),\n      };\n\n      yield* Effect.annotateCurrentSpan({\n        \"provider.kind\": PROVIDER,\n        \"provider.thread_id\": threadId,\n        \"provider.runtime_mode\": input.runtimeMode,\n        \"claude.resume.source\":\n          existingResumeSessionId !== undefined ? \"resume-session\" : \"generated-session\",\n        \"claude.resume.thread_id\": resumeState?.threadId ?? \"\",\n        \"claude.resume.session_id\": existingResumeSessionId ?? \"\",\n        \"claude.resume.session_at\": resumeState?.resumeSessionAt ?? \"\",\n        \"claude.resume.turn_count\": resumeState?.turnCount ?? -1,\n        \"claude.query.cwd\": input.cwd ?? \"\",\n        \"claude.query.model\": apiModelId ?? \"\",\n        \"claude.query.effort\": effectiveEffort ?? \"\",\n        \"claude.query.permission_mode\": permissionMode ?? \"\",\n        \"claude.query.allow_dangerously_skip_permissions\": permissionMode === \"bypassPermissions\",\n        \"claude.query.resume\": existingResumeSessionId ?? \"\",\n        \"claude.query.session_id\": newSessionId ?? \"\",\n        \"claude.query.include_partial_messages\": true,\n        \"claude.query.additional_directories\": additionalDirectories,\n        \"claude.query.setting_sources\": [...CLAUDE_SETTING_SOURCES],\n        \"claude.query.settings_json\": encodeJsonStringForDiagnostics(settings) ?? \"\",\n        \"claude.query.extra_args_json\": encodeJsonStringForDiagnostics(extraArgs) ?? \"\",\n        \"claude.query.path_to_executable\": claudeBinaryPath,\n      });\n\n      const queryRuntime = yield* Effect.try({\n        try: () =>\n          createQuery({\n            prompt,\n            options: queryOptions,\n          }),\n        catch: (cause) =>\n          new ProviderAdapterProcessError({\n            provider: PROVIDER,\n            threadId,\n            detail: toMessage(cause, \"Failed to start Claude runtime session.\"),\n            cause,\n          }),\n      });\n\n      const session: ProviderSession = {\n        threadId,\n        provider: PROVIDER,\n        providerInstanceId: boundInstanceId,\n        status: \"ready\",\n        runtimeMode: input.runtimeMode,\n        ...(input.cwd ? { cwd: input.cwd } : {}),\n        ...(modelSelection?.model ? { model: modelSelection.model } : {}),\n        ...(threadId ? { threadId } : {}),\n        resumeCursor: {\n          ...(threadId ? { threadId } : {}),\n          ...(sessionId ? { resume: sessionId } : {}),\n          ...(resumeState?.resumeSessionAt ? { resumeSessionAt: resumeState.resumeSessionAt } : {}),\n          turnCount: resumeState?.turnCount ?? 0,\n        },\n        createdAt: startedAt,\n        updatedAt: startedAt,\n      };\n\n      const context: ClaudeSessionContext = {\n        session,\n        promptQueue,\n        query: queryRuntime,\n        streamFiber: undefined,\n        usageRefreshFiber: undefined,\n        startedAt,\n        basePermissionMode: permissionMode,\n        currentApiModelId: apiModelId,\n        resumeSessionId: sessionId,\n        pendingApprovals,\n        pendingUserInputs,\n        turns: [],\n        inFlightTools,\n        claudeTasks,\n        liveBackgroundTasks,\n        turnState: undefined,\n        lastKnownContextWindow: initialContextWindow,\n        lastKnownTokenUsage: undefined,\n        lastKnownRateLimits: undefined,\n        lastKnownOAuthUsageFingerprint: undefined,\n        statuslineCapturePath,\n        lastKnownStatuslineUsageFingerprint: undefined,\n        lastKnownTotalProcessedTokens: undefined,\n        lastAssistantUuid: resumeState?.resumeSessionAt,\n        lastThreadStartedId: undefined,\n        terminalTurnFailure: undefined,\n        stopped: false,\n      };\n      yield* Ref.set(contextRef, context);\n      sessions.set(threadId, context);\n\n      const sessionStartedStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"session.started\",\n        eventId: sessionStartedStamp.eventId,\n        provider: PROVIDER,\n        createdAt: sessionStartedStamp.createdAt,\n        threadId,\n        payload: input.resumeCursor !== undefined ? { resume: input.resumeCursor } : {},\n        providerRefs: {},\n      });\n\n      const configuredStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"session.configured\",\n        eventId: configuredStamp.eventId,\n        provider: PROVIDER,\n        createdAt: configuredStamp.createdAt,\n        threadId,\n        payload: {\n          config: {\n            ...(apiModelId ? { model: apiModelId } : {}),\n            ...(input.cwd ? { cwd: input.cwd } : {}),\n            ...(effectiveEffort ? { effort: effectiveEffort } : {}),\n            ...(permissionMode ? { permissionMode } : {}),\n            ...(fastMode ? { fastMode: true } : {}),\n          },\n        },\n        providerRefs: {},\n      });\n\n      const readyStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"session.state.changed\",\n        eventId: readyStamp.eventId,\n        provider: PROVIDER,\n        createdAt: readyStamp.createdAt,\n        threadId,\n        payload: {\n          state: \"ready\",\n        },\n        providerRefs: {},\n      });\n\n      let streamFiber: Fiber.Fiber<void, never>;\n      streamFiber = runFork(\n        Effect.exit(runSdkStream(context)).pipe(\n          Effect.flatMap((exit) => {\n            if (context.stopped) {\n              return Effect.void;\n            }\n            if (context.streamFiber === streamFiber) {\n              context.streamFiber = undefined;\n            }\n            return handleStreamExit(context, exit).pipe(\n              Effect.catch((cause) =>\n                Effect.logError(\"Failed to close Claude runtime stream.\", { cause }),\n              ),\n            );\n          }),\n        ),\n      );\n      context.streamFiber = streamFiber;\n      streamFiber.addObserver(() => {\n        if (context.streamFiber === streamFiber) {\n          context.streamFiber = undefined;\n        }\n      });\n\n      let usageRefreshFiber: Fiber.Fiber<void, never>;\n      // Provider-level polling owns recurring account refreshes. This one-shot keeps a newly\n      // opened session's usage display warm without adding a timer per session.\n      usageRefreshFiber = runFork(refreshClaudeUsageBestEffort(context));\n      context.usageRefreshFiber = usageRefreshFiber;\n      usageRefreshFiber.addObserver(() => {\n        if (context.usageRefreshFiber === usageRefreshFiber) {\n          context.usageRefreshFiber = undefined;\n        }\n      });\n\n      return {\n        ...session,\n      };\n    },\n  );\n\n  const sendTurnInternal = Effect.fn(\"sendTurnInternal\")(function* (\n    input: ProviderSendTurnInput,\n    expectedTurnId?: TurnId,\n  ) {\n    const context = yield* requireSession(input.threadId);\n    const modelSelection =\n      input.modelSelection !== undefined && input.modelSelection.instanceId === boundInstanceId\n        ? input.modelSelection\n        : undefined;\n\n    // A sendTurn while a real turn is running is a steer: the message is\n    // queued into the live SDK agent loop and the work continues as the same\n    // turn — no synthetic turn boundary. Stale synthetic turns (from\n    // background agent responses between user prompts) are auto-closed\n    // instead, so they don't block the user's next turn.\n    const steeringTurnState =\n      context.turnState && context.turnState.synthetic !== true ? context.turnState : null;\n    if (expectedTurnId !== undefined && steeringTurnState?.turnId !== expectedTurnId) {\n      return yield* new ProviderAdapterRequestError({\n        provider: PROVIDER,\n        method: \"turn/steer\",\n        detail: `Expected active turn '${expectedTurnId}', received '${steeringTurnState?.turnId ?? \"none\"}'.`,\n      });\n    }\n    if (context.turnState && steeringTurnState === null) {\n      yield* completeTurn(context, \"completed\");\n    }\n\n    if (modelSelection?.model) {\n      const apiModelId = resolveClaudeApiModelId(modelSelection);\n      if (context.currentApiModelId !== apiModelId) {\n        yield* Effect.tryPromise({\n          try: () => context.query.setModel(apiModelId),\n          catch: (cause) => toRequestError(input.threadId, \"turn/setModel\", cause),\n        });\n        context.currentApiModelId = apiModelId;\n      }\n      context.session = {\n        ...context.session,\n        model: modelSelection.model,\n      };\n    }\n\n    // Apply interaction mode by switching the SDK's permission mode.\n    // \"plan\" maps directly to the SDK's \"plan\" permission mode;\n    // \"default\" restores the session's original permission mode.\n    // When interactionMode is absent we leave the current mode unchanged.\n    if (input.interactionMode === \"plan\") {\n      yield* Effect.tryPromise({\n        try: () => context.query.setPermissionMode(\"plan\"),\n        catch: (cause) => toRequestError(input.threadId, \"turn/setPermissionMode\", cause),\n      });\n    } else if (input.interactionMode === \"default\") {\n      yield* Effect.tryPromise({\n        try: () => context.query.setPermissionMode(context.basePermissionMode ?? \"default\"),\n        catch: (cause) => toRequestError(input.threadId, \"turn/setPermissionMode\", cause),\n      });\n    }\n\n    const turnId = steeringTurnState?.turnId ?? TurnId.make(yield* randomUUIDv4);\n    if (steeringTurnState === null) {\n      const turnState: ClaudeTurnState = {\n        turnId,\n        startedAt: yield* nowIso,\n        items: [],\n        assistantTextBlocks: new Map(),\n        assistantTextBlockOrder: [],\n        capturedProposedPlanKeys: new Set(),\n        nextSyntheticAssistantBlockIndex: -1,\n      };\n\n      const updatedAt = yield* nowIso;\n      context.turnState = turnState;\n      context.session = {\n        ...context.session,\n        status: \"running\",\n        activeTurnId: turnId,\n        updatedAt,\n      };\n\n      const turnStartedStamp = yield* makeEventStamp();\n      yield* offerRuntimeEvent({\n        type: \"turn.started\",\n        eventId: turnStartedStamp.eventId,\n        provider: PROVIDER,\n        createdAt: turnStartedStamp.createdAt,\n        threadId: context.session.threadId,\n        turnId,\n        payload: modelSelection?.model ? { model: modelSelection.model } : {},\n        providerRefs: {},\n      });\n    }\n\n    const message = yield* buildUserMessageEffect(input, {\n      fileSystem,\n      attachmentsDir: serverConfig.attachmentsDir,\n      boundInstanceId,\n    });\n\n    yield* Queue.offer(context.promptQueue, {\n      type: \"message\",\n      message,\n    }).pipe(\n      Effect.mapError((cause) =>\n        toRequestError(input.threadId, expectedTurnId ? \"turn/steer\" : \"turn/start\", cause),\n      ),\n    );\n\n    return {\n      threadId: context.session.threadId,\n      turnId,\n      ...(context.session.resumeCursor !== undefined\n        ? { resumeCursor: context.session.resumeCursor }\n        : {}),\n    };\n  });\n\n  const sendTurn: ClaudeAdapterShape[\"sendTurn\"] = (input) => sendTurnInternal(input);\n  const steerTurn: ClaudeAdapterShape[\"steerTurn\"] = (input) =>\n    sendTurnInternal(\n      {\n        threadId: input.threadId,\n        ...(input.input !== undefined ? { input: input.input } : {}),\n        ...(input.attachments !== undefined ? { attachments: input.attachments } : {}),\n      },\n      input.expectedTurnId,\n    );\n\n  const interruptTurn: ClaudeAdapterShape[\"interruptTurn\"] = Effect.fn(\"interruptTurn\")(\n    function* (threadId, _turnId) {\n      const context = yield* requireSession(threadId);\n      const liveTasks = Array.from(context.liveBackgroundTasks.entries());\n      if (liveTasks.length > 0) {\n        yield* Effect.forEach(\n          liveTasks,\n          ([taskId, task]) =>\n            Effect.gen(function* () {\n              const stopAcknowledged = yield* Effect.tryPromise({\n                try: () => context.query.stopTask(taskId),\n                catch: () => undefined,\n              }).pipe(\n                Effect.timeoutOption(\"3 seconds\"),\n                Effect.orElseSucceed(() => Option.none()),\n              );\n              if (Option.isNone(stopAcknowledged) || !context.liveBackgroundTasks.delete(taskId)) {\n                return;\n              }\n\n              const taskStamp = yield* makeEventStamp();\n              yield* offerRuntimeEvent({\n                type: \"task.completed\",\n                eventId: taskStamp.eventId,\n                provider: PROVIDER,\n                createdAt: taskStamp.createdAt,\n                threadId: context.session.threadId,\n                ...(context.turnState\n                  ? { turnId: asCanonicalTurnId(context.turnState.turnId) }\n                  : {}),\n                payload: {\n                  taskId: RuntimeTaskId.make(taskId),\n                  status: \"stopped\",\n                  ...(task.description ? { summary: task.description } : {}),\n                },\n                providerRefs: nativeProviderRefs(context),\n              });\n\n              const subagentStamp = yield* makeEventStamp();\n              yield* offerRuntimeEvent({\n                type: \"subagent.completed\",\n                eventId: subagentStamp.eventId,\n                provider: PROVIDER,\n                createdAt: subagentStamp.createdAt,\n                threadId: context.session.threadId,\n                ...(context.turnState\n                  ? { turnId: asCanonicalTurnId(context.turnState.turnId) }\n                  : {}),\n                payload: {\n                  subagentId: asRuntimeSubagentId(taskId),\n                  status: \"stopped\",\n                  ...(task.description ? { summary: task.description } : {}),\n                  ...(task.taskType ? { role: task.taskType } : {}),\n                },\n                providerRefs: nativeProviderRefs(context),\n              });\n            }).pipe(Effect.ignore),\n          { concurrency: 8, discard: true },\n        ).pipe(Effect.timeoutOption(\"10 seconds\"), Effect.ignore);\n      }\n      yield* Effect.tryPromise({\n        try: () => context.query.interrupt(),\n        catch: (cause) => toRequestError(threadId, \"turn/interrupt\", cause),\n      });\n    },\n  );\n\n  const readThread: ClaudeAdapterShape[\"readThread\"] = Effect.fn(\"readThread\")(\n    function* (threadId) {\n      const context = yield* requireSession(threadId);\n      return yield* snapshotThread(context);\n    },\n  );\n\n  const rollbackThread: ClaudeAdapterShape[\"rollbackThread\"] = Effect.fn(\"rollbackThread\")(\n    function* (threadId, numTurns) {\n      const context = yield* requireSession(threadId);\n      const nextLength = Math.max(0, context.turns.length - numTurns);\n      context.turns.splice(nextLength);\n      yield* updateResumeCursor(context);\n      return yield* snapshotThread(context);\n    },\n  );\n\n  const respondToRequest: ClaudeAdapterShape[\"respondToRequest\"] = Effect.fn(\"respondToRequest\")(\n    function* (threadId, requestId, decision) {\n      const context = yield* requireSession(threadId);\n      const pending = context.pendingApprovals.get(requestId);\n      if (!pending) {\n        return yield* new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"item/requestApproval/decision\",\n          detail: `Unknown pending approval request: ${requestId}`,\n        });\n      }\n\n      context.pendingApprovals.delete(requestId);\n      yield* Deferred.succeed(pending.decision, decision);\n    },\n  );\n\n  const respondToUserInput: ClaudeAdapterShape[\"respondToUserInput\"] = Effect.fn(\n    \"respondToUserInput\",\n  )(function* (threadId, requestId, answers) {\n    const context = yield* requireSession(threadId);\n    const pending = context.pendingUserInputs.get(requestId);\n    if (!pending) {\n      return yield* new ProviderAdapterRequestError({\n        provider: PROVIDER,\n        method: \"item/tool/respondToUserInput\",\n        detail: `Unknown pending user-input request: ${requestId}`,\n      });\n    }\n\n    context.pendingUserInputs.delete(requestId);\n    yield* Deferred.succeed(pending.answers, answers);\n  });\n\n  const stopSession: ClaudeAdapterShape[\"stopSession\"] = Effect.fn(\"stopSession\")(\n    function* (threadId) {\n      const context = yield* requireSession(threadId);\n      yield* stopSessionInternal(context, {\n        emitExitEvent: true,\n      });\n    },\n  );\n\n  const listSessions: ClaudeAdapterShape[\"listSessions\"] = () =>\n    Effect.sync(() => Array.from(sessions.values(), ({ session }) => ({ ...session })));\n\n  const hasSession: ClaudeAdapterShape[\"hasSession\"] = (threadId) =>\n    Effect.sync(() => {\n      const context = sessions.get(threadId);\n      return context !== undefined && !context.stopped;\n    });\n\n  const getAccountRateLimits: NonNullable<ClaudeAdapterShape[\"getAccountRateLimits\"]> = () =>\n    Effect.gen(function* () {\n      const usage = yield* readClaudeOAuthUsage();\n      return normalizeClaudeAccountUsageRateLimits(usage, \"claude.oauth.usage\");\n    }).pipe(Effect.catch(() => Effect.void));\n\n  const refreshUsage: NonNullable<ClaudeAdapterShape[\"refreshUsage\"]> = () => {\n    const context = Array.from(sessions.values()).find((candidate) => !candidate.stopped);\n    if (!context) {\n      return Effect.void;\n    }\n    return Effect.all(\n      [\n        refreshClaudeUsageBestEffort(context),\n        context.lastKnownRateLimits\n          ? emitClaudeRateLimits(context, context.lastKnownRateLimits)\n          : Effect.void,\n      ],\n      { concurrency: 2, discard: true },\n    ).pipe(Effect.asVoid);\n  };\n\n  const stopAll: ClaudeAdapterShape[\"stopAll\"] = () =>\n    Effect.forEach(\n      sessions,\n      ([, context]) =>\n        stopSessionInternal(context, {\n          emitExitEvent: true,\n        }),\n      { discard: true },\n    );\n\n  yield* Effect.addFinalizer(() =>\n    Effect.forEach(\n      sessions,\n      ([, context]) =>\n        stopSessionInternal(context, {\n          emitExitEvent: false,\n        }),\n      { discard: true },\n    ).pipe(\n      Effect.catch((cause) =>\n        Effect.logError(\"Failed to emit Claude session shutdown event.\", { cause }),\n      ),\n      Effect.tap(() => Queue.shutdown(runtimeEventQueue)),\n    ),\n  );\n\n  return {\n    provider: PROVIDER,\n    capabilities: {\n      sessionModelSwitch: \"in-session\",\n      childThreadMode: \"activity-only\",\n      activeTurnSteering: \"streaming-input\",\n    },\n    startSession,\n    sendTurn,\n    steerTurn,\n    interruptTurn,\n    readThread,\n    rollbackThread,\n    respondToRequest,\n    respondToUserInput,\n    stopSession,\n    listSessions,\n    hasSession,\n    refreshUsage,\n    getAccountRateLimits,\n    stopAll,\n    get streamEvents() {\n      return Stream.fromQueue(runtimeEventQueue);\n    },\n  } satisfies ClaudeAdapterShape;\n});\n","import type { ServerProvider } from \"@salchi/contracts\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Equal from \"effect/Equal\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport * as Semaphore from \"effect/Semaphore\";\n\nimport type { ServerProviderShape } from \"./Services/ServerProvider.ts\";\nimport { ServerSettingsError } from \"@salchi/contracts\";\nimport { ignoreCauseUnlessInterrupted } from \"../effect/logCauseUnlessInterrupted.ts\";\n\ninterface ProviderSnapshotState {\n  readonly snapshot: ServerProvider;\n  readonly enrichmentGeneration: number;\n}\n\nexport const makeManagedServerProvider = Effect.fn(\"makeManagedServerProvider\")(function* <\n  Settings,\n>(input: {\n  readonly maintenanceCapabilities: ServerProviderShape[\"maintenanceCapabilities\"];\n  readonly getSettings: Effect.Effect<Settings>;\n  readonly streamSettings: Stream.Stream<Settings>;\n  readonly haveSettingsChanged: (previous: Settings, next: Settings) => boolean;\n  readonly initialSnapshot: (settings: Settings) => Effect.Effect<ServerProvider>;\n  readonly checkProvider: Effect.Effect<ServerProvider, ServerSettingsError>;\n  readonly enrichSnapshot?: (input: {\n    readonly settings: Settings;\n    readonly snapshot: ServerProvider;\n    readonly getSnapshot: Effect.Effect<ServerProvider>;\n    readonly publishSnapshot: (snapshot: ServerProvider) => Effect.Effect<void>;\n  }) => Effect.Effect<void>;\n  readonly refreshInterval?: Duration.Input;\n}): Effect.fn.Return<ServerProviderShape, ServerSettingsError, Scope.Scope> {\n  const refreshSemaphore = yield* Semaphore.make(1);\n  const changesPubSub = yield* Effect.acquireRelease(\n    PubSub.unbounded<ServerProvider>(),\n    PubSub.shutdown,\n  );\n  const initialSettings = yield* input.getSettings;\n  const initialSnapshot = yield* input.initialSnapshot(initialSettings);\n  const snapshotStateRef = yield* Ref.make<ProviderSnapshotState>({\n    snapshot: initialSnapshot,\n    enrichmentGeneration: 0,\n  });\n  const settingsRef = yield* Ref.make(initialSettings);\n  const enrichmentFiberRef = yield* Ref.make<Fiber.Fiber<void, unknown> | null>(null);\n  const scope = yield* Effect.scope;\n\n  const publishEnrichedSnapshot = Effect.fn(\"publishEnrichedSnapshot\")(function* (\n    generation: number,\n    nextSnapshot: ServerProvider,\n  ) {\n    const snapshotToPublish = yield* Ref.modify(snapshotStateRef, (state) => {\n      if (state.enrichmentGeneration !== generation || Equal.equals(state.snapshot, nextSnapshot)) {\n        return [null, state] as const;\n      }\n      return [\n        nextSnapshot,\n        {\n          ...state,\n          snapshot: nextSnapshot,\n        },\n      ] as const;\n    });\n    if (snapshotToPublish === null) {\n      return;\n    }\n    yield* PubSub.publish(changesPubSub, snapshotToPublish);\n  });\n\n  const restartSnapshotEnrichment = Effect.fn(\"restartSnapshotEnrichment\")(function* (\n    settings: Settings,\n    snapshot: ServerProvider,\n    generation: number,\n  ) {\n    const previousFiber = yield* Ref.getAndSet(enrichmentFiberRef, null);\n    if (previousFiber) {\n      yield* Fiber.interrupt(previousFiber).pipe(Effect.ignore);\n    }\n\n    if (!input.enrichSnapshot) {\n      return;\n    }\n\n    const fiber = yield* ignoreCauseUnlessInterrupted(\n      input.enrichSnapshot({\n        settings,\n        snapshot,\n        getSnapshot: Ref.get(snapshotStateRef).pipe(Effect.map((state) => state.snapshot)),\n        publishSnapshot: (nextSnapshot) => publishEnrichedSnapshot(generation, nextSnapshot),\n      }),\n      {\n        message: \"provider snapshot enrichment failed\",\n      },\n    ).pipe(Effect.forkIn(scope));\n\n    yield* Ref.set(enrichmentFiberRef, fiber);\n  });\n\n  const applySnapshotBase = Effect.fn(\"applySnapshot\")(function* (\n    nextSettings: Settings,\n    options?: { readonly forceRefresh?: boolean },\n  ) {\n    const forceRefresh = options?.forceRefresh === true;\n    const previousSettings = yield* Ref.get(settingsRef);\n    if (!forceRefresh && !input.haveSettingsChanged(previousSettings, nextSettings)) {\n      yield* Ref.set(settingsRef, nextSettings);\n      return yield* Ref.get(snapshotStateRef).pipe(Effect.map((state) => state.snapshot));\n    }\n\n    const nextSnapshot = yield* input.checkProvider;\n    const nextGeneration = yield* Ref.modify(snapshotStateRef, (state) => {\n      const generation = input.enrichSnapshot\n        ? state.enrichmentGeneration + 1\n        : state.enrichmentGeneration;\n      return [\n        generation,\n        {\n          snapshot: nextSnapshot,\n          enrichmentGeneration: generation,\n        },\n      ] as const;\n    });\n    yield* Ref.set(settingsRef, nextSettings);\n    yield* PubSub.publish(changesPubSub, nextSnapshot);\n    yield* restartSnapshotEnrichment(nextSettings, nextSnapshot, nextGeneration);\n    return nextSnapshot;\n  });\n  const applySnapshot = (nextSettings: Settings, options?: { readonly forceRefresh?: boolean }) =>\n    refreshSemaphore.withPermits(1)(applySnapshotBase(nextSettings, options));\n\n  const refreshSnapshot = Effect.fn(\"refreshSnapshot\")(function* () {\n    const nextSettings = yield* input.getSettings;\n    return yield* applySnapshot(nextSettings, { forceRefresh: true });\n  });\n\n  yield* Stream.runForEach(input.streamSettings, (nextSettings) =>\n    Effect.asVoid(applySnapshot(nextSettings)),\n  ).pipe(Effect.forkScoped);\n\n  yield* Effect.forever(\n    Effect.sleep(input.refreshInterval ?? \"60 seconds\").pipe(\n      Effect.flatMap(() => refreshSnapshot()),\n      (effect) =>\n        ignoreCauseUnlessInterrupted(effect, {\n          message: \"periodic provider snapshot refresh failed\",\n        }),\n    ),\n  ).pipe(Effect.forkScoped);\n\n  yield* applySnapshot(initialSettings, { forceRefresh: true }).pipe(\n    (effect) =>\n      ignoreCauseUnlessInterrupted(effect, {\n        message: \"initial provider snapshot refresh failed\",\n      }),\n    Effect.forkScoped,\n  );\n\n  return {\n    maintenanceCapabilities: input.maintenanceCapabilities,\n    getSnapshot: Ref.get(snapshotStateRef).pipe(Effect.map((state) => state.snapshot)),\n    refresh: refreshSnapshot().pipe(Effect.tapError(Effect.logError), Effect.orDie),\n    get streamChanges() {\n      return Stream.fromPubSub(changesPubSub);\n    },\n    get subscribeChanges() {\n      return PubSub.subscribe(changesPubSub);\n    },\n  } satisfies ServerProviderShape;\n});\n","/**\n * ProviderDriver / ProviderInstance — driver SPI as plain values.\n *\n * `ProviderDriver` is a record, not a Context.Service. The thing it produces\n * (`ProviderInstance`) is also a record — three captured closures\n * (`snapshot`, `adapter`, `textGeneration`), an id, and a driver kind. There\n * are intentionally no per-driver Context tags because tags are\n * singleton-per-runtime and we need many instances of the same driver.\n *\n * The only Effect service involved is `ProviderInstanceRegistry`, which\n * owns the live `Map<InstanceId, ProviderInstance>` and is itself a\n * singleton.\n *\n * Driver factories are functions of `(typed config, env)` where:\n *   - `typed config` is decoded once by the registry via `configSchema`,\n *     so drivers never deal with raw `unknown`.\n *   - `env` flows through Effect's R channel. Each driver declares the\n *     subset of infrastructure services it needs (FileSystem,\n *     ChildProcessSpawner, …) on its `create` return type; the registry\n *     layer's R is the union of those, and the runtime layer satisfies it.\n *\n * @module provider/ProviderDriver\n */\nimport type {\n  ProviderDriverKind,\n  ProviderInstanceEnvironment,\n  ProviderInstanceId,\n} from \"@salchi/contracts\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Schema from \"effect/Schema\";\nimport type * as Scope from \"effect/Scope\";\n\nimport type { TextGenerationShape } from \"../textGeneration/TextGeneration.ts\";\nimport type { ProviderAdapterError, ProviderDriverError } from \"./Errors.ts\";\nimport type { ProviderAdapterShape } from \"./Services/ProviderAdapter.ts\";\nimport type { ServerProviderShape } from \"./Services/ServerProvider.ts\";\n\n/**\n * Static metadata advertised by a driver. Used for default presentation\n * and (later) settings UI. Doesn't need to be Effect-typed because nothing\n * about it is dynamic — drivers are registered at startup.\n */\nexport interface ProviderDriverMetadata {\n  /** Human-readable name for the driver itself (e.g. \"Codex\"). */\n  readonly displayName: string;\n  /**\n   * Whether the driver may be instantiated more than once concurrently.\n   * Defaults to `true`. Set to `false` for drivers that wrap a global\n   * resource (e.g. a single desktop app socket) — the registry then\n   * rejects multi-instance configurations with a clear error.\n   */\n  readonly supportsMultipleInstances?: boolean;\n}\n\n/**\n * One materialized provider instance. Held by the registry, looked up by\n * `instanceId`, torn down by closing the scope it was created in.\n *\n * The three \"shape\" fields are captured closures owned by this instance —\n * stopping one instance cannot affect another, and starting a second\n * instance of the same driver does not reach into the first instance's\n * state.\n */\nexport interface ProviderInstance {\n  readonly instanceId: ProviderInstanceId;\n  readonly driverKind: ProviderDriverKind;\n  readonly continuationIdentity: ProviderContinuationIdentity;\n  readonly displayName: string | undefined;\n  readonly accentColor?: string | undefined;\n  readonly enabled: boolean;\n  readonly snapshot: ServerProviderShape;\n  readonly adapter: ProviderAdapterShape<ProviderAdapterError>;\n  readonly textGeneration: TextGenerationShape;\n}\n\nexport interface ProviderContinuationIdentity {\n  readonly driverKind: ProviderDriverKind;\n  readonly continuationKey: string;\n}\n\nexport function defaultProviderContinuationIdentity(input: {\n  readonly driverKind: ProviderDriverKind;\n  readonly instanceId: ProviderInstanceId;\n}): ProviderContinuationIdentity {\n  return {\n    driverKind: input.driverKind,\n    continuationKey: `${input.driverKind}:instance:${input.instanceId}`,\n  };\n}\n\n/**\n * Inputs the registry passes to a driver's `create` function.\n *\n * `config` is the typed payload — already decoded by the registry through\n * `driver.configSchema`. Drivers never decode their own raw envelope.\n */\nexport interface ProviderDriverCreateInput<Config> {\n  readonly instanceId: ProviderInstanceId;\n  readonly displayName: string | undefined;\n  readonly accentColor?: string | undefined;\n  readonly environment: ProviderInstanceEnvironment;\n  readonly enabled: boolean;\n  readonly config: Config;\n}\n\n/**\n * Driver SPI — registered as a plain value, not a Layer.\n *\n * `Config` is whatever the driver decoded from\n * `ProviderInstanceConfig.config`. `R` is the union of infrastructure\n * services the driver depends on; the registry layer aggregates `R` across\n * all registered drivers and the runtime supplies them.\n *\n * `create` is responsible for *all* per-instance state — process handles,\n * pubsub topics, refs, file watchers — and must release them when its\n * scope closes. Two calls to `create` with different `instanceId` /\n * `config` MUST yield instances with no shared mutable state.\n */\nexport interface ProviderDriver<Config, R = never> {\n  readonly driverKind: ProviderDriverKind;\n  readonly metadata: ProviderDriverMetadata;\n  /**\n   * Decoder for the opaque `ProviderInstanceConfig.config` envelope. The\n   * registry runs this exactly once per (re)load of an instance; a decode\n   * failure is surfaced as `ProviderDriverError` and downgraded to an\n   * unavailable shadow snapshot.\n   *\n   * The `Encoded` parameter is intentionally left as `unknown` (not\n   * `Config`) so schemas with `withDecodingDefault` / transformations — where\n   * the encoded shape differs from the decoded shape — satisfy the SPI\n   * without casts. The registry only ever decodes `unknown` envelopes here,\n   * so the precise encoded type is irrelevant at this boundary.\n   *\n   * Using `Codec` rather than `Schema` pins `DecodingServices = never` — if\n   * we used `Schema<Config>`, the erased `any` in `AnyProviderDriver` would\n   * widen `DecodingServices` to `unknown` and poison the R channel of every\n   * caller of `decodeUnknownEffect`.\n   */\n  readonly configSchema: Schema.Codec<Config, unknown>;\n  /**\n   * Default config payload used when the legacy\n   * `ServerSettings.providers.<kind>` entry is empty or when the driver\n   * is auto-bootstrapped without user configuration. Returning a typed\n   * default keeps the migration path simple — no special-casing needed\n   * to construct a \"blank\" instance.\n   */\n  readonly defaultConfig: () => Config;\n  /**\n   * Materialize one instance. The returned effect runs in a scope owned\n   * by the registry; closing that scope releases every resource the\n   * driver opened. Failures become unavailable shadow snapshots — the\n   * driver MUST NOT throw defects.\n   */\n  readonly create: (\n    input: ProviderDriverCreateInput<Config>,\n  ) => Effect.Effect<ProviderInstance, ProviderDriverError, R | Scope.Scope>;\n}\n\n/**\n * Heterogeneous-array convenience: the registry stores drivers as\n * `ReadonlyArray<AnyProviderDriver<R>>` where `R` is the union of all\n * registered drivers' env requirements.\n */\n// `any` here intentionally erases the per-driver Config; the registry\n// already decoded it before invoking `create`, so downstream code never\n// needs the original `Config` type. Using `unknown` instead would force\n// `create` callers into casts since `unknown` is not assignable to a\n// concrete `Config` from inside the driver body.\nexport type AnyProviderDriver<R = never> = ProviderDriver<any, R>;\n","import type { ProviderInstanceEnvironment } from \"@salchi/contracts\";\n\nexport function mergeProviderInstanceEnvironment(\n  environment: ProviderInstanceEnvironment | undefined,\n  baseEnv: NodeJS.ProcessEnv = process.env,\n): NodeJS.ProcessEnv {\n  if (!environment || environment.length === 0) {\n    return baseEnv;\n  }\n\n  const next: NodeJS.ProcessEnv = { ...baseEnv };\n  for (const variable of environment) {\n    next[variable.name] = variable.value;\n  }\n  return next;\n}\n","/**\n * ClaudeDriver — `ProviderDriver` for the Claude Agent SDK runtime.\n *\n * Mirrors `CodexDriver`: a plain value whose `create()` returns one\n * `ProviderInstance` bundling `snapshot` / `adapter` / `textGeneration`\n * closures captured over the per-instance `ClaudeSettings`.\n *\n * Unlike Codex, the Claude snapshot probe may invoke a secondary probe\n * (`probeClaudeCapabilities`) to read Anthropic account + slash-command\n * metadata. Each instance probes with its own settings and environment.\n *\n * @module provider/Drivers/ClaudeDriver\n */\nimport { ClaudeSettings, ProviderDriverKind, type ServerProvider } from \"@salchi/contracts\";\nimport * as Duration from \"effect/Duration\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { makeClaudeTextGeneration } from \"../../textGeneration/ClaudeTextGeneration.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport { ProviderDriverError } from \"../Errors.ts\";\nimport { makeClaudeAdapter } from \"../Layers/ClaudeAdapter.ts\";\nimport {\n  checkClaudeProviderStatus,\n  makePendingClaudeProvider,\n  probeClaudeCapabilities,\n} from \"../Layers/ClaudeProvider.ts\";\nimport { ProviderEventLoggers } from \"../Layers/ProviderEventLoggers.ts\";\nimport { makeManagedServerProvider } from \"../makeManagedServerProvider.ts\";\nimport {\n  defaultProviderContinuationIdentity,\n  type ProviderDriver,\n  type ProviderInstance,\n} from \"../ProviderDriver.ts\";\nimport type { ServerProviderDraft } from \"../providerSnapshot.ts\";\nimport { mergeProviderInstanceEnvironment } from \"../ProviderInstanceEnvironment.ts\";\nimport {\n  enrichProviderSnapshotWithVersionAdvisory,\n  makePackageManagedProviderMaintenanceResolver,\n  normalizeCommandPath,\n  resolveProviderMaintenanceCapabilitiesEffect,\n} from \"../providerMaintenance.ts\";\nimport { makeClaudeContinuationGroupKey } from \"./ClaudeHome.ts\";\nconst decodeClaudeSettings = Schema.decodeSync(ClaudeSettings);\n\nconst DRIVER_KIND = ProviderDriverKind.make(\"claudeAgent\");\nconst SNAPSHOT_REFRESH_INTERVAL = Duration.minutes(5);\n\nfunction isClaudeNativeCommandPath(commandPath: string): boolean {\n  const normalized = normalizeCommandPath(commandPath);\n  return (\n    normalized.endsWith(\"/.local/bin/claude\") ||\n    normalized.endsWith(\"/.local/bin/claude.exe\") ||\n    normalized.includes(\"/.local/share/claude/\")\n  );\n}\n\nconst UPDATE = makePackageManagedProviderMaintenanceResolver({\n  provider: DRIVER_KIND,\n  npmPackageName: \"@anthropic-ai/claude-code\",\n  homebrewFormula: \"claude-code\",\n  nativeUpdate: {\n    executable: \"claude\",\n    args: [\"update\"],\n    lockKey: \"claude-native\",\n    isCommandPath: isClaudeNativeCommandPath,\n  },\n});\n\nexport type ClaudeDriverEnv =\n  | ChildProcessSpawner.ChildProcessSpawner\n  | Crypto.Crypto\n  | FileSystem.FileSystem\n  | HttpClient.HttpClient\n  | Path.Path\n  | ProviderEventLoggers\n  | ServerConfig;\n\nconst withInstanceIdentity =\n  (input: {\n    readonly instanceId: ProviderInstance[\"instanceId\"];\n    readonly displayName: string | undefined;\n    readonly accentColor: string | undefined;\n    readonly continuationGroupKey: string;\n  }) =>\n  (snapshot: ServerProviderDraft): ServerProvider => ({\n    ...snapshot,\n    instanceId: input.instanceId,\n    driver: DRIVER_KIND,\n    ...(input.displayName ? { displayName: input.displayName } : {}),\n    ...(input.accentColor ? { accentColor: input.accentColor } : {}),\n    continuation: { groupKey: input.continuationGroupKey },\n  });\n\nexport const ClaudeDriver: ProviderDriver<ClaudeSettings, ClaudeDriverEnv> = {\n  driverKind: DRIVER_KIND,\n  metadata: {\n    displayName: \"Claude\",\n    supportsMultipleInstances: true,\n  },\n  configSchema: ClaudeSettings,\n  defaultConfig: (): ClaudeSettings => decodeClaudeSettings({}),\n  create: ({ instanceId, displayName, accentColor, environment, enabled, config }) =>\n    Effect.gen(function* () {\n      const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n      const path = yield* Path.Path;\n      const httpClient = yield* HttpClient.HttpClient;\n      const eventLoggers = yield* ProviderEventLoggers;\n      const processEnv = mergeProviderInstanceEnvironment(environment);\n      const fallbackContinuationIdentity = defaultProviderContinuationIdentity({\n        driverKind: DRIVER_KIND,\n        instanceId,\n      });\n      const effectiveConfig = { ...config, enabled } satisfies ClaudeSettings;\n      const maintenanceCapabilities = yield* resolveProviderMaintenanceCapabilitiesEffect(UPDATE, {\n        binaryPath: effectiveConfig.binaryPath,\n        env: processEnv,\n      });\n      const continuationGroupKey = yield* makeClaudeContinuationGroupKey(effectiveConfig);\n      const stampIdentity = withInstanceIdentity({\n        instanceId,\n        displayName,\n        accentColor,\n        continuationGroupKey,\n      });\n\n      const adapterOptions = {\n        instanceId,\n        environment: processEnv,\n        ...(eventLoggers.native ? { nativeEventLogger: eventLoggers.native } : {}),\n      };\n      const adapter = yield* makeClaudeAdapter(effectiveConfig, adapterOptions);\n      const textGeneration = yield* makeClaudeTextGeneration(effectiveConfig, processEnv);\n\n      const checkProvider = checkClaudeProviderStatus(\n        effectiveConfig,\n        () =>\n          probeClaudeCapabilities(effectiveConfig, processEnv).pipe(\n            Effect.provideService(Path.Path, path),\n          ),\n        processEnv,\n      ).pipe(\n        Effect.map(stampIdentity),\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n        Effect.provideService(Path.Path, path),\n      );\n\n      const snapshot = yield* makeManagedServerProvider<ClaudeSettings>({\n        maintenanceCapabilities,\n        getSettings: Effect.succeed(effectiveConfig),\n        streamSettings: Stream.never,\n        haveSettingsChanged: () => false,\n        initialSnapshot: (settings) =>\n          makePendingClaudeProvider(settings).pipe(Effect.map(stampIdentity)),\n        checkProvider,\n        enrichSnapshot: ({ snapshot, publishSnapshot }) =>\n          enrichProviderSnapshotWithVersionAdvisory(snapshot, maintenanceCapabilities).pipe(\n            Effect.provideService(HttpClient.HttpClient, httpClient),\n            Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot)),\n          ),\n        refreshInterval: SNAPSHOT_REFRESH_INTERVAL,\n      }).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderDriverError({\n              driver: DRIVER_KIND,\n              instanceId,\n              detail: `Failed to build Claude snapshot: ${cause.message ?? String(cause)}`,\n              cause,\n            }),\n        ),\n      );\n\n      return {\n        instanceId,\n        driverKind: DRIVER_KIND,\n        continuationIdentity: {\n          ...fallbackContinuationIdentity,\n          continuationKey: continuationGroupKey,\n        },\n        displayName,\n        accentColor,\n        enabled,\n        snapshot,\n        adapter,\n        textGeneration,\n      } satisfies ProviderInstance;\n    }),\n};\n","import type { ModelSelection } from \"@salchi/contracts\";\nimport {\n  getModelSelectionBooleanOptionValue,\n  getModelSelectionStringOptionValue,\n} from \"@salchi/shared/model\";\n\nexport function getCodexServiceTierOptionValue(\n  modelSelection: ModelSelection | null | undefined,\n): string | undefined {\n  const tier =\n    getModelSelectionStringOptionValue(modelSelection, \"serviceTier\") ??\n    (getModelSelectionBooleanOptionValue(modelSelection, \"fastMode\") === true ? \"fast\" : undefined);\n  if (tier === \"default\") return undefined;\n  return tier;\n}\n","import * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { type CodexSettings, type ModelSelection } from \"@salchi/contracts\";\nimport { sanitizeBranchFragment, sanitizeFeatureBranchName } from \"@salchi/shared/git\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport { resolveAttachmentPath } from \"../attachmentStore.ts\";\nimport { ServerConfig } from \"../config.ts\";\nimport { expandHomePath } from \"../pathExpansion.ts\";\nimport { TextGenerationError } from \"@salchi/contracts\";\nimport {\n  type BranchNameGenerationInput,\n  type ThreadTitleGenerationResult,\n  type TextGenerationShape,\n} from \"./TextGeneration.ts\";\nimport {\n  buildBranchNamePrompt,\n  buildCommitMessagePrompt,\n  buildPrContentPrompt,\n  buildThreadTitlePrompt,\n} from \"./TextGenerationPrompts.ts\";\nimport {\n  normalizeCliError,\n  sanitizeCommitSubject,\n  sanitizePrTitle,\n  sanitizeThreadTitle,\n  toJsonSchemaObject,\n} from \"./TextGenerationUtils.ts\";\nimport { getModelSelectionStringOptionValue } from \"@salchi/shared/model\";\nimport { getCodexServiceTierOptionValue } from \"../codexModelOptions.ts\";\n\nconst CODEX_GIT_TEXT_GENERATION_REASONING_EFFORT = \"low\";\nconst CODEX_TIMEOUT_MS = 180_000;\nconst encodeJsonString = Schema.encodeEffect(Schema.UnknownFromJsonString);\n/**\n * Build a Codex text-generation closure bound to a specific `CodexSettings`\n * payload. See `makeCodexAdapter` for the overall per-instance rationale.\n */\nexport const makeCodexTextGeneration = Effect.fn(\"makeCodexTextGeneration\")(function* (\n  codexConfig: CodexSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const serverConfig = yield* Effect.service(ServerConfig);\n\n  type MaterializedImageAttachments = {\n    readonly imagePaths: ReadonlyArray<string>;\n  };\n\n  const readStreamAsString = <E>(\n    operation: string,\n    stream: Stream.Stream<Uint8Array, E>,\n  ): Effect.Effect<string, TextGenerationError> =>\n    stream.pipe(\n      Stream.decodeText(),\n      Stream.runFold(\n        () => \"\",\n        (acc, chunk) => acc + chunk,\n      ),\n      Effect.mapError((cause) =>\n        normalizeCliError(\"codex\", operation, cause, \"Failed to collect process output\"),\n      ),\n    );\n\n  const writeTempFile = (\n    operation: string,\n    prefix: string,\n    content: string,\n  ): Effect.Effect<string, TextGenerationError, Scope.Scope> =>\n    fileSystem\n      .makeTempFileScoped({\n        prefix: `salchi-${prefix}-${process.pid}-`,\n      })\n      .pipe(\n        Effect.tap((filePath) => fileSystem.writeFileString(filePath, content)),\n        Effect.mapError(\n          (cause) =>\n            new TextGenerationError({\n              operation,\n              detail: `Failed to write temp file`,\n              cause,\n            }),\n        ),\n      );\n\n  const safeUnlink = (filePath: string): Effect.Effect<void, never> =>\n    fileSystem.remove(filePath).pipe(Effect.catch(() => Effect.void));\n\n  const encodeJsonForOperation = (\n    operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\",\n    value: unknown,\n  ): Effect.Effect<string, TextGenerationError> =>\n    encodeJsonString(value).pipe(\n      Effect.mapError(\n        (cause) =>\n          new TextGenerationError({\n            operation,\n            detail: \"Failed to encode structured output schema.\",\n            cause,\n          }),\n      ),\n    );\n\n  const materializeImageAttachments = Effect.fn(\"materializeImageAttachments\")(function* (\n    _operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\",\n    attachments: BranchNameGenerationInput[\"attachments\"],\n  ): Effect.fn.Return<MaterializedImageAttachments, TextGenerationError> {\n    if (!attachments || attachments.length === 0) {\n      return { imagePaths: [] };\n    }\n\n    const imagePaths: string[] = [];\n    for (const attachment of attachments) {\n      if (attachment.type !== \"image\") {\n        continue;\n      }\n\n      const resolvedPath = resolveAttachmentPath({\n        attachmentsDir: serverConfig.attachmentsDir,\n        attachment,\n      });\n      if (!resolvedPath || !path.isAbsolute(resolvedPath)) {\n        continue;\n      }\n      const fileInfo = yield* fileSystem\n        .stat(resolvedPath)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (!fileInfo || fileInfo.type !== \"File\") {\n        continue;\n      }\n      imagePaths.push(resolvedPath);\n    }\n    return { imagePaths };\n  });\n\n  const runCodexJson = Effect.fn(\"runCodexJson\")(function* <S extends Schema.Top>({\n    operation,\n    cwd,\n    prompt,\n    outputSchemaJson,\n    imagePaths = [],\n    cleanupPaths = [],\n    modelSelection,\n  }: {\n    operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\";\n    cwd: string;\n    prompt: string;\n    outputSchemaJson: S;\n    imagePaths?: ReadonlyArray<string>;\n    cleanupPaths?: ReadonlyArray<string>;\n    modelSelection: ModelSelection;\n  }): Effect.fn.Return<S[\"Type\"], TextGenerationError, S[\"DecodingServices\"]> {\n    const schemaJson = yield* encodeJsonForOperation(\n      operation,\n      toJsonSchemaObject(outputSchemaJson),\n    );\n    const schemaPath = yield* writeTempFile(operation, \"codex-schema\", schemaJson);\n    const outputPath = yield* writeTempFile(operation, \"codex-output\", \"\");\n\n    const runCodexCommand = Effect.fn(\"runCodexJson.runCodexCommand\")(function* () {\n      const reasoningEffort =\n        getModelSelectionStringOptionValue(modelSelection, \"reasoningEffort\") ??\n        CODEX_GIT_TEXT_GENERATION_REASONING_EFFORT;\n      const serviceTier = getCodexServiceTierOptionValue(modelSelection);\n      const commandName = codexConfig.binaryPath || \"codex\";\n      const commandArgs = [\n        \"exec\",\n        \"--ephemeral\",\n        \"--skip-git-repo-check\",\n        \"-s\",\n        \"read-only\",\n        \"--model\",\n        modelSelection.model,\n        \"--config\",\n        `model_reasoning_effort=\"${reasoningEffort}\"`,\n        ...(serviceTier ? [\"--config\", `service_tier=\"${serviceTier}\"`] : []),\n        \"--output-schema\",\n        schemaPath,\n        \"--output-last-message\",\n        outputPath,\n        ...imagePaths.flatMap((imagePath) => [\"--image\", imagePath]),\n        \"-\",\n      ];\n      const commandEnv = {\n        ...environment,\n        ...(codexConfig.homePath ? { CODEX_HOME: expandHomePath(codexConfig.homePath) } : {}),\n      };\n      const spawnCommand = resolveSpawnCommand(commandName, commandArgs, {\n        env: commandEnv,\n      });\n      const command = ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n        env: commandEnv,\n        cwd,\n        shell: spawnCommand.shell,\n        stdin: {\n          stream: Stream.encodeText(Stream.make(prompt)),\n        },\n      });\n\n      const child = yield* commandSpawner\n        .spawn(command)\n        .pipe(\n          Effect.mapError((cause) =>\n            normalizeCliError(\"codex\", operation, cause, \"Failed to spawn Codex CLI process\"),\n          ),\n        );\n\n      const [stdout, stderr, exitCode] = yield* Effect.all(\n        [\n          readStreamAsString(operation, child.stdout),\n          readStreamAsString(operation, child.stderr),\n          child.exitCode.pipe(\n            Effect.mapError((cause) =>\n              normalizeCliError(\"codex\", operation, cause, \"Failed to read Codex CLI exit code\"),\n            ),\n          ),\n        ],\n        { concurrency: \"unbounded\" },\n      );\n\n      if (exitCode !== 0) {\n        const stderrDetail = stderr.trim();\n        const stdoutDetail = stdout.trim();\n        const detail = stderrDetail.length > 0 ? stderrDetail : stdoutDetail;\n        return yield* new TextGenerationError({\n          operation,\n          detail:\n            detail.length > 0\n              ? `Codex CLI command failed: ${detail}`\n              : `Codex CLI command failed with code ${exitCode}.`,\n        });\n      }\n    });\n\n    const cleanup = Effect.all(\n      [schemaPath, outputPath, ...cleanupPaths].map((filePath) => safeUnlink(filePath)),\n      {\n        concurrency: \"unbounded\",\n      },\n    ).pipe(Effect.asVoid);\n\n    return yield* Effect.gen(function* () {\n      yield* runCodexCommand().pipe(\n        Effect.scoped,\n        Effect.timeoutOption(CODEX_TIMEOUT_MS),\n        Effect.flatMap(\n          Option.match({\n            onNone: () =>\n              Effect.fail(\n                new TextGenerationError({ operation, detail: \"Codex CLI request timed out.\" }),\n              ),\n            onSome: () => Effect.void,\n          }),\n        ),\n      );\n\n      const decodeOutput = Schema.decodeEffect(Schema.fromJsonString(outputSchemaJson));\n\n      return yield* fileSystem.readFileString(outputPath).pipe(\n        Effect.mapError(\n          (cause) =>\n            new TextGenerationError({\n              operation,\n              detail: \"Failed to read Codex output file.\",\n              cause,\n            }),\n        ),\n        Effect.flatMap(decodeOutput),\n        Effect.catchTag(\"SchemaError\", (cause) =>\n          Effect.fail(\n            new TextGenerationError({\n              operation,\n              detail: \"Codex returned invalid structured output.\",\n              cause,\n            }),\n          ),\n        ),\n      );\n    }).pipe(Effect.ensuring(cleanup));\n  });\n\n  const generateCommitMessage: TextGenerationShape[\"generateCommitMessage\"] = Effect.fn(\n    \"CodexTextGeneration.generateCommitMessage\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildCommitMessagePrompt({\n      branch: input.branch,\n      stagedSummary: input.stagedSummary,\n      stagedPatch: input.stagedPatch,\n      includeBranch: input.includeBranch === true,\n    });\n\n    const generated = yield* runCodexJson({\n      operation: \"generateCommitMessage\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      subject: sanitizeCommitSubject(generated.subject),\n      body: generated.body.trim(),\n      ...(\"branch\" in generated && typeof generated.branch === \"string\"\n        ? { branch: sanitizeFeatureBranchName(generated.branch) }\n        : {}),\n    };\n  });\n\n  const generatePrContent: TextGenerationShape[\"generatePrContent\"] = Effect.fn(\n    \"CodexTextGeneration.generatePrContent\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildPrContentPrompt({\n      baseBranch: input.baseBranch,\n      headBranch: input.headBranch,\n      commitSummary: input.commitSummary,\n      diffSummary: input.diffSummary,\n      diffPatch: input.diffPatch,\n    });\n\n    const generated = yield* runCodexJson({\n      operation: \"generatePrContent\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizePrTitle(generated.title),\n      body: generated.body.trim(),\n    };\n  });\n\n  const generateBranchName: TextGenerationShape[\"generateBranchName\"] = Effect.fn(\n    \"CodexTextGeneration.generateBranchName\",\n  )(function* (input) {\n    const { imagePaths } = yield* materializeImageAttachments(\n      \"generateBranchName\",\n      input.attachments,\n    );\n    const { prompt, outputSchema } = buildBranchNamePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runCodexJson({\n      operation: \"generateBranchName\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      imagePaths,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      branch: sanitizeBranchFragment(generated.branch),\n    };\n  });\n\n  const generateThreadTitle: TextGenerationShape[\"generateThreadTitle\"] = Effect.fn(\n    \"CodexTextGeneration.generateThreadTitle\",\n  )(function* (input) {\n    const { imagePaths } = yield* materializeImageAttachments(\n      \"generateThreadTitle\",\n      input.attachments,\n    );\n    const { prompt, outputSchema } = buildThreadTitlePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runCodexJson({\n      operation: \"generateThreadTitle\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      imagePaths,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizeThreadTitle(generated.title),\n    } satisfies ThreadTitleGenerationResult;\n  });\n\n  return {\n    generateCommitMessage,\n    generatePrContent,\n    generateBranchName,\n    generateThreadTitle,\n  } satisfies TextGenerationShape;\n});\n","// This file is generated by the effect-codex-app-server package. Do not edit manually.\n// Upstream protocol ref: b39f943a634a6e7ba86c3d6e8cf6d5f35e612566\n\nimport * as Schema from \"effect/Schema\";\n\nexport type ApplyPatchApprovalParams__FileChange =\n  | { readonly content: string; readonly type: \"add\" }\n  | { readonly content: string; readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\"; readonly unified_diff: string };\nexport const ApplyPatchApprovalParams__FileChange = Schema.Union(\n  [\n    Schema.Struct({\n      content: Schema.String,\n      type: Schema.Literal(\"add\").annotate({ title: \"AddFileChangeType\" }),\n    }).annotate({ title: \"AddFileChange\" }),\n    Schema.Struct({\n      content: Schema.String,\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeleteFileChangeType\" }),\n    }).annotate({ title: \"DeleteFileChange\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdateFileChangeType\" }),\n      unified_diff: Schema.String,\n    }).annotate({ title: \"UpdateFileChange\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ApplyPatchApprovalParams__ThreadId = string;\nexport const ApplyPatchApprovalParams__ThreadId = Schema.String;\n\nexport type ApplyPatchApprovalResponse__NetworkPolicyRuleAction = \"allow\" | \"deny\";\nexport const ApplyPatchApprovalResponse__NetworkPolicyRuleAction = Schema.Literals([\n  \"allow\",\n  \"deny\",\n]);\n\nexport type ChatgptAuthTokensRefreshParams__ChatgptAuthTokensRefreshReason = \"unauthorized\";\nexport const ChatgptAuthTokensRefreshParams__ChatgptAuthTokensRefreshReason =\n  Schema.Literal(\"unauthorized\");\n\nexport type ClientRequest__AbsolutePathBuf = string;\nexport const ClientRequest__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type ClientRequest__AddCreditsNudgeCreditType = \"credits\" | \"usage_limit\";\nexport const ClientRequest__AddCreditsNudgeCreditType = Schema.Literals([\"credits\", \"usage_limit\"]);\n\nexport type ClientRequest__AdditionalContextKind = \"untrusted\" | \"application\";\nexport const ClientRequest__AdditionalContextKind = Schema.Literals([\"untrusted\", \"application\"]);\n\nexport type ClientRequest__AgentMessageInputContent = {\n  readonly encrypted_content: string;\n  readonly type: \"encrypted_content\";\n};\nexport const ClientRequest__AgentMessageInputContent = Schema.Union(\n  [\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"encrypted_content\").annotate({\n        title: \"EncryptedContentAgentMessageInputContentType\",\n      }),\n    }).annotate({ title: \"EncryptedContentAgentMessageInputContent\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const ClientRequest__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type ClientRequest__AppsListParams = {\n  readonly cursor?: string | null;\n  readonly forceRefetch?: boolean;\n  readonly limit?: number | null;\n  readonly threadId?: string | null;\n};\nexport const ClientRequest__AppsListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  forceRefetch: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"When true, bypass app caches and fetch the latest data from sources.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional thread id used to evaluate app feature gating from that thread's config.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"EXPERIMENTAL - list available apps/connectors.\" });\n\nexport type ClientRequest__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const ClientRequest__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__CancelLoginAccountParams = { readonly loginId: string };\nexport const ClientRequest__CancelLoginAccountParams = Schema.Struct({ loginId: Schema.String });\n\nexport type ClientRequest__ClientInfo = {\n  readonly name: string;\n  readonly title?: string | null;\n  readonly version: string;\n};\nexport const ClientRequest__ClientInfo = Schema.Struct({\n  name: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  version: Schema.String,\n});\n\nexport type ClientRequest__CommandExecResizeParams = {\n  readonly processId: string;\n  readonly size: { readonly cols: number; readonly rows: number };\n};\nexport const ClientRequest__CommandExecResizeParams = Schema.Struct({\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n  size: Schema.Struct({\n    cols: Schema.Number.annotate({\n      description: \"Terminal width in character cells.\",\n      format: \"uint16\",\n    })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    rows: Schema.Number.annotate({\n      description: \"Terminal height in character cells.\",\n      format: \"uint16\",\n    })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({ description: \"PTY size in character cells for `command/exec` PTY sessions.\" }),\n}).annotate({ description: \"Resize a running PTY-backed `command/exec` session.\" });\n\nexport type ClientRequest__CommandExecTerminalSize = {\n  readonly cols: number;\n  readonly rows: number;\n};\nexport const ClientRequest__CommandExecTerminalSize = Schema.Struct({\n  cols: Schema.Number.annotate({\n    description: \"Terminal width in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  rows: Schema.Number.annotate({\n    description: \"Terminal height in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"PTY size in character cells for `command/exec` PTY sessions.\" });\n\nexport type ClientRequest__CommandExecTerminateParams = { readonly processId: string };\nexport const ClientRequest__CommandExecTerminateParams = Schema.Struct({\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n}).annotate({ description: \"Terminate a running `command/exec` session.\" });\n\nexport type ClientRequest__CommandExecWriteParams = {\n  readonly closeStdin?: boolean;\n  readonly deltaBase64?: string | null;\n  readonly processId: string;\n};\nexport const ClientRequest__CommandExecWriteParams = Schema.Struct({\n  closeStdin: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Close stdin after writing `deltaBase64`, if present.\",\n    }),\n  ),\n  deltaBase64: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional base64-encoded stdin bytes to write.\" }),\n      Schema.Null,\n    ]),\n  ),\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n}).annotate({\n  description: \"Write stdin bytes to a running `command/exec` session, close stdin, or both.\",\n});\n\nexport type ClientRequest__CommandMigration = { readonly name: string };\nexport const ClientRequest__CommandMigration = Schema.Struct({ name: Schema.String });\n\nexport type ClientRequest__ConfigReadParams = {\n  readonly cwd?: string | null;\n  readonly includeLayers?: boolean;\n};\nexport const ClientRequest__ConfigReadParams = Schema.Struct({\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  includeLayers: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type ClientRequest__ExperimentalFeatureEnablementSetParams = {\n  readonly enablement: { readonly [x: string]: boolean };\n};\nexport const ClientRequest__ExperimentalFeatureEnablementSetParams = Schema.Struct({\n  enablement: Schema.Record(Schema.String, Schema.Boolean).annotate({\n    description:\n      \"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.\",\n  }),\n});\n\nexport type ClientRequest__ExperimentalFeatureListParams = {\n  readonly cursor?: string | null;\n  readonly limit?: number | null;\n  readonly threadId?: string | null;\n};\nexport const ClientRequest__ExperimentalFeatureListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__ExternalAgentConfigDetectParams = {\n  readonly cwds?: ReadonlyArray<string> | null;\n  readonly includeHome?: boolean;\n};\nexport const ClientRequest__ExternalAgentConfigDetectParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description: \"Zero or more working directories to include for repo-scoped detection.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  includeHome: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"If true, include detection under the user's home (~/.claude, ~/.codex, etc.).\",\n    }),\n  ),\n});\n\nexport type ClientRequest__ExternalAgentConfigMigrationItemType =\n  | \"AGENTS_MD\"\n  | \"CONFIG\"\n  | \"SKILLS\"\n  | \"PLUGINS\"\n  | \"MCP_SERVER_CONFIG\"\n  | \"SUBAGENTS\"\n  | \"HOOKS\"\n  | \"COMMANDS\"\n  | \"SESSIONS\";\nexport const ClientRequest__ExternalAgentConfigMigrationItemType = Schema.Literals([\n  \"AGENTS_MD\",\n  \"CONFIG\",\n  \"SKILLS\",\n  \"PLUGINS\",\n  \"MCP_SERVER_CONFIG\",\n  \"SUBAGENTS\",\n  \"HOOKS\",\n  \"COMMANDS\",\n  \"SESSIONS\",\n]);\n\nexport type ClientRequest__FeedbackUploadParams = {\n  readonly classification: string;\n  readonly extraLogFiles?: ReadonlyArray<string> | null;\n  readonly includeLogs?: boolean;\n  readonly reason?: string | null;\n  readonly tags?: { readonly [x: string]: string } | null;\n  readonly threadId?: string | null;\n};\nexport const ClientRequest__FeedbackUploadParams = Schema.Struct({\n  classification: Schema.String,\n  extraLogFiles: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  includeLogs: Schema.optionalKey(Schema.Boolean),\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  tags: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n  ),\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__FsCopyParams = {\n  readonly destinationPath: string;\n  readonly recursive?: boolean;\n  readonly sourcePath: string;\n};\nexport const ClientRequest__FsCopyParams = Schema.Struct({\n  destinationPath: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  recursive: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Required for directory copies; ignored for file copies.\",\n    }),\n  ),\n  sourcePath: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ description: \"Copy a file or directory tree on the host filesystem.\" });\n\nexport type ClientRequest__FsCreateDirectoryParams = {\n  readonly path: string;\n  readonly recursive?: boolean | null;\n};\nexport const ClientRequest__FsCreateDirectoryParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  recursive: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"Whether parent directories should also be created. Defaults to `true`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Create a directory on the host filesystem.\" });\n\nexport type ClientRequest__FsGetMetadataParams = { readonly path: string };\nexport const ClientRequest__FsGetMetadataParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ description: \"Request metadata for an absolute path.\" });\n\nexport type ClientRequest__FsReadDirectoryParams = { readonly path: string };\nexport const ClientRequest__FsReadDirectoryParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ description: \"List direct child names for a directory.\" });\n\nexport type ClientRequest__FsReadFileParams = { readonly path: string };\nexport const ClientRequest__FsReadFileParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ description: \"Read a file from the host filesystem.\" });\n\nexport type ClientRequest__FsRemoveParams = {\n  readonly force?: boolean | null;\n  readonly path: string;\n  readonly recursive?: boolean | null;\n};\nexport const ClientRequest__FsRemoveParams = Schema.Struct({\n  force: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"Whether missing paths should be ignored. Defaults to `true`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  recursive: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"Whether directory removal should recurse. Defaults to `true`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Remove a file or directory tree from the host filesystem.\" });\n\nexport type ClientRequest__FsUnwatchParams = { readonly watchId: string };\nexport const ClientRequest__FsUnwatchParams = Schema.Struct({\n  watchId: Schema.String.annotate({\n    description: \"Watch identifier previously provided to `fs/watch`.\",\n  }),\n}).annotate({ description: \"Stop filesystem watch notifications for a prior `fs/watch`.\" });\n\nexport type ClientRequest__FsWatchParams = { readonly path: string; readonly watchId: string };\nexport const ClientRequest__FsWatchParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  watchId: Schema.String.annotate({\n    description: \"Connection-scoped watch identifier used for `fs/unwatch` and `fs/changed`.\",\n  }),\n}).annotate({ description: \"Start filesystem watch notifications for an absolute path.\" });\n\nexport type ClientRequest__FsWriteFileParams = {\n  readonly dataBase64: string;\n  readonly path: string;\n};\nexport const ClientRequest__FsWriteFileParams = Schema.Struct({\n  dataBase64: Schema.String.annotate({ description: \"File contents encoded as base64.\" }),\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ description: \"Write a file on the host filesystem.\" });\n\nexport type ClientRequest__FuzzyFileSearchParams = {\n  readonly cancellationToken?: string | null;\n  readonly query: string;\n  readonly roots: ReadonlyArray<string>;\n};\nexport const ClientRequest__FuzzyFileSearchParams = Schema.Struct({\n  cancellationToken: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  query: Schema.String,\n  roots: Schema.Array(Schema.String),\n});\n\nexport type ClientRequest__GetAccountParams = { readonly refreshToken?: boolean };\nexport const ClientRequest__GetAccountParams = Schema.Struct({\n  refreshToken: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"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`.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__HookMigration = { readonly name: string };\nexport const ClientRequest__HookMigration = Schema.Struct({ name: Schema.String });\n\nexport type ClientRequest__HooksListParams = { readonly cwds?: ReadonlyArray<string> };\nexport const ClientRequest__HooksListParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({\n      description: \"When empty, defaults to the current session working directory.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const ClientRequest__ImageDetail = Schema.Literals([\"auto\", \"low\", \"high\", \"original\"]);\n\nexport type ClientRequest__InitializeCapabilities = {\n  readonly experimentalApi?: boolean;\n  readonly optOutNotificationMethods?: ReadonlyArray<string> | null;\n  readonly requestAttestation?: boolean;\n};\nexport const ClientRequest__InitializeCapabilities = Schema.Struct({\n  experimentalApi: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Opt into receiving experimental API methods and fields.\",\n      default: false,\n    }),\n  ),\n  optOutNotificationMethods: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Exact notification method names that should be suppressed for this connection (for example `thread/started`).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  requestAttestation: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Opt into `attestation/generate` requests for upstream `x-oai-attestation`.\",\n      default: false,\n    }),\n  ),\n}).annotate({ description: \"Client-declared capabilities negotiated during initialize.\" });\n\nexport type ClientRequest__LocalShellAction = {\n  readonly command: ReadonlyArray<string>;\n  readonly env?: { readonly [x: string]: string } | null;\n  readonly timeout_ms?: number | null;\n  readonly type: \"exec\";\n  readonly user?: string | null;\n  readonly working_directory?: string | null;\n};\nexport const ClientRequest__LocalShellAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.Array(Schema.String),\n      env: Schema.optionalKey(\n        Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n      ),\n      timeout_ms: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ format: \"uint64\" })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"exec\").annotate({ title: \"ExecLocalShellActionType\" }),\n      user: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      working_directory: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"ExecLocalShellAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__LocalShellStatus = \"completed\" | \"in_progress\" | \"incomplete\";\nexport const ClientRequest__LocalShellStatus = Schema.Literals([\n  \"completed\",\n  \"in_progress\",\n  \"incomplete\",\n]);\n\nexport type ClientRequest__LoginAccountParams =\n  | { readonly apiKey: string; readonly type: \"apiKey\" }\n  | { readonly codexStreamlinedLogin?: boolean; readonly type: \"chatgpt\" }\n  | { readonly type: \"chatgptDeviceCode\" }\n  | {\n      readonly accessToken: string;\n      readonly chatgptAccountId: string;\n      readonly chatgptPlanType?: string | null;\n      readonly type: \"chatgptAuthTokens\";\n    };\nexport const ClientRequest__LoginAccountParams = Schema.Union(\n  [\n    Schema.Struct({\n      apiKey: Schema.String,\n      type: Schema.Literal(\"apiKey\").annotate({ title: \"ApiKeyLoginAccountParamsType\" }),\n    }).annotate({ title: \"ApiKeyLoginAccountParams\" }),\n    Schema.Struct({\n      codexStreamlinedLogin: Schema.optionalKey(Schema.Boolean),\n      type: Schema.Literal(\"chatgpt\").annotate({ title: \"ChatgptLoginAccountParamsType\" }),\n    }).annotate({ title: \"ChatgptLoginAccountParams\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"chatgptDeviceCode\").annotate({\n        title: \"ChatgptDeviceCodeLoginAccountParamsType\",\n      }),\n    }).annotate({ title: \"ChatgptDeviceCodeLoginAccountParams\" }),\n    Schema.Struct({\n      accessToken: Schema.String.annotate({\n        description:\n          \"Access token (JWT) supplied by the client. This token is used for backend API requests and email extraction.\",\n      }),\n      chatgptAccountId: Schema.String.annotate({\n        description: \"Workspace/account identifier supplied by the client.\",\n      }),\n      chatgptPlanType: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"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`.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"chatgptAuthTokens\").annotate({\n        title: \"ChatgptAuthTokensLoginAccountParamsType\",\n      }),\n    }).annotate({\n      title: \"ChatgptAuthTokensLoginAccountParams\",\n      description:\n        \"[UNSTABLE] FOR OPENAI INTERNAL USE ONLY - DO NOT USE. The access token must contain the same scopes that Codex-managed ChatGPT auth tokens have.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__MarketplaceAddParams = {\n  readonly refName?: string | null;\n  readonly source: string;\n  readonly sparsePaths?: ReadonlyArray<string> | null;\n};\nexport const ClientRequest__MarketplaceAddParams = Schema.Struct({\n  refName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  source: Schema.String,\n  sparsePaths: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n});\n\nexport type ClientRequest__MarketplaceRemoveParams = { readonly marketplaceName: string };\nexport const ClientRequest__MarketplaceRemoveParams = Schema.Struct({\n  marketplaceName: Schema.String,\n});\n\nexport type ClientRequest__MarketplaceUpgradeParams = { readonly marketplaceName?: string | null };\nexport const ClientRequest__MarketplaceUpgradeParams = Schema.Struct({\n  marketplaceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__McpResourceReadParams = {\n  readonly server: string;\n  readonly threadId?: string | null;\n  readonly uri: string;\n};\nexport const ClientRequest__McpResourceReadParams = Schema.Struct({\n  server: Schema.String,\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  uri: Schema.String,\n});\n\nexport type ClientRequest__McpServerMigration = { readonly name: string };\nexport const ClientRequest__McpServerMigration = Schema.Struct({ name: Schema.String });\n\nexport type ClientRequest__McpServerOauthLoginParams = {\n  readonly name: string;\n  readonly scopes?: ReadonlyArray<string> | null;\n  readonly timeoutSecs?: number | null;\n};\nexport const ClientRequest__McpServerOauthLoginParams = Schema.Struct({\n  name: Schema.String,\n  scopes: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  timeoutSecs: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n});\n\nexport type ClientRequest__McpServerStatusDetail = \"full\" | \"toolsAndAuthOnly\";\nexport const ClientRequest__McpServerStatusDetail = Schema.Literals([\"full\", \"toolsAndAuthOnly\"]);\n\nexport type ClientRequest__McpServerToolCallParams = {\n  readonly _meta?: unknown;\n  readonly arguments?: unknown;\n  readonly server: string;\n  readonly threadId: string;\n  readonly tool: string;\n};\nexport const ClientRequest__McpServerToolCallParams = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  arguments: Schema.optionalKey(Schema.Unknown),\n  server: Schema.String,\n  threadId: Schema.String,\n  tool: Schema.String,\n});\n\nexport type ClientRequest__MergeStrategy = \"replace\" | \"upsert\";\nexport const ClientRequest__MergeStrategy = Schema.Literals([\"replace\", \"upsert\"]);\n\nexport type ClientRequest__MessagePhase = \"commentary\" | \"final_answer\";\nexport const ClientRequest__MessagePhase = Schema.Literals([\"commentary\", \"final_answer\"]).annotate(\n  {\n    description:\n      'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n  },\n);\n\nexport type ClientRequest__ModeKind = \"plan\" | \"default\";\nexport const ClientRequest__ModeKind = Schema.Literals([\"plan\", \"default\"]).annotate({\n  description: \"Initial collaboration mode to use when the TUI starts.\",\n});\n\nexport type ClientRequest__ModelListParams = {\n  readonly cursor?: string | null;\n  readonly includeHidden?: boolean | null;\n  readonly limit?: number | null;\n};\nexport const ClientRequest__ModelListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  includeHidden: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"When true, include models that are hidden from the default picker list.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__ModelProviderCapabilitiesReadParams = {};\nexport const ClientRequest__ModelProviderCapabilitiesReadParams = Schema.Struct({});\n\nexport type ClientRequest__PermissionProfileListParams = {\n  readonly cursor?: string | null;\n  readonly cwd?: string | null;\n  readonly limit?: number | null;\n};\nexport const ClientRequest__PermissionProfileListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional working directory to resolve project config layers.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to the full result set.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__Personality = \"none\" | \"friendly\" | \"pragmatic\";\nexport const ClientRequest__Personality = Schema.Literals([\"none\", \"friendly\", \"pragmatic\"]);\n\nexport type ClientRequest__PluginListMarketplaceKind =\n  | \"local\"\n  | \"vertical\"\n  | \"workspace-directory\"\n  | \"shared-with-me\";\nexport const ClientRequest__PluginListMarketplaceKind = Schema.Literals([\n  \"local\",\n  \"vertical\",\n  \"workspace-directory\",\n  \"shared-with-me\",\n]);\n\nexport type ClientRequest__PluginShareCheckoutParams = { readonly remotePluginId: string };\nexport const ClientRequest__PluginShareCheckoutParams = Schema.Struct({\n  remotePluginId: Schema.String,\n});\n\nexport type ClientRequest__PluginShareDeleteParams = { readonly remotePluginId: string };\nexport const ClientRequest__PluginShareDeleteParams = Schema.Struct({\n  remotePluginId: Schema.String,\n});\n\nexport type ClientRequest__PluginShareDiscoverability = \"LISTED\" | \"UNLISTED\" | \"PRIVATE\";\nexport const ClientRequest__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type ClientRequest__PluginShareListParams = {};\nexport const ClientRequest__PluginShareListParams = Schema.Struct({});\n\nexport type ClientRequest__PluginSharePrincipalType = \"user\" | \"group\" | \"workspace\";\nexport const ClientRequest__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type ClientRequest__PluginShareTargetRole = \"reader\" | \"editor\";\nexport const ClientRequest__PluginShareTargetRole = Schema.Literals([\"reader\", \"editor\"]);\n\nexport type ClientRequest__PluginShareUpdateDiscoverability = \"UNLISTED\" | \"PRIVATE\";\nexport const ClientRequest__PluginShareUpdateDiscoverability = Schema.Literals([\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type ClientRequest__PluginSkillReadParams = {\n  readonly remoteMarketplaceName: string;\n  readonly remotePluginId: string;\n  readonly skillName: string;\n};\nexport const ClientRequest__PluginSkillReadParams = Schema.Struct({\n  remoteMarketplaceName: Schema.String,\n  remotePluginId: Schema.String,\n  skillName: Schema.String,\n});\n\nexport type ClientRequest__PluginUninstallParams = { readonly pluginId: string };\nexport const ClientRequest__PluginUninstallParams = Schema.Struct({ pluginId: Schema.String });\n\nexport type ClientRequest__PluginsMigration = {\n  readonly marketplaceName: string;\n  readonly pluginNames: ReadonlyArray<string>;\n};\nexport const ClientRequest__PluginsMigration = Schema.Struct({\n  marketplaceName: Schema.String,\n  pluginNames: Schema.Array(Schema.String),\n});\n\nexport type ClientRequest__ReasoningEffort = string;\nexport const ClientRequest__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type ClientRequest__ReasoningItemContent =\n  | { readonly text: string; readonly type: \"reasoning_text\" }\n  | { readonly text: string; readonly type: \"text\" };\nexport const ClientRequest__ReasoningItemContent = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"reasoning_text\").annotate({\n        title: \"ReasoningTextReasoningItemContentType\",\n      }),\n    }).annotate({ title: \"ReasoningTextReasoningItemContent\" }),\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"text\").annotate({ title: \"TextReasoningItemContentType\" }),\n    }).annotate({ title: \"TextReasoningItemContent\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__ReasoningItemReasoningSummary = {\n  readonly text: string;\n  readonly type: \"summary_text\";\n};\nexport const ClientRequest__ReasoningItemReasoningSummary = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"summary_text\").annotate({\n        title: \"SummaryTextReasoningItemReasoningSummaryType\",\n      }),\n    }).annotate({ title: \"SummaryTextReasoningItemReasoningSummary\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"none\";\nexport const ClientRequest__ReasoningSummary = Schema.Union(\n  [\n    Schema.Literals([\"auto\", \"concise\", \"detailed\"]),\n    Schema.Literal(\"none\").annotate({ description: \"Option to disable reasoning summaries.\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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\",\n});\n\nexport type ClientRequest__RequestId = string | number;\nexport const ClientRequest__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type ClientRequest__ResponsesApiWebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"open_page\"; readonly url?: string | null }\n  | {\n      readonly pattern?: string | null;\n      readonly type: \"find_in_page\";\n      readonly url?: string | null;\n    }\n  | { readonly type: \"other\" };\nexport const ClientRequest__ResponsesApiWebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchResponsesApiWebSearchActionType\" }),\n    }).annotate({ title: \"SearchResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"open_page\").annotate({\n        title: \"OpenPageResponsesApiWebSearchActionType\",\n      }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"find_in_page\").annotate({\n        title: \"FindInPageResponsesApiWebSearchActionType\",\n      }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherResponsesApiWebSearchActionType\" }),\n    }).annotate({ title: \"OtherResponsesApiWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__ReviewDelivery = \"inline\" | \"detached\";\nexport const ClientRequest__ReviewDelivery = Schema.Literals([\"inline\", \"detached\"]);\n\nexport type ClientRequest__ReviewTarget =\n  | { readonly type: \"uncommittedChanges\" }\n  | { readonly branch: string; readonly type: \"baseBranch\" }\n  | { readonly sha: string; readonly title?: string | null; readonly type: \"commit\" }\n  | { readonly instructions: string; readonly type: \"custom\" };\nexport const ClientRequest__ReviewTarget = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"uncommittedChanges\").annotate({\n        title: \"UncommittedChangesReviewTargetType\",\n      }),\n    }).annotate({\n      title: \"UncommittedChangesReviewTarget\",\n      description: \"Review the working tree: staged, unstaged, and untracked files.\",\n    }),\n    Schema.Struct({\n      branch: Schema.String,\n      type: Schema.Literal(\"baseBranch\").annotate({ title: \"BaseBranchReviewTargetType\" }),\n    }).annotate({\n      title: \"BaseBranchReviewTarget\",\n      description: \"Review changes between the current branch and the given base branch.\",\n    }),\n    Schema.Struct({\n      sha: Schema.String,\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Optional human-readable label (e.g., commit subject) for UIs.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"commit\").annotate({ title: \"CommitReviewTargetType\" }),\n    }).annotate({\n      title: \"CommitReviewTarget\",\n      description: \"Review the changes introduced by a specific commit.\",\n    }),\n    Schema.Struct({\n      instructions: Schema.String,\n      type: Schema.Literal(\"custom\").annotate({ title: \"CustomReviewTargetType\" }),\n    }).annotate({\n      title: \"CustomReviewTarget\",\n      description: \"Arbitrary instructions, equivalent to the old free-form prompt.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__SandboxMode = \"read-only\" | \"workspace-write\" | \"danger-full-access\";\nexport const ClientRequest__SandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\n\nexport type ClientRequest__SessionMigration = {\n  readonly cwd: string;\n  readonly path: string;\n  readonly title?: string | null;\n};\nexport const ClientRequest__SessionMigration = Schema.Struct({\n  cwd: Schema.String,\n  path: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__SkillsListParams = {\n  readonly cwds?: ReadonlyArray<string>;\n  readonly forceReload?: boolean;\n};\nexport const ClientRequest__SkillsListParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({\n      description: \"When empty, defaults to the current session working directory.\",\n    }),\n  ),\n  forceReload: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"When true, bypass the skills cache and re-scan skills from disk.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__SortDirection = \"asc\" | \"desc\";\nexport const ClientRequest__SortDirection = Schema.Literals([\"asc\", \"desc\"]);\n\nexport type ClientRequest__SubagentMigration = { readonly name: string };\nexport const ClientRequest__SubagentMigration = Schema.Struct({ name: Schema.String });\n\nexport type ClientRequest__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const ClientRequest__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__ThreadApproveGuardianDeniedActionParams = {\n  readonly event: unknown;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadApproveGuardianDeniedActionParams = Schema.Struct({\n  event: Schema.Unknown.annotate({\n    description: \"Serialized `codex_protocol::protocol::GuardianAssessmentEvent`.\",\n  }),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadArchiveParams = { readonly threadId: string };\nexport const ClientRequest__ThreadArchiveParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__ThreadCompactStartParams = { readonly threadId: string };\nexport const ClientRequest__ThreadCompactStartParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__ThreadDeleteParams = { readonly threadId: string };\nexport const ClientRequest__ThreadDeleteParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__ThreadGoalClearParams = { readonly threadId: string };\nexport const ClientRequest__ThreadGoalClearParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__ThreadGoalGetParams = { readonly threadId: string };\nexport const ClientRequest__ThreadGoalGetParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__ThreadGoalStatus =\n  | \"active\"\n  | \"paused\"\n  | \"blocked\"\n  | \"usageLimited\"\n  | \"budgetLimited\"\n  | \"complete\";\nexport const ClientRequest__ThreadGoalStatus = Schema.Literals([\n  \"active\",\n  \"paused\",\n  \"blocked\",\n  \"usageLimited\",\n  \"budgetLimited\",\n  \"complete\",\n]);\n\nexport type ClientRequest__ThreadInjectItemsParams = {\n  readonly items: ReadonlyArray<unknown>;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadInjectItemsParams = Schema.Struct({\n  items: Schema.Array(Schema.Unknown).annotate({\n    description: \"Raw Responses API items to append to the thread's model-visible history.\",\n  }),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadListCwdFilter = string | ReadonlyArray<string>;\nexport const ClientRequest__ThreadListCwdFilter = Schema.Union([\n  Schema.String,\n  Schema.Array(Schema.String),\n]);\n\nexport type ClientRequest__ThreadLoadedListParams = {\n  readonly cursor?: string | null;\n  readonly limit?: number | null;\n};\nexport const ClientRequest__ThreadLoadedListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to no limit.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__ThreadMetadataGitInfoUpdateParams = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const ClientRequest__ThreadMetadataGitInfoUpdateParams = Schema.Struct({\n  branch: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Omit to leave the stored branch unchanged, set to `null` to clear it, or provide a non-empty string to replace it.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  originUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Omit to leave the stored origin URL unchanged, set to `null` to clear it, or provide a non-empty string to replace it.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sha: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Omit to leave the stored commit unchanged, set to `null` to clear it, or provide a non-empty string to replace it.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__ThreadReadParams = {\n  readonly includeTurns?: boolean;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadReadParams = Schema.Struct({\n  includeTurns: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"When true, include turns and their items from rollout history.\",\n    }),\n  ),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadRollbackParams = {\n  readonly numTurns: number;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadRollbackParams = Schema.Struct({\n  numTurns: Schema.Number.annotate({\n    description:\n      \"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.\",\n    format: \"uint32\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadSetNameParams = {\n  readonly name: string;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadSetNameParams = Schema.Struct({\n  name: Schema.String,\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadShellCommandParams = {\n  readonly command: string;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadShellCommandParams = Schema.Struct({\n  command: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadSortKey = \"created_at\" | \"updated_at\";\nexport const ClientRequest__ThreadSortKey = Schema.Literals([\"created_at\", \"updated_at\"]);\n\nexport type ClientRequest__ThreadSource = string;\nexport const ClientRequest__ThreadSource = Schema.String;\n\nexport type ClientRequest__ThreadSourceKind =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"subAgent\"\n  | \"subAgentReview\"\n  | \"subAgentCompact\"\n  | \"subAgentThreadSpawn\"\n  | \"subAgentOther\"\n  | \"unknown\";\nexport const ClientRequest__ThreadSourceKind = Schema.Literals([\n  \"cli\",\n  \"vscode\",\n  \"exec\",\n  \"appServer\",\n  \"subAgent\",\n  \"subAgentReview\",\n  \"subAgentCompact\",\n  \"subAgentThreadSpawn\",\n  \"subAgentOther\",\n  \"unknown\",\n]);\n\nexport type ClientRequest__ThreadStartSource = \"startup\" | \"clear\";\nexport const ClientRequest__ThreadStartSource = Schema.Literals([\"startup\", \"clear\"]);\n\nexport type ClientRequest__ThreadUnarchiveParams = { readonly threadId: string };\nexport const ClientRequest__ThreadUnarchiveParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__ThreadUnsubscribeParams = { readonly threadId: string };\nexport const ClientRequest__ThreadUnsubscribeParams = Schema.Struct({ threadId: Schema.String });\n\nexport type ClientRequest__TurnInterruptParams = {\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ClientRequest__TurnInterruptParams = Schema.Struct({\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ClientRequest__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const ClientRequest__TurnItemsView = Schema.Literals([\"notLoaded\", \"summary\", \"full\"]);\n\nexport type ClientRequest__WindowsSandboxSetupMode = \"elevated\" | \"unelevated\";\nexport const ClientRequest__WindowsSandboxSetupMode = Schema.Literals([\"elevated\", \"unelevated\"]);\n\nexport type CommandExecutionRequestApprovalParams__AbsolutePathBuf = string;\nexport const CommandExecutionRequestApprovalParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type CommandExecutionRequestApprovalParams__AdditionalNetworkPermissions = {\n  readonly enabled?: boolean | null;\n};\nexport const CommandExecutionRequestApprovalParams__AdditionalNetworkPermissions = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type CommandExecutionRequestApprovalParams__FileSystemAccessMode = \"read\" | \"write\" | \"deny\";\nexport const CommandExecutionRequestApprovalParams__FileSystemAccessMode = Schema.Literals([\n  \"read\",\n  \"write\",\n  \"deny\",\n]);\n\nexport type CommandExecutionRequestApprovalParams__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const CommandExecutionRequestApprovalParams__FileSystemSpecialPath = Schema.Union(\n  [\n    Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n      title: \"RootFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n      title: \"MinimalFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"project_roots\"),\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n    Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n      title: \"TmpdirFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n      title: \"SlashTmpFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"unknown\"),\n      path: Schema.String,\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type CommandExecutionRequestApprovalParams__NetworkApprovalProtocol =\n  | \"http\"\n  | \"https\"\n  | \"socks5Tcp\"\n  | \"socks5Udp\";\nexport const CommandExecutionRequestApprovalParams__NetworkApprovalProtocol = Schema.Literals([\n  \"http\",\n  \"https\",\n  \"socks5Tcp\",\n  \"socks5Udp\",\n]);\n\nexport type CommandExecutionRequestApprovalParams__NetworkPolicyRuleAction = \"allow\" | \"deny\";\nexport const CommandExecutionRequestApprovalParams__NetworkPolicyRuleAction = Schema.Literals([\n  \"allow\",\n  \"deny\",\n]);\n\nexport type CommandExecutionRequestApprovalResponse__NetworkPolicyRuleAction = \"allow\" | \"deny\";\nexport const CommandExecutionRequestApprovalResponse__NetworkPolicyRuleAction = Schema.Literals([\n  \"allow\",\n  \"deny\",\n]);\n\nexport type DynamicToolCallResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const DynamicToolCallResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ExecCommandApprovalParams__ParsedCommand =\n  | { readonly cmd: string; readonly name: string; readonly path: string; readonly type: \"read\" }\n  | { readonly cmd: string; readonly path?: string | null; readonly type: \"list_files\" }\n  | {\n      readonly cmd: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly cmd: string; readonly type: \"unknown\" };\nexport const ExecCommandApprovalParams__ParsedCommand = Schema.Union(\n  [\n    Schema.Struct({\n      cmd: Schema.String,\n      name: Schema.String,\n      path: Schema.String.annotate({\n        description:\n          \"(Best effort) Path to the file being read by the command. When possible, this is an absolute path, though when relative, it should be resolved against the `cwd`` that will be used to run the command to derive the absolute path.\",\n      }),\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadParsedCommandType\" }),\n    }).annotate({ title: \"ReadParsedCommand\" }),\n    Schema.Struct({\n      cmd: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"list_files\").annotate({ title: \"ListFilesParsedCommandType\" }),\n    }).annotate({ title: \"ListFilesParsedCommand\" }),\n    Schema.Struct({\n      cmd: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchParsedCommandType\" }),\n    }).annotate({ title: \"SearchParsedCommand\" }),\n    Schema.Struct({\n      cmd: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownParsedCommandType\" }),\n    }).annotate({ title: \"UnknownParsedCommand\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ExecCommandApprovalParams__ThreadId = string;\nexport const ExecCommandApprovalParams__ThreadId = Schema.String;\n\nexport type ExecCommandApprovalResponse__NetworkPolicyRuleAction = \"allow\" | \"deny\";\nexport const ExecCommandApprovalResponse__NetworkPolicyRuleAction = Schema.Literals([\n  \"allow\",\n  \"deny\",\n]);\n\nexport type FileChangeRequestApprovalResponse__FileChangeApprovalDecision =\n  | \"accept\"\n  | \"acceptForSession\"\n  | \"decline\"\n  | \"cancel\";\nexport const FileChangeRequestApprovalResponse__FileChangeApprovalDecision = Schema.Literals([\n  \"accept\",\n  \"acceptForSession\",\n  \"decline\",\n  \"cancel\",\n]);\n\nexport type FuzzyFileSearchResponse__FuzzyFileSearchMatchType = \"file\" | \"directory\";\nexport const FuzzyFileSearchResponse__FuzzyFileSearchMatchType = Schema.Literals([\n  \"file\",\n  \"directory\",\n]);\n\nexport type FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchMatchType =\n  | \"file\"\n  | \"directory\";\nexport const FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchMatchType = Schema.Literals([\n  \"file\",\n  \"directory\",\n]);\n\nexport type JSONRPCError__JSONRPCErrorError = {\n  readonly code: number;\n  readonly data?: unknown;\n  readonly message: string;\n};\nexport const JSONRPCError__JSONRPCErrorError = Schema.Struct({\n  code: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  data: Schema.optionalKey(Schema.Unknown),\n  message: Schema.String,\n});\n\nexport type JSONRPCError__RequestId = string | number;\nexport const JSONRPCError__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type JSONRPCMessage__JSONRPCErrorError = {\n  readonly code: number;\n  readonly data?: unknown;\n  readonly message: string;\n};\nexport const JSONRPCMessage__JSONRPCErrorError = Schema.Struct({\n  code: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  data: Schema.optionalKey(Schema.Unknown),\n  message: Schema.String,\n});\n\nexport type JSONRPCMessage__JSONRPCNotification = {\n  readonly method: string;\n  readonly params?: unknown;\n};\nexport const JSONRPCMessage__JSONRPCNotification = Schema.Struct({\n  method: Schema.String,\n  params: Schema.optionalKey(Schema.Unknown),\n}).annotate({ description: \"A notification which does not expect a response.\" });\n\nexport type JSONRPCMessage__RequestId = string | number;\nexport const JSONRPCMessage__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type JSONRPCMessage__W3cTraceContext = {\n  readonly traceparent?: string | null;\n  readonly tracestate?: string | null;\n};\nexport const JSONRPCMessage__W3cTraceContext = Schema.Struct({\n  traceparent: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  tracestate: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type JSONRPCRequest__RequestId = string | number;\nexport const JSONRPCRequest__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type JSONRPCRequest__W3cTraceContext = {\n  readonly traceparent?: string | null;\n  readonly tracestate?: string | null;\n};\nexport const JSONRPCRequest__W3cTraceContext = Schema.Struct({\n  traceparent: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  tracestate: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type JSONRPCResponse__RequestId = string | number;\nexport const JSONRPCResponse__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type McpServerElicitationRequestParams__McpElicitationArrayType = \"array\";\nexport const McpServerElicitationRequestParams__McpElicitationArrayType = Schema.Literal(\"array\");\n\nexport type McpServerElicitationRequestParams__McpElicitationBooleanType = \"boolean\";\nexport const McpServerElicitationRequestParams__McpElicitationBooleanType =\n  Schema.Literal(\"boolean\");\n\nexport type McpServerElicitationRequestParams__McpElicitationConstOption = {\n  readonly const: string;\n  readonly title: string;\n};\nexport const McpServerElicitationRequestParams__McpElicitationConstOption = Schema.Struct({\n  const: Schema.String,\n  title: Schema.String,\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationNumberType = \"number\" | \"integer\";\nexport const McpServerElicitationRequestParams__McpElicitationNumberType = Schema.Literals([\n  \"number\",\n  \"integer\",\n]);\n\nexport type McpServerElicitationRequestParams__McpElicitationObjectType = \"object\";\nexport const McpServerElicitationRequestParams__McpElicitationObjectType = Schema.Literal(\"object\");\n\nexport type McpServerElicitationRequestParams__McpElicitationStringFormat =\n  | \"email\"\n  | \"uri\"\n  | \"date\"\n  | \"date-time\";\nexport const McpServerElicitationRequestParams__McpElicitationStringFormat = Schema.Literals([\n  \"email\",\n  \"uri\",\n  \"date\",\n  \"date-time\",\n]);\n\nexport type McpServerElicitationRequestParams__McpElicitationStringType = \"string\";\nexport const McpServerElicitationRequestParams__McpElicitationStringType = Schema.Literal(\"string\");\n\nexport type McpServerElicitationRequestResponse__McpServerElicitationAction =\n  | \"accept\"\n  | \"decline\"\n  | \"cancel\";\nexport const McpServerElicitationRequestResponse__McpServerElicitationAction = Schema.Literals([\n  \"accept\",\n  \"decline\",\n  \"cancel\",\n]);\n\nexport type PermissionsRequestApprovalParams__AbsolutePathBuf = string;\nexport const PermissionsRequestApprovalParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type PermissionsRequestApprovalParams__AdditionalNetworkPermissions = {\n  readonly enabled?: boolean | null;\n};\nexport const PermissionsRequestApprovalParams__AdditionalNetworkPermissions = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type PermissionsRequestApprovalParams__FileSystemAccessMode = \"read\" | \"write\" | \"deny\";\nexport const PermissionsRequestApprovalParams__FileSystemAccessMode = Schema.Literals([\n  \"read\",\n  \"write\",\n  \"deny\",\n]);\n\nexport type PermissionsRequestApprovalParams__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const PermissionsRequestApprovalParams__FileSystemSpecialPath = Schema.Union(\n  [\n    Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n      title: \"RootFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n      title: \"MinimalFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"project_roots\"),\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n    Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n      title: \"TmpdirFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n      title: \"SlashTmpFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"unknown\"),\n      path: Schema.String,\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type PermissionsRequestApprovalResponse__AbsolutePathBuf = string;\nexport const PermissionsRequestApprovalResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type PermissionsRequestApprovalResponse__AdditionalNetworkPermissions = {\n  readonly enabled?: boolean | null;\n};\nexport const PermissionsRequestApprovalResponse__AdditionalNetworkPermissions = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type PermissionsRequestApprovalResponse__FileSystemAccessMode = \"read\" | \"write\" | \"deny\";\nexport const PermissionsRequestApprovalResponse__FileSystemAccessMode = Schema.Literals([\n  \"read\",\n  \"write\",\n  \"deny\",\n]);\n\nexport type PermissionsRequestApprovalResponse__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const PermissionsRequestApprovalResponse__FileSystemSpecialPath = Schema.Union(\n  [\n    Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n      title: \"RootFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n      title: \"MinimalFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"project_roots\"),\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n    Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n      title: \"TmpdirFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n      title: \"SlashTmpFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"unknown\"),\n      path: Schema.String,\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__AbsolutePathBuf = string;\nexport const ServerNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type ServerNotification__AccountLoginCompletedNotification = {\n  readonly error?: string | null;\n  readonly loginId?: string | null;\n  readonly success: boolean;\n};\nexport const ServerNotification__AccountLoginCompletedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  loginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  success: Schema.Boolean,\n});\n\nexport type ServerNotification__ActivePermissionProfile = {\n  readonly extends?: string | null;\n  readonly id: string;\n};\nexport const ServerNotification__ActivePermissionProfile = Schema.Struct({\n  extends: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Parent profile identifier from the selected permissions profile's `extends` setting, when present.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({\n    description:\n      \"Identifier from `default_permissions` or the implicit built-in default, such as `:workspace` or a user-defined `[permissions.<id>]` profile.\",\n  }),\n});\n\nexport type ServerNotification__AdditionalNetworkPermissions = {\n  readonly enabled?: boolean | null;\n};\nexport const ServerNotification__AdditionalNetworkPermissions = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type ServerNotification__AgentMessageDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__AgentMessageDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__AgentPath = string;\nexport const ServerNotification__AgentPath = Schema.String;\n\nexport type ServerNotification__AppBranding = {\n  readonly category?: string | null;\n  readonly developer?: string | null;\n  readonly isDiscoverableApp: boolean;\n  readonly privacyPolicy?: string | null;\n  readonly termsOfService?: string | null;\n  readonly website?: string | null;\n};\nexport const ServerNotification__AppBranding = Schema.Struct({\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developer: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  isDiscoverableApp: Schema.Boolean,\n  privacyPolicy: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfService: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  website: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ description: \"EXPERIMENTAL - app metadata returned by app-list APIs.\" });\n\nexport type ServerNotification__AppReview = { readonly status: string };\nexport const ServerNotification__AppReview = Schema.Struct({ status: Schema.String });\n\nexport type ServerNotification__AppScreenshot = {\n  readonly fileId?: string | null;\n  readonly url?: string | null;\n  readonly userPrompt: string;\n};\nexport const ServerNotification__AppScreenshot = Schema.Struct({\n  fileId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  userPrompt: Schema.String,\n});\n\nexport type ServerNotification__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const ServerNotification__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type ServerNotification__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const ServerNotification__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__AuthMode =\n  | \"apikey\"\n  | \"chatgpt\"\n  | \"chatgptAuthTokens\"\n  | \"agentIdentity\"\n  | \"personalAccessToken\";\nexport const ServerNotification__AuthMode = Schema.Literals([\n  \"apikey\",\n  \"chatgpt\",\n  \"chatgptAuthTokens\",\n  \"agentIdentity\",\n  \"personalAccessToken\",\n]).annotate({ description: \"Authentication mode for OpenAI-backed providers.\" });\n\nexport type ServerNotification__AutoReviewDecisionSource = \"agent\";\nexport const ServerNotification__AutoReviewDecisionSource = Schema.Literal(\"agent\").annotate({\n  description: \"[UNSTABLE] Source that produced a terminal approval auto-review decision.\",\n});\n\nexport type ServerNotification__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const ServerNotification__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type ServerNotification__CommandExecOutputDeltaNotification = {\n  readonly capReached: boolean;\n  readonly deltaBase64: string;\n  readonly processId: string;\n  readonly stream: \"stdout\" | \"stderr\";\n};\nexport const ServerNotification__CommandExecOutputDeltaNotification = Schema.Struct({\n  capReached: Schema.Boolean.annotate({\n    description:\n      \"`true` on the final streamed chunk for a stream when `outputBytesCap` truncated later output on that stream.\",\n  }),\n  deltaBase64: Schema.String.annotate({ description: \"Base64-encoded output bytes.\" }),\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n  stream: Schema.Literals([\"stdout\", \"stderr\"]).annotate({\n    description: \"Stream label for `command/exec/outputDelta` notifications.\",\n  }),\n}).annotate({\n  description:\n    \"Base64-encoded output chunk emitted for a streaming `command/exec` request.\\n\\nThese notifications are connection-scoped. If the originating connection closes, the server terminates the process.\",\n});\n\nexport type ServerNotification__CommandExecutionOutputDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__CommandExecutionOutputDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const ServerNotification__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type ServerNotification__ContextCompactedNotification = {\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ContextCompactedNotification = Schema.Struct({\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ description: \"Deprecated: Use `ContextCompaction` item type instead.\" });\n\nexport type ServerNotification__CreditsSnapshot = {\n  readonly balance?: string | null;\n  readonly hasCredits: boolean;\n  readonly unlimited: boolean;\n};\nexport const ServerNotification__CreditsSnapshot = Schema.Struct({\n  balance: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  hasCredits: Schema.Boolean,\n  unlimited: Schema.Boolean,\n});\n\nexport type ServerNotification__DeprecationNoticeNotification = {\n  readonly details?: string | null;\n  readonly summary: string;\n};\nexport const ServerNotification__DeprecationNoticeNotification = Schema.Struct({\n  details: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional extra guidance, such as migration steps or rationale.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  summary: Schema.String.annotate({ description: \"Concise summary of what is deprecated.\" }),\n});\n\nexport type ServerNotification__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const ServerNotification__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const ServerNotification__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type ServerNotification__ExternalAgentConfigImportCompletedNotification = {};\nexport const ServerNotification__ExternalAgentConfigImportCompletedNotification = Schema.Struct({});\n\nexport type ServerNotification__FileChangeOutputDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__FileChangeOutputDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  description:\n    \"Deprecated legacy notification for `apply_patch` textual output.\\n\\nThe server no longer emits this notification.\",\n});\n\nexport type ServerNotification__FileSystemAccessMode = \"read\" | \"write\" | \"deny\";\nexport const ServerNotification__FileSystemAccessMode = Schema.Literals([\"read\", \"write\", \"deny\"]);\n\nexport type ServerNotification__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const ServerNotification__FileSystemSpecialPath = Schema.Union(\n  [\n    Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n      title: \"RootFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n      title: \"MinimalFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"project_roots\"),\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n    Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n      title: \"TmpdirFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n      title: \"SlashTmpFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"unknown\"),\n      path: Schema.String,\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__FuzzyFileSearchMatchType = \"file\" | \"directory\";\nexport const ServerNotification__FuzzyFileSearchMatchType = Schema.Literals([\"file\", \"directory\"]);\n\nexport type ServerNotification__FuzzyFileSearchSessionCompletedNotification = {\n  readonly sessionId: string;\n};\nexport const ServerNotification__FuzzyFileSearchSessionCompletedNotification = Schema.Struct({\n  sessionId: Schema.String,\n});\n\nexport type ServerNotification__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const ServerNotification__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__GuardianApprovalReviewStatus =\n  | \"inProgress\"\n  | \"approved\"\n  | \"denied\"\n  | \"timedOut\"\n  | \"aborted\";\nexport const ServerNotification__GuardianApprovalReviewStatus = Schema.Literals([\n  \"inProgress\",\n  \"approved\",\n  \"denied\",\n  \"timedOut\",\n  \"aborted\",\n]).annotate({ description: \"[UNSTABLE] Lifecycle state for an approval auto-review.\" });\n\nexport type ServerNotification__GuardianCommandSource = \"shell\" | \"unifiedExec\";\nexport const ServerNotification__GuardianCommandSource = Schema.Literals([\"shell\", \"unifiedExec\"]);\n\nexport type ServerNotification__GuardianRiskLevel = \"low\" | \"medium\" | \"high\" | \"critical\";\nexport const ServerNotification__GuardianRiskLevel = Schema.Literals([\n  \"low\",\n  \"medium\",\n  \"high\",\n  \"critical\",\n]).annotate({ description: \"[UNSTABLE] Risk level assigned by approval auto-review.\" });\n\nexport type ServerNotification__GuardianUserAuthorization = \"unknown\" | \"low\" | \"medium\" | \"high\";\nexport const ServerNotification__GuardianUserAuthorization = Schema.Literals([\n  \"unknown\",\n  \"low\",\n  \"medium\",\n  \"high\",\n]).annotate({ description: \"[UNSTABLE] Authorization level assigned by approval auto-review.\" });\n\nexport type ServerNotification__GuardianWarningNotification = {\n  readonly message: string;\n  readonly threadId: string;\n};\nexport const ServerNotification__GuardianWarningNotification = Schema.Struct({\n  message: Schema.String.annotate({\n    description: \"Concise guardian warning message for the user.\",\n  }),\n  threadId: Schema.String.annotate({ description: \"Thread target for the guardian warning.\" }),\n});\n\nexport type ServerNotification__HookEventName =\n  | \"preToolUse\"\n  | \"permissionRequest\"\n  | \"postToolUse\"\n  | \"preCompact\"\n  | \"postCompact\"\n  | \"sessionStart\"\n  | \"userPromptSubmit\"\n  | \"subagentStart\"\n  | \"subagentStop\"\n  | \"stop\";\nexport const ServerNotification__HookEventName = Schema.Literals([\n  \"preToolUse\",\n  \"permissionRequest\",\n  \"postToolUse\",\n  \"preCompact\",\n  \"postCompact\",\n  \"sessionStart\",\n  \"userPromptSubmit\",\n  \"subagentStart\",\n  \"subagentStop\",\n  \"stop\",\n]);\n\nexport type ServerNotification__HookExecutionMode = \"sync\" | \"async\";\nexport const ServerNotification__HookExecutionMode = Schema.Literals([\"sync\", \"async\"]);\n\nexport type ServerNotification__HookHandlerType = \"command\" | \"prompt\" | \"agent\";\nexport const ServerNotification__HookHandlerType = Schema.Literals([\"command\", \"prompt\", \"agent\"]);\n\nexport type ServerNotification__HookOutputEntryKind =\n  | \"warning\"\n  | \"stop\"\n  | \"feedback\"\n  | \"context\"\n  | \"error\";\nexport const ServerNotification__HookOutputEntryKind = Schema.Literals([\n  \"warning\",\n  \"stop\",\n  \"feedback\",\n  \"context\",\n  \"error\",\n]);\n\nexport type ServerNotification__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const ServerNotification__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type ServerNotification__HookRunStatus =\n  | \"running\"\n  | \"completed\"\n  | \"failed\"\n  | \"blocked\"\n  | \"stopped\";\nexport const ServerNotification__HookRunStatus = Schema.Literals([\n  \"running\",\n  \"completed\",\n  \"failed\",\n  \"blocked\",\n  \"stopped\",\n]);\n\nexport type ServerNotification__HookScope = \"thread\" | \"turn\";\nexport const ServerNotification__HookScope = Schema.Literals([\"thread\", \"turn\"]);\n\nexport type ServerNotification__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const ServerNotification__ImageDetail = Schema.Literals([\"auto\", \"low\", \"high\", \"original\"]);\n\nexport type ServerNotification__McpServerOauthLoginCompletedNotification = {\n  readonly error?: string | null;\n  readonly name: string;\n  readonly success: boolean;\n};\nexport const ServerNotification__McpServerOauthLoginCompletedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  success: Schema.Boolean,\n});\n\nexport type ServerNotification__McpServerStartupState =\n  | \"starting\"\n  | \"ready\"\n  | \"failed\"\n  | \"cancelled\";\nexport const ServerNotification__McpServerStartupState = Schema.Literals([\n  \"starting\",\n  \"ready\",\n  \"failed\",\n  \"cancelled\",\n]);\n\nexport type ServerNotification__McpToolCallError = { readonly message: string };\nexport const ServerNotification__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type ServerNotification__McpToolCallProgressNotification = {\n  readonly itemId: string;\n  readonly message: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__McpToolCallProgressNotification = Schema.Struct({\n  itemId: Schema.String,\n  message: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const ServerNotification__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type ServerNotification__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const ServerNotification__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type ServerNotification__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const ServerNotification__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type ServerNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const ServerNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type ServerNotification__ModeKind = \"plan\" | \"default\";\nexport const ServerNotification__ModeKind = Schema.Literals([\"plan\", \"default\"]).annotate({\n  description: \"Initial collaboration mode to use when the TUI starts.\",\n});\n\nexport type ServerNotification__ModelRerouteReason = \"highRiskCyberActivity\";\nexport const ServerNotification__ModelRerouteReason = Schema.Literal(\"highRiskCyberActivity\");\n\nexport type ServerNotification__ModelVerification = \"trustedAccessForCyber\";\nexport const ServerNotification__ModelVerification = Schema.Literal(\"trustedAccessForCyber\");\n\nexport type ServerNotification__NetworkApprovalProtocol =\n  | \"http\"\n  | \"https\"\n  | \"socks5Tcp\"\n  | \"socks5Udp\";\nexport const ServerNotification__NetworkApprovalProtocol = Schema.Literals([\n  \"http\",\n  \"https\",\n  \"socks5Tcp\",\n  \"socks5Udp\",\n]);\n\nexport type ServerNotification__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const ServerNotification__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type ServerNotification__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const ServerNotification__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type ServerNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const ServerNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__Personality = \"none\" | \"friendly\" | \"pragmatic\";\nexport const ServerNotification__Personality = Schema.Literals([\"none\", \"friendly\", \"pragmatic\"]);\n\nexport type ServerNotification__PlanDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__PlanDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  description:\n    \"EXPERIMENTAL - proposed plan streaming deltas for plan items. Clients should not assume concatenated deltas match the completed plan item content.\",\n});\n\nexport type ServerNotification__PlanType =\n  | \"free\"\n  | \"go\"\n  | \"plus\"\n  | \"pro\"\n  | \"prolite\"\n  | \"team\"\n  | \"self_serve_business_usage_based\"\n  | \"business\"\n  | \"enterprise_cbp_usage_based\"\n  | \"enterprise\"\n  | \"edu\"\n  | \"unknown\";\nexport const ServerNotification__PlanType = Schema.Literals([\n  \"free\",\n  \"go\",\n  \"plus\",\n  \"pro\",\n  \"prolite\",\n  \"team\",\n  \"self_serve_business_usage_based\",\n  \"business\",\n  \"enterprise_cbp_usage_based\",\n  \"enterprise\",\n  \"edu\",\n  \"unknown\",\n]);\n\nexport type ServerNotification__ProcessExitedNotification = {\n  readonly exitCode: number;\n  readonly processHandle: string;\n  readonly stderr: string;\n  readonly stderrCapReached: boolean;\n  readonly stdout: string;\n  readonly stdoutCapReached: boolean;\n};\nexport const ServerNotification__ProcessExitedNotification = Schema.Struct({\n  exitCode: Schema.Number.annotate({ description: \"Process exit code.\", format: \"int32\" }).check(\n    Schema.isInt(),\n  ),\n  processHandle: Schema.String.annotate({\n    description: \"Client-supplied, connection-scoped `processHandle` from `process/spawn`.\",\n  }),\n  stderr: Schema.String.annotate({\n    description:\n      \"Buffered stderr capture.\\n\\nEmpty when stderr was streamed via `process/outputDelta`.\",\n  }),\n  stderrCapReached: Schema.Boolean.annotate({\n    description:\n      \"Whether stderr reached `outputBytesCap`.\\n\\nIn streaming mode, stderr is empty and cap state is also reported on the final stderr `process/outputDelta` notification.\",\n  }),\n  stdout: Schema.String.annotate({\n    description:\n      \"Buffered stdout capture.\\n\\nEmpty when stdout was streamed via `process/outputDelta`.\",\n  }),\n  stdoutCapReached: Schema.Boolean.annotate({\n    description:\n      \"Whether stdout reached `outputBytesCap`.\\n\\nIn streaming mode, stdout is empty and cap state is also reported on the final stdout `process/outputDelta` notification.\",\n  }),\n}).annotate({ description: \"Final process exit notification for `process/spawn`.\" });\n\nexport type ServerNotification__ProcessOutputDeltaNotification = {\n  readonly capReached: boolean;\n  readonly deltaBase64: string;\n  readonly processHandle: string;\n  readonly stream: \"stdout\" | \"stderr\";\n};\nexport const ServerNotification__ProcessOutputDeltaNotification = Schema.Struct({\n  capReached: Schema.Boolean.annotate({\n    description:\n      \"True on the final streamed chunk for this stream when output was truncated by `outputBytesCap`.\",\n  }),\n  deltaBase64: Schema.String.annotate({ description: \"Base64-encoded output bytes.\" }),\n  processHandle: Schema.String.annotate({\n    description: \"Client-supplied, connection-scoped `processHandle` from `process/spawn`.\",\n  }),\n  stream: Schema.Literals([\"stdout\", \"stderr\"]).annotate({\n    description: \"Stream label for `process/outputDelta` notifications.\",\n  }),\n}).annotate({\n  description: \"Base64-encoded output chunk emitted for a streaming `process/spawn` request.\",\n});\n\nexport type ServerNotification__RateLimitReachedType =\n  | \"rate_limit_reached\"\n  | \"workspace_owner_credits_depleted\"\n  | \"workspace_member_credits_depleted\"\n  | \"workspace_owner_usage_limit_reached\"\n  | \"workspace_member_usage_limit_reached\";\nexport const ServerNotification__RateLimitReachedType = Schema.Literals([\n  \"rate_limit_reached\",\n  \"workspace_owner_credits_depleted\",\n  \"workspace_member_credits_depleted\",\n  \"workspace_owner_usage_limit_reached\",\n  \"workspace_member_usage_limit_reached\",\n]);\n\nexport type ServerNotification__RateLimitWindow = {\n  readonly resetsAt?: number | null;\n  readonly usedPercent: number;\n  readonly windowDurationMins?: number | null;\n};\nexport const ServerNotification__RateLimitWindow = Schema.Struct({\n  resetsAt: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  usedPercent: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n  windowDurationMins: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n});\n\nexport type ServerNotification__RealtimeConversationVersion = \"v1\" | \"v2\";\nexport const ServerNotification__RealtimeConversationVersion = Schema.Literals([\"v1\", \"v2\"]);\n\nexport type ServerNotification__ReasoningEffort = string;\nexport const ServerNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type ServerNotification__ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"none\";\nexport const ServerNotification__ReasoningSummary = Schema.Union(\n  [\n    Schema.Literals([\"auto\", \"concise\", \"detailed\"]),\n    Schema.Literal(\"none\").annotate({ description: \"Option to disable reasoning summaries.\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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\",\n});\n\nexport type ServerNotification__ReasoningSummaryPartAddedNotification = {\n  readonly itemId: string;\n  readonly summaryIndex: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ReasoningSummaryPartAddedNotification = Schema.Struct({\n  itemId: Schema.String,\n  summaryIndex: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__ReasoningSummaryTextDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly summaryIndex: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ReasoningSummaryTextDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  summaryIndex: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__ReasoningTextDeltaNotification = {\n  readonly contentIndex: number;\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ReasoningTextDeltaNotification = Schema.Struct({\n  contentIndex: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__RemoteControlConnectionStatus =\n  | \"disabled\"\n  | \"connecting\"\n  | \"connected\"\n  | \"errored\";\nexport const ServerNotification__RemoteControlConnectionStatus = Schema.Literals([\n  \"disabled\",\n  \"connecting\",\n  \"connected\",\n  \"errored\",\n]);\n\nexport type ServerNotification__RequestId = string | number;\nexport const ServerNotification__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type ServerNotification__SkillsChangedNotification = {};\nexport const ServerNotification__SkillsChangedNotification = Schema.Struct({}).annotate({\n  description:\n    \"Notification emitted when watched local skill files change.\\n\\nTreat this as an invalidation signal and re-run `skills/list` with the client's current parameters when refreshed skill metadata is needed.\",\n});\n\nexport type ServerNotification__SpendControlLimitSnapshot = {\n  readonly limit: string;\n  readonly remainingPercent: number;\n  readonly resetsAt: number;\n  readonly used: string;\n};\nexport const ServerNotification__SpendControlLimitSnapshot = Schema.Struct({\n  limit: Schema.String,\n  remainingPercent: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n  resetsAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  used: Schema.String,\n});\n\nexport type ServerNotification__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const ServerNotification__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type ServerNotification__TerminalInteractionNotification = {\n  readonly itemId: string;\n  readonly processId: string;\n  readonly stdin: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__TerminalInteractionNotification = Schema.Struct({\n  itemId: Schema.String,\n  processId: Schema.String,\n  stdin: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const ServerNotification__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ServerNotification__TextPosition = { readonly column: number; readonly line: number };\nexport const ServerNotification__TextPosition = Schema.Struct({\n  column: Schema.Number.annotate({\n    description: \"1-based column number (in Unicode scalar values).\",\n    format: \"uint\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  line: Schema.Number.annotate({ description: \"1-based line number.\", format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type ServerNotification__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const ServerNotification__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type ServerNotification__ThreadArchivedNotification = { readonly threadId: string };\nexport const ServerNotification__ThreadArchivedNotification = Schema.Struct({\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__ThreadClosedNotification = { readonly threadId: string };\nexport const ServerNotification__ThreadClosedNotification = Schema.Struct({\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__ThreadDeletedNotification = { readonly threadId: string };\nexport const ServerNotification__ThreadDeletedNotification = Schema.Struct({\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__ThreadGoalClearedNotification = { readonly threadId: string };\nexport const ServerNotification__ThreadGoalClearedNotification = Schema.Struct({\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__ThreadGoalStatus =\n  | \"active\"\n  | \"paused\"\n  | \"blocked\"\n  | \"usageLimited\"\n  | \"budgetLimited\"\n  | \"complete\";\nexport const ServerNotification__ThreadGoalStatus = Schema.Literals([\n  \"active\",\n  \"paused\",\n  \"blocked\",\n  \"usageLimited\",\n  \"budgetLimited\",\n  \"complete\",\n]);\n\nexport type ServerNotification__ThreadId = string;\nexport const ServerNotification__ThreadId = Schema.String;\n\nexport type ServerNotification__ThreadNameUpdatedNotification = {\n  readonly threadId: string;\n  readonly threadName?: string | null;\n};\nexport const ServerNotification__ThreadNameUpdatedNotification = Schema.Struct({\n  threadId: Schema.String,\n  threadName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__ThreadRealtimeAudioChunk = {\n  readonly data: string;\n  readonly itemId?: string | null;\n  readonly numChannels: number;\n  readonly sampleRate: number;\n  readonly samplesPerChannel?: number | null;\n};\nexport const ServerNotification__ThreadRealtimeAudioChunk = Schema.Struct({\n  data: Schema.String,\n  itemId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  numChannels: Schema.Number.annotate({ format: \"uint16\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  sampleRate: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  samplesPerChannel: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"EXPERIMENTAL - thread realtime audio chunk.\" });\n\nexport type ServerNotification__ThreadRealtimeClosedNotification = {\n  readonly reason?: string | null;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeClosedNotification = Schema.Struct({\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n}).annotate({ description: \"EXPERIMENTAL - emitted when thread realtime transport closes.\" });\n\nexport type ServerNotification__ThreadRealtimeErrorNotification = {\n  readonly message: string;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeErrorNotification = Schema.Struct({\n  message: Schema.String,\n  threadId: Schema.String,\n}).annotate({ description: \"EXPERIMENTAL - emitted when thread realtime encounters an error.\" });\n\nexport type ServerNotification__ThreadRealtimeItemAddedNotification = {\n  readonly item: unknown;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeItemAddedNotification = Schema.Struct({\n  item: Schema.Unknown,\n  threadId: Schema.String,\n}).annotate({\n  description: \"EXPERIMENTAL - raw non-audio thread realtime item emitted by the backend.\",\n});\n\nexport type ServerNotification__ThreadRealtimeSdpNotification = {\n  readonly sdp: string;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeSdpNotification = Schema.Struct({\n  sdp: Schema.String,\n  threadId: Schema.String,\n}).annotate({\n  description: \"EXPERIMENTAL - emitted with the remote SDP for a WebRTC realtime session.\",\n});\n\nexport type ServerNotification__ThreadRealtimeTranscriptDeltaNotification = {\n  readonly delta: string;\n  readonly role: string;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeTranscriptDeltaNotification = Schema.Struct({\n  delta: Schema.String.annotate({ description: \"Live transcript delta from the realtime event.\" }),\n  role: Schema.String,\n  threadId: Schema.String,\n}).annotate({\n  description:\n    \"EXPERIMENTAL - flat transcript delta emitted whenever realtime transcript text changes.\",\n});\n\nexport type ServerNotification__ThreadRealtimeTranscriptDoneNotification = {\n  readonly role: string;\n  readonly text: string;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeTranscriptDoneNotification = Schema.Struct({\n  role: Schema.String,\n  text: Schema.String.annotate({ description: \"Final complete text for the transcript part.\" }),\n  threadId: Schema.String,\n}).annotate({\n  description:\n    \"EXPERIMENTAL - final transcript text emitted when realtime completes a transcript part.\",\n});\n\nexport type ServerNotification__ThreadSource = string;\nexport const ServerNotification__ThreadSource = Schema.String;\n\nexport type ServerNotification__ThreadUnarchivedNotification = { readonly threadId: string };\nexport const ServerNotification__ThreadUnarchivedNotification = Schema.Struct({\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__TokenUsageBreakdown = {\n  readonly cachedInputTokens: number;\n  readonly inputTokens: number;\n  readonly outputTokens: number;\n  readonly reasoningOutputTokens: number;\n  readonly totalTokens: number;\n};\nexport const ServerNotification__TokenUsageBreakdown = Schema.Struct({\n  cachedInputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  inputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  outputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  reasoningOutputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  totalTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type ServerNotification__TurnDiffUpdatedNotification = {\n  readonly diff: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__TurnDiffUpdatedNotification = Schema.Struct({\n  diff: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  description:\n    \"Notification that the turn-level unified diff has changed. Contains the latest aggregated diff across all file changes in the turn.\",\n});\n\nexport type ServerNotification__TurnModerationMetadataNotification = {\n  readonly metadata: unknown;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__TurnModerationMetadataNotification = Schema.Struct({\n  metadata: Schema.Unknown,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__TurnPlanStepStatus = \"pending\" | \"inProgress\" | \"completed\";\nexport const ServerNotification__TurnPlanStepStatus = Schema.Literals([\n  \"pending\",\n  \"inProgress\",\n  \"completed\",\n]);\n\nexport type ServerNotification__TurnStatus = \"completed\" | \"interrupted\" | \"failed\" | \"inProgress\";\nexport const ServerNotification__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type ServerNotification__WarningNotification = {\n  readonly message: string;\n  readonly threadId?: string | null;\n};\nexport const ServerNotification__WarningNotification = Schema.Struct({\n  message: Schema.String.annotate({ description: \"Concise warning message for the user.\" }),\n  threadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional thread target when the warning applies to a specific thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ServerNotification__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const ServerNotification__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__WindowsSandboxSetupMode = \"elevated\" | \"unelevated\";\nexport const ServerNotification__WindowsSandboxSetupMode = Schema.Literals([\n  \"elevated\",\n  \"unelevated\",\n]);\n\nexport type ServerNotification__WindowsWorldWritableWarningNotification = {\n  readonly extraCount: number;\n  readonly failedScan: boolean;\n  readonly samplePaths: ReadonlyArray<string>;\n};\nexport const ServerNotification__WindowsWorldWritableWarningNotification = Schema.Struct({\n  extraCount: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  failedScan: Schema.Boolean,\n  samplePaths: Schema.Array(Schema.String),\n});\n\nexport type ServerRequest__AbsolutePathBuf = string;\nexport const ServerRequest__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type ServerRequest__AdditionalNetworkPermissions = { readonly enabled?: boolean | null };\nexport const ServerRequest__AdditionalNetworkPermissions = Schema.Struct({\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type ServerRequest__AttestationGenerateParams = {};\nexport const ServerRequest__AttestationGenerateParams = Schema.Struct({});\n\nexport type ServerRequest__ChatgptAuthTokensRefreshReason = \"unauthorized\";\nexport const ServerRequest__ChatgptAuthTokensRefreshReason = Schema.Literal(\"unauthorized\");\n\nexport type ServerRequest__DynamicToolCallParams = {\n  readonly arguments: unknown;\n  readonly callId: string;\n  readonly namespace?: string | null;\n  readonly threadId: string;\n  readonly tool: string;\n  readonly turnId: string;\n};\nexport const ServerRequest__DynamicToolCallParams = Schema.Struct({\n  arguments: Schema.Unknown,\n  callId: Schema.String,\n  namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n  tool: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerRequest__FileChange =\n  | { readonly content: string; readonly type: \"add\" }\n  | { readonly content: string; readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\"; readonly unified_diff: string };\nexport const ServerRequest__FileChange = Schema.Union(\n  [\n    Schema.Struct({\n      content: Schema.String,\n      type: Schema.Literal(\"add\").annotate({ title: \"AddFileChangeType\" }),\n    }).annotate({ title: \"AddFileChange\" }),\n    Schema.Struct({\n      content: Schema.String,\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeleteFileChangeType\" }),\n    }).annotate({ title: \"DeleteFileChange\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdateFileChangeType\" }),\n      unified_diff: Schema.String,\n    }).annotate({ title: \"UpdateFileChange\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerRequest__FileChangeRequestApprovalParams = {\n  readonly grantRoot?: string | null;\n  readonly itemId: string;\n  readonly reason?: string | null;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerRequest__FileChangeRequestApprovalParams = Schema.Struct({\n  grantRoot: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"[UNSTABLE] When set, the agent is asking the user to allow writes under this root for the remainder of the session (unclear if this is honored today).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  itemId: Schema.String,\n  reason: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional explanatory reason (e.g. request for extra write access).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this approval request started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerRequest__FileSystemAccessMode = \"read\" | \"write\" | \"deny\";\nexport const ServerRequest__FileSystemAccessMode = Schema.Literals([\"read\", \"write\", \"deny\"]);\n\nexport type ServerRequest__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const ServerRequest__FileSystemSpecialPath = Schema.Union(\n  [\n    Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n      title: \"RootFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n      title: \"MinimalFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"project_roots\"),\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n    Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n      title: \"TmpdirFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n      title: \"SlashTmpFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"unknown\"),\n      path: Schema.String,\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerRequest__McpElicitationArrayType = \"array\";\nexport const ServerRequest__McpElicitationArrayType = Schema.Literal(\"array\");\n\nexport type ServerRequest__McpElicitationBooleanType = \"boolean\";\nexport const ServerRequest__McpElicitationBooleanType = Schema.Literal(\"boolean\");\n\nexport type ServerRequest__McpElicitationConstOption = {\n  readonly const: string;\n  readonly title: string;\n};\nexport const ServerRequest__McpElicitationConstOption = Schema.Struct({\n  const: Schema.String,\n  title: Schema.String,\n});\n\nexport type ServerRequest__McpElicitationNumberType = \"number\" | \"integer\";\nexport const ServerRequest__McpElicitationNumberType = Schema.Literals([\"number\", \"integer\"]);\n\nexport type ServerRequest__McpElicitationObjectType = \"object\";\nexport const ServerRequest__McpElicitationObjectType = Schema.Literal(\"object\");\n\nexport type ServerRequest__McpElicitationStringFormat = \"email\" | \"uri\" | \"date\" | \"date-time\";\nexport const ServerRequest__McpElicitationStringFormat = Schema.Literals([\n  \"email\",\n  \"uri\",\n  \"date\",\n  \"date-time\",\n]);\n\nexport type ServerRequest__McpElicitationStringType = \"string\";\nexport const ServerRequest__McpElicitationStringType = Schema.Literal(\"string\");\n\nexport type ServerRequest__NetworkApprovalProtocol = \"http\" | \"https\" | \"socks5Tcp\" | \"socks5Udp\";\nexport const ServerRequest__NetworkApprovalProtocol = Schema.Literals([\n  \"http\",\n  \"https\",\n  \"socks5Tcp\",\n  \"socks5Udp\",\n]);\n\nexport type ServerRequest__NetworkPolicyRuleAction = \"allow\" | \"deny\";\nexport const ServerRequest__NetworkPolicyRuleAction = Schema.Literals([\"allow\", \"deny\"]);\n\nexport type ServerRequest__ParsedCommand =\n  | { readonly cmd: string; readonly name: string; readonly path: string; readonly type: \"read\" }\n  | { readonly cmd: string; readonly path?: string | null; readonly type: \"list_files\" }\n  | {\n      readonly cmd: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly cmd: string; readonly type: \"unknown\" };\nexport const ServerRequest__ParsedCommand = Schema.Union(\n  [\n    Schema.Struct({\n      cmd: Schema.String,\n      name: Schema.String,\n      path: Schema.String.annotate({\n        description:\n          \"(Best effort) Path to the file being read by the command. When possible, this is an absolute path, though when relative, it should be resolved against the `cwd`` that will be used to run the command to derive the absolute path.\",\n      }),\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadParsedCommandType\" }),\n    }).annotate({ title: \"ReadParsedCommand\" }),\n    Schema.Struct({\n      cmd: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"list_files\").annotate({ title: \"ListFilesParsedCommandType\" }),\n    }).annotate({ title: \"ListFilesParsedCommand\" }),\n    Schema.Struct({\n      cmd: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchParsedCommandType\" }),\n    }).annotate({ title: \"SearchParsedCommand\" }),\n    Schema.Struct({\n      cmd: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownParsedCommandType\" }),\n    }).annotate({ title: \"UnknownParsedCommand\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerRequest__RequestId = string | number;\nexport const ServerRequest__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type ServerRequest__ThreadId = string;\nexport const ServerRequest__ThreadId = Schema.String;\n\nexport type ServerRequest__ToolRequestUserInputOption = {\n  readonly description: string;\n  readonly label: string;\n};\nexport const ServerRequest__ToolRequestUserInputOption = Schema.Struct({\n  description: Schema.String,\n  label: Schema.String,\n}).annotate({\n  description: \"EXPERIMENTAL. Defines a single selectable option for request_user_input.\",\n});\n\nexport type ToolRequestUserInputParams__ToolRequestUserInputOption = {\n  readonly description: string;\n  readonly label: string;\n};\nexport const ToolRequestUserInputParams__ToolRequestUserInputOption = Schema.Struct({\n  description: Schema.String,\n  label: Schema.String,\n}).annotate({\n  description: \"EXPERIMENTAL. Defines a single selectable option for request_user_input.\",\n});\n\nexport type ToolRequestUserInputResponse__ToolRequestUserInputAnswer = {\n  readonly answers: ReadonlyArray<string>;\n};\nexport const ToolRequestUserInputResponse__ToolRequestUserInputAnswer = Schema.Struct({\n  answers: Schema.Array(Schema.String),\n}).annotate({\n  description: \"EXPERIMENTAL. Captures a user's answer to a request_user_input question.\",\n});\n\nexport type V1InitializeParams__ClientInfo = {\n  readonly name: string;\n  readonly title?: string | null;\n  readonly version: string;\n};\nexport const V1InitializeParams__ClientInfo = Schema.Struct({\n  name: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  version: Schema.String,\n});\n\nexport type V1InitializeParams__InitializeCapabilities = {\n  readonly experimentalApi?: boolean;\n  readonly optOutNotificationMethods?: ReadonlyArray<string> | null;\n  readonly requestAttestation?: boolean;\n};\nexport const V1InitializeParams__InitializeCapabilities = Schema.Struct({\n  experimentalApi: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Opt into receiving experimental API methods and fields.\",\n      default: false,\n    }),\n  ),\n  optOutNotificationMethods: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Exact notification method names that should be suppressed for this connection (for example `thread/started`).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  requestAttestation: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Opt into `attestation/generate` requests for upstream `x-oai-attestation`.\",\n      default: false,\n    }),\n  ),\n}).annotate({ description: \"Client-declared capabilities negotiated during initialize.\" });\n\nexport type V2AccountRateLimitsUpdatedNotification__CreditsSnapshot = {\n  readonly balance?: string | null;\n  readonly hasCredits: boolean;\n  readonly unlimited: boolean;\n};\nexport const V2AccountRateLimitsUpdatedNotification__CreditsSnapshot = Schema.Struct({\n  balance: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  hasCredits: Schema.Boolean,\n  unlimited: Schema.Boolean,\n});\n\nexport type V2AccountRateLimitsUpdatedNotification__PlanType =\n  | \"free\"\n  | \"go\"\n  | \"plus\"\n  | \"pro\"\n  | \"prolite\"\n  | \"team\"\n  | \"self_serve_business_usage_based\"\n  | \"business\"\n  | \"enterprise_cbp_usage_based\"\n  | \"enterprise\"\n  | \"edu\"\n  | \"unknown\";\nexport const V2AccountRateLimitsUpdatedNotification__PlanType = Schema.Literals([\n  \"free\",\n  \"go\",\n  \"plus\",\n  \"pro\",\n  \"prolite\",\n  \"team\",\n  \"self_serve_business_usage_based\",\n  \"business\",\n  \"enterprise_cbp_usage_based\",\n  \"enterprise\",\n  \"edu\",\n  \"unknown\",\n]);\n\nexport type V2AccountRateLimitsUpdatedNotification__RateLimitReachedType =\n  | \"rate_limit_reached\"\n  | \"workspace_owner_credits_depleted\"\n  | \"workspace_member_credits_depleted\"\n  | \"workspace_owner_usage_limit_reached\"\n  | \"workspace_member_usage_limit_reached\";\nexport const V2AccountRateLimitsUpdatedNotification__RateLimitReachedType = Schema.Literals([\n  \"rate_limit_reached\",\n  \"workspace_owner_credits_depleted\",\n  \"workspace_member_credits_depleted\",\n  \"workspace_owner_usage_limit_reached\",\n  \"workspace_member_usage_limit_reached\",\n]);\n\nexport type V2AccountRateLimitsUpdatedNotification__RateLimitWindow = {\n  readonly resetsAt?: number | null;\n  readonly usedPercent: number;\n  readonly windowDurationMins?: number | null;\n};\nexport const V2AccountRateLimitsUpdatedNotification__RateLimitWindow = Schema.Struct({\n  resetsAt: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  usedPercent: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n  windowDurationMins: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n});\n\nexport type V2AccountRateLimitsUpdatedNotification__SpendControlLimitSnapshot = {\n  readonly limit: string;\n  readonly remainingPercent: number;\n  readonly resetsAt: number;\n  readonly used: string;\n};\nexport const V2AccountRateLimitsUpdatedNotification__SpendControlLimitSnapshot = Schema.Struct({\n  limit: Schema.String,\n  remainingPercent: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n  resetsAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  used: Schema.String,\n});\n\nexport type V2AccountUpdatedNotification__AuthMode =\n  | \"apikey\"\n  | \"chatgpt\"\n  | \"chatgptAuthTokens\"\n  | \"agentIdentity\"\n  | \"personalAccessToken\";\nexport const V2AccountUpdatedNotification__AuthMode = Schema.Literals([\n  \"apikey\",\n  \"chatgpt\",\n  \"chatgptAuthTokens\",\n  \"agentIdentity\",\n  \"personalAccessToken\",\n]).annotate({ description: \"Authentication mode for OpenAI-backed providers.\" });\n\nexport type V2AccountUpdatedNotification__PlanType =\n  | \"free\"\n  | \"go\"\n  | \"plus\"\n  | \"pro\"\n  | \"prolite\"\n  | \"team\"\n  | \"self_serve_business_usage_based\"\n  | \"business\"\n  | \"enterprise_cbp_usage_based\"\n  | \"enterprise\"\n  | \"edu\"\n  | \"unknown\";\nexport const V2AccountUpdatedNotification__PlanType = Schema.Literals([\n  \"free\",\n  \"go\",\n  \"plus\",\n  \"pro\",\n  \"prolite\",\n  \"team\",\n  \"self_serve_business_usage_based\",\n  \"business\",\n  \"enterprise_cbp_usage_based\",\n  \"enterprise\",\n  \"edu\",\n  \"unknown\",\n]);\n\nexport type V2AppListUpdatedNotification__AppBranding = {\n  readonly category?: string | null;\n  readonly developer?: string | null;\n  readonly isDiscoverableApp: boolean;\n  readonly privacyPolicy?: string | null;\n  readonly termsOfService?: string | null;\n  readonly website?: string | null;\n};\nexport const V2AppListUpdatedNotification__AppBranding = Schema.Struct({\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developer: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  isDiscoverableApp: Schema.Boolean,\n  privacyPolicy: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfService: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  website: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ description: \"EXPERIMENTAL - app metadata returned by app-list APIs.\" });\n\nexport type V2AppListUpdatedNotification__AppReview = { readonly status: string };\nexport const V2AppListUpdatedNotification__AppReview = Schema.Struct({ status: Schema.String });\n\nexport type V2AppListUpdatedNotification__AppScreenshot = {\n  readonly fileId?: string | null;\n  readonly url?: string | null;\n  readonly userPrompt: string;\n};\nexport const V2AppListUpdatedNotification__AppScreenshot = Schema.Struct({\n  fileId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  userPrompt: Schema.String,\n});\n\nexport type V2AppsListResponse__AppBranding = {\n  readonly category?: string | null;\n  readonly developer?: string | null;\n  readonly isDiscoverableApp: boolean;\n  readonly privacyPolicy?: string | null;\n  readonly termsOfService?: string | null;\n  readonly website?: string | null;\n};\nexport const V2AppsListResponse__AppBranding = Schema.Struct({\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developer: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  isDiscoverableApp: Schema.Boolean,\n  privacyPolicy: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfService: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  website: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ description: \"EXPERIMENTAL - app metadata returned by app-list APIs.\" });\n\nexport type V2AppsListResponse__AppReview = { readonly status: string };\nexport const V2AppsListResponse__AppReview = Schema.Struct({ status: Schema.String });\n\nexport type V2AppsListResponse__AppScreenshot = {\n  readonly fileId?: string | null;\n  readonly url?: string | null;\n  readonly userPrompt: string;\n};\nexport const V2AppsListResponse__AppScreenshot = Schema.Struct({\n  fileId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  userPrompt: Schema.String,\n});\n\nexport type V2CancelLoginAccountResponse__CancelLoginAccountStatus = \"canceled\" | \"notFound\";\nexport const V2CancelLoginAccountResponse__CancelLoginAccountStatus = Schema.Literals([\n  \"canceled\",\n  \"notFound\",\n]);\n\nexport type V2CommandExecParams__AbsolutePathBuf = string;\nexport const V2CommandExecParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2CommandExecParams__CommandExecTerminalSize = {\n  readonly cols: number;\n  readonly rows: number;\n};\nexport const V2CommandExecParams__CommandExecTerminalSize = Schema.Struct({\n  cols: Schema.Number.annotate({\n    description: \"Terminal width in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  rows: Schema.Number.annotate({\n    description: \"Terminal height in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"PTY size in character cells for `command/exec` PTY sessions.\" });\n\nexport type V2ConfigBatchWriteParams__MergeStrategy = \"replace\" | \"upsert\";\nexport const V2ConfigBatchWriteParams__MergeStrategy = Schema.Literals([\"replace\", \"upsert\"]);\n\nexport type V2ConfigReadResponse__AbsolutePathBuf = string;\nexport const V2ConfigReadResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ConfigReadResponse__AnalyticsConfig = {\n  readonly enabled?: boolean | null;\n  readonly [x: string]: unknown;\n};\nexport const V2ConfigReadResponse__AnalyticsConfig = Schema.StructWithRest(\n  Schema.Struct({ enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])) }),\n  [Schema.Record(Schema.String, Schema.Unknown)],\n);\n\nexport type V2ConfigReadResponse__AppToolApproval = \"auto\" | \"prompt\" | \"approve\";\nexport const V2ConfigReadResponse__AppToolApproval = Schema.Literals([\"auto\", \"prompt\", \"approve\"]);\n\nexport type V2ConfigReadResponse__AppToolsConfig = {};\nexport const V2ConfigReadResponse__AppToolsConfig = Schema.Struct({});\n\nexport type V2ConfigReadResponse__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2ConfigReadResponse__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ConfigReadResponse__AppsDefaultConfig = {\n  readonly destructive_enabled?: boolean;\n  readonly enabled?: boolean;\n  readonly open_world_enabled?: boolean;\n};\nexport const V2ConfigReadResponse__AppsDefaultConfig = Schema.Struct({\n  destructive_enabled: Schema.optionalKey(Schema.Boolean.annotate({ default: true })),\n  enabled: Schema.optionalKey(Schema.Boolean.annotate({ default: true })),\n  open_world_enabled: Schema.optionalKey(Schema.Boolean.annotate({ default: true })),\n});\n\nexport type V2ConfigReadResponse__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ConfigReadResponse__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ConfigReadResponse__AutoCompactTokenLimitScope = \"total\" | \"body_after_prefix\";\nexport const V2ConfigReadResponse__AutoCompactTokenLimitScope = Schema.Literals([\n  \"total\",\n  \"body_after_prefix\",\n]).annotate({\n  description:\n    \"Selects which part of the active context is charged against `model_auto_compact_token_limit`.\",\n});\n\nexport type V2ConfigReadResponse__ForcedChatgptWorkspaceIds = string | ReadonlyArray<string>;\nexport const V2ConfigReadResponse__ForcedChatgptWorkspaceIds = Schema.Union([\n  Schema.String,\n  Schema.Array(Schema.String),\n]).annotate({\n  description: \"Backward-compatible API shape for ChatGPT workspace login restrictions.\",\n});\n\nexport type V2ConfigReadResponse__ForcedLoginMethod = \"chatgpt\" | \"api\";\nexport const V2ConfigReadResponse__ForcedLoginMethod = Schema.Literals([\"chatgpt\", \"api\"]);\n\nexport type V2ConfigReadResponse__ReasoningEffort = string;\nexport const V2ConfigReadResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ConfigReadResponse__ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"none\";\nexport const V2ConfigReadResponse__ReasoningSummary = Schema.Union(\n  [\n    Schema.Literals([\"auto\", \"concise\", \"detailed\"]),\n    Schema.Literal(\"none\").annotate({ description: \"Option to disable reasoning summaries.\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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\",\n});\n\nexport type V2ConfigReadResponse__SandboxMode =\n  | \"read-only\"\n  | \"workspace-write\"\n  | \"danger-full-access\";\nexport const V2ConfigReadResponse__SandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\n\nexport type V2ConfigReadResponse__SandboxWorkspaceWrite = {\n  readonly exclude_slash_tmp?: boolean;\n  readonly exclude_tmpdir_env_var?: boolean;\n  readonly network_access?: boolean;\n  readonly writable_roots?: ReadonlyArray<string>;\n};\nexport const V2ConfigReadResponse__SandboxWorkspaceWrite = Schema.Struct({\n  exclude_slash_tmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  exclude_tmpdir_env_var: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  network_access: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  writable_roots: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n});\n\nexport type V2ConfigReadResponse__Verbosity = \"low\" | \"medium\" | \"high\";\nexport const V2ConfigReadResponse__Verbosity = Schema.Literals([\"low\", \"medium\", \"high\"]).annotate({\n  description:\n    \"Controls output length/detail on GPT-5 models via the Responses API. Serialized with lowercase values to match the OpenAI API.\",\n});\n\nexport type V2ConfigReadResponse__WebSearchContextSize = \"low\" | \"medium\" | \"high\";\nexport const V2ConfigReadResponse__WebSearchContextSize = Schema.Literals([\n  \"low\",\n  \"medium\",\n  \"high\",\n]);\n\nexport type V2ConfigReadResponse__WebSearchLocation = {\n  readonly city?: string | null;\n  readonly country?: string | null;\n  readonly region?: string | null;\n  readonly timezone?: string | null;\n};\nexport const V2ConfigReadResponse__WebSearchLocation = Schema.Struct({\n  city: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  country: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  region: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  timezone: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ConfigReadResponse__WebSearchMode = \"disabled\" | \"cached\" | \"live\";\nexport const V2ConfigReadResponse__WebSearchMode = Schema.Literals([\"disabled\", \"cached\", \"live\"]);\n\nexport type V2ConfigRequirementsReadResponse__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ConfigRequirementsReadResponse__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ConfigRequirementsReadResponse__ComputerUseRequirements = {\n  readonly allowLockedComputerUse?: boolean | null;\n};\nexport const V2ConfigRequirementsReadResponse__ComputerUseRequirements = Schema.Struct({\n  allowLockedComputerUse: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type V2ConfigRequirementsReadResponse__ConfiguredHookHandler =\n  | {\n      readonly async: boolean;\n      readonly command: string;\n      readonly commandWindows?: string | null;\n      readonly statusMessage?: string | null;\n      readonly timeoutSec?: number | null;\n      readonly type: \"command\";\n    }\n  | { readonly type: \"prompt\" }\n  | { readonly type: \"agent\" };\nexport const V2ConfigRequirementsReadResponse__ConfiguredHookHandler = Schema.Union(\n  [\n    Schema.Struct({\n      async: Schema.Boolean,\n      command: Schema.String,\n      commandWindows: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      statusMessage: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      timeoutSec: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ format: \"uint64\" })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"command\").annotate({ title: \"CommandConfiguredHookHandlerType\" }),\n    }).annotate({ title: \"CommandConfiguredHookHandler\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"prompt\").annotate({ title: \"PromptConfiguredHookHandlerType\" }),\n    }).annotate({ title: \"PromptConfiguredHookHandler\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"agent\").annotate({ title: \"AgentConfiguredHookHandlerType\" }),\n    }).annotate({ title: \"AgentConfiguredHookHandler\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ConfigRequirementsReadResponse__NetworkDomainPermission = \"allow\" | \"deny\";\nexport const V2ConfigRequirementsReadResponse__NetworkDomainPermission = Schema.Literals([\n  \"allow\",\n  \"deny\",\n]);\n\nexport type V2ConfigRequirementsReadResponse__NetworkUnixSocketPermission = \"allow\" | \"deny\";\nexport const V2ConfigRequirementsReadResponse__NetworkUnixSocketPermission = Schema.Literals([\n  \"allow\",\n  \"deny\",\n]);\n\nexport type V2ConfigRequirementsReadResponse__ResidencyRequirement = \"us\";\nexport const V2ConfigRequirementsReadResponse__ResidencyRequirement = Schema.Literal(\"us\");\n\nexport type V2ConfigRequirementsReadResponse__SandboxMode =\n  | \"read-only\"\n  | \"workspace-write\"\n  | \"danger-full-access\";\nexport const V2ConfigRequirementsReadResponse__SandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\n\nexport type V2ConfigRequirementsReadResponse__WebSearchMode = \"disabled\" | \"cached\" | \"live\";\nexport const V2ConfigRequirementsReadResponse__WebSearchMode = Schema.Literals([\n  \"disabled\",\n  \"cached\",\n  \"live\",\n]);\n\nexport type V2ConfigRequirementsReadResponse__WindowsSandboxSetupMode = \"elevated\" | \"unelevated\";\nexport const V2ConfigRequirementsReadResponse__WindowsSandboxSetupMode = Schema.Literals([\n  \"elevated\",\n  \"unelevated\",\n]);\n\nexport type V2ConfigValueWriteParams__MergeStrategy = \"replace\" | \"upsert\";\nexport const V2ConfigValueWriteParams__MergeStrategy = Schema.Literals([\"replace\", \"upsert\"]);\n\nexport type V2ConfigWarningNotification__TextPosition = {\n  readonly column: number;\n  readonly line: number;\n};\nexport const V2ConfigWarningNotification__TextPosition = Schema.Struct({\n  column: Schema.Number.annotate({\n    description: \"1-based column number (in Unicode scalar values).\",\n    format: \"uint\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  line: Schema.Number.annotate({ description: \"1-based line number.\", format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ConfigWriteResponse__AbsolutePathBuf = string;\nexport const V2ConfigWriteResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ConfigWriteResponse__WriteStatus = \"ok\" | \"okOverridden\";\nexport const V2ConfigWriteResponse__WriteStatus = Schema.Literals([\"ok\", \"okOverridden\"]);\n\nexport type V2ErrorNotification__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ErrorNotification__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ExperimentalFeatureListResponse__ExperimentalFeature = {\n  readonly announcement?: string | null;\n  readonly defaultEnabled: boolean;\n  readonly description?: string | null;\n  readonly displayName?: string | null;\n  readonly enabled: boolean;\n  readonly name: string;\n  readonly stage: \"beta\" | \"underDevelopment\" | \"stable\" | \"deprecated\" | \"removed\";\n};\nexport const V2ExperimentalFeatureListResponse__ExperimentalFeature = Schema.Struct({\n  announcement: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Announcement copy shown to users when the feature is introduced. Null when this feature is not in beta.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  defaultEnabled: Schema.Boolean.annotate({\n    description: \"Whether this feature is enabled by default.\",\n  }),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Short summary describing what the feature does. Null when this feature is not in beta.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  displayName: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"User-facing display name shown in the experimental features UI. Null when this feature is not in beta.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  enabled: Schema.Boolean.annotate({\n    description: \"Whether this feature is currently enabled in the loaded config.\",\n  }),\n  name: Schema.String.annotate({\n    description: \"Stable key used in config.toml and CLI flag toggles.\",\n  }),\n  stage: Schema.Literals([\"beta\", \"underDevelopment\", \"stable\", \"deprecated\", \"removed\"]).annotate({\n    description: \"Lifecycle stage of this feature flag.\",\n  }),\n});\n\nexport type V2ExternalAgentConfigDetectResponse__CommandMigration = { readonly name: string };\nexport const V2ExternalAgentConfigDetectResponse__CommandMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItemType =\n  | \"AGENTS_MD\"\n  | \"CONFIG\"\n  | \"SKILLS\"\n  | \"PLUGINS\"\n  | \"MCP_SERVER_CONFIG\"\n  | \"SUBAGENTS\"\n  | \"HOOKS\"\n  | \"COMMANDS\"\n  | \"SESSIONS\";\nexport const V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItemType =\n  Schema.Literals([\n    \"AGENTS_MD\",\n    \"CONFIG\",\n    \"SKILLS\",\n    \"PLUGINS\",\n    \"MCP_SERVER_CONFIG\",\n    \"SUBAGENTS\",\n    \"HOOKS\",\n    \"COMMANDS\",\n    \"SESSIONS\",\n  ]);\n\nexport type V2ExternalAgentConfigDetectResponse__HookMigration = { readonly name: string };\nexport const V2ExternalAgentConfigDetectResponse__HookMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigDetectResponse__McpServerMigration = { readonly name: string };\nexport const V2ExternalAgentConfigDetectResponse__McpServerMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigDetectResponse__PluginsMigration = {\n  readonly marketplaceName: string;\n  readonly pluginNames: ReadonlyArray<string>;\n};\nexport const V2ExternalAgentConfigDetectResponse__PluginsMigration = Schema.Struct({\n  marketplaceName: Schema.String,\n  pluginNames: Schema.Array(Schema.String),\n});\n\nexport type V2ExternalAgentConfigDetectResponse__SessionMigration = {\n  readonly cwd: string;\n  readonly path: string;\n  readonly title?: string | null;\n};\nexport const V2ExternalAgentConfigDetectResponse__SessionMigration = Schema.Struct({\n  cwd: Schema.String,\n  path: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ExternalAgentConfigDetectResponse__SubagentMigration = { readonly name: string };\nexport const V2ExternalAgentConfigDetectResponse__SubagentMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigImportParams__CommandMigration = { readonly name: string };\nexport const V2ExternalAgentConfigImportParams__CommandMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItemType =\n  | \"AGENTS_MD\"\n  | \"CONFIG\"\n  | \"SKILLS\"\n  | \"PLUGINS\"\n  | \"MCP_SERVER_CONFIG\"\n  | \"SUBAGENTS\"\n  | \"HOOKS\"\n  | \"COMMANDS\"\n  | \"SESSIONS\";\nexport const V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItemType =\n  Schema.Literals([\n    \"AGENTS_MD\",\n    \"CONFIG\",\n    \"SKILLS\",\n    \"PLUGINS\",\n    \"MCP_SERVER_CONFIG\",\n    \"SUBAGENTS\",\n    \"HOOKS\",\n    \"COMMANDS\",\n    \"SESSIONS\",\n  ]);\n\nexport type V2ExternalAgentConfigImportParams__HookMigration = { readonly name: string };\nexport const V2ExternalAgentConfigImportParams__HookMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigImportParams__McpServerMigration = { readonly name: string };\nexport const V2ExternalAgentConfigImportParams__McpServerMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2ExternalAgentConfigImportParams__PluginsMigration = {\n  readonly marketplaceName: string;\n  readonly pluginNames: ReadonlyArray<string>;\n};\nexport const V2ExternalAgentConfigImportParams__PluginsMigration = Schema.Struct({\n  marketplaceName: Schema.String,\n  pluginNames: Schema.Array(Schema.String),\n});\n\nexport type V2ExternalAgentConfigImportParams__SessionMigration = {\n  readonly cwd: string;\n  readonly path: string;\n  readonly title?: string | null;\n};\nexport const V2ExternalAgentConfigImportParams__SessionMigration = Schema.Struct({\n  cwd: Schema.String,\n  path: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ExternalAgentConfigImportParams__SubagentMigration = { readonly name: string };\nexport const V2ExternalAgentConfigImportParams__SubagentMigration = Schema.Struct({\n  name: Schema.String,\n});\n\nexport type V2FileChangePatchUpdatedNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2FileChangePatchUpdatedNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2FsChangedNotification__AbsolutePathBuf = string;\nexport const V2FsChangedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsReadDirectoryResponse__FsReadDirectoryEntry = {\n  readonly fileName: string;\n  readonly isDirectory: boolean;\n  readonly isFile: boolean;\n};\nexport const V2FsReadDirectoryResponse__FsReadDirectoryEntry = Schema.Struct({\n  fileName: Schema.String.annotate({\n    description: \"Direct child entry name only, not an absolute or relative path.\",\n  }),\n  isDirectory: Schema.Boolean.annotate({\n    description: \"Whether this entry resolves to a directory.\",\n  }),\n  isFile: Schema.Boolean.annotate({\n    description: \"Whether this entry resolves to a regular file.\",\n  }),\n}).annotate({ description: \"A directory entry returned by `fs/readDirectory`.\" });\n\nexport type V2GetAccountRateLimitsResponse__CreditsSnapshot = {\n  readonly balance?: string | null;\n  readonly hasCredits: boolean;\n  readonly unlimited: boolean;\n};\nexport const V2GetAccountRateLimitsResponse__CreditsSnapshot = Schema.Struct({\n  balance: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  hasCredits: Schema.Boolean,\n  unlimited: Schema.Boolean,\n});\n\nexport type V2GetAccountRateLimitsResponse__PlanType =\n  | \"free\"\n  | \"go\"\n  | \"plus\"\n  | \"pro\"\n  | \"prolite\"\n  | \"team\"\n  | \"self_serve_business_usage_based\"\n  | \"business\"\n  | \"enterprise_cbp_usage_based\"\n  | \"enterprise\"\n  | \"edu\"\n  | \"unknown\";\nexport const V2GetAccountRateLimitsResponse__PlanType = Schema.Literals([\n  \"free\",\n  \"go\",\n  \"plus\",\n  \"pro\",\n  \"prolite\",\n  \"team\",\n  \"self_serve_business_usage_based\",\n  \"business\",\n  \"enterprise_cbp_usage_based\",\n  \"enterprise\",\n  \"edu\",\n  \"unknown\",\n]);\n\nexport type V2GetAccountRateLimitsResponse__RateLimitReachedType =\n  | \"rate_limit_reached\"\n  | \"workspace_owner_credits_depleted\"\n  | \"workspace_member_credits_depleted\"\n  | \"workspace_owner_usage_limit_reached\"\n  | \"workspace_member_usage_limit_reached\";\nexport const V2GetAccountRateLimitsResponse__RateLimitReachedType = Schema.Literals([\n  \"rate_limit_reached\",\n  \"workspace_owner_credits_depleted\",\n  \"workspace_member_credits_depleted\",\n  \"workspace_owner_usage_limit_reached\",\n  \"workspace_member_usage_limit_reached\",\n]);\n\nexport type V2GetAccountRateLimitsResponse__RateLimitWindow = {\n  readonly resetsAt?: number | null;\n  readonly usedPercent: number;\n  readonly windowDurationMins?: number | null;\n};\nexport const V2GetAccountRateLimitsResponse__RateLimitWindow = Schema.Struct({\n  resetsAt: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  usedPercent: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n  windowDurationMins: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n});\n\nexport type V2GetAccountRateLimitsResponse__SpendControlLimitSnapshot = {\n  readonly limit: string;\n  readonly remainingPercent: number;\n  readonly resetsAt: number;\n  readonly used: string;\n};\nexport const V2GetAccountRateLimitsResponse__SpendControlLimitSnapshot = Schema.Struct({\n  limit: Schema.String,\n  remainingPercent: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n  resetsAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  used: Schema.String,\n});\n\nexport type V2GetAccountResponse__PlanType =\n  | \"free\"\n  | \"go\"\n  | \"plus\"\n  | \"pro\"\n  | \"prolite\"\n  | \"team\"\n  | \"self_serve_business_usage_based\"\n  | \"business\"\n  | \"enterprise_cbp_usage_based\"\n  | \"enterprise\"\n  | \"edu\"\n  | \"unknown\";\nexport const V2GetAccountResponse__PlanType = Schema.Literals([\n  \"free\",\n  \"go\",\n  \"plus\",\n  \"pro\",\n  \"prolite\",\n  \"team\",\n  \"self_serve_business_usage_based\",\n  \"business\",\n  \"enterprise_cbp_usage_based\",\n  \"enterprise\",\n  \"edu\",\n  \"unknown\",\n]);\n\nexport type V2GetAccountTokenUsageResponse__AccountTokenUsageDailyBucket = {\n  readonly startDate: string;\n  readonly tokens: number;\n};\nexport const V2GetAccountTokenUsageResponse__AccountTokenUsageDailyBucket = Schema.Struct({\n  startDate: Schema.String,\n  tokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type V2GetAccountTokenUsageResponse__AccountTokenUsageSummary = {\n  readonly currentStreakDays?: number | null;\n  readonly lifetimeTokens?: number | null;\n  readonly longestRunningTurnSec?: number | null;\n  readonly longestStreakDays?: number | null;\n  readonly peakDailyTokens?: number | null;\n};\nexport const V2GetAccountTokenUsageResponse__AccountTokenUsageSummary = Schema.Struct({\n  currentStreakDays: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  lifetimeTokens: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  longestRunningTurnSec: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  longestStreakDays: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  peakDailyTokens: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n});\n\nexport type V2HookCompletedNotification__AbsolutePathBuf = string;\nexport const V2HookCompletedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2HookCompletedNotification__HookEventName =\n  | \"preToolUse\"\n  | \"permissionRequest\"\n  | \"postToolUse\"\n  | \"preCompact\"\n  | \"postCompact\"\n  | \"sessionStart\"\n  | \"userPromptSubmit\"\n  | \"subagentStart\"\n  | \"subagentStop\"\n  | \"stop\";\nexport const V2HookCompletedNotification__HookEventName = Schema.Literals([\n  \"preToolUse\",\n  \"permissionRequest\",\n  \"postToolUse\",\n  \"preCompact\",\n  \"postCompact\",\n  \"sessionStart\",\n  \"userPromptSubmit\",\n  \"subagentStart\",\n  \"subagentStop\",\n  \"stop\",\n]);\n\nexport type V2HookCompletedNotification__HookExecutionMode = \"sync\" | \"async\";\nexport const V2HookCompletedNotification__HookExecutionMode = Schema.Literals([\"sync\", \"async\"]);\n\nexport type V2HookCompletedNotification__HookHandlerType = \"command\" | \"prompt\" | \"agent\";\nexport const V2HookCompletedNotification__HookHandlerType = Schema.Literals([\n  \"command\",\n  \"prompt\",\n  \"agent\",\n]);\n\nexport type V2HookCompletedNotification__HookOutputEntryKind =\n  | \"warning\"\n  | \"stop\"\n  | \"feedback\"\n  | \"context\"\n  | \"error\";\nexport const V2HookCompletedNotification__HookOutputEntryKind = Schema.Literals([\n  \"warning\",\n  \"stop\",\n  \"feedback\",\n  \"context\",\n  \"error\",\n]);\n\nexport type V2HookCompletedNotification__HookRunStatus =\n  | \"running\"\n  | \"completed\"\n  | \"failed\"\n  | \"blocked\"\n  | \"stopped\";\nexport const V2HookCompletedNotification__HookRunStatus = Schema.Literals([\n  \"running\",\n  \"completed\",\n  \"failed\",\n  \"blocked\",\n  \"stopped\",\n]);\n\nexport type V2HookCompletedNotification__HookScope = \"thread\" | \"turn\";\nexport const V2HookCompletedNotification__HookScope = Schema.Literals([\"thread\", \"turn\"]);\n\nexport type V2HooksListResponse__AbsolutePathBuf = string;\nexport const V2HooksListResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2HooksListResponse__HookErrorInfo = {\n  readonly message: string;\n  readonly path: string;\n};\nexport const V2HooksListResponse__HookErrorInfo = Schema.Struct({\n  message: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2HooksListResponse__HookEventName =\n  | \"preToolUse\"\n  | \"permissionRequest\"\n  | \"postToolUse\"\n  | \"preCompact\"\n  | \"postCompact\"\n  | \"sessionStart\"\n  | \"userPromptSubmit\"\n  | \"subagentStart\"\n  | \"subagentStop\"\n  | \"stop\";\nexport const V2HooksListResponse__HookEventName = Schema.Literals([\n  \"preToolUse\",\n  \"permissionRequest\",\n  \"postToolUse\",\n  \"preCompact\",\n  \"postCompact\",\n  \"sessionStart\",\n  \"userPromptSubmit\",\n  \"subagentStart\",\n  \"subagentStop\",\n  \"stop\",\n]);\n\nexport type V2HooksListResponse__HookHandlerType = \"command\" | \"prompt\" | \"agent\";\nexport const V2HooksListResponse__HookHandlerType = Schema.Literals([\"command\", \"prompt\", \"agent\"]);\n\nexport type V2HooksListResponse__HookSource =\n  | \"system\"\n  | \"user\"\n  | \"project\"\n  | \"mdm\"\n  | \"sessionFlags\"\n  | \"plugin\"\n  | \"cloudRequirements\"\n  | \"cloudManagedConfig\"\n  | \"legacyManagedConfigFile\"\n  | \"legacyManagedConfigMdm\"\n  | \"unknown\";\nexport const V2HooksListResponse__HookSource = Schema.Literals([\n  \"system\",\n  \"user\",\n  \"project\",\n  \"mdm\",\n  \"sessionFlags\",\n  \"plugin\",\n  \"cloudRequirements\",\n  \"cloudManagedConfig\",\n  \"legacyManagedConfigFile\",\n  \"legacyManagedConfigMdm\",\n  \"unknown\",\n]);\n\nexport type V2HooksListResponse__HookTrustStatus = \"managed\" | \"untrusted\" | \"trusted\" | \"modified\";\nexport const V2HooksListResponse__HookTrustStatus = Schema.Literals([\n  \"managed\",\n  \"untrusted\",\n  \"trusted\",\n  \"modified\",\n]);\n\nexport type V2HookStartedNotification__AbsolutePathBuf = string;\nexport const V2HookStartedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2HookStartedNotification__HookEventName =\n  | \"preToolUse\"\n  | \"permissionRequest\"\n  | \"postToolUse\"\n  | \"preCompact\"\n  | \"postCompact\"\n  | \"sessionStart\"\n  | \"userPromptSubmit\"\n  | \"subagentStart\"\n  | \"subagentStop\"\n  | \"stop\";\nexport const V2HookStartedNotification__HookEventName = Schema.Literals([\n  \"preToolUse\",\n  \"permissionRequest\",\n  \"postToolUse\",\n  \"preCompact\",\n  \"postCompact\",\n  \"sessionStart\",\n  \"userPromptSubmit\",\n  \"subagentStart\",\n  \"subagentStop\",\n  \"stop\",\n]);\n\nexport type V2HookStartedNotification__HookExecutionMode = \"sync\" | \"async\";\nexport const V2HookStartedNotification__HookExecutionMode = Schema.Literals([\"sync\", \"async\"]);\n\nexport type V2HookStartedNotification__HookHandlerType = \"command\" | \"prompt\" | \"agent\";\nexport const V2HookStartedNotification__HookHandlerType = Schema.Literals([\n  \"command\",\n  \"prompt\",\n  \"agent\",\n]);\n\nexport type V2HookStartedNotification__HookOutputEntryKind =\n  | \"warning\"\n  | \"stop\"\n  | \"feedback\"\n  | \"context\"\n  | \"error\";\nexport const V2HookStartedNotification__HookOutputEntryKind = Schema.Literals([\n  \"warning\",\n  \"stop\",\n  \"feedback\",\n  \"context\",\n  \"error\",\n]);\n\nexport type V2HookStartedNotification__HookRunStatus =\n  | \"running\"\n  | \"completed\"\n  | \"failed\"\n  | \"blocked\"\n  | \"stopped\";\nexport const V2HookStartedNotification__HookRunStatus = Schema.Literals([\n  \"running\",\n  \"completed\",\n  \"failed\",\n  \"blocked\",\n  \"stopped\",\n]);\n\nexport type V2HookStartedNotification__HookScope = \"thread\" | \"turn\";\nexport const V2HookStartedNotification__HookScope = Schema.Literals([\"thread\", \"turn\"]);\n\nexport type V2ItemCompletedNotification__AbsolutePathBuf = string;\nexport const V2ItemCompletedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ItemCompletedNotification__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ItemCompletedNotification__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ItemCompletedNotification__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ItemCompletedNotification__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ItemCompletedNotification__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ItemCompletedNotification__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemCompletedNotification__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ItemCompletedNotification__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ItemCompletedNotification__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ItemCompletedNotification__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ItemCompletedNotification__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ItemCompletedNotification__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ItemCompletedNotification__McpToolCallError = { readonly message: string };\nexport const V2ItemCompletedNotification__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2ItemCompletedNotification__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ItemCompletedNotification__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ItemCompletedNotification__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ItemCompletedNotification__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ItemCompletedNotification__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ItemCompletedNotification__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ItemCompletedNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ItemCompletedNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ItemCompletedNotification__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ItemCompletedNotification__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ItemCompletedNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ItemCompletedNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemCompletedNotification__ReasoningEffort = string;\nexport const V2ItemCompletedNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ItemCompletedNotification__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2ItemCompletedNotification__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ItemCompletedNotification__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ItemCompletedNotification__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ItemCompletedNotification__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ItemCompletedNotification__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf = string;\nexport const V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf =\n  Schema.String.annotate({\n    description:\n      \"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.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__AdditionalNetworkPermissions = {\n  readonly enabled?: boolean | null;\n};\nexport const V2ItemGuardianApprovalReviewCompletedNotification__AdditionalNetworkPermissions =\n  Schema.Struct({ enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])) });\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__AutoReviewDecisionSource = \"agent\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__AutoReviewDecisionSource =\n  Schema.Literal(\"agent\").annotate({\n    description: \"[UNSTABLE] Source that produced a terminal approval auto-review decision.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__FileSystemAccessMode =\n  | \"read\"\n  | \"write\"\n  | \"deny\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__FileSystemAccessMode =\n  Schema.Literals([\"read\", \"write\", \"deny\"]);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSpecialPath =\n  Schema.Union(\n    [\n      Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n        title: \"RootFileSystemSpecialPath\",\n      }),\n      Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n        title: \"MinimalFileSystemSpecialPath\",\n      }),\n      Schema.Struct({\n        kind: Schema.Literal(\"project_roots\"),\n        subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n      Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n        title: \"TmpdirFileSystemSpecialPath\",\n      }),\n      Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n        title: \"SlashTmpFileSystemSpecialPath\",\n      }),\n      Schema.Struct({\n        kind: Schema.Literal(\"unknown\"),\n        path: Schema.String,\n        subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      }),\n    ],\n    { mode: \"oneOf\" },\n  );\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewStatus =\n  | \"inProgress\"\n  | \"approved\"\n  | \"denied\"\n  | \"timedOut\"\n  | \"aborted\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewStatus =\n  Schema.Literals([\"inProgress\", \"approved\", \"denied\", \"timedOut\", \"aborted\"]).annotate({\n    description: \"[UNSTABLE] Lifecycle state for an approval auto-review.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__GuardianCommandSource =\n  | \"shell\"\n  | \"unifiedExec\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__GuardianCommandSource =\n  Schema.Literals([\"shell\", \"unifiedExec\"]);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__GuardianRiskLevel =\n  | \"low\"\n  | \"medium\"\n  | \"high\"\n  | \"critical\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__GuardianRiskLevel = Schema.Literals(\n  [\"low\", \"medium\", \"high\", \"critical\"],\n).annotate({ description: \"[UNSTABLE] Risk level assigned by approval auto-review.\" });\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__GuardianUserAuthorization =\n  | \"unknown\"\n  | \"low\"\n  | \"medium\"\n  | \"high\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__GuardianUserAuthorization =\n  Schema.Literals([\"unknown\", \"low\", \"medium\", \"high\"]).annotate({\n    description: \"[UNSTABLE] Authorization level assigned by approval auto-review.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__NetworkApprovalProtocol =\n  | \"http\"\n  | \"https\"\n  | \"socks5Tcp\"\n  | \"socks5Udp\";\nexport const V2ItemGuardianApprovalReviewCompletedNotification__NetworkApprovalProtocol =\n  Schema.Literals([\"http\", \"https\", \"socks5Tcp\", \"socks5Udp\"]);\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf = string;\nexport const V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf =\n  Schema.String.annotate({\n    description:\n      \"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.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__AdditionalNetworkPermissions = {\n  readonly enabled?: boolean | null;\n};\nexport const V2ItemGuardianApprovalReviewStartedNotification__AdditionalNetworkPermissions =\n  Schema.Struct({ enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])) });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__FileSystemAccessMode =\n  | \"read\"\n  | \"write\"\n  | \"deny\";\nexport const V2ItemGuardianApprovalReviewStartedNotification__FileSystemAccessMode =\n  Schema.Literals([\"read\", \"write\", \"deny\"]);\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__FileSystemSpecialPath =\n  | { readonly kind: \"root\" }\n  | { readonly kind: \"minimal\" }\n  | { readonly kind: \"project_roots\"; readonly subpath?: string | null }\n  | { readonly kind: \"tmpdir\" }\n  | { readonly kind: \"slash_tmp\" }\n  | { readonly kind: \"unknown\"; readonly path: string; readonly subpath?: string | null };\nexport const V2ItemGuardianApprovalReviewStartedNotification__FileSystemSpecialPath = Schema.Union(\n  [\n    Schema.Struct({ kind: Schema.Literal(\"root\") }).annotate({\n      title: \"RootFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"minimal\") }).annotate({\n      title: \"MinimalFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"project_roots\"),\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"KindFileSystemSpecialPath\" }),\n    Schema.Struct({ kind: Schema.Literal(\"tmpdir\") }).annotate({\n      title: \"TmpdirFileSystemSpecialPath\",\n    }),\n    Schema.Struct({ kind: Schema.Literal(\"slash_tmp\") }).annotate({\n      title: \"SlashTmpFileSystemSpecialPath\",\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"unknown\"),\n      path: Schema.String,\n      subpath: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewStatus =\n  | \"inProgress\"\n  | \"approved\"\n  | \"denied\"\n  | \"timedOut\"\n  | \"aborted\";\nexport const V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewStatus =\n  Schema.Literals([\"inProgress\", \"approved\", \"denied\", \"timedOut\", \"aborted\"]).annotate({\n    description: \"[UNSTABLE] Lifecycle state for an approval auto-review.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__GuardianCommandSource =\n  | \"shell\"\n  | \"unifiedExec\";\nexport const V2ItemGuardianApprovalReviewStartedNotification__GuardianCommandSource =\n  Schema.Literals([\"shell\", \"unifiedExec\"]);\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__GuardianRiskLevel =\n  | \"low\"\n  | \"medium\"\n  | \"high\"\n  | \"critical\";\nexport const V2ItemGuardianApprovalReviewStartedNotification__GuardianRiskLevel = Schema.Literals([\n  \"low\",\n  \"medium\",\n  \"high\",\n  \"critical\",\n]).annotate({ description: \"[UNSTABLE] Risk level assigned by approval auto-review.\" });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__GuardianUserAuthorization =\n  | \"unknown\"\n  | \"low\"\n  | \"medium\"\n  | \"high\";\nexport const V2ItemGuardianApprovalReviewStartedNotification__GuardianUserAuthorization =\n  Schema.Literals([\"unknown\", \"low\", \"medium\", \"high\"]).annotate({\n    description: \"[UNSTABLE] Authorization level assigned by approval auto-review.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__NetworkApprovalProtocol =\n  | \"http\"\n  | \"https\"\n  | \"socks5Tcp\"\n  | \"socks5Udp\";\nexport const V2ItemGuardianApprovalReviewStartedNotification__NetworkApprovalProtocol =\n  Schema.Literals([\"http\", \"https\", \"socks5Tcp\", \"socks5Udp\"]);\n\nexport type V2ItemStartedNotification__AbsolutePathBuf = string;\nexport const V2ItemStartedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ItemStartedNotification__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ItemStartedNotification__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ItemStartedNotification__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ItemStartedNotification__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ItemStartedNotification__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ItemStartedNotification__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemStartedNotification__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ItemStartedNotification__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ItemStartedNotification__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ItemStartedNotification__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ItemStartedNotification__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ItemStartedNotification__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ItemStartedNotification__McpToolCallError = { readonly message: string };\nexport const V2ItemStartedNotification__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2ItemStartedNotification__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ItemStartedNotification__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ItemStartedNotification__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ItemStartedNotification__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ItemStartedNotification__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ItemStartedNotification__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ItemStartedNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ItemStartedNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ItemStartedNotification__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ItemStartedNotification__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ItemStartedNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ItemStartedNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemStartedNotification__ReasoningEffort = string;\nexport const V2ItemStartedNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ItemStartedNotification__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2ItemStartedNotification__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ItemStartedNotification__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ItemStartedNotification__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ItemStartedNotification__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ItemStartedNotification__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ListMcpServerStatusParams__McpServerStatusDetail = \"full\" | \"toolsAndAuthOnly\";\nexport const V2ListMcpServerStatusParams__McpServerStatusDetail = Schema.Literals([\n  \"full\",\n  \"toolsAndAuthOnly\",\n]);\n\nexport type V2ListMcpServerStatusResponse__McpAuthStatus =\n  | \"unsupported\"\n  | \"notLoggedIn\"\n  | \"bearerToken\"\n  | \"oAuth\";\nexport const V2ListMcpServerStatusResponse__McpAuthStatus = Schema.Literals([\n  \"unsupported\",\n  \"notLoggedIn\",\n  \"bearerToken\",\n  \"oAuth\",\n]);\n\nexport type V2ListMcpServerStatusResponse__McpServerInfo = {\n  readonly description?: string | null;\n  readonly icons?: ReadonlyArray<unknown> | null;\n  readonly name: string;\n  readonly title?: string | null;\n  readonly version: string;\n  readonly websiteUrl?: string | null;\n};\nexport const V2ListMcpServerStatusResponse__McpServerInfo = Schema.Struct({\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  icons: Schema.optionalKey(Schema.Union([Schema.Array(Schema.Unknown), Schema.Null])),\n  name: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  version: Schema.String,\n  websiteUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ description: \"Presentation metadata advertised by an initialized MCP server.\" });\n\nexport type V2ListMcpServerStatusResponse__Resource = {\n  readonly _meta?: unknown;\n  readonly annotations?: unknown;\n  readonly description?: string | null;\n  readonly icons?: ReadonlyArray<unknown> | null;\n  readonly mimeType?: string | null;\n  readonly name: string;\n  readonly size?: number | null;\n  readonly title?: string | null;\n  readonly uri: string;\n};\nexport const V2ListMcpServerStatusResponse__Resource = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  annotations: Schema.optionalKey(Schema.Unknown),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  icons: Schema.optionalKey(Schema.Union([Schema.Array(Schema.Unknown), Schema.Null])),\n  mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  size: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  uri: Schema.String,\n}).annotate({ description: \"A known resource that the server is capable of reading.\" });\n\nexport type V2ListMcpServerStatusResponse__ResourceTemplate = {\n  readonly annotations?: unknown;\n  readonly description?: string | null;\n  readonly mimeType?: string | null;\n  readonly name: string;\n  readonly title?: string | null;\n  readonly uriTemplate: string;\n};\nexport const V2ListMcpServerStatusResponse__ResourceTemplate = Schema.Struct({\n  annotations: Schema.optionalKey(Schema.Unknown),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  uriTemplate: Schema.String,\n}).annotate({ description: \"A template description for resources available on the server.\" });\n\nexport type V2ListMcpServerStatusResponse__Tool = {\n  readonly _meta?: unknown;\n  readonly annotations?: unknown;\n  readonly description?: string | null;\n  readonly icons?: ReadonlyArray<unknown> | null;\n  readonly inputSchema: unknown;\n  readonly name: string;\n  readonly outputSchema?: unknown;\n  readonly title?: string | null;\n};\nexport const V2ListMcpServerStatusResponse__Tool = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  annotations: Schema.optionalKey(Schema.Unknown),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  icons: Schema.optionalKey(Schema.Union([Schema.Array(Schema.Unknown), Schema.Null])),\n  inputSchema: Schema.Unknown,\n  name: Schema.String,\n  outputSchema: Schema.optionalKey(Schema.Unknown),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ description: \"Definition for a tool the client can call.\" });\n\nexport type V2MarketplaceAddResponse__AbsolutePathBuf = string;\nexport const V2MarketplaceAddResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2MarketplaceRemoveResponse__AbsolutePathBuf = string;\nexport const V2MarketplaceRemoveResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2MarketplaceUpgradeResponse__AbsolutePathBuf = string;\nexport const V2MarketplaceUpgradeResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2MarketplaceUpgradeResponse__MarketplaceUpgradeErrorInfo = {\n  readonly marketplaceName: string;\n  readonly message: string;\n};\nexport const V2MarketplaceUpgradeResponse__MarketplaceUpgradeErrorInfo = Schema.Struct({\n  marketplaceName: Schema.String,\n  message: Schema.String,\n});\n\nexport type V2McpResourceReadResponse__ResourceContent =\n  | {\n      readonly _meta?: unknown;\n      readonly mimeType?: string | null;\n      readonly text: string;\n      readonly uri: string;\n    }\n  | {\n      readonly _meta?: unknown;\n      readonly blob: string;\n      readonly mimeType?: string | null;\n      readonly uri: string;\n    };\nexport const V2McpResourceReadResponse__ResourceContent = Schema.Union([\n  Schema.Struct({\n    _meta: Schema.optionalKey(Schema.Unknown),\n    mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    text: Schema.String,\n    uri: Schema.String.annotate({ description: \"The URI of this resource.\" }),\n  }),\n  Schema.Struct({\n    _meta: Schema.optionalKey(Schema.Unknown),\n    blob: Schema.String,\n    mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    uri: Schema.String.annotate({ description: \"The URI of this resource.\" }),\n  }),\n]).annotate({ description: \"Contents returned when reading a resource from an MCP server.\" });\n\nexport type V2McpServerStatusUpdatedNotification__McpServerStartupState =\n  | \"starting\"\n  | \"ready\"\n  | \"failed\"\n  | \"cancelled\";\nexport const V2McpServerStatusUpdatedNotification__McpServerStartupState = Schema.Literals([\n  \"starting\",\n  \"ready\",\n  \"failed\",\n  \"cancelled\",\n]);\n\nexport type V2ModelListResponse__InputModality = \"text\" | \"image\";\nexport const V2ModelListResponse__InputModality = Schema.Literals([\"text\", \"image\"]).annotate({\n  description: \"Canonical user-input modality tags advertised by a model.\",\n});\n\nexport type V2ModelListResponse__ModelAvailabilityNux = { readonly message: string };\nexport const V2ModelListResponse__ModelAvailabilityNux = Schema.Struct({ message: Schema.String });\n\nexport type V2ModelListResponse__ModelServiceTier = {\n  readonly description: string;\n  readonly id: string;\n  readonly name: string;\n};\nexport const V2ModelListResponse__ModelServiceTier = Schema.Struct({\n  description: Schema.String,\n  id: Schema.String,\n  name: Schema.String,\n});\n\nexport type V2ModelListResponse__ModelUpgradeInfo = {\n  readonly migrationMarkdown?: string | null;\n  readonly model: string;\n  readonly modelLink?: string | null;\n  readonly upgradeCopy?: string | null;\n};\nexport const V2ModelListResponse__ModelUpgradeInfo = Schema.Struct({\n  migrationMarkdown: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.String,\n  modelLink: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  upgradeCopy: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ModelListResponse__ReasoningEffort = string;\nexport const V2ModelListResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ModelReroutedNotification__ModelRerouteReason = \"highRiskCyberActivity\";\nexport const V2ModelReroutedNotification__ModelRerouteReason =\n  Schema.Literal(\"highRiskCyberActivity\");\n\nexport type V2ModelVerificationNotification__ModelVerification = \"trustedAccessForCyber\";\nexport const V2ModelVerificationNotification__ModelVerification =\n  Schema.Literal(\"trustedAccessForCyber\");\n\nexport type V2PermissionProfileListResponse__PermissionProfileSummary = {\n  readonly description?: string | null;\n  readonly id: string;\n};\nexport const V2PermissionProfileListResponse__PermissionProfileSummary = Schema.Struct({\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional user-facing description for display in clients.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({ description: \"Available permission profile identifier.\" }),\n});\n\nexport type V2PluginInstalledParams__AbsolutePathBuf = string;\nexport const V2PluginInstalledParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginInstalledResponse__AbsolutePathBuf = string;\nexport const V2PluginInstalledResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginInstalledResponse__MarketplaceInterface = {\n  readonly displayName?: string | null;\n};\nexport const V2PluginInstalledResponse__MarketplaceInterface = Schema.Struct({\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginInstalledResponse__PluginAuthPolicy = \"ON_INSTALL\" | \"ON_USE\";\nexport const V2PluginInstalledResponse__PluginAuthPolicy = Schema.Literals([\n  \"ON_INSTALL\",\n  \"ON_USE\",\n]);\n\nexport type V2PluginInstalledResponse__PluginInstallPolicy =\n  | \"NOT_AVAILABLE\"\n  | \"AVAILABLE\"\n  | \"INSTALLED_BY_DEFAULT\";\nexport const V2PluginInstalledResponse__PluginInstallPolicy = Schema.Literals([\n  \"NOT_AVAILABLE\",\n  \"AVAILABLE\",\n  \"INSTALLED_BY_DEFAULT\",\n]);\n\nexport type V2PluginInstalledResponse__PluginShareDiscoverability =\n  | \"LISTED\"\n  | \"UNLISTED\"\n  | \"PRIVATE\";\nexport const V2PluginInstalledResponse__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginInstalledResponse__PluginSharePrincipalRole = \"reader\" | \"editor\" | \"owner\";\nexport const V2PluginInstalledResponse__PluginSharePrincipalRole = Schema.Literals([\n  \"reader\",\n  \"editor\",\n  \"owner\",\n]);\n\nexport type V2PluginInstalledResponse__PluginSharePrincipalType = \"user\" | \"group\" | \"workspace\";\nexport const V2PluginInstalledResponse__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2PluginInstallParams__AbsolutePathBuf = string;\nexport const V2PluginInstallParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginInstallResponse__AppSummary = {\n  readonly description?: string | null;\n  readonly id: string;\n  readonly installUrl?: string | null;\n  readonly name: string;\n  readonly needsAuth: boolean;\n};\nexport const V2PluginInstallResponse__AppSummary = Schema.Struct({\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  id: Schema.String,\n  installUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  needsAuth: Schema.Boolean,\n}).annotate({ description: \"EXPERIMENTAL - app metadata summary for plugin responses.\" });\n\nexport type V2PluginInstallResponse__PluginAuthPolicy = \"ON_INSTALL\" | \"ON_USE\";\nexport const V2PluginInstallResponse__PluginAuthPolicy = Schema.Literals([\"ON_INSTALL\", \"ON_USE\"]);\n\nexport type V2PluginListParams__AbsolutePathBuf = string;\nexport const V2PluginListParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginListParams__PluginListMarketplaceKind =\n  | \"local\"\n  | \"vertical\"\n  | \"workspace-directory\"\n  | \"shared-with-me\";\nexport const V2PluginListParams__PluginListMarketplaceKind = Schema.Literals([\n  \"local\",\n  \"vertical\",\n  \"workspace-directory\",\n  \"shared-with-me\",\n]);\n\nexport type V2PluginListResponse__AbsolutePathBuf = string;\nexport const V2PluginListResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginListResponse__MarketplaceInterface = { readonly displayName?: string | null };\nexport const V2PluginListResponse__MarketplaceInterface = Schema.Struct({\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginListResponse__PluginAuthPolicy = \"ON_INSTALL\" | \"ON_USE\";\nexport const V2PluginListResponse__PluginAuthPolicy = Schema.Literals([\"ON_INSTALL\", \"ON_USE\"]);\n\nexport type V2PluginListResponse__PluginInstallPolicy =\n  | \"NOT_AVAILABLE\"\n  | \"AVAILABLE\"\n  | \"INSTALLED_BY_DEFAULT\";\nexport const V2PluginListResponse__PluginInstallPolicy = Schema.Literals([\n  \"NOT_AVAILABLE\",\n  \"AVAILABLE\",\n  \"INSTALLED_BY_DEFAULT\",\n]);\n\nexport type V2PluginListResponse__PluginShareDiscoverability = \"LISTED\" | \"UNLISTED\" | \"PRIVATE\";\nexport const V2PluginListResponse__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginListResponse__PluginSharePrincipalRole = \"reader\" | \"editor\" | \"owner\";\nexport const V2PluginListResponse__PluginSharePrincipalRole = Schema.Literals([\n  \"reader\",\n  \"editor\",\n  \"owner\",\n]);\n\nexport type V2PluginListResponse__PluginSharePrincipalType = \"user\" | \"group\" | \"workspace\";\nexport const V2PluginListResponse__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2PluginReadParams__AbsolutePathBuf = string;\nexport const V2PluginReadParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginReadResponse__AbsolutePathBuf = string;\nexport const V2PluginReadResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginReadResponse__AppSummary = {\n  readonly description?: string | null;\n  readonly id: string;\n  readonly installUrl?: string | null;\n  readonly name: string;\n  readonly needsAuth: boolean;\n};\nexport const V2PluginReadResponse__AppSummary = Schema.Struct({\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  id: Schema.String,\n  installUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  needsAuth: Schema.Boolean,\n}).annotate({ description: \"EXPERIMENTAL - app metadata summary for plugin responses.\" });\n\nexport type V2PluginReadResponse__AppTemplateUnavailableReason =\n  | \"NOT_CONFIGURED_FOR_WORKSPACE\"\n  | \"NO_ACTIVE_WORKSPACE\";\nexport const V2PluginReadResponse__AppTemplateUnavailableReason = Schema.Literals([\n  \"NOT_CONFIGURED_FOR_WORKSPACE\",\n  \"NO_ACTIVE_WORKSPACE\",\n]);\n\nexport type V2PluginReadResponse__HookEventName =\n  | \"preToolUse\"\n  | \"permissionRequest\"\n  | \"postToolUse\"\n  | \"preCompact\"\n  | \"postCompact\"\n  | \"sessionStart\"\n  | \"userPromptSubmit\"\n  | \"subagentStart\"\n  | \"subagentStop\"\n  | \"stop\";\nexport const V2PluginReadResponse__HookEventName = Schema.Literals([\n  \"preToolUse\",\n  \"permissionRequest\",\n  \"postToolUse\",\n  \"preCompact\",\n  \"postCompact\",\n  \"sessionStart\",\n  \"userPromptSubmit\",\n  \"subagentStart\",\n  \"subagentStop\",\n  \"stop\",\n]);\n\nexport type V2PluginReadResponse__PluginAuthPolicy = \"ON_INSTALL\" | \"ON_USE\";\nexport const V2PluginReadResponse__PluginAuthPolicy = Schema.Literals([\"ON_INSTALL\", \"ON_USE\"]);\n\nexport type V2PluginReadResponse__PluginInstallPolicy =\n  | \"NOT_AVAILABLE\"\n  | \"AVAILABLE\"\n  | \"INSTALLED_BY_DEFAULT\";\nexport const V2PluginReadResponse__PluginInstallPolicy = Schema.Literals([\n  \"NOT_AVAILABLE\",\n  \"AVAILABLE\",\n  \"INSTALLED_BY_DEFAULT\",\n]);\n\nexport type V2PluginReadResponse__PluginShareDiscoverability = \"LISTED\" | \"UNLISTED\" | \"PRIVATE\";\nexport const V2PluginReadResponse__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginReadResponse__PluginSharePrincipalRole = \"reader\" | \"editor\" | \"owner\";\nexport const V2PluginReadResponse__PluginSharePrincipalRole = Schema.Literals([\n  \"reader\",\n  \"editor\",\n  \"owner\",\n]);\n\nexport type V2PluginReadResponse__PluginSharePrincipalType = \"user\" | \"group\" | \"workspace\";\nexport const V2PluginReadResponse__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2PluginShareCheckoutResponse__AbsolutePathBuf = string;\nexport const V2PluginShareCheckoutResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginShareListResponse__AbsolutePathBuf = string;\nexport const V2PluginShareListResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginShareListResponse__PluginAuthPolicy = \"ON_INSTALL\" | \"ON_USE\";\nexport const V2PluginShareListResponse__PluginAuthPolicy = Schema.Literals([\n  \"ON_INSTALL\",\n  \"ON_USE\",\n]);\n\nexport type V2PluginShareListResponse__PluginInstallPolicy =\n  | \"NOT_AVAILABLE\"\n  | \"AVAILABLE\"\n  | \"INSTALLED_BY_DEFAULT\";\nexport const V2PluginShareListResponse__PluginInstallPolicy = Schema.Literals([\n  \"NOT_AVAILABLE\",\n  \"AVAILABLE\",\n  \"INSTALLED_BY_DEFAULT\",\n]);\n\nexport type V2PluginShareListResponse__PluginShareDiscoverability =\n  | \"LISTED\"\n  | \"UNLISTED\"\n  | \"PRIVATE\";\nexport const V2PluginShareListResponse__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginShareListResponse__PluginSharePrincipalRole = \"reader\" | \"editor\" | \"owner\";\nexport const V2PluginShareListResponse__PluginSharePrincipalRole = Schema.Literals([\n  \"reader\",\n  \"editor\",\n  \"owner\",\n]);\n\nexport type V2PluginShareListResponse__PluginSharePrincipalType = \"user\" | \"group\" | \"workspace\";\nexport const V2PluginShareListResponse__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2PluginShareSaveParams__AbsolutePathBuf = string;\nexport const V2PluginShareSaveParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2PluginShareSaveParams__PluginShareDiscoverability = \"LISTED\" | \"UNLISTED\" | \"PRIVATE\";\nexport const V2PluginShareSaveParams__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginShareSaveParams__PluginSharePrincipalType = \"user\" | \"group\" | \"workspace\";\nexport const V2PluginShareSaveParams__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2PluginShareSaveParams__PluginShareTargetRole = \"reader\" | \"editor\";\nexport const V2PluginShareSaveParams__PluginShareTargetRole = Schema.Literals([\"reader\", \"editor\"]);\n\nexport type V2PluginShareUpdateTargetsParams__PluginSharePrincipalType =\n  | \"user\"\n  | \"group\"\n  | \"workspace\";\nexport const V2PluginShareUpdateTargetsParams__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2PluginShareUpdateTargetsParams__PluginShareTargetRole = \"reader\" | \"editor\";\nexport const V2PluginShareUpdateTargetsParams__PluginShareTargetRole = Schema.Literals([\n  \"reader\",\n  \"editor\",\n]);\n\nexport type V2PluginShareUpdateTargetsParams__PluginShareUpdateDiscoverability =\n  | \"UNLISTED\"\n  | \"PRIVATE\";\nexport const V2PluginShareUpdateTargetsParams__PluginShareUpdateDiscoverability = Schema.Literals([\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginShareUpdateTargetsResponse__PluginShareDiscoverability =\n  | \"LISTED\"\n  | \"UNLISTED\"\n  | \"PRIVATE\";\nexport const V2PluginShareUpdateTargetsResponse__PluginShareDiscoverability = Schema.Literals([\n  \"LISTED\",\n  \"UNLISTED\",\n  \"PRIVATE\",\n]);\n\nexport type V2PluginShareUpdateTargetsResponse__PluginSharePrincipalRole =\n  | \"reader\"\n  | \"editor\"\n  | \"owner\";\nexport const V2PluginShareUpdateTargetsResponse__PluginSharePrincipalRole = Schema.Literals([\n  \"reader\",\n  \"editor\",\n  \"owner\",\n]);\n\nexport type V2PluginShareUpdateTargetsResponse__PluginSharePrincipalType =\n  | \"user\"\n  | \"group\"\n  | \"workspace\";\nexport const V2PluginShareUpdateTargetsResponse__PluginSharePrincipalType = Schema.Literals([\n  \"user\",\n  \"group\",\n  \"workspace\",\n]);\n\nexport type V2RawResponseItemCompletedNotification__AgentMessageInputContent = {\n  readonly encrypted_content: string;\n  readonly type: \"encrypted_content\";\n};\nexport const V2RawResponseItemCompletedNotification__AgentMessageInputContent = Schema.Union(\n  [\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"encrypted_content\").annotate({\n        title: \"EncryptedContentAgentMessageInputContentType\",\n      }),\n    }).annotate({ title: \"EncryptedContentAgentMessageInputContent\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2RawResponseItemCompletedNotification__ImageDetail =\n  | \"auto\"\n  | \"low\"\n  | \"high\"\n  | \"original\";\nexport const V2RawResponseItemCompletedNotification__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2RawResponseItemCompletedNotification__LocalShellAction = {\n  readonly command: ReadonlyArray<string>;\n  readonly env?: { readonly [x: string]: string } | null;\n  readonly timeout_ms?: number | null;\n  readonly type: \"exec\";\n  readonly user?: string | null;\n  readonly working_directory?: string | null;\n};\nexport const V2RawResponseItemCompletedNotification__LocalShellAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.Array(Schema.String),\n      env: Schema.optionalKey(\n        Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n      ),\n      timeout_ms: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ format: \"uint64\" })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"exec\").annotate({ title: \"ExecLocalShellActionType\" }),\n      user: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      working_directory: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"ExecLocalShellAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2RawResponseItemCompletedNotification__LocalShellStatus =\n  | \"completed\"\n  | \"in_progress\"\n  | \"incomplete\";\nexport const V2RawResponseItemCompletedNotification__LocalShellStatus = Schema.Literals([\n  \"completed\",\n  \"in_progress\",\n  \"incomplete\",\n]);\n\nexport type V2RawResponseItemCompletedNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2RawResponseItemCompletedNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2RawResponseItemCompletedNotification__ReasoningItemContent =\n  | { readonly text: string; readonly type: \"reasoning_text\" }\n  | { readonly text: string; readonly type: \"text\" };\nexport const V2RawResponseItemCompletedNotification__ReasoningItemContent = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"reasoning_text\").annotate({\n        title: \"ReasoningTextReasoningItemContentType\",\n      }),\n    }).annotate({ title: \"ReasoningTextReasoningItemContent\" }),\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"text\").annotate({ title: \"TextReasoningItemContentType\" }),\n    }).annotate({ title: \"TextReasoningItemContent\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2RawResponseItemCompletedNotification__ReasoningItemReasoningSummary = {\n  readonly text: string;\n  readonly type: \"summary_text\";\n};\nexport const V2RawResponseItemCompletedNotification__ReasoningItemReasoningSummary = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"summary_text\").annotate({\n        title: \"SummaryTextReasoningItemReasoningSummaryType\",\n      }),\n    }).annotate({ title: \"SummaryTextReasoningItemReasoningSummary\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2RawResponseItemCompletedNotification__ResponsesApiWebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"open_page\"; readonly url?: string | null }\n  | {\n      readonly pattern?: string | null;\n      readonly type: \"find_in_page\";\n      readonly url?: string | null;\n    }\n  | { readonly type: \"other\" };\nexport const V2RawResponseItemCompletedNotification__ResponsesApiWebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchResponsesApiWebSearchActionType\" }),\n    }).annotate({ title: \"SearchResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"open_page\").annotate({\n        title: \"OpenPageResponsesApiWebSearchActionType\",\n      }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"find_in_page\").annotate({\n        title: \"FindInPageResponsesApiWebSearchActionType\",\n      }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherResponsesApiWebSearchActionType\" }),\n    }).annotate({ title: \"OtherResponsesApiWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2RemoteControlStatusChangedNotification__RemoteControlConnectionStatus =\n  | \"disabled\"\n  | \"connecting\"\n  | \"connected\"\n  | \"errored\";\nexport const V2RemoteControlStatusChangedNotification__RemoteControlConnectionStatus =\n  Schema.Literals([\"disabled\", \"connecting\", \"connected\", \"errored\"]);\n\nexport type V2ReviewStartParams__ReviewDelivery = \"inline\" | \"detached\";\nexport const V2ReviewStartParams__ReviewDelivery = Schema.Literals([\"inline\", \"detached\"]);\n\nexport type V2ReviewStartParams__ReviewTarget =\n  | { readonly type: \"uncommittedChanges\" }\n  | { readonly branch: string; readonly type: \"baseBranch\" }\n  | { readonly sha: string; readonly title?: string | null; readonly type: \"commit\" }\n  | { readonly instructions: string; readonly type: \"custom\" };\nexport const V2ReviewStartParams__ReviewTarget = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"uncommittedChanges\").annotate({\n        title: \"UncommittedChangesReviewTargetType\",\n      }),\n    }).annotate({\n      title: \"UncommittedChangesReviewTarget\",\n      description: \"Review the working tree: staged, unstaged, and untracked files.\",\n    }),\n    Schema.Struct({\n      branch: Schema.String,\n      type: Schema.Literal(\"baseBranch\").annotate({ title: \"BaseBranchReviewTargetType\" }),\n    }).annotate({\n      title: \"BaseBranchReviewTarget\",\n      description: \"Review changes between the current branch and the given base branch.\",\n    }),\n    Schema.Struct({\n      sha: Schema.String,\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Optional human-readable label (e.g., commit subject) for UIs.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"commit\").annotate({ title: \"CommitReviewTargetType\" }),\n    }).annotate({\n      title: \"CommitReviewTarget\",\n      description: \"Review the changes introduced by a specific commit.\",\n    }),\n    Schema.Struct({\n      instructions: Schema.String,\n      type: Schema.Literal(\"custom\").annotate({ title: \"CustomReviewTargetType\" }),\n    }).annotate({\n      title: \"CustomReviewTarget\",\n      description: \"Arbitrary instructions, equivalent to the old free-form prompt.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ReviewStartResponse__AbsolutePathBuf = string;\nexport const V2ReviewStartResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ReviewStartResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ReviewStartResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ReviewStartResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ReviewStartResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ReviewStartResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ReviewStartResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ReviewStartResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ReviewStartResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ReviewStartResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ReviewStartResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ReviewStartResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ReviewStartResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ReviewStartResponse__McpToolCallError = { readonly message: string };\nexport const V2ReviewStartResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ReviewStartResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ReviewStartResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ReviewStartResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ReviewStartResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ReviewStartResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ReviewStartResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ReviewStartResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ReviewStartResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ReviewStartResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ReviewStartResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ReviewStartResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ReviewStartResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ReviewStartResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ReviewStartResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ReviewStartResponse__ReasoningEffort = string;\nexport const V2ReviewStartResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ReviewStartResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2ReviewStartResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ReviewStartResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ReviewStartResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ReviewStartResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ReviewStartResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ReviewStartResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ReviewStartResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2SendAddCreditsNudgeEmailParams__AddCreditsNudgeCreditType = \"credits\" | \"usage_limit\";\nexport const V2SendAddCreditsNudgeEmailParams__AddCreditsNudgeCreditType = Schema.Literals([\n  \"credits\",\n  \"usage_limit\",\n]);\n\nexport type V2SendAddCreditsNudgeEmailResponse__AddCreditsNudgeEmailStatus =\n  | \"sent\"\n  | \"cooldown_active\";\nexport const V2SendAddCreditsNudgeEmailResponse__AddCreditsNudgeEmailStatus = Schema.Literals([\n  \"sent\",\n  \"cooldown_active\",\n]);\n\nexport type V2ServerRequestResolvedNotification__RequestId = string | number;\nexport const V2ServerRequestResolvedNotification__RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]);\n\nexport type V2SkillsConfigWriteParams__AbsolutePathBuf = string;\nexport const V2SkillsConfigWriteParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2SkillsExtraRootsSetParams__AbsolutePathBuf = string;\nexport const V2SkillsExtraRootsSetParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2SkillsListResponse__AbsolutePathBuf = string;\nexport const V2SkillsListResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2SkillsListResponse__SkillErrorInfo = {\n  readonly message: string;\n  readonly path: string;\n};\nexport const V2SkillsListResponse__SkillErrorInfo = Schema.Struct({\n  message: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2SkillsListResponse__SkillScope = \"user\" | \"repo\" | \"system\" | \"admin\";\nexport const V2SkillsListResponse__SkillScope = Schema.Literals([\n  \"user\",\n  \"repo\",\n  \"system\",\n  \"admin\",\n]);\n\nexport type V2SkillsListResponse__SkillToolDependency = {\n  readonly command?: string | null;\n  readonly description?: string | null;\n  readonly transport?: string | null;\n  readonly type: string;\n  readonly url?: string | null;\n  readonly value: string;\n};\nexport const V2SkillsListResponse__SkillToolDependency = Schema.Struct({\n  command: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  transport: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: Schema.String,\n  url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  value: Schema.String,\n});\n\nexport type V2ThreadForkParams__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2ThreadForkParams__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadForkParams__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadForkParams__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkParams__SandboxMode =\n  | \"read-only\"\n  | \"workspace-write\"\n  | \"danger-full-access\";\nexport const V2ThreadForkParams__SandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\n\nexport type V2ThreadForkParams__ThreadSource = string;\nexport const V2ThreadForkParams__ThreadSource = Schema.String;\n\nexport type V2ThreadForkResponse__AbsolutePathBuf = string;\nexport const V2ThreadForkResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadForkResponse__AgentPath = string;\nexport const V2ThreadForkResponse__AgentPath = Schema.String;\n\nexport type V2ThreadForkResponse__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadForkResponse__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadForkResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadForkResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadForkResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadForkResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadForkResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadForkResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadForkResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadForkResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadForkResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadForkResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadForkResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadForkResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadForkResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadForkResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ThreadForkResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadForkResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadForkResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadForkResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadForkResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadForkResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadForkResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadForkResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadForkResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadForkResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ThreadForkResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadForkResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadForkResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadForkResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__ReasoningEffort = string;\nexport const V2ThreadForkResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadForkResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2ThreadForkResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadForkResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadForkResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadForkResponse__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const V2ThreadForkResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadForkResponse__ThreadId = string;\nexport const V2ThreadForkResponse__ThreadId = Schema.String;\n\nexport type V2ThreadForkResponse__ThreadSource = string;\nexport const V2ThreadForkResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadForkResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadForkResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadForkResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadForkResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadGoalGetResponse__ThreadGoalStatus =\n  | \"active\"\n  | \"paused\"\n  | \"blocked\"\n  | \"usageLimited\"\n  | \"budgetLimited\"\n  | \"complete\";\nexport const V2ThreadGoalGetResponse__ThreadGoalStatus = Schema.Literals([\n  \"active\",\n  \"paused\",\n  \"blocked\",\n  \"usageLimited\",\n  \"budgetLimited\",\n  \"complete\",\n]);\n\nexport type V2ThreadGoalSetParams__ThreadGoalStatus =\n  | \"active\"\n  | \"paused\"\n  | \"blocked\"\n  | \"usageLimited\"\n  | \"budgetLimited\"\n  | \"complete\";\nexport const V2ThreadGoalSetParams__ThreadGoalStatus = Schema.Literals([\n  \"active\",\n  \"paused\",\n  \"blocked\",\n  \"usageLimited\",\n  \"budgetLimited\",\n  \"complete\",\n]);\n\nexport type V2ThreadGoalSetResponse__ThreadGoalStatus =\n  | \"active\"\n  | \"paused\"\n  | \"blocked\"\n  | \"usageLimited\"\n  | \"budgetLimited\"\n  | \"complete\";\nexport const V2ThreadGoalSetResponse__ThreadGoalStatus = Schema.Literals([\n  \"active\",\n  \"paused\",\n  \"blocked\",\n  \"usageLimited\",\n  \"budgetLimited\",\n  \"complete\",\n]);\n\nexport type V2ThreadGoalUpdatedNotification__ThreadGoalStatus =\n  | \"active\"\n  | \"paused\"\n  | \"blocked\"\n  | \"usageLimited\"\n  | \"budgetLimited\"\n  | \"complete\";\nexport const V2ThreadGoalUpdatedNotification__ThreadGoalStatus = Schema.Literals([\n  \"active\",\n  \"paused\",\n  \"blocked\",\n  \"usageLimited\",\n  \"budgetLimited\",\n  \"complete\",\n]);\n\nexport type V2ThreadListParams__SortDirection = \"asc\" | \"desc\";\nexport const V2ThreadListParams__SortDirection = Schema.Literals([\"asc\", \"desc\"]);\n\nexport type V2ThreadListParams__ThreadListCwdFilter = string | ReadonlyArray<string>;\nexport const V2ThreadListParams__ThreadListCwdFilter = Schema.Union([\n  Schema.String,\n  Schema.Array(Schema.String),\n]);\n\nexport type V2ThreadListParams__ThreadSortKey = \"created_at\" | \"updated_at\";\nexport const V2ThreadListParams__ThreadSortKey = Schema.Literals([\"created_at\", \"updated_at\"]);\n\nexport type V2ThreadListParams__ThreadSourceKind =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"subAgent\"\n  | \"subAgentReview\"\n  | \"subAgentCompact\"\n  | \"subAgentThreadSpawn\"\n  | \"subAgentOther\"\n  | \"unknown\";\nexport const V2ThreadListParams__ThreadSourceKind = Schema.Literals([\n  \"cli\",\n  \"vscode\",\n  \"exec\",\n  \"appServer\",\n  \"subAgent\",\n  \"subAgentReview\",\n  \"subAgentCompact\",\n  \"subAgentThreadSpawn\",\n  \"subAgentOther\",\n  \"unknown\",\n]);\n\nexport type V2ThreadListResponse__AbsolutePathBuf = string;\nexport const V2ThreadListResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadListResponse__AgentPath = string;\nexport const V2ThreadListResponse__AgentPath = Schema.String;\n\nexport type V2ThreadListResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadListResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadListResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadListResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadListResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadListResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadListResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadListResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadListResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadListResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadListResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadListResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadListResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadListResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadListResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ThreadListResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadListResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadListResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadListResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadListResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadListResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadListResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadListResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadListResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadListResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ThreadListResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadListResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadListResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadListResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__ReasoningEffort = string;\nexport const V2ThreadListResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadListResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2ThreadListResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadListResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadListResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadListResponse__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const V2ThreadListResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadListResponse__ThreadId = string;\nexport const V2ThreadListResponse__ThreadId = Schema.String;\n\nexport type V2ThreadListResponse__ThreadSource = string;\nexport const V2ThreadListResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadListResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadListResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadListResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadListResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateParams__ThreadMetadataGitInfoUpdateParams = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadMetadataUpdateParams__ThreadMetadataGitInfoUpdateParams = Schema.Struct({\n  branch: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Omit to leave the stored branch unchanged, set to `null` to clear it, or provide a non-empty string to replace it.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  originUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Omit to leave the stored origin URL unchanged, set to `null` to clear it, or provide a non-empty string to replace it.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sha: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Omit to leave the stored commit unchanged, set to `null` to clear it, or provide a non-empty string to replace it.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadMetadataUpdateResponse__AbsolutePathBuf = string;\nexport const V2ThreadMetadataUpdateResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadMetadataUpdateResponse__AgentPath = string;\nexport const V2ThreadMetadataUpdateResponse__AgentPath = Schema.String;\n\nexport type V2ThreadMetadataUpdateResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadMetadataUpdateResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadMetadataUpdateResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadMetadataUpdateResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadMetadataUpdateResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadMetadataUpdateResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadMetadataUpdateResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadMetadataUpdateResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadMetadataUpdateResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadMetadataUpdateResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadMetadataUpdateResponse__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2ThreadMetadataUpdateResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadMetadataUpdateResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadMetadataUpdateResponse__McpToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadMetadataUpdateResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadMetadataUpdateResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadMetadataUpdateResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadMetadataUpdateResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadMetadataUpdateResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadMetadataUpdateResponse__NonSteerableTurnKind = Schema.Literals([\n  \"review\",\n  \"compact\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadMetadataUpdateResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadMetadataUpdateResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__ReasoningEffort = string;\nexport const V2ThreadMetadataUpdateResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadMetadataUpdateResponse__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2ThreadMetadataUpdateResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadMetadataUpdateResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadMetadataUpdateResponse__ThreadActiveFlag =\n  | \"waitingOnApproval\"\n  | \"waitingOnUserInput\";\nexport const V2ThreadMetadataUpdateResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__ThreadId = string;\nexport const V2ThreadMetadataUpdateResponse__ThreadId = Schema.String;\n\nexport type V2ThreadMetadataUpdateResponse__ThreadSource = string;\nexport const V2ThreadMetadataUpdateResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadMetadataUpdateResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadMetadataUpdateResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadMetadataUpdateResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__AbsolutePathBuf = string;\nexport const V2ThreadReadResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadReadResponse__AgentPath = string;\nexport const V2ThreadReadResponse__AgentPath = Schema.String;\n\nexport type V2ThreadReadResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadReadResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadReadResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadReadResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadReadResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadReadResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadReadResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadReadResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadReadResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadReadResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadReadResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadReadResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadReadResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadReadResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadReadResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ThreadReadResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadReadResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadReadResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadReadResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadReadResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadReadResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadReadResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadReadResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadReadResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadReadResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ThreadReadResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadReadResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadReadResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadReadResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__ReasoningEffort = string;\nexport const V2ThreadReadResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadReadResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2ThreadReadResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadReadResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadReadResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadReadResponse__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const V2ThreadReadResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadReadResponse__ThreadId = string;\nexport const V2ThreadReadResponse__ThreadId = Schema.String;\n\nexport type V2ThreadReadResponse__ThreadSource = string;\nexport const V2ThreadReadResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadReadResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadReadResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadReadResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadReadResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRealtimeOutputAudioDeltaNotification__ThreadRealtimeAudioChunk = {\n  readonly data: string;\n  readonly itemId?: string | null;\n  readonly numChannels: number;\n  readonly sampleRate: number;\n  readonly samplesPerChannel?: number | null;\n};\nexport const V2ThreadRealtimeOutputAudioDeltaNotification__ThreadRealtimeAudioChunk = Schema.Struct(\n  {\n    data: Schema.String,\n    itemId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    numChannels: Schema.Number.annotate({ format: \"uint16\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    sampleRate: Schema.Number.annotate({ format: \"uint32\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    samplesPerChannel: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint32\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        Schema.Null,\n      ]),\n    ),\n  },\n).annotate({ description: \"EXPERIMENTAL - thread realtime audio chunk.\" });\n\nexport type V2ThreadRealtimeStartedNotification__RealtimeConversationVersion = \"v1\" | \"v2\";\nexport const V2ThreadRealtimeStartedNotification__RealtimeConversationVersion = Schema.Literals([\n  \"v1\",\n  \"v2\",\n]);\n\nexport type V2ThreadResumeParams__AgentMessageInputContent = {\n  readonly encrypted_content: string;\n  readonly type: \"encrypted_content\";\n};\nexport const V2ThreadResumeParams__AgentMessageInputContent = Schema.Union(\n  [\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"encrypted_content\").annotate({\n        title: \"EncryptedContentAgentMessageInputContentType\",\n      }),\n    }).annotate({ title: \"EncryptedContentAgentMessageInputContent\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2ThreadResumeParams__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadResumeParams__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadResumeParams__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadResumeParams__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadResumeParams__LocalShellAction = {\n  readonly command: ReadonlyArray<string>;\n  readonly env?: { readonly [x: string]: string } | null;\n  readonly timeout_ms?: number | null;\n  readonly type: \"exec\";\n  readonly user?: string | null;\n  readonly working_directory?: string | null;\n};\nexport const V2ThreadResumeParams__LocalShellAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.Array(Schema.String),\n      env: Schema.optionalKey(\n        Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n      ),\n      timeout_ms: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ format: \"uint64\" })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"exec\").annotate({ title: \"ExecLocalShellActionType\" }),\n      user: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      working_directory: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"ExecLocalShellAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__LocalShellStatus = \"completed\" | \"in_progress\" | \"incomplete\";\nexport const V2ThreadResumeParams__LocalShellStatus = Schema.Literals([\n  \"completed\",\n  \"in_progress\",\n  \"incomplete\",\n]);\n\nexport type V2ThreadResumeParams__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadResumeParams__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadResumeParams__Personality = \"none\" | \"friendly\" | \"pragmatic\";\nexport const V2ThreadResumeParams__Personality = Schema.Literals([\"none\", \"friendly\", \"pragmatic\"]);\n\nexport type V2ThreadResumeParams__ReasoningItemContent =\n  | { readonly text: string; readonly type: \"reasoning_text\" }\n  | { readonly text: string; readonly type: \"text\" };\nexport const V2ThreadResumeParams__ReasoningItemContent = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"reasoning_text\").annotate({\n        title: \"ReasoningTextReasoningItemContentType\",\n      }),\n    }).annotate({ title: \"ReasoningTextReasoningItemContent\" }),\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"text\").annotate({ title: \"TextReasoningItemContentType\" }),\n    }).annotate({ title: \"TextReasoningItemContent\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__ReasoningItemReasoningSummary = {\n  readonly text: string;\n  readonly type: \"summary_text\";\n};\nexport const V2ThreadResumeParams__ReasoningItemReasoningSummary = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"summary_text\").annotate({\n        title: \"SummaryTextReasoningItemReasoningSummaryType\",\n      }),\n    }).annotate({ title: \"SummaryTextReasoningItemReasoningSummary\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__ResponsesApiWebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"open_page\"; readonly url?: string | null }\n  | {\n      readonly pattern?: string | null;\n      readonly type: \"find_in_page\";\n      readonly url?: string | null;\n    }\n  | { readonly type: \"other\" };\nexport const V2ThreadResumeParams__ResponsesApiWebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchResponsesApiWebSearchActionType\" }),\n    }).annotate({ title: \"SearchResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"open_page\").annotate({\n        title: \"OpenPageResponsesApiWebSearchActionType\",\n      }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"find_in_page\").annotate({\n        title: \"FindInPageResponsesApiWebSearchActionType\",\n      }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageResponsesApiWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherResponsesApiWebSearchActionType\" }),\n    }).annotate({ title: \"OtherResponsesApiWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__SandboxMode =\n  | \"read-only\"\n  | \"workspace-write\"\n  | \"danger-full-access\";\nexport const V2ThreadResumeParams__SandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\n\nexport type V2ThreadResumeParams__SortDirection = \"asc\" | \"desc\";\nexport const V2ThreadResumeParams__SortDirection = Schema.Literals([\"asc\", \"desc\"]);\n\nexport type V2ThreadResumeParams__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadResumeParams__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadResumeResponse__AbsolutePathBuf = string;\nexport const V2ThreadResumeResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadResumeResponse__AgentPath = string;\nexport const V2ThreadResumeResponse__AgentPath = Schema.String;\n\nexport type V2ThreadResumeResponse__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadResumeResponse__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadResumeResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadResumeResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadResumeResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadResumeResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadResumeResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadResumeResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadResumeResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadResumeResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadResumeResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadResumeResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadResumeResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadResumeResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadResumeResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadResumeResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ThreadResumeResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadResumeResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadResumeResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadResumeResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadResumeResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadResumeResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadResumeResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadResumeResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadResumeResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadResumeResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ThreadResumeResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadResumeResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadResumeResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadResumeResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__ReasoningEffort = string;\nexport const V2ThreadResumeResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadResumeResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2ThreadResumeResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadResumeResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadResumeResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadResumeResponse__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const V2ThreadResumeResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadResumeResponse__ThreadId = string;\nexport const V2ThreadResumeResponse__ThreadId = Schema.String;\n\nexport type V2ThreadResumeResponse__ThreadSource = string;\nexport const V2ThreadResumeResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadResumeResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadResumeResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadResumeResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadResumeResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__AbsolutePathBuf = string;\nexport const V2ThreadRollbackResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadRollbackResponse__AgentPath = string;\nexport const V2ThreadRollbackResponse__AgentPath = Schema.String;\n\nexport type V2ThreadRollbackResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadRollbackResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadRollbackResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadRollbackResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadRollbackResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadRollbackResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadRollbackResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadRollbackResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadRollbackResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadRollbackResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadRollbackResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadRollbackResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadRollbackResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadRollbackResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadRollbackResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ThreadRollbackResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadRollbackResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadRollbackResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadRollbackResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadRollbackResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadRollbackResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadRollbackResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadRollbackResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadRollbackResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadRollbackResponse__NonSteerableTurnKind = Schema.Literals([\n  \"review\",\n  \"compact\",\n]);\n\nexport type V2ThreadRollbackResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadRollbackResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadRollbackResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadRollbackResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__ReasoningEffort = string;\nexport const V2ThreadRollbackResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadRollbackResponse__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2ThreadRollbackResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadRollbackResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadRollbackResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadRollbackResponse__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const V2ThreadRollbackResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadRollbackResponse__ThreadId = string;\nexport const V2ThreadRollbackResponse__ThreadId = Schema.String;\n\nexport type V2ThreadRollbackResponse__ThreadSource = string;\nexport const V2ThreadRollbackResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadRollbackResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadRollbackResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadRollbackResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadRollbackResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadSettingsUpdatedNotification__AbsolutePathBuf = string;\nexport const V2ThreadSettingsUpdatedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadSettingsUpdatedNotification__ActivePermissionProfile = {\n  readonly extends?: string | null;\n  readonly id: string;\n};\nexport const V2ThreadSettingsUpdatedNotification__ActivePermissionProfile = Schema.Struct({\n  extends: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Parent profile identifier from the selected permissions profile's `extends` setting, when present.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({\n    description:\n      \"Identifier from `default_permissions` or the implicit built-in default, such as `:workspace` or a user-defined `[permissions.<id>]` profile.\",\n  }),\n});\n\nexport type V2ThreadSettingsUpdatedNotification__ApprovalsReviewer =\n  | \"user\"\n  | \"auto_review\"\n  | \"guardian_subagent\";\nexport const V2ThreadSettingsUpdatedNotification__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadSettingsUpdatedNotification__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadSettingsUpdatedNotification__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadSettingsUpdatedNotification__ModeKind = \"plan\" | \"default\";\nexport const V2ThreadSettingsUpdatedNotification__ModeKind = Schema.Literals([\n  \"plan\",\n  \"default\",\n]).annotate({ description: \"Initial collaboration mode to use when the TUI starts.\" });\n\nexport type V2ThreadSettingsUpdatedNotification__Personality = \"none\" | \"friendly\" | \"pragmatic\";\nexport const V2ThreadSettingsUpdatedNotification__Personality = Schema.Literals([\n  \"none\",\n  \"friendly\",\n  \"pragmatic\",\n]);\n\nexport type V2ThreadSettingsUpdatedNotification__ReasoningEffort = string;\nexport const V2ThreadSettingsUpdatedNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadSettingsUpdatedNotification__ReasoningSummary =\n  | \"auto\"\n  | \"concise\"\n  | \"detailed\"\n  | \"none\";\nexport const V2ThreadSettingsUpdatedNotification__ReasoningSummary = Schema.Union(\n  [\n    Schema.Literals([\"auto\", \"concise\", \"detailed\"]),\n    Schema.Literal(\"none\").annotate({ description: \"Option to disable reasoning summaries.\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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\",\n});\n\nexport type V2ThreadStartedNotification__AbsolutePathBuf = string;\nexport const V2ThreadStartedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadStartedNotification__AgentPath = string;\nexport const V2ThreadStartedNotification__AgentPath = Schema.String;\n\nexport type V2ThreadStartedNotification__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadStartedNotification__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadStartedNotification__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadStartedNotification__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadStartedNotification__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadStartedNotification__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartedNotification__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadStartedNotification__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadStartedNotification__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadStartedNotification__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadStartedNotification__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadStartedNotification__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadStartedNotification__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadStartedNotification__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadStartedNotification__McpToolCallError = { readonly message: string };\nexport const V2ThreadStartedNotification__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2ThreadStartedNotification__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadStartedNotification__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadStartedNotification__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadStartedNotification__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadStartedNotification__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadStartedNotification__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadStartedNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadStartedNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadStartedNotification__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadStartedNotification__NonSteerableTurnKind = Schema.Literals([\n  \"review\",\n  \"compact\",\n]);\n\nexport type V2ThreadStartedNotification__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadStartedNotification__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadStartedNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadStartedNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartedNotification__ReasoningEffort = string;\nexport const V2ThreadStartedNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadStartedNotification__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2ThreadStartedNotification__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadStartedNotification__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadStartedNotification__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadStartedNotification__ThreadActiveFlag =\n  | \"waitingOnApproval\"\n  | \"waitingOnUserInput\";\nexport const V2ThreadStartedNotification__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadStartedNotification__ThreadId = string;\nexport const V2ThreadStartedNotification__ThreadId = Schema.String;\n\nexport type V2ThreadStartedNotification__ThreadSource = string;\nexport const V2ThreadStartedNotification__ThreadSource = Schema.String;\n\nexport type V2ThreadStartedNotification__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadStartedNotification__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadStartedNotification__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadStartedNotification__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartParams__AbsolutePathBuf = string;\nexport const V2ThreadStartParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadStartParams__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2ThreadStartParams__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadStartParams__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadStartParams__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartParams__Personality = \"none\" | \"friendly\" | \"pragmatic\";\nexport const V2ThreadStartParams__Personality = Schema.Literals([\"none\", \"friendly\", \"pragmatic\"]);\n\nexport type V2ThreadStartParams__SandboxMode =\n  | \"read-only\"\n  | \"workspace-write\"\n  | \"danger-full-access\";\nexport const V2ThreadStartParams__SandboxMode = Schema.Literals([\n  \"read-only\",\n  \"workspace-write\",\n  \"danger-full-access\",\n]);\n\nexport type V2ThreadStartParams__ThreadSource = string;\nexport const V2ThreadStartParams__ThreadSource = Schema.String;\n\nexport type V2ThreadStartParams__ThreadStartSource = \"startup\" | \"clear\";\nexport const V2ThreadStartParams__ThreadStartSource = Schema.Literals([\"startup\", \"clear\"]);\n\nexport type V2ThreadStartResponse__AbsolutePathBuf = string;\nexport const V2ThreadStartResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadStartResponse__AgentPath = string;\nexport const V2ThreadStartResponse__AgentPath = Schema.String;\n\nexport type V2ThreadStartResponse__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2ThreadStartResponse__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadStartResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadStartResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadStartResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadStartResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadStartResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadStartResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadStartResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadStartResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadStartResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadStartResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadStartResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadStartResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadStartResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadStartResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2ThreadStartResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadStartResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadStartResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadStartResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadStartResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadStartResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadStartResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadStartResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadStartResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadStartResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2ThreadStartResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadStartResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadStartResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadStartResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__ReasoningEffort = string;\nexport const V2ThreadStartResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadStartResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2ThreadStartResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadStartResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadStartResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadStartResponse__ThreadActiveFlag = \"waitingOnApproval\" | \"waitingOnUserInput\";\nexport const V2ThreadStartResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadStartResponse__ThreadId = string;\nexport const V2ThreadStartResponse__ThreadId = Schema.String;\n\nexport type V2ThreadStartResponse__ThreadSource = string;\nexport const V2ThreadStartResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadStartResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadStartResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadStartResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadStartResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStatusChangedNotification__ThreadActiveFlag =\n  | \"waitingOnApproval\"\n  | \"waitingOnUserInput\";\nexport const V2ThreadStatusChangedNotification__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadTokenUsageUpdatedNotification__TokenUsageBreakdown = {\n  readonly cachedInputTokens: number;\n  readonly inputTokens: number;\n  readonly outputTokens: number;\n  readonly reasoningOutputTokens: number;\n  readonly totalTokens: number;\n};\nexport const V2ThreadTokenUsageUpdatedNotification__TokenUsageBreakdown = Schema.Struct({\n  cachedInputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  inputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  outputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  reasoningOutputTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  totalTokens: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type V2ThreadUnarchiveResponse__AbsolutePathBuf = string;\nexport const V2ThreadUnarchiveResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadUnarchiveResponse__AgentPath = string;\nexport const V2ThreadUnarchiveResponse__AgentPath = Schema.String;\n\nexport type V2ThreadUnarchiveResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2ThreadUnarchiveResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2ThreadUnarchiveResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadUnarchiveResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadUnarchiveResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2ThreadUnarchiveResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadUnarchiveResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadUnarchiveResponse__GitInfo = {\n  readonly branch?: string | null;\n  readonly originUrl?: string | null;\n  readonly sha?: string | null;\n};\nexport const V2ThreadUnarchiveResponse__GitInfo = Schema.Struct({\n  branch: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  originUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadUnarchiveResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2ThreadUnarchiveResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2ThreadUnarchiveResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2ThreadUnarchiveResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2ThreadUnarchiveResponse__McpToolCallError = { readonly message: string };\nexport const V2ThreadUnarchiveResponse__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2ThreadUnarchiveResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2ThreadUnarchiveResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2ThreadUnarchiveResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadUnarchiveResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadUnarchiveResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2ThreadUnarchiveResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2ThreadUnarchiveResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2ThreadUnarchiveResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2ThreadUnarchiveResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2ThreadUnarchiveResponse__NonSteerableTurnKind = Schema.Literals([\n  \"review\",\n  \"compact\",\n]);\n\nexport type V2ThreadUnarchiveResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2ThreadUnarchiveResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2ThreadUnarchiveResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2ThreadUnarchiveResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__ReasoningEffort = string;\nexport const V2ThreadUnarchiveResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2ThreadUnarchiveResponse__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2ThreadUnarchiveResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2ThreadUnarchiveResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2ThreadUnarchiveResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadUnarchiveResponse__ThreadActiveFlag =\n  | \"waitingOnApproval\"\n  | \"waitingOnUserInput\";\nexport const V2ThreadUnarchiveResponse__ThreadActiveFlag = Schema.Literals([\n  \"waitingOnApproval\",\n  \"waitingOnUserInput\",\n]);\n\nexport type V2ThreadUnarchiveResponse__ThreadId = string;\nexport const V2ThreadUnarchiveResponse__ThreadId = Schema.String;\n\nexport type V2ThreadUnarchiveResponse__ThreadSource = string;\nexport const V2ThreadUnarchiveResponse__ThreadSource = Schema.String;\n\nexport type V2ThreadUnarchiveResponse__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2ThreadUnarchiveResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2ThreadUnarchiveResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2ThreadUnarchiveResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnsubscribeResponse__ThreadUnsubscribeStatus =\n  | \"notLoaded\"\n  | \"notSubscribed\"\n  | \"unsubscribed\";\nexport const V2ThreadUnsubscribeResponse__ThreadUnsubscribeStatus = Schema.Literals([\n  \"notLoaded\",\n  \"notSubscribed\",\n  \"unsubscribed\",\n]);\n\nexport type V2TurnCompletedNotification__AbsolutePathBuf = string;\nexport const V2TurnCompletedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnCompletedNotification__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2TurnCompletedNotification__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2TurnCompletedNotification__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2TurnCompletedNotification__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2TurnCompletedNotification__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2TurnCompletedNotification__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnCompletedNotification__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2TurnCompletedNotification__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnCompletedNotification__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2TurnCompletedNotification__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2TurnCompletedNotification__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2TurnCompletedNotification__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2TurnCompletedNotification__McpToolCallError = { readonly message: string };\nexport const V2TurnCompletedNotification__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2TurnCompletedNotification__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2TurnCompletedNotification__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2TurnCompletedNotification__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2TurnCompletedNotification__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnCompletedNotification__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2TurnCompletedNotification__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2TurnCompletedNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2TurnCompletedNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2TurnCompletedNotification__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2TurnCompletedNotification__NonSteerableTurnKind = Schema.Literals([\n  \"review\",\n  \"compact\",\n]);\n\nexport type V2TurnCompletedNotification__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2TurnCompletedNotification__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2TurnCompletedNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2TurnCompletedNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnCompletedNotification__ReasoningEffort = string;\nexport const V2TurnCompletedNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2TurnCompletedNotification__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2TurnCompletedNotification__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2TurnCompletedNotification__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2TurnCompletedNotification__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2TurnCompletedNotification__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2TurnCompletedNotification__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2TurnCompletedNotification__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2TurnCompletedNotification__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnPlanUpdatedNotification__TurnPlanStepStatus =\n  | \"pending\"\n  | \"inProgress\"\n  | \"completed\";\nexport const V2TurnPlanUpdatedNotification__TurnPlanStepStatus = Schema.Literals([\n  \"pending\",\n  \"inProgress\",\n  \"completed\",\n]);\n\nexport type V2TurnStartedNotification__AbsolutePathBuf = string;\nexport const V2TurnStartedNotification__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnStartedNotification__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2TurnStartedNotification__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2TurnStartedNotification__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2TurnStartedNotification__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2TurnStartedNotification__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2TurnStartedNotification__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartedNotification__DynamicToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2TurnStartedNotification__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnStartedNotification__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2TurnStartedNotification__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2TurnStartedNotification__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2TurnStartedNotification__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2TurnStartedNotification__McpToolCallError = { readonly message: string };\nexport const V2TurnStartedNotification__McpToolCallError = Schema.Struct({\n  message: Schema.String,\n});\n\nexport type V2TurnStartedNotification__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2TurnStartedNotification__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2TurnStartedNotification__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2TurnStartedNotification__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnStartedNotification__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2TurnStartedNotification__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2TurnStartedNotification__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2TurnStartedNotification__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2TurnStartedNotification__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2TurnStartedNotification__NonSteerableTurnKind = Schema.Literals([\n  \"review\",\n  \"compact\",\n]);\n\nexport type V2TurnStartedNotification__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2TurnStartedNotification__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2TurnStartedNotification__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2TurnStartedNotification__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartedNotification__ReasoningEffort = string;\nexport const V2TurnStartedNotification__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2TurnStartedNotification__SubAgentActivityKind =\n  | \"started\"\n  | \"interacted\"\n  | \"interrupted\";\nexport const V2TurnStartedNotification__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2TurnStartedNotification__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2TurnStartedNotification__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2TurnStartedNotification__TurnStatus =\n  | \"completed\"\n  | \"interrupted\"\n  | \"failed\"\n  | \"inProgress\";\nexport const V2TurnStartedNotification__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2TurnStartedNotification__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2TurnStartedNotification__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartParams__AbsolutePathBuf = string;\nexport const V2TurnStartParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnStartParams__AdditionalContextKind = \"untrusted\" | \"application\";\nexport const V2TurnStartParams__AdditionalContextKind = Schema.Literals([\n  \"untrusted\",\n  \"application\",\n]);\n\nexport type V2TurnStartParams__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2TurnStartParams__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2TurnStartParams__AskForApproval =\n  | \"untrusted\"\n  | \"on-failure\"\n  | \"on-request\"\n  | \"never\"\n  | {\n      readonly granular: {\n        readonly mcp_elicitations: boolean;\n        readonly request_permissions?: boolean;\n        readonly rules: boolean;\n        readonly sandbox_approval: boolean;\n        readonly skill_approval?: boolean;\n      };\n    };\nexport const V2TurnStartParams__AskForApproval = Schema.Union(\n  [\n    Schema.Literals([\"untrusted\", \"on-failure\", \"on-request\", \"never\"]),\n    Schema.Struct({\n      granular: Schema.Struct({\n        mcp_elicitations: Schema.Boolean,\n        request_permissions: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        rules: Schema.Boolean,\n        sandbox_approval: Schema.Boolean,\n        skill_approval: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      }),\n    }).annotate({ title: \"GranularAskForApproval\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartParams__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2TurnStartParams__ImageDetail = Schema.Literals([\"auto\", \"low\", \"high\", \"original\"]);\n\nexport type V2TurnStartParams__ModeKind = \"plan\" | \"default\";\nexport const V2TurnStartParams__ModeKind = Schema.Literals([\"plan\", \"default\"]).annotate({\n  description: \"Initial collaboration mode to use when the TUI starts.\",\n});\n\nexport type V2TurnStartParams__Personality = \"none\" | \"friendly\" | \"pragmatic\";\nexport const V2TurnStartParams__Personality = Schema.Literals([\"none\", \"friendly\", \"pragmatic\"]);\n\nexport type V2TurnStartParams__ReasoningEffort = string;\nexport const V2TurnStartParams__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2TurnStartParams__ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"none\";\nexport const V2TurnStartParams__ReasoningSummary = Schema.Union(\n  [\n    Schema.Literals([\"auto\", \"concise\", \"detailed\"]),\n    Schema.Literal(\"none\").annotate({ description: \"Option to disable reasoning summaries.\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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\",\n});\n\nexport type V2TurnStartParams__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2TurnStartParams__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2TurnStartResponse__AbsolutePathBuf = string;\nexport const V2TurnStartResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnStartResponse__CollabAgentStatus =\n  | \"pendingInit\"\n  | \"running\"\n  | \"interrupted\"\n  | \"completed\"\n  | \"errored\"\n  | \"shutdown\"\n  | \"notFound\";\nexport const V2TurnStartResponse__CollabAgentStatus = Schema.Literals([\n  \"pendingInit\",\n  \"running\",\n  \"interrupted\",\n  \"completed\",\n  \"errored\",\n  \"shutdown\",\n  \"notFound\",\n]);\n\nexport type V2TurnStartResponse__CommandExecutionStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2TurnStartResponse__CommandExecutionStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2TurnStartResponse__DynamicToolCallOutputContentItem =\n  | { readonly text: string; readonly type: \"inputText\" }\n  | { readonly imageUrl: string; readonly type: \"inputImage\" };\nexport const V2TurnStartResponse__DynamicToolCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"inputText\").annotate({\n        title: \"InputTextDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextDynamicToolCallOutputContentItem\" }),\n    Schema.Struct({\n      imageUrl: Schema.String,\n      type: Schema.Literal(\"inputImage\").annotate({\n        title: \"InputImageDynamicToolCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageDynamicToolCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartResponse__DynamicToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2TurnStartResponse__DynamicToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnStartResponse__HookPromptFragment = {\n  readonly hookRunId: string;\n  readonly text: string;\n};\nexport const V2TurnStartResponse__HookPromptFragment = Schema.Struct({\n  hookRunId: Schema.String,\n  text: Schema.String,\n});\n\nexport type V2TurnStartResponse__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2TurnStartResponse__ImageDetail = Schema.Literals([\n  \"auto\",\n  \"low\",\n  \"high\",\n  \"original\",\n]);\n\nexport type V2TurnStartResponse__McpToolCallError = { readonly message: string };\nexport const V2TurnStartResponse__McpToolCallError = Schema.Struct({ message: Schema.String });\n\nexport type V2TurnStartResponse__McpToolCallResult = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly structuredContent?: unknown;\n};\nexport const V2TurnStartResponse__McpToolCallResult = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n});\n\nexport type V2TurnStartResponse__McpToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2TurnStartResponse__McpToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnStartResponse__MemoryCitationEntry = {\n  readonly lineEnd: number;\n  readonly lineStart: number;\n  readonly note: string;\n  readonly path: string;\n};\nexport const V2TurnStartResponse__MemoryCitationEntry = Schema.Struct({\n  lineEnd: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  lineStart: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  note: Schema.String,\n  path: Schema.String,\n});\n\nexport type V2TurnStartResponse__MessagePhase = \"commentary\" | \"final_answer\";\nexport const V2TurnStartResponse__MessagePhase = Schema.Literals([\n  \"commentary\",\n  \"final_answer\",\n]).annotate({\n  description:\n    'Classifies an assistant message as interim commentary or final answer text.\\n\\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.',\n});\n\nexport type V2TurnStartResponse__NonSteerableTurnKind = \"review\" | \"compact\";\nexport const V2TurnStartResponse__NonSteerableTurnKind = Schema.Literals([\"review\", \"compact\"]);\n\nexport type V2TurnStartResponse__PatchApplyStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\"\n  | \"declined\";\nexport const V2TurnStartResponse__PatchApplyStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n  \"declined\",\n]);\n\nexport type V2TurnStartResponse__PatchChangeKind =\n  | { readonly type: \"add\" }\n  | { readonly type: \"delete\" }\n  | { readonly move_path?: string | null; readonly type: \"update\" };\nexport const V2TurnStartResponse__PatchChangeKind = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"add\").annotate({ title: \"AddPatchChangeKindType\" }),\n    }).annotate({ title: \"AddPatchChangeKind\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"delete\").annotate({ title: \"DeletePatchChangeKindType\" }),\n    }).annotate({ title: \"DeletePatchChangeKind\" }),\n    Schema.Struct({\n      move_path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"update\").annotate({ title: \"UpdatePatchChangeKindType\" }),\n    }).annotate({ title: \"UpdatePatchChangeKind\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartResponse__ReasoningEffort = string;\nexport const V2TurnStartResponse__ReasoningEffort = Schema.String.annotate({\n  description: \"A non-empty reasoning effort value advertised by the model.\",\n}).check(Schema.isMinLength(1));\n\nexport type V2TurnStartResponse__SubAgentActivityKind = \"started\" | \"interacted\" | \"interrupted\";\nexport const V2TurnStartResponse__SubAgentActivityKind = Schema.Literals([\n  \"started\",\n  \"interacted\",\n  \"interrupted\",\n]);\n\nexport type V2TurnStartResponse__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2TurnStartResponse__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2TurnStartResponse__TurnStatus = \"completed\" | \"interrupted\" | \"failed\" | \"inProgress\";\nexport const V2TurnStartResponse__TurnStatus = Schema.Literals([\n  \"completed\",\n  \"interrupted\",\n  \"failed\",\n  \"inProgress\",\n]);\n\nexport type V2TurnStartResponse__WebSearchAction =\n  | {\n      readonly queries?: ReadonlyArray<string> | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly type: \"openPage\"; readonly url?: string | null }\n  | { readonly pattern?: string | null; readonly type: \"findInPage\"; readonly url?: string | null }\n  | { readonly type: \"other\" };\nexport const V2TurnStartResponse__WebSearchAction = Schema.Union(\n  [\n    Schema.Struct({\n      queries: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchWebSearchActionType\" }),\n    }).annotate({ title: \"SearchWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"openPage\").annotate({ title: \"OpenPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"OpenPageWebSearchAction\" }),\n    Schema.Struct({\n      pattern: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"findInPage\").annotate({ title: \"FindInPageWebSearchActionType\" }),\n      url: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ title: \"FindInPageWebSearchAction\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherWebSearchActionType\" }),\n    }).annotate({ title: \"OtherWebSearchAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnSteerParams__AdditionalContextKind = \"untrusted\" | \"application\";\nexport const V2TurnSteerParams__AdditionalContextKind = Schema.Literals([\n  \"untrusted\",\n  \"application\",\n]);\n\nexport type V2TurnSteerParams__ImageDetail = \"auto\" | \"low\" | \"high\" | \"original\";\nexport const V2TurnSteerParams__ImageDetail = Schema.Literals([\"auto\", \"low\", \"high\", \"original\"]);\n\nexport type V2TurnSteerParams__TextElement = {\n  readonly byteRange: { readonly end: number; readonly start: number };\n  readonly placeholder?: string | null;\n};\nexport const V2TurnSteerParams__TextElement = Schema.Struct({\n  byteRange: Schema.Struct({\n    end: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    start: Schema.Number.annotate({ format: \"uint\" })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({\n    description: \"Byte range in the parent `text` buffer that this element occupies.\",\n  }),\n  placeholder: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional human-readable placeholder for the element, displayed in the UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2WindowsSandboxReadinessResponse__WindowsSandboxReadiness =\n  | \"ready\"\n  | \"notConfigured\"\n  | \"updateRequired\";\nexport const V2WindowsSandboxReadinessResponse__WindowsSandboxReadiness = Schema.Literals([\n  \"ready\",\n  \"notConfigured\",\n  \"updateRequired\",\n]);\n\nexport type V2WindowsSandboxSetupCompletedNotification__WindowsSandboxSetupMode =\n  | \"elevated\"\n  | \"unelevated\";\nexport const V2WindowsSandboxSetupCompletedNotification__WindowsSandboxSetupMode = Schema.Literals([\n  \"elevated\",\n  \"unelevated\",\n]);\n\nexport type V2WindowsSandboxSetupStartParams__AbsolutePathBuf = string;\nexport const V2WindowsSandboxSetupStartParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2WindowsSandboxSetupStartParams__WindowsSandboxSetupMode = \"elevated\" | \"unelevated\";\nexport const V2WindowsSandboxSetupStartParams__WindowsSandboxSetupMode = Schema.Literals([\n  \"elevated\",\n  \"unelevated\",\n]);\n\nexport type ApplyPatchApprovalResponse__NetworkPolicyAmendment = {\n  readonly action: ApplyPatchApprovalResponse__NetworkPolicyRuleAction;\n  readonly host: string;\n};\nexport const ApplyPatchApprovalResponse__NetworkPolicyAmendment = Schema.Struct({\n  action: ApplyPatchApprovalResponse__NetworkPolicyRuleAction,\n  host: Schema.String,\n});\n\nexport type ClientRequest__PluginInstallParams = {\n  readonly marketplacePath?: ClientRequest__AbsolutePathBuf | null;\n  readonly pluginName: string;\n  readonly remoteMarketplaceName?: string | null;\n};\nexport const ClientRequest__PluginInstallParams = Schema.Struct({\n  marketplacePath: Schema.optionalKey(Schema.Union([ClientRequest__AbsolutePathBuf, Schema.Null])),\n  pluginName: Schema.String,\n  remoteMarketplaceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__PluginInstalledParams = {\n  readonly cwds?: ReadonlyArray<ClientRequest__AbsolutePathBuf> | null;\n  readonly installSuggestionPluginNames?: ReadonlyArray<string> | null;\n};\nexport const ClientRequest__PluginInstalledParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ClientRequest__AbsolutePathBuf).annotate({\n        description: \"Optional working directories used to discover repo marketplaces.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  installSuggestionPluginNames: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Additional uninstalled plugin names that should be returned when present locally. This is used by mention surfaces that intentionally expose install entrypoints.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__PluginReadParams = {\n  readonly marketplacePath?: ClientRequest__AbsolutePathBuf | null;\n  readonly pluginName: string;\n  readonly remoteMarketplaceName?: string | null;\n};\nexport const ClientRequest__PluginReadParams = Schema.Struct({\n  marketplacePath: Schema.optionalKey(Schema.Union([ClientRequest__AbsolutePathBuf, Schema.Null])),\n  pluginName: Schema.String,\n  remoteMarketplaceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<ClientRequest__AbsolutePathBuf>;\n    };\nexport const ClientRequest__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(ClientRequest__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__SkillsConfigWriteParams = {\n  readonly enabled: boolean;\n  readonly name?: string | null;\n  readonly path?: ClientRequest__AbsolutePathBuf | null;\n};\nexport const ClientRequest__SkillsConfigWriteParams = Schema.Struct({\n  enabled: Schema.Boolean,\n  name: Schema.optionalKey(\n    Schema.Union([Schema.String.annotate({ description: \"Name-based selector.\" }), Schema.Null]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([ClientRequest__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Path-based selector.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__SkillsExtraRootsSetParams = {\n  readonly extraRoots: ReadonlyArray<ClientRequest__AbsolutePathBuf>;\n};\nexport const ClientRequest__SkillsExtraRootsSetParams = Schema.Struct({\n  extraRoots: Schema.Array(ClientRequest__AbsolutePathBuf),\n});\n\nexport type ClientRequest__SendAddCreditsNudgeEmailParams = {\n  readonly creditType: ClientRequest__AddCreditsNudgeCreditType;\n};\nexport const ClientRequest__SendAddCreditsNudgeEmailParams = Schema.Struct({\n  creditType: ClientRequest__AddCreditsNudgeCreditType,\n});\n\nexport type ClientRequest__ContentItem =\n  | { readonly text: string; readonly type: \"input_text\" }\n  | {\n      readonly detail?: ClientRequest__ImageDetail | null;\n      readonly image_url: string;\n      readonly type: \"input_image\";\n    }\n  | { readonly text: string; readonly type: \"output_text\" };\nexport const ClientRequest__ContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"input_text\").annotate({ title: \"InputTextContentItemType\" }),\n    }).annotate({ title: \"InputTextContentItem\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([ClientRequest__ImageDetail, Schema.Null])),\n      image_url: Schema.String,\n      type: Schema.Literal(\"input_image\").annotate({ title: \"InputImageContentItemType\" }),\n    }).annotate({ title: \"InputImageContentItem\" }),\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"output_text\").annotate({ title: \"OutputTextContentItemType\" }),\n    }).annotate({ title: \"OutputTextContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__FunctionCallOutputContentItem =\n  | { readonly text: string; readonly type: \"input_text\" }\n  | {\n      readonly detail?: ClientRequest__ImageDetail | null;\n      readonly image_url: string;\n      readonly type: \"input_image\";\n    }\n  | { readonly encrypted_content: string; readonly type: \"encrypted_content\" };\nexport const ClientRequest__FunctionCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"input_text\").annotate({\n        title: \"InputTextFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextFunctionCallOutputContentItem\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([ClientRequest__ImageDetail, Schema.Null])),\n      image_url: Schema.String,\n      type: Schema.Literal(\"input_image\").annotate({\n        title: \"InputImageFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageFunctionCallOutputContentItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"encrypted_content\").annotate({\n        title: \"EncryptedContentFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"EncryptedContentFunctionCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type ClientRequest__InitializeParams = {\n  readonly capabilities?: ClientRequest__InitializeCapabilities | null;\n  readonly clientInfo: ClientRequest__ClientInfo;\n};\nexport const ClientRequest__InitializeParams = Schema.Struct({\n  capabilities: Schema.optionalKey(\n    Schema.Union([ClientRequest__InitializeCapabilities, Schema.Null]),\n  ),\n  clientInfo: ClientRequest__ClientInfo,\n});\n\nexport type ClientRequest__ListMcpServerStatusParams = {\n  readonly cursor?: string | null;\n  readonly detail?: ClientRequest__McpServerStatusDetail | null;\n  readonly limit?: number | null;\n  readonly threadId?: string | null;\n};\nexport const ClientRequest__ListMcpServerStatusParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  detail: Schema.optionalKey(\n    Schema.Union([ClientRequest__McpServerStatusDetail, Schema.Null]).annotate({\n      description:\n        \"Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a server-defined value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__ConfigEdit = {\n  readonly keyPath: string;\n  readonly mergeStrategy: ClientRequest__MergeStrategy;\n  readonly value: unknown;\n};\nexport const ClientRequest__ConfigEdit = Schema.Struct({\n  keyPath: Schema.String,\n  mergeStrategy: ClientRequest__MergeStrategy,\n  value: Schema.Unknown,\n});\n\nexport type ClientRequest__ConfigValueWriteParams = {\n  readonly expectedVersion?: string | null;\n  readonly filePath?: string | null;\n  readonly keyPath: string;\n  readonly mergeStrategy: ClientRequest__MergeStrategy;\n  readonly value: unknown;\n};\nexport const ClientRequest__ConfigValueWriteParams = Schema.Struct({\n  expectedVersion: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  filePath: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Path to the config file to write; defaults to the user's `config.toml` when omitted.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  keyPath: Schema.String,\n  mergeStrategy: ClientRequest__MergeStrategy,\n  value: Schema.Unknown,\n});\n\nexport type ClientRequest__PluginListParams = {\n  readonly cwds?: ReadonlyArray<ClientRequest__AbsolutePathBuf> | null;\n  readonly marketplaceKinds?: ReadonlyArray<ClientRequest__PluginListMarketplaceKind> | null;\n};\nexport const ClientRequest__PluginListParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ClientRequest__AbsolutePathBuf).annotate({\n        description:\n          \"Optional working directories used to discover repo marketplaces. When omitted, only home-scoped marketplaces and the official curated marketplace are considered.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  marketplaceKinds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ClientRequest__PluginListMarketplaceKind).annotate({\n        description:\n          \"Optional marketplace kind filter. When omitted, only local marketplaces are queried, plus the default remote catalog when enabled by feature flag.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest__PluginShareTarget = {\n  readonly principalId: string;\n  readonly principalType: ClientRequest__PluginSharePrincipalType;\n  readonly role: ClientRequest__PluginShareTargetRole;\n};\nexport const ClientRequest__PluginShareTarget = Schema.Struct({\n  principalId: Schema.String,\n  principalType: ClientRequest__PluginSharePrincipalType,\n  role: ClientRequest__PluginShareTargetRole,\n});\n\nexport type ClientRequest__Settings = {\n  readonly developer_instructions?: string | null;\n  readonly model: string;\n  readonly reasoning_effort?: ClientRequest__ReasoningEffort | null;\n};\nexport const ClientRequest__Settings = Schema.Struct({\n  developer_instructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.String,\n  reasoning_effort: Schema.optionalKey(Schema.Union([ClientRequest__ReasoningEffort, Schema.Null])),\n}).annotate({ description: \"Settings for a collaboration mode.\" });\n\nexport type ClientRequest__ReviewStartParams = {\n  readonly delivery?: ClientRequest__ReviewDelivery | null;\n  readonly target: ClientRequest__ReviewTarget;\n  readonly threadId: string;\n};\nexport const ClientRequest__ReviewStartParams = Schema.Struct({\n  delivery: Schema.optionalKey(\n    Schema.Union([ClientRequest__ReviewDelivery, Schema.Null]).annotate({\n      description:\n        \"Where to run the review: inline (default) on the current thread or detached on a new thread (returned in `reviewThreadId`).\",\n    }),\n  ),\n  target: ClientRequest__ReviewTarget,\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadResumeParams = {\n  readonly approvalPolicy?: ClientRequest__AskForApproval | null;\n  readonly approvalsReviewer?: ClientRequest__ApprovalsReviewer | null;\n  readonly baseInstructions?: string | null;\n  readonly config?: { readonly [x: string]: unknown } | null;\n  readonly cwd?: string | null;\n  readonly developerInstructions?: string | null;\n  readonly model?: string | null;\n  readonly modelProvider?: string | null;\n  readonly personality?: ClientRequest__Personality | null;\n  readonly sandbox?: ClientRequest__SandboxMode | null;\n  readonly serviceTier?: string | null;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadResumeParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(Schema.Union([ClientRequest__AskForApproval, Schema.Null])),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([ClientRequest__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this thread and subsequent turns.\",\n    }),\n  ),\n  baseInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  config: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n  ),\n  cwd: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developerInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Configuration overrides for the resumed thread, if any.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  modelProvider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  personality: Schema.optionalKey(Schema.Union([ClientRequest__Personality, Schema.Null])),\n  sandbox: Schema.optionalKey(Schema.Union([ClientRequest__SandboxMode, Schema.Null])),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n}).annotate({\n  description:\n    \"There are three ways to resume a thread: 1. By thread_id: load the thread from disk by thread_id and resume it. 2. By history: instantiate the thread from memory and resume it. 3. By path: load the thread from disk by path and resume it.\\n\\nFor non-running threads, the precedence is: history > non-empty path > thread_id. If using history or a non-empty path for a non-running thread, the thread_id param will be ignored.\\n\\nIf thread_id identifies a running thread, app-server rejoins that thread and treats a non-empty path as a consistency check against the active rollout path. Empty string path values are treated as absent.\\n\\nPrefer using thread_id whenever possible.\",\n});\n\nexport type ClientRequest__MigrationDetails = {\n  readonly commands?: ReadonlyArray<ClientRequest__CommandMigration>;\n  readonly hooks?: ReadonlyArray<ClientRequest__HookMigration>;\n  readonly mcpServers?: ReadonlyArray<ClientRequest__McpServerMigration>;\n  readonly plugins?: ReadonlyArray<ClientRequest__PluginsMigration>;\n  readonly sessions?: ReadonlyArray<ClientRequest__SessionMigration>;\n  readonly subagents?: ReadonlyArray<ClientRequest__SubagentMigration>;\n};\nexport const ClientRequest__MigrationDetails = Schema.Struct({\n  commands: Schema.optionalKey(\n    Schema.Array(ClientRequest__CommandMigration).annotate({ default: [] }),\n  ),\n  hooks: Schema.optionalKey(Schema.Array(ClientRequest__HookMigration).annotate({ default: [] })),\n  mcpServers: Schema.optionalKey(\n    Schema.Array(ClientRequest__McpServerMigration).annotate({ default: [] }),\n  ),\n  plugins: Schema.optionalKey(\n    Schema.Array(ClientRequest__PluginsMigration).annotate({ default: [] }),\n  ),\n  sessions: Schema.optionalKey(\n    Schema.Array(ClientRequest__SessionMigration).annotate({ default: [] }),\n  ),\n  subagents: Schema.optionalKey(\n    Schema.Array(ClientRequest__SubagentMigration).annotate({ default: [] }),\n  ),\n});\n\nexport type ClientRequest__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<ClientRequest__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: ClientRequest__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: ClientRequest__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const ClientRequest__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(ClientRequest__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([ClientRequest__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([ClientRequest__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__ThreadGoalSetParams = {\n  readonly objective?: string | null;\n  readonly status?: ClientRequest__ThreadGoalStatus | null;\n  readonly threadId: string;\n  readonly tokenBudget?: number | null;\n};\nexport const ClientRequest__ThreadGoalSetParams = Schema.Struct({\n  objective: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: Schema.optionalKey(Schema.Union([ClientRequest__ThreadGoalStatus, Schema.Null])),\n  threadId: Schema.String,\n  tokenBudget: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n});\n\nexport type ClientRequest__ThreadMetadataUpdateParams = {\n  readonly gitInfo?: ClientRequest__ThreadMetadataGitInfoUpdateParams | null;\n  readonly threadId: string;\n};\nexport const ClientRequest__ThreadMetadataUpdateParams = Schema.Struct({\n  gitInfo: Schema.optionalKey(\n    Schema.Union([ClientRequest__ThreadMetadataGitInfoUpdateParams, Schema.Null]).annotate({\n      description:\n        \"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.\",\n    }),\n  ),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__ThreadForkParams = {\n  readonly approvalPolicy?: ClientRequest__AskForApproval | null;\n  readonly approvalsReviewer?: ClientRequest__ApprovalsReviewer | null;\n  readonly baseInstructions?: string | null;\n  readonly config?: { readonly [x: string]: unknown } | null;\n  readonly cwd?: string | null;\n  readonly developerInstructions?: string | null;\n  readonly ephemeral?: boolean;\n  readonly model?: string | null;\n  readonly modelProvider?: string | null;\n  readonly sandbox?: ClientRequest__SandboxMode | null;\n  readonly serviceTier?: string | null;\n  readonly threadId: string;\n  readonly threadSource?: ClientRequest__ThreadSource | null;\n};\nexport const ClientRequest__ThreadForkParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(Schema.Union([ClientRequest__AskForApproval, Schema.Null])),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([ClientRequest__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this thread and subsequent turns.\",\n    }),\n  ),\n  baseInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  config: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n  ),\n  cwd: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developerInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  ephemeral: Schema.optionalKey(Schema.Boolean),\n  model: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Configuration overrides for the forked thread, if any.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  modelProvider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sandbox: Schema.optionalKey(Schema.Union([ClientRequest__SandboxMode, Schema.Null])),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n  threadSource: Schema.optionalKey(\n    Schema.Union([ClientRequest__ThreadSource, Schema.Null]).annotate({\n      description:\n        \"Optional client-supplied analytics source classification for this forked thread.\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\\n\\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\\n\\nPrefer using thread_id whenever possible.\",\n});\n\nexport type ClientRequest__ThreadListParams = {\n  readonly archived?: boolean | null;\n  readonly cursor?: string | null;\n  readonly cwd?: ClientRequest__ThreadListCwdFilter | null;\n  readonly limit?: number | null;\n  readonly modelProviders?: ReadonlyArray<string> | null;\n  readonly searchTerm?: string | null;\n  readonly sortDirection?: ClientRequest__SortDirection | null;\n  readonly sortKey?: ClientRequest__ThreadSortKey | null;\n  readonly sourceKinds?: ReadonlyArray<ClientRequest__ThreadSourceKind> | null;\n  readonly useStateDbOnly?: boolean;\n};\nexport const ClientRequest__ThreadListParams = Schema.Struct({\n  archived: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description:\n          \"Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([ClientRequest__ThreadListCwdFilter, Schema.Null]).annotate({\n      description:\n        \"Optional cwd filter or filters; when set, only threads whose session cwd exactly matches one of these paths are returned.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  modelProviders: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Optional provider filter; when set, only sessions recorded under these providers are returned. When present but empty, includes all providers.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  searchTerm: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional substring filter for the extracted thread title.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sortDirection: Schema.optionalKey(\n    Schema.Union([ClientRequest__SortDirection, Schema.Null]).annotate({\n      description: \"Optional sort direction; defaults to descending (newest first).\",\n    }),\n  ),\n  sortKey: Schema.optionalKey(\n    Schema.Union([ClientRequest__ThreadSortKey, Schema.Null]).annotate({\n      description: \"Optional sort key; defaults to created_at.\",\n    }),\n  ),\n  sourceKinds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ClientRequest__ThreadSourceKind).annotate({\n        description:\n          \"Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  useStateDbOnly: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"If true, return from the state DB without scanning JSONL rollouts to repair thread metadata. Omitted or false preserves scan-and-repair behavior.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__ThreadStartParams = {\n  readonly approvalPolicy?: ClientRequest__AskForApproval | null;\n  readonly approvalsReviewer?: ClientRequest__ApprovalsReviewer | null;\n  readonly baseInstructions?: string | null;\n  readonly config?: { readonly [x: string]: unknown } | null;\n  readonly cwd?: string | null;\n  readonly developerInstructions?: string | null;\n  readonly ephemeral?: boolean | null;\n  readonly model?: string | null;\n  readonly modelProvider?: string | null;\n  readonly personality?: ClientRequest__Personality | null;\n  readonly sandbox?: ClientRequest__SandboxMode | null;\n  readonly serviceName?: string | null;\n  readonly serviceTier?: string | null;\n  readonly sessionStartSource?: ClientRequest__ThreadStartSource | null;\n  readonly threadSource?: ClientRequest__ThreadSource | null;\n};\nexport const ClientRequest__ThreadStartParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(Schema.Union([ClientRequest__AskForApproval, Schema.Null])),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([ClientRequest__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this thread and subsequent turns.\",\n    }),\n  ),\n  baseInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  config: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n  ),\n  cwd: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developerInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  ephemeral: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  model: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  modelProvider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  personality: Schema.optionalKey(Schema.Union([ClientRequest__Personality, Schema.Null])),\n  sandbox: Schema.optionalKey(Schema.Union([ClientRequest__SandboxMode, Schema.Null])),\n  serviceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sessionStartSource: Schema.optionalKey(\n    Schema.Union([ClientRequest__ThreadStartSource, Schema.Null]),\n  ),\n  threadSource: Schema.optionalKey(\n    Schema.Union([ClientRequest__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional client-supplied analytics source classification for this thread.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__WindowsSandboxSetupStartParams = {\n  readonly cwd?: ClientRequest__AbsolutePathBuf | null;\n  readonly mode: ClientRequest__WindowsSandboxSetupMode;\n};\nexport const ClientRequest__WindowsSandboxSetupStartParams = Schema.Struct({\n  cwd: Schema.optionalKey(Schema.Union([ClientRequest__AbsolutePathBuf, Schema.Null])),\n  mode: ClientRequest__WindowsSandboxSetupMode,\n});\n\nexport type CommandExecutionRequestApprovalParams__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: CommandExecutionRequestApprovalParams__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const CommandExecutionRequestApprovalParams__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: CommandExecutionRequestApprovalParams__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type CommandExecutionRequestApprovalParams__FileSystemPath =\n  | { readonly path: CommandExecutionRequestApprovalParams__AbsolutePathBuf; readonly type: \"path\" }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | {\n      readonly type: \"special\";\n      readonly value: CommandExecutionRequestApprovalParams__FileSystemSpecialPath;\n    };\nexport const CommandExecutionRequestApprovalParams__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: CommandExecutionRequestApprovalParams__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: CommandExecutionRequestApprovalParams__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type CommandExecutionRequestApprovalParams__NetworkApprovalContext = {\n  readonly host: string;\n  readonly protocol: CommandExecutionRequestApprovalParams__NetworkApprovalProtocol;\n};\nexport const CommandExecutionRequestApprovalParams__NetworkApprovalContext = Schema.Struct({\n  host: Schema.String,\n  protocol: CommandExecutionRequestApprovalParams__NetworkApprovalProtocol,\n});\n\nexport type CommandExecutionRequestApprovalParams__NetworkPolicyAmendment = {\n  readonly action: CommandExecutionRequestApprovalParams__NetworkPolicyRuleAction;\n  readonly host: string;\n};\nexport const CommandExecutionRequestApprovalParams__NetworkPolicyAmendment = Schema.Struct({\n  action: CommandExecutionRequestApprovalParams__NetworkPolicyRuleAction,\n  host: Schema.String,\n});\n\nexport type CommandExecutionRequestApprovalResponse__NetworkPolicyAmendment = {\n  readonly action: CommandExecutionRequestApprovalResponse__NetworkPolicyRuleAction;\n  readonly host: string;\n};\nexport const CommandExecutionRequestApprovalResponse__NetworkPolicyAmendment = Schema.Struct({\n  action: CommandExecutionRequestApprovalResponse__NetworkPolicyRuleAction,\n  host: Schema.String,\n});\n\nexport type ExecCommandApprovalResponse__NetworkPolicyAmendment = {\n  readonly action: ExecCommandApprovalResponse__NetworkPolicyRuleAction;\n  readonly host: string;\n};\nexport const ExecCommandApprovalResponse__NetworkPolicyAmendment = Schema.Struct({\n  action: ExecCommandApprovalResponse__NetworkPolicyRuleAction,\n  host: Schema.String,\n});\n\nexport type FuzzyFileSearchResponse__FuzzyFileSearchResult = {\n  readonly file_name: string;\n  readonly indices?: ReadonlyArray<number> | null;\n  readonly match_type: FuzzyFileSearchResponse__FuzzyFileSearchMatchType;\n  readonly path: string;\n  readonly root: string;\n  readonly score: number;\n};\nexport const FuzzyFileSearchResponse__FuzzyFileSearchResult = Schema.Struct({\n  file_name: Schema.String,\n  indices: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(\n        Schema.Number.annotate({ format: \"uint32\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  match_type: FuzzyFileSearchResponse__FuzzyFileSearchMatchType,\n  path: Schema.String,\n  root: Schema.String,\n  score: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"Superset of [`codex_file_search::FileMatch`]\" });\n\nexport type FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchResult = {\n  readonly file_name: string;\n  readonly indices?: ReadonlyArray<number> | null;\n  readonly match_type: FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchMatchType;\n  readonly path: string;\n  readonly root: string;\n  readonly score: number;\n};\nexport const FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchResult = Schema.Struct({\n  file_name: Schema.String,\n  indices: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(\n        Schema.Number.annotate({ format: \"uint32\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  match_type: FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchMatchType,\n  path: Schema.String,\n  root: Schema.String,\n  score: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"Superset of [`codex_file_search::FileMatch`]\" });\n\nexport type JSONRPCMessage__JSONRPCError = {\n  readonly error: JSONRPCMessage__JSONRPCErrorError;\n  readonly id: JSONRPCMessage__RequestId;\n};\nexport const JSONRPCMessage__JSONRPCError = Schema.Struct({\n  error: JSONRPCMessage__JSONRPCErrorError,\n  id: JSONRPCMessage__RequestId,\n}).annotate({ description: \"A response to a request that indicates an error occurred.\" });\n\nexport type JSONRPCMessage__JSONRPCResponse = {\n  readonly id: JSONRPCMessage__RequestId;\n  readonly result: unknown;\n};\nexport const JSONRPCMessage__JSONRPCResponse = Schema.Struct({\n  id: JSONRPCMessage__RequestId,\n  result: Schema.Unknown,\n}).annotate({ description: \"A successful (non-error) response to a request.\" });\n\nexport type JSONRPCMessage__JSONRPCRequest = {\n  readonly id: JSONRPCMessage__RequestId;\n  readonly method: string;\n  readonly params?: unknown;\n  readonly trace?: JSONRPCMessage__W3cTraceContext | null;\n};\nexport const JSONRPCMessage__JSONRPCRequest = Schema.Struct({\n  id: JSONRPCMessage__RequestId,\n  method: Schema.String,\n  params: Schema.optionalKey(Schema.Unknown),\n  trace: Schema.optionalKey(\n    Schema.Union([JSONRPCMessage__W3cTraceContext, Schema.Null]).annotate({\n      description: \"Optional W3C Trace Context for distributed tracing.\",\n    }),\n  ),\n}).annotate({ description: \"A request that expects a response.\" });\n\nexport type McpServerElicitationRequestParams__McpElicitationBooleanSchema = {\n  readonly default?: boolean | null;\n  readonly description?: string | null;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationBooleanType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationBooleanSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: McpServerElicitationRequestParams__McpElicitationBooleanType,\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationTitledEnumItems = {\n  readonly anyOf: ReadonlyArray<McpServerElicitationRequestParams__McpElicitationConstOption>;\n};\nexport const McpServerElicitationRequestParams__McpElicitationTitledEnumItems = Schema.Struct({\n  anyOf: Schema.Array(McpServerElicitationRequestParams__McpElicitationConstOption),\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationNumberSchema = {\n  readonly default?: number | null;\n  readonly description?: string | null;\n  readonly maximum?: number | null;\n  readonly minimum?: number | null;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationNumberType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationNumberSchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  maximum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n  minimum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: McpServerElicitationRequestParams__McpElicitationNumberType,\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationLegacyTitledEnumSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly enum: ReadonlyArray<string>;\n  readonly enumNames?: ReadonlyArray<string> | null;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationStringType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationLegacyTitledEnumSchema =\n  Schema.Struct({\n    default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    enum: Schema.Array(Schema.String),\n    enumNames: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n    title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    type: McpServerElicitationRequestParams__McpElicitationStringType,\n  });\n\nexport type McpServerElicitationRequestParams__McpElicitationStringSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly format?: McpServerElicitationRequestParams__McpElicitationStringFormat | null;\n  readonly maxLength?: number | null;\n  readonly minLength?: number | null;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationStringType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationStringSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  format: Schema.optionalKey(\n    Schema.Union([McpServerElicitationRequestParams__McpElicitationStringFormat, Schema.Null]),\n  ),\n  maxLength: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  minLength: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: McpServerElicitationRequestParams__McpElicitationStringType,\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationTitledSingleSelectEnumSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly oneOf: ReadonlyArray<McpServerElicitationRequestParams__McpElicitationConstOption>;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationStringType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationTitledSingleSelectEnumSchema =\n  Schema.Struct({\n    default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    oneOf: Schema.Array(McpServerElicitationRequestParams__McpElicitationConstOption),\n    title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    type: McpServerElicitationRequestParams__McpElicitationStringType,\n  });\n\nexport type McpServerElicitationRequestParams__McpElicitationUntitledEnumItems = {\n  readonly enum: ReadonlyArray<string>;\n  readonly type: McpServerElicitationRequestParams__McpElicitationStringType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationUntitledEnumItems = Schema.Struct({\n  enum: Schema.Array(Schema.String),\n  type: McpServerElicitationRequestParams__McpElicitationStringType,\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationUntitledSingleSelectEnumSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly enum: ReadonlyArray<string>;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationStringType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationUntitledSingleSelectEnumSchema =\n  Schema.Struct({\n    default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    enum: Schema.Array(Schema.String),\n    title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    type: McpServerElicitationRequestParams__McpElicitationStringType,\n  });\n\nexport type PermissionsRequestApprovalParams__FileSystemPath =\n  | { readonly path: PermissionsRequestApprovalParams__AbsolutePathBuf; readonly type: \"path\" }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | {\n      readonly type: \"special\";\n      readonly value: PermissionsRequestApprovalParams__FileSystemSpecialPath;\n    };\nexport const PermissionsRequestApprovalParams__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: PermissionsRequestApprovalParams__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: PermissionsRequestApprovalParams__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type PermissionsRequestApprovalResponse__FileSystemPath =\n  | { readonly path: PermissionsRequestApprovalResponse__AbsolutePathBuf; readonly type: \"path\" }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | {\n      readonly type: \"special\";\n      readonly value: PermissionsRequestApprovalResponse__FileSystemSpecialPath;\n    };\nexport const PermissionsRequestApprovalResponse__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: PermissionsRequestApprovalResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: PermissionsRequestApprovalResponse__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: ServerNotification__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const ServerNotification__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: ServerNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__FsChangedNotification = {\n  readonly changedPaths: ReadonlyArray<ServerNotification__AbsolutePathBuf>;\n  readonly watchId: string;\n};\nexport const ServerNotification__FsChangedNotification = Schema.Struct({\n  changedPaths: Schema.Array(ServerNotification__AbsolutePathBuf).annotate({\n    description: \"File or directory paths associated with this event.\",\n  }),\n  watchId: Schema.String.annotate({\n    description: \"Watch identifier previously provided to `fs/watch`.\",\n  }),\n}).annotate({ description: \"Filesystem watch notification emitted for `fs/watch` subscribers.\" });\n\nexport type ServerNotification__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<ServerNotification__AbsolutePathBuf>;\n    };\nexport const ServerNotification__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(ServerNotification__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__AppMetadata = {\n  readonly categories?: ReadonlyArray<string> | null;\n  readonly developer?: string | null;\n  readonly firstPartyRequiresInstall?: boolean | null;\n  readonly firstPartyType?: string | null;\n  readonly review?: ServerNotification__AppReview | null;\n  readonly screenshots?: ReadonlyArray<ServerNotification__AppScreenshot> | null;\n  readonly seoDescription?: string | null;\n  readonly showInComposerWhenUnlinked?: boolean | null;\n  readonly subCategories?: ReadonlyArray<string> | null;\n  readonly version?: string | null;\n  readonly versionId?: string | null;\n  readonly versionNotes?: string | null;\n};\nexport const ServerNotification__AppMetadata = Schema.Struct({\n  categories: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  developer: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  firstPartyRequiresInstall: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  firstPartyType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  review: Schema.optionalKey(Schema.Union([ServerNotification__AppReview, Schema.Null])),\n  screenshots: Schema.optionalKey(\n    Schema.Union([Schema.Array(ServerNotification__AppScreenshot), Schema.Null]),\n  ),\n  seoDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  showInComposerWhenUnlinked: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  subCategories: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  version: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  versionId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  versionNotes: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: ServerNotification__CollabAgentStatus;\n};\nexport const ServerNotification__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: ServerNotification__CollabAgentStatus,\n});\n\nexport type ServerNotification__FileSystemPath =\n  | { readonly path: ServerNotification__AbsolutePathBuf; readonly type: \"path\" }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | { readonly type: \"special\"; readonly value: ServerNotification__FileSystemSpecialPath };\nexport const ServerNotification__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: ServerNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: ServerNotification__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__FuzzyFileSearchResult = {\n  readonly file_name: string;\n  readonly indices?: ReadonlyArray<number> | null;\n  readonly match_type: ServerNotification__FuzzyFileSearchMatchType;\n  readonly path: string;\n  readonly root: string;\n  readonly score: number;\n};\nexport const ServerNotification__FuzzyFileSearchResult = Schema.Struct({\n  file_name: Schema.String,\n  indices: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(\n        Schema.Number.annotate({ format: \"uint32\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  match_type: ServerNotification__FuzzyFileSearchMatchType,\n  path: Schema.String,\n  root: Schema.String,\n  score: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"Superset of [`codex_file_search::FileMatch`]\" });\n\nexport type ServerNotification__GuardianApprovalReview = {\n  readonly rationale?: string | null;\n  readonly riskLevel?: ServerNotification__GuardianRiskLevel | null;\n  readonly status: ServerNotification__GuardianApprovalReviewStatus;\n  readonly userAuthorization?: ServerNotification__GuardianUserAuthorization | null;\n};\nexport const ServerNotification__GuardianApprovalReview = Schema.Struct({\n  rationale: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  riskLevel: Schema.optionalKey(Schema.Union([ServerNotification__GuardianRiskLevel, Schema.Null])),\n  status: ServerNotification__GuardianApprovalReviewStatus,\n  userAuthorization: Schema.optionalKey(\n    Schema.Union([ServerNotification__GuardianUserAuthorization, Schema.Null]),\n  ),\n}).annotate({\n  description:\n    \"[UNSTABLE] Temporary approval auto-review payload used by `item/autoApprovalReview/*` notifications. This shape is expected to change soon.\",\n});\n\nexport type ServerNotification__HookOutputEntry = {\n  readonly kind: ServerNotification__HookOutputEntryKind;\n  readonly text: string;\n};\nexport const ServerNotification__HookOutputEntry = Schema.Struct({\n  kind: ServerNotification__HookOutputEntryKind,\n  text: Schema.String,\n});\n\nexport type ServerNotification__McpServerStatusUpdatedNotification = {\n  readonly error?: string | null;\n  readonly name: string;\n  readonly status: ServerNotification__McpServerStartupState;\n  readonly threadId?: string | null;\n};\nexport const ServerNotification__McpServerStatusUpdatedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  status: ServerNotification__McpServerStartupState,\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__MemoryCitation = {\n  readonly entries: ReadonlyArray<ServerNotification__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const ServerNotification__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(ServerNotification__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type ServerNotification__ModelReroutedNotification = {\n  readonly fromModel: string;\n  readonly reason: ServerNotification__ModelRerouteReason;\n  readonly threadId: string;\n  readonly toModel: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ModelReroutedNotification = Schema.Struct({\n  fromModel: Schema.String,\n  reason: ServerNotification__ModelRerouteReason,\n  threadId: Schema.String,\n  toModel: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__ModelVerificationNotification = {\n  readonly threadId: string;\n  readonly turnId: string;\n  readonly verifications: ReadonlyArray<ServerNotification__ModelVerification>;\n};\nexport const ServerNotification__ModelVerificationNotification = Schema.Struct({\n  threadId: Schema.String,\n  turnId: Schema.String,\n  verifications: Schema.Array(ServerNotification__ModelVerification),\n});\n\nexport type ServerNotification__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: ServerNotification__NonSteerableTurnKind;\n      };\n    };\nexport const ServerNotification__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({ turnKind: ServerNotification__NonSteerableTurnKind }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type ServerNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: ServerNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const ServerNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: ServerNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type ServerNotification__AccountUpdatedNotification = {\n  readonly authMode?: ServerNotification__AuthMode | null;\n  readonly planType?: ServerNotification__PlanType | null;\n};\nexport const ServerNotification__AccountUpdatedNotification = Schema.Struct({\n  authMode: Schema.optionalKey(Schema.Union([ServerNotification__AuthMode, Schema.Null])),\n  planType: Schema.optionalKey(Schema.Union([ServerNotification__PlanType, Schema.Null])),\n});\n\nexport type ServerNotification__ThreadRealtimeStartedNotification = {\n  readonly realtimeSessionId?: string | null;\n  readonly threadId: string;\n  readonly version: ServerNotification__RealtimeConversationVersion;\n};\nexport const ServerNotification__ThreadRealtimeStartedNotification = Schema.Struct({\n  realtimeSessionId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n  version: ServerNotification__RealtimeConversationVersion,\n}).annotate({ description: \"EXPERIMENTAL - emitted when thread realtime startup is accepted.\" });\n\nexport type ServerNotification__Settings = {\n  readonly developer_instructions?: string | null;\n  readonly model: string;\n  readonly reasoning_effort?: ServerNotification__ReasoningEffort | null;\n};\nexport const ServerNotification__Settings = Schema.Struct({\n  developer_instructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.String,\n  reasoning_effort: Schema.optionalKey(\n    Schema.Union([ServerNotification__ReasoningEffort, Schema.Null]),\n  ),\n}).annotate({ description: \"Settings for a collaboration mode.\" });\n\nexport type ServerNotification__RemoteControlStatusChangedNotification = {\n  readonly environmentId?: string | null;\n  readonly installationId: string;\n  readonly serverName: string;\n  readonly status: ServerNotification__RemoteControlConnectionStatus;\n};\nexport const ServerNotification__RemoteControlStatusChangedNotification = Schema.Struct({\n  environmentId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  installationId: Schema.String,\n  serverName: Schema.String,\n  status: ServerNotification__RemoteControlConnectionStatus,\n}).annotate({\n  description: \"Current remote-control connection status and remote identity exposed to clients.\",\n});\n\nexport type ServerNotification__ServerRequestResolvedNotification = {\n  readonly requestId: ServerNotification__RequestId;\n  readonly threadId: string;\n};\nexport const ServerNotification__ServerRequestResolvedNotification = Schema.Struct({\n  requestId: ServerNotification__RequestId,\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__RateLimitSnapshot = {\n  readonly credits?: ServerNotification__CreditsSnapshot | null;\n  readonly individualLimit?: ServerNotification__SpendControlLimitSnapshot | null;\n  readonly limitId?: string | null;\n  readonly limitName?: string | null;\n  readonly planType?: ServerNotification__PlanType | null;\n  readonly primary?: ServerNotification__RateLimitWindow | null;\n  readonly rateLimitReachedType?: ServerNotification__RateLimitReachedType | null;\n  readonly secondary?: ServerNotification__RateLimitWindow | null;\n};\nexport const ServerNotification__RateLimitSnapshot = Schema.Struct({\n  credits: Schema.optionalKey(Schema.Union([ServerNotification__CreditsSnapshot, Schema.Null])),\n  individualLimit: Schema.optionalKey(\n    Schema.Union([ServerNotification__SpendControlLimitSnapshot, Schema.Null]),\n  ),\n  limitId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  limitName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  planType: Schema.optionalKey(Schema.Union([ServerNotification__PlanType, Schema.Null])),\n  primary: Schema.optionalKey(Schema.Union([ServerNotification__RateLimitWindow, Schema.Null])),\n  rateLimitReachedType: Schema.optionalKey(\n    Schema.Union([ServerNotification__RateLimitReachedType, Schema.Null]),\n  ),\n  secondary: Schema.optionalKey(Schema.Union([ServerNotification__RateLimitWindow, Schema.Null])),\n});\n\nexport type ServerNotification__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<ServerNotification__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: ServerNotification__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: ServerNotification__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const ServerNotification__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(ServerNotification__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([ServerNotification__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([ServerNotification__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__TextRange = {\n  readonly end: ServerNotification__TextPosition;\n  readonly start: ServerNotification__TextPosition;\n};\nexport const ServerNotification__TextRange = Schema.Struct({\n  end: ServerNotification__TextPosition,\n  start: ServerNotification__TextPosition,\n});\n\nexport type ServerNotification__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<ServerNotification__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const ServerNotification__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(ServerNotification__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__ThreadGoal = {\n  readonly createdAt: number;\n  readonly objective: string;\n  readonly status: ServerNotification__ThreadGoalStatus;\n  readonly threadId: string;\n  readonly timeUsedSeconds: number;\n  readonly tokenBudget?: number | null;\n  readonly tokensUsed: number;\n  readonly updatedAt: number;\n};\nexport const ServerNotification__ThreadGoal = Schema.Struct({\n  createdAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  objective: Schema.String,\n  status: ServerNotification__ThreadGoalStatus,\n  threadId: Schema.String,\n  timeUsedSeconds: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  tokenBudget: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  tokensUsed: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  updatedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type ServerNotification__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: ServerNotification__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: ServerNotification__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const ServerNotification__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(Schema.Union([ServerNotification__AgentPath, Schema.Null])),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: ServerNotification__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__ThreadRealtimeOutputAudioDeltaNotification = {\n  readonly audio: ServerNotification__ThreadRealtimeAudioChunk;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadRealtimeOutputAudioDeltaNotification = Schema.Struct({\n  audio: ServerNotification__ThreadRealtimeAudioChunk,\n  threadId: Schema.String,\n}).annotate({ description: \"EXPERIMENTAL - streamed output audio emitted by thread realtime.\" });\n\nexport type ServerNotification__ThreadTokenUsage = {\n  readonly last: ServerNotification__TokenUsageBreakdown;\n  readonly modelContextWindow?: number | null;\n  readonly total: ServerNotification__TokenUsageBreakdown;\n};\nexport const ServerNotification__ThreadTokenUsage = Schema.Struct({\n  last: ServerNotification__TokenUsageBreakdown,\n  modelContextWindow: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  total: ServerNotification__TokenUsageBreakdown,\n});\n\nexport type ServerNotification__TurnPlanStep = {\n  readonly status: ServerNotification__TurnPlanStepStatus;\n  readonly step: string;\n};\nexport const ServerNotification__TurnPlanStep = Schema.Struct({\n  status: ServerNotification__TurnPlanStepStatus,\n  step: Schema.String,\n});\n\nexport type ServerNotification__WindowsSandboxSetupCompletedNotification = {\n  readonly error?: string | null;\n  readonly mode: ServerNotification__WindowsSandboxSetupMode;\n  readonly success: boolean;\n};\nexport const ServerNotification__WindowsSandboxSetupCompletedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  mode: ServerNotification__WindowsSandboxSetupMode,\n  success: Schema.Boolean,\n});\n\nexport type ServerRequest__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: ServerRequest__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const ServerRequest__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: ServerRequest__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerRequest__ChatgptAuthTokensRefreshParams = {\n  readonly previousAccountId?: string | null;\n  readonly reason: ServerRequest__ChatgptAuthTokensRefreshReason;\n};\nexport const ServerRequest__ChatgptAuthTokensRefreshParams = Schema.Struct({\n  previousAccountId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Workspace/account identifier that Codex was previously using.\\n\\nClients that manage multiple accounts/workspaces can use this as a hint to refresh the token for the correct workspace.\\n\\nThis may be `null` when the prior auth state did not include a workspace identifier (`chatgpt_account_id`).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reason: ServerRequest__ChatgptAuthTokensRefreshReason,\n});\n\nexport type ServerRequest__FileSystemPath =\n  | { readonly path: ServerRequest__AbsolutePathBuf; readonly type: \"path\" }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | { readonly type: \"special\"; readonly value: ServerRequest__FileSystemSpecialPath };\nexport const ServerRequest__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: ServerRequest__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: ServerRequest__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerRequest__McpElicitationBooleanSchema = {\n  readonly default?: boolean | null;\n  readonly description?: string | null;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationBooleanType;\n};\nexport const ServerRequest__McpElicitationBooleanSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationBooleanType,\n});\n\nexport type ServerRequest__McpElicitationTitledEnumItems = {\n  readonly anyOf: ReadonlyArray<ServerRequest__McpElicitationConstOption>;\n};\nexport const ServerRequest__McpElicitationTitledEnumItems = Schema.Struct({\n  anyOf: Schema.Array(ServerRequest__McpElicitationConstOption),\n});\n\nexport type ServerRequest__McpElicitationNumberSchema = {\n  readonly default?: number | null;\n  readonly description?: string | null;\n  readonly maximum?: number | null;\n  readonly minimum?: number | null;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationNumberType;\n};\nexport const ServerRequest__McpElicitationNumberSchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  maximum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n  minimum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationNumberType,\n});\n\nexport type ServerRequest__McpElicitationLegacyTitledEnumSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly enum: ReadonlyArray<string>;\n  readonly enumNames?: ReadonlyArray<string> | null;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationStringType;\n};\nexport const ServerRequest__McpElicitationLegacyTitledEnumSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  enum: Schema.Array(Schema.String),\n  enumNames: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationStringType,\n});\n\nexport type ServerRequest__McpElicitationStringSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly format?: ServerRequest__McpElicitationStringFormat | null;\n  readonly maxLength?: number | null;\n  readonly minLength?: number | null;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationStringType;\n};\nexport const ServerRequest__McpElicitationStringSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  format: Schema.optionalKey(\n    Schema.Union([ServerRequest__McpElicitationStringFormat, Schema.Null]),\n  ),\n  maxLength: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  minLength: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationStringType,\n});\n\nexport type ServerRequest__McpElicitationTitledSingleSelectEnumSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly oneOf: ReadonlyArray<ServerRequest__McpElicitationConstOption>;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationStringType;\n};\nexport const ServerRequest__McpElicitationTitledSingleSelectEnumSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  oneOf: Schema.Array(ServerRequest__McpElicitationConstOption),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationStringType,\n});\n\nexport type ServerRequest__McpElicitationUntitledEnumItems = {\n  readonly enum: ReadonlyArray<string>;\n  readonly type: ServerRequest__McpElicitationStringType;\n};\nexport const ServerRequest__McpElicitationUntitledEnumItems = Schema.Struct({\n  enum: Schema.Array(Schema.String),\n  type: ServerRequest__McpElicitationStringType,\n});\n\nexport type ServerRequest__McpElicitationUntitledSingleSelectEnumSchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly enum: ReadonlyArray<string>;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationStringType;\n};\nexport const ServerRequest__McpElicitationUntitledSingleSelectEnumSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  enum: Schema.Array(Schema.String),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationStringType,\n});\n\nexport type ServerRequest__NetworkApprovalContext = {\n  readonly host: string;\n  readonly protocol: ServerRequest__NetworkApprovalProtocol;\n};\nexport const ServerRequest__NetworkApprovalContext = Schema.Struct({\n  host: Schema.String,\n  protocol: ServerRequest__NetworkApprovalProtocol,\n});\n\nexport type ServerRequest__NetworkPolicyAmendment = {\n  readonly action: ServerRequest__NetworkPolicyRuleAction;\n  readonly host: string;\n};\nexport const ServerRequest__NetworkPolicyAmendment = Schema.Struct({\n  action: ServerRequest__NetworkPolicyRuleAction,\n  host: Schema.String,\n});\n\nexport type ServerRequest__ApplyPatchApprovalParams = {\n  readonly callId: string;\n  readonly conversationId: ServerRequest__ThreadId;\n  readonly fileChanges: { readonly [x: string]: ServerRequest__FileChange };\n  readonly grantRoot?: string | null;\n  readonly reason?: string | null;\n};\nexport const ServerRequest__ApplyPatchApprovalParams = Schema.Struct({\n  callId: Schema.String.annotate({\n    description:\n      \"Use to correlate this with [codex_protocol::protocol::PatchApplyBeginEvent] and [codex_protocol::protocol::PatchApplyEndEvent].\",\n  }),\n  conversationId: ServerRequest__ThreadId,\n  fileChanges: Schema.Record(Schema.String, ServerRequest__FileChange),\n  grantRoot: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"When set, the agent is asking the user to allow writes under this root for the remainder of the session (unclear if this is honored today).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reason: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional explanatory reason (e.g. request for extra write access).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ServerRequest__ExecCommandApprovalParams = {\n  readonly approvalId?: string | null;\n  readonly callId: string;\n  readonly command: ReadonlyArray<string>;\n  readonly conversationId: ServerRequest__ThreadId;\n  readonly cwd: string;\n  readonly parsedCmd: ReadonlyArray<ServerRequest__ParsedCommand>;\n  readonly reason?: string | null;\n};\nexport const ServerRequest__ExecCommandApprovalParams = Schema.Struct({\n  approvalId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Identifier for this specific approval callback.\" }),\n      Schema.Null,\n    ]),\n  ),\n  callId: Schema.String.annotate({\n    description:\n      \"Use to correlate this with [codex_protocol::protocol::ExecCommandBeginEvent] and [codex_protocol::protocol::ExecCommandEndEvent].\",\n  }),\n  command: Schema.Array(Schema.String),\n  conversationId: ServerRequest__ThreadId,\n  cwd: Schema.String,\n  parsedCmd: Schema.Array(ServerRequest__ParsedCommand),\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerRequest__ToolRequestUserInputQuestion = {\n  readonly header: string;\n  readonly id: string;\n  readonly isOther?: boolean;\n  readonly isSecret?: boolean;\n  readonly options?: ReadonlyArray<ServerRequest__ToolRequestUserInputOption> | null;\n  readonly question: string;\n};\nexport const ServerRequest__ToolRequestUserInputQuestion = Schema.Struct({\n  header: Schema.String,\n  id: Schema.String,\n  isOther: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  isSecret: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  options: Schema.optionalKey(\n    Schema.Union([Schema.Array(ServerRequest__ToolRequestUserInputOption), Schema.Null]),\n  ),\n  question: Schema.String,\n}).annotate({\n  description: \"EXPERIMENTAL. Represents one request_user_input question and its required options.\",\n});\n\nexport type ToolRequestUserInputParams__ToolRequestUserInputQuestion = {\n  readonly header: string;\n  readonly id: string;\n  readonly isOther?: boolean;\n  readonly isSecret?: boolean;\n  readonly options?: ReadonlyArray<ToolRequestUserInputParams__ToolRequestUserInputOption> | null;\n  readonly question: string;\n};\nexport const ToolRequestUserInputParams__ToolRequestUserInputQuestion = Schema.Struct({\n  header: Schema.String,\n  id: Schema.String,\n  isOther: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  isSecret: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  options: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ToolRequestUserInputParams__ToolRequestUserInputOption),\n      Schema.Null,\n    ]),\n  ),\n  question: Schema.String,\n}).annotate({\n  description: \"EXPERIMENTAL. Represents one request_user_input question and its required options.\",\n});\n\nexport type V2AccountRateLimitsUpdatedNotification__RateLimitSnapshot = {\n  readonly credits?: V2AccountRateLimitsUpdatedNotification__CreditsSnapshot | null;\n  readonly individualLimit?: V2AccountRateLimitsUpdatedNotification__SpendControlLimitSnapshot | null;\n  readonly limitId?: string | null;\n  readonly limitName?: string | null;\n  readonly planType?: V2AccountRateLimitsUpdatedNotification__PlanType | null;\n  readonly primary?: V2AccountRateLimitsUpdatedNotification__RateLimitWindow | null;\n  readonly rateLimitReachedType?: V2AccountRateLimitsUpdatedNotification__RateLimitReachedType | null;\n  readonly secondary?: V2AccountRateLimitsUpdatedNotification__RateLimitWindow | null;\n};\nexport const V2AccountRateLimitsUpdatedNotification__RateLimitSnapshot = Schema.Struct({\n  credits: Schema.optionalKey(\n    Schema.Union([V2AccountRateLimitsUpdatedNotification__CreditsSnapshot, Schema.Null]),\n  ),\n  individualLimit: Schema.optionalKey(\n    Schema.Union([V2AccountRateLimitsUpdatedNotification__SpendControlLimitSnapshot, Schema.Null]),\n  ),\n  limitId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  limitName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  planType: Schema.optionalKey(\n    Schema.Union([V2AccountRateLimitsUpdatedNotification__PlanType, Schema.Null]),\n  ),\n  primary: Schema.optionalKey(\n    Schema.Union([V2AccountRateLimitsUpdatedNotification__RateLimitWindow, Schema.Null]),\n  ),\n  rateLimitReachedType: Schema.optionalKey(\n    Schema.Union([V2AccountRateLimitsUpdatedNotification__RateLimitReachedType, Schema.Null]),\n  ),\n  secondary: Schema.optionalKey(\n    Schema.Union([V2AccountRateLimitsUpdatedNotification__RateLimitWindow, Schema.Null]),\n  ),\n});\n\nexport type V2AppListUpdatedNotification__AppMetadata = {\n  readonly categories?: ReadonlyArray<string> | null;\n  readonly developer?: string | null;\n  readonly firstPartyRequiresInstall?: boolean | null;\n  readonly firstPartyType?: string | null;\n  readonly review?: V2AppListUpdatedNotification__AppReview | null;\n  readonly screenshots?: ReadonlyArray<V2AppListUpdatedNotification__AppScreenshot> | null;\n  readonly seoDescription?: string | null;\n  readonly showInComposerWhenUnlinked?: boolean | null;\n  readonly subCategories?: ReadonlyArray<string> | null;\n  readonly version?: string | null;\n  readonly versionId?: string | null;\n  readonly versionNotes?: string | null;\n};\nexport const V2AppListUpdatedNotification__AppMetadata = Schema.Struct({\n  categories: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  developer: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  firstPartyRequiresInstall: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  firstPartyType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  review: Schema.optionalKey(Schema.Union([V2AppListUpdatedNotification__AppReview, Schema.Null])),\n  screenshots: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2AppListUpdatedNotification__AppScreenshot), Schema.Null]),\n  ),\n  seoDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  showInComposerWhenUnlinked: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  subCategories: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  version: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  versionId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  versionNotes: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2AppsListResponse__AppMetadata = {\n  readonly categories?: ReadonlyArray<string> | null;\n  readonly developer?: string | null;\n  readonly firstPartyRequiresInstall?: boolean | null;\n  readonly firstPartyType?: string | null;\n  readonly review?: V2AppsListResponse__AppReview | null;\n  readonly screenshots?: ReadonlyArray<V2AppsListResponse__AppScreenshot> | null;\n  readonly seoDescription?: string | null;\n  readonly showInComposerWhenUnlinked?: boolean | null;\n  readonly subCategories?: ReadonlyArray<string> | null;\n  readonly version?: string | null;\n  readonly versionId?: string | null;\n  readonly versionNotes?: string | null;\n};\nexport const V2AppsListResponse__AppMetadata = Schema.Struct({\n  categories: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  developer: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  firstPartyRequiresInstall: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  firstPartyType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  review: Schema.optionalKey(Schema.Union([V2AppsListResponse__AppReview, Schema.Null])),\n  screenshots: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2AppsListResponse__AppScreenshot), Schema.Null]),\n  ),\n  seoDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  showInComposerWhenUnlinked: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  subCategories: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  version: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  versionId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  versionNotes: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2CommandExecParams__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<V2CommandExecParams__AbsolutePathBuf>;\n    };\nexport const V2CommandExecParams__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(V2CommandExecParams__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ConfigBatchWriteParams__ConfigEdit = {\n  readonly keyPath: string;\n  readonly mergeStrategy: V2ConfigBatchWriteParams__MergeStrategy;\n  readonly value: unknown;\n};\nexport const V2ConfigBatchWriteParams__ConfigEdit = Schema.Struct({\n  keyPath: Schema.String,\n  mergeStrategy: V2ConfigBatchWriteParams__MergeStrategy,\n  value: Schema.Unknown,\n});\n\nexport type V2ConfigReadResponse__ConfigLayerSource =\n  | { readonly domain: string; readonly key: string; readonly type: \"mdm\" }\n  | { readonly file: string; readonly type: \"system\" }\n  | { readonly id: string; readonly name: string; readonly type: \"enterpriseManaged\" }\n  | { readonly file: string; readonly profile?: string | null; readonly type: \"user\" }\n  | { readonly dotCodexFolder: V2ConfigReadResponse__AbsolutePathBuf; readonly type: \"project\" }\n  | { readonly type: \"sessionFlags\" }\n  | {\n      readonly file: V2ConfigReadResponse__AbsolutePathBuf;\n      readonly type: \"legacyManagedConfigTomlFromFile\";\n    }\n  | { readonly type: \"legacyManagedConfigTomlFromMdm\" };\nexport const V2ConfigReadResponse__ConfigLayerSource = Schema.Union(\n  [\n    Schema.Struct({\n      domain: Schema.String,\n      key: Schema.String,\n      type: Schema.Literal(\"mdm\").annotate({ title: \"MdmConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"MdmConfigLayerSource\",\n      description: \"Managed preferences layer delivered by MDM (macOS only).\",\n    }),\n    Schema.Struct({\n      file: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      type: Schema.Literal(\"system\").annotate({ title: \"SystemConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"SystemConfigLayerSource\",\n      description: \"Managed config layer from a file (usually `managed_config.toml`).\",\n    }),\n    Schema.Struct({\n      id: Schema.String.annotate({ description: \"Stable identifier for the delivered layer.\" }),\n      name: Schema.String.annotate({\n        description:\n          \"Admin-facing name for the delivered layer. This is surfaced in diagnostics so users know which cloud layer needs administrator attention.\",\n      }),\n      type: Schema.Literal(\"enterpriseManaged\").annotate({\n        title: \"EnterpriseManagedConfigLayerSourceType\",\n      }),\n    }).annotate({\n      title: \"EnterpriseManagedConfigLayerSource\",\n      description: \"Enterprise-managed config layer delivered by the cloud config bundle.\",\n    }),\n    Schema.Struct({\n      file: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      profile: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"Name of the selected profile-v2 config layered on top of the base user config, when this layer represents one.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"user\").annotate({ title: \"UserConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"UserConfigLayerSource\",\n      description:\n        \"User config layer from $CODEX_HOME/config.toml. This layer is special in that it is expected to be: - writable by the user - generally outside the workspace directory\",\n    }),\n    Schema.Struct({\n      dotCodexFolder: V2ConfigReadResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"project\").annotate({ title: \"ProjectConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"ProjectConfigLayerSource\",\n      description:\n        \"Path to a .codex/ folder within a project. There could be multiple of these between `cwd` and the project/repo root.\",\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"sessionFlags\").annotate({ title: \"SessionFlagsConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"SessionFlagsConfigLayerSource\",\n      description: \"Session-layer overrides supplied via `-c`/`--config`.\",\n    }),\n    Schema.Struct({\n      file: V2ConfigReadResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"legacyManagedConfigTomlFromFile\").annotate({\n        title: \"LegacyManagedConfigTomlFromFileConfigLayerSourceType\",\n      }),\n    }).annotate({\n      title: \"LegacyManagedConfigTomlFromFileConfigLayerSource\",\n      description:\n        '`managed_config.toml` was designed to be a config that was loaded as the last layer on top of everything else. This scheme did not quite work out as intended, but we keep this variant as a \"best effort\" while we phase out `managed_config.toml` in favor of `requirements.toml`.',\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"legacyManagedConfigTomlFromMdm\").annotate({\n        title: \"LegacyManagedConfigTomlFromMdmConfigLayerSourceType\",\n      }),\n    }).annotate({ title: \"LegacyManagedConfigTomlFromMdmConfigLayerSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ConfigReadResponse__WebSearchToolConfig = {\n  readonly allowed_domains?: ReadonlyArray<string> | null;\n  readonly context_size?: V2ConfigReadResponse__WebSearchContextSize | null;\n  readonly location?: V2ConfigReadResponse__WebSearchLocation | null;\n};\nexport const V2ConfigReadResponse__WebSearchToolConfig = Schema.Struct({\n  allowed_domains: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  context_size: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__WebSearchContextSize, Schema.Null]),\n  ),\n  location: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__WebSearchLocation, Schema.Null]),\n  ),\n});\n\nexport type V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup = {\n  readonly hooks: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookHandler>;\n  readonly matcher?: string | null;\n};\nexport const V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup = Schema.Struct({\n  hooks: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookHandler),\n  matcher: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ConfigRequirementsReadResponse__ConfigRequirements = {\n  readonly allowAppshots?: boolean | null;\n  readonly allowManagedHooksOnly?: boolean | null;\n  readonly allowedApprovalPolicies?: ReadonlyArray<V2ConfigRequirementsReadResponse__AskForApproval> | null;\n  readonly allowedPermissionProfiles?: { readonly [x: string]: boolean } | null;\n  readonly allowedSandboxModes?: ReadonlyArray<V2ConfigRequirementsReadResponse__SandboxMode> | null;\n  readonly allowedWebSearchModes?: ReadonlyArray<V2ConfigRequirementsReadResponse__WebSearchMode> | null;\n  readonly allowedWindowsSandboxImplementations?: ReadonlyArray<V2ConfigRequirementsReadResponse__WindowsSandboxSetupMode> | null;\n  readonly computerUse?: V2ConfigRequirementsReadResponse__ComputerUseRequirements | null;\n  readonly defaultPermissions?: string | null;\n  readonly enforceResidency?: V2ConfigRequirementsReadResponse__ResidencyRequirement | null;\n  readonly featureRequirements?: { readonly [x: string]: boolean } | null;\n};\nexport const V2ConfigRequirementsReadResponse__ConfigRequirements = Schema.Struct({\n  allowAppshots: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  allowManagedHooksOnly: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  allowedApprovalPolicies: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2ConfigRequirementsReadResponse__AskForApproval), Schema.Null]),\n  ),\n  allowedPermissionProfiles: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Boolean), Schema.Null]),\n  ),\n  allowedSandboxModes: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2ConfigRequirementsReadResponse__SandboxMode), Schema.Null]),\n  ),\n  allowedWebSearchModes: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2ConfigRequirementsReadResponse__WebSearchMode), Schema.Null]),\n  ),\n  allowedWindowsSandboxImplementations: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(V2ConfigRequirementsReadResponse__WindowsSandboxSetupMode),\n      Schema.Null,\n    ]),\n  ),\n  computerUse: Schema.optionalKey(\n    Schema.Union([V2ConfigRequirementsReadResponse__ComputerUseRequirements, Schema.Null]),\n  ),\n  defaultPermissions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  enforceResidency: Schema.optionalKey(\n    Schema.Union([V2ConfigRequirementsReadResponse__ResidencyRequirement, Schema.Null]),\n  ),\n  featureRequirements: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Boolean), Schema.Null]),\n  ),\n});\n\nexport type V2ConfigWarningNotification__TextRange = {\n  readonly end: V2ConfigWarningNotification__TextPosition;\n  readonly start: V2ConfigWarningNotification__TextPosition;\n};\nexport const V2ConfigWarningNotification__TextRange = Schema.Struct({\n  end: V2ConfigWarningNotification__TextPosition,\n  start: V2ConfigWarningNotification__TextPosition,\n});\n\nexport type V2ConfigWriteResponse__ConfigLayerSource =\n  | { readonly domain: string; readonly key: string; readonly type: \"mdm\" }\n  | { readonly file: string; readonly type: \"system\" }\n  | { readonly id: string; readonly name: string; readonly type: \"enterpriseManaged\" }\n  | { readonly file: string; readonly profile?: string | null; readonly type: \"user\" }\n  | { readonly dotCodexFolder: V2ConfigWriteResponse__AbsolutePathBuf; readonly type: \"project\" }\n  | { readonly type: \"sessionFlags\" }\n  | {\n      readonly file: V2ConfigWriteResponse__AbsolutePathBuf;\n      readonly type: \"legacyManagedConfigTomlFromFile\";\n    }\n  | { readonly type: \"legacyManagedConfigTomlFromMdm\" };\nexport const V2ConfigWriteResponse__ConfigLayerSource = Schema.Union(\n  [\n    Schema.Struct({\n      domain: Schema.String,\n      key: Schema.String,\n      type: Schema.Literal(\"mdm\").annotate({ title: \"MdmConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"MdmConfigLayerSource\",\n      description: \"Managed preferences layer delivered by MDM (macOS only).\",\n    }),\n    Schema.Struct({\n      file: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      type: Schema.Literal(\"system\").annotate({ title: \"SystemConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"SystemConfigLayerSource\",\n      description: \"Managed config layer from a file (usually `managed_config.toml`).\",\n    }),\n    Schema.Struct({\n      id: Schema.String.annotate({ description: \"Stable identifier for the delivered layer.\" }),\n      name: Schema.String.annotate({\n        description:\n          \"Admin-facing name for the delivered layer. This is surfaced in diagnostics so users know which cloud layer needs administrator attention.\",\n      }),\n      type: Schema.Literal(\"enterpriseManaged\").annotate({\n        title: \"EnterpriseManagedConfigLayerSourceType\",\n      }),\n    }).annotate({\n      title: \"EnterpriseManagedConfigLayerSource\",\n      description: \"Enterprise-managed config layer delivered by the cloud config bundle.\",\n    }),\n    Schema.Struct({\n      file: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      profile: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"Name of the selected profile-v2 config layered on top of the base user config, when this layer represents one.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"user\").annotate({ title: \"UserConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"UserConfigLayerSource\",\n      description:\n        \"User config layer from $CODEX_HOME/config.toml. This layer is special in that it is expected to be: - writable by the user - generally outside the workspace directory\",\n    }),\n    Schema.Struct({\n      dotCodexFolder: V2ConfigWriteResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"project\").annotate({ title: \"ProjectConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"ProjectConfigLayerSource\",\n      description:\n        \"Path to a .codex/ folder within a project. There could be multiple of these between `cwd` and the project/repo root.\",\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"sessionFlags\").annotate({ title: \"SessionFlagsConfigLayerSourceType\" }),\n    }).annotate({\n      title: \"SessionFlagsConfigLayerSource\",\n      description: \"Session-layer overrides supplied via `-c`/`--config`.\",\n    }),\n    Schema.Struct({\n      file: V2ConfigWriteResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"legacyManagedConfigTomlFromFile\").annotate({\n        title: \"LegacyManagedConfigTomlFromFileConfigLayerSourceType\",\n      }),\n    }).annotate({\n      title: \"LegacyManagedConfigTomlFromFileConfigLayerSource\",\n      description:\n        '`managed_config.toml` was designed to be a config that was loaded as the last layer on top of everything else. This scheme did not quite work out as intended, but we keep this variant as a \"best effort\" while we phase out `managed_config.toml` in favor of `requirements.toml`.',\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"legacyManagedConfigTomlFromMdm\").annotate({\n        title: \"LegacyManagedConfigTomlFromMdmConfigLayerSourceType\",\n      }),\n    }).annotate({ title: \"LegacyManagedConfigTomlFromMdmConfigLayerSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ErrorNotification__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ErrorNotification__NonSteerableTurnKind;\n      };\n    };\nexport const V2ErrorNotification__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ErrorNotification__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ExternalAgentConfigDetectResponse__MigrationDetails = {\n  readonly commands?: ReadonlyArray<V2ExternalAgentConfigDetectResponse__CommandMigration>;\n  readonly hooks?: ReadonlyArray<V2ExternalAgentConfigDetectResponse__HookMigration>;\n  readonly mcpServers?: ReadonlyArray<V2ExternalAgentConfigDetectResponse__McpServerMigration>;\n  readonly plugins?: ReadonlyArray<V2ExternalAgentConfigDetectResponse__PluginsMigration>;\n  readonly sessions?: ReadonlyArray<V2ExternalAgentConfigDetectResponse__SessionMigration>;\n  readonly subagents?: ReadonlyArray<V2ExternalAgentConfigDetectResponse__SubagentMigration>;\n};\nexport const V2ExternalAgentConfigDetectResponse__MigrationDetails = Schema.Struct({\n  commands: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigDetectResponse__CommandMigration).annotate({ default: [] }),\n  ),\n  hooks: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigDetectResponse__HookMigration).annotate({ default: [] }),\n  ),\n  mcpServers: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigDetectResponse__McpServerMigration).annotate({ default: [] }),\n  ),\n  plugins: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigDetectResponse__PluginsMigration).annotate({ default: [] }),\n  ),\n  sessions: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigDetectResponse__SessionMigration).annotate({ default: [] }),\n  ),\n  subagents: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigDetectResponse__SubagentMigration).annotate({ default: [] }),\n  ),\n});\n\nexport type V2ExternalAgentConfigImportParams__MigrationDetails = {\n  readonly commands?: ReadonlyArray<V2ExternalAgentConfigImportParams__CommandMigration>;\n  readonly hooks?: ReadonlyArray<V2ExternalAgentConfigImportParams__HookMigration>;\n  readonly mcpServers?: ReadonlyArray<V2ExternalAgentConfigImportParams__McpServerMigration>;\n  readonly plugins?: ReadonlyArray<V2ExternalAgentConfigImportParams__PluginsMigration>;\n  readonly sessions?: ReadonlyArray<V2ExternalAgentConfigImportParams__SessionMigration>;\n  readonly subagents?: ReadonlyArray<V2ExternalAgentConfigImportParams__SubagentMigration>;\n};\nexport const V2ExternalAgentConfigImportParams__MigrationDetails = Schema.Struct({\n  commands: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigImportParams__CommandMigration).annotate({ default: [] }),\n  ),\n  hooks: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigImportParams__HookMigration).annotate({ default: [] }),\n  ),\n  mcpServers: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigImportParams__McpServerMigration).annotate({ default: [] }),\n  ),\n  plugins: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigImportParams__PluginsMigration).annotate({ default: [] }),\n  ),\n  sessions: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigImportParams__SessionMigration).annotate({ default: [] }),\n  ),\n  subagents: Schema.optionalKey(\n    Schema.Array(V2ExternalAgentConfigImportParams__SubagentMigration).annotate({ default: [] }),\n  ),\n});\n\nexport type V2FileChangePatchUpdatedNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2FileChangePatchUpdatedNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2FileChangePatchUpdatedNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2FileChangePatchUpdatedNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2GetAccountRateLimitsResponse__RateLimitSnapshot = {\n  readonly credits?: V2GetAccountRateLimitsResponse__CreditsSnapshot | null;\n  readonly individualLimit?: V2GetAccountRateLimitsResponse__SpendControlLimitSnapshot | null;\n  readonly limitId?: string | null;\n  readonly limitName?: string | null;\n  readonly planType?: V2GetAccountRateLimitsResponse__PlanType | null;\n  readonly primary?: V2GetAccountRateLimitsResponse__RateLimitWindow | null;\n  readonly rateLimitReachedType?: V2GetAccountRateLimitsResponse__RateLimitReachedType | null;\n  readonly secondary?: V2GetAccountRateLimitsResponse__RateLimitWindow | null;\n};\nexport const V2GetAccountRateLimitsResponse__RateLimitSnapshot = Schema.Struct({\n  credits: Schema.optionalKey(\n    Schema.Union([V2GetAccountRateLimitsResponse__CreditsSnapshot, Schema.Null]),\n  ),\n  individualLimit: Schema.optionalKey(\n    Schema.Union([V2GetAccountRateLimitsResponse__SpendControlLimitSnapshot, Schema.Null]),\n  ),\n  limitId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  limitName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  planType: Schema.optionalKey(\n    Schema.Union([V2GetAccountRateLimitsResponse__PlanType, Schema.Null]),\n  ),\n  primary: Schema.optionalKey(\n    Schema.Union([V2GetAccountRateLimitsResponse__RateLimitWindow, Schema.Null]),\n  ),\n  rateLimitReachedType: Schema.optionalKey(\n    Schema.Union([V2GetAccountRateLimitsResponse__RateLimitReachedType, Schema.Null]),\n  ),\n  secondary: Schema.optionalKey(\n    Schema.Union([V2GetAccountRateLimitsResponse__RateLimitWindow, Schema.Null]),\n  ),\n});\n\nexport type V2GetAccountResponse__Account =\n  | { readonly type: \"apiKey\" }\n  | {\n      readonly email: string;\n      readonly planType: V2GetAccountResponse__PlanType;\n      readonly type: \"chatgpt\";\n    }\n  | { readonly type: \"amazonBedrock\" };\nexport const V2GetAccountResponse__Account = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"apiKey\").annotate({ title: \"ApiKeyAccountType\" }),\n    }).annotate({ title: \"ApiKeyAccount\" }),\n    Schema.Struct({\n      email: Schema.String,\n      planType: V2GetAccountResponse__PlanType,\n      type: Schema.Literal(\"chatgpt\").annotate({ title: \"ChatgptAccountType\" }),\n    }).annotate({ title: \"ChatgptAccount\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"amazonBedrock\").annotate({ title: \"AmazonBedrockAccountType\" }),\n    }).annotate({ title: \"AmazonBedrockAccount\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2HookCompletedNotification__HookOutputEntry = {\n  readonly kind: V2HookCompletedNotification__HookOutputEntryKind;\n  readonly text: string;\n};\nexport const V2HookCompletedNotification__HookOutputEntry = Schema.Struct({\n  kind: V2HookCompletedNotification__HookOutputEntryKind,\n  text: Schema.String,\n});\n\nexport type V2HooksListResponse__HookMetadata = {\n  readonly command?: string | null;\n  readonly currentHash: string;\n  readonly displayOrder: number;\n  readonly enabled: boolean;\n  readonly eventName: V2HooksListResponse__HookEventName;\n  readonly handlerType: V2HooksListResponse__HookHandlerType;\n  readonly isManaged: boolean;\n  readonly key: string;\n  readonly matcher?: string | null;\n  readonly pluginId?: string | null;\n  readonly source: V2HooksListResponse__HookSource;\n  readonly sourcePath: V2HooksListResponse__AbsolutePathBuf;\n  readonly statusMessage?: string | null;\n  readonly timeoutSec: number;\n  readonly trustStatus: V2HooksListResponse__HookTrustStatus;\n};\nexport const V2HooksListResponse__HookMetadata = Schema.Struct({\n  command: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  currentHash: Schema.String,\n  displayOrder: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  enabled: Schema.Boolean,\n  eventName: V2HooksListResponse__HookEventName,\n  handlerType: V2HooksListResponse__HookHandlerType,\n  isManaged: Schema.Boolean,\n  key: Schema.String,\n  matcher: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  source: V2HooksListResponse__HookSource,\n  sourcePath: V2HooksListResponse__AbsolutePathBuf,\n  statusMessage: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  timeoutSec: Schema.Number.annotate({ format: \"uint64\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  trustStatus: V2HooksListResponse__HookTrustStatus,\n});\n\nexport type V2HookStartedNotification__HookOutputEntry = {\n  readonly kind: V2HookStartedNotification__HookOutputEntryKind;\n  readonly text: string;\n};\nexport const V2HookStartedNotification__HookOutputEntry = Schema.Struct({\n  kind: V2HookStartedNotification__HookOutputEntryKind,\n  text: Schema.String,\n});\n\nexport type V2ItemCompletedNotification__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ItemCompletedNotification__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ItemCompletedNotification__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ItemCompletedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemCompletedNotification__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ItemCompletedNotification__CollabAgentStatus;\n};\nexport const V2ItemCompletedNotification__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ItemCompletedNotification__CollabAgentStatus,\n});\n\nexport type V2ItemCompletedNotification__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ItemCompletedNotification__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ItemCompletedNotification__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ItemCompletedNotification__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ItemCompletedNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ItemCompletedNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ItemCompletedNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ItemCompletedNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ItemCompletedNotification__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ItemCompletedNotification__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ItemCompletedNotification__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ItemCompletedNotification__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ItemCompletedNotification__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ItemCompletedNotification__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__FileSystemPath =\n  | {\n      readonly path: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf;\n      readonly type: \"path\";\n    }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | {\n      readonly type: \"special\";\n      readonly value: V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSpecialPath;\n    };\nexport const V2ItemGuardianApprovalReviewCompletedNotification__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReview = {\n  readonly rationale?: string | null;\n  readonly riskLevel?: V2ItemGuardianApprovalReviewCompletedNotification__GuardianRiskLevel | null;\n  readonly status: V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewStatus;\n  readonly userAuthorization?: V2ItemGuardianApprovalReviewCompletedNotification__GuardianUserAuthorization | null;\n};\nexport const V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReview =\n  Schema.Struct({\n    rationale: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    riskLevel: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewCompletedNotification__GuardianRiskLevel,\n        Schema.Null,\n      ]),\n    ),\n    status: V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewStatus,\n    userAuthorization: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewCompletedNotification__GuardianUserAuthorization,\n        Schema.Null,\n      ]),\n    ),\n  }).annotate({\n    description:\n      \"[UNSTABLE] Temporary approval auto-review payload used by `item/autoApprovalReview/*` notifications. This shape is expected to change soon.\",\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__FileSystemPath =\n  | {\n      readonly path: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf;\n      readonly type: \"path\";\n    }\n  | { readonly pattern: string; readonly type: \"glob_pattern\" }\n  | {\n      readonly type: \"special\";\n      readonly value: V2ItemGuardianApprovalReviewStartedNotification__FileSystemSpecialPath;\n    };\nexport const V2ItemGuardianApprovalReviewStartedNotification__FileSystemPath = Schema.Union(\n  [\n    Schema.Struct({\n      path: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"path\").annotate({ title: \"PathFileSystemPathType\" }),\n    }).annotate({ title: \"PathFileSystemPath\" }),\n    Schema.Struct({\n      pattern: Schema.String,\n      type: Schema.Literal(\"glob_pattern\").annotate({ title: \"GlobPatternFileSystemPathType\" }),\n    }).annotate({ title: \"GlobPatternFileSystemPath\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"special\").annotate({ title: \"SpecialFileSystemPathType\" }),\n      value: V2ItemGuardianApprovalReviewStartedNotification__FileSystemSpecialPath,\n    }).annotate({ title: \"SpecialFileSystemPath\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReview = {\n  readonly rationale?: string | null;\n  readonly riskLevel?: V2ItemGuardianApprovalReviewStartedNotification__GuardianRiskLevel | null;\n  readonly status: V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewStatus;\n  readonly userAuthorization?: V2ItemGuardianApprovalReviewStartedNotification__GuardianUserAuthorization | null;\n};\nexport const V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReview =\n  Schema.Struct({\n    rationale: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    riskLevel: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewStartedNotification__GuardianRiskLevel,\n        Schema.Null,\n      ]),\n    ),\n    status: V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewStatus,\n    userAuthorization: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewStartedNotification__GuardianUserAuthorization,\n        Schema.Null,\n      ]),\n    ),\n  }).annotate({\n    description:\n      \"[UNSTABLE] Temporary approval auto-review payload used by `item/autoApprovalReview/*` notifications. This shape is expected to change soon.\",\n  });\n\nexport type V2ItemStartedNotification__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ItemStartedNotification__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ItemStartedNotification__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ItemStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemStartedNotification__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ItemStartedNotification__CollabAgentStatus;\n};\nexport const V2ItemStartedNotification__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ItemStartedNotification__CollabAgentStatus,\n});\n\nexport type V2ItemStartedNotification__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ItemStartedNotification__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ItemStartedNotification__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ItemStartedNotification__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ItemStartedNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ItemStartedNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ItemStartedNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ItemStartedNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ItemStartedNotification__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ItemStartedNotification__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ItemStartedNotification__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ItemStartedNotification__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ItemStartedNotification__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ItemStartedNotification__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ListMcpServerStatusResponse__McpServerStatus = {\n  readonly authStatus: V2ListMcpServerStatusResponse__McpAuthStatus;\n  readonly name: string;\n  readonly resourceTemplates: ReadonlyArray<V2ListMcpServerStatusResponse__ResourceTemplate>;\n  readonly resources: ReadonlyArray<V2ListMcpServerStatusResponse__Resource>;\n  readonly serverInfo?: V2ListMcpServerStatusResponse__McpServerInfo | null;\n  readonly tools: { readonly [x: string]: V2ListMcpServerStatusResponse__Tool };\n};\nexport const V2ListMcpServerStatusResponse__McpServerStatus = Schema.Struct({\n  authStatus: V2ListMcpServerStatusResponse__McpAuthStatus,\n  name: Schema.String,\n  resourceTemplates: Schema.Array(V2ListMcpServerStatusResponse__ResourceTemplate),\n  resources: Schema.Array(V2ListMcpServerStatusResponse__Resource),\n  serverInfo: Schema.optionalKey(\n    Schema.Union([V2ListMcpServerStatusResponse__McpServerInfo, Schema.Null]),\n  ),\n  tools: Schema.Record(Schema.String, V2ListMcpServerStatusResponse__Tool),\n});\n\nexport type V2ModelListResponse__ReasoningEffortOption = {\n  readonly description: string;\n  readonly reasoningEffort: V2ModelListResponse__ReasoningEffort;\n};\nexport const V2ModelListResponse__ReasoningEffortOption = Schema.Struct({\n  description: Schema.String,\n  reasoningEffort: V2ModelListResponse__ReasoningEffort,\n});\n\nexport type V2PluginInstalledResponse__MarketplaceLoadErrorInfo = {\n  readonly marketplacePath: V2PluginInstalledResponse__AbsolutePathBuf;\n  readonly message: string;\n};\nexport const V2PluginInstalledResponse__MarketplaceLoadErrorInfo = Schema.Struct({\n  marketplacePath: V2PluginInstalledResponse__AbsolutePathBuf,\n  message: Schema.String,\n});\n\nexport type V2PluginInstalledResponse__PluginInterface = {\n  readonly brandColor?: string | null;\n  readonly capabilities: ReadonlyArray<string>;\n  readonly category?: string | null;\n  readonly composerIcon?: V2PluginInstalledResponse__AbsolutePathBuf | null;\n  readonly composerIconUrl?: string | null;\n  readonly defaultPrompt?: ReadonlyArray<string> | null;\n  readonly developerName?: string | null;\n  readonly displayName?: string | null;\n  readonly logo?: V2PluginInstalledResponse__AbsolutePathBuf | null;\n  readonly logoUrl?: string | null;\n  readonly longDescription?: string | null;\n  readonly privacyPolicyUrl?: string | null;\n  readonly screenshotUrls: ReadonlyArray<string>;\n  readonly screenshots: ReadonlyArray<V2PluginInstalledResponse__AbsolutePathBuf>;\n  readonly shortDescription?: string | null;\n  readonly termsOfServiceUrl?: string | null;\n  readonly websiteUrl?: string | null;\n};\nexport const V2PluginInstalledResponse__PluginInterface = Schema.Struct({\n  brandColor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  capabilities: Schema.Array(Schema.String),\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  composerIcon: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local composer icon path, resolved from the installed plugin package.\",\n    }),\n  ),\n  composerIconUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote composer icon URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  defaultPrompt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Starter prompts for the plugin. Capped at 3 entries with a maximum of 128 characters per entry.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  developerName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logo: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local logo path, resolved from the installed plugin package.\",\n    }),\n  ),\n  logoUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote logo URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  longDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  privacyPolicyUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  screenshotUrls: Schema.Array(Schema.String).annotate({\n    description: \"Remote screenshot URLs from the plugin catalog.\",\n  }),\n  screenshots: Schema.Array(V2PluginInstalledResponse__AbsolutePathBuf).annotate({\n    description: \"Local screenshot paths, resolved from the installed plugin package.\",\n  }),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfServiceUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  websiteUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginInstalledResponse__PluginSource =\n  | { readonly path: V2PluginInstalledResponse__AbsolutePathBuf; readonly type: \"local\" }\n  | {\n      readonly path?: string | null;\n      readonly refName?: string | null;\n      readonly sha?: string | null;\n      readonly type: \"git\";\n      readonly url: string;\n    }\n  | { readonly type: \"remote\" };\nexport const V2PluginInstalledResponse__PluginSource = Schema.Union(\n  [\n    Schema.Struct({\n      path: V2PluginInstalledResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"local\").annotate({ title: \"LocalPluginSourceType\" }),\n    }).annotate({ title: \"LocalPluginSource\" }),\n    Schema.Struct({\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      refName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"git\").annotate({ title: \"GitPluginSourceType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"GitPluginSource\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"remote\").annotate({ title: \"RemotePluginSourceType\" }),\n    }).annotate({\n      title: \"RemotePluginSource\",\n      description:\n        \"The plugin is available in the remote catalog. Download metadata is kept server-side and is not exposed through the app-server API.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2PluginInstalledResponse__PluginSharePrincipal = {\n  readonly name: string;\n  readonly principalId: string;\n  readonly principalType: V2PluginInstalledResponse__PluginSharePrincipalType;\n  readonly role: V2PluginInstalledResponse__PluginSharePrincipalRole;\n};\nexport const V2PluginInstalledResponse__PluginSharePrincipal = Schema.Struct({\n  name: Schema.String,\n  principalId: Schema.String,\n  principalType: V2PluginInstalledResponse__PluginSharePrincipalType,\n  role: V2PluginInstalledResponse__PluginSharePrincipalRole,\n});\n\nexport type V2PluginListResponse__MarketplaceLoadErrorInfo = {\n  readonly marketplacePath: V2PluginListResponse__AbsolutePathBuf;\n  readonly message: string;\n};\nexport const V2PluginListResponse__MarketplaceLoadErrorInfo = Schema.Struct({\n  marketplacePath: V2PluginListResponse__AbsolutePathBuf,\n  message: Schema.String,\n});\n\nexport type V2PluginListResponse__PluginInterface = {\n  readonly brandColor?: string | null;\n  readonly capabilities: ReadonlyArray<string>;\n  readonly category?: string | null;\n  readonly composerIcon?: V2PluginListResponse__AbsolutePathBuf | null;\n  readonly composerIconUrl?: string | null;\n  readonly defaultPrompt?: ReadonlyArray<string> | null;\n  readonly developerName?: string | null;\n  readonly displayName?: string | null;\n  readonly logo?: V2PluginListResponse__AbsolutePathBuf | null;\n  readonly logoUrl?: string | null;\n  readonly longDescription?: string | null;\n  readonly privacyPolicyUrl?: string | null;\n  readonly screenshotUrls: ReadonlyArray<string>;\n  readonly screenshots: ReadonlyArray<V2PluginListResponse__AbsolutePathBuf>;\n  readonly shortDescription?: string | null;\n  readonly termsOfServiceUrl?: string | null;\n  readonly websiteUrl?: string | null;\n};\nexport const V2PluginListResponse__PluginInterface = Schema.Struct({\n  brandColor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  capabilities: Schema.Array(Schema.String),\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  composerIcon: Schema.optionalKey(\n    Schema.Union([V2PluginListResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local composer icon path, resolved from the installed plugin package.\",\n    }),\n  ),\n  composerIconUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote composer icon URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  defaultPrompt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Starter prompts for the plugin. Capped at 3 entries with a maximum of 128 characters per entry.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  developerName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logo: Schema.optionalKey(\n    Schema.Union([V2PluginListResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local logo path, resolved from the installed plugin package.\",\n    }),\n  ),\n  logoUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote logo URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  longDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  privacyPolicyUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  screenshotUrls: Schema.Array(Schema.String).annotate({\n    description: \"Remote screenshot URLs from the plugin catalog.\",\n  }),\n  screenshots: Schema.Array(V2PluginListResponse__AbsolutePathBuf).annotate({\n    description: \"Local screenshot paths, resolved from the installed plugin package.\",\n  }),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfServiceUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  websiteUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginListResponse__PluginSource =\n  | { readonly path: V2PluginListResponse__AbsolutePathBuf; readonly type: \"local\" }\n  | {\n      readonly path?: string | null;\n      readonly refName?: string | null;\n      readonly sha?: string | null;\n      readonly type: \"git\";\n      readonly url: string;\n    }\n  | { readonly type: \"remote\" };\nexport const V2PluginListResponse__PluginSource = Schema.Union(\n  [\n    Schema.Struct({\n      path: V2PluginListResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"local\").annotate({ title: \"LocalPluginSourceType\" }),\n    }).annotate({ title: \"LocalPluginSource\" }),\n    Schema.Struct({\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      refName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"git\").annotate({ title: \"GitPluginSourceType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"GitPluginSource\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"remote\").annotate({ title: \"RemotePluginSourceType\" }),\n    }).annotate({\n      title: \"RemotePluginSource\",\n      description:\n        \"The plugin is available in the remote catalog. Download metadata is kept server-side and is not exposed through the app-server API.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2PluginListResponse__PluginSharePrincipal = {\n  readonly name: string;\n  readonly principalId: string;\n  readonly principalType: V2PluginListResponse__PluginSharePrincipalType;\n  readonly role: V2PluginListResponse__PluginSharePrincipalRole;\n};\nexport const V2PluginListResponse__PluginSharePrincipal = Schema.Struct({\n  name: Schema.String,\n  principalId: Schema.String,\n  principalType: V2PluginListResponse__PluginSharePrincipalType,\n  role: V2PluginListResponse__PluginSharePrincipalRole,\n});\n\nexport type V2PluginReadResponse__PluginInterface = {\n  readonly brandColor?: string | null;\n  readonly capabilities: ReadonlyArray<string>;\n  readonly category?: string | null;\n  readonly composerIcon?: V2PluginReadResponse__AbsolutePathBuf | null;\n  readonly composerIconUrl?: string | null;\n  readonly defaultPrompt?: ReadonlyArray<string> | null;\n  readonly developerName?: string | null;\n  readonly displayName?: string | null;\n  readonly logo?: V2PluginReadResponse__AbsolutePathBuf | null;\n  readonly logoUrl?: string | null;\n  readonly longDescription?: string | null;\n  readonly privacyPolicyUrl?: string | null;\n  readonly screenshotUrls: ReadonlyArray<string>;\n  readonly screenshots: ReadonlyArray<V2PluginReadResponse__AbsolutePathBuf>;\n  readonly shortDescription?: string | null;\n  readonly termsOfServiceUrl?: string | null;\n  readonly websiteUrl?: string | null;\n};\nexport const V2PluginReadResponse__PluginInterface = Schema.Struct({\n  brandColor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  capabilities: Schema.Array(Schema.String),\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  composerIcon: Schema.optionalKey(\n    Schema.Union([V2PluginReadResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local composer icon path, resolved from the installed plugin package.\",\n    }),\n  ),\n  composerIconUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote composer icon URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  defaultPrompt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Starter prompts for the plugin. Capped at 3 entries with a maximum of 128 characters per entry.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  developerName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logo: Schema.optionalKey(\n    Schema.Union([V2PluginReadResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local logo path, resolved from the installed plugin package.\",\n    }),\n  ),\n  logoUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote logo URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  longDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  privacyPolicyUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  screenshotUrls: Schema.Array(Schema.String).annotate({\n    description: \"Remote screenshot URLs from the plugin catalog.\",\n  }),\n  screenshots: Schema.Array(V2PluginReadResponse__AbsolutePathBuf).annotate({\n    description: \"Local screenshot paths, resolved from the installed plugin package.\",\n  }),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfServiceUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  websiteUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginReadResponse__PluginSource =\n  | { readonly path: V2PluginReadResponse__AbsolutePathBuf; readonly type: \"local\" }\n  | {\n      readonly path?: string | null;\n      readonly refName?: string | null;\n      readonly sha?: string | null;\n      readonly type: \"git\";\n      readonly url: string;\n    }\n  | { readonly type: \"remote\" };\nexport const V2PluginReadResponse__PluginSource = Schema.Union(\n  [\n    Schema.Struct({\n      path: V2PluginReadResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"local\").annotate({ title: \"LocalPluginSourceType\" }),\n    }).annotate({ title: \"LocalPluginSource\" }),\n    Schema.Struct({\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      refName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"git\").annotate({ title: \"GitPluginSourceType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"GitPluginSource\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"remote\").annotate({ title: \"RemotePluginSourceType\" }),\n    }).annotate({\n      title: \"RemotePluginSource\",\n      description:\n        \"The plugin is available in the remote catalog. Download metadata is kept server-side and is not exposed through the app-server API.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2PluginReadResponse__SkillInterface = {\n  readonly brandColor?: string | null;\n  readonly defaultPrompt?: string | null;\n  readonly displayName?: string | null;\n  readonly iconLarge?: V2PluginReadResponse__AbsolutePathBuf | null;\n  readonly iconSmall?: V2PluginReadResponse__AbsolutePathBuf | null;\n  readonly shortDescription?: string | null;\n};\nexport const V2PluginReadResponse__SkillInterface = Schema.Struct({\n  brandColor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  defaultPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  iconLarge: Schema.optionalKey(Schema.Union([V2PluginReadResponse__AbsolutePathBuf, Schema.Null])),\n  iconSmall: Schema.optionalKey(Schema.Union([V2PluginReadResponse__AbsolutePathBuf, Schema.Null])),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginReadResponse__AppTemplateSummary = {\n  readonly canonicalConnectorId?: string | null;\n  readonly description?: string | null;\n  readonly logoUrl?: string | null;\n  readonly logoUrlDark?: string | null;\n  readonly materializedAppIds: ReadonlyArray<string>;\n  readonly name: string;\n  readonly reason?: V2PluginReadResponse__AppTemplateUnavailableReason | null;\n  readonly templateId: string;\n};\nexport const V2PluginReadResponse__AppTemplateSummary = Schema.Struct({\n  canonicalConnectorId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logoUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logoUrlDark: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  materializedAppIds: Schema.Array(Schema.String),\n  name: Schema.String,\n  reason: Schema.optionalKey(\n    Schema.Union([V2PluginReadResponse__AppTemplateUnavailableReason, Schema.Null]),\n  ),\n  templateId: Schema.String,\n});\n\nexport type V2PluginReadResponse__PluginHookSummary = {\n  readonly eventName: V2PluginReadResponse__HookEventName;\n  readonly key: string;\n};\nexport const V2PluginReadResponse__PluginHookSummary = Schema.Struct({\n  eventName: V2PluginReadResponse__HookEventName,\n  key: Schema.String,\n});\n\nexport type V2PluginReadResponse__PluginSharePrincipal = {\n  readonly name: string;\n  readonly principalId: string;\n  readonly principalType: V2PluginReadResponse__PluginSharePrincipalType;\n  readonly role: V2PluginReadResponse__PluginSharePrincipalRole;\n};\nexport const V2PluginReadResponse__PluginSharePrincipal = Schema.Struct({\n  name: Schema.String,\n  principalId: Schema.String,\n  principalType: V2PluginReadResponse__PluginSharePrincipalType,\n  role: V2PluginReadResponse__PluginSharePrincipalRole,\n});\n\nexport type V2PluginShareListResponse__PluginInterface = {\n  readonly brandColor?: string | null;\n  readonly capabilities: ReadonlyArray<string>;\n  readonly category?: string | null;\n  readonly composerIcon?: V2PluginShareListResponse__AbsolutePathBuf | null;\n  readonly composerIconUrl?: string | null;\n  readonly defaultPrompt?: ReadonlyArray<string> | null;\n  readonly developerName?: string | null;\n  readonly displayName?: string | null;\n  readonly logo?: V2PluginShareListResponse__AbsolutePathBuf | null;\n  readonly logoUrl?: string | null;\n  readonly longDescription?: string | null;\n  readonly privacyPolicyUrl?: string | null;\n  readonly screenshotUrls: ReadonlyArray<string>;\n  readonly screenshots: ReadonlyArray<V2PluginShareListResponse__AbsolutePathBuf>;\n  readonly shortDescription?: string | null;\n  readonly termsOfServiceUrl?: string | null;\n  readonly websiteUrl?: string | null;\n};\nexport const V2PluginShareListResponse__PluginInterface = Schema.Struct({\n  brandColor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  capabilities: Schema.Array(Schema.String),\n  category: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  composerIcon: Schema.optionalKey(\n    Schema.Union([V2PluginShareListResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local composer icon path, resolved from the installed plugin package.\",\n    }),\n  ),\n  composerIconUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote composer icon URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  defaultPrompt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Starter prompts for the plugin. Capped at 3 entries with a maximum of 128 characters per entry.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  developerName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logo: Schema.optionalKey(\n    Schema.Union([V2PluginShareListResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Local logo path, resolved from the installed plugin package.\",\n    }),\n  ),\n  logoUrl: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Remote logo URL from the plugin catalog.\" }),\n      Schema.Null,\n    ]),\n  ),\n  longDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  privacyPolicyUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  screenshotUrls: Schema.Array(Schema.String).annotate({\n    description: \"Remote screenshot URLs from the plugin catalog.\",\n  }),\n  screenshots: Schema.Array(V2PluginShareListResponse__AbsolutePathBuf).annotate({\n    description: \"Local screenshot paths, resolved from the installed plugin package.\",\n  }),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  termsOfServiceUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  websiteUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginShareListResponse__PluginSource =\n  | { readonly path: V2PluginShareListResponse__AbsolutePathBuf; readonly type: \"local\" }\n  | {\n      readonly path?: string | null;\n      readonly refName?: string | null;\n      readonly sha?: string | null;\n      readonly type: \"git\";\n      readonly url: string;\n    }\n  | { readonly type: \"remote\" };\nexport const V2PluginShareListResponse__PluginSource = Schema.Union(\n  [\n    Schema.Struct({\n      path: V2PluginShareListResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"local\").annotate({ title: \"LocalPluginSourceType\" }),\n    }).annotate({ title: \"LocalPluginSource\" }),\n    Schema.Struct({\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      refName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      sha: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"git\").annotate({ title: \"GitPluginSourceType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"GitPluginSource\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"remote\").annotate({ title: \"RemotePluginSourceType\" }),\n    }).annotate({\n      title: \"RemotePluginSource\",\n      description:\n        \"The plugin is available in the remote catalog. Download metadata is kept server-side and is not exposed through the app-server API.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2PluginShareListResponse__PluginSharePrincipal = {\n  readonly name: string;\n  readonly principalId: string;\n  readonly principalType: V2PluginShareListResponse__PluginSharePrincipalType;\n  readonly role: V2PluginShareListResponse__PluginSharePrincipalRole;\n};\nexport const V2PluginShareListResponse__PluginSharePrincipal = Schema.Struct({\n  name: Schema.String,\n  principalId: Schema.String,\n  principalType: V2PluginShareListResponse__PluginSharePrincipalType,\n  role: V2PluginShareListResponse__PluginSharePrincipalRole,\n});\n\nexport type V2PluginShareSaveParams__PluginShareTarget = {\n  readonly principalId: string;\n  readonly principalType: V2PluginShareSaveParams__PluginSharePrincipalType;\n  readonly role: V2PluginShareSaveParams__PluginShareTargetRole;\n};\nexport const V2PluginShareSaveParams__PluginShareTarget = Schema.Struct({\n  principalId: Schema.String,\n  principalType: V2PluginShareSaveParams__PluginSharePrincipalType,\n  role: V2PluginShareSaveParams__PluginShareTargetRole,\n});\n\nexport type V2PluginShareUpdateTargetsParams__PluginShareTarget = {\n  readonly principalId: string;\n  readonly principalType: V2PluginShareUpdateTargetsParams__PluginSharePrincipalType;\n  readonly role: V2PluginShareUpdateTargetsParams__PluginShareTargetRole;\n};\nexport const V2PluginShareUpdateTargetsParams__PluginShareTarget = Schema.Struct({\n  principalId: Schema.String,\n  principalType: V2PluginShareUpdateTargetsParams__PluginSharePrincipalType,\n  role: V2PluginShareUpdateTargetsParams__PluginShareTargetRole,\n});\n\nexport type V2PluginShareUpdateTargetsResponse__PluginSharePrincipal = {\n  readonly name: string;\n  readonly principalId: string;\n  readonly principalType: V2PluginShareUpdateTargetsResponse__PluginSharePrincipalType;\n  readonly role: V2PluginShareUpdateTargetsResponse__PluginSharePrincipalRole;\n};\nexport const V2PluginShareUpdateTargetsResponse__PluginSharePrincipal = Schema.Struct({\n  name: Schema.String,\n  principalId: Schema.String,\n  principalType: V2PluginShareUpdateTargetsResponse__PluginSharePrincipalType,\n  role: V2PluginShareUpdateTargetsResponse__PluginSharePrincipalRole,\n});\n\nexport type V2RawResponseItemCompletedNotification__ContentItem =\n  | { readonly text: string; readonly type: \"input_text\" }\n  | {\n      readonly detail?: V2RawResponseItemCompletedNotification__ImageDetail | null;\n      readonly image_url: string;\n      readonly type: \"input_image\";\n    }\n  | { readonly text: string; readonly type: \"output_text\" };\nexport const V2RawResponseItemCompletedNotification__ContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"input_text\").annotate({ title: \"InputTextContentItemType\" }),\n    }).annotate({ title: \"InputTextContentItem\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2RawResponseItemCompletedNotification__ImageDetail, Schema.Null]),\n      ),\n      image_url: Schema.String,\n      type: Schema.Literal(\"input_image\").annotate({ title: \"InputImageContentItemType\" }),\n    }).annotate({ title: \"InputImageContentItem\" }),\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"output_text\").annotate({ title: \"OutputTextContentItemType\" }),\n    }).annotate({ title: \"OutputTextContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2RawResponseItemCompletedNotification__FunctionCallOutputContentItem =\n  | { readonly text: string; readonly type: \"input_text\" }\n  | {\n      readonly detail?: V2RawResponseItemCompletedNotification__ImageDetail | null;\n      readonly image_url: string;\n      readonly type: \"input_image\";\n    }\n  | { readonly encrypted_content: string; readonly type: \"encrypted_content\" };\nexport const V2RawResponseItemCompletedNotification__FunctionCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"input_text\").annotate({\n        title: \"InputTextFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextFunctionCallOutputContentItem\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2RawResponseItemCompletedNotification__ImageDetail, Schema.Null]),\n      ),\n      image_url: Schema.String,\n      type: Schema.Literal(\"input_image\").annotate({\n        title: \"InputImageFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageFunctionCallOutputContentItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"encrypted_content\").annotate({\n        title: \"EncryptedContentFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"EncryptedContentFunctionCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ReviewStartResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ReviewStartResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ReviewStartResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ReviewStartResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ReviewStartResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ReviewStartResponse__CollabAgentStatus;\n};\nexport const V2ReviewStartResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ReviewStartResponse__CollabAgentStatus,\n});\n\nexport type V2ReviewStartResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ReviewStartResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ReviewStartResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ReviewStartResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ReviewStartResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ReviewStartResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ReviewStartResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ReviewStartResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ReviewStartResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ReviewStartResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ReviewStartResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ReviewStartResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ReviewStartResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ReviewStartResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ReviewStartResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ReviewStartResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ReviewStartResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ReviewStartResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ReviewStartResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ReviewStartResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2SkillsListResponse__SkillInterface = {\n  readonly brandColor?: string | null;\n  readonly defaultPrompt?: string | null;\n  readonly displayName?: string | null;\n  readonly iconLarge?: V2SkillsListResponse__AbsolutePathBuf | null;\n  readonly iconSmall?: V2SkillsListResponse__AbsolutePathBuf | null;\n  readonly shortDescription?: string | null;\n};\nexport const V2SkillsListResponse__SkillInterface = Schema.Struct({\n  brandColor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  defaultPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  displayName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  iconLarge: Schema.optionalKey(Schema.Union([V2SkillsListResponse__AbsolutePathBuf, Schema.Null])),\n  iconSmall: Schema.optionalKey(Schema.Union([V2SkillsListResponse__AbsolutePathBuf, Schema.Null])),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2SkillsListResponse__SkillDependencies = {\n  readonly tools: ReadonlyArray<V2SkillsListResponse__SkillToolDependency>;\n};\nexport const V2SkillsListResponse__SkillDependencies = Schema.Struct({\n  tools: Schema.Array(V2SkillsListResponse__SkillToolDependency),\n});\n\nexport type V2ThreadForkResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadForkResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadForkResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadForkResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadForkResponse__CollabAgentStatus;\n};\nexport const V2ThreadForkResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadForkResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadForkResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadForkResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadForkResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadForkResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadForkResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadForkResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadForkResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadForkResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadForkResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadForkResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadForkResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadForkResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadForkResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadForkResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadForkResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadForkResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadForkResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadForkResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadForkResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadForkResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadForkResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadForkResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadForkResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadForkResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadForkResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadGoalGetResponse__ThreadGoal = {\n  readonly createdAt: number;\n  readonly objective: string;\n  readonly status: V2ThreadGoalGetResponse__ThreadGoalStatus;\n  readonly threadId: string;\n  readonly timeUsedSeconds: number;\n  readonly tokenBudget?: number | null;\n  readonly tokensUsed: number;\n  readonly updatedAt: number;\n};\nexport const V2ThreadGoalGetResponse__ThreadGoal = Schema.Struct({\n  createdAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  objective: Schema.String,\n  status: V2ThreadGoalGetResponse__ThreadGoalStatus,\n  threadId: Schema.String,\n  timeUsedSeconds: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  tokenBudget: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  tokensUsed: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  updatedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type V2ThreadGoalSetResponse__ThreadGoal = {\n  readonly createdAt: number;\n  readonly objective: string;\n  readonly status: V2ThreadGoalSetResponse__ThreadGoalStatus;\n  readonly threadId: string;\n  readonly timeUsedSeconds: number;\n  readonly tokenBudget?: number | null;\n  readonly tokensUsed: number;\n  readonly updatedAt: number;\n};\nexport const V2ThreadGoalSetResponse__ThreadGoal = Schema.Struct({\n  createdAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  objective: Schema.String,\n  status: V2ThreadGoalSetResponse__ThreadGoalStatus,\n  threadId: Schema.String,\n  timeUsedSeconds: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  tokenBudget: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  tokensUsed: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  updatedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type V2ThreadGoalUpdatedNotification__ThreadGoal = {\n  readonly createdAt: number;\n  readonly objective: string;\n  readonly status: V2ThreadGoalUpdatedNotification__ThreadGoalStatus;\n  readonly threadId: string;\n  readonly timeUsedSeconds: number;\n  readonly tokenBudget?: number | null;\n  readonly tokensUsed: number;\n  readonly updatedAt: number;\n};\nexport const V2ThreadGoalUpdatedNotification__ThreadGoal = Schema.Struct({\n  createdAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  objective: Schema.String,\n  status: V2ThreadGoalUpdatedNotification__ThreadGoalStatus,\n  threadId: Schema.String,\n  timeUsedSeconds: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  tokenBudget: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  tokensUsed: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  updatedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n});\n\nexport type V2ThreadListResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadListResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadListResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadListResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadListResponse__CollabAgentStatus;\n};\nexport const V2ThreadListResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadListResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadListResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadListResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadListResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadListResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadListResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadListResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadListResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadListResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadListResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadListResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadListResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadListResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadListResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadListResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadListResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadListResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadListResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadListResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadListResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadListResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadListResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadListResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadListResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadListResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadListResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadMetadataUpdateResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadMetadataUpdateResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadMetadataUpdateResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadMetadataUpdateResponse__CollabAgentStatus;\n};\nexport const V2ThreadMetadataUpdateResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadMetadataUpdateResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadMetadataUpdateResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadMetadataUpdateResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadMetadataUpdateResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadMetadataUpdateResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadMetadataUpdateResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadMetadataUpdateResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadMetadataUpdateResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadMetadataUpdateResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadMetadataUpdateResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadMetadataUpdateResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadMetadataUpdateResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadMetadataUpdateResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadMetadataUpdateResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadMetadataUpdateResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadMetadataUpdateResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadMetadataUpdateResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadMetadataUpdateResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadMetadataUpdateResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadMetadataUpdateResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadMetadataUpdateResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadMetadataUpdateResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadMetadataUpdateResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadMetadataUpdateResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadReadResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadReadResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadReadResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadReadResponse__CollabAgentStatus;\n};\nexport const V2ThreadReadResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadReadResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadReadResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadReadResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadReadResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadReadResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadReadResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadReadResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadReadResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadReadResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadReadResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadReadResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadReadResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadReadResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadReadResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadReadResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadReadResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadReadResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadReadResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadReadResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadReadResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadReadResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadReadResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadReadResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadReadResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadReadResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadReadResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__ContentItem =\n  | { readonly text: string; readonly type: \"input_text\" }\n  | {\n      readonly detail?: V2ThreadResumeParams__ImageDetail | null;\n      readonly image_url: string;\n      readonly type: \"input_image\";\n    }\n  | { readonly text: string; readonly type: \"output_text\" };\nexport const V2ThreadResumeParams__ContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"input_text\").annotate({ title: \"InputTextContentItemType\" }),\n    }).annotate({ title: \"InputTextContentItem\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadResumeParams__ImageDetail, Schema.Null])),\n      image_url: Schema.String,\n      type: Schema.Literal(\"input_image\").annotate({ title: \"InputImageContentItemType\" }),\n    }).annotate({ title: \"InputImageContentItem\" }),\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"output_text\").annotate({ title: \"OutputTextContentItemType\" }),\n    }).annotate({ title: \"OutputTextContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__FunctionCallOutputContentItem =\n  | { readonly text: string; readonly type: \"input_text\" }\n  | {\n      readonly detail?: V2ThreadResumeParams__ImageDetail | null;\n      readonly image_url: string;\n      readonly type: \"input_image\";\n    }\n  | { readonly encrypted_content: string; readonly type: \"encrypted_content\" };\nexport const V2ThreadResumeParams__FunctionCallOutputContentItem = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      type: Schema.Literal(\"input_text\").annotate({\n        title: \"InputTextFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputTextFunctionCallOutputContentItem\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadResumeParams__ImageDetail, Schema.Null])),\n      image_url: Schema.String,\n      type: Schema.Literal(\"input_image\").annotate({\n        title: \"InputImageFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"InputImageFunctionCallOutputContentItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"encrypted_content\").annotate({\n        title: \"EncryptedContentFunctionCallOutputContentItemType\",\n      }),\n    }).annotate({ title: \"EncryptedContentFunctionCallOutputContentItem\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadResumeResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadResumeResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadResumeResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadResumeResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadResumeResponse__CollabAgentStatus;\n};\nexport const V2ThreadResumeResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadResumeResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadResumeResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadResumeResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadResumeResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadResumeResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadResumeResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadResumeResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadResumeResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadResumeResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadResumeResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadResumeResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadResumeResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadResumeResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadResumeResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadResumeResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadResumeResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadResumeResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadResumeResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadResumeResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadResumeResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadResumeResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadResumeResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadResumeResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadResumeResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadResumeResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadResumeResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadRollbackResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadRollbackResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadRollbackResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadRollbackResponse__CollabAgentStatus;\n};\nexport const V2ThreadRollbackResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadRollbackResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadRollbackResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadRollbackResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadRollbackResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadRollbackResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadRollbackResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadRollbackResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadRollbackResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadRollbackResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadRollbackResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadRollbackResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadRollbackResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadRollbackResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadRollbackResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadRollbackResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadRollbackResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadRollbackResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadRollbackResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadRollbackResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadRollbackResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadRollbackResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadRollbackResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadRollbackResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadRollbackResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadSettingsUpdatedNotification__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<V2ThreadSettingsUpdatedNotification__AbsolutePathBuf>;\n    };\nexport const V2ThreadSettingsUpdatedNotification__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(V2ThreadSettingsUpdatedNotification__AbsolutePathBuf).annotate({\n          default: [],\n        }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadSettingsUpdatedNotification__Settings = {\n  readonly developer_instructions?: string | null;\n  readonly model: string;\n  readonly reasoning_effort?: V2ThreadSettingsUpdatedNotification__ReasoningEffort | null;\n};\nexport const V2ThreadSettingsUpdatedNotification__Settings = Schema.Struct({\n  developer_instructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.String,\n  reasoning_effort: Schema.optionalKey(\n    Schema.Union([V2ThreadSettingsUpdatedNotification__ReasoningEffort, Schema.Null]),\n  ),\n}).annotate({ description: \"Settings for a collaboration mode.\" });\n\nexport type V2ThreadStartedNotification__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadStartedNotification__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadStartedNotification__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartedNotification__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadStartedNotification__CollabAgentStatus;\n};\nexport const V2ThreadStartedNotification__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadStartedNotification__CollabAgentStatus,\n});\n\nexport type V2ThreadStartedNotification__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadStartedNotification__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadStartedNotification__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadStartedNotification__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadStartedNotification__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadStartedNotification__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadStartedNotification__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadStartedNotification__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadStartedNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadStartedNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadStartedNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadStartedNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadStartedNotification__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadStartedNotification__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadStartedNotification__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadStartedNotification__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadStartedNotification__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadStartedNotification__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartedNotification__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadStartedNotification__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadStartedNotification__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadStartedNotification__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadStartedNotification__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadStartedNotification__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadStartResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadStartResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadStartResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadStartResponse__CollabAgentStatus;\n};\nexport const V2ThreadStartResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadStartResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadStartResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadStartResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadStartResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadStartResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadStartResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadStartResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadStartResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadStartResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadStartResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadStartResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadStartResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadStartResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadStartResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadStartResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadStartResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadStartResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadStartResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadStartResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadStartResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2ThreadStartResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadStartResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadStartResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadStartResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadStartResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadStartResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStatusChangedNotification__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadStatusChangedNotification__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadStatusChangedNotification__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadStatusChangedNotification__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadTokenUsageUpdatedNotification__ThreadTokenUsage = {\n  readonly last: V2ThreadTokenUsageUpdatedNotification__TokenUsageBreakdown;\n  readonly modelContextWindow?: number | null;\n  readonly total: V2ThreadTokenUsageUpdatedNotification__TokenUsageBreakdown;\n};\nexport const V2ThreadTokenUsageUpdatedNotification__ThreadTokenUsage = Schema.Struct({\n  last: V2ThreadTokenUsageUpdatedNotification__TokenUsageBreakdown,\n  modelContextWindow: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  total: V2ThreadTokenUsageUpdatedNotification__TokenUsageBreakdown,\n});\n\nexport type V2ThreadUnarchiveResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2ThreadUnarchiveResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2ThreadUnarchiveResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2ThreadUnarchiveResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2ThreadUnarchiveResponse__CollabAgentStatus;\n};\nexport const V2ThreadUnarchiveResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2ThreadUnarchiveResponse__CollabAgentStatus,\n});\n\nexport type V2ThreadUnarchiveResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2ThreadUnarchiveResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2ThreadUnarchiveResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2ThreadUnarchiveResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2ThreadUnarchiveResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2ThreadUnarchiveResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2ThreadUnarchiveResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2ThreadUnarchiveResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadUnarchiveResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2ThreadUnarchiveResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2ThreadUnarchiveResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2ThreadUnarchiveResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2ThreadUnarchiveResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2ThreadUnarchiveResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2ThreadUnarchiveResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2ThreadUnarchiveResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2ThreadUnarchiveResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2ThreadUnarchiveResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__SubAgentSource =\n  | \"review\"\n  | \"compact\"\n  | \"memory_consolidation\"\n  | {\n      readonly thread_spawn: {\n        readonly agent_nickname?: string | null;\n        readonly agent_path?: V2ThreadUnarchiveResponse__AgentPath | null;\n        readonly agent_role?: string | null;\n        readonly depth: number;\n        readonly parent_thread_id: V2ThreadUnarchiveResponse__ThreadId;\n      };\n    }\n  | { readonly other: string };\nexport const V2ThreadUnarchiveResponse__SubAgentSource = Schema.Union(\n  [\n    Schema.Literals([\"review\", \"compact\", \"memory_consolidation\"]),\n    Schema.Struct({\n      thread_spawn: Schema.Struct({\n        agent_nickname: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        agent_path: Schema.optionalKey(\n          Schema.Union([V2ThreadUnarchiveResponse__AgentPath, Schema.Null]),\n        ),\n        agent_role: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        depth: Schema.Number.annotate({ format: \"int32\" }).check(Schema.isInt()),\n        parent_thread_id: V2ThreadUnarchiveResponse__ThreadId,\n      }),\n    }).annotate({ title: \"ThreadSpawnSubAgentSource\" }),\n    Schema.Struct({ other: Schema.String }).annotate({ title: \"OtherSubAgentSource\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnCompletedNotification__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2TurnCompletedNotification__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2TurnCompletedNotification__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2TurnCompletedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnCompletedNotification__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2TurnCompletedNotification__CollabAgentStatus;\n};\nexport const V2TurnCompletedNotification__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2TurnCompletedNotification__CollabAgentStatus,\n});\n\nexport type V2TurnCompletedNotification__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2TurnCompletedNotification__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2TurnCompletedNotification__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2TurnCompletedNotification__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2TurnCompletedNotification__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2TurnCompletedNotification__NonSteerableTurnKind;\n      };\n    };\nexport const V2TurnCompletedNotification__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2TurnCompletedNotification__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnCompletedNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2TurnCompletedNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2TurnCompletedNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2TurnCompletedNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2TurnCompletedNotification__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2TurnCompletedNotification__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2TurnCompletedNotification__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2TurnCompletedNotification__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2TurnCompletedNotification__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2TurnCompletedNotification__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnPlanUpdatedNotification__TurnPlanStep = {\n  readonly status: V2TurnPlanUpdatedNotification__TurnPlanStepStatus;\n  readonly step: string;\n};\nexport const V2TurnPlanUpdatedNotification__TurnPlanStep = Schema.Struct({\n  status: V2TurnPlanUpdatedNotification__TurnPlanStepStatus,\n  step: Schema.String,\n});\n\nexport type V2TurnStartedNotification__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2TurnStartedNotification__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2TurnStartedNotification__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2TurnStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartedNotification__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2TurnStartedNotification__CollabAgentStatus;\n};\nexport const V2TurnStartedNotification__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2TurnStartedNotification__CollabAgentStatus,\n});\n\nexport type V2TurnStartedNotification__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2TurnStartedNotification__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2TurnStartedNotification__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2TurnStartedNotification__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2TurnStartedNotification__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2TurnStartedNotification__NonSteerableTurnKind;\n      };\n    };\nexport const V2TurnStartedNotification__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2TurnStartedNotification__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnStartedNotification__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2TurnStartedNotification__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2TurnStartedNotification__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2TurnStartedNotification__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2TurnStartedNotification__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2TurnStartedNotification__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2TurnStartedNotification__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2TurnStartedNotification__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2TurnStartedNotification__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2TurnStartedNotification__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__ImageDetail, Schema.Null]),\n      ),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__ImageDetail, Schema.Null]),\n      ),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartParams__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<V2TurnStartParams__AbsolutePathBuf>;\n    };\nexport const V2TurnStartParams__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(V2TurnStartParams__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartParams__Settings = {\n  readonly developer_instructions?: string | null;\n  readonly model: string;\n  readonly reasoning_effort?: V2TurnStartParams__ReasoningEffort | null;\n};\nexport const V2TurnStartParams__Settings = Schema.Struct({\n  developer_instructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.String,\n  reasoning_effort: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__ReasoningEffort, Schema.Null]),\n  ),\n}).annotate({ description: \"Settings for a collaboration mode.\" });\n\nexport type V2TurnStartParams__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2TurnStartParams__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2TurnStartParams__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2TurnStartParams__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2TurnStartParams__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2TurnStartParams__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2TurnStartParams__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2TurnStartParams__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartResponse__CommandAction =\n  | {\n      readonly command: string;\n      readonly name: string;\n      readonly path: V2TurnStartResponse__AbsolutePathBuf;\n      readonly type: \"read\";\n    }\n  | { readonly command: string; readonly path?: string | null; readonly type: \"listFiles\" }\n  | {\n      readonly command: string;\n      readonly path?: string | null;\n      readonly query?: string | null;\n      readonly type: \"search\";\n    }\n  | { readonly command: string; readonly type: \"unknown\" };\nexport const V2TurnStartResponse__CommandAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      name: Schema.String,\n      path: V2TurnStartResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"read\").annotate({ title: \"ReadCommandActionType\" }),\n    }).annotate({ title: \"ReadCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"listFiles\").annotate({ title: \"ListFilesCommandActionType\" }),\n    }).annotate({ title: \"ListFilesCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      path: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      query: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"search\").annotate({ title: \"SearchCommandActionType\" }),\n    }).annotate({ title: \"SearchCommandAction\" }),\n    Schema.Struct({\n      command: Schema.String,\n      type: Schema.Literal(\"unknown\").annotate({ title: \"UnknownCommandActionType\" }),\n    }).annotate({ title: \"UnknownCommandAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartResponse__CollabAgentState = {\n  readonly message?: string | null;\n  readonly status: V2TurnStartResponse__CollabAgentStatus;\n};\nexport const V2TurnStartResponse__CollabAgentState = Schema.Struct({\n  message: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: V2TurnStartResponse__CollabAgentStatus,\n});\n\nexport type V2TurnStartResponse__MemoryCitation = {\n  readonly entries: ReadonlyArray<V2TurnStartResponse__MemoryCitationEntry>;\n  readonly threadIds: ReadonlyArray<string>;\n};\nexport const V2TurnStartResponse__MemoryCitation = Schema.Struct({\n  entries: Schema.Array(V2TurnStartResponse__MemoryCitationEntry),\n  threadIds: Schema.Array(Schema.String),\n});\n\nexport type V2TurnStartResponse__CodexErrorInfo =\n  | \"contextWindowExceeded\"\n  | \"usageLimitExceeded\"\n  | \"serverOverloaded\"\n  | \"cyberPolicy\"\n  | \"internalServerError\"\n  | \"unauthorized\"\n  | \"badRequest\"\n  | \"threadRollbackFailed\"\n  | \"sandboxError\"\n  | \"other\"\n  | { readonly httpConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamConnectionFailed: { readonly httpStatusCode?: number | null } }\n  | { readonly responseStreamDisconnected: { readonly httpStatusCode?: number | null } }\n  | { readonly responseTooManyFailedAttempts: { readonly httpStatusCode?: number | null } }\n  | {\n      readonly activeTurnNotSteerable: {\n        readonly turnKind: V2TurnStartResponse__NonSteerableTurnKind;\n      };\n    };\nexport const V2TurnStartResponse__CodexErrorInfo = Schema.Union(\n  [\n    Schema.Literals([\n      \"contextWindowExceeded\",\n      \"usageLimitExceeded\",\n      \"serverOverloaded\",\n      \"cyberPolicy\",\n      \"internalServerError\",\n      \"unauthorized\",\n      \"badRequest\",\n      \"threadRollbackFailed\",\n      \"sandboxError\",\n      \"other\",\n    ]),\n    Schema.Struct({\n      httpConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({ title: \"HttpConnectionFailedCodexErrorInfo\" }),\n    Schema.Struct({\n      responseStreamConnectionFailed: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamConnectionFailedCodexErrorInfo\",\n      description: \"Failed to connect to the response SSE stream.\",\n    }),\n    Schema.Struct({\n      responseStreamDisconnected: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseStreamDisconnectedCodexErrorInfo\",\n      description:\n        \"The response SSE stream disconnected in the middle of a turn before completion.\",\n    }),\n    Schema.Struct({\n      responseTooManyFailedAttempts: Schema.Struct({\n        httpStatusCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"uint16\" })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n      }),\n    }).annotate({\n      title: \"ResponseTooManyFailedAttemptsCodexErrorInfo\",\n      description: \"Reached the retry limit for responses.\",\n    }),\n    Schema.Struct({\n      activeTurnNotSteerable: Schema.Struct({\n        turnKind: V2TurnStartResponse__NonSteerableTurnKind,\n      }),\n    }).annotate({\n      title: \"ActiveTurnNotSteerableCodexErrorInfo\",\n      description:\n        \"Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2TurnStartResponse__FileUpdateChange = {\n  readonly diff: string;\n  readonly kind: V2TurnStartResponse__PatchChangeKind;\n  readonly path: string;\n};\nexport const V2TurnStartResponse__FileUpdateChange = Schema.Struct({\n  diff: Schema.String,\n  kind: V2TurnStartResponse__PatchChangeKind,\n  path: Schema.String,\n});\n\nexport type V2TurnStartResponse__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2TurnStartResponse__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2TurnStartResponse__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2TurnStartResponse__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2TurnStartResponse__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2TurnStartResponse__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2TurnStartResponse__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2TurnStartResponse__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnSteerParams__UserInput =\n  | {\n      readonly text: string;\n      readonly text_elements?: ReadonlyArray<V2TurnSteerParams__TextElement>;\n      readonly type: \"text\";\n    }\n  | {\n      readonly detail?: V2TurnSteerParams__ImageDetail | null;\n      readonly type: \"image\";\n      readonly url: string;\n    }\n  | {\n      readonly detail?: V2TurnSteerParams__ImageDetail | null;\n      readonly path: string;\n      readonly type: \"localImage\";\n    }\n  | { readonly name: string; readonly path: string; readonly type: \"skill\" }\n  | { readonly name: string; readonly path: string; readonly type: \"mention\" };\nexport const V2TurnSteerParams__UserInput = Schema.Union(\n  [\n    Schema.Struct({\n      text: Schema.String,\n      text_elements: Schema.optionalKey(\n        Schema.Array(V2TurnSteerParams__TextElement).annotate({\n          description: \"UI-defined spans within `text` used to render or persist special elements.\",\n          default: [],\n        }),\n      ),\n      type: Schema.Literal(\"text\").annotate({ title: \"TextUserInputType\" }),\n    }).annotate({ title: \"TextUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2TurnSteerParams__ImageDetail, Schema.Null])),\n      type: Schema.Literal(\"image\").annotate({ title: \"ImageUserInputType\" }),\n      url: Schema.String,\n    }).annotate({ title: \"ImageUserInput\" }),\n    Schema.Struct({\n      detail: Schema.optionalKey(Schema.Union([V2TurnSteerParams__ImageDetail, Schema.Null])),\n      path: Schema.String,\n      type: Schema.Literal(\"localImage\").annotate({ title: \"LocalImageUserInputType\" }),\n    }).annotate({ title: \"LocalImageUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"skill\").annotate({ title: \"SkillUserInputType\" }),\n    }).annotate({ title: \"SkillUserInput\" }),\n    Schema.Struct({\n      name: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"mention\").annotate({ title: \"MentionUserInputType\" }),\n    }).annotate({ title: \"MentionUserInput\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ApplyPatchApprovalResponse__ReviewDecision =\n  | \"approved\"\n  | {\n      readonly approved_execpolicy_amendment: {\n        readonly proposed_execpolicy_amendment: ReadonlyArray<string>;\n      };\n    }\n  | \"approved_for_session\"\n  | {\n      readonly network_policy_amendment: {\n        readonly network_policy_amendment: ApplyPatchApprovalResponse__NetworkPolicyAmendment;\n      };\n    }\n  | \"denied\"\n  | \"timed_out\"\n  | \"abort\";\nexport const ApplyPatchApprovalResponse__ReviewDecision = Schema.Union(\n  [\n    Schema.Literal(\"approved\").annotate({\n      description: \"User has approved this command and the agent should execute it.\",\n    }),\n    Schema.Struct({\n      approved_execpolicy_amendment: Schema.Struct({\n        proposed_execpolicy_amendment: Schema.Array(Schema.String),\n      }),\n    }).annotate({\n      title: \"ApprovedExecpolicyAmendmentReviewDecision\",\n      description:\n        \"User has approved this command and wants to apply the proposed execpolicy amendment so future matching commands are permitted.\",\n    }),\n    Schema.Literal(\"approved_for_session\").annotate({\n      description:\n        \"User has approved this request and wants future prompts in the same session-scoped approval cache to be automatically approved for the remainder of the session.\",\n    }),\n    Schema.Struct({\n      network_policy_amendment: Schema.Struct({\n        network_policy_amendment: ApplyPatchApprovalResponse__NetworkPolicyAmendment,\n      }),\n    }).annotate({\n      title: \"NetworkPolicyAmendmentReviewDecision\",\n      description:\n        \"User chose to persist a network policy rule (allow/deny) for future requests to the same host.\",\n    }),\n    Schema.Literal(\"denied\").annotate({\n      description:\n        \"User has denied this command and the agent should not execute it, but it should continue the session and try something else.\",\n    }),\n    Schema.Literal(\"timed_out\").annotate({\n      description: \"Automatic approval review timed out before reaching a decision.\",\n    }),\n    Schema.Literal(\"abort\").annotate({\n      description:\n        \"User has denied this command and the agent should not do anything until the user's next command.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ description: \"User's decision in response to an ExecApprovalRequest.\" });\n\nexport type ClientRequest__CommandExecParams = {\n  readonly command: ReadonlyArray<string>;\n  readonly cwd?: string | null;\n  readonly disableOutputCap?: boolean;\n  readonly disableTimeout?: boolean;\n  readonly env?: { readonly [x: string]: string | null } | null;\n  readonly outputBytesCap?: number | null;\n  readonly processId?: string | null;\n  readonly sandboxPolicy?: ClientRequest__SandboxPolicy | null;\n  readonly size?: ClientRequest__CommandExecTerminalSize | null;\n  readonly streamStdin?: boolean;\n  readonly streamStdoutStderr?: boolean;\n  readonly timeoutMs?: number | null;\n  readonly tty?: boolean;\n};\nexport const ClientRequest__CommandExecParams = Schema.Struct({\n  command: Schema.Array(Schema.String).annotate({\n    description: \"Command argv vector. Empty arrays are rejected.\",\n  }),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional working directory. Defaults to the server cwd.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  disableOutputCap: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Disable stdout/stderr capture truncation for this request.\\n\\nCannot be combined with `outputBytesCap`.\",\n    }),\n  ),\n  disableTimeout: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Disable the timeout entirely for this request.\\n\\nCannot be combined with `timeoutMs`.\",\n    }),\n  ),\n  env: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Union([Schema.String, Schema.Null])).annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  outputBytesCap: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description:\n          \"Optional per-stream stdout/stderr capture cap in bytes.\\n\\nWhen omitted, the server default applies. Cannot be combined with `disableOutputCap`.\",\n        format: \"uint\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  processId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sandboxPolicy: Schema.optionalKey(\n    Schema.Union([ClientRequest__SandboxPolicy, Schema.Null]).annotate({\n      description:\n        \"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`.\",\n    }),\n  ),\n  size: Schema.optionalKey(\n    Schema.Union([ClientRequest__CommandExecTerminalSize, Schema.Null]).annotate({\n      description: \"Optional initial PTY size in character cells. Only valid when `tty` is true.\",\n    }),\n  ),\n  streamStdin: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Allow follow-up `command/exec/write` requests to write stdin bytes.\\n\\nRequires a client-supplied `processId`.\",\n    }),\n  ),\n  streamStdoutStderr: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Stream stdout/stderr via `command/exec/outputDelta` notifications.\\n\\nStreamed bytes are not duplicated into the final response and require a client-supplied `processId`.\",\n    }),\n  ),\n  timeoutMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description:\n          \"Optional timeout in milliseconds.\\n\\nWhen omitted, the server default applies. Cannot be combined with `disableTimeout`.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  tty: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Enable PTY mode.\\n\\nThis implies `streamStdin` and `streamStdoutStderr`.\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"Run a standalone command (argv vector) in the server sandbox without creating a thread or turn.\\n\\nThe final `command/exec` response is deferred until the process exits and is sent only after all `command/exec/outputDelta` notifications for that connection have been emitted.\",\n});\n\nexport type ClientRequest__FunctionCallOutputBody =\n  | string\n  | ReadonlyArray<ClientRequest__FunctionCallOutputContentItem>;\nexport const ClientRequest__FunctionCallOutputBody = Schema.Union([\n  Schema.String,\n  Schema.Array(ClientRequest__FunctionCallOutputContentItem),\n]);\n\nexport type ClientRequest__ConfigBatchWriteParams = {\n  readonly edits: ReadonlyArray<ClientRequest__ConfigEdit>;\n  readonly expectedVersion?: string | null;\n  readonly filePath?: string | null;\n  readonly reloadUserConfig?: boolean;\n};\nexport const ClientRequest__ConfigBatchWriteParams = Schema.Struct({\n  edits: Schema.Array(ClientRequest__ConfigEdit),\n  expectedVersion: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  filePath: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Path to the config file to write; defaults to the user's `config.toml` when omitted.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reloadUserConfig: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"When true, hot-reload the updated user config into all loaded threads after writing.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__PluginShareSaveParams = {\n  readonly discoverability?: ClientRequest__PluginShareDiscoverability | null;\n  readonly pluginPath: ClientRequest__AbsolutePathBuf;\n  readonly remotePluginId?: string | null;\n  readonly shareTargets?: ReadonlyArray<ClientRequest__PluginShareTarget> | null;\n};\nexport const ClientRequest__PluginShareSaveParams = Schema.Struct({\n  discoverability: Schema.optionalKey(\n    Schema.Union([ClientRequest__PluginShareDiscoverability, Schema.Null]),\n  ),\n  pluginPath: ClientRequest__AbsolutePathBuf,\n  remotePluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  shareTargets: Schema.optionalKey(\n    Schema.Union([Schema.Array(ClientRequest__PluginShareTarget), Schema.Null]),\n  ),\n});\n\nexport type ClientRequest__PluginShareUpdateTargetsParams = {\n  readonly discoverability: ClientRequest__PluginShareUpdateDiscoverability;\n  readonly remotePluginId: string;\n  readonly shareTargets: ReadonlyArray<ClientRequest__PluginShareTarget>;\n};\nexport const ClientRequest__PluginShareUpdateTargetsParams = Schema.Struct({\n  discoverability: ClientRequest__PluginShareUpdateDiscoverability,\n  remotePluginId: Schema.String,\n  shareTargets: Schema.Array(ClientRequest__PluginShareTarget),\n});\n\nexport type ClientRequest__ExternalAgentConfigMigrationItem = {\n  readonly cwd?: string | null;\n  readonly description: string;\n  readonly details?: ClientRequest__MigrationDetails | null;\n  readonly itemType: ClientRequest__ExternalAgentConfigMigrationItemType;\n};\nexport const ClientRequest__ExternalAgentConfigMigrationItem = Schema.Struct({\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Null or empty means home-scoped migration; non-empty means repo-scoped migration.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.String,\n  details: Schema.optionalKey(Schema.Union([ClientRequest__MigrationDetails, Schema.Null])),\n  itemType: ClientRequest__ExternalAgentConfigMigrationItemType,\n});\n\nexport type ClientRequest__TurnStartParams = {\n  readonly approvalPolicy?: ClientRequest__AskForApproval | null;\n  readonly approvalsReviewer?: ClientRequest__ApprovalsReviewer | null;\n  readonly clientUserMessageId?: string | null;\n  readonly cwd?: string | null;\n  readonly effort?: ClientRequest__ReasoningEffort | null;\n  readonly input: ReadonlyArray<ClientRequest__UserInput>;\n  readonly model?: string | null;\n  readonly outputSchema?: unknown;\n  readonly personality?: ClientRequest__Personality | null;\n  readonly sandboxPolicy?: ClientRequest__SandboxPolicy | null;\n  readonly serviceTier?: string | null;\n  readonly summary?: ClientRequest__ReasoningSummary | null;\n  readonly threadId: string;\n};\nexport const ClientRequest__TurnStartParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(\n    Schema.Union([ClientRequest__AskForApproval, Schema.Null]).annotate({\n      description: \"Override the approval policy for this turn and subsequent turns.\",\n    }),\n  ),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([ClientRequest__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this turn and subsequent turns.\",\n    }),\n  ),\n  clientUserMessageId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Override the working directory for this turn and subsequent turns.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  effort: Schema.optionalKey(\n    Schema.Union([ClientRequest__ReasoningEffort, Schema.Null]).annotate({\n      description: \"Override the reasoning effort for this turn and subsequent turns.\",\n    }),\n  ),\n  input: Schema.Array(ClientRequest__UserInput),\n  model: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Override the model for this turn and subsequent turns.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  outputSchema: Schema.optionalKey(\n    Schema.Unknown.annotate({\n      description:\n        \"Optional JSON Schema used to constrain the final assistant message for this turn.\",\n    }),\n  ),\n  personality: Schema.optionalKey(\n    Schema.Union([ClientRequest__Personality, Schema.Null]).annotate({\n      description: \"Override the personality for this turn and subsequent turns.\",\n    }),\n  ),\n  sandboxPolicy: Schema.optionalKey(\n    Schema.Union([ClientRequest__SandboxPolicy, Schema.Null]).annotate({\n      description: \"Override the sandbox policy for this turn and subsequent turns.\",\n    }),\n  ),\n  serviceTier: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Override the service tier for this turn and subsequent turns.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  summary: Schema.optionalKey(\n    Schema.Union([ClientRequest__ReasoningSummary, Schema.Null]).annotate({\n      description: \"Override the reasoning summary for this turn and subsequent turns.\",\n    }),\n  ),\n  threadId: Schema.String,\n});\n\nexport type ClientRequest__TurnSteerParams = {\n  readonly clientUserMessageId?: string | null;\n  readonly expectedTurnId: string;\n  readonly input: ReadonlyArray<ClientRequest__UserInput>;\n  readonly threadId: string;\n};\nexport const ClientRequest__TurnSteerParams = Schema.Struct({\n  clientUserMessageId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  expectedTurnId: Schema.String.annotate({\n    description:\n      \"Required active turn id precondition. The request fails when it does not match the currently active turn.\",\n  }),\n  input: Schema.Array(ClientRequest__UserInput),\n  threadId: Schema.String,\n});\n\nexport type CommandExecutionRequestApprovalParams__FileSystemSandboxEntry = {\n  readonly access: CommandExecutionRequestApprovalParams__FileSystemAccessMode;\n  readonly path: CommandExecutionRequestApprovalParams__FileSystemPath;\n};\nexport const CommandExecutionRequestApprovalParams__FileSystemSandboxEntry = Schema.Struct({\n  access: CommandExecutionRequestApprovalParams__FileSystemAccessMode,\n  path: CommandExecutionRequestApprovalParams__FileSystemPath,\n});\n\nexport type CommandExecutionRequestApprovalResponse__CommandExecutionApprovalDecision =\n  | \"accept\"\n  | \"acceptForSession\"\n  | {\n      readonly acceptWithExecpolicyAmendment: {\n        readonly execpolicy_amendment: ReadonlyArray<string>;\n      };\n    }\n  | {\n      readonly applyNetworkPolicyAmendment: {\n        readonly network_policy_amendment: CommandExecutionRequestApprovalResponse__NetworkPolicyAmendment;\n      };\n    }\n  | \"decline\"\n  | \"cancel\";\nexport const CommandExecutionRequestApprovalResponse__CommandExecutionApprovalDecision =\n  Schema.Union(\n    [\n      Schema.Literal(\"accept\").annotate({ description: \"User approved the command.\" }),\n      Schema.Literal(\"acceptForSession\").annotate({\n        description:\n          \"User approved the command and future prompts in the same session-scoped approval cache should run without prompting.\",\n      }),\n      Schema.Struct({\n        acceptWithExecpolicyAmendment: Schema.Struct({\n          execpolicy_amendment: Schema.Array(Schema.String),\n        }),\n      }).annotate({\n        title: \"AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision\",\n        description:\n          \"User approved the command, and wants to apply the proposed execpolicy amendment so future matching commands can run without prompting.\",\n      }),\n      Schema.Struct({\n        applyNetworkPolicyAmendment: Schema.Struct({\n          network_policy_amendment: CommandExecutionRequestApprovalResponse__NetworkPolicyAmendment,\n        }),\n      }).annotate({\n        title: \"ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision\",\n        description: \"User chose a persistent network policy rule (allow/deny) for this host.\",\n      }),\n      Schema.Literal(\"decline\").annotate({\n        description: \"User denied the command. The agent will continue the turn.\",\n      }),\n      Schema.Literal(\"cancel\").annotate({\n        description: \"User denied the command. The turn will also be immediately interrupted.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  );\n\nexport type ExecCommandApprovalResponse__ReviewDecision =\n  | \"approved\"\n  | {\n      readonly approved_execpolicy_amendment: {\n        readonly proposed_execpolicy_amendment: ReadonlyArray<string>;\n      };\n    }\n  | \"approved_for_session\"\n  | {\n      readonly network_policy_amendment: {\n        readonly network_policy_amendment: ExecCommandApprovalResponse__NetworkPolicyAmendment;\n      };\n    }\n  | \"denied\"\n  | \"timed_out\"\n  | \"abort\";\nexport const ExecCommandApprovalResponse__ReviewDecision = Schema.Union(\n  [\n    Schema.Literal(\"approved\").annotate({\n      description: \"User has approved this command and the agent should execute it.\",\n    }),\n    Schema.Struct({\n      approved_execpolicy_amendment: Schema.Struct({\n        proposed_execpolicy_amendment: Schema.Array(Schema.String),\n      }),\n    }).annotate({\n      title: \"ApprovedExecpolicyAmendmentReviewDecision\",\n      description:\n        \"User has approved this command and wants to apply the proposed execpolicy amendment so future matching commands are permitted.\",\n    }),\n    Schema.Literal(\"approved_for_session\").annotate({\n      description:\n        \"User has approved this request and wants future prompts in the same session-scoped approval cache to be automatically approved for the remainder of the session.\",\n    }),\n    Schema.Struct({\n      network_policy_amendment: Schema.Struct({\n        network_policy_amendment: ExecCommandApprovalResponse__NetworkPolicyAmendment,\n      }),\n    }).annotate({\n      title: \"NetworkPolicyAmendmentReviewDecision\",\n      description:\n        \"User chose to persist a network policy rule (allow/deny) for future requests to the same host.\",\n    }),\n    Schema.Literal(\"denied\").annotate({\n      description:\n        \"User has denied this command and the agent should not execute it, but it should continue the session and try something else.\",\n    }),\n    Schema.Literal(\"timed_out\").annotate({\n      description: \"Automatic approval review timed out before reaching a decision.\",\n    }),\n    Schema.Literal(\"abort\").annotate({\n      description:\n        \"User has denied this command and the agent should not do anything until the user's next command.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ description: \"User's decision in response to an ExecApprovalRequest.\" });\n\nexport type McpServerElicitationRequestParams__McpElicitationTitledMultiSelectEnumSchema = {\n  readonly default?: ReadonlyArray<string> | null;\n  readonly description?: string | null;\n  readonly items: McpServerElicitationRequestParams__McpElicitationTitledEnumItems;\n  readonly maxItems?: number | null;\n  readonly minItems?: number | null;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationArrayType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationTitledMultiSelectEnumSchema =\n  Schema.Struct({\n    default: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n    description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    items: McpServerElicitationRequestParams__McpElicitationTitledEnumItems,\n    maxItems: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint64\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        Schema.Null,\n      ]),\n    ),\n    minItems: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint64\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        Schema.Null,\n      ]),\n    ),\n    title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    type: McpServerElicitationRequestParams__McpElicitationArrayType,\n  });\n\nexport type McpServerElicitationRequestParams__McpElicitationUntitledMultiSelectEnumSchema = {\n  readonly default?: ReadonlyArray<string> | null;\n  readonly description?: string | null;\n  readonly items: McpServerElicitationRequestParams__McpElicitationUntitledEnumItems;\n  readonly maxItems?: number | null;\n  readonly minItems?: number | null;\n  readonly title?: string | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationArrayType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationUntitledMultiSelectEnumSchema =\n  Schema.Struct({\n    default: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n    description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    items: McpServerElicitationRequestParams__McpElicitationUntitledEnumItems,\n    maxItems: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint64\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        Schema.Null,\n      ]),\n    ),\n    minItems: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint64\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        Schema.Null,\n      ]),\n    ),\n    title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    type: McpServerElicitationRequestParams__McpElicitationArrayType,\n  });\n\nexport type McpServerElicitationRequestParams__McpElicitationSingleSelectEnumSchema =\n  | McpServerElicitationRequestParams__McpElicitationUntitledSingleSelectEnumSchema\n  | McpServerElicitationRequestParams__McpElicitationTitledSingleSelectEnumSchema;\nexport const McpServerElicitationRequestParams__McpElicitationSingleSelectEnumSchema = Schema.Union(\n  [\n    McpServerElicitationRequestParams__McpElicitationUntitledSingleSelectEnumSchema,\n    McpServerElicitationRequestParams__McpElicitationTitledSingleSelectEnumSchema,\n  ],\n);\n\nexport type PermissionsRequestApprovalParams__FileSystemSandboxEntry = {\n  readonly access: PermissionsRequestApprovalParams__FileSystemAccessMode;\n  readonly path: PermissionsRequestApprovalParams__FileSystemPath;\n};\nexport const PermissionsRequestApprovalParams__FileSystemSandboxEntry = Schema.Struct({\n  access: PermissionsRequestApprovalParams__FileSystemAccessMode,\n  path: PermissionsRequestApprovalParams__FileSystemPath,\n});\n\nexport type PermissionsRequestApprovalResponse__FileSystemSandboxEntry = {\n  readonly access: PermissionsRequestApprovalResponse__FileSystemAccessMode;\n  readonly path: PermissionsRequestApprovalResponse__FileSystemPath;\n};\nexport const PermissionsRequestApprovalResponse__FileSystemSandboxEntry = Schema.Struct({\n  access: PermissionsRequestApprovalResponse__FileSystemAccessMode,\n  path: PermissionsRequestApprovalResponse__FileSystemPath,\n});\n\nexport type ServerNotification__AppInfo = {\n  readonly appMetadata?: ServerNotification__AppMetadata | null;\n  readonly branding?: ServerNotification__AppBranding | null;\n  readonly description?: string | null;\n  readonly distributionChannel?: string | null;\n  readonly id: string;\n  readonly installUrl?: string | null;\n  readonly isAccessible?: boolean;\n  readonly isEnabled?: boolean;\n  readonly labels?: { readonly [x: string]: string } | null;\n  readonly logoUrl?: string | null;\n  readonly logoUrlDark?: string | null;\n  readonly name: string;\n  readonly pluginDisplayNames?: ReadonlyArray<string>;\n};\nexport const ServerNotification__AppInfo = Schema.Struct({\n  appMetadata: Schema.optionalKey(Schema.Union([ServerNotification__AppMetadata, Schema.Null])),\n  branding: Schema.optionalKey(Schema.Union([ServerNotification__AppBranding, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  distributionChannel: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  id: Schema.String,\n  installUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  isAccessible: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  isEnabled: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Whether this app is enabled in config.toml. Example: ```toml [apps.bad_app] enabled = false ```\",\n      default: true,\n    }),\n  ),\n  labels: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n  ),\n  logoUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logoUrlDark: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  pluginDisplayNames: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n}).annotate({ description: \"EXPERIMENTAL - app metadata returned by app-list APIs.\" });\n\nexport type ServerNotification__FileSystemSandboxEntry = {\n  readonly access: ServerNotification__FileSystemAccessMode;\n  readonly path: ServerNotification__FileSystemPath;\n};\nexport const ServerNotification__FileSystemSandboxEntry = Schema.Struct({\n  access: ServerNotification__FileSystemAccessMode,\n  path: ServerNotification__FileSystemPath,\n});\n\nexport type ServerNotification__FuzzyFileSearchSessionUpdatedNotification = {\n  readonly files: ReadonlyArray<ServerNotification__FuzzyFileSearchResult>;\n  readonly query: string;\n  readonly sessionId: string;\n};\nexport const ServerNotification__FuzzyFileSearchSessionUpdatedNotification = Schema.Struct({\n  files: Schema.Array(ServerNotification__FuzzyFileSearchResult),\n  query: Schema.String,\n  sessionId: Schema.String,\n});\n\nexport type ServerNotification__HookRunSummary = {\n  readonly completedAt?: number | null;\n  readonly displayOrder: number;\n  readonly durationMs?: number | null;\n  readonly entries: ReadonlyArray<ServerNotification__HookOutputEntry>;\n  readonly eventName: ServerNotification__HookEventName;\n  readonly executionMode: ServerNotification__HookExecutionMode;\n  readonly handlerType: ServerNotification__HookHandlerType;\n  readonly id: string;\n  readonly scope: ServerNotification__HookScope;\n  readonly source?:\n    | \"system\"\n    | \"user\"\n    | \"project\"\n    | \"mdm\"\n    | \"sessionFlags\"\n    | \"plugin\"\n    | \"cloudRequirements\"\n    | \"cloudManagedConfig\"\n    | \"legacyManagedConfigFile\"\n    | \"legacyManagedConfigMdm\"\n    | \"unknown\";\n  readonly sourcePath: ServerNotification__AbsolutePathBuf;\n  readonly startedAt: number;\n  readonly status: ServerNotification__HookRunStatus;\n  readonly statusMessage?: string | null;\n};\nexport const ServerNotification__HookRunSummary = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  displayOrder: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  durationMs: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  entries: Schema.Array(ServerNotification__HookOutputEntry),\n  eventName: ServerNotification__HookEventName,\n  executionMode: ServerNotification__HookExecutionMode,\n  handlerType: ServerNotification__HookHandlerType,\n  id: Schema.String,\n  scope: ServerNotification__HookScope,\n  source: Schema.optionalKey(\n    Schema.Literals([\n      \"system\",\n      \"user\",\n      \"project\",\n      \"mdm\",\n      \"sessionFlags\",\n      \"plugin\",\n      \"cloudRequirements\",\n      \"cloudManagedConfig\",\n      \"legacyManagedConfigFile\",\n      \"legacyManagedConfigMdm\",\n      \"unknown\",\n    ]).annotate({ default: \"unknown\" }),\n  ),\n  sourcePath: ServerNotification__AbsolutePathBuf,\n  startedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  status: ServerNotification__HookRunStatus,\n  statusMessage: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: ServerNotification__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const ServerNotification__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([ServerNotification__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type ServerNotification__FileChangePatchUpdatedNotification = {\n  readonly changes: ReadonlyArray<ServerNotification__FileUpdateChange>;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__FileChangePatchUpdatedNotification = Schema.Struct({\n  changes: Schema.Array(ServerNotification__FileUpdateChange),\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__CollaborationMode = {\n  readonly mode: ServerNotification__ModeKind;\n  readonly settings: ServerNotification__Settings;\n};\nexport const ServerNotification__CollaborationMode = Schema.Struct({\n  mode: ServerNotification__ModeKind,\n  settings: ServerNotification__Settings,\n}).annotate({ description: \"Collaboration mode for a Codex session.\" });\n\nexport type ServerNotification__AccountRateLimitsUpdatedNotification = {\n  readonly rateLimits: ServerNotification__RateLimitSnapshot;\n};\nexport const ServerNotification__AccountRateLimitsUpdatedNotification = Schema.Struct({\n  rateLimits: ServerNotification__RateLimitSnapshot,\n}).annotate({\n  description:\n    \"Sparse rolling rate-limit update.\\n\\nClients should merge available values into the most recent `account/rateLimits/read` response or refetch that snapshot. Nullable account metadata may be unavailable in a rolling update and does not clear a previously observed value.\",\n});\n\nexport type ServerNotification__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<ServerNotification__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<ServerNotification__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: ServerNotification__MemoryCitation | null;\n      readonly phase?: ServerNotification__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<ServerNotification__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: ServerNotification__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<ServerNotification__FileUpdateChange>;\n      readonly id: string;\n      readonly status: ServerNotification__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: ServerNotification__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: ServerNotification__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: ServerNotification__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<ServerNotification__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: ServerNotification__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: ServerNotification__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: ServerNotification__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: ServerNotification__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: ServerNotification__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: ServerNotification__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: ServerNotification__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const ServerNotification__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(ServerNotification__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(ServerNotification__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([ServerNotification__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([ServerNotification__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(ServerNotification__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: ServerNotification__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(ServerNotification__FileUpdateChange),\n      id: Schema.String,\n      status: ServerNotification__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(Schema.Union([ServerNotification__McpToolCallError, Schema.Null])),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([ServerNotification__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: ServerNotification__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(ServerNotification__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: ServerNotification__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, ServerNotification__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([ServerNotification__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: ServerNotification__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(Schema.Union([ServerNotification__WebSearchAction, Schema.Null])),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: ServerNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([ServerNotification__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__ConfigWarningNotification = {\n  readonly details?: string | null;\n  readonly path?: string | null;\n  readonly range?: ServerNotification__TextRange | null;\n  readonly summary: string;\n};\nexport const ServerNotification__ConfigWarningNotification = Schema.Struct({\n  details: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional extra guidance or error details.\" }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional path to the config file that triggered the warning.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  range: Schema.optionalKey(\n    Schema.Union([ServerNotification__TextRange, Schema.Null]).annotate({\n      description: \"Optional range for the error location inside the config file.\",\n    }),\n  ),\n  summary: Schema.String.annotate({ description: \"Concise summary of the warning.\" }),\n});\n\nexport type ServerNotification__ThreadStatusChangedNotification = {\n  readonly status: ServerNotification__ThreadStatus;\n  readonly threadId: string;\n};\nexport const ServerNotification__ThreadStatusChangedNotification = Schema.Struct({\n  status: ServerNotification__ThreadStatus,\n  threadId: Schema.String,\n});\n\nexport type ServerNotification__ThreadGoalUpdatedNotification = {\n  readonly goal: ServerNotification__ThreadGoal;\n  readonly threadId: string;\n  readonly turnId?: string | null;\n};\nexport const ServerNotification__ThreadGoalUpdatedNotification = Schema.Struct({\n  goal: ServerNotification__ThreadGoal,\n  threadId: Schema.String,\n  turnId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__ThreadTokenUsageUpdatedNotification = {\n  readonly threadId: string;\n  readonly tokenUsage: ServerNotification__ThreadTokenUsage;\n  readonly turnId: string;\n};\nexport const ServerNotification__ThreadTokenUsageUpdatedNotification = Schema.Struct({\n  threadId: Schema.String,\n  tokenUsage: ServerNotification__ThreadTokenUsage,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__TurnPlanUpdatedNotification = {\n  readonly explanation?: string | null;\n  readonly plan: ReadonlyArray<ServerNotification__TurnPlanStep>;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__TurnPlanUpdatedNotification = Schema.Struct({\n  explanation: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  plan: Schema.Array(ServerNotification__TurnPlanStep),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerRequest__FileSystemSandboxEntry = {\n  readonly access: ServerRequest__FileSystemAccessMode;\n  readonly path: ServerRequest__FileSystemPath;\n};\nexport const ServerRequest__FileSystemSandboxEntry = Schema.Struct({\n  access: ServerRequest__FileSystemAccessMode,\n  path: ServerRequest__FileSystemPath,\n});\n\nexport type ServerRequest__McpElicitationTitledMultiSelectEnumSchema = {\n  readonly default?: ReadonlyArray<string> | null;\n  readonly description?: string | null;\n  readonly items: ServerRequest__McpElicitationTitledEnumItems;\n  readonly maxItems?: number | null;\n  readonly minItems?: number | null;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationArrayType;\n};\nexport const ServerRequest__McpElicitationTitledMultiSelectEnumSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  items: ServerRequest__McpElicitationTitledEnumItems,\n  maxItems: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  minItems: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationArrayType,\n});\n\nexport type ServerRequest__McpElicitationUntitledMultiSelectEnumSchema = {\n  readonly default?: ReadonlyArray<string> | null;\n  readonly description?: string | null;\n  readonly items: ServerRequest__McpElicitationUntitledEnumItems;\n  readonly maxItems?: number | null;\n  readonly minItems?: number | null;\n  readonly title?: string | null;\n  readonly type: ServerRequest__McpElicitationArrayType;\n};\nexport const ServerRequest__McpElicitationUntitledMultiSelectEnumSchema = Schema.Struct({\n  default: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  items: ServerRequest__McpElicitationUntitledEnumItems,\n  maxItems: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  minItems: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  type: ServerRequest__McpElicitationArrayType,\n});\n\nexport type ServerRequest__McpElicitationSingleSelectEnumSchema =\n  | ServerRequest__McpElicitationUntitledSingleSelectEnumSchema\n  | ServerRequest__McpElicitationTitledSingleSelectEnumSchema;\nexport const ServerRequest__McpElicitationSingleSelectEnumSchema = Schema.Union([\n  ServerRequest__McpElicitationUntitledSingleSelectEnumSchema,\n  ServerRequest__McpElicitationTitledSingleSelectEnumSchema,\n]);\n\nexport type ServerRequest__CommandExecutionRequestApprovalParams = {\n  readonly approvalId?: string | null;\n  readonly command?: string | null;\n  readonly commandActions?: ReadonlyArray<ServerRequest__CommandAction> | null;\n  readonly cwd?: ServerRequest__AbsolutePathBuf | null;\n  readonly itemId: string;\n  readonly networkApprovalContext?: ServerRequest__NetworkApprovalContext | null;\n  readonly proposedExecpolicyAmendment?: ReadonlyArray<string> | null;\n  readonly proposedNetworkPolicyAmendments?: ReadonlyArray<ServerRequest__NetworkPolicyAmendment> | null;\n  readonly reason?: string | null;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerRequest__CommandExecutionRequestApprovalParams = Schema.Struct({\n  approvalId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Unique identifier for this specific approval callback.\\n\\nFor regular shell/unified_exec approvals, this is null.\\n\\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  command: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"The command to be executed.\" }),\n      Schema.Null,\n    ]),\n  ),\n  commandActions: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ServerRequest__CommandAction).annotate({\n        description: \"Best-effort parsed command actions for friendly display.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([ServerRequest__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"The command's working directory.\",\n    }),\n  ),\n  itemId: Schema.String,\n  networkApprovalContext: Schema.optionalKey(\n    Schema.Union([ServerRequest__NetworkApprovalContext, Schema.Null]).annotate({\n      description: \"Optional context for a managed-network approval prompt.\",\n    }),\n  ),\n  proposedExecpolicyAmendment: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Optional proposed execpolicy amendment to allow similar commands without prompting.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  proposedNetworkPolicyAmendments: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ServerRequest__NetworkPolicyAmendment).annotate({\n        description:\n          \"Optional proposed network policy amendments (allow/deny host) for future requests.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reason: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional explanatory reason (e.g. request for network access).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this approval request started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerRequest__ToolRequestUserInputParams = {\n  readonly itemId: string;\n  readonly questions: ReadonlyArray<ServerRequest__ToolRequestUserInputQuestion>;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerRequest__ToolRequestUserInputParams = Schema.Struct({\n  itemId: Schema.String,\n  questions: Schema.Array(ServerRequest__ToolRequestUserInputQuestion),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ description: \"EXPERIMENTAL. Params sent with a request_user_input event.\" });\n\nexport type V2AppListUpdatedNotification__AppInfo = {\n  readonly appMetadata?: V2AppListUpdatedNotification__AppMetadata | null;\n  readonly branding?: V2AppListUpdatedNotification__AppBranding | null;\n  readonly description?: string | null;\n  readonly distributionChannel?: string | null;\n  readonly id: string;\n  readonly installUrl?: string | null;\n  readonly isAccessible?: boolean;\n  readonly isEnabled?: boolean;\n  readonly labels?: { readonly [x: string]: string } | null;\n  readonly logoUrl?: string | null;\n  readonly logoUrlDark?: string | null;\n  readonly name: string;\n  readonly pluginDisplayNames?: ReadonlyArray<string>;\n};\nexport const V2AppListUpdatedNotification__AppInfo = Schema.Struct({\n  appMetadata: Schema.optionalKey(\n    Schema.Union([V2AppListUpdatedNotification__AppMetadata, Schema.Null]),\n  ),\n  branding: Schema.optionalKey(\n    Schema.Union([V2AppListUpdatedNotification__AppBranding, Schema.Null]),\n  ),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  distributionChannel: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  id: Schema.String,\n  installUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  isAccessible: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  isEnabled: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Whether this app is enabled in config.toml. Example: ```toml [apps.bad_app] enabled = false ```\",\n      default: true,\n    }),\n  ),\n  labels: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n  ),\n  logoUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logoUrlDark: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  pluginDisplayNames: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n}).annotate({ description: \"EXPERIMENTAL - app metadata returned by app-list APIs.\" });\n\nexport type V2AppsListResponse__AppInfo = {\n  readonly appMetadata?: V2AppsListResponse__AppMetadata | null;\n  readonly branding?: V2AppsListResponse__AppBranding | null;\n  readonly description?: string | null;\n  readonly distributionChannel?: string | null;\n  readonly id: string;\n  readonly installUrl?: string | null;\n  readonly isAccessible?: boolean;\n  readonly isEnabled?: boolean;\n  readonly labels?: { readonly [x: string]: string } | null;\n  readonly logoUrl?: string | null;\n  readonly logoUrlDark?: string | null;\n  readonly name: string;\n  readonly pluginDisplayNames?: ReadonlyArray<string>;\n};\nexport const V2AppsListResponse__AppInfo = Schema.Struct({\n  appMetadata: Schema.optionalKey(Schema.Union([V2AppsListResponse__AppMetadata, Schema.Null])),\n  branding: Schema.optionalKey(Schema.Union([V2AppsListResponse__AppBranding, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  distributionChannel: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  id: Schema.String,\n  installUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  isAccessible: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  isEnabled: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Whether this app is enabled in config.toml. Example: ```toml [apps.bad_app] enabled = false ```\",\n      default: true,\n    }),\n  ),\n  labels: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n  ),\n  logoUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  logoUrlDark: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  pluginDisplayNames: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n}).annotate({ description: \"EXPERIMENTAL - app metadata returned by app-list APIs.\" });\n\nexport type V2ConfigReadResponse__ConfigLayer = {\n  readonly config: unknown;\n  readonly disabledReason?: string | null;\n  readonly name: V2ConfigReadResponse__ConfigLayerSource;\n  readonly version: string;\n};\nexport const V2ConfigReadResponse__ConfigLayer = Schema.Struct({\n  config: Schema.Unknown,\n  disabledReason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: V2ConfigReadResponse__ConfigLayerSource,\n  version: Schema.String,\n});\n\nexport type V2ConfigReadResponse__ConfigLayerMetadata = {\n  readonly name: V2ConfigReadResponse__ConfigLayerSource;\n  readonly version: string;\n};\nexport const V2ConfigReadResponse__ConfigLayerMetadata = Schema.Struct({\n  name: V2ConfigReadResponse__ConfigLayerSource,\n  version: Schema.String,\n});\n\nexport type V2ConfigReadResponse__ToolsV2 = {\n  readonly web_search?: V2ConfigReadResponse__WebSearchToolConfig | null;\n};\nexport const V2ConfigReadResponse__ToolsV2 = Schema.Struct({\n  web_search: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__WebSearchToolConfig, Schema.Null]),\n  ),\n});\n\nexport type V2ConfigWriteResponse__ConfigLayerMetadata = {\n  readonly name: V2ConfigWriteResponse__ConfigLayerSource;\n  readonly version: string;\n};\nexport const V2ConfigWriteResponse__ConfigLayerMetadata = Schema.Struct({\n  name: V2ConfigWriteResponse__ConfigLayerSource,\n  version: Schema.String,\n});\n\nexport type V2ErrorNotification__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ErrorNotification__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ErrorNotification__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ErrorNotification__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItem = {\n  readonly cwd?: string | null;\n  readonly description: string;\n  readonly details?: V2ExternalAgentConfigDetectResponse__MigrationDetails | null;\n  readonly itemType: V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItemType;\n};\nexport const V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItem = Schema.Struct({\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Null or empty means home-scoped migration; non-empty means repo-scoped migration.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.String,\n  details: Schema.optionalKey(\n    Schema.Union([V2ExternalAgentConfigDetectResponse__MigrationDetails, Schema.Null]),\n  ),\n  itemType: V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItemType,\n});\n\nexport type V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItem = {\n  readonly cwd?: string | null;\n  readonly description: string;\n  readonly details?: V2ExternalAgentConfigImportParams__MigrationDetails | null;\n  readonly itemType: V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItemType;\n};\nexport const V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItem = Schema.Struct({\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Null or empty means home-scoped migration; non-empty means repo-scoped migration.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.String,\n  details: Schema.optionalKey(\n    Schema.Union([V2ExternalAgentConfigImportParams__MigrationDetails, Schema.Null]),\n  ),\n  itemType: V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItemType,\n});\n\nexport type V2HookCompletedNotification__HookRunSummary = {\n  readonly completedAt?: number | null;\n  readonly displayOrder: number;\n  readonly durationMs?: number | null;\n  readonly entries: ReadonlyArray<V2HookCompletedNotification__HookOutputEntry>;\n  readonly eventName: V2HookCompletedNotification__HookEventName;\n  readonly executionMode: V2HookCompletedNotification__HookExecutionMode;\n  readonly handlerType: V2HookCompletedNotification__HookHandlerType;\n  readonly id: string;\n  readonly scope: V2HookCompletedNotification__HookScope;\n  readonly source?:\n    | \"system\"\n    | \"user\"\n    | \"project\"\n    | \"mdm\"\n    | \"sessionFlags\"\n    | \"plugin\"\n    | \"cloudRequirements\"\n    | \"cloudManagedConfig\"\n    | \"legacyManagedConfigFile\"\n    | \"legacyManagedConfigMdm\"\n    | \"unknown\";\n  readonly sourcePath: V2HookCompletedNotification__AbsolutePathBuf;\n  readonly startedAt: number;\n  readonly status: V2HookCompletedNotification__HookRunStatus;\n  readonly statusMessage?: string | null;\n};\nexport const V2HookCompletedNotification__HookRunSummary = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  displayOrder: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  durationMs: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  entries: Schema.Array(V2HookCompletedNotification__HookOutputEntry),\n  eventName: V2HookCompletedNotification__HookEventName,\n  executionMode: V2HookCompletedNotification__HookExecutionMode,\n  handlerType: V2HookCompletedNotification__HookHandlerType,\n  id: Schema.String,\n  scope: V2HookCompletedNotification__HookScope,\n  source: Schema.optionalKey(\n    Schema.Literals([\n      \"system\",\n      \"user\",\n      \"project\",\n      \"mdm\",\n      \"sessionFlags\",\n      \"plugin\",\n      \"cloudRequirements\",\n      \"cloudManagedConfig\",\n      \"legacyManagedConfigFile\",\n      \"legacyManagedConfigMdm\",\n      \"unknown\",\n    ]).annotate({ default: \"unknown\" }),\n  ),\n  sourcePath: V2HookCompletedNotification__AbsolutePathBuf,\n  startedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  status: V2HookCompletedNotification__HookRunStatus,\n  statusMessage: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2HooksListResponse__HooksListEntry = {\n  readonly cwd: string;\n  readonly errors: ReadonlyArray<V2HooksListResponse__HookErrorInfo>;\n  readonly hooks: ReadonlyArray<V2HooksListResponse__HookMetadata>;\n  readonly warnings: ReadonlyArray<string>;\n};\nexport const V2HooksListResponse__HooksListEntry = Schema.Struct({\n  cwd: Schema.String,\n  errors: Schema.Array(V2HooksListResponse__HookErrorInfo),\n  hooks: Schema.Array(V2HooksListResponse__HookMetadata),\n  warnings: Schema.Array(Schema.String),\n});\n\nexport type V2HookStartedNotification__HookRunSummary = {\n  readonly completedAt?: number | null;\n  readonly displayOrder: number;\n  readonly durationMs?: number | null;\n  readonly entries: ReadonlyArray<V2HookStartedNotification__HookOutputEntry>;\n  readonly eventName: V2HookStartedNotification__HookEventName;\n  readonly executionMode: V2HookStartedNotification__HookExecutionMode;\n  readonly handlerType: V2HookStartedNotification__HookHandlerType;\n  readonly id: string;\n  readonly scope: V2HookStartedNotification__HookScope;\n  readonly source?:\n    | \"system\"\n    | \"user\"\n    | \"project\"\n    | \"mdm\"\n    | \"sessionFlags\"\n    | \"plugin\"\n    | \"cloudRequirements\"\n    | \"cloudManagedConfig\"\n    | \"legacyManagedConfigFile\"\n    | \"legacyManagedConfigMdm\"\n    | \"unknown\";\n  readonly sourcePath: V2HookStartedNotification__AbsolutePathBuf;\n  readonly startedAt: number;\n  readonly status: V2HookStartedNotification__HookRunStatus;\n  readonly statusMessage?: string | null;\n};\nexport const V2HookStartedNotification__HookRunSummary = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  displayOrder: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  durationMs: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  entries: Schema.Array(V2HookStartedNotification__HookOutputEntry),\n  eventName: V2HookStartedNotification__HookEventName,\n  executionMode: V2HookStartedNotification__HookExecutionMode,\n  handlerType: V2HookStartedNotification__HookHandlerType,\n  id: Schema.String,\n  scope: V2HookStartedNotification__HookScope,\n  source: Schema.optionalKey(\n    Schema.Literals([\n      \"system\",\n      \"user\",\n      \"project\",\n      \"mdm\",\n      \"sessionFlags\",\n      \"plugin\",\n      \"cloudRequirements\",\n      \"cloudManagedConfig\",\n      \"legacyManagedConfigFile\",\n      \"legacyManagedConfigMdm\",\n      \"unknown\",\n    ]).annotate({ default: \"unknown\" }),\n  ),\n  sourcePath: V2HookStartedNotification__AbsolutePathBuf,\n  startedAt: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  status: V2HookStartedNotification__HookRunStatus,\n  statusMessage: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ItemCompletedNotification__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ItemCompletedNotification__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ItemCompletedNotification__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ItemCompletedNotification__MemoryCitation | null;\n      readonly phase?: V2ItemCompletedNotification__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ItemCompletedNotification__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ItemCompletedNotification__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ItemCompletedNotification__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ItemCompletedNotification__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ItemCompletedNotification__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ItemCompletedNotification__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ItemCompletedNotification__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ItemCompletedNotification__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ItemCompletedNotification__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: {\n        readonly [x: string]: V2ItemCompletedNotification__CollabAgentState;\n      };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ItemCompletedNotification__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ItemCompletedNotification__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ItemCompletedNotification__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ItemCompletedNotification__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ItemCompletedNotification__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ItemCompletedNotification__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ItemCompletedNotification__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ItemCompletedNotification__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ItemCompletedNotification__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ItemCompletedNotification__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ItemCompletedNotification__FileUpdateChange),\n      id: Schema.String,\n      status: V2ItemCompletedNotification__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ItemCompletedNotification__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ItemCompletedNotification__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ItemCompletedNotification__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2ItemCompletedNotification__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ItemCompletedNotification__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ItemCompletedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ItemCompletedNotification__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSandboxEntry = {\n  readonly access: V2ItemGuardianApprovalReviewCompletedNotification__FileSystemAccessMode;\n  readonly path: V2ItemGuardianApprovalReviewCompletedNotification__FileSystemPath;\n};\nexport const V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSandboxEntry =\n  Schema.Struct({\n    access: V2ItemGuardianApprovalReviewCompletedNotification__FileSystemAccessMode,\n    path: V2ItemGuardianApprovalReviewCompletedNotification__FileSystemPath,\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__FileSystemSandboxEntry = {\n  readonly access: V2ItemGuardianApprovalReviewStartedNotification__FileSystemAccessMode;\n  readonly path: V2ItemGuardianApprovalReviewStartedNotification__FileSystemPath;\n};\nexport const V2ItemGuardianApprovalReviewStartedNotification__FileSystemSandboxEntry =\n  Schema.Struct({\n    access: V2ItemGuardianApprovalReviewStartedNotification__FileSystemAccessMode,\n    path: V2ItemGuardianApprovalReviewStartedNotification__FileSystemPath,\n  });\n\nexport type V2ItemStartedNotification__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ItemStartedNotification__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ItemStartedNotification__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ItemStartedNotification__MemoryCitation | null;\n      readonly phase?: V2ItemStartedNotification__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ItemStartedNotification__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ItemStartedNotification__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ItemStartedNotification__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ItemStartedNotification__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ItemStartedNotification__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ItemStartedNotification__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ItemStartedNotification__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ItemStartedNotification__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ItemStartedNotification__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ItemStartedNotification__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ItemStartedNotification__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ItemStartedNotification__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ItemStartedNotification__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ItemStartedNotification__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ItemStartedNotification__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ItemStartedNotification__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ItemStartedNotification__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ItemStartedNotification__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ItemStartedNotification__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ItemStartedNotification__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ItemStartedNotification__FileUpdateChange),\n      id: Schema.String,\n      status: V2ItemStartedNotification__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ItemStartedNotification__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ItemStartedNotification__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ItemStartedNotification__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2ItemStartedNotification__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ItemStartedNotification__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ItemStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ItemStartedNotification__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ModelListResponse__Model = {\n  readonly additionalSpeedTiers?: ReadonlyArray<string>;\n  readonly availabilityNux?: V2ModelListResponse__ModelAvailabilityNux | null;\n  readonly defaultReasoningEffort: V2ModelListResponse__ReasoningEffort;\n  readonly defaultServiceTier?: string | null;\n  readonly description: string;\n  readonly displayName: string;\n  readonly hidden: boolean;\n  readonly id: string;\n  readonly inputModalities?: ReadonlyArray<V2ModelListResponse__InputModality>;\n  readonly isDefault: boolean;\n  readonly model: string;\n  readonly serviceTiers?: ReadonlyArray<V2ModelListResponse__ModelServiceTier>;\n  readonly supportedReasoningEfforts: ReadonlyArray<V2ModelListResponse__ReasoningEffortOption>;\n  readonly supportsPersonality?: boolean;\n  readonly upgrade?: string | null;\n  readonly upgradeInfo?: V2ModelListResponse__ModelUpgradeInfo | null;\n};\nexport const V2ModelListResponse__Model = Schema.Struct({\n  additionalSpeedTiers: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({\n      description: \"Deprecated: use `serviceTiers` instead.\",\n      default: [],\n    }),\n  ),\n  availabilityNux: Schema.optionalKey(\n    Schema.Union([V2ModelListResponse__ModelAvailabilityNux, Schema.Null]),\n  ),\n  defaultReasoningEffort: V2ModelListResponse__ReasoningEffort,\n  defaultServiceTier: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Catalog default service tier id for this model, when one is configured.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.String,\n  displayName: Schema.String,\n  hidden: Schema.Boolean,\n  id: Schema.String,\n  inputModalities: Schema.optionalKey(\n    Schema.Array(V2ModelListResponse__InputModality).annotate({ default: [\"text\", \"image\"] }),\n  ),\n  isDefault: Schema.Boolean,\n  model: Schema.String,\n  serviceTiers: Schema.optionalKey(\n    Schema.Array(V2ModelListResponse__ModelServiceTier).annotate({ default: [] }),\n  ),\n  supportedReasoningEfforts: Schema.Array(V2ModelListResponse__ReasoningEffortOption),\n  supportsPersonality: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n  upgrade: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  upgradeInfo: Schema.optionalKey(\n    Schema.Union([V2ModelListResponse__ModelUpgradeInfo, Schema.Null]),\n  ),\n});\n\nexport type V2PluginInstalledResponse__PluginShareContext = {\n  readonly creatorAccountUserId?: string | null;\n  readonly creatorName?: string | null;\n  readonly discoverability?: V2PluginInstalledResponse__PluginShareDiscoverability | null;\n  readonly remotePluginId: string;\n  readonly remoteVersion?: string | null;\n  readonly sharePrincipals?: ReadonlyArray<V2PluginInstalledResponse__PluginSharePrincipal> | null;\n  readonly shareUrl?: string | null;\n};\nexport const V2PluginInstalledResponse__PluginShareContext = Schema.Struct({\n  creatorAccountUserId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  creatorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  discoverability: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__PluginShareDiscoverability, Schema.Null]),\n  ),\n  remotePluginId: Schema.String,\n  remoteVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the remote shared plugin release when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sharePrincipals: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2PluginInstalledResponse__PluginSharePrincipal), Schema.Null]),\n  ),\n  shareUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginListResponse__PluginShareContext = {\n  readonly creatorAccountUserId?: string | null;\n  readonly creatorName?: string | null;\n  readonly discoverability?: V2PluginListResponse__PluginShareDiscoverability | null;\n  readonly remotePluginId: string;\n  readonly remoteVersion?: string | null;\n  readonly sharePrincipals?: ReadonlyArray<V2PluginListResponse__PluginSharePrincipal> | null;\n  readonly shareUrl?: string | null;\n};\nexport const V2PluginListResponse__PluginShareContext = Schema.Struct({\n  creatorAccountUserId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  creatorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  discoverability: Schema.optionalKey(\n    Schema.Union([V2PluginListResponse__PluginShareDiscoverability, Schema.Null]),\n  ),\n  remotePluginId: Schema.String,\n  remoteVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the remote shared plugin release when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sharePrincipals: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2PluginListResponse__PluginSharePrincipal), Schema.Null]),\n  ),\n  shareUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginReadResponse__SkillSummary = {\n  readonly description: string;\n  readonly enabled: boolean;\n  readonly interface?: V2PluginReadResponse__SkillInterface | null;\n  readonly name: string;\n  readonly path?: V2PluginReadResponse__AbsolutePathBuf | null;\n  readonly shortDescription?: string | null;\n};\nexport const V2PluginReadResponse__SkillSummary = Schema.Struct({\n  description: Schema.String,\n  enabled: Schema.Boolean,\n  interface: Schema.optionalKey(Schema.Union([V2PluginReadResponse__SkillInterface, Schema.Null])),\n  name: Schema.String,\n  path: Schema.optionalKey(Schema.Union([V2PluginReadResponse__AbsolutePathBuf, Schema.Null])),\n  shortDescription: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginReadResponse__PluginShareContext = {\n  readonly creatorAccountUserId?: string | null;\n  readonly creatorName?: string | null;\n  readonly discoverability?: V2PluginReadResponse__PluginShareDiscoverability | null;\n  readonly remotePluginId: string;\n  readonly remoteVersion?: string | null;\n  readonly sharePrincipals?: ReadonlyArray<V2PluginReadResponse__PluginSharePrincipal> | null;\n  readonly shareUrl?: string | null;\n};\nexport const V2PluginReadResponse__PluginShareContext = Schema.Struct({\n  creatorAccountUserId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  creatorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  discoverability: Schema.optionalKey(\n    Schema.Union([V2PluginReadResponse__PluginShareDiscoverability, Schema.Null]),\n  ),\n  remotePluginId: Schema.String,\n  remoteVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the remote shared plugin release when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sharePrincipals: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2PluginReadResponse__PluginSharePrincipal), Schema.Null]),\n  ),\n  shareUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2PluginShareListResponse__PluginShareContext = {\n  readonly creatorAccountUserId?: string | null;\n  readonly creatorName?: string | null;\n  readonly discoverability?: V2PluginShareListResponse__PluginShareDiscoverability | null;\n  readonly remotePluginId: string;\n  readonly remoteVersion?: string | null;\n  readonly sharePrincipals?: ReadonlyArray<V2PluginShareListResponse__PluginSharePrincipal> | null;\n  readonly shareUrl?: string | null;\n};\nexport const V2PluginShareListResponse__PluginShareContext = Schema.Struct({\n  creatorAccountUserId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  creatorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  discoverability: Schema.optionalKey(\n    Schema.Union([V2PluginShareListResponse__PluginShareDiscoverability, Schema.Null]),\n  ),\n  remotePluginId: Schema.String,\n  remoteVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the remote shared plugin release when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sharePrincipals: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2PluginShareListResponse__PluginSharePrincipal), Schema.Null]),\n  ),\n  shareUrl: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2RawResponseItemCompletedNotification__FunctionCallOutputBody =\n  | string\n  | ReadonlyArray<V2RawResponseItemCompletedNotification__FunctionCallOutputContentItem>;\nexport const V2RawResponseItemCompletedNotification__FunctionCallOutputBody = Schema.Union([\n  Schema.String,\n  Schema.Array(V2RawResponseItemCompletedNotification__FunctionCallOutputContentItem),\n]);\n\nexport type V2ReviewStartResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ReviewStartResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ReviewStartResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ReviewStartResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ReviewStartResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ReviewStartResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ReviewStartResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ReviewStartResponse__MemoryCitation | null;\n      readonly phase?: V2ReviewStartResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ReviewStartResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ReviewStartResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ReviewStartResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ReviewStartResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ReviewStartResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ReviewStartResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ReviewStartResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ReviewStartResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ReviewStartResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ReviewStartResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ReviewStartResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ReviewStartResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ReviewStartResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ReviewStartResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ReviewStartResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ReviewStartResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ReviewStartResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ReviewStartResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ReviewStartResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ReviewStartResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ReviewStartResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ReviewStartResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ReviewStartResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ReviewStartResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ReviewStartResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ReviewStartResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ReviewStartResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ReviewStartResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ReviewStartResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2ReviewStartResponse__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ReviewStartResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ReviewStartResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ReviewStartResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ReviewStartResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ReviewStartResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2SkillsListResponse__SkillMetadata = {\n  readonly dependencies?: V2SkillsListResponse__SkillDependencies | null;\n  readonly description: string;\n  readonly enabled: boolean;\n  readonly interface?: V2SkillsListResponse__SkillInterface | null;\n  readonly name: string;\n  readonly path: V2SkillsListResponse__AbsolutePathBuf;\n  readonly scope: V2SkillsListResponse__SkillScope;\n  readonly shortDescription?: string | null;\n};\nexport const V2SkillsListResponse__SkillMetadata = Schema.Struct({\n  dependencies: Schema.optionalKey(\n    Schema.Union([V2SkillsListResponse__SkillDependencies, Schema.Null]),\n  ),\n  description: Schema.String,\n  enabled: Schema.Boolean,\n  interface: Schema.optionalKey(Schema.Union([V2SkillsListResponse__SkillInterface, Schema.Null])),\n  name: Schema.String,\n  path: V2SkillsListResponse__AbsolutePathBuf,\n  scope: V2SkillsListResponse__SkillScope,\n  shortDescription: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Legacy short_description from SKILL.md. Prefer SKILL.json interface.short_description.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ThreadForkResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadForkResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadForkResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadForkResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadForkResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadForkResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadForkResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadForkResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadForkResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadForkResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadForkResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadForkResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadForkResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadForkResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadForkResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadForkResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadForkResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadForkResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadForkResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadForkResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadForkResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadForkResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadForkResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadForkResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadForkResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadForkResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadForkResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadForkResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ThreadForkResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadForkResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadForkResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadForkResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadForkResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadForkResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadForkResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadForkResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadForkResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadForkResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2ThreadForkResponse__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadForkResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadForkResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadForkResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadForkResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadForkResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadListResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadListResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadListResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadListResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadListResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadListResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadListResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadListResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadListResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadListResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadListResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadListResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadListResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadListResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadListResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadListResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadListResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadListResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadListResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadListResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadListResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadListResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadListResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadListResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadListResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadListResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadListResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ThreadListResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadListResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadListResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadListResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadListResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadListResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadListResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadListResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadListResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadListResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2ThreadListResponse__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadListResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadListResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadListResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadListResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadListResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadMetadataUpdateResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadMetadataUpdateResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadMetadataUpdateResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadMetadataUpdateResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadMetadataUpdateResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadMetadataUpdateResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadMetadataUpdateResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadMetadataUpdateResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadMetadataUpdateResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadMetadataUpdateResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadMetadataUpdateResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadMetadataUpdateResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadMetadataUpdateResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadMetadataUpdateResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadMetadataUpdateResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadMetadataUpdateResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadMetadataUpdateResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: {\n        readonly [x: string]: V2ThreadMetadataUpdateResponse__CollabAgentState;\n      };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadMetadataUpdateResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadMetadataUpdateResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadMetadataUpdateResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadMetadataUpdateResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadMetadataUpdateResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadMetadataUpdateResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadMetadataUpdateResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadMetadataUpdateResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadMetadataUpdateResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadMetadataUpdateResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadMetadataUpdateResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadMetadataUpdateResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadMetadataUpdateResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadMetadataUpdateResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadMetadataUpdateResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2ThreadMetadataUpdateResponse__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadMetadataUpdateResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadMetadataUpdateResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadMetadataUpdateResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadReadResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadReadResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadReadResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadReadResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadReadResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadReadResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadReadResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadReadResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadReadResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadReadResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadReadResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadReadResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadReadResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadReadResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadReadResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadReadResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadReadResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadReadResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadReadResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadReadResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadReadResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadReadResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadReadResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadReadResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadReadResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadReadResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadReadResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ThreadReadResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadReadResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadReadResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadReadResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadReadResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadReadResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadReadResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadReadResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadReadResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadReadResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2ThreadReadResponse__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadReadResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadReadResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadReadResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadReadResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadReadResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__FunctionCallOutputBody =\n  | string\n  | ReadonlyArray<V2ThreadResumeParams__FunctionCallOutputContentItem>;\nexport const V2ThreadResumeParams__FunctionCallOutputBody = Schema.Union([\n  Schema.String,\n  Schema.Array(V2ThreadResumeParams__FunctionCallOutputContentItem),\n]);\n\nexport type V2ThreadResumeResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadResumeResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadResumeResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadResumeResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadResumeResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadResumeResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadResumeResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadResumeResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadResumeResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadResumeResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadResumeResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadResumeResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadResumeResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadResumeResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadResumeResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadResumeResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadResumeResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadResumeResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadResumeResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadResumeResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadResumeResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadResumeResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadResumeResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadResumeResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadResumeResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadResumeResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ThreadResumeResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadResumeResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadResumeResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadResumeResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadResumeResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadResumeResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadResumeResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadResumeResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2ThreadResumeResponse__CollabAgentState).annotate(\n        { description: \"Last known status of the target agents, when available.\" },\n      ),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadResumeResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadResumeResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadRollbackResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadRollbackResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadRollbackResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadRollbackResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadRollbackResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadRollbackResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadRollbackResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadRollbackResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadRollbackResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadRollbackResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadRollbackResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadRollbackResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadRollbackResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadRollbackResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadRollbackResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadRollbackResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadRollbackResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadRollbackResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadRollbackResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadRollbackResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadRollbackResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadRollbackResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadRollbackResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadRollbackResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadRollbackResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadRollbackResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadRollbackResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadRollbackResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadRollbackResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadRollbackResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadRollbackResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadRollbackResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadRollbackResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2ThreadRollbackResponse__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadRollbackResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadRollbackResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadRollbackResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadSettingsUpdatedNotification__CollaborationMode = {\n  readonly mode: V2ThreadSettingsUpdatedNotification__ModeKind;\n  readonly settings: V2ThreadSettingsUpdatedNotification__Settings;\n};\nexport const V2ThreadSettingsUpdatedNotification__CollaborationMode = Schema.Struct({\n  mode: V2ThreadSettingsUpdatedNotification__ModeKind,\n  settings: V2ThreadSettingsUpdatedNotification__Settings,\n}).annotate({ description: \"Collaboration mode for a Codex session.\" });\n\nexport type V2ThreadStartedNotification__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadStartedNotification__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadStartedNotification__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadStartedNotification__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadStartedNotification__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadStartedNotification__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadStartedNotification__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadStartedNotification__MemoryCitation | null;\n      readonly phase?: V2ThreadStartedNotification__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadStartedNotification__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadStartedNotification__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadStartedNotification__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadStartedNotification__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadStartedNotification__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadStartedNotification__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadStartedNotification__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadStartedNotification__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadStartedNotification__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: {\n        readonly [x: string]: V2ThreadStartedNotification__CollabAgentState;\n      };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadStartedNotification__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadStartedNotification__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadStartedNotification__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadStartedNotification__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadStartedNotification__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadStartedNotification__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadStartedNotification__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadStartedNotification__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadStartedNotification__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadStartedNotification__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadStartedNotification__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadStartedNotification__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadStartedNotification__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadStartedNotification__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadStartedNotification__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2ThreadStartedNotification__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadStartedNotification__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadStartedNotification__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadStartResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadStartResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadStartResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadStartResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadStartResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadStartResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadStartResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadStartResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadStartResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadStartResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadStartResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadStartResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadStartResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadStartResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadStartResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadStartResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadStartResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadStartResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadStartResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadStartResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadStartResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadStartResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadStartResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadStartResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadStartResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadStartResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadStartResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ThreadStartResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadStartResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadStartResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadStartResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadStartResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadStartResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadStartResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadStartResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadStartResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadStartResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2ThreadStartResponse__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadStartResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadStartResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadStartResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadStartResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadStartResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2ThreadUnarchiveResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2ThreadUnarchiveResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadUnarchiveResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2ThreadUnarchiveResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2ThreadUnarchiveResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2ThreadUnarchiveResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2ThreadUnarchiveResponse__MemoryCitation | null;\n      readonly phase?: V2ThreadUnarchiveResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2ThreadUnarchiveResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2ThreadUnarchiveResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2ThreadUnarchiveResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2ThreadUnarchiveResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2ThreadUnarchiveResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2ThreadUnarchiveResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2ThreadUnarchiveResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2ThreadUnarchiveResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2ThreadUnarchiveResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2ThreadUnarchiveResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2ThreadUnarchiveResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2ThreadUnarchiveResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2ThreadUnarchiveResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2ThreadUnarchiveResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2ThreadUnarchiveResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2ThreadUnarchiveResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2ThreadUnarchiveResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2ThreadUnarchiveResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2ThreadUnarchiveResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2ThreadUnarchiveResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2ThreadUnarchiveResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2ThreadUnarchiveResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2ThreadUnarchiveResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2ThreadUnarchiveResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2ThreadUnarchiveResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2ThreadUnarchiveResponse__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2ThreadUnarchiveResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2ThreadUnarchiveResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2ThreadUnarchiveResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnCompletedNotification__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2TurnCompletedNotification__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2TurnCompletedNotification__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2TurnCompletedNotification__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2TurnCompletedNotification__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2TurnCompletedNotification__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2TurnCompletedNotification__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2TurnCompletedNotification__MemoryCitation | null;\n      readonly phase?: V2TurnCompletedNotification__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2TurnCompletedNotification__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2TurnCompletedNotification__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2TurnCompletedNotification__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2TurnCompletedNotification__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2TurnCompletedNotification__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2TurnCompletedNotification__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2TurnCompletedNotification__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2TurnCompletedNotification__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2TurnCompletedNotification__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: {\n        readonly [x: string]: V2TurnCompletedNotification__CollabAgentState;\n      };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2TurnCompletedNotification__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2TurnCompletedNotification__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2TurnCompletedNotification__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2TurnCompletedNotification__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2TurnCompletedNotification__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2TurnCompletedNotification__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2TurnCompletedNotification__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2TurnCompletedNotification__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2TurnCompletedNotification__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2TurnCompletedNotification__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2TurnCompletedNotification__FileUpdateChange),\n      id: Schema.String,\n      status: V2TurnCompletedNotification__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2TurnCompletedNotification__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2TurnCompletedNotification__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2TurnCompletedNotification__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2TurnCompletedNotification__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2TurnCompletedNotification__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2TurnCompletedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2TurnCompletedNotification__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartedNotification__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2TurnStartedNotification__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2TurnStartedNotification__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2TurnStartedNotification__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2TurnStartedNotification__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2TurnStartedNotification__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2TurnStartedNotification__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2TurnStartedNotification__MemoryCitation | null;\n      readonly phase?: V2TurnStartedNotification__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2TurnStartedNotification__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2TurnStartedNotification__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2TurnStartedNotification__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2TurnStartedNotification__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2TurnStartedNotification__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2TurnStartedNotification__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2TurnStartedNotification__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2TurnStartedNotification__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2TurnStartedNotification__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2TurnStartedNotification__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2TurnStartedNotification__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2TurnStartedNotification__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2TurnStartedNotification__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2TurnStartedNotification__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2TurnStartedNotification__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2TurnStartedNotification__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2TurnStartedNotification__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2TurnStartedNotification__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__MessagePhase, Schema.Null]),\n      ),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2TurnStartedNotification__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2TurnStartedNotification__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2TurnStartedNotification__FileUpdateChange),\n      id: Schema.String,\n      status: V2TurnStartedNotification__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__McpToolCallError, Schema.Null]),\n      ),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2TurnStartedNotification__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2TurnStartedNotification__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2TurnStartedNotification__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(\n        Schema.String,\n        V2TurnStartedNotification__CollabAgentState,\n      ).annotate({ description: \"Last known status of the target agents, when available.\" }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2TurnStartedNotification__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__WebSearchAction, Schema.Null]),\n      ),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2TurnStartedNotification__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2TurnStartedNotification__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2TurnStartResponse__TurnError = {\n  readonly additionalDetails?: string | null;\n  readonly codexErrorInfo?: V2TurnStartResponse__CodexErrorInfo | null;\n  readonly message: string;\n};\nexport const V2TurnStartResponse__TurnError = Schema.Struct({\n  additionalDetails: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  codexErrorInfo: Schema.optionalKey(\n    Schema.Union([V2TurnStartResponse__CodexErrorInfo, Schema.Null]),\n  ),\n  message: Schema.String,\n});\n\nexport type V2TurnStartResponse__ThreadItem =\n  | {\n      readonly clientId?: string | null;\n      readonly content: ReadonlyArray<V2TurnStartResponse__UserInput>;\n      readonly id: string;\n      readonly type: \"userMessage\";\n    }\n  | {\n      readonly fragments: ReadonlyArray<V2TurnStartResponse__HookPromptFragment>;\n      readonly id: string;\n      readonly type: \"hookPrompt\";\n    }\n  | {\n      readonly id: string;\n      readonly memoryCitation?: V2TurnStartResponse__MemoryCitation | null;\n      readonly phase?: V2TurnStartResponse__MessagePhase | null;\n      readonly text: string;\n      readonly type: \"agentMessage\";\n    }\n  | { readonly id: string; readonly text: string; readonly type: \"plan\" }\n  | {\n      readonly content?: ReadonlyArray<string>;\n      readonly id: string;\n      readonly summary?: ReadonlyArray<string>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly aggregatedOutput?: string | null;\n      readonly command: string;\n      readonly commandActions: ReadonlyArray<V2TurnStartResponse__CommandAction>;\n      readonly cwd: string;\n      readonly durationMs?: number | null;\n      readonly exitCode?: number | null;\n      readonly id: string;\n      readonly processId?: string | null;\n      readonly source?: \"agent\" | \"userShell\" | \"unifiedExecStartup\" | \"unifiedExecInteraction\";\n      readonly status: V2TurnStartResponse__CommandExecutionStatus;\n      readonly type: \"commandExecution\";\n    }\n  | {\n      readonly changes: ReadonlyArray<V2TurnStartResponse__FileUpdateChange>;\n      readonly id: string;\n      readonly status: V2TurnStartResponse__PatchApplyStatus;\n      readonly type: \"fileChange\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly durationMs?: number | null;\n      readonly error?: V2TurnStartResponse__McpToolCallError | null;\n      readonly id: string;\n      readonly mcpAppResourceUri?: string | null;\n      readonly pluginId?: string | null;\n      readonly result?: V2TurnStartResponse__McpToolCallResult | null;\n      readonly server: string;\n      readonly status: V2TurnStartResponse__McpToolCallStatus;\n      readonly tool: string;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly contentItems?: ReadonlyArray<V2TurnStartResponse__DynamicToolCallOutputContentItem> | null;\n      readonly durationMs?: number | null;\n      readonly id: string;\n      readonly namespace?: string | null;\n      readonly status: V2TurnStartResponse__DynamicToolCallStatus;\n      readonly success?: boolean | null;\n      readonly tool: string;\n      readonly type: \"dynamicToolCall\";\n    }\n  | {\n      readonly agentsStates: { readonly [x: string]: V2TurnStartResponse__CollabAgentState };\n      readonly id: string;\n      readonly model?: string | null;\n      readonly prompt?: string | null;\n      readonly reasoningEffort?: V2TurnStartResponse__ReasoningEffort | null;\n      readonly receiverThreadIds: ReadonlyArray<string>;\n      readonly senderThreadId: string;\n      readonly status: \"inProgress\" | \"completed\" | \"failed\";\n      readonly tool: \"spawnAgent\" | \"sendInput\" | \"resumeAgent\" | \"wait\" | \"closeAgent\";\n      readonly type: \"collabAgentToolCall\";\n    }\n  | {\n      readonly agentPath: string;\n      readonly agentThreadId: string;\n      readonly id: string;\n      readonly kind: V2TurnStartResponse__SubAgentActivityKind;\n      readonly type: \"subAgentActivity\";\n    }\n  | {\n      readonly action?: V2TurnStartResponse__WebSearchAction | null;\n      readonly id: string;\n      readonly query: string;\n      readonly type: \"webSearch\";\n    }\n  | {\n      readonly id: string;\n      readonly path: V2TurnStartResponse__AbsolutePathBuf;\n      readonly type: \"imageView\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revisedPrompt?: string | null;\n      readonly savedPath?: V2TurnStartResponse__AbsolutePathBuf | null;\n      readonly status: string;\n      readonly type: \"imageGeneration\";\n    }\n  | { readonly id: string; readonly review: string; readonly type: \"enteredReviewMode\" }\n  | { readonly id: string; readonly review: string; readonly type: \"exitedReviewMode\" }\n  | { readonly id: string; readonly type: \"contextCompaction\" };\nexport const V2TurnStartResponse__ThreadItem = Schema.Union(\n  [\n    Schema.Struct({\n      clientId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      content: Schema.Array(V2TurnStartResponse__UserInput),\n      id: Schema.String,\n      type: Schema.Literal(\"userMessage\").annotate({ title: \"UserMessageThreadItemType\" }),\n    }).annotate({ title: \"UserMessageThreadItem\" }),\n    Schema.Struct({\n      fragments: Schema.Array(V2TurnStartResponse__HookPromptFragment),\n      id: Schema.String,\n      type: Schema.Literal(\"hookPrompt\").annotate({ title: \"HookPromptThreadItemType\" }),\n    }).annotate({ title: \"HookPromptThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      memoryCitation: Schema.optionalKey(\n        Schema.Union([V2TurnStartResponse__MemoryCitation, Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2TurnStartResponse__MessagePhase, Schema.Null])),\n      text: Schema.String,\n      type: Schema.Literal(\"agentMessage\").annotate({ title: \"AgentMessageThreadItemType\" }),\n    }).annotate({ title: \"AgentMessageThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      text: Schema.String,\n      type: Schema.Literal(\"plan\").annotate({ title: \"PlanThreadItemType\" }),\n    }).annotate({\n      title: \"PlanThreadItem\",\n      description:\n        \"EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.\",\n    }),\n    Schema.Struct({\n      content: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      id: Schema.String,\n      summary: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningThreadItemType\" }),\n    }).annotate({ title: \"ReasoningThreadItem\" }),\n    Schema.Struct({\n      aggregatedOutput: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"The command's output, aggregated from stdout and stderr.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      command: Schema.String.annotate({ description: \"The command to be executed.\" }),\n      commandActions: Schema.Array(V2TurnStartResponse__CommandAction).annotate({\n        description:\n          \"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.\",\n      }),\n      cwd: Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the command execution in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      exitCode: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The command's exit code.\",\n            format: \"int32\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      processId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Identifier for the underlying PTY process (when available).\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      source: Schema.optionalKey(\n        Schema.Literals([\n          \"agent\",\n          \"userShell\",\n          \"unifiedExecStartup\",\n          \"unifiedExecInteraction\",\n        ]).annotate({ default: \"agent\" }),\n      ),\n      status: V2TurnStartResponse__CommandExecutionStatus,\n      type: Schema.Literal(\"commandExecution\").annotate({\n        title: \"CommandExecutionThreadItemType\",\n      }),\n    }).annotate({ title: \"CommandExecutionThreadItem\" }),\n    Schema.Struct({\n      changes: Schema.Array(V2TurnStartResponse__FileUpdateChange),\n      id: Schema.String,\n      status: V2TurnStartResponse__PatchApplyStatus,\n      type: Schema.Literal(\"fileChange\").annotate({ title: \"FileChangeThreadItemType\" }),\n    }).annotate({ title: \"FileChangeThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the MCP tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      error: Schema.optionalKey(Schema.Union([V2TurnStartResponse__McpToolCallError, Schema.Null])),\n      id: Schema.String,\n      mcpAppResourceUri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      pluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      result: Schema.optionalKey(\n        Schema.Union([V2TurnStartResponse__McpToolCallResult, Schema.Null]),\n      ),\n      server: Schema.String,\n      status: V2TurnStartResponse__McpToolCallStatus,\n      tool: Schema.String,\n      type: Schema.Literal(\"mcpToolCall\").annotate({ title: \"McpToolCallThreadItemType\" }),\n    }).annotate({ title: \"McpToolCallThreadItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      contentItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2TurnStartResponse__DynamicToolCallOutputContentItem),\n          Schema.Null,\n        ]),\n      ),\n      durationMs: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"The duration of the dynamic tool call in milliseconds.\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: V2TurnStartResponse__DynamicToolCallStatus,\n      success: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n      tool: Schema.String,\n      type: Schema.Literal(\"dynamicToolCall\").annotate({ title: \"DynamicToolCallThreadItemType\" }),\n    }).annotate({ title: \"DynamicToolCallThreadItem\" }),\n    Schema.Struct({\n      agentsStates: Schema.Record(Schema.String, V2TurnStartResponse__CollabAgentState).annotate({\n        description: \"Last known status of the target agents, when available.\",\n      }),\n      id: Schema.String.annotate({ description: \"Unique identifier for this collab tool call.\" }),\n      model: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Model requested for the spawned agent, when applicable.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      prompt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Prompt text sent as part of the collab tool call, when available.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      reasoningEffort: Schema.optionalKey(\n        Schema.Union([V2TurnStartResponse__ReasoningEffort, Schema.Null]).annotate({\n          description: \"Reasoning effort requested for the spawned agent, when applicable.\",\n        }),\n      ),\n      receiverThreadIds: Schema.Array(Schema.String).annotate({\n        description:\n          \"Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.\",\n      }),\n      senderThreadId: Schema.String.annotate({\n        description: \"Thread ID of the agent issuing the collab request.\",\n      }),\n      status: Schema.Literals([\"inProgress\", \"completed\", \"failed\"]).annotate({\n        description: \"Current status of the collab tool call.\",\n      }),\n      tool: Schema.Literals([\n        \"spawnAgent\",\n        \"sendInput\",\n        \"resumeAgent\",\n        \"wait\",\n        \"closeAgent\",\n      ]).annotate({ description: \"Name of the collab tool that was invoked.\" }),\n      type: Schema.Literal(\"collabAgentToolCall\").annotate({\n        title: \"CollabAgentToolCallThreadItemType\",\n      }),\n    }).annotate({ title: \"CollabAgentToolCallThreadItem\" }),\n    Schema.Struct({\n      agentPath: Schema.String,\n      agentThreadId: Schema.String,\n      id: Schema.String,\n      kind: V2TurnStartResponse__SubAgentActivityKind,\n      type: Schema.Literal(\"subAgentActivity\").annotate({\n        title: \"SubAgentActivityThreadItemType\",\n      }),\n    }).annotate({ title: \"SubAgentActivityThreadItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(Schema.Union([V2TurnStartResponse__WebSearchAction, Schema.Null])),\n      id: Schema.String,\n      query: Schema.String,\n      type: Schema.Literal(\"webSearch\").annotate({ title: \"WebSearchThreadItemType\" }),\n    }).annotate({ title: \"WebSearchThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      path: V2TurnStartResponse__AbsolutePathBuf,\n      type: Schema.Literal(\"imageView\").annotate({ title: \"ImageViewThreadItemType\" }),\n    }).annotate({ title: \"ImageViewThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revisedPrompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      savedPath: Schema.optionalKey(\n        Schema.Union([V2TurnStartResponse__AbsolutePathBuf, Schema.Null]),\n      ),\n      status: Schema.String,\n      type: Schema.Literal(\"imageGeneration\").annotate({ title: \"ImageGenerationThreadItemType\" }),\n    }).annotate({ title: \"ImageGenerationThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"enteredReviewMode\").annotate({\n        title: \"EnteredReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"EnteredReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      review: Schema.String,\n      type: Schema.Literal(\"exitedReviewMode\").annotate({\n        title: \"ExitedReviewModeThreadItemType\",\n      }),\n    }).annotate({ title: \"ExitedReviewModeThreadItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      type: Schema.Literal(\"contextCompaction\").annotate({\n        title: \"ContextCompactionThreadItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionThreadItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__ExternalAgentConfigImportParams = {\n  readonly migrationItems: ReadonlyArray<ClientRequest__ExternalAgentConfigMigrationItem>;\n};\nexport const ClientRequest__ExternalAgentConfigImportParams = Schema.Struct({\n  migrationItems: Schema.Array(ClientRequest__ExternalAgentConfigMigrationItem),\n});\n\nexport type CommandExecutionRequestApprovalParams__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<CommandExecutionRequestApprovalParams__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<CommandExecutionRequestApprovalParams__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<CommandExecutionRequestApprovalParams__AbsolutePathBuf> | null;\n};\nexport const CommandExecutionRequestApprovalParams__AdditionalFileSystemPermissions = Schema.Struct(\n  {\n    entries: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(CommandExecutionRequestApprovalParams__FileSystemSandboxEntry),\n        Schema.Null,\n      ]),\n    ),\n    globScanMaxDepth: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(1)),\n        Schema.Null,\n      ]),\n    ),\n    read: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(CommandExecutionRequestApprovalParams__AbsolutePathBuf).annotate({\n          description: \"This will be removed in favor of `entries`.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    write: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(CommandExecutionRequestApprovalParams__AbsolutePathBuf).annotate({\n          description: \"This will be removed in favor of `entries`.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n  },\n);\n\nexport type McpServerElicitationRequestParams__McpElicitationMultiSelectEnumSchema =\n  | McpServerElicitationRequestParams__McpElicitationUntitledMultiSelectEnumSchema\n  | McpServerElicitationRequestParams__McpElicitationTitledMultiSelectEnumSchema;\nexport const McpServerElicitationRequestParams__McpElicitationMultiSelectEnumSchema = Schema.Union([\n  McpServerElicitationRequestParams__McpElicitationUntitledMultiSelectEnumSchema,\n  McpServerElicitationRequestParams__McpElicitationTitledMultiSelectEnumSchema,\n]);\n\nexport type PermissionsRequestApprovalParams__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<PermissionsRequestApprovalParams__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<PermissionsRequestApprovalParams__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<PermissionsRequestApprovalParams__AbsolutePathBuf> | null;\n};\nexport const PermissionsRequestApprovalParams__AdditionalFileSystemPermissions = Schema.Struct({\n  entries: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(PermissionsRequestApprovalParams__FileSystemSandboxEntry),\n      Schema.Null,\n    ]),\n  ),\n  globScanMaxDepth: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(1)),\n      Schema.Null,\n    ]),\n  ),\n  read: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(PermissionsRequestApprovalParams__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  write: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(PermissionsRequestApprovalParams__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type PermissionsRequestApprovalResponse__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<PermissionsRequestApprovalResponse__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<PermissionsRequestApprovalResponse__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<PermissionsRequestApprovalResponse__AbsolutePathBuf> | null;\n};\nexport const PermissionsRequestApprovalResponse__AdditionalFileSystemPermissions = Schema.Struct({\n  entries: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(PermissionsRequestApprovalResponse__FileSystemSandboxEntry),\n      Schema.Null,\n    ]),\n  ),\n  globScanMaxDepth: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(1)),\n      Schema.Null,\n    ]),\n  ),\n  read: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(PermissionsRequestApprovalResponse__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  write: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(PermissionsRequestApprovalResponse__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ServerNotification__AppListUpdatedNotification = {\n  readonly data: ReadonlyArray<ServerNotification__AppInfo>;\n};\nexport const ServerNotification__AppListUpdatedNotification = Schema.Struct({\n  data: Schema.Array(ServerNotification__AppInfo),\n}).annotate({ description: \"EXPERIMENTAL - notification emitted when the app list changes.\" });\n\nexport type ServerNotification__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<ServerNotification__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<ServerNotification__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<ServerNotification__AbsolutePathBuf> | null;\n};\nexport const ServerNotification__AdditionalFileSystemPermissions = Schema.Struct({\n  entries: Schema.optionalKey(\n    Schema.Union([Schema.Array(ServerNotification__FileSystemSandboxEntry), Schema.Null]),\n  ),\n  globScanMaxDepth: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(1)),\n      Schema.Null,\n    ]),\n  ),\n  read: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ServerNotification__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  write: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ServerNotification__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ServerNotification__HookCompletedNotification = {\n  readonly run: ServerNotification__HookRunSummary;\n  readonly threadId: string;\n  readonly turnId?: string | null;\n};\nexport const ServerNotification__HookCompletedNotification = Schema.Struct({\n  run: ServerNotification__HookRunSummary,\n  threadId: Schema.String,\n  turnId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__HookStartedNotification = {\n  readonly run: ServerNotification__HookRunSummary;\n  readonly threadId: string;\n  readonly turnId?: string | null;\n};\nexport const ServerNotification__HookStartedNotification = Schema.Struct({\n  run: ServerNotification__HookRunSummary,\n  threadId: Schema.String,\n  turnId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ServerNotification__ErrorNotification = {\n  readonly error: ServerNotification__TurnError;\n  readonly threadId: string;\n  readonly turnId: string;\n  readonly willRetry: boolean;\n};\nexport const ServerNotification__ErrorNotification = Schema.Struct({\n  error: ServerNotification__TurnError,\n  threadId: Schema.String,\n  turnId: Schema.String,\n  willRetry: Schema.Boolean,\n});\n\nexport type ServerNotification__ThreadSettings = {\n  readonly activePermissionProfile?: ServerNotification__ActivePermissionProfile | null;\n  readonly approvalPolicy: ServerNotification__AskForApproval;\n  readonly approvalsReviewer: ServerNotification__ApprovalsReviewer;\n  readonly collaborationMode: ServerNotification__CollaborationMode;\n  readonly cwd: ServerNotification__AbsolutePathBuf;\n  readonly effort?: ServerNotification__ReasoningEffort | null;\n  readonly model: string;\n  readonly modelProvider: string;\n  readonly personality?: ServerNotification__Personality | null;\n  readonly sandboxPolicy: ServerNotification__SandboxPolicy;\n  readonly serviceTier?: string | null;\n  readonly summary?: ServerNotification__ReasoningSummary | null;\n};\nexport const ServerNotification__ThreadSettings = Schema.Struct({\n  activePermissionProfile: Schema.optionalKey(\n    Schema.Union([ServerNotification__ActivePermissionProfile, Schema.Null]),\n  ),\n  approvalPolicy: ServerNotification__AskForApproval,\n  approvalsReviewer: ServerNotification__ApprovalsReviewer,\n  collaborationMode: ServerNotification__CollaborationMode,\n  cwd: ServerNotification__AbsolutePathBuf,\n  effort: Schema.optionalKey(Schema.Union([ServerNotification__ReasoningEffort, Schema.Null])),\n  model: Schema.String,\n  modelProvider: Schema.String,\n  personality: Schema.optionalKey(Schema.Union([ServerNotification__Personality, Schema.Null])),\n  sandboxPolicy: ServerNotification__SandboxPolicy,\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  summary: Schema.optionalKey(Schema.Union([ServerNotification__ReasoningSummary, Schema.Null])),\n});\n\nexport type ServerNotification__ItemCompletedNotification = {\n  readonly completedAtMs: number;\n  readonly item: ServerNotification__ThreadItem;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ItemCompletedNotification = Schema.Struct({\n  completedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this item lifecycle completed.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  item: ServerNotification__ThreadItem,\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__ItemStartedNotification = {\n  readonly item: ServerNotification__ThreadItem;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ItemStartedNotification = Schema.Struct({\n  item: ServerNotification__ThreadItem,\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this item lifecycle started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerNotification__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: ServerNotification__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<ServerNotification__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: ServerNotification__TurnStatus;\n};\nexport const ServerNotification__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([ServerNotification__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(ServerNotification__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: ServerNotification__TurnStatus,\n});\n\nexport type ServerRequest__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<ServerRequest__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<ServerRequest__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<ServerRequest__AbsolutePathBuf> | null;\n};\nexport const ServerRequest__AdditionalFileSystemPermissions = Schema.Struct({\n  entries: Schema.optionalKey(\n    Schema.Union([Schema.Array(ServerRequest__FileSystemSandboxEntry), Schema.Null]),\n  ),\n  globScanMaxDepth: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(1)),\n      Schema.Null,\n    ]),\n  ),\n  read: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ServerRequest__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  write: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ServerRequest__AbsolutePathBuf).annotate({\n        description: \"This will be removed in favor of `entries`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ServerRequest__McpElicitationMultiSelectEnumSchema =\n  | ServerRequest__McpElicitationUntitledMultiSelectEnumSchema\n  | ServerRequest__McpElicitationTitledMultiSelectEnumSchema;\nexport const ServerRequest__McpElicitationMultiSelectEnumSchema = Schema.Union([\n  ServerRequest__McpElicitationUntitledMultiSelectEnumSchema,\n  ServerRequest__McpElicitationTitledMultiSelectEnumSchema,\n]);\n\nexport type V2ConfigReadResponse__Config = {\n  readonly analytics?: V2ConfigReadResponse__AnalyticsConfig | null;\n  readonly approval_policy?: V2ConfigReadResponse__AskForApproval | null;\n  readonly approvals_reviewer?: V2ConfigReadResponse__ApprovalsReviewer | null;\n  readonly compact_prompt?: string | null;\n  readonly desktop?: { readonly [x: string]: unknown } | null;\n  readonly developer_instructions?: string | null;\n  readonly forced_chatgpt_workspace_id?: V2ConfigReadResponse__ForcedChatgptWorkspaceIds | null;\n  readonly forced_login_method?: V2ConfigReadResponse__ForcedLoginMethod | null;\n  readonly instructions?: string | null;\n  readonly model?: string | null;\n  readonly model_auto_compact_token_limit?: number | null;\n  readonly model_auto_compact_token_limit_scope?: V2ConfigReadResponse__AutoCompactTokenLimitScope | null;\n  readonly model_context_window?: number | null;\n  readonly model_provider?: string | null;\n  readonly model_reasoning_effort?: V2ConfigReadResponse__ReasoningEffort | null;\n  readonly model_reasoning_summary?: V2ConfigReadResponse__ReasoningSummary | null;\n  readonly model_verbosity?: V2ConfigReadResponse__Verbosity | null;\n  readonly review_model?: string | null;\n  readonly sandbox_mode?: V2ConfigReadResponse__SandboxMode | null;\n  readonly sandbox_workspace_write?: V2ConfigReadResponse__SandboxWorkspaceWrite | null;\n  readonly service_tier?: string | null;\n  readonly tools?: V2ConfigReadResponse__ToolsV2 | null;\n  readonly web_search?: V2ConfigReadResponse__WebSearchMode | null;\n  readonly [x: string]: unknown;\n};\nexport const V2ConfigReadResponse__Config = Schema.StructWithRest(\n  Schema.Struct({\n    analytics: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__AnalyticsConfig, Schema.Null]),\n    ),\n    approval_policy: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__AskForApproval, Schema.Null]),\n    ),\n    approvals_reviewer: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__ApprovalsReviewer, Schema.Null]).annotate({\n        description:\n          \"[UNSTABLE] Optional default for where approval requests are routed for review.\",\n      }),\n    ),\n    compact_prompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    desktop: Schema.optionalKey(\n      Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n    ),\n    developer_instructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    forced_chatgpt_workspace_id: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__ForcedChatgptWorkspaceIds, Schema.Null]),\n    ),\n    forced_login_method: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__ForcedLoginMethod, Schema.Null]),\n    ),\n    instructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    model: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    model_auto_compact_token_limit: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n        Schema.Null,\n      ]),\n    ),\n    model_auto_compact_token_limit_scope: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__AutoCompactTokenLimitScope, Schema.Null]),\n    ),\n    model_context_window: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n        Schema.Null,\n      ]),\n    ),\n    model_provider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    model_reasoning_effort: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__ReasoningEffort, Schema.Null]),\n    ),\n    model_reasoning_summary: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__ReasoningSummary, Schema.Null]),\n    ),\n    model_verbosity: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__Verbosity, Schema.Null]),\n    ),\n    review_model: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    sandbox_mode: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__SandboxMode, Schema.Null]),\n    ),\n    sandbox_workspace_write: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__SandboxWorkspaceWrite, Schema.Null]),\n    ),\n    service_tier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    tools: Schema.optionalKey(Schema.Union([V2ConfigReadResponse__ToolsV2, Schema.Null])),\n    web_search: Schema.optionalKey(\n      Schema.Union([V2ConfigReadResponse__WebSearchMode, Schema.Null]),\n    ),\n  }),\n  [Schema.Record(Schema.String, Schema.Unknown)],\n);\n\nexport type V2ConfigWriteResponse__OverriddenMetadata = {\n  readonly effectiveValue: unknown;\n  readonly message: string;\n  readonly overridingLayer: V2ConfigWriteResponse__ConfigLayerMetadata;\n};\nexport const V2ConfigWriteResponse__OverriddenMetadata = Schema.Struct({\n  effectiveValue: Schema.Unknown,\n  message: Schema.String,\n  overridingLayer: V2ConfigWriteResponse__ConfigLayerMetadata,\n});\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf> | null;\n};\nexport const V2ItemGuardianApprovalReviewCompletedNotification__AdditionalFileSystemPermissions =\n  Schema.Struct({\n    entries: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(V2ItemGuardianApprovalReviewCompletedNotification__FileSystemSandboxEntry),\n        Schema.Null,\n      ]),\n    ),\n    globScanMaxDepth: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(1)),\n        Schema.Null,\n      ]),\n    ),\n    read: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf).annotate({\n          description: \"This will be removed in favor of `entries`.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    write: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf).annotate({\n          description: \"This will be removed in favor of `entries`.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__AdditionalFileSystemPermissions = {\n  readonly entries?: ReadonlyArray<V2ItemGuardianApprovalReviewStartedNotification__FileSystemSandboxEntry> | null;\n  readonly globScanMaxDepth?: number | null;\n  readonly read?: ReadonlyArray<V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf> | null;\n  readonly write?: ReadonlyArray<V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf> | null;\n};\nexport const V2ItemGuardianApprovalReviewStartedNotification__AdditionalFileSystemPermissions =\n  Schema.Struct({\n    entries: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(V2ItemGuardianApprovalReviewStartedNotification__FileSystemSandboxEntry),\n        Schema.Null,\n      ]),\n    ),\n    globScanMaxDepth: Schema.optionalKey(\n      Schema.Union([\n        Schema.Number.annotate({ format: \"uint\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(1)),\n        Schema.Null,\n      ]),\n    ),\n    read: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf).annotate({\n          description: \"This will be removed in favor of `entries`.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    write: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf).annotate({\n          description: \"This will be removed in favor of `entries`.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n  });\n\nexport type V2PluginInstalledResponse__PluginSummary = {\n  readonly authPolicy: V2PluginInstalledResponse__PluginAuthPolicy;\n  readonly availability?: \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\n  readonly enabled: boolean;\n  readonly id: string;\n  readonly installPolicy: V2PluginInstalledResponse__PluginInstallPolicy;\n  readonly installed: boolean;\n  readonly interface?: V2PluginInstalledResponse__PluginInterface | null;\n  readonly keywords?: ReadonlyArray<string>;\n  readonly localVersion?: string | null;\n  readonly name: string;\n  readonly remotePluginId?: string | null;\n  readonly shareContext?: V2PluginInstalledResponse__PluginShareContext | null;\n  readonly source: V2PluginInstalledResponse__PluginSource;\n};\nexport const V2PluginInstalledResponse__PluginSummary = Schema.Struct({\n  authPolicy: V2PluginInstalledResponse__PluginAuthPolicy,\n  availability: Schema.optionalKey(\n    Schema.Literals([\"DISABLED_BY_ADMIN\", \"AVAILABLE\"]).annotate({\n      description: \"Availability state for installing and using the plugin.\",\n      default: \"AVAILABLE\",\n    }),\n  ),\n  enabled: Schema.Boolean,\n  id: Schema.String,\n  installPolicy: V2PluginInstalledResponse__PluginInstallPolicy,\n  installed: Schema.Boolean,\n  interface: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__PluginInterface, Schema.Null]),\n  ),\n  keywords: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n  localVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the locally materialized plugin package when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String,\n  remotePluginId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Backend remote plugin identifier when available.\" }),\n      Schema.Null,\n    ]),\n  ),\n  shareContext: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__PluginShareContext, Schema.Null]).annotate({\n      description: \"Remote sharing context associated with this plugin when available.\",\n    }),\n  ),\n  source: V2PluginInstalledResponse__PluginSource,\n});\n\nexport type V2PluginListResponse__PluginSummary = {\n  readonly authPolicy: V2PluginListResponse__PluginAuthPolicy;\n  readonly availability?: \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\n  readonly enabled: boolean;\n  readonly id: string;\n  readonly installPolicy: V2PluginListResponse__PluginInstallPolicy;\n  readonly installed: boolean;\n  readonly interface?: V2PluginListResponse__PluginInterface | null;\n  readonly keywords?: ReadonlyArray<string>;\n  readonly localVersion?: string | null;\n  readonly name: string;\n  readonly remotePluginId?: string | null;\n  readonly shareContext?: V2PluginListResponse__PluginShareContext | null;\n  readonly source: V2PluginListResponse__PluginSource;\n};\nexport const V2PluginListResponse__PluginSummary = Schema.Struct({\n  authPolicy: V2PluginListResponse__PluginAuthPolicy,\n  availability: Schema.optionalKey(\n    Schema.Literals([\"DISABLED_BY_ADMIN\", \"AVAILABLE\"]).annotate({\n      description: \"Availability state for installing and using the plugin.\",\n      default: \"AVAILABLE\",\n    }),\n  ),\n  enabled: Schema.Boolean,\n  id: Schema.String,\n  installPolicy: V2PluginListResponse__PluginInstallPolicy,\n  installed: Schema.Boolean,\n  interface: Schema.optionalKey(Schema.Union([V2PluginListResponse__PluginInterface, Schema.Null])),\n  keywords: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n  localVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the locally materialized plugin package when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String,\n  remotePluginId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Backend remote plugin identifier when available.\" }),\n      Schema.Null,\n    ]),\n  ),\n  shareContext: Schema.optionalKey(\n    Schema.Union([V2PluginListResponse__PluginShareContext, Schema.Null]).annotate({\n      description: \"Remote sharing context associated with this plugin when available.\",\n    }),\n  ),\n  source: V2PluginListResponse__PluginSource,\n});\n\nexport type V2PluginReadResponse__PluginSummary = {\n  readonly authPolicy: V2PluginReadResponse__PluginAuthPolicy;\n  readonly availability?: \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\n  readonly enabled: boolean;\n  readonly id: string;\n  readonly installPolicy: V2PluginReadResponse__PluginInstallPolicy;\n  readonly installed: boolean;\n  readonly interface?: V2PluginReadResponse__PluginInterface | null;\n  readonly keywords?: ReadonlyArray<string>;\n  readonly localVersion?: string | null;\n  readonly name: string;\n  readonly remotePluginId?: string | null;\n  readonly shareContext?: V2PluginReadResponse__PluginShareContext | null;\n  readonly source: V2PluginReadResponse__PluginSource;\n};\nexport const V2PluginReadResponse__PluginSummary = Schema.Struct({\n  authPolicy: V2PluginReadResponse__PluginAuthPolicy,\n  availability: Schema.optionalKey(\n    Schema.Literals([\"DISABLED_BY_ADMIN\", \"AVAILABLE\"]).annotate({\n      description: \"Availability state for installing and using the plugin.\",\n      default: \"AVAILABLE\",\n    }),\n  ),\n  enabled: Schema.Boolean,\n  id: Schema.String,\n  installPolicy: V2PluginReadResponse__PluginInstallPolicy,\n  installed: Schema.Boolean,\n  interface: Schema.optionalKey(Schema.Union([V2PluginReadResponse__PluginInterface, Schema.Null])),\n  keywords: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n  localVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the locally materialized plugin package when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String,\n  remotePluginId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Backend remote plugin identifier when available.\" }),\n      Schema.Null,\n    ]),\n  ),\n  shareContext: Schema.optionalKey(\n    Schema.Union([V2PluginReadResponse__PluginShareContext, Schema.Null]).annotate({\n      description: \"Remote sharing context associated with this plugin when available.\",\n    }),\n  ),\n  source: V2PluginReadResponse__PluginSource,\n});\n\nexport type V2PluginShareListResponse__PluginSummary = {\n  readonly authPolicy: V2PluginShareListResponse__PluginAuthPolicy;\n  readonly availability?: \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\n  readonly enabled: boolean;\n  readonly id: string;\n  readonly installPolicy: V2PluginShareListResponse__PluginInstallPolicy;\n  readonly installed: boolean;\n  readonly interface?: V2PluginShareListResponse__PluginInterface | null;\n  readonly keywords?: ReadonlyArray<string>;\n  readonly localVersion?: string | null;\n  readonly name: string;\n  readonly remotePluginId?: string | null;\n  readonly shareContext?: V2PluginShareListResponse__PluginShareContext | null;\n  readonly source: V2PluginShareListResponse__PluginSource;\n};\nexport const V2PluginShareListResponse__PluginSummary = Schema.Struct({\n  authPolicy: V2PluginShareListResponse__PluginAuthPolicy,\n  availability: Schema.optionalKey(\n    Schema.Literals([\"DISABLED_BY_ADMIN\", \"AVAILABLE\"]).annotate({\n      description: \"Availability state for installing and using the plugin.\",\n      default: \"AVAILABLE\",\n    }),\n  ),\n  enabled: Schema.Boolean,\n  id: Schema.String,\n  installPolicy: V2PluginShareListResponse__PluginInstallPolicy,\n  installed: Schema.Boolean,\n  interface: Schema.optionalKey(\n    Schema.Union([V2PluginShareListResponse__PluginInterface, Schema.Null]),\n  ),\n  keywords: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n  localVersion: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Version of the locally materialized plugin package when available.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String,\n  remotePluginId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Backend remote plugin identifier when available.\" }),\n      Schema.Null,\n    ]),\n  ),\n  shareContext: Schema.optionalKey(\n    Schema.Union([V2PluginShareListResponse__PluginShareContext, Schema.Null]).annotate({\n      description: \"Remote sharing context associated with this plugin when available.\",\n    }),\n  ),\n  source: V2PluginShareListResponse__PluginSource,\n});\n\nexport type V2RawResponseItemCompletedNotification__ResponseItem =\n  | {\n      readonly content: ReadonlyArray<V2RawResponseItemCompletedNotification__ContentItem>;\n      readonly id?: string | null;\n      readonly phase?: V2RawResponseItemCompletedNotification__MessagePhase | null;\n      readonly role: string;\n      readonly type: \"message\";\n    }\n  | {\n      readonly author: string;\n      readonly content: ReadonlyArray<V2RawResponseItemCompletedNotification__AgentMessageInputContent>;\n      readonly recipient: string;\n      readonly type: \"agent_message\";\n    }\n  | {\n      readonly content?: ReadonlyArray<V2RawResponseItemCompletedNotification__ReasoningItemContent> | null;\n      readonly encrypted_content?: string | null;\n      readonly summary: ReadonlyArray<V2RawResponseItemCompletedNotification__ReasoningItemReasoningSummary>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly action: V2RawResponseItemCompletedNotification__LocalShellAction;\n      readonly call_id?: string | null;\n      readonly id?: string | null;\n      readonly status: V2RawResponseItemCompletedNotification__LocalShellStatus;\n      readonly type: \"local_shell_call\";\n    }\n  | {\n      readonly arguments: string;\n      readonly call_id: string;\n      readonly id?: string | null;\n      readonly name: string;\n      readonly namespace?: string | null;\n      readonly type: \"function_call\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly call_id?: string | null;\n      readonly execution: string;\n      readonly id?: string | null;\n      readonly status?: string | null;\n      readonly type: \"tool_search_call\";\n    }\n  | {\n      readonly call_id: string;\n      readonly output: V2RawResponseItemCompletedNotification__FunctionCallOutputBody;\n      readonly type: \"function_call_output\";\n    }\n  | {\n      readonly call_id: string;\n      readonly id?: string | null;\n      readonly input: string;\n      readonly name: string;\n      readonly status?: string | null;\n      readonly type: \"custom_tool_call\";\n    }\n  | {\n      readonly call_id: string;\n      readonly name?: string | null;\n      readonly output: V2RawResponseItemCompletedNotification__FunctionCallOutputBody;\n      readonly type: \"custom_tool_call_output\";\n    }\n  | {\n      readonly call_id?: string | null;\n      readonly execution: string;\n      readonly status: string;\n      readonly tools: ReadonlyArray<unknown>;\n      readonly type: \"tool_search_output\";\n    }\n  | {\n      readonly action?: V2RawResponseItemCompletedNotification__ResponsesApiWebSearchAction | null;\n      readonly id?: string | null;\n      readonly status?: string | null;\n      readonly type: \"web_search_call\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revised_prompt?: string | null;\n      readonly status: string;\n      readonly type: \"image_generation_call\";\n    }\n  | { readonly encrypted_content: string; readonly type: \"compaction\" }\n  | { readonly type: \"compaction_trigger\" }\n  | { readonly encrypted_content?: string | null; readonly type: \"context_compaction\" }\n  | { readonly type: \"other\" };\nexport const V2RawResponseItemCompletedNotification__ResponseItem = Schema.Union(\n  [\n    Schema.Struct({\n      content: Schema.Array(V2RawResponseItemCompletedNotification__ContentItem),\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      phase: Schema.optionalKey(\n        Schema.Union([V2RawResponseItemCompletedNotification__MessagePhase, Schema.Null]),\n      ),\n      role: Schema.String,\n      type: Schema.Literal(\"message\").annotate({ title: \"MessageResponseItemType\" }),\n    }).annotate({ title: \"MessageResponseItem\" }),\n    Schema.Struct({\n      author: Schema.String,\n      content: Schema.Array(V2RawResponseItemCompletedNotification__AgentMessageInputContent),\n      recipient: Schema.String,\n      type: Schema.Literal(\"agent_message\").annotate({ title: \"AgentMessageResponseItemType\" }),\n    }).annotate({ title: \"AgentMessageResponseItem\" }),\n    Schema.Struct({\n      content: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(V2RawResponseItemCompletedNotification__ReasoningItemContent),\n          Schema.Null,\n        ]),\n      ),\n      encrypted_content: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      summary: Schema.Array(V2RawResponseItemCompletedNotification__ReasoningItemReasoningSummary),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningResponseItemType\" }),\n    }).annotate({ title: \"ReasoningResponseItem\" }),\n    Schema.Struct({\n      action: V2RawResponseItemCompletedNotification__LocalShellAction,\n      call_id: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Set when using the Responses API.\" }),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Legacy id field retained for compatibility with older payloads.\",\n            writeOnly: true,\n          }),\n          Schema.Null,\n        ]),\n      ),\n      status: V2RawResponseItemCompletedNotification__LocalShellStatus,\n      type: Schema.Literal(\"local_shell_call\").annotate({\n        title: \"LocalShellCallResponseItemType\",\n      }),\n    }).annotate({ title: \"LocalShellCallResponseItem\" }),\n    Schema.Struct({\n      arguments: Schema.String,\n      call_id: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      name: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"function_call\").annotate({ title: \"FunctionCallResponseItemType\" }),\n    }).annotate({ title: \"FunctionCallResponseItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      call_id: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      execution: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"tool_search_call\").annotate({\n        title: \"ToolSearchCallResponseItemType\",\n      }),\n    }).annotate({ title: \"ToolSearchCallResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      output: V2RawResponseItemCompletedNotification__FunctionCallOutputBody,\n      type: Schema.Literal(\"function_call_output\").annotate({\n        title: \"FunctionCallOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"FunctionCallOutputResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      input: Schema.String,\n      name: Schema.String,\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"custom_tool_call\").annotate({\n        title: \"CustomToolCallResponseItemType\",\n      }),\n    }).annotate({ title: \"CustomToolCallResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      name: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      output: V2RawResponseItemCompletedNotification__FunctionCallOutputBody,\n      type: Schema.Literal(\"custom_tool_call_output\").annotate({\n        title: \"CustomToolCallOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"CustomToolCallOutputResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      execution: Schema.String,\n      status: Schema.String,\n      tools: Schema.Array(Schema.Unknown),\n      type: Schema.Literal(\"tool_search_output\").annotate({\n        title: \"ToolSearchOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"ToolSearchOutputResponseItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([\n          V2RawResponseItemCompletedNotification__ResponsesApiWebSearchAction,\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"web_search_call\").annotate({ title: \"WebSearchCallResponseItemType\" }),\n    }).annotate({ title: \"WebSearchCallResponseItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revised_prompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: Schema.String,\n      type: Schema.Literal(\"image_generation_call\").annotate({\n        title: \"ImageGenerationCallResponseItemType\",\n      }),\n    }).annotate({ title: \"ImageGenerationCallResponseItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"compaction\").annotate({ title: \"CompactionResponseItemType\" }),\n    }).annotate({ title: \"CompactionResponseItem\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"compaction_trigger\").annotate({\n        title: \"CompactionTriggerResponseItemType\",\n      }),\n    }).annotate({ title: \"CompactionTriggerResponseItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"context_compaction\").annotate({\n        title: \"ContextCompactionResponseItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionResponseItem\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherResponseItemType\" }),\n    }).annotate({ title: \"OtherResponseItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ReviewStartResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ReviewStartResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ReviewStartResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ReviewStartResponse__TurnStatus;\n};\nexport const V2ReviewStartResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ReviewStartResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ReviewStartResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ReviewStartResponse__TurnStatus,\n});\n\nexport type V2SkillsListResponse__SkillsListEntry = {\n  readonly cwd: string;\n  readonly errors: ReadonlyArray<V2SkillsListResponse__SkillErrorInfo>;\n  readonly skills: ReadonlyArray<V2SkillsListResponse__SkillMetadata>;\n};\nexport const V2SkillsListResponse__SkillsListEntry = Schema.Struct({\n  cwd: Schema.String,\n  errors: Schema.Array(V2SkillsListResponse__SkillErrorInfo),\n  skills: Schema.Array(V2SkillsListResponse__SkillMetadata),\n});\n\nexport type V2ThreadForkResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadForkResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadForkResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadForkResponse__TurnStatus;\n};\nexport const V2ThreadForkResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadForkResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadForkResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadForkResponse__TurnStatus,\n});\n\nexport type V2ThreadListResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadListResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadListResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadListResponse__TurnStatus;\n};\nexport const V2ThreadListResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadListResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadListResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadListResponse__TurnStatus,\n});\n\nexport type V2ThreadMetadataUpdateResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadMetadataUpdateResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadMetadataUpdateResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadMetadataUpdateResponse__TurnStatus;\n};\nexport const V2ThreadMetadataUpdateResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadMetadataUpdateResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadMetadataUpdateResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadMetadataUpdateResponse__TurnStatus,\n});\n\nexport type V2ThreadReadResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadReadResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadReadResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadReadResponse__TurnStatus;\n};\nexport const V2ThreadReadResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadReadResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadReadResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadReadResponse__TurnStatus,\n});\n\nexport type V2ThreadResumeResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadResumeResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadResumeResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadResumeResponse__TurnStatus;\n};\nexport const V2ThreadResumeResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadResumeResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadResumeResponse__TurnStatus,\n});\n\nexport type V2ThreadRollbackResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadRollbackResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadRollbackResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadRollbackResponse__TurnStatus;\n};\nexport const V2ThreadRollbackResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadRollbackResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadRollbackResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadRollbackResponse__TurnStatus,\n});\n\nexport type V2ThreadSettingsUpdatedNotification__ThreadSettings = {\n  readonly activePermissionProfile?: V2ThreadSettingsUpdatedNotification__ActivePermissionProfile | null;\n  readonly approvalPolicy: V2ThreadSettingsUpdatedNotification__AskForApproval;\n  readonly approvalsReviewer: V2ThreadSettingsUpdatedNotification__ApprovalsReviewer;\n  readonly collaborationMode: V2ThreadSettingsUpdatedNotification__CollaborationMode;\n  readonly cwd: V2ThreadSettingsUpdatedNotification__AbsolutePathBuf;\n  readonly effort?: V2ThreadSettingsUpdatedNotification__ReasoningEffort | null;\n  readonly model: string;\n  readonly modelProvider: string;\n  readonly personality?: V2ThreadSettingsUpdatedNotification__Personality | null;\n  readonly sandboxPolicy: V2ThreadSettingsUpdatedNotification__SandboxPolicy;\n  readonly serviceTier?: string | null;\n  readonly summary?: V2ThreadSettingsUpdatedNotification__ReasoningSummary | null;\n};\nexport const V2ThreadSettingsUpdatedNotification__ThreadSettings = Schema.Struct({\n  activePermissionProfile: Schema.optionalKey(\n    Schema.Union([V2ThreadSettingsUpdatedNotification__ActivePermissionProfile, Schema.Null]),\n  ),\n  approvalPolicy: V2ThreadSettingsUpdatedNotification__AskForApproval,\n  approvalsReviewer: V2ThreadSettingsUpdatedNotification__ApprovalsReviewer,\n  collaborationMode: V2ThreadSettingsUpdatedNotification__CollaborationMode,\n  cwd: V2ThreadSettingsUpdatedNotification__AbsolutePathBuf,\n  effort: Schema.optionalKey(\n    Schema.Union([V2ThreadSettingsUpdatedNotification__ReasoningEffort, Schema.Null]),\n  ),\n  model: Schema.String,\n  modelProvider: Schema.String,\n  personality: Schema.optionalKey(\n    Schema.Union([V2ThreadSettingsUpdatedNotification__Personality, Schema.Null]),\n  ),\n  sandboxPolicy: V2ThreadSettingsUpdatedNotification__SandboxPolicy,\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  summary: Schema.optionalKey(\n    Schema.Union([V2ThreadSettingsUpdatedNotification__ReasoningSummary, Schema.Null]),\n  ),\n});\n\nexport type V2ThreadStartedNotification__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadStartedNotification__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadStartedNotification__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadStartedNotification__TurnStatus;\n};\nexport const V2ThreadStartedNotification__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadStartedNotification__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadStartedNotification__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadStartedNotification__TurnStatus,\n});\n\nexport type V2ThreadStartResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadStartResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadStartResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadStartResponse__TurnStatus;\n};\nexport const V2ThreadStartResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadStartResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadStartResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadStartResponse__TurnStatus,\n});\n\nexport type V2ThreadUnarchiveResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2ThreadUnarchiveResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2ThreadUnarchiveResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2ThreadUnarchiveResponse__TurnStatus;\n};\nexport const V2ThreadUnarchiveResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2ThreadUnarchiveResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2ThreadUnarchiveResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2ThreadUnarchiveResponse__TurnStatus,\n});\n\nexport type V2TurnCompletedNotification__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2TurnCompletedNotification__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2TurnCompletedNotification__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2TurnCompletedNotification__TurnStatus;\n};\nexport const V2TurnCompletedNotification__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2TurnCompletedNotification__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2TurnCompletedNotification__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2TurnCompletedNotification__TurnStatus,\n});\n\nexport type V2TurnStartedNotification__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2TurnStartedNotification__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2TurnStartedNotification__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2TurnStartedNotification__TurnStatus;\n};\nexport const V2TurnStartedNotification__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2TurnStartedNotification__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2TurnStartedNotification__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2TurnStartedNotification__TurnStatus,\n});\n\nexport type V2TurnStartResponse__Turn = {\n  readonly completedAt?: number | null;\n  readonly durationMs?: number | null;\n  readonly error?: V2TurnStartResponse__TurnError | null;\n  readonly id: string;\n  readonly items: ReadonlyArray<V2TurnStartResponse__ThreadItem>;\n  readonly itemsView?: \"notLoaded\" | \"summary\" | \"full\";\n  readonly startedAt?: number | null;\n  readonly status: V2TurnStartResponse__TurnStatus;\n};\nexport const V2TurnStartResponse__Turn = Schema.Struct({\n  completedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn completed.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  durationMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Duration between turn start and completion in milliseconds, if known.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  error: Schema.optionalKey(\n    Schema.Union([V2TurnStartResponse__TurnError, Schema.Null]).annotate({\n      description: \"Only populated when the Turn's status is failed.\",\n    }),\n  ),\n  id: Schema.String,\n  items: Schema.Array(V2TurnStartResponse__ThreadItem).annotate({\n    description: \"Thread items currently included in this turn payload.\",\n  }),\n  itemsView: Schema.optionalKey(\n    Schema.Literals([\"notLoaded\", \"summary\", \"full\"]).annotate({\n      description: \"Describes how much of `items` has been loaded for this turn.\",\n      default: \"full\",\n    }),\n  ),\n  startedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Unix timestamp (in seconds) when the turn started.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  status: V2TurnStartResponse__TurnStatus,\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationEnumSchema =\n  | McpServerElicitationRequestParams__McpElicitationSingleSelectEnumSchema\n  | McpServerElicitationRequestParams__McpElicitationMultiSelectEnumSchema\n  | McpServerElicitationRequestParams__McpElicitationLegacyTitledEnumSchema;\nexport const McpServerElicitationRequestParams__McpElicitationEnumSchema = Schema.Union([\n  McpServerElicitationRequestParams__McpElicitationSingleSelectEnumSchema,\n  McpServerElicitationRequestParams__McpElicitationMultiSelectEnumSchema,\n  McpServerElicitationRequestParams__McpElicitationLegacyTitledEnumSchema,\n]);\n\nexport type PermissionsRequestApprovalParams__RequestPermissionProfile = {\n  readonly fileSystem?: PermissionsRequestApprovalParams__AdditionalFileSystemPermissions | null;\n  readonly network?: PermissionsRequestApprovalParams__AdditionalNetworkPermissions | null;\n};\nexport const PermissionsRequestApprovalParams__RequestPermissionProfile = Schema.Struct({\n  fileSystem: Schema.optionalKey(\n    Schema.Union([PermissionsRequestApprovalParams__AdditionalFileSystemPermissions, Schema.Null]),\n  ),\n  network: Schema.optionalKey(\n    Schema.Union([PermissionsRequestApprovalParams__AdditionalNetworkPermissions, Schema.Null]),\n  ),\n});\n\nexport type PermissionsRequestApprovalResponse__GrantedPermissionProfile = {\n  readonly fileSystem?: PermissionsRequestApprovalResponse__AdditionalFileSystemPermissions | null;\n  readonly network?: PermissionsRequestApprovalResponse__AdditionalNetworkPermissions | null;\n};\nexport const PermissionsRequestApprovalResponse__GrantedPermissionProfile = Schema.Struct({\n  fileSystem: Schema.optionalKey(\n    Schema.Union([\n      PermissionsRequestApprovalResponse__AdditionalFileSystemPermissions,\n      Schema.Null,\n    ]),\n  ),\n  network: Schema.optionalKey(\n    Schema.Union([PermissionsRequestApprovalResponse__AdditionalNetworkPermissions, Schema.Null]),\n  ),\n});\n\nexport type ServerNotification__RequestPermissionProfile = {\n  readonly fileSystem?: ServerNotification__AdditionalFileSystemPermissions | null;\n  readonly network?: ServerNotification__AdditionalNetworkPermissions | null;\n};\nexport const ServerNotification__RequestPermissionProfile = Schema.Struct({\n  fileSystem: Schema.optionalKey(\n    Schema.Union([ServerNotification__AdditionalFileSystemPermissions, Schema.Null]),\n  ),\n  network: Schema.optionalKey(\n    Schema.Union([ServerNotification__AdditionalNetworkPermissions, Schema.Null]),\n  ),\n});\n\nexport type ServerNotification__ThreadSettingsUpdatedNotification = {\n  readonly threadId: string;\n  readonly threadSettings: ServerNotification__ThreadSettings;\n};\nexport const ServerNotification__ThreadSettingsUpdatedNotification = Schema.Struct({\n  threadId: Schema.String,\n  threadSettings: ServerNotification__ThreadSettings,\n});\n\nexport type ServerNotification__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: ServerNotification__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: ServerNotification__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<ServerNotification__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: ServerNotification__ThreadSource | null;\n  readonly turns: ReadonlyArray<ServerNotification__Turn>;\n  readonly updatedAt: number;\n};\nexport const ServerNotification__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([ServerNotification__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: ServerNotification__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(ServerNotification__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([ServerNotification__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(ServerNotification__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type ServerNotification__TurnCompletedNotification = {\n  readonly threadId: string;\n  readonly turn: ServerNotification__Turn;\n};\nexport const ServerNotification__TurnCompletedNotification = Schema.Struct({\n  threadId: Schema.String,\n  turn: ServerNotification__Turn,\n});\n\nexport type ServerNotification__TurnStartedNotification = {\n  readonly threadId: string;\n  readonly turn: ServerNotification__Turn;\n};\nexport const ServerNotification__TurnStartedNotification = Schema.Struct({\n  threadId: Schema.String,\n  turn: ServerNotification__Turn,\n});\n\nexport type ServerRequest__RequestPermissionProfile = {\n  readonly fileSystem?: ServerRequest__AdditionalFileSystemPermissions | null;\n  readonly network?: ServerRequest__AdditionalNetworkPermissions | null;\n};\nexport const ServerRequest__RequestPermissionProfile = Schema.Struct({\n  fileSystem: Schema.optionalKey(\n    Schema.Union([ServerRequest__AdditionalFileSystemPermissions, Schema.Null]),\n  ),\n  network: Schema.optionalKey(\n    Schema.Union([ServerRequest__AdditionalNetworkPermissions, Schema.Null]),\n  ),\n});\n\nexport type ServerRequest__McpElicitationEnumSchema =\n  | ServerRequest__McpElicitationSingleSelectEnumSchema\n  | ServerRequest__McpElicitationMultiSelectEnumSchema\n  | ServerRequest__McpElicitationLegacyTitledEnumSchema;\nexport const ServerRequest__McpElicitationEnumSchema = Schema.Union([\n  ServerRequest__McpElicitationSingleSelectEnumSchema,\n  ServerRequest__McpElicitationMultiSelectEnumSchema,\n  ServerRequest__McpElicitationLegacyTitledEnumSchema,\n]);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__RequestPermissionProfile = {\n  readonly fileSystem?: V2ItemGuardianApprovalReviewCompletedNotification__AdditionalFileSystemPermissions | null;\n  readonly network?: V2ItemGuardianApprovalReviewCompletedNotification__AdditionalNetworkPermissions | null;\n};\nexport const V2ItemGuardianApprovalReviewCompletedNotification__RequestPermissionProfile =\n  Schema.Struct({\n    fileSystem: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewCompletedNotification__AdditionalFileSystemPermissions,\n        Schema.Null,\n      ]),\n    ),\n    network: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewCompletedNotification__AdditionalNetworkPermissions,\n        Schema.Null,\n      ]),\n    ),\n  });\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__RequestPermissionProfile = {\n  readonly fileSystem?: V2ItemGuardianApprovalReviewStartedNotification__AdditionalFileSystemPermissions | null;\n  readonly network?: V2ItemGuardianApprovalReviewStartedNotification__AdditionalNetworkPermissions | null;\n};\nexport const V2ItemGuardianApprovalReviewStartedNotification__RequestPermissionProfile =\n  Schema.Struct({\n    fileSystem: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewStartedNotification__AdditionalFileSystemPermissions,\n        Schema.Null,\n      ]),\n    ),\n    network: Schema.optionalKey(\n      Schema.Union([\n        V2ItemGuardianApprovalReviewStartedNotification__AdditionalNetworkPermissions,\n        Schema.Null,\n      ]),\n    ),\n  });\n\nexport type V2PluginInstalledResponse__PluginMarketplaceEntry = {\n  readonly interface?: V2PluginInstalledResponse__MarketplaceInterface | null;\n  readonly name: string;\n  readonly path?: V2PluginInstalledResponse__AbsolutePathBuf | null;\n  readonly plugins: ReadonlyArray<V2PluginInstalledResponse__PluginSummary>;\n};\nexport const V2PluginInstalledResponse__PluginMarketplaceEntry = Schema.Struct({\n  interface: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__MarketplaceInterface, Schema.Null]),\n  ),\n  name: Schema.String,\n  path: Schema.optionalKey(\n    Schema.Union([V2PluginInstalledResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description:\n        \"Local marketplace file path when the marketplace is backed by a local file. Remote-only catalog marketplaces do not have a local path.\",\n    }),\n  ),\n  plugins: Schema.Array(V2PluginInstalledResponse__PluginSummary),\n});\n\nexport type V2PluginListResponse__PluginMarketplaceEntry = {\n  readonly interface?: V2PluginListResponse__MarketplaceInterface | null;\n  readonly name: string;\n  readonly path?: V2PluginListResponse__AbsolutePathBuf | null;\n  readonly plugins: ReadonlyArray<V2PluginListResponse__PluginSummary>;\n};\nexport const V2PluginListResponse__PluginMarketplaceEntry = Schema.Struct({\n  interface: Schema.optionalKey(\n    Schema.Union([V2PluginListResponse__MarketplaceInterface, Schema.Null]),\n  ),\n  name: Schema.String,\n  path: Schema.optionalKey(\n    Schema.Union([V2PluginListResponse__AbsolutePathBuf, Schema.Null]).annotate({\n      description:\n        \"Local marketplace file path when the marketplace is backed by a local file. Remote-only catalog marketplaces do not have a local path.\",\n    }),\n  ),\n  plugins: Schema.Array(V2PluginListResponse__PluginSummary),\n});\n\nexport type V2PluginReadResponse__PluginDetail = {\n  readonly appTemplates: ReadonlyArray<V2PluginReadResponse__AppTemplateSummary>;\n  readonly apps: ReadonlyArray<V2PluginReadResponse__AppSummary>;\n  readonly description?: string | null;\n  readonly hooks: ReadonlyArray<V2PluginReadResponse__PluginHookSummary>;\n  readonly marketplaceName: string;\n  readonly marketplacePath?: V2PluginReadResponse__AbsolutePathBuf | null;\n  readonly mcpServers: ReadonlyArray<string>;\n  readonly skills: ReadonlyArray<V2PluginReadResponse__SkillSummary>;\n  readonly summary: V2PluginReadResponse__PluginSummary;\n};\nexport const V2PluginReadResponse__PluginDetail = Schema.Struct({\n  appTemplates: Schema.Array(V2PluginReadResponse__AppTemplateSummary),\n  apps: Schema.Array(V2PluginReadResponse__AppSummary),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  hooks: Schema.Array(V2PluginReadResponse__PluginHookSummary),\n  marketplaceName: Schema.String,\n  marketplacePath: Schema.optionalKey(\n    Schema.Union([V2PluginReadResponse__AbsolutePathBuf, Schema.Null]),\n  ),\n  mcpServers: Schema.Array(Schema.String),\n  skills: Schema.Array(V2PluginReadResponse__SkillSummary),\n  summary: V2PluginReadResponse__PluginSummary,\n});\n\nexport type V2PluginShareListResponse__PluginShareListItem = {\n  readonly localPluginPath?: V2PluginShareListResponse__AbsolutePathBuf | null;\n  readonly plugin: V2PluginShareListResponse__PluginSummary;\n};\nexport const V2PluginShareListResponse__PluginShareListItem = Schema.Struct({\n  localPluginPath: Schema.optionalKey(\n    Schema.Union([V2PluginShareListResponse__AbsolutePathBuf, Schema.Null]),\n  ),\n  plugin: V2PluginShareListResponse__PluginSummary,\n});\n\nexport type V2ThreadForkResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadForkResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadForkResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadForkResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadForkResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadForkResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadForkResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadForkResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadForkResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadForkResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadForkResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadForkResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadListResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadListResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadListResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadListResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadListResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadListResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadListResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadListResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadListResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadListResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadListResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadListResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadMetadataUpdateResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadMetadataUpdateResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadMetadataUpdateResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadMetadataUpdateResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadMetadataUpdateResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadMetadataUpdateResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadMetadataUpdateResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadMetadataUpdateResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadMetadataUpdateResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadMetadataUpdateResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadMetadataUpdateResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadMetadataUpdateResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadReadResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadReadResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadReadResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadReadResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadReadResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadReadResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadReadResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadReadResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadReadResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadReadResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadReadResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadReadResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadResumeResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadResumeResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadResumeResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadResumeResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadResumeResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadResumeResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadResumeResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadResumeResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadResumeResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadResumeResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadStartedNotification__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadStartedNotification__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadStartedNotification__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadStartedNotification__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadStartedNotification__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadStartedNotification__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadStartedNotification__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadStartedNotification__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadStartedNotification__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadStartedNotification__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadStartedNotification__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadStartedNotification__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadStartResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadStartResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadStartResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadStartResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadStartResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadStartResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadStartResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadStartResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadStartResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadStartResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadStartResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadStartResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadUnarchiveResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadUnarchiveResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadUnarchiveResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadUnarchiveResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadUnarchiveResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadUnarchiveResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadUnarchiveResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadUnarchiveResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadUnarchiveResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadUnarchiveResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadUnarchiveResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadUnarchiveResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type McpServerElicitationRequestParams__McpElicitationPrimitiveSchema =\n  | McpServerElicitationRequestParams__McpElicitationEnumSchema\n  | McpServerElicitationRequestParams__McpElicitationStringSchema\n  | McpServerElicitationRequestParams__McpElicitationNumberSchema\n  | McpServerElicitationRequestParams__McpElicitationBooleanSchema;\nexport const McpServerElicitationRequestParams__McpElicitationPrimitiveSchema = Schema.Union([\n  McpServerElicitationRequestParams__McpElicitationEnumSchema,\n  McpServerElicitationRequestParams__McpElicitationStringSchema,\n  McpServerElicitationRequestParams__McpElicitationNumberSchema,\n  McpServerElicitationRequestParams__McpElicitationBooleanSchema,\n]);\n\nexport type ServerNotification__GuardianApprovalReviewAction =\n  | {\n      readonly command: string;\n      readonly cwd: ServerNotification__AbsolutePathBuf;\n      readonly source: ServerNotification__GuardianCommandSource;\n      readonly type: \"command\";\n    }\n  | {\n      readonly argv: ReadonlyArray<string>;\n      readonly cwd: ServerNotification__AbsolutePathBuf;\n      readonly program: string;\n      readonly source: ServerNotification__GuardianCommandSource;\n      readonly type: \"execve\";\n    }\n  | {\n      readonly cwd: ServerNotification__AbsolutePathBuf;\n      readonly files: ReadonlyArray<ServerNotification__AbsolutePathBuf>;\n      readonly type: \"applyPatch\";\n    }\n  | {\n      readonly host: string;\n      readonly port: number;\n      readonly protocol: ServerNotification__NetworkApprovalProtocol;\n      readonly target: string;\n      readonly type: \"networkAccess\";\n    }\n  | {\n      readonly connectorId?: string | null;\n      readonly connectorName?: string | null;\n      readonly server: string;\n      readonly toolName: string;\n      readonly toolTitle?: string | null;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly permissions: ServerNotification__RequestPermissionProfile;\n      readonly reason?: string | null;\n      readonly type: \"requestPermissions\";\n    };\nexport const ServerNotification__GuardianApprovalReviewAction = Schema.Union(\n  [\n    Schema.Struct({\n      command: Schema.String,\n      cwd: ServerNotification__AbsolutePathBuf,\n      source: ServerNotification__GuardianCommandSource,\n      type: Schema.Literal(\"command\").annotate({\n        title: \"CommandGuardianApprovalReviewActionType\",\n      }),\n    }).annotate({ title: \"CommandGuardianApprovalReviewAction\" }),\n    Schema.Struct({\n      argv: Schema.Array(Schema.String),\n      cwd: ServerNotification__AbsolutePathBuf,\n      program: Schema.String,\n      source: ServerNotification__GuardianCommandSource,\n      type: Schema.Literal(\"execve\").annotate({ title: \"ExecveGuardianApprovalReviewActionType\" }),\n    }).annotate({ title: \"ExecveGuardianApprovalReviewAction\" }),\n    Schema.Struct({\n      cwd: ServerNotification__AbsolutePathBuf,\n      files: Schema.Array(ServerNotification__AbsolutePathBuf),\n      type: Schema.Literal(\"applyPatch\").annotate({\n        title: \"ApplyPatchGuardianApprovalReviewActionType\",\n      }),\n    }).annotate({ title: \"ApplyPatchGuardianApprovalReviewAction\" }),\n    Schema.Struct({\n      host: Schema.String,\n      port: Schema.Number.annotate({ format: \"uint16\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      protocol: ServerNotification__NetworkApprovalProtocol,\n      target: Schema.String,\n      type: Schema.Literal(\"networkAccess\").annotate({\n        title: \"NetworkAccessGuardianApprovalReviewActionType\",\n      }),\n    }).annotate({ title: \"NetworkAccessGuardianApprovalReviewAction\" }),\n    Schema.Struct({\n      connectorId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      connectorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      server: Schema.String,\n      toolName: Schema.String,\n      toolTitle: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"mcpToolCall\").annotate({\n        title: \"McpToolCallGuardianApprovalReviewActionType\",\n      }),\n    }).annotate({ title: \"McpToolCallGuardianApprovalReviewAction\" }),\n    Schema.Struct({\n      permissions: ServerNotification__RequestPermissionProfile,\n      reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"requestPermissions\").annotate({\n        title: \"RequestPermissionsGuardianApprovalReviewActionType\",\n      }),\n    }).annotate({ title: \"RequestPermissionsGuardianApprovalReviewAction\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__ThreadStartedNotification = {\n  readonly thread: ServerNotification__Thread;\n};\nexport const ServerNotification__ThreadStartedNotification = Schema.Struct({\n  thread: ServerNotification__Thread,\n});\n\nexport type ServerRequest__PermissionsRequestApprovalParams = {\n  readonly cwd: ServerRequest__AbsolutePathBuf;\n  readonly environmentId?: string | null;\n  readonly itemId: string;\n  readonly permissions: ServerRequest__RequestPermissionProfile;\n  readonly reason?: string | null;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerRequest__PermissionsRequestApprovalParams = Schema.Struct({\n  cwd: ServerRequest__AbsolutePathBuf,\n  environmentId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  itemId: Schema.String,\n  permissions: ServerRequest__RequestPermissionProfile,\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this approval request started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n});\n\nexport type ServerRequest__McpElicitationPrimitiveSchema =\n  | ServerRequest__McpElicitationEnumSchema\n  | ServerRequest__McpElicitationStringSchema\n  | ServerRequest__McpElicitationNumberSchema\n  | ServerRequest__McpElicitationBooleanSchema;\nexport const ServerRequest__McpElicitationPrimitiveSchema = Schema.Union([\n  ServerRequest__McpElicitationEnumSchema,\n  ServerRequest__McpElicitationStringSchema,\n  ServerRequest__McpElicitationNumberSchema,\n  ServerRequest__McpElicitationBooleanSchema,\n]);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewAction =\n  | {\n      readonly command: string;\n      readonly cwd: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf;\n      readonly source: V2ItemGuardianApprovalReviewCompletedNotification__GuardianCommandSource;\n      readonly type: \"command\";\n    }\n  | {\n      readonly argv: ReadonlyArray<string>;\n      readonly cwd: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf;\n      readonly program: string;\n      readonly source: V2ItemGuardianApprovalReviewCompletedNotification__GuardianCommandSource;\n      readonly type: \"execve\";\n    }\n  | {\n      readonly cwd: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf;\n      readonly files: ReadonlyArray<V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf>;\n      readonly type: \"applyPatch\";\n    }\n  | {\n      readonly host: string;\n      readonly port: number;\n      readonly protocol: V2ItemGuardianApprovalReviewCompletedNotification__NetworkApprovalProtocol;\n      readonly target: string;\n      readonly type: \"networkAccess\";\n    }\n  | {\n      readonly connectorId?: string | null;\n      readonly connectorName?: string | null;\n      readonly server: string;\n      readonly toolName: string;\n      readonly toolTitle?: string | null;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly permissions: V2ItemGuardianApprovalReviewCompletedNotification__RequestPermissionProfile;\n      readonly reason?: string | null;\n      readonly type: \"requestPermissions\";\n    };\nexport const V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewAction =\n  Schema.Union(\n    [\n      Schema.Struct({\n        command: Schema.String,\n        cwd: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf,\n        source: V2ItemGuardianApprovalReviewCompletedNotification__GuardianCommandSource,\n        type: Schema.Literal(\"command\").annotate({\n          title: \"CommandGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"CommandGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        argv: Schema.Array(Schema.String),\n        cwd: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf,\n        program: Schema.String,\n        source: V2ItemGuardianApprovalReviewCompletedNotification__GuardianCommandSource,\n        type: Schema.Literal(\"execve\").annotate({\n          title: \"ExecveGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"ExecveGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        cwd: V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf,\n        files: Schema.Array(V2ItemGuardianApprovalReviewCompletedNotification__AbsolutePathBuf),\n        type: Schema.Literal(\"applyPatch\").annotate({\n          title: \"ApplyPatchGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"ApplyPatchGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        host: Schema.String,\n        port: Schema.Number.annotate({ format: \"uint16\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        protocol: V2ItemGuardianApprovalReviewCompletedNotification__NetworkApprovalProtocol,\n        target: Schema.String,\n        type: Schema.Literal(\"networkAccess\").annotate({\n          title: \"NetworkAccessGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"NetworkAccessGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        connectorId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        connectorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        server: Schema.String,\n        toolName: Schema.String,\n        toolTitle: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        type: Schema.Literal(\"mcpToolCall\").annotate({\n          title: \"McpToolCallGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"McpToolCallGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        permissions: V2ItemGuardianApprovalReviewCompletedNotification__RequestPermissionProfile,\n        reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        type: Schema.Literal(\"requestPermissions\").annotate({\n          title: \"RequestPermissionsGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"RequestPermissionsGuardianApprovalReviewAction\" }),\n    ],\n    { mode: \"oneOf\" },\n  );\n\nexport type V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewAction =\n  | {\n      readonly command: string;\n      readonly cwd: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf;\n      readonly source: V2ItemGuardianApprovalReviewStartedNotification__GuardianCommandSource;\n      readonly type: \"command\";\n    }\n  | {\n      readonly argv: ReadonlyArray<string>;\n      readonly cwd: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf;\n      readonly program: string;\n      readonly source: V2ItemGuardianApprovalReviewStartedNotification__GuardianCommandSource;\n      readonly type: \"execve\";\n    }\n  | {\n      readonly cwd: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf;\n      readonly files: ReadonlyArray<V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf>;\n      readonly type: \"applyPatch\";\n    }\n  | {\n      readonly host: string;\n      readonly port: number;\n      readonly protocol: V2ItemGuardianApprovalReviewStartedNotification__NetworkApprovalProtocol;\n      readonly target: string;\n      readonly type: \"networkAccess\";\n    }\n  | {\n      readonly connectorId?: string | null;\n      readonly connectorName?: string | null;\n      readonly server: string;\n      readonly toolName: string;\n      readonly toolTitle?: string | null;\n      readonly type: \"mcpToolCall\";\n    }\n  | {\n      readonly permissions: V2ItemGuardianApprovalReviewStartedNotification__RequestPermissionProfile;\n      readonly reason?: string | null;\n      readonly type: \"requestPermissions\";\n    };\nexport const V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewAction =\n  Schema.Union(\n    [\n      Schema.Struct({\n        command: Schema.String,\n        cwd: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf,\n        source: V2ItemGuardianApprovalReviewStartedNotification__GuardianCommandSource,\n        type: Schema.Literal(\"command\").annotate({\n          title: \"CommandGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"CommandGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        argv: Schema.Array(Schema.String),\n        cwd: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf,\n        program: Schema.String,\n        source: V2ItemGuardianApprovalReviewStartedNotification__GuardianCommandSource,\n        type: Schema.Literal(\"execve\").annotate({\n          title: \"ExecveGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"ExecveGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        cwd: V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf,\n        files: Schema.Array(V2ItemGuardianApprovalReviewStartedNotification__AbsolutePathBuf),\n        type: Schema.Literal(\"applyPatch\").annotate({\n          title: \"ApplyPatchGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"ApplyPatchGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        host: Schema.String,\n        port: Schema.Number.annotate({ format: \"uint16\" })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        protocol: V2ItemGuardianApprovalReviewStartedNotification__NetworkApprovalProtocol,\n        target: Schema.String,\n        type: Schema.Literal(\"networkAccess\").annotate({\n          title: \"NetworkAccessGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"NetworkAccessGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        connectorId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        connectorName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        server: Schema.String,\n        toolName: Schema.String,\n        toolTitle: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        type: Schema.Literal(\"mcpToolCall\").annotate({\n          title: \"McpToolCallGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"McpToolCallGuardianApprovalReviewAction\" }),\n      Schema.Struct({\n        permissions: V2ItemGuardianApprovalReviewStartedNotification__RequestPermissionProfile,\n        reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        type: Schema.Literal(\"requestPermissions\").annotate({\n          title: \"RequestPermissionsGuardianApprovalReviewActionType\",\n        }),\n      }).annotate({ title: \"RequestPermissionsGuardianApprovalReviewAction\" }),\n    ],\n    { mode: \"oneOf\" },\n  );\n\nexport type McpServerElicitationRequestParams__McpElicitationSchema = {\n  readonly $schema?: string | null;\n  readonly properties: {\n    readonly [x: string]: McpServerElicitationRequestParams__McpElicitationPrimitiveSchema;\n  };\n  readonly required?: ReadonlyArray<string> | null;\n  readonly type: McpServerElicitationRequestParams__McpElicitationObjectType;\n};\nexport const McpServerElicitationRequestParams__McpElicitationSchema = Schema.Struct({\n  $schema: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  properties: Schema.Record(\n    Schema.String,\n    McpServerElicitationRequestParams__McpElicitationPrimitiveSchema,\n  ),\n  required: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  type: McpServerElicitationRequestParams__McpElicitationObjectType,\n}).annotate({\n  description:\n    \"Typed form schema for MCP `elicitation/create` requests.\\n\\nThis matches the `requestedSchema` shape from the MCP 2025-11-25 `ElicitRequestFormParams` schema.\",\n});\n\nexport type ServerNotification__ItemGuardianApprovalReviewCompletedNotification = {\n  readonly action: ServerNotification__GuardianApprovalReviewAction;\n  readonly completedAtMs: number;\n  readonly decisionSource: ServerNotification__AutoReviewDecisionSource;\n  readonly review: ServerNotification__GuardianApprovalReview;\n  readonly reviewId: string;\n  readonly startedAtMs: number;\n  readonly targetItemId?: string | null;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ItemGuardianApprovalReviewCompletedNotification = Schema.Struct({\n  action: ServerNotification__GuardianApprovalReviewAction,\n  completedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this review completed.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  decisionSource: ServerNotification__AutoReviewDecisionSource,\n  review: ServerNotification__GuardianApprovalReview,\n  reviewId: Schema.String.annotate({ description: \"Stable identifier for this review.\" }),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this review started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  targetItemId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Identifier for the reviewed item or tool call when one exists.\\n\\nIn most cases, one review maps to one target item. The exceptions are - execve reviews, where a single command may contain multiple execve calls to review (only possible when using the shell_zsh_fork feature) - network policy reviews, where there is no target item\\n\\nA network call is triggered by a CommandExecution item, so having a target_item_id set to the CommandExecution item would be misleading because the review is about the network call, not the command execution. Therefore, target_item_id is set to None for network policy reviews.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  description:\n    \"[UNSTABLE] Temporary notification payload for approval auto-review. This shape is expected to change soon.\",\n});\n\nexport type ServerNotification__ItemGuardianApprovalReviewStartedNotification = {\n  readonly action: ServerNotification__GuardianApprovalReviewAction;\n  readonly review: ServerNotification__GuardianApprovalReview;\n  readonly reviewId: string;\n  readonly startedAtMs: number;\n  readonly targetItemId?: string | null;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ServerNotification__ItemGuardianApprovalReviewStartedNotification = Schema.Struct({\n  action: ServerNotification__GuardianApprovalReviewAction,\n  review: ServerNotification__GuardianApprovalReview,\n  reviewId: Schema.String.annotate({ description: \"Stable identifier for this review.\" }),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this review started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  targetItemId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Identifier for the reviewed item or tool call when one exists.\\n\\nIn most cases, one review maps to one target item. The exceptions are - execve reviews, where a single command may contain multiple execve calls to review (only possible when using the shell_zsh_fork feature) - network policy reviews, where there is no target item\\n\\nA network call is triggered by a CommandExecution item, so having a target_item_id set to the CommandExecution item would be misleading because the review is about the network call, not the command execution. Therefore, target_item_id is set to None for network policy reviews.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  description:\n    \"[UNSTABLE] Temporary notification payload for approval auto-review. This shape is expected to change soon.\",\n});\n\nexport type ServerRequest__McpElicitationSchema = {\n  readonly $schema?: string | null;\n  readonly properties: { readonly [x: string]: ServerRequest__McpElicitationPrimitiveSchema };\n  readonly required?: ReadonlyArray<string> | null;\n  readonly type: ServerRequest__McpElicitationObjectType;\n};\nexport const ServerRequest__McpElicitationSchema = Schema.Struct({\n  $schema: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  properties: Schema.Record(Schema.String, ServerRequest__McpElicitationPrimitiveSchema),\n  required: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  type: ServerRequest__McpElicitationObjectType,\n}).annotate({\n  description:\n    \"Typed form schema for MCP `elicitation/create` requests.\\n\\nThis matches the `requestedSchema` shape from the MCP 2025-11-25 `ElicitRequestFormParams` schema.\",\n});\n\nexport type ServerRequest__McpServerElicitationRequestParams =\n  | {\n      readonly _meta?: unknown;\n      readonly message: string;\n      readonly mode: \"form\";\n      readonly requestedSchema: ServerRequest__McpElicitationSchema;\n      readonly serverName: string;\n      readonly threadId: string;\n      readonly turnId?: string | null;\n    }\n  | {\n      readonly _meta?: unknown;\n      readonly elicitationId: string;\n      readonly message: string;\n      readonly mode: \"url\";\n      readonly url: string;\n      readonly serverName: string;\n      readonly threadId: string;\n      readonly turnId?: string | null;\n    };\nexport const ServerRequest__McpServerElicitationRequestParams = Schema.Union(\n  [\n    Schema.Struct({\n      _meta: Schema.optionalKey(Schema.Unknown),\n      message: Schema.String,\n      mode: Schema.Literal(\"form\"),\n      requestedSchema: ServerRequest__McpElicitationSchema,\n      serverName: Schema.String,\n      threadId: Schema.String,\n      turnId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"Active Codex turn when this elicitation was observed, if app-server could correlate one.\\n\\nThis is nullable because MCP models elicitation as a standalone server-to-client request identified by the MCP server request id. It may be triggered during a turn, but turn context is app-server correlation rather than part of the protocol identity of the elicitation itself.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }),\n    Schema.Struct({\n      _meta: Schema.optionalKey(Schema.Unknown),\n      elicitationId: Schema.String,\n      message: Schema.String,\n      mode: Schema.Literal(\"url\"),\n      url: Schema.String,\n      serverName: Schema.String,\n      threadId: Schema.String,\n      turnId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"Active Codex turn when this elicitation was observed, if app-server could correlate one.\\n\\nThis is nullable because MCP models elicitation as a standalone server-to-client request identified by the MCP server request id. It may be triggered during a turn, but turn context is app-server correlation rather than part of the protocol identity of the elicitation itself.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ApplyPatchApprovalParams = {\n  readonly callId: string;\n  readonly conversationId: ApplyPatchApprovalParams__ThreadId;\n  readonly fileChanges: { readonly [x: string]: ApplyPatchApprovalParams__FileChange };\n  readonly grantRoot?: string | null;\n  readonly reason?: string | null;\n};\nexport const ApplyPatchApprovalParams = Schema.Struct({\n  callId: Schema.String.annotate({\n    description:\n      \"Use to correlate this with [codex_protocol::protocol::PatchApplyBeginEvent] and [codex_protocol::protocol::PatchApplyEndEvent].\",\n  }),\n  conversationId: ApplyPatchApprovalParams__ThreadId,\n  fileChanges: Schema.Record(Schema.String, ApplyPatchApprovalParams__FileChange),\n  grantRoot: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"When set, the agent is asking the user to allow writes under this root for the remainder of the session (unclear if this is honored today).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reason: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional explanatory reason (e.g. request for extra write access).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ApplyPatchApprovalParams\" });\n\nexport type ApplyPatchApprovalResponse = {\n  readonly decision: ApplyPatchApprovalResponse__ReviewDecision;\n};\nexport const ApplyPatchApprovalResponse = Schema.Struct({\n  decision: ApplyPatchApprovalResponse__ReviewDecision,\n}).annotate({ title: \"ApplyPatchApprovalResponse\" });\n\nexport type AttestationGenerateParams = {};\nexport const AttestationGenerateParams = Schema.Struct({}).annotate({\n  title: \"AttestationGenerateParams\",\n});\n\nexport type AttestationGenerateResponse = { readonly token: string };\nexport const AttestationGenerateResponse = Schema.Struct({\n  token: Schema.String.annotate({ description: \"Opaque client attestation token.\" }),\n}).annotate({ title: \"AttestationGenerateResponse\" });\n\nexport type ChatgptAuthTokensRefreshParams = {\n  readonly previousAccountId?: string | null;\n  readonly reason: ChatgptAuthTokensRefreshParams__ChatgptAuthTokensRefreshReason;\n};\nexport const ChatgptAuthTokensRefreshParams = Schema.Struct({\n  previousAccountId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Workspace/account identifier that Codex was previously using.\\n\\nClients that manage multiple accounts/workspaces can use this as a hint to refresh the token for the correct workspace.\\n\\nThis may be `null` when the prior auth state did not include a workspace identifier (`chatgpt_account_id`).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reason: ChatgptAuthTokensRefreshParams__ChatgptAuthTokensRefreshReason,\n}).annotate({ title: \"ChatgptAuthTokensRefreshParams\" });\n\nexport type ChatgptAuthTokensRefreshResponse = {\n  readonly accessToken: string;\n  readonly chatgptAccountId: string;\n  readonly chatgptPlanType?: string | null;\n};\nexport const ChatgptAuthTokensRefreshResponse = Schema.Struct({\n  accessToken: Schema.String,\n  chatgptAccountId: Schema.String,\n  chatgptPlanType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"ChatgptAuthTokensRefreshResponse\" });\n\nexport type ClientNotification = { readonly method: \"initialized\" };\nexport const ClientNotification = Schema.Union(\n  [\n    Schema.Struct({\n      method: Schema.Literal(\"initialized\").annotate({ title: \"InitializedNotificationMethod\" }),\n    }).annotate({ title: \"InitializedNotification\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ title: \"ClientNotification\" });\n\nexport type ClientRequest =\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"initialize\";\n      readonly params: ClientRequest__InitializeParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/start\";\n      readonly params: ClientRequest__ThreadStartParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/resume\";\n      readonly params: ClientRequest__ThreadResumeParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/fork\";\n      readonly params: ClientRequest__ThreadForkParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/archive\";\n      readonly params: ClientRequest__ThreadArchiveParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/delete\";\n      readonly params: ClientRequest__ThreadDeleteParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/unsubscribe\";\n      readonly params: ClientRequest__ThreadUnsubscribeParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/name/set\";\n      readonly params: ClientRequest__ThreadSetNameParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/goal/set\";\n      readonly params: ClientRequest__ThreadGoalSetParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/goal/get\";\n      readonly params: ClientRequest__ThreadGoalGetParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/goal/clear\";\n      readonly params: ClientRequest__ThreadGoalClearParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/metadata/update\";\n      readonly params: ClientRequest__ThreadMetadataUpdateParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/unarchive\";\n      readonly params: ClientRequest__ThreadUnarchiveParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/compact/start\";\n      readonly params: ClientRequest__ThreadCompactStartParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/shellCommand\";\n      readonly params: ClientRequest__ThreadShellCommandParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/approveGuardianDeniedAction\";\n      readonly params: ClientRequest__ThreadApproveGuardianDeniedActionParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/rollback\";\n      readonly params: ClientRequest__ThreadRollbackParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/list\";\n      readonly params: ClientRequest__ThreadListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/loaded/list\";\n      readonly params: ClientRequest__ThreadLoadedListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/read\";\n      readonly params: ClientRequest__ThreadReadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"thread/inject_items\";\n      readonly params: ClientRequest__ThreadInjectItemsParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"skills/list\";\n      readonly params: ClientRequest__SkillsListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"skills/extraRoots/set\";\n      readonly params: ClientRequest__SkillsExtraRootsSetParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"hooks/list\";\n      readonly params: ClientRequest__HooksListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"marketplace/add\";\n      readonly params: ClientRequest__MarketplaceAddParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"marketplace/remove\";\n      readonly params: ClientRequest__MarketplaceRemoveParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"marketplace/upgrade\";\n      readonly params: ClientRequest__MarketplaceUpgradeParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/list\";\n      readonly params: ClientRequest__PluginListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/installed\";\n      readonly params: ClientRequest__PluginInstalledParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/read\";\n      readonly params: ClientRequest__PluginReadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/skill/read\";\n      readonly params: ClientRequest__PluginSkillReadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/share/save\";\n      readonly params: ClientRequest__PluginShareSaveParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/share/updateTargets\";\n      readonly params: ClientRequest__PluginShareUpdateTargetsParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/share/list\";\n      readonly params: ClientRequest__PluginShareListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/share/checkout\";\n      readonly params: ClientRequest__PluginShareCheckoutParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/share/delete\";\n      readonly params: ClientRequest__PluginShareDeleteParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"app/list\";\n      readonly params: ClientRequest__AppsListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/readFile\";\n      readonly params: ClientRequest__FsReadFileParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/writeFile\";\n      readonly params: ClientRequest__FsWriteFileParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/createDirectory\";\n      readonly params: ClientRequest__FsCreateDirectoryParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/getMetadata\";\n      readonly params: ClientRequest__FsGetMetadataParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/readDirectory\";\n      readonly params: ClientRequest__FsReadDirectoryParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/remove\";\n      readonly params: ClientRequest__FsRemoveParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/copy\";\n      readonly params: ClientRequest__FsCopyParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/watch\";\n      readonly params: ClientRequest__FsWatchParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fs/unwatch\";\n      readonly params: ClientRequest__FsUnwatchParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"skills/config/write\";\n      readonly params: ClientRequest__SkillsConfigWriteParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/install\";\n      readonly params: ClientRequest__PluginInstallParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"plugin/uninstall\";\n      readonly params: ClientRequest__PluginUninstallParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"turn/start\";\n      readonly params: ClientRequest__TurnStartParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"turn/steer\";\n      readonly params: ClientRequest__TurnSteerParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"turn/interrupt\";\n      readonly params: ClientRequest__TurnInterruptParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"review/start\";\n      readonly params: ClientRequest__ReviewStartParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"model/list\";\n      readonly params: ClientRequest__ModelListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"modelProvider/capabilities/read\";\n      readonly params: ClientRequest__ModelProviderCapabilitiesReadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"experimentalFeature/list\";\n      readonly params: ClientRequest__ExperimentalFeatureListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"permissionProfile/list\";\n      readonly params: ClientRequest__PermissionProfileListParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"experimentalFeature/enablement/set\";\n      readonly params: ClientRequest__ExperimentalFeatureEnablementSetParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"mcpServer/oauth/login\";\n      readonly params: ClientRequest__McpServerOauthLoginParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"config/mcpServer/reload\";\n      readonly params?: null;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"mcpServerStatus/list\";\n      readonly params: ClientRequest__ListMcpServerStatusParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"mcpServer/resource/read\";\n      readonly params: ClientRequest__McpResourceReadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"mcpServer/tool/call\";\n      readonly params: ClientRequest__McpServerToolCallParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"windowsSandbox/setupStart\";\n      readonly params: ClientRequest__WindowsSandboxSetupStartParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"windowsSandbox/readiness\";\n      readonly params?: null;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/login/start\";\n      readonly params: ClientRequest__LoginAccountParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/login/cancel\";\n      readonly params: ClientRequest__CancelLoginAccountParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/logout\";\n      readonly params?: null;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/rateLimits/read\";\n      readonly params?: null;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/usage/read\";\n      readonly params?: null;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/sendAddCreditsNudgeEmail\";\n      readonly params: ClientRequest__SendAddCreditsNudgeEmailParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"feedback/upload\";\n      readonly params: ClientRequest__FeedbackUploadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"command/exec\";\n      readonly params: ClientRequest__CommandExecParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"command/exec/write\";\n      readonly params: ClientRequest__CommandExecWriteParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"command/exec/terminate\";\n      readonly params: ClientRequest__CommandExecTerminateParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"command/exec/resize\";\n      readonly params: ClientRequest__CommandExecResizeParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"config/read\";\n      readonly params: ClientRequest__ConfigReadParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"externalAgentConfig/detect\";\n      readonly params: ClientRequest__ExternalAgentConfigDetectParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"externalAgentConfig/import\";\n      readonly params: ClientRequest__ExternalAgentConfigImportParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"config/value/write\";\n      readonly params: ClientRequest__ConfigValueWriteParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"config/batchWrite\";\n      readonly params: ClientRequest__ConfigBatchWriteParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"configRequirements/read\";\n      readonly params?: null;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"account/read\";\n      readonly params: ClientRequest__GetAccountParams;\n    }\n  | {\n      readonly id: ClientRequest__RequestId;\n      readonly method: \"fuzzyFileSearch\";\n      readonly params: ClientRequest__FuzzyFileSearchParams;\n    };\nexport const ClientRequest = Schema.Union(\n  [\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"initialize\").annotate({ title: \"InitializeRequestMethod\" }),\n      params: ClientRequest__InitializeParams,\n    }).annotate({ title: \"InitializeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/start\").annotate({ title: \"Thread/startRequestMethod\" }),\n      params: ClientRequest__ThreadStartParams,\n    }).annotate({ title: \"Thread/startRequest\", description: \"NEW APIs\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/resume\").annotate({ title: \"Thread/resumeRequestMethod\" }),\n      params: ClientRequest__ThreadResumeParams,\n    }).annotate({ title: \"Thread/resumeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/fork\").annotate({ title: \"Thread/forkRequestMethod\" }),\n      params: ClientRequest__ThreadForkParams,\n    }).annotate({ title: \"Thread/forkRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/archive\").annotate({ title: \"Thread/archiveRequestMethod\" }),\n      params: ClientRequest__ThreadArchiveParams,\n    }).annotate({ title: \"Thread/archiveRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/delete\").annotate({ title: \"Thread/deleteRequestMethod\" }),\n      params: ClientRequest__ThreadDeleteParams,\n    }).annotate({ title: \"Thread/deleteRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/unsubscribe\").annotate({\n        title: \"Thread/unsubscribeRequestMethod\",\n      }),\n      params: ClientRequest__ThreadUnsubscribeParams,\n    }).annotate({ title: \"Thread/unsubscribeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/name/set\").annotate({ title: \"Thread/name/setRequestMethod\" }),\n      params: ClientRequest__ThreadSetNameParams,\n    }).annotate({ title: \"Thread/name/setRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/goal/set\").annotate({ title: \"Thread/goal/setRequestMethod\" }),\n      params: ClientRequest__ThreadGoalSetParams,\n    }).annotate({ title: \"Thread/goal/setRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/goal/get\").annotate({ title: \"Thread/goal/getRequestMethod\" }),\n      params: ClientRequest__ThreadGoalGetParams,\n    }).annotate({ title: \"Thread/goal/getRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/goal/clear\").annotate({\n        title: \"Thread/goal/clearRequestMethod\",\n      }),\n      params: ClientRequest__ThreadGoalClearParams,\n    }).annotate({ title: \"Thread/goal/clearRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/metadata/update\").annotate({\n        title: \"Thread/metadata/updateRequestMethod\",\n      }),\n      params: ClientRequest__ThreadMetadataUpdateParams,\n    }).annotate({ title: \"Thread/metadata/updateRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/unarchive\").annotate({\n        title: \"Thread/unarchiveRequestMethod\",\n      }),\n      params: ClientRequest__ThreadUnarchiveParams,\n    }).annotate({ title: \"Thread/unarchiveRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/compact/start\").annotate({\n        title: \"Thread/compact/startRequestMethod\",\n      }),\n      params: ClientRequest__ThreadCompactStartParams,\n    }).annotate({ title: \"Thread/compact/startRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/shellCommand\").annotate({\n        title: \"Thread/shellCommandRequestMethod\",\n      }),\n      params: ClientRequest__ThreadShellCommandParams,\n    }).annotate({ title: \"Thread/shellCommandRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/approveGuardianDeniedAction\").annotate({\n        title: \"Thread/approveGuardianDeniedActionRequestMethod\",\n      }),\n      params: ClientRequest__ThreadApproveGuardianDeniedActionParams,\n    }).annotate({ title: \"Thread/approveGuardianDeniedActionRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/rollback\").annotate({ title: \"Thread/rollbackRequestMethod\" }),\n      params: ClientRequest__ThreadRollbackParams,\n    }).annotate({ title: \"Thread/rollbackRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/list\").annotate({ title: \"Thread/listRequestMethod\" }),\n      params: ClientRequest__ThreadListParams,\n    }).annotate({ title: \"Thread/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/loaded/list\").annotate({\n        title: \"Thread/loaded/listRequestMethod\",\n      }),\n      params: ClientRequest__ThreadLoadedListParams,\n    }).annotate({ title: \"Thread/loaded/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/read\").annotate({ title: \"Thread/readRequestMethod\" }),\n      params: ClientRequest__ThreadReadParams,\n    }).annotate({ title: \"Thread/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"thread/inject_items\").annotate({\n        title: \"Thread/injectItemsRequestMethod\",\n      }),\n      params: ClientRequest__ThreadInjectItemsParams,\n    }).annotate({\n      title: \"Thread/injectItemsRequest\",\n      description:\n        \"Append raw Responses API items to the thread history without starting a user turn.\",\n    }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"skills/list\").annotate({ title: \"Skills/listRequestMethod\" }),\n      params: ClientRequest__SkillsListParams,\n    }).annotate({ title: \"Skills/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"skills/extraRoots/set\").annotate({\n        title: \"Skills/extraRoots/setRequestMethod\",\n      }),\n      params: ClientRequest__SkillsExtraRootsSetParams,\n    }).annotate({ title: \"Skills/extraRoots/setRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"hooks/list\").annotate({ title: \"Hooks/listRequestMethod\" }),\n      params: ClientRequest__HooksListParams,\n    }).annotate({ title: \"Hooks/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"marketplace/add\").annotate({ title: \"Marketplace/addRequestMethod\" }),\n      params: ClientRequest__MarketplaceAddParams,\n    }).annotate({ title: \"Marketplace/addRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"marketplace/remove\").annotate({\n        title: \"Marketplace/removeRequestMethod\",\n      }),\n      params: ClientRequest__MarketplaceRemoveParams,\n    }).annotate({ title: \"Marketplace/removeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"marketplace/upgrade\").annotate({\n        title: \"Marketplace/upgradeRequestMethod\",\n      }),\n      params: ClientRequest__MarketplaceUpgradeParams,\n    }).annotate({ title: \"Marketplace/upgradeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/list\").annotate({ title: \"Plugin/listRequestMethod\" }),\n      params: ClientRequest__PluginListParams,\n    }).annotate({ title: \"Plugin/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/installed\").annotate({\n        title: \"Plugin/installedRequestMethod\",\n      }),\n      params: ClientRequest__PluginInstalledParams,\n    }).annotate({ title: \"Plugin/installedRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/read\").annotate({ title: \"Plugin/readRequestMethod\" }),\n      params: ClientRequest__PluginReadParams,\n    }).annotate({ title: \"Plugin/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/skill/read\").annotate({\n        title: \"Plugin/skill/readRequestMethod\",\n      }),\n      params: ClientRequest__PluginSkillReadParams,\n    }).annotate({ title: \"Plugin/skill/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/share/save\").annotate({\n        title: \"Plugin/share/saveRequestMethod\",\n      }),\n      params: ClientRequest__PluginShareSaveParams,\n    }).annotate({ title: \"Plugin/share/saveRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/share/updateTargets\").annotate({\n        title: \"Plugin/share/updateTargetsRequestMethod\",\n      }),\n      params: ClientRequest__PluginShareUpdateTargetsParams,\n    }).annotate({ title: \"Plugin/share/updateTargetsRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/share/list\").annotate({\n        title: \"Plugin/share/listRequestMethod\",\n      }),\n      params: ClientRequest__PluginShareListParams,\n    }).annotate({ title: \"Plugin/share/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/share/checkout\").annotate({\n        title: \"Plugin/share/checkoutRequestMethod\",\n      }),\n      params: ClientRequest__PluginShareCheckoutParams,\n    }).annotate({ title: \"Plugin/share/checkoutRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/share/delete\").annotate({\n        title: \"Plugin/share/deleteRequestMethod\",\n      }),\n      params: ClientRequest__PluginShareDeleteParams,\n    }).annotate({ title: \"Plugin/share/deleteRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"app/list\").annotate({ title: \"App/listRequestMethod\" }),\n      params: ClientRequest__AppsListParams,\n    }).annotate({ title: \"App/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/readFile\").annotate({ title: \"Fs/readFileRequestMethod\" }),\n      params: ClientRequest__FsReadFileParams,\n    }).annotate({ title: \"Fs/readFileRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/writeFile\").annotate({ title: \"Fs/writeFileRequestMethod\" }),\n      params: ClientRequest__FsWriteFileParams,\n    }).annotate({ title: \"Fs/writeFileRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/createDirectory\").annotate({\n        title: \"Fs/createDirectoryRequestMethod\",\n      }),\n      params: ClientRequest__FsCreateDirectoryParams,\n    }).annotate({ title: \"Fs/createDirectoryRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/getMetadata\").annotate({ title: \"Fs/getMetadataRequestMethod\" }),\n      params: ClientRequest__FsGetMetadataParams,\n    }).annotate({ title: \"Fs/getMetadataRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/readDirectory\").annotate({\n        title: \"Fs/readDirectoryRequestMethod\",\n      }),\n      params: ClientRequest__FsReadDirectoryParams,\n    }).annotate({ title: \"Fs/readDirectoryRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/remove\").annotate({ title: \"Fs/removeRequestMethod\" }),\n      params: ClientRequest__FsRemoveParams,\n    }).annotate({ title: \"Fs/removeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/copy\").annotate({ title: \"Fs/copyRequestMethod\" }),\n      params: ClientRequest__FsCopyParams,\n    }).annotate({ title: \"Fs/copyRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/watch\").annotate({ title: \"Fs/watchRequestMethod\" }),\n      params: ClientRequest__FsWatchParams,\n    }).annotate({ title: \"Fs/watchRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fs/unwatch\").annotate({ title: \"Fs/unwatchRequestMethod\" }),\n      params: ClientRequest__FsUnwatchParams,\n    }).annotate({ title: \"Fs/unwatchRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"skills/config/write\").annotate({\n        title: \"Skills/config/writeRequestMethod\",\n      }),\n      params: ClientRequest__SkillsConfigWriteParams,\n    }).annotate({ title: \"Skills/config/writeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/install\").annotate({ title: \"Plugin/installRequestMethod\" }),\n      params: ClientRequest__PluginInstallParams,\n    }).annotate({ title: \"Plugin/installRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"plugin/uninstall\").annotate({\n        title: \"Plugin/uninstallRequestMethod\",\n      }),\n      params: ClientRequest__PluginUninstallParams,\n    }).annotate({ title: \"Plugin/uninstallRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"turn/start\").annotate({ title: \"Turn/startRequestMethod\" }),\n      params: ClientRequest__TurnStartParams,\n    }).annotate({ title: \"Turn/startRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"turn/steer\").annotate({ title: \"Turn/steerRequestMethod\" }),\n      params: ClientRequest__TurnSteerParams,\n    }).annotate({ title: \"Turn/steerRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"turn/interrupt\").annotate({ title: \"Turn/interruptRequestMethod\" }),\n      params: ClientRequest__TurnInterruptParams,\n    }).annotate({ title: \"Turn/interruptRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"review/start\").annotate({ title: \"Review/startRequestMethod\" }),\n      params: ClientRequest__ReviewStartParams,\n    }).annotate({ title: \"Review/startRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"model/list\").annotate({ title: \"Model/listRequestMethod\" }),\n      params: ClientRequest__ModelListParams,\n    }).annotate({ title: \"Model/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"modelProvider/capabilities/read\").annotate({\n        title: \"ModelProvider/capabilities/readRequestMethod\",\n      }),\n      params: ClientRequest__ModelProviderCapabilitiesReadParams,\n    }).annotate({ title: \"ModelProvider/capabilities/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"experimentalFeature/list\").annotate({\n        title: \"ExperimentalFeature/listRequestMethod\",\n      }),\n      params: ClientRequest__ExperimentalFeatureListParams,\n    }).annotate({ title: \"ExperimentalFeature/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"permissionProfile/list\").annotate({\n        title: \"PermissionProfile/listRequestMethod\",\n      }),\n      params: ClientRequest__PermissionProfileListParams,\n    }).annotate({ title: \"PermissionProfile/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"experimentalFeature/enablement/set\").annotate({\n        title: \"ExperimentalFeature/enablement/setRequestMethod\",\n      }),\n      params: ClientRequest__ExperimentalFeatureEnablementSetParams,\n    }).annotate({ title: \"ExperimentalFeature/enablement/setRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"mcpServer/oauth/login\").annotate({\n        title: \"McpServer/oauth/loginRequestMethod\",\n      }),\n      params: ClientRequest__McpServerOauthLoginParams,\n    }).annotate({ title: \"McpServer/oauth/loginRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"config/mcpServer/reload\").annotate({\n        title: \"Config/mcpServer/reloadRequestMethod\",\n      }),\n      params: Schema.optionalKey(Schema.Null),\n    }).annotate({ title: \"Config/mcpServer/reloadRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"mcpServerStatus/list\").annotate({\n        title: \"McpServerStatus/listRequestMethod\",\n      }),\n      params: ClientRequest__ListMcpServerStatusParams,\n    }).annotate({ title: \"McpServerStatus/listRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"mcpServer/resource/read\").annotate({\n        title: \"McpServer/resource/readRequestMethod\",\n      }),\n      params: ClientRequest__McpResourceReadParams,\n    }).annotate({ title: \"McpServer/resource/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"mcpServer/tool/call\").annotate({\n        title: \"McpServer/tool/callRequestMethod\",\n      }),\n      params: ClientRequest__McpServerToolCallParams,\n    }).annotate({ title: \"McpServer/tool/callRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"windowsSandbox/setupStart\").annotate({\n        title: \"WindowsSandbox/setupStartRequestMethod\",\n      }),\n      params: ClientRequest__WindowsSandboxSetupStartParams,\n    }).annotate({ title: \"WindowsSandbox/setupStartRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"windowsSandbox/readiness\").annotate({\n        title: \"WindowsSandbox/readinessRequestMethod\",\n      }),\n      params: Schema.optionalKey(Schema.Null),\n    }).annotate({ title: \"WindowsSandbox/readinessRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/login/start\").annotate({\n        title: \"Account/login/startRequestMethod\",\n      }),\n      params: ClientRequest__LoginAccountParams,\n    }).annotate({ title: \"Account/login/startRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/login/cancel\").annotate({\n        title: \"Account/login/cancelRequestMethod\",\n      }),\n      params: ClientRequest__CancelLoginAccountParams,\n    }).annotate({ title: \"Account/login/cancelRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/logout\").annotate({ title: \"Account/logoutRequestMethod\" }),\n      params: Schema.optionalKey(Schema.Null),\n    }).annotate({ title: \"Account/logoutRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/rateLimits/read\").annotate({\n        title: \"Account/rateLimits/readRequestMethod\",\n      }),\n      params: Schema.optionalKey(Schema.Null),\n    }).annotate({ title: \"Account/rateLimits/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/usage/read\").annotate({\n        title: \"Account/usage/readRequestMethod\",\n      }),\n      params: Schema.optionalKey(Schema.Null),\n    }).annotate({ title: \"Account/usage/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/sendAddCreditsNudgeEmail\").annotate({\n        title: \"Account/sendAddCreditsNudgeEmailRequestMethod\",\n      }),\n      params: ClientRequest__SendAddCreditsNudgeEmailParams,\n    }).annotate({ title: \"Account/sendAddCreditsNudgeEmailRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"feedback/upload\").annotate({ title: \"Feedback/uploadRequestMethod\" }),\n      params: ClientRequest__FeedbackUploadParams,\n    }).annotate({ title: \"Feedback/uploadRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"command/exec\").annotate({ title: \"Command/execRequestMethod\" }),\n      params: ClientRequest__CommandExecParams,\n    }).annotate({\n      title: \"Command/execRequest\",\n      description: \"Execute a standalone command (argv vector) under the server's sandbox.\",\n    }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"command/exec/write\").annotate({\n        title: \"Command/exec/writeRequestMethod\",\n      }),\n      params: ClientRequest__CommandExecWriteParams,\n    }).annotate({\n      title: \"Command/exec/writeRequest\",\n      description: \"Write stdin bytes to a running `command/exec` session or close stdin.\",\n    }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"command/exec/terminate\").annotate({\n        title: \"Command/exec/terminateRequestMethod\",\n      }),\n      params: ClientRequest__CommandExecTerminateParams,\n    }).annotate({\n      title: \"Command/exec/terminateRequest\",\n      description: \"Terminate a running `command/exec` session by client-supplied `processId`.\",\n    }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"command/exec/resize\").annotate({\n        title: \"Command/exec/resizeRequestMethod\",\n      }),\n      params: ClientRequest__CommandExecResizeParams,\n    }).annotate({\n      title: \"Command/exec/resizeRequest\",\n      description:\n        \"Resize a running PTY-backed `command/exec` session by client-supplied `processId`.\",\n    }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"config/read\").annotate({ title: \"Config/readRequestMethod\" }),\n      params: ClientRequest__ConfigReadParams,\n    }).annotate({ title: \"Config/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"externalAgentConfig/detect\").annotate({\n        title: \"ExternalAgentConfig/detectRequestMethod\",\n      }),\n      params: ClientRequest__ExternalAgentConfigDetectParams,\n    }).annotate({ title: \"ExternalAgentConfig/detectRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"externalAgentConfig/import\").annotate({\n        title: \"ExternalAgentConfig/importRequestMethod\",\n      }),\n      params: ClientRequest__ExternalAgentConfigImportParams,\n    }).annotate({ title: \"ExternalAgentConfig/importRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"config/value/write\").annotate({\n        title: \"Config/value/writeRequestMethod\",\n      }),\n      params: ClientRequest__ConfigValueWriteParams,\n    }).annotate({ title: \"Config/value/writeRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"config/batchWrite\").annotate({\n        title: \"Config/batchWriteRequestMethod\",\n      }),\n      params: ClientRequest__ConfigBatchWriteParams,\n    }).annotate({ title: \"Config/batchWriteRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"configRequirements/read\").annotate({\n        title: \"ConfigRequirements/readRequestMethod\",\n      }),\n      params: Schema.optionalKey(Schema.Null),\n    }).annotate({ title: \"ConfigRequirements/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"account/read\").annotate({ title: \"Account/readRequestMethod\" }),\n      params: ClientRequest__GetAccountParams,\n    }).annotate({ title: \"Account/readRequest\" }),\n    Schema.Struct({\n      id: ClientRequest__RequestId,\n      method: Schema.Literal(\"fuzzyFileSearch\").annotate({ title: \"FuzzyFileSearchRequestMethod\" }),\n      params: ClientRequest__FuzzyFileSearchParams,\n    }).annotate({ title: \"FuzzyFileSearchRequest\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ title: \"ClientRequest\", description: \"Request from the client to the server.\" });\n\nexport type ClientRequest__AdditionalContextEntry = {\n  readonly kind: ClientRequest__AdditionalContextKind;\n  readonly value: string;\n};\nexport const ClientRequest__AdditionalContextEntry = Schema.Struct({\n  kind: ClientRequest__AdditionalContextKind,\n  value: Schema.String,\n});\n\nexport type ClientRequest__ByteRange = { readonly end: number; readonly start: number };\nexport const ClientRequest__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type ClientRequest__CapabilityRootLocation = {\n  readonly environmentId: string;\n  readonly path: string;\n  readonly type: \"environment\";\n};\nexport const ClientRequest__CapabilityRootLocation = Schema.Union(\n  [\n    Schema.Struct({\n      environmentId: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"environment\").annotate({\n        title: \"EnvironmentCapabilityRootLocationType\",\n      }),\n    }).annotate({\n      title: \"EnvironmentCapabilityRootLocation\",\n      description: \"A path owned by an execution environment.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ description: \"Location used to resolve a selected capability root.\" });\n\nexport type ClientRequest__CollaborationMode = {\n  readonly mode: ClientRequest__ModeKind;\n  readonly settings: ClientRequest__Settings;\n};\nexport const ClientRequest__CollaborationMode = Schema.Struct({\n  mode: ClientRequest__ModeKind,\n  settings: ClientRequest__Settings,\n}).annotate({ description: \"Collaboration mode for a Codex session.\" });\n\nexport type ClientRequest__DynamicToolSpec = {\n  readonly deferLoading?: boolean;\n  readonly description: string;\n  readonly inputSchema: unknown;\n  readonly name: string;\n  readonly namespace?: string | null;\n};\nexport const ClientRequest__DynamicToolSpec = Schema.Struct({\n  deferLoading: Schema.optionalKey(Schema.Boolean),\n  description: Schema.String,\n  inputSchema: Schema.Unknown,\n  name: Schema.String,\n  namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type ClientRequest__NetworkAccess = \"restricted\" | \"enabled\";\nexport const ClientRequest__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type ClientRequest__ProcessTerminalSize = { readonly cols: number; readonly rows: number };\nexport const ClientRequest__ProcessTerminalSize = Schema.Struct({\n  cols: Schema.Number.annotate({\n    description: \"Terminal width in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  rows: Schema.Number.annotate({\n    description: \"Terminal height in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"PTY size in character cells for `process/spawn` PTY sessions.\" });\n\nexport type ClientRequest__RealtimeConversationVersion = \"v1\" | \"v2\";\nexport const ClientRequest__RealtimeConversationVersion = Schema.Literals([\"v1\", \"v2\"]);\n\nexport type ClientRequest__RealtimeOutputModality = \"text\" | \"audio\";\nexport const ClientRequest__RealtimeOutputModality = Schema.Literals([\"text\", \"audio\"]);\n\nexport type ClientRequest__RealtimeVoice =\n  | \"alloy\"\n  | \"arbor\"\n  | \"ash\"\n  | \"ballad\"\n  | \"breeze\"\n  | \"cedar\"\n  | \"coral\"\n  | \"cove\"\n  | \"echo\"\n  | \"ember\"\n  | \"juniper\"\n  | \"maple\"\n  | \"marin\"\n  | \"sage\"\n  | \"shimmer\"\n  | \"sol\"\n  | \"spruce\"\n  | \"vale\"\n  | \"verse\";\nexport const ClientRequest__RealtimeVoice = Schema.Literals([\n  \"alloy\",\n  \"arbor\",\n  \"ash\",\n  \"ballad\",\n  \"breeze\",\n  \"cedar\",\n  \"coral\",\n  \"cove\",\n  \"echo\",\n  \"ember\",\n  \"juniper\",\n  \"maple\",\n  \"marin\",\n  \"sage\",\n  \"shimmer\",\n  \"sol\",\n  \"spruce\",\n  \"vale\",\n  \"verse\",\n]);\n\nexport type ClientRequest__ResponseItem =\n  | {\n      readonly content: ReadonlyArray<ClientRequest__ContentItem>;\n      readonly id?: string | null;\n      readonly phase?: ClientRequest__MessagePhase | null;\n      readonly role: string;\n      readonly type: \"message\";\n    }\n  | {\n      readonly author: string;\n      readonly content: ReadonlyArray<ClientRequest__AgentMessageInputContent>;\n      readonly recipient: string;\n      readonly type: \"agent_message\";\n    }\n  | {\n      readonly content?: ReadonlyArray<ClientRequest__ReasoningItemContent> | null;\n      readonly encrypted_content?: string | null;\n      readonly summary: ReadonlyArray<ClientRequest__ReasoningItemReasoningSummary>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly action: ClientRequest__LocalShellAction;\n      readonly call_id?: string | null;\n      readonly id?: string | null;\n      readonly status: ClientRequest__LocalShellStatus;\n      readonly type: \"local_shell_call\";\n    }\n  | {\n      readonly arguments: string;\n      readonly call_id: string;\n      readonly id?: string | null;\n      readonly name: string;\n      readonly namespace?: string | null;\n      readonly type: \"function_call\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly call_id?: string | null;\n      readonly execution: string;\n      readonly id?: string | null;\n      readonly status?: string | null;\n      readonly type: \"tool_search_call\";\n    }\n  | {\n      readonly call_id: string;\n      readonly output: ClientRequest__FunctionCallOutputBody;\n      readonly type: \"function_call_output\";\n    }\n  | {\n      readonly call_id: string;\n      readonly id?: string | null;\n      readonly input: string;\n      readonly name: string;\n      readonly status?: string | null;\n      readonly type: \"custom_tool_call\";\n    }\n  | {\n      readonly call_id: string;\n      readonly name?: string | null;\n      readonly output: ClientRequest__FunctionCallOutputBody;\n      readonly type: \"custom_tool_call_output\";\n    }\n  | {\n      readonly call_id?: string | null;\n      readonly execution: string;\n      readonly status: string;\n      readonly tools: ReadonlyArray<unknown>;\n      readonly type: \"tool_search_output\";\n    }\n  | {\n      readonly action?: ClientRequest__ResponsesApiWebSearchAction | null;\n      readonly id?: string | null;\n      readonly status?: string | null;\n      readonly type: \"web_search_call\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revised_prompt?: string | null;\n      readonly status: string;\n      readonly type: \"image_generation_call\";\n    }\n  | { readonly encrypted_content: string; readonly type: \"compaction\" }\n  | { readonly type: \"compaction_trigger\" }\n  | { readonly encrypted_content?: string | null; readonly type: \"context_compaction\" }\n  | { readonly type: \"other\" };\nexport const ClientRequest__ResponseItem = Schema.Union(\n  [\n    Schema.Struct({\n      content: Schema.Array(ClientRequest__ContentItem),\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([ClientRequest__MessagePhase, Schema.Null])),\n      role: Schema.String,\n      type: Schema.Literal(\"message\").annotate({ title: \"MessageResponseItemType\" }),\n    }).annotate({ title: \"MessageResponseItem\" }),\n    Schema.Struct({\n      author: Schema.String,\n      content: Schema.Array(ClientRequest__AgentMessageInputContent),\n      recipient: Schema.String,\n      type: Schema.Literal(\"agent_message\").annotate({ title: \"AgentMessageResponseItemType\" }),\n    }).annotate({ title: \"AgentMessageResponseItem\" }),\n    Schema.Struct({\n      content: Schema.optionalKey(\n        Schema.Union([Schema.Array(ClientRequest__ReasoningItemContent), Schema.Null]),\n      ),\n      encrypted_content: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      summary: Schema.Array(ClientRequest__ReasoningItemReasoningSummary),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningResponseItemType\" }),\n    }).annotate({ title: \"ReasoningResponseItem\" }),\n    Schema.Struct({\n      action: ClientRequest__LocalShellAction,\n      call_id: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Set when using the Responses API.\" }),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Legacy id field retained for compatibility with older payloads.\",\n            writeOnly: true,\n          }),\n          Schema.Null,\n        ]),\n      ),\n      status: ClientRequest__LocalShellStatus,\n      type: Schema.Literal(\"local_shell_call\").annotate({\n        title: \"LocalShellCallResponseItemType\",\n      }),\n    }).annotate({ title: \"LocalShellCallResponseItem\" }),\n    Schema.Struct({\n      arguments: Schema.String,\n      call_id: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      name: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"function_call\").annotate({ title: \"FunctionCallResponseItemType\" }),\n    }).annotate({ title: \"FunctionCallResponseItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      call_id: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      execution: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"tool_search_call\").annotate({\n        title: \"ToolSearchCallResponseItemType\",\n      }),\n    }).annotate({ title: \"ToolSearchCallResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      output: ClientRequest__FunctionCallOutputBody,\n      type: Schema.Literal(\"function_call_output\").annotate({\n        title: \"FunctionCallOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"FunctionCallOutputResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      input: Schema.String,\n      name: Schema.String,\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"custom_tool_call\").annotate({\n        title: \"CustomToolCallResponseItemType\",\n      }),\n    }).annotate({ title: \"CustomToolCallResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      name: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      output: ClientRequest__FunctionCallOutputBody,\n      type: Schema.Literal(\"custom_tool_call_output\").annotate({\n        title: \"CustomToolCallOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"CustomToolCallOutputResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      execution: Schema.String,\n      status: Schema.String,\n      tools: Schema.Array(Schema.Unknown),\n      type: Schema.Literal(\"tool_search_output\").annotate({\n        title: \"ToolSearchOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"ToolSearchOutputResponseItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([ClientRequest__ResponsesApiWebSearchAction, Schema.Null]),\n      ),\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"web_search_call\").annotate({ title: \"WebSearchCallResponseItemType\" }),\n    }).annotate({ title: \"WebSearchCallResponseItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revised_prompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: Schema.String,\n      type: Schema.Literal(\"image_generation_call\").annotate({\n        title: \"ImageGenerationCallResponseItemType\",\n      }),\n    }).annotate({ title: \"ImageGenerationCallResponseItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"compaction\").annotate({ title: \"CompactionResponseItemType\" }),\n    }).annotate({ title: \"CompactionResponseItem\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"compaction_trigger\").annotate({\n        title: \"CompactionTriggerResponseItemType\",\n      }),\n    }).annotate({ title: \"CompactionTriggerResponseItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"context_compaction\").annotate({\n        title: \"ContextCompactionResponseItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionResponseItem\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherResponseItemType\" }),\n    }).annotate({ title: \"OtherResponseItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ClientRequest__SelectedCapabilityRoot = {\n  readonly id: string;\n  readonly location: {\n    readonly environmentId: string;\n    readonly path: string;\n    readonly type: \"environment\";\n  };\n};\nexport const ClientRequest__SelectedCapabilityRoot = Schema.Struct({\n  id: Schema.String.annotate({\n    description: \"Stable identifier supplied by the capability selection platform.\",\n  }),\n  location: Schema.Union(\n    [\n      Schema.Struct({\n        environmentId: Schema.String,\n        path: Schema.String,\n        type: Schema.Literal(\"environment\").annotate({\n          title: \"EnvironmentCapabilityRootLocationType\",\n        }),\n      }).annotate({\n        title: \"EnvironmentCapabilityRootLocation\",\n        description: \"A path owned by an execution environment.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Location used to resolve a selected capability root.\" }),\n}).annotate({\n  description: \"A user-selected root that can expose one or more runtime capabilities.\",\n});\n\nexport type ClientRequest__ThreadMemoryMode = \"enabled\" | \"disabled\";\nexport const ClientRequest__ThreadMemoryMode = Schema.Literals([\"enabled\", \"disabled\"]);\n\nexport type ClientRequest__ThreadRealtimeAudioChunk = {\n  readonly data: string;\n  readonly itemId?: string | null;\n  readonly numChannels: number;\n  readonly sampleRate: number;\n  readonly samplesPerChannel?: number | null;\n};\nexport const ClientRequest__ThreadRealtimeAudioChunk = Schema.Struct({\n  data: Schema.String,\n  itemId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  numChannels: Schema.Number.annotate({ format: \"uint16\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  sampleRate: Schema.Number.annotate({ format: \"uint32\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  samplesPerChannel: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"EXPERIMENTAL - thread realtime audio chunk.\" });\n\nexport type ClientRequest__ThreadRealtimeStartTransport =\n  | { readonly type: \"websocket\" }\n  | { readonly sdp: string; readonly type: \"webrtc\" };\nexport const ClientRequest__ThreadRealtimeStartTransport = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"websocket\").annotate({\n        title: \"WebsocketThreadRealtimeStartTransportType\",\n      }),\n    }).annotate({ title: \"WebsocketThreadRealtimeStartTransport\" }),\n    Schema.Struct({\n      sdp: Schema.String.annotate({\n        description:\n          \"SDP offer generated by a WebRTC RTCPeerConnection after configuring audio and the realtime events data channel.\",\n      }),\n      type: Schema.Literal(\"webrtc\").annotate({ title: \"WebrtcThreadRealtimeStartTransportType\" }),\n    }).annotate({ title: \"WebrtcThreadRealtimeStartTransport\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ description: \"EXPERIMENTAL - transport used by thread realtime.\" });\n\nexport type ClientRequest__ThreadResumeInitialTurnsPageParams = {\n  readonly itemsView?: ClientRequest__TurnItemsView | null;\n  readonly limit?: number | null;\n  readonly sortDirection?: ClientRequest__SortDirection | null;\n};\nexport const ClientRequest__ThreadResumeInitialTurnsPageParams = Schema.Struct({\n  itemsView: Schema.optionalKey(\n    Schema.Union([ClientRequest__TurnItemsView, Schema.Null]).annotate({\n      description: \"How much item detail to include for each returned turn; defaults to summary.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Optional turn page size.\", format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  sortDirection: Schema.optionalKey(\n    Schema.Union([ClientRequest__SortDirection, Schema.Null]).annotate({\n      description: \"Optional turn pagination direction; defaults to descending.\",\n    }),\n  ),\n});\n\nexport type ClientRequest__TurnEnvironmentParams = {\n  readonly cwd: ClientRequest__AbsolutePathBuf;\n  readonly environmentId: string;\n};\nexport const ClientRequest__TurnEnvironmentParams = Schema.Struct({\n  cwd: ClientRequest__AbsolutePathBuf,\n  environmentId: Schema.String,\n});\n\nexport type CommandExecutionRequestApprovalParams = {\n  readonly approvalId?: string | null;\n  readonly command?: string | null;\n  readonly commandActions?: ReadonlyArray<CommandExecutionRequestApprovalParams__CommandAction> | null;\n  readonly cwd?: CommandExecutionRequestApprovalParams__AbsolutePathBuf | null;\n  readonly itemId: string;\n  readonly networkApprovalContext?: CommandExecutionRequestApprovalParams__NetworkApprovalContext | null;\n  readonly proposedExecpolicyAmendment?: ReadonlyArray<string> | null;\n  readonly proposedNetworkPolicyAmendments?: ReadonlyArray<CommandExecutionRequestApprovalParams__NetworkPolicyAmendment> | null;\n  readonly reason?: string | null;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const CommandExecutionRequestApprovalParams = Schema.Struct({\n  approvalId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Unique identifier for this specific approval callback.\\n\\nFor regular shell/unified_exec approvals, this is null.\\n\\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  command: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"The command to be executed.\" }),\n      Schema.Null,\n    ]),\n  ),\n  commandActions: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(CommandExecutionRequestApprovalParams__CommandAction).annotate({\n        description: \"Best-effort parsed command actions for friendly display.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([CommandExecutionRequestApprovalParams__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"The command's working directory.\",\n    }),\n  ),\n  itemId: Schema.String,\n  networkApprovalContext: Schema.optionalKey(\n    Schema.Union([\n      CommandExecutionRequestApprovalParams__NetworkApprovalContext,\n      Schema.Null,\n    ]).annotate({ description: \"Optional context for a managed-network approval prompt.\" }),\n  ),\n  proposedExecpolicyAmendment: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Optional proposed execpolicy amendment to allow similar commands without prompting.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  proposedNetworkPolicyAmendments: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(CommandExecutionRequestApprovalParams__NetworkPolicyAmendment).annotate({\n        description:\n          \"Optional proposed network policy amendments (allow/deny host) for future requests.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reason: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional explanatory reason (e.g. request for network access).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this approval request started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"CommandExecutionRequestApprovalParams\" });\n\nexport type CommandExecutionRequestApprovalParams__AdditionalPermissionProfile = {\n  readonly fileSystem?: CommandExecutionRequestApprovalParams__AdditionalFileSystemPermissions | null;\n  readonly network?: CommandExecutionRequestApprovalParams__AdditionalNetworkPermissions | null;\n};\nexport const CommandExecutionRequestApprovalParams__AdditionalPermissionProfile = Schema.Struct({\n  fileSystem: Schema.optionalKey(\n    Schema.Union([\n      CommandExecutionRequestApprovalParams__AdditionalFileSystemPermissions,\n      Schema.Null,\n    ]),\n  ),\n  network: Schema.optionalKey(\n    Schema.Union([\n      CommandExecutionRequestApprovalParams__AdditionalNetworkPermissions,\n      Schema.Null,\n    ]).annotate({ description: \"Partial overlay used for per-command permission requests.\" }),\n  ),\n});\n\nexport type CommandExecutionRequestApprovalParams__CommandExecutionApprovalDecision =\n  | \"accept\"\n  | \"acceptForSession\"\n  | {\n      readonly acceptWithExecpolicyAmendment: {\n        readonly execpolicy_amendment: ReadonlyArray<string>;\n      };\n    }\n  | {\n      readonly applyNetworkPolicyAmendment: {\n        readonly network_policy_amendment: CommandExecutionRequestApprovalParams__NetworkPolicyAmendment;\n      };\n    }\n  | \"decline\"\n  | \"cancel\";\nexport const CommandExecutionRequestApprovalParams__CommandExecutionApprovalDecision = Schema.Union(\n  [\n    Schema.Literal(\"accept\").annotate({ description: \"User approved the command.\" }),\n    Schema.Literal(\"acceptForSession\").annotate({\n      description:\n        \"User approved the command and future prompts in the same session-scoped approval cache should run without prompting.\",\n    }),\n    Schema.Struct({\n      acceptWithExecpolicyAmendment: Schema.Struct({\n        execpolicy_amendment: Schema.Array(Schema.String),\n      }),\n    }).annotate({\n      title: \"AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision\",\n      description:\n        \"User approved the command, and wants to apply the proposed execpolicy amendment so future matching commands can run without prompting.\",\n    }),\n    Schema.Struct({\n      applyNetworkPolicyAmendment: Schema.Struct({\n        network_policy_amendment: CommandExecutionRequestApprovalParams__NetworkPolicyAmendment,\n      }),\n    }).annotate({\n      title: \"ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision\",\n      description: \"User chose a persistent network policy rule (allow/deny) for this host.\",\n    }),\n    Schema.Literal(\"decline\").annotate({\n      description: \"User denied the command. The agent will continue the turn.\",\n    }),\n    Schema.Literal(\"cancel\").annotate({\n      description: \"User denied the command. The turn will also be immediately interrupted.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type CommandExecutionRequestApprovalResponse = {\n  readonly decision: CommandExecutionRequestApprovalResponse__CommandExecutionApprovalDecision;\n};\nexport const CommandExecutionRequestApprovalResponse = Schema.Struct({\n  decision: CommandExecutionRequestApprovalResponse__CommandExecutionApprovalDecision,\n}).annotate({ title: \"CommandExecutionRequestApprovalResponse\" });\n\nexport type DynamicToolCallParams = {\n  readonly arguments: unknown;\n  readonly callId: string;\n  readonly namespace?: string | null;\n  readonly threadId: string;\n  readonly tool: string;\n  readonly turnId: string;\n};\nexport const DynamicToolCallParams = Schema.Struct({\n  arguments: Schema.Unknown,\n  callId: Schema.String,\n  namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n  tool: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"DynamicToolCallParams\" });\n\nexport type DynamicToolCallResponse = {\n  readonly contentItems: ReadonlyArray<DynamicToolCallResponse__DynamicToolCallOutputContentItem>;\n  readonly success: boolean;\n};\nexport const DynamicToolCallResponse = Schema.Struct({\n  contentItems: Schema.Array(DynamicToolCallResponse__DynamicToolCallOutputContentItem),\n  success: Schema.Boolean,\n}).annotate({ title: \"DynamicToolCallResponse\" });\n\nexport type ExecCommandApprovalParams = {\n  readonly approvalId?: string | null;\n  readonly callId: string;\n  readonly command: ReadonlyArray<string>;\n  readonly conversationId: ExecCommandApprovalParams__ThreadId;\n  readonly cwd: string;\n  readonly parsedCmd: ReadonlyArray<ExecCommandApprovalParams__ParsedCommand>;\n  readonly reason?: string | null;\n};\nexport const ExecCommandApprovalParams = Schema.Struct({\n  approvalId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Identifier for this specific approval callback.\" }),\n      Schema.Null,\n    ]),\n  ),\n  callId: Schema.String.annotate({\n    description:\n      \"Use to correlate this with [codex_protocol::protocol::ExecCommandBeginEvent] and [codex_protocol::protocol::ExecCommandEndEvent].\",\n  }),\n  command: Schema.Array(Schema.String),\n  conversationId: ExecCommandApprovalParams__ThreadId,\n  cwd: Schema.String,\n  parsedCmd: Schema.Array(ExecCommandApprovalParams__ParsedCommand),\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"ExecCommandApprovalParams\" });\n\nexport type ExecCommandApprovalResponse = {\n  readonly decision: ExecCommandApprovalResponse__ReviewDecision;\n};\nexport const ExecCommandApprovalResponse = Schema.Struct({\n  decision: ExecCommandApprovalResponse__ReviewDecision,\n}).annotate({ title: \"ExecCommandApprovalResponse\" });\n\nexport type FileChangeRequestApprovalParams = {\n  readonly grantRoot?: string | null;\n  readonly itemId: string;\n  readonly reason?: string | null;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const FileChangeRequestApprovalParams = Schema.Struct({\n  grantRoot: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"[UNSTABLE] When set, the agent is asking the user to allow writes under this root for the remainder of the session (unclear if this is honored today).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  itemId: Schema.String,\n  reason: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional explanatory reason (e.g. request for extra write access).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this approval request started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"FileChangeRequestApprovalParams\" });\n\nexport type FileChangeRequestApprovalResponse = {\n  readonly decision: FileChangeRequestApprovalResponse__FileChangeApprovalDecision;\n};\nexport const FileChangeRequestApprovalResponse = Schema.Struct({\n  decision: FileChangeRequestApprovalResponse__FileChangeApprovalDecision,\n}).annotate({ title: \"FileChangeRequestApprovalResponse\" });\n\nexport type FuzzyFileSearchParams = {\n  readonly cancellationToken?: string | null;\n  readonly query: string;\n  readonly roots: ReadonlyArray<string>;\n};\nexport const FuzzyFileSearchParams = Schema.Struct({\n  cancellationToken: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  query: Schema.String,\n  roots: Schema.Array(Schema.String),\n}).annotate({ title: \"FuzzyFileSearchParams\" });\n\nexport type FuzzyFileSearchResponse = {\n  readonly files: ReadonlyArray<FuzzyFileSearchResponse__FuzzyFileSearchResult>;\n};\nexport const FuzzyFileSearchResponse = Schema.Struct({\n  files: Schema.Array(FuzzyFileSearchResponse__FuzzyFileSearchResult),\n}).annotate({ title: \"FuzzyFileSearchResponse\" });\n\nexport type FuzzyFileSearchSessionCompletedNotification = { readonly sessionId: string };\nexport const FuzzyFileSearchSessionCompletedNotification = Schema.Struct({\n  sessionId: Schema.String,\n}).annotate({ title: \"FuzzyFileSearchSessionCompletedNotification\" });\n\nexport type FuzzyFileSearchSessionUpdatedNotification = {\n  readonly files: ReadonlyArray<FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchResult>;\n  readonly query: string;\n  readonly sessionId: string;\n};\nexport const FuzzyFileSearchSessionUpdatedNotification = Schema.Struct({\n  files: Schema.Array(FuzzyFileSearchSessionUpdatedNotification__FuzzyFileSearchResult),\n  query: Schema.String,\n  sessionId: Schema.String,\n}).annotate({ title: \"FuzzyFileSearchSessionUpdatedNotification\" });\n\nexport type GetAuthStatusParams = {\n  readonly includeToken?: boolean | null;\n  readonly refreshToken?: boolean | null;\n};\nexport const GetAuthStatusParams = Schema.Struct({\n  includeToken: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  refreshToken: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n}).annotate({ title: \"GetAuthStatusParams\" });\n\nexport type GetAuthStatusResponse = {\n  readonly authMethod: unknown | null;\n  readonly authToken: string | null;\n  readonly requiresOpenaiAuth: boolean | null;\n};\nexport const GetAuthStatusResponse = Schema.Struct({\n  authMethod: Schema.Union([Schema.Unknown, Schema.Null]),\n  authToken: Schema.Union([Schema.String, Schema.Null]),\n  requiresOpenaiAuth: Schema.Union([Schema.Boolean, Schema.Null]),\n}).annotate({ title: \"GetAuthStatusResponse\" });\n\nexport type GetConversationSummaryParams =\n  | { readonly rolloutPath: string }\n  | { readonly conversationId: string };\nexport const GetConversationSummaryParams = Schema.Union(\n  [Schema.Struct({ rolloutPath: Schema.String }), Schema.Struct({ conversationId: Schema.String })],\n  { mode: \"oneOf\" },\n).annotate({ title: \"GetConversationSummaryParams\" });\n\nexport type GetConversationSummaryResponse = { readonly summary: unknown };\nexport const GetConversationSummaryResponse = Schema.Struct({ summary: Schema.Unknown }).annotate({\n  title: \"GetConversationSummaryResponse\",\n});\n\nexport type GitDiffToRemoteParams = { readonly cwd: string };\nexport const GitDiffToRemoteParams = Schema.Struct({ cwd: Schema.String }).annotate({\n  title: \"GitDiffToRemoteParams\",\n});\n\nexport type GitDiffToRemoteResponse = { readonly sha: string; readonly diff: string };\nexport const GitDiffToRemoteResponse = Schema.Struct({\n  sha: Schema.String,\n  diff: Schema.String,\n}).annotate({ title: \"GitDiffToRemoteResponse\" });\n\nexport type JSONRPCError = {\n  readonly error: JSONRPCError__JSONRPCErrorError;\n  readonly id: JSONRPCError__RequestId;\n};\nexport const JSONRPCError = Schema.Struct({\n  error: JSONRPCError__JSONRPCErrorError,\n  id: JSONRPCError__RequestId,\n}).annotate({\n  title: \"JSONRPCError\",\n  description: \"A response to a request that indicates an error occurred.\",\n});\n\nexport type JSONRPCErrorError = {\n  readonly code: number;\n  readonly data?: unknown;\n  readonly message: string;\n};\nexport const JSONRPCErrorError = Schema.Struct({\n  code: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  data: Schema.optionalKey(Schema.Unknown),\n  message: Schema.String,\n}).annotate({ title: \"JSONRPCErrorError\" });\n\nexport type JSONRPCMessage =\n  | JSONRPCMessage__JSONRPCRequest\n  | JSONRPCMessage__JSONRPCNotification\n  | JSONRPCMessage__JSONRPCResponse\n  | JSONRPCMessage__JSONRPCError;\nexport const JSONRPCMessage = Schema.Union([\n  JSONRPCMessage__JSONRPCRequest,\n  JSONRPCMessage__JSONRPCNotification,\n  JSONRPCMessage__JSONRPCResponse,\n  JSONRPCMessage__JSONRPCError,\n]).annotate({\n  title: \"JSONRPCMessage\",\n  description:\n    \"Refers to any valid JSON-RPC object that can be decoded off the wire, or encoded to be sent.\",\n});\n\nexport type JSONRPCNotification = { readonly method: string; readonly params?: unknown };\nexport const JSONRPCNotification = Schema.Struct({\n  method: Schema.String,\n  params: Schema.optionalKey(Schema.Unknown),\n}).annotate({\n  title: \"JSONRPCNotification\",\n  description: \"A notification which does not expect a response.\",\n});\n\nexport type JSONRPCRequest = {\n  readonly id: JSONRPCRequest__RequestId;\n  readonly method: string;\n  readonly params?: unknown;\n  readonly trace?: JSONRPCRequest__W3cTraceContext | null;\n};\nexport const JSONRPCRequest = Schema.Struct({\n  id: JSONRPCRequest__RequestId,\n  method: Schema.String,\n  params: Schema.optionalKey(Schema.Unknown),\n  trace: Schema.optionalKey(\n    Schema.Union([JSONRPCRequest__W3cTraceContext, Schema.Null]).annotate({\n      description: \"Optional W3C Trace Context for distributed tracing.\",\n    }),\n  ),\n}).annotate({ title: \"JSONRPCRequest\", description: \"A request that expects a response.\" });\n\nexport type JSONRPCResponse = { readonly id: JSONRPCResponse__RequestId; readonly result: unknown };\nexport const JSONRPCResponse = Schema.Struct({\n  id: JSONRPCResponse__RequestId,\n  result: Schema.Unknown,\n}).annotate({\n  title: \"JSONRPCResponse\",\n  description: \"A successful (non-error) response to a request.\",\n});\n\nexport type McpServerElicitationRequestParams =\n  | {\n      readonly _meta?: unknown;\n      readonly message: string;\n      readonly mode: \"form\";\n      readonly requestedSchema: McpServerElicitationRequestParams__McpElicitationSchema;\n      readonly serverName: string;\n      readonly threadId: string;\n      readonly turnId?: string | null;\n    }\n  | {\n      readonly _meta?: unknown;\n      readonly elicitationId: string;\n      readonly message: string;\n      readonly mode: \"url\";\n      readonly url: string;\n      readonly serverName: string;\n      readonly threadId: string;\n      readonly turnId?: string | null;\n    };\nexport const McpServerElicitationRequestParams = Schema.Union(\n  [\n    Schema.Struct({\n      _meta: Schema.optionalKey(Schema.Unknown),\n      message: Schema.String,\n      mode: Schema.Literal(\"form\"),\n      requestedSchema: McpServerElicitationRequestParams__McpElicitationSchema,\n      serverName: Schema.String,\n      threadId: Schema.String,\n      turnId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"Active Codex turn when this elicitation was observed, if app-server could correlate one.\\n\\nThis is nullable because MCP models elicitation as a standalone server-to-client request identified by the MCP server request id. It may be triggered during a turn, but turn context is app-server correlation rather than part of the protocol identity of the elicitation itself.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ title: \"McpServerElicitationRequestParams\" }),\n    Schema.Struct({\n      _meta: Schema.optionalKey(Schema.Unknown),\n      elicitationId: Schema.String,\n      message: Schema.String,\n      mode: Schema.Literal(\"url\"),\n      url: Schema.String,\n      serverName: Schema.String,\n      threadId: Schema.String,\n      turnId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"Active Codex turn when this elicitation was observed, if app-server could correlate one.\\n\\nThis is nullable because MCP models elicitation as a standalone server-to-client request identified by the MCP server request id. It may be triggered during a turn, but turn context is app-server correlation rather than part of the protocol identity of the elicitation itself.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ title: \"McpServerElicitationRequestParams\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type McpServerElicitationRequestResponse = {\n  readonly _meta?: unknown;\n  readonly action: McpServerElicitationRequestResponse__McpServerElicitationAction;\n  readonly content?: unknown;\n};\nexport const McpServerElicitationRequestResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Unknown.annotate({\n      description: \"Optional client metadata for form-mode action handling.\",\n    }),\n  ),\n  action: McpServerElicitationRequestResponse__McpServerElicitationAction,\n  content: Schema.optionalKey(\n    Schema.Unknown.annotate({\n      description:\n        \"Structured user input for accepted elicitations, mirroring RMCP `CreateElicitationResult`.\\n\\nThis is nullable because decline/cancel responses have no content.\",\n    }),\n  ),\n}).annotate({ title: \"McpServerElicitationRequestResponse\" });\n\nexport type PermissionsRequestApprovalParams = {\n  readonly cwd: PermissionsRequestApprovalParams__AbsolutePathBuf;\n  readonly environmentId?: string | null;\n  readonly itemId: string;\n  readonly permissions: PermissionsRequestApprovalParams__RequestPermissionProfile;\n  readonly reason?: string | null;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const PermissionsRequestApprovalParams = Schema.Struct({\n  cwd: PermissionsRequestApprovalParams__AbsolutePathBuf,\n  environmentId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  itemId: Schema.String,\n  permissions: PermissionsRequestApprovalParams__RequestPermissionProfile,\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this approval request started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"PermissionsRequestApprovalParams\" });\n\nexport type PermissionsRequestApprovalResponse = {\n  readonly permissions: PermissionsRequestApprovalResponse__GrantedPermissionProfile;\n  readonly scope?: \"turn\" | \"session\";\n  readonly strictAutoReview?: boolean | null;\n};\nexport const PermissionsRequestApprovalResponse = Schema.Struct({\n  permissions: PermissionsRequestApprovalResponse__GrantedPermissionProfile,\n  scope: Schema.optionalKey(Schema.Literals([\"turn\", \"session\"]).annotate({ default: \"turn\" })),\n  strictAutoReview: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description:\n          \"Review every subsequent command in this turn before normal sandboxed execution.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"PermissionsRequestApprovalResponse\" });\n\nexport type PermissionsRequestApprovalResponse__PermissionGrantScope = \"turn\" | \"session\";\nexport const PermissionsRequestApprovalResponse__PermissionGrantScope = Schema.Literals([\n  \"turn\",\n  \"session\",\n]);\n\nexport type RequestId = string | number;\nexport const RequestId = Schema.Union([\n  Schema.String,\n  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n]).annotate({ title: \"RequestId\" });\n\nexport type ServerNotification =\n  | { readonly method: \"error\"; readonly params: ServerNotification__ErrorNotification }\n  | {\n      readonly method: \"thread/started\";\n      readonly params: ServerNotification__ThreadStartedNotification;\n    }\n  | {\n      readonly method: \"thread/status/changed\";\n      readonly params: ServerNotification__ThreadStatusChangedNotification;\n    }\n  | {\n      readonly method: \"thread/archived\";\n      readonly params: ServerNotification__ThreadArchivedNotification;\n    }\n  | {\n      readonly method: \"thread/deleted\";\n      readonly params: ServerNotification__ThreadDeletedNotification;\n    }\n  | {\n      readonly method: \"thread/unarchived\";\n      readonly params: ServerNotification__ThreadUnarchivedNotification;\n    }\n  | {\n      readonly method: \"thread/closed\";\n      readonly params: ServerNotification__ThreadClosedNotification;\n    }\n  | {\n      readonly method: \"skills/changed\";\n      readonly params: ServerNotification__SkillsChangedNotification;\n    }\n  | {\n      readonly method: \"thread/name/updated\";\n      readonly params: ServerNotification__ThreadNameUpdatedNotification;\n    }\n  | {\n      readonly method: \"thread/goal/updated\";\n      readonly params: ServerNotification__ThreadGoalUpdatedNotification;\n    }\n  | {\n      readonly method: \"thread/goal/cleared\";\n      readonly params: ServerNotification__ThreadGoalClearedNotification;\n    }\n  | {\n      readonly method: \"thread/settings/updated\";\n      readonly params: ServerNotification__ThreadSettingsUpdatedNotification;\n    }\n  | {\n      readonly method: \"thread/tokenUsage/updated\";\n      readonly params: ServerNotification__ThreadTokenUsageUpdatedNotification;\n    }\n  | {\n      readonly method: \"turn/started\";\n      readonly params: ServerNotification__TurnStartedNotification;\n    }\n  | {\n      readonly method: \"hook/started\";\n      readonly params: ServerNotification__HookStartedNotification;\n    }\n  | {\n      readonly method: \"turn/completed\";\n      readonly params: ServerNotification__TurnCompletedNotification;\n    }\n  | {\n      readonly method: \"hook/completed\";\n      readonly params: ServerNotification__HookCompletedNotification;\n    }\n  | {\n      readonly method: \"turn/diff/updated\";\n      readonly params: ServerNotification__TurnDiffUpdatedNotification;\n    }\n  | {\n      readonly method: \"turn/plan/updated\";\n      readonly params: ServerNotification__TurnPlanUpdatedNotification;\n    }\n  | {\n      readonly method: \"item/started\";\n      readonly params: ServerNotification__ItemStartedNotification;\n    }\n  | {\n      readonly method: \"item/autoApprovalReview/started\";\n      readonly params: ServerNotification__ItemGuardianApprovalReviewStartedNotification;\n    }\n  | {\n      readonly method: \"item/autoApprovalReview/completed\";\n      readonly params: ServerNotification__ItemGuardianApprovalReviewCompletedNotification;\n    }\n  | {\n      readonly method: \"item/completed\";\n      readonly params: ServerNotification__ItemCompletedNotification;\n    }\n  | {\n      readonly method: \"item/agentMessage/delta\";\n      readonly params: ServerNotification__AgentMessageDeltaNotification;\n    }\n  | {\n      readonly method: \"item/plan/delta\";\n      readonly params: ServerNotification__PlanDeltaNotification;\n    }\n  | {\n      readonly method: \"command/exec/outputDelta\";\n      readonly params: ServerNotification__CommandExecOutputDeltaNotification;\n    }\n  | {\n      readonly method: \"process/outputDelta\";\n      readonly params: ServerNotification__ProcessOutputDeltaNotification;\n    }\n  | {\n      readonly method: \"process/exited\";\n      readonly params: ServerNotification__ProcessExitedNotification;\n    }\n  | {\n      readonly method: \"item/commandExecution/outputDelta\";\n      readonly params: ServerNotification__CommandExecutionOutputDeltaNotification;\n    }\n  | {\n      readonly method: \"item/commandExecution/terminalInteraction\";\n      readonly params: ServerNotification__TerminalInteractionNotification;\n    }\n  | {\n      readonly method: \"item/fileChange/outputDelta\";\n      readonly params: ServerNotification__FileChangeOutputDeltaNotification;\n    }\n  | {\n      readonly method: \"item/fileChange/patchUpdated\";\n      readonly params: ServerNotification__FileChangePatchUpdatedNotification;\n    }\n  | {\n      readonly method: \"serverRequest/resolved\";\n      readonly params: ServerNotification__ServerRequestResolvedNotification;\n    }\n  | {\n      readonly method: \"item/mcpToolCall/progress\";\n      readonly params: ServerNotification__McpToolCallProgressNotification;\n    }\n  | {\n      readonly method: \"mcpServer/oauthLogin/completed\";\n      readonly params: ServerNotification__McpServerOauthLoginCompletedNotification;\n    }\n  | {\n      readonly method: \"mcpServer/startupStatus/updated\";\n      readonly params: ServerNotification__McpServerStatusUpdatedNotification;\n    }\n  | {\n      readonly method: \"account/updated\";\n      readonly params: ServerNotification__AccountUpdatedNotification;\n    }\n  | {\n      readonly method: \"account/rateLimits/updated\";\n      readonly params: ServerNotification__AccountRateLimitsUpdatedNotification;\n    }\n  | {\n      readonly method: \"app/list/updated\";\n      readonly params: ServerNotification__AppListUpdatedNotification;\n    }\n  | {\n      readonly method: \"remoteControl/status/changed\";\n      readonly params: ServerNotification__RemoteControlStatusChangedNotification;\n    }\n  | {\n      readonly method: \"externalAgentConfig/import/completed\";\n      readonly params: ServerNotification__ExternalAgentConfigImportCompletedNotification;\n    }\n  | { readonly method: \"fs/changed\"; readonly params: ServerNotification__FsChangedNotification }\n  | {\n      readonly method: \"item/reasoning/summaryTextDelta\";\n      readonly params: ServerNotification__ReasoningSummaryTextDeltaNotification;\n    }\n  | {\n      readonly method: \"item/reasoning/summaryPartAdded\";\n      readonly params: ServerNotification__ReasoningSummaryPartAddedNotification;\n    }\n  | {\n      readonly method: \"item/reasoning/textDelta\";\n      readonly params: ServerNotification__ReasoningTextDeltaNotification;\n    }\n  | {\n      readonly method: \"thread/compacted\";\n      readonly params: ServerNotification__ContextCompactedNotification;\n    }\n  | {\n      readonly method: \"model/rerouted\";\n      readonly params: ServerNotification__ModelReroutedNotification;\n    }\n  | {\n      readonly method: \"model/verification\";\n      readonly params: ServerNotification__ModelVerificationNotification;\n    }\n  | {\n      readonly method: \"turn/moderationMetadata\";\n      readonly params: ServerNotification__TurnModerationMetadataNotification;\n    }\n  | { readonly method: \"warning\"; readonly params: ServerNotification__WarningNotification }\n  | {\n      readonly method: \"guardianWarning\";\n      readonly params: ServerNotification__GuardianWarningNotification;\n    }\n  | {\n      readonly method: \"deprecationNotice\";\n      readonly params: ServerNotification__DeprecationNoticeNotification;\n    }\n  | {\n      readonly method: \"configWarning\";\n      readonly params: ServerNotification__ConfigWarningNotification;\n    }\n  | {\n      readonly method: \"fuzzyFileSearch/sessionUpdated\";\n      readonly params: ServerNotification__FuzzyFileSearchSessionUpdatedNotification;\n    }\n  | {\n      readonly method: \"fuzzyFileSearch/sessionCompleted\";\n      readonly params: ServerNotification__FuzzyFileSearchSessionCompletedNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/started\";\n      readonly params: ServerNotification__ThreadRealtimeStartedNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/itemAdded\";\n      readonly params: ServerNotification__ThreadRealtimeItemAddedNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/transcript/delta\";\n      readonly params: ServerNotification__ThreadRealtimeTranscriptDeltaNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/transcript/done\";\n      readonly params: ServerNotification__ThreadRealtimeTranscriptDoneNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/outputAudio/delta\";\n      readonly params: ServerNotification__ThreadRealtimeOutputAudioDeltaNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/sdp\";\n      readonly params: ServerNotification__ThreadRealtimeSdpNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/error\";\n      readonly params: ServerNotification__ThreadRealtimeErrorNotification;\n    }\n  | {\n      readonly method: \"thread/realtime/closed\";\n      readonly params: ServerNotification__ThreadRealtimeClosedNotification;\n    }\n  | {\n      readonly method: \"windows/worldWritableWarning\";\n      readonly params: ServerNotification__WindowsWorldWritableWarningNotification;\n    }\n  | {\n      readonly method: \"windowsSandbox/setupCompleted\";\n      readonly params: ServerNotification__WindowsSandboxSetupCompletedNotification;\n    }\n  | {\n      readonly method: \"account/login/completed\";\n      readonly params: ServerNotification__AccountLoginCompletedNotification;\n    };\nexport const ServerNotification = Schema.Union(\n  [\n    Schema.Struct({\n      method: Schema.Literal(\"error\").annotate({ title: \"ErrorNotificationMethod\" }),\n      params: ServerNotification__ErrorNotification,\n    }).annotate({ title: \"ErrorNotification\", description: \"NEW NOTIFICATIONS\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/started\").annotate({\n        title: \"Thread/startedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadStartedNotification,\n    }).annotate({ title: \"Thread/startedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/status/changed\").annotate({\n        title: \"Thread/status/changedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadStatusChangedNotification,\n    }).annotate({ title: \"Thread/status/changedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/archived\").annotate({\n        title: \"Thread/archivedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadArchivedNotification,\n    }).annotate({ title: \"Thread/archivedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/deleted\").annotate({\n        title: \"Thread/deletedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadDeletedNotification,\n    }).annotate({ title: \"Thread/deletedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/unarchived\").annotate({\n        title: \"Thread/unarchivedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadUnarchivedNotification,\n    }).annotate({ title: \"Thread/unarchivedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/closed\").annotate({\n        title: \"Thread/closedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadClosedNotification,\n    }).annotate({ title: \"Thread/closedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"skills/changed\").annotate({\n        title: \"Skills/changedNotificationMethod\",\n      }),\n      params: ServerNotification__SkillsChangedNotification,\n    }).annotate({ title: \"Skills/changedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/name/updated\").annotate({\n        title: \"Thread/name/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadNameUpdatedNotification,\n    }).annotate({ title: \"Thread/name/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/goal/updated\").annotate({\n        title: \"Thread/goal/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadGoalUpdatedNotification,\n    }).annotate({ title: \"Thread/goal/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/goal/cleared\").annotate({\n        title: \"Thread/goal/clearedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadGoalClearedNotification,\n    }).annotate({ title: \"Thread/goal/clearedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/settings/updated\").annotate({\n        title: \"Thread/settings/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadSettingsUpdatedNotification,\n    }).annotate({ title: \"Thread/settings/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/tokenUsage/updated\").annotate({\n        title: \"Thread/tokenUsage/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadTokenUsageUpdatedNotification,\n    }).annotate({ title: \"Thread/tokenUsage/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"turn/started\").annotate({ title: \"Turn/startedNotificationMethod\" }),\n      params: ServerNotification__TurnStartedNotification,\n    }).annotate({ title: \"Turn/startedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"hook/started\").annotate({ title: \"Hook/startedNotificationMethod\" }),\n      params: ServerNotification__HookStartedNotification,\n    }).annotate({ title: \"Hook/startedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"turn/completed\").annotate({\n        title: \"Turn/completedNotificationMethod\",\n      }),\n      params: ServerNotification__TurnCompletedNotification,\n    }).annotate({ title: \"Turn/completedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"hook/completed\").annotate({\n        title: \"Hook/completedNotificationMethod\",\n      }),\n      params: ServerNotification__HookCompletedNotification,\n    }).annotate({ title: \"Hook/completedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"turn/diff/updated\").annotate({\n        title: \"Turn/diff/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__TurnDiffUpdatedNotification,\n    }).annotate({ title: \"Turn/diff/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"turn/plan/updated\").annotate({\n        title: \"Turn/plan/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__TurnPlanUpdatedNotification,\n    }).annotate({ title: \"Turn/plan/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/started\").annotate({ title: \"Item/startedNotificationMethod\" }),\n      params: ServerNotification__ItemStartedNotification,\n    }).annotate({ title: \"Item/startedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/autoApprovalReview/started\").annotate({\n        title: \"Item/autoApprovalReview/startedNotificationMethod\",\n      }),\n      params: ServerNotification__ItemGuardianApprovalReviewStartedNotification,\n    }).annotate({ title: \"Item/autoApprovalReview/startedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/autoApprovalReview/completed\").annotate({\n        title: \"Item/autoApprovalReview/completedNotificationMethod\",\n      }),\n      params: ServerNotification__ItemGuardianApprovalReviewCompletedNotification,\n    }).annotate({ title: \"Item/autoApprovalReview/completedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/completed\").annotate({\n        title: \"Item/completedNotificationMethod\",\n      }),\n      params: ServerNotification__ItemCompletedNotification,\n    }).annotate({ title: \"Item/completedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/agentMessage/delta\").annotate({\n        title: \"Item/agentMessage/deltaNotificationMethod\",\n      }),\n      params: ServerNotification__AgentMessageDeltaNotification,\n    }).annotate({ title: \"Item/agentMessage/deltaNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/plan/delta\").annotate({\n        title: \"Item/plan/deltaNotificationMethod\",\n      }),\n      params: ServerNotification__PlanDeltaNotification,\n    }).annotate({\n      title: \"Item/plan/deltaNotification\",\n      description: \"EXPERIMENTAL - proposed plan streaming deltas for plan items.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"command/exec/outputDelta\").annotate({\n        title: \"Command/exec/outputDeltaNotificationMethod\",\n      }),\n      params: ServerNotification__CommandExecOutputDeltaNotification,\n    }).annotate({\n      title: \"Command/exec/outputDeltaNotification\",\n      description:\n        \"Stream base64-encoded stdout/stderr chunks for a running `command/exec` session.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"process/outputDelta\").annotate({\n        title: \"Process/outputDeltaNotificationMethod\",\n      }),\n      params: ServerNotification__ProcessOutputDeltaNotification,\n    }).annotate({\n      title: \"Process/outputDeltaNotification\",\n      description:\n        \"Stream base64-encoded stdout/stderr chunks for a running `process/spawn` session.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"process/exited\").annotate({\n        title: \"Process/exitedNotificationMethod\",\n      }),\n      params: ServerNotification__ProcessExitedNotification,\n    }).annotate({\n      title: \"Process/exitedNotification\",\n      description: \"Final exit notification for a `process/spawn` session.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/commandExecution/outputDelta\").annotate({\n        title: \"Item/commandExecution/outputDeltaNotificationMethod\",\n      }),\n      params: ServerNotification__CommandExecutionOutputDeltaNotification,\n    }).annotate({ title: \"Item/commandExecution/outputDeltaNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/commandExecution/terminalInteraction\").annotate({\n        title: \"Item/commandExecution/terminalInteractionNotificationMethod\",\n      }),\n      params: ServerNotification__TerminalInteractionNotification,\n    }).annotate({ title: \"Item/commandExecution/terminalInteractionNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/fileChange/outputDelta\").annotate({\n        title: \"Item/fileChange/outputDeltaNotificationMethod\",\n      }),\n      params: ServerNotification__FileChangeOutputDeltaNotification,\n    }).annotate({\n      title: \"Item/fileChange/outputDeltaNotification\",\n      description: \"Deprecated legacy apply_patch output stream notification.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/fileChange/patchUpdated\").annotate({\n        title: \"Item/fileChange/patchUpdatedNotificationMethod\",\n      }),\n      params: ServerNotification__FileChangePatchUpdatedNotification,\n    }).annotate({ title: \"Item/fileChange/patchUpdatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"serverRequest/resolved\").annotate({\n        title: \"ServerRequest/resolvedNotificationMethod\",\n      }),\n      params: ServerNotification__ServerRequestResolvedNotification,\n    }).annotate({ title: \"ServerRequest/resolvedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/mcpToolCall/progress\").annotate({\n        title: \"Item/mcpToolCall/progressNotificationMethod\",\n      }),\n      params: ServerNotification__McpToolCallProgressNotification,\n    }).annotate({ title: \"Item/mcpToolCall/progressNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"mcpServer/oauthLogin/completed\").annotate({\n        title: \"McpServer/oauthLogin/completedNotificationMethod\",\n      }),\n      params: ServerNotification__McpServerOauthLoginCompletedNotification,\n    }).annotate({ title: \"McpServer/oauthLogin/completedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"mcpServer/startupStatus/updated\").annotate({\n        title: \"McpServer/startupStatus/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__McpServerStatusUpdatedNotification,\n    }).annotate({ title: \"McpServer/startupStatus/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"account/updated\").annotate({\n        title: \"Account/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__AccountUpdatedNotification,\n    }).annotate({ title: \"Account/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"account/rateLimits/updated\").annotate({\n        title: \"Account/rateLimits/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__AccountRateLimitsUpdatedNotification,\n    }).annotate({ title: \"Account/rateLimits/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"app/list/updated\").annotate({\n        title: \"App/list/updatedNotificationMethod\",\n      }),\n      params: ServerNotification__AppListUpdatedNotification,\n    }).annotate({ title: \"App/list/updatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"remoteControl/status/changed\").annotate({\n        title: \"RemoteControl/status/changedNotificationMethod\",\n      }),\n      params: ServerNotification__RemoteControlStatusChangedNotification,\n    }).annotate({ title: \"RemoteControl/status/changedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"externalAgentConfig/import/completed\").annotate({\n        title: \"ExternalAgentConfig/import/completedNotificationMethod\",\n      }),\n      params: ServerNotification__ExternalAgentConfigImportCompletedNotification,\n    }).annotate({ title: \"ExternalAgentConfig/import/completedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"fs/changed\").annotate({ title: \"Fs/changedNotificationMethod\" }),\n      params: ServerNotification__FsChangedNotification,\n    }).annotate({ title: \"Fs/changedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/reasoning/summaryTextDelta\").annotate({\n        title: \"Item/reasoning/summaryTextDeltaNotificationMethod\",\n      }),\n      params: ServerNotification__ReasoningSummaryTextDeltaNotification,\n    }).annotate({ title: \"Item/reasoning/summaryTextDeltaNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/reasoning/summaryPartAdded\").annotate({\n        title: \"Item/reasoning/summaryPartAddedNotificationMethod\",\n      }),\n      params: ServerNotification__ReasoningSummaryPartAddedNotification,\n    }).annotate({ title: \"Item/reasoning/summaryPartAddedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"item/reasoning/textDelta\").annotate({\n        title: \"Item/reasoning/textDeltaNotificationMethod\",\n      }),\n      params: ServerNotification__ReasoningTextDeltaNotification,\n    }).annotate({ title: \"Item/reasoning/textDeltaNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/compacted\").annotate({\n        title: \"Thread/compactedNotificationMethod\",\n      }),\n      params: ServerNotification__ContextCompactedNotification,\n    }).annotate({\n      title: \"Thread/compactedNotification\",\n      description: \"Deprecated: Use `ContextCompaction` item type instead.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"model/rerouted\").annotate({\n        title: \"Model/reroutedNotificationMethod\",\n      }),\n      params: ServerNotification__ModelReroutedNotification,\n    }).annotate({ title: \"Model/reroutedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"model/verification\").annotate({\n        title: \"Model/verificationNotificationMethod\",\n      }),\n      params: ServerNotification__ModelVerificationNotification,\n    }).annotate({ title: \"Model/verificationNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"turn/moderationMetadata\").annotate({\n        title: \"Turn/moderationMetadataNotificationMethod\",\n      }),\n      params: ServerNotification__TurnModerationMetadataNotification,\n    }).annotate({ title: \"Turn/moderationMetadataNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"warning\").annotate({ title: \"WarningNotificationMethod\" }),\n      params: ServerNotification__WarningNotification,\n    }).annotate({ title: \"WarningNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"guardianWarning\").annotate({\n        title: \"GuardianWarningNotificationMethod\",\n      }),\n      params: ServerNotification__GuardianWarningNotification,\n    }).annotate({ title: \"GuardianWarningNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"deprecationNotice\").annotate({\n        title: \"DeprecationNoticeNotificationMethod\",\n      }),\n      params: ServerNotification__DeprecationNoticeNotification,\n    }).annotate({ title: \"DeprecationNoticeNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"configWarning\").annotate({\n        title: \"ConfigWarningNotificationMethod\",\n      }),\n      params: ServerNotification__ConfigWarningNotification,\n    }).annotate({ title: \"ConfigWarningNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"fuzzyFileSearch/sessionUpdated\").annotate({\n        title: \"FuzzyFileSearch/sessionUpdatedNotificationMethod\",\n      }),\n      params: ServerNotification__FuzzyFileSearchSessionUpdatedNotification,\n    }).annotate({ title: \"FuzzyFileSearch/sessionUpdatedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"fuzzyFileSearch/sessionCompleted\").annotate({\n        title: \"FuzzyFileSearch/sessionCompletedNotificationMethod\",\n      }),\n      params: ServerNotification__FuzzyFileSearchSessionCompletedNotification,\n    }).annotate({ title: \"FuzzyFileSearch/sessionCompletedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/started\").annotate({\n        title: \"Thread/realtime/startedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeStartedNotification,\n    }).annotate({ title: \"Thread/realtime/startedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/itemAdded\").annotate({\n        title: \"Thread/realtime/itemAddedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeItemAddedNotification,\n    }).annotate({ title: \"Thread/realtime/itemAddedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/transcript/delta\").annotate({\n        title: \"Thread/realtime/transcript/deltaNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeTranscriptDeltaNotification,\n    }).annotate({ title: \"Thread/realtime/transcript/deltaNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/transcript/done\").annotate({\n        title: \"Thread/realtime/transcript/doneNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeTranscriptDoneNotification,\n    }).annotate({ title: \"Thread/realtime/transcript/doneNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/outputAudio/delta\").annotate({\n        title: \"Thread/realtime/outputAudio/deltaNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeOutputAudioDeltaNotification,\n    }).annotate({ title: \"Thread/realtime/outputAudio/deltaNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/sdp\").annotate({\n        title: \"Thread/realtime/sdpNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeSdpNotification,\n    }).annotate({ title: \"Thread/realtime/sdpNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/error\").annotate({\n        title: \"Thread/realtime/errorNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeErrorNotification,\n    }).annotate({ title: \"Thread/realtime/errorNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"thread/realtime/closed\").annotate({\n        title: \"Thread/realtime/closedNotificationMethod\",\n      }),\n      params: ServerNotification__ThreadRealtimeClosedNotification,\n    }).annotate({ title: \"Thread/realtime/closedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"windows/worldWritableWarning\").annotate({\n        title: \"Windows/worldWritableWarningNotificationMethod\",\n      }),\n      params: ServerNotification__WindowsWorldWritableWarningNotification,\n    }).annotate({\n      title: \"Windows/worldWritableWarningNotification\",\n      description:\n        \"Notifies the user of world-writable directories on Windows, which cannot be protected by the sandbox.\",\n    }),\n    Schema.Struct({\n      method: Schema.Literal(\"windowsSandbox/setupCompleted\").annotate({\n        title: \"WindowsSandbox/setupCompletedNotificationMethod\",\n      }),\n      params: ServerNotification__WindowsSandboxSetupCompletedNotification,\n    }).annotate({ title: \"WindowsSandbox/setupCompletedNotification\" }),\n    Schema.Struct({\n      method: Schema.Literal(\"account/login/completed\").annotate({\n        title: \"Account/login/completedNotificationMethod\",\n      }),\n      params: ServerNotification__AccountLoginCompletedNotification,\n    }).annotate({ title: \"Account/login/completedNotification\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  title: \"ServerNotification\",\n  description: \"Notification sent from the server to the client.\",\n});\n\nexport type ServerNotification__ByteRange = { readonly end: number; readonly start: number };\nexport const ServerNotification__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type ServerNotification__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const ServerNotification__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type ServerNotification__CollabAgentToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const ServerNotification__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type ServerNotification__CommandExecOutputStream = \"stdout\" | \"stderr\";\nexport const ServerNotification__CommandExecOutputStream = Schema.Literals([\n  \"stdout\",\n  \"stderr\",\n]).annotate({ description: \"Stream label for `command/exec/outputDelta` notifications.\" });\n\nexport type ServerNotification__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const ServerNotification__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type ServerNotification__HookSource =\n  | \"system\"\n  | \"user\"\n  | \"project\"\n  | \"mdm\"\n  | \"sessionFlags\"\n  | \"plugin\"\n  | \"cloudRequirements\"\n  | \"cloudManagedConfig\"\n  | \"legacyManagedConfigFile\"\n  | \"legacyManagedConfigMdm\"\n  | \"unknown\";\nexport const ServerNotification__HookSource = Schema.Literals([\n  \"system\",\n  \"user\",\n  \"project\",\n  \"mdm\",\n  \"sessionFlags\",\n  \"plugin\",\n  \"cloudRequirements\",\n  \"cloudManagedConfig\",\n  \"legacyManagedConfigFile\",\n  \"legacyManagedConfigMdm\",\n  \"unknown\",\n]);\n\nexport type ServerNotification__NetworkAccess = \"restricted\" | \"enabled\";\nexport const ServerNotification__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type ServerNotification__ProcessOutputStream = \"stdout\" | \"stderr\";\nexport const ServerNotification__ProcessOutputStream = Schema.Literals([\n  \"stdout\",\n  \"stderr\",\n]).annotate({ description: \"Stream label for `process/outputDelta` notifications.\" });\n\nexport type ServerNotification__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: ServerNotification__SubAgentSource };\nexport const ServerNotification__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: ServerNotification__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ServerNotification__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const ServerNotification__TurnItemsView = Schema.Literals([\"notLoaded\", \"summary\", \"full\"]);\n\nexport type ServerRequest =\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"item/commandExecution/requestApproval\";\n      readonly params: ServerRequest__CommandExecutionRequestApprovalParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"item/fileChange/requestApproval\";\n      readonly params: ServerRequest__FileChangeRequestApprovalParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"item/tool/requestUserInput\";\n      readonly params: ServerRequest__ToolRequestUserInputParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"mcpServer/elicitation/request\";\n      readonly params: ServerRequest__McpServerElicitationRequestParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"item/permissions/requestApproval\";\n      readonly params: ServerRequest__PermissionsRequestApprovalParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"item/tool/call\";\n      readonly params: ServerRequest__DynamicToolCallParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"account/chatgptAuthTokens/refresh\";\n      readonly params: ServerRequest__ChatgptAuthTokensRefreshParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"attestation/generate\";\n      readonly params: ServerRequest__AttestationGenerateParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"applyPatchApproval\";\n      readonly params: ServerRequest__ApplyPatchApprovalParams;\n    }\n  | {\n      readonly id: ServerRequest__RequestId;\n      readonly method: \"execCommandApproval\";\n      readonly params: ServerRequest__ExecCommandApprovalParams;\n    };\nexport const ServerRequest = Schema.Union(\n  [\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"item/commandExecution/requestApproval\").annotate({\n        title: \"Item/commandExecution/requestApprovalRequestMethod\",\n      }),\n      params: ServerRequest__CommandExecutionRequestApprovalParams,\n    }).annotate({\n      title: \"Item/commandExecution/requestApprovalRequest\",\n      description:\n        \"NEW APIs Sent when approval is requested for a specific command execution. This request is used for Turns started via turn/start.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"item/fileChange/requestApproval\").annotate({\n        title: \"Item/fileChange/requestApprovalRequestMethod\",\n      }),\n      params: ServerRequest__FileChangeRequestApprovalParams,\n    }).annotate({\n      title: \"Item/fileChange/requestApprovalRequest\",\n      description:\n        \"Sent when approval is requested for a specific file change. This request is used for Turns started via turn/start.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"item/tool/requestUserInput\").annotate({\n        title: \"Item/tool/requestUserInputRequestMethod\",\n      }),\n      params: ServerRequest__ToolRequestUserInputParams,\n    }).annotate({\n      title: \"Item/tool/requestUserInputRequest\",\n      description: \"EXPERIMENTAL - Request input from the user for a tool call.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"mcpServer/elicitation/request\").annotate({\n        title: \"McpServer/elicitation/requestRequestMethod\",\n      }),\n      params: ServerRequest__McpServerElicitationRequestParams,\n    }).annotate({\n      title: \"McpServer/elicitation/requestRequest\",\n      description: \"Request input for an MCP server elicitation.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"item/permissions/requestApproval\").annotate({\n        title: \"Item/permissions/requestApprovalRequestMethod\",\n      }),\n      params: ServerRequest__PermissionsRequestApprovalParams,\n    }).annotate({\n      title: \"Item/permissions/requestApprovalRequest\",\n      description: \"Request approval for additional permissions from the user.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"item/tool/call\").annotate({ title: \"Item/tool/callRequestMethod\" }),\n      params: ServerRequest__DynamicToolCallParams,\n    }).annotate({\n      title: \"Item/tool/callRequest\",\n      description: \"Execute a dynamic tool call on the client.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"account/chatgptAuthTokens/refresh\").annotate({\n        title: \"Account/chatgptAuthTokens/refreshRequestMethod\",\n      }),\n      params: ServerRequest__ChatgptAuthTokensRefreshParams,\n    }).annotate({ title: \"Account/chatgptAuthTokens/refreshRequest\" }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"attestation/generate\").annotate({\n        title: \"Attestation/generateRequestMethod\",\n      }),\n      params: ServerRequest__AttestationGenerateParams,\n    }).annotate({\n      title: \"Attestation/generateRequest\",\n      description: \"Generate a fresh upstream attestation result on demand.\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"applyPatchApproval\").annotate({\n        title: \"ApplyPatchApprovalRequestMethod\",\n      }),\n      params: ServerRequest__ApplyPatchApprovalParams,\n    }).annotate({\n      title: \"ApplyPatchApprovalRequest\",\n      description:\n        \"DEPRECATED APIs below Request to approve a patch. This request is used for Turns started via the legacy APIs (i.e. SendUserTurn, SendUserMessage).\",\n    }),\n    Schema.Struct({\n      id: ServerRequest__RequestId,\n      method: Schema.Literal(\"execCommandApproval\").annotate({\n        title: \"ExecCommandApprovalRequestMethod\",\n      }),\n      params: ServerRequest__ExecCommandApprovalParams,\n    }).annotate({\n      title: \"ExecCommandApprovalRequest\",\n      description:\n        \"Request to exec a command. This request is used for Turns started via the legacy APIs (i.e. SendUserTurn, SendUserMessage).\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  title: \"ServerRequest\",\n  description: \"Request initiated from the server and sent to the client.\",\n});\n\nexport type ServerRequest__AdditionalPermissionProfile = {\n  readonly fileSystem?: ServerRequest__AdditionalFileSystemPermissions | null;\n  readonly network?: ServerRequest__AdditionalNetworkPermissions | null;\n};\nexport const ServerRequest__AdditionalPermissionProfile = Schema.Struct({\n  fileSystem: Schema.optionalKey(\n    Schema.Union([ServerRequest__AdditionalFileSystemPermissions, Schema.Null]),\n  ),\n  network: Schema.optionalKey(\n    Schema.Union([ServerRequest__AdditionalNetworkPermissions, Schema.Null]).annotate({\n      description: \"Partial overlay used for per-command permission requests.\",\n    }),\n  ),\n});\n\nexport type ServerRequest__CommandExecutionApprovalDecision =\n  | \"accept\"\n  | \"acceptForSession\"\n  | {\n      readonly acceptWithExecpolicyAmendment: {\n        readonly execpolicy_amendment: ReadonlyArray<string>;\n      };\n    }\n  | {\n      readonly applyNetworkPolicyAmendment: {\n        readonly network_policy_amendment: ServerRequest__NetworkPolicyAmendment;\n      };\n    }\n  | \"decline\"\n  | \"cancel\";\nexport const ServerRequest__CommandExecutionApprovalDecision = Schema.Union(\n  [\n    Schema.Literal(\"accept\").annotate({ description: \"User approved the command.\" }),\n    Schema.Literal(\"acceptForSession\").annotate({\n      description:\n        \"User approved the command and future prompts in the same session-scoped approval cache should run without prompting.\",\n    }),\n    Schema.Struct({\n      acceptWithExecpolicyAmendment: Schema.Struct({\n        execpolicy_amendment: Schema.Array(Schema.String),\n      }),\n    }).annotate({\n      title: \"AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision\",\n      description:\n        \"User approved the command, and wants to apply the proposed execpolicy amendment so future matching commands can run without prompting.\",\n    }),\n    Schema.Struct({\n      applyNetworkPolicyAmendment: Schema.Struct({\n        network_policy_amendment: ServerRequest__NetworkPolicyAmendment,\n      }),\n    }).annotate({\n      title: \"ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision\",\n      description: \"User chose a persistent network policy rule (allow/deny) for this host.\",\n    }),\n    Schema.Literal(\"decline\").annotate({\n      description: \"User denied the command. The agent will continue the turn.\",\n    }),\n    Schema.Literal(\"cancel\").annotate({\n      description: \"User denied the command. The turn will also be immediately interrupted.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type ToolRequestUserInputParams = {\n  readonly itemId: string;\n  readonly questions: ReadonlyArray<ToolRequestUserInputParams__ToolRequestUserInputQuestion>;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const ToolRequestUserInputParams = Schema.Struct({\n  itemId: Schema.String,\n  questions: Schema.Array(ToolRequestUserInputParams__ToolRequestUserInputQuestion),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"ToolRequestUserInputParams\",\n  description: \"EXPERIMENTAL. Params sent with a request_user_input event.\",\n});\n\nexport type ToolRequestUserInputResponse = {\n  readonly answers: {\n    readonly [x: string]: ToolRequestUserInputResponse__ToolRequestUserInputAnswer;\n  };\n};\nexport const ToolRequestUserInputResponse = Schema.Struct({\n  answers: Schema.Record(Schema.String, ToolRequestUserInputResponse__ToolRequestUserInputAnswer),\n}).annotate({\n  title: \"ToolRequestUserInputResponse\",\n  description: \"EXPERIMENTAL. Response payload mapping question ids to answers.\",\n});\n\nexport type V1InitializeParams = {\n  readonly capabilities?: V1InitializeParams__InitializeCapabilities | null;\n  readonly clientInfo: V1InitializeParams__ClientInfo;\n};\nexport const V1InitializeParams = Schema.Struct({\n  capabilities: Schema.optionalKey(\n    Schema.Union([V1InitializeParams__InitializeCapabilities, Schema.Null]),\n  ),\n  clientInfo: V1InitializeParams__ClientInfo,\n}).annotate({ title: \"InitializeParams\" });\n\nexport type V1InitializeResponse = {\n  readonly codexHome: string;\n  readonly platformFamily: string;\n  readonly platformOs: string;\n  readonly userAgent: string;\n};\nexport const V1InitializeResponse = Schema.Struct({\n  codexHome: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  platformFamily: Schema.String.annotate({\n    description:\n      'Platform family for the running app-server target, for example `\"unix\"` or `\"windows\"`.',\n  }),\n  platformOs: Schema.String.annotate({\n    description:\n      'Operating system for the running app-server target, for example `\"macos\"`, `\"linux\"`, or `\"windows\"`.',\n  }),\n  userAgent: Schema.String,\n}).annotate({ title: \"InitializeResponse\" });\n\nexport type V1InitializeResponse__AbsolutePathBuf = string;\nexport const V1InitializeResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2AccountLoginCompletedNotification = {\n  readonly error?: string | null;\n  readonly loginId?: string | null;\n  readonly success: boolean;\n};\nexport const V2AccountLoginCompletedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  loginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  success: Schema.Boolean,\n}).annotate({ title: \"AccountLoginCompletedNotification\" });\n\nexport type V2AccountRateLimitsUpdatedNotification = {\n  readonly rateLimits: V2AccountRateLimitsUpdatedNotification__RateLimitSnapshot;\n};\nexport const V2AccountRateLimitsUpdatedNotification = Schema.Struct({\n  rateLimits: V2AccountRateLimitsUpdatedNotification__RateLimitSnapshot,\n}).annotate({\n  title: \"AccountRateLimitsUpdatedNotification\",\n  description:\n    \"Sparse rolling rate-limit update.\\n\\nClients should merge available values into the most recent `account/rateLimits/read` response or refetch that snapshot. Nullable account metadata may be unavailable in a rolling update and does not clear a previously observed value.\",\n});\n\nexport type V2AccountUpdatedNotification = {\n  readonly authMode?: V2AccountUpdatedNotification__AuthMode | null;\n  readonly planType?: V2AccountUpdatedNotification__PlanType | null;\n};\nexport const V2AccountUpdatedNotification = Schema.Struct({\n  authMode: Schema.optionalKey(Schema.Union([V2AccountUpdatedNotification__AuthMode, Schema.Null])),\n  planType: Schema.optionalKey(Schema.Union([V2AccountUpdatedNotification__PlanType, Schema.Null])),\n}).annotate({ title: \"AccountUpdatedNotification\" });\n\nexport type V2AgentMessageDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2AgentMessageDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"AgentMessageDeltaNotification\" });\n\nexport type V2AppListUpdatedNotification = {\n  readonly data: ReadonlyArray<V2AppListUpdatedNotification__AppInfo>;\n};\nexport const V2AppListUpdatedNotification = Schema.Struct({\n  data: Schema.Array(V2AppListUpdatedNotification__AppInfo),\n}).annotate({\n  title: \"AppListUpdatedNotification\",\n  description: \"EXPERIMENTAL - notification emitted when the app list changes.\",\n});\n\nexport type V2AppsListParams = {\n  readonly cursor?: string | null;\n  readonly forceRefetch?: boolean;\n  readonly limit?: number | null;\n  readonly threadId?: string | null;\n};\nexport const V2AppsListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  forceRefetch: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"When true, bypass app caches and fetch the latest data from sources.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional thread id used to evaluate app feature gating from that thread's config.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  title: \"AppsListParams\",\n  description: \"EXPERIMENTAL - list available apps/connectors.\",\n});\n\nexport type V2AppsListResponse = {\n  readonly data: ReadonlyArray<V2AppsListResponse__AppInfo>;\n  readonly nextCursor?: string | null;\n};\nexport const V2AppsListResponse = Schema.Struct({\n  data: Schema.Array(V2AppsListResponse__AppInfo),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"AppsListResponse\", description: \"EXPERIMENTAL - app list response.\" });\n\nexport type V2CancelLoginAccountParams = { readonly loginId: string };\nexport const V2CancelLoginAccountParams = Schema.Struct({ loginId: Schema.String }).annotate({\n  title: \"CancelLoginAccountParams\",\n});\n\nexport type V2CancelLoginAccountResponse = {\n  readonly status: V2CancelLoginAccountResponse__CancelLoginAccountStatus;\n};\nexport const V2CancelLoginAccountResponse = Schema.Struct({\n  status: V2CancelLoginAccountResponse__CancelLoginAccountStatus,\n}).annotate({ title: \"CancelLoginAccountResponse\" });\n\nexport type V2CommandExecOutputDeltaNotification = {\n  readonly capReached: boolean;\n  readonly deltaBase64: string;\n  readonly processId: string;\n  readonly stream: \"stdout\" | \"stderr\";\n};\nexport const V2CommandExecOutputDeltaNotification = Schema.Struct({\n  capReached: Schema.Boolean.annotate({\n    description:\n      \"`true` on the final streamed chunk for a stream when `outputBytesCap` truncated later output on that stream.\",\n  }),\n  deltaBase64: Schema.String.annotate({ description: \"Base64-encoded output bytes.\" }),\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n  stream: Schema.Literals([\"stdout\", \"stderr\"]).annotate({\n    description: \"Stream label for `command/exec/outputDelta` notifications.\",\n  }),\n}).annotate({\n  title: \"CommandExecOutputDeltaNotification\",\n  description:\n    \"Base64-encoded output chunk emitted for a streaming `command/exec` request.\\n\\nThese notifications are connection-scoped. If the originating connection closes, the server terminates the process.\",\n});\n\nexport type V2CommandExecOutputDeltaNotification__CommandExecOutputStream = \"stdout\" | \"stderr\";\nexport const V2CommandExecOutputDeltaNotification__CommandExecOutputStream = Schema.Literals([\n  \"stdout\",\n  \"stderr\",\n]).annotate({ description: \"Stream label for `command/exec/outputDelta` notifications.\" });\n\nexport type V2CommandExecParams = {\n  readonly command: ReadonlyArray<string>;\n  readonly cwd?: string | null;\n  readonly disableOutputCap?: boolean;\n  readonly disableTimeout?: boolean;\n  readonly env?: { readonly [x: string]: string | null } | null;\n  readonly outputBytesCap?: number | null;\n  readonly processId?: string | null;\n  readonly sandboxPolicy?: V2CommandExecParams__SandboxPolicy | null;\n  readonly size?: V2CommandExecParams__CommandExecTerminalSize | null;\n  readonly streamStdin?: boolean;\n  readonly streamStdoutStderr?: boolean;\n  readonly timeoutMs?: number | null;\n  readonly tty?: boolean;\n};\nexport const V2CommandExecParams = Schema.Struct({\n  command: Schema.Array(Schema.String).annotate({\n    description: \"Command argv vector. Empty arrays are rejected.\",\n  }),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional working directory. Defaults to the server cwd.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  disableOutputCap: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Disable stdout/stderr capture truncation for this request.\\n\\nCannot be combined with `outputBytesCap`.\",\n    }),\n  ),\n  disableTimeout: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Disable the timeout entirely for this request.\\n\\nCannot be combined with `timeoutMs`.\",\n    }),\n  ),\n  env: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Union([Schema.String, Schema.Null])).annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  outputBytesCap: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description:\n          \"Optional per-stream stdout/stderr capture cap in bytes.\\n\\nWhen omitted, the server default applies. Cannot be combined with `disableOutputCap`.\",\n        format: \"uint\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  processId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sandboxPolicy: Schema.optionalKey(\n    Schema.Union([V2CommandExecParams__SandboxPolicy, Schema.Null]).annotate({\n      description:\n        \"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`.\",\n    }),\n  ),\n  size: Schema.optionalKey(\n    Schema.Union([V2CommandExecParams__CommandExecTerminalSize, Schema.Null]).annotate({\n      description: \"Optional initial PTY size in character cells. Only valid when `tty` is true.\",\n    }),\n  ),\n  streamStdin: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Allow follow-up `command/exec/write` requests to write stdin bytes.\\n\\nRequires a client-supplied `processId`.\",\n    }),\n  ),\n  streamStdoutStderr: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Stream stdout/stderr via `command/exec/outputDelta` notifications.\\n\\nStreamed bytes are not duplicated into the final response and require a client-supplied `processId`.\",\n    }),\n  ),\n  timeoutMs: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description:\n          \"Optional timeout in milliseconds.\\n\\nWhen omitted, the server default applies. Cannot be combined with `disableTimeout`.\",\n        format: \"int64\",\n      }).check(Schema.isInt()),\n      Schema.Null,\n    ]),\n  ),\n  tty: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Enable PTY mode.\\n\\nThis implies `streamStdin` and `streamStdoutStderr`.\",\n    }),\n  ),\n}).annotate({\n  title: \"CommandExecParams\",\n  description:\n    \"Run a standalone command (argv vector) in the server sandbox without creating a thread or turn.\\n\\nThe final `command/exec` response is deferred until the process exits and is sent only after all `command/exec/outputDelta` notifications for that connection have been emitted.\",\n});\n\nexport type V2CommandExecParams__NetworkAccess = \"restricted\" | \"enabled\";\nexport const V2CommandExecParams__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type V2CommandExecResizeParams = {\n  readonly processId: string;\n  readonly size: { readonly cols: number; readonly rows: number };\n};\nexport const V2CommandExecResizeParams = Schema.Struct({\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n  size: Schema.Struct({\n    cols: Schema.Number.annotate({\n      description: \"Terminal width in character cells.\",\n      format: \"uint16\",\n    })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n    rows: Schema.Number.annotate({\n      description: \"Terminal height in character cells.\",\n      format: \"uint16\",\n    })\n      .check(Schema.isInt())\n      .check(Schema.isGreaterThanOrEqualTo(0)),\n  }).annotate({ description: \"PTY size in character cells for `command/exec` PTY sessions.\" }),\n}).annotate({\n  title: \"CommandExecResizeParams\",\n  description: \"Resize a running PTY-backed `command/exec` session.\",\n});\n\nexport type V2CommandExecResizeParams__CommandExecTerminalSize = {\n  readonly cols: number;\n  readonly rows: number;\n};\nexport const V2CommandExecResizeParams__CommandExecTerminalSize = Schema.Struct({\n  cols: Schema.Number.annotate({\n    description: \"Terminal width in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  rows: Schema.Number.annotate({\n    description: \"Terminal height in character cells.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({ description: \"PTY size in character cells for `command/exec` PTY sessions.\" });\n\nexport type V2CommandExecResizeResponse = {};\nexport const V2CommandExecResizeResponse = Schema.Struct({}).annotate({\n  title: \"CommandExecResizeResponse\",\n  description: \"Empty success response for `command/exec/resize`.\",\n});\n\nexport type V2CommandExecResponse = {\n  readonly exitCode: number;\n  readonly stderr: string;\n  readonly stdout: string;\n};\nexport const V2CommandExecResponse = Schema.Struct({\n  exitCode: Schema.Number.annotate({ description: \"Process exit code.\", format: \"int32\" }).check(\n    Schema.isInt(),\n  ),\n  stderr: Schema.String.annotate({\n    description:\n      \"Buffered stderr capture.\\n\\nEmpty when stderr was streamed via `command/exec/outputDelta`.\",\n  }),\n  stdout: Schema.String.annotate({\n    description:\n      \"Buffered stdout capture.\\n\\nEmpty when stdout was streamed via `command/exec/outputDelta`.\",\n  }),\n}).annotate({\n  title: \"CommandExecResponse\",\n  description: \"Final buffered result for `command/exec`.\",\n});\n\nexport type V2CommandExecTerminateParams = { readonly processId: string };\nexport const V2CommandExecTerminateParams = Schema.Struct({\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n}).annotate({\n  title: \"CommandExecTerminateParams\",\n  description: \"Terminate a running `command/exec` session.\",\n});\n\nexport type V2CommandExecTerminateResponse = {};\nexport const V2CommandExecTerminateResponse = Schema.Struct({}).annotate({\n  title: \"CommandExecTerminateResponse\",\n  description: \"Empty success response for `command/exec/terminate`.\",\n});\n\nexport type V2CommandExecutionOutputDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2CommandExecutionOutputDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"CommandExecutionOutputDeltaNotification\" });\n\nexport type V2CommandExecWriteParams = {\n  readonly closeStdin?: boolean;\n  readonly deltaBase64?: string | null;\n  readonly processId: string;\n};\nexport const V2CommandExecWriteParams = Schema.Struct({\n  closeStdin: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Close stdin after writing `deltaBase64`, if present.\",\n    }),\n  ),\n  deltaBase64: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional base64-encoded stdin bytes to write.\" }),\n      Schema.Null,\n    ]),\n  ),\n  processId: Schema.String.annotate({\n    description:\n      \"Client-supplied, connection-scoped `processId` from the original `command/exec` request.\",\n  }),\n}).annotate({\n  title: \"CommandExecWriteParams\",\n  description: \"Write stdin bytes to a running `command/exec` session, close stdin, or both.\",\n});\n\nexport type V2CommandExecWriteResponse = {};\nexport const V2CommandExecWriteResponse = Schema.Struct({}).annotate({\n  title: \"CommandExecWriteResponse\",\n  description: \"Empty success response for `command/exec/write`.\",\n});\n\nexport type V2ConfigBatchWriteParams = {\n  readonly edits: ReadonlyArray<V2ConfigBatchWriteParams__ConfigEdit>;\n  readonly expectedVersion?: string | null;\n  readonly filePath?: string | null;\n  readonly reloadUserConfig?: boolean;\n};\nexport const V2ConfigBatchWriteParams = Schema.Struct({\n  edits: Schema.Array(V2ConfigBatchWriteParams__ConfigEdit),\n  expectedVersion: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  filePath: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Path to the config file to write; defaults to the user's `config.toml` when omitted.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  reloadUserConfig: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"When true, hot-reload the updated user config into all loaded threads after writing.\",\n    }),\n  ),\n}).annotate({ title: \"ConfigBatchWriteParams\" });\n\nexport type V2ConfigReadParams = { readonly cwd?: string | null; readonly includeLayers?: boolean };\nexport const V2ConfigReadParams = Schema.Struct({\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  includeLayers: Schema.optionalKey(Schema.Boolean),\n}).annotate({ title: \"ConfigReadParams\" });\n\nexport type V2ConfigReadResponse = {\n  readonly config: V2ConfigReadResponse__Config;\n  readonly layers?: ReadonlyArray<V2ConfigReadResponse__ConfigLayer> | null;\n  readonly origins: { readonly [x: string]: V2ConfigReadResponse__ConfigLayerMetadata };\n};\nexport const V2ConfigReadResponse = Schema.Struct({\n  config: V2ConfigReadResponse__Config,\n  layers: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2ConfigReadResponse__ConfigLayer), Schema.Null]),\n  ),\n  origins: Schema.Record(Schema.String, V2ConfigReadResponse__ConfigLayerMetadata),\n}).annotate({ title: \"ConfigReadResponse\" });\n\nexport type V2ConfigReadResponse__AppConfig = {\n  readonly approvals_reviewer?: V2ConfigReadResponse__ApprovalsReviewer | null;\n  readonly default_tools_approval_mode?: V2ConfigReadResponse__AppToolApproval | null;\n  readonly default_tools_enabled?: boolean | null;\n  readonly destructive_enabled?: boolean | null;\n  readonly enabled?: boolean;\n  readonly open_world_enabled?: boolean | null;\n  readonly tools?: V2ConfigReadResponse__AppToolsConfig | null;\n};\nexport const V2ConfigReadResponse__AppConfig = Schema.Struct({\n  approvals_reviewer: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__ApprovalsReviewer, Schema.Null]),\n  ),\n  default_tools_approval_mode: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__AppToolApproval, Schema.Null]),\n  ),\n  default_tools_enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  destructive_enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  enabled: Schema.optionalKey(Schema.Boolean.annotate({ default: true })),\n  open_world_enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  tools: Schema.optionalKey(Schema.Union([V2ConfigReadResponse__AppToolsConfig, Schema.Null])),\n});\n\nexport type V2ConfigReadResponse__AppsConfig = {\n  readonly _default?: V2ConfigReadResponse__AppsDefaultConfig | null;\n};\nexport const V2ConfigReadResponse__AppsConfig = Schema.Struct({\n  _default: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__AppsDefaultConfig, Schema.Null]),\n  ),\n});\n\nexport type V2ConfigReadResponse__AppToolConfig = {\n  readonly approval_mode?: V2ConfigReadResponse__AppToolApproval | null;\n  readonly enabled?: boolean | null;\n};\nexport const V2ConfigReadResponse__AppToolConfig = Schema.Struct({\n  approval_mode: Schema.optionalKey(\n    Schema.Union([V2ConfigReadResponse__AppToolApproval, Schema.Null]),\n  ),\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n});\n\nexport type V2ConfigRequirementsReadResponse = {\n  readonly requirements?: V2ConfigRequirementsReadResponse__ConfigRequirements | null;\n};\nexport const V2ConfigRequirementsReadResponse = Schema.Struct({\n  requirements: Schema.optionalKey(\n    Schema.Union([V2ConfigRequirementsReadResponse__ConfigRequirements, Schema.Null]).annotate({\n      description:\n        \"Null if no requirements are configured (e.g. no requirements.toml/MDM entries).\",\n    }),\n  ),\n}).annotate({ title: \"ConfigRequirementsReadResponse\" });\n\nexport type V2ConfigRequirementsReadResponse__ApprovalsReviewer =\n  | \"user\"\n  | \"auto_review\"\n  | \"guardian_subagent\";\nexport const V2ConfigRequirementsReadResponse__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ConfigRequirementsReadResponse__ManagedHooksRequirements = {\n  readonly PermissionRequest: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly PostCompact: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly PostToolUse: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly PreCompact: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly PreToolUse: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly SessionStart: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly Stop: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly SubagentStart: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly SubagentStop: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly UserPromptSubmit: ReadonlyArray<V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup>;\n  readonly managedDir?: string | null;\n  readonly windowsManagedDir?: string | null;\n};\nexport const V2ConfigRequirementsReadResponse__ManagedHooksRequirements = Schema.Struct({\n  PermissionRequest: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  PostCompact: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  PostToolUse: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  PreCompact: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  PreToolUse: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  SessionStart: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  Stop: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  SubagentStart: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  SubagentStop: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  UserPromptSubmit: Schema.Array(V2ConfigRequirementsReadResponse__ConfiguredHookMatcherGroup),\n  managedDir: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  windowsManagedDir: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ConfigRequirementsReadResponse__NetworkRequirements = {\n  readonly allowLocalBinding?: boolean | null;\n  readonly allowUnixSockets?: ReadonlyArray<string> | null;\n  readonly allowUpstreamProxy?: boolean | null;\n  readonly allowedDomains?: ReadonlyArray<string> | null;\n  readonly dangerouslyAllowAllUnixSockets?: boolean | null;\n  readonly dangerouslyAllowNonLoopbackProxy?: boolean | null;\n  readonly deniedDomains?: ReadonlyArray<string> | null;\n  readonly domains?: {\n    readonly [x: string]: V2ConfigRequirementsReadResponse__NetworkDomainPermission;\n  } | null;\n  readonly enabled?: boolean | null;\n  readonly httpPort?: number | null;\n  readonly managedAllowedDomainsOnly?: boolean | null;\n  readonly socksPort?: number | null;\n  readonly unixSockets?: {\n    readonly [x: string]: V2ConfigRequirementsReadResponse__NetworkUnixSocketPermission;\n  } | null;\n};\nexport const V2ConfigRequirementsReadResponse__NetworkRequirements = Schema.Struct({\n  allowLocalBinding: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  allowUnixSockets: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description: \"Legacy compatibility view derived from `unix_sockets`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  allowUpstreamProxy: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  allowedDomains: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description: \"Legacy compatibility view derived from `domains`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  dangerouslyAllowAllUnixSockets: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  dangerouslyAllowNonLoopbackProxy: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  deniedDomains: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description: \"Legacy compatibility view derived from `domains`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  domains: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(\n        Schema.String,\n        V2ConfigRequirementsReadResponse__NetworkDomainPermission,\n      ).annotate({ description: \"Canonical network permission map for `experimental_network`.\" }),\n      Schema.Null,\n    ]),\n  ),\n  enabled: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  httpPort: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint16\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  managedAllowedDomainsOnly: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description:\n          \"When true, only managed allowlist entries are respected while managed network enforcement is active.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  socksPort: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"uint16\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  unixSockets: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(\n        Schema.String,\n        V2ConfigRequirementsReadResponse__NetworkUnixSocketPermission,\n      ).annotate({\n        description: \"Canonical unix socket permission map for `experimental_network`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type V2ConfigValueWriteParams = {\n  readonly expectedVersion?: string | null;\n  readonly filePath?: string | null;\n  readonly keyPath: string;\n  readonly mergeStrategy: V2ConfigValueWriteParams__MergeStrategy;\n  readonly value: unknown;\n};\nexport const V2ConfigValueWriteParams = Schema.Struct({\n  expectedVersion: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  filePath: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Path to the config file to write; defaults to the user's `config.toml` when omitted.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  keyPath: Schema.String,\n  mergeStrategy: V2ConfigValueWriteParams__MergeStrategy,\n  value: Schema.Unknown,\n}).annotate({ title: \"ConfigValueWriteParams\" });\n\nexport type V2ConfigWarningNotification = {\n  readonly details?: string | null;\n  readonly path?: string | null;\n  readonly range?: V2ConfigWarningNotification__TextRange | null;\n  readonly summary: string;\n};\nexport const V2ConfigWarningNotification = Schema.Struct({\n  details: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional extra guidance or error details.\" }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional path to the config file that triggered the warning.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  range: Schema.optionalKey(\n    Schema.Union([V2ConfigWarningNotification__TextRange, Schema.Null]).annotate({\n      description: \"Optional range for the error location inside the config file.\",\n    }),\n  ),\n  summary: Schema.String.annotate({ description: \"Concise summary of the warning.\" }),\n}).annotate({ title: \"ConfigWarningNotification\" });\n\nexport type V2ConfigWriteResponse = {\n  readonly filePath: string;\n  readonly overriddenMetadata?: V2ConfigWriteResponse__OverriddenMetadata | null;\n  readonly status: V2ConfigWriteResponse__WriteStatus;\n  readonly version: string;\n};\nexport const V2ConfigWriteResponse = Schema.Struct({\n  filePath: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  overriddenMetadata: Schema.optionalKey(\n    Schema.Union([V2ConfigWriteResponse__OverriddenMetadata, Schema.Null]),\n  ),\n  status: V2ConfigWriteResponse__WriteStatus,\n  version: Schema.String,\n}).annotate({ title: \"ConfigWriteResponse\" });\n\nexport type V2ContextCompactedNotification = { readonly threadId: string; readonly turnId: string };\nexport const V2ContextCompactedNotification = Schema.Struct({\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"ContextCompactedNotification\",\n  description: \"Deprecated: Use `ContextCompaction` item type instead.\",\n});\n\nexport type V2DeprecationNoticeNotification = {\n  readonly details?: string | null;\n  readonly summary: string;\n};\nexport const V2DeprecationNoticeNotification = Schema.Struct({\n  details: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional extra guidance, such as migration steps or rationale.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  summary: Schema.String.annotate({ description: \"Concise summary of what is deprecated.\" }),\n}).annotate({ title: \"DeprecationNoticeNotification\" });\n\nexport type V2ErrorNotification = {\n  readonly error: V2ErrorNotification__TurnError;\n  readonly threadId: string;\n  readonly turnId: string;\n  readonly willRetry: boolean;\n};\nexport const V2ErrorNotification = Schema.Struct({\n  error: V2ErrorNotification__TurnError,\n  threadId: Schema.String,\n  turnId: Schema.String,\n  willRetry: Schema.Boolean,\n}).annotate({ title: \"ErrorNotification\" });\n\nexport type V2ExperimentalFeatureEnablementSetParams = {\n  readonly enablement: { readonly [x: string]: boolean };\n};\nexport const V2ExperimentalFeatureEnablementSetParams = Schema.Struct({\n  enablement: Schema.Record(Schema.String, Schema.Boolean).annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ title: \"ExperimentalFeatureEnablementSetParams\" });\n\nexport type V2ExperimentalFeatureEnablementSetResponse = {\n  readonly enablement: { readonly [x: string]: boolean };\n};\nexport const V2ExperimentalFeatureEnablementSetResponse = Schema.Struct({\n  enablement: Schema.Record(Schema.String, Schema.Boolean).annotate({\n    description: \"Feature enablement entries updated by this request.\",\n  }),\n}).annotate({ title: \"ExperimentalFeatureEnablementSetResponse\" });\n\nexport type V2ExperimentalFeatureListParams = {\n  readonly cursor?: string | null;\n  readonly limit?: number | null;\n  readonly threadId?: string | null;\n};\nexport const V2ExperimentalFeatureListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ExperimentalFeatureListParams\" });\n\nexport type V2ExperimentalFeatureListResponse = {\n  readonly data: ReadonlyArray<V2ExperimentalFeatureListResponse__ExperimentalFeature>;\n  readonly nextCursor?: string | null;\n};\nexport const V2ExperimentalFeatureListResponse = Schema.Struct({\n  data: Schema.Array(V2ExperimentalFeatureListResponse__ExperimentalFeature),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ExperimentalFeatureListResponse\" });\n\nexport type V2ExperimentalFeatureListResponse__ExperimentalFeatureStage =\n  | \"beta\"\n  | \"underDevelopment\"\n  | \"stable\"\n  | \"deprecated\"\n  | \"removed\";\nexport const V2ExperimentalFeatureListResponse__ExperimentalFeatureStage = Schema.Literals([\n  \"beta\",\n  \"underDevelopment\",\n  \"stable\",\n  \"deprecated\",\n  \"removed\",\n]);\n\nexport type V2ExternalAgentConfigDetectParams = {\n  readonly cwds?: ReadonlyArray<string> | null;\n  readonly includeHome?: boolean;\n};\nexport const V2ExternalAgentConfigDetectParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description: \"Zero or more working directories to include for repo-scoped detection.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  includeHome: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"If true, include detection under the user's home (~/.claude, ~/.codex, etc.).\",\n    }),\n  ),\n}).annotate({ title: \"ExternalAgentConfigDetectParams\" });\n\nexport type V2ExternalAgentConfigDetectResponse = {\n  readonly items: ReadonlyArray<V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItem>;\n};\nexport const V2ExternalAgentConfigDetectResponse = Schema.Struct({\n  items: Schema.Array(V2ExternalAgentConfigDetectResponse__ExternalAgentConfigMigrationItem),\n}).annotate({ title: \"ExternalAgentConfigDetectResponse\" });\n\nexport type V2ExternalAgentConfigImportCompletedNotification = {};\nexport const V2ExternalAgentConfigImportCompletedNotification = Schema.Struct({}).annotate({\n  title: \"ExternalAgentConfigImportCompletedNotification\",\n});\n\nexport type V2ExternalAgentConfigImportParams = {\n  readonly migrationItems: ReadonlyArray<V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItem>;\n};\nexport const V2ExternalAgentConfigImportParams = Schema.Struct({\n  migrationItems: Schema.Array(V2ExternalAgentConfigImportParams__ExternalAgentConfigMigrationItem),\n}).annotate({ title: \"ExternalAgentConfigImportParams\" });\n\nexport type V2ExternalAgentConfigImportResponse = {};\nexport const V2ExternalAgentConfigImportResponse = Schema.Struct({}).annotate({\n  title: \"ExternalAgentConfigImportResponse\",\n});\n\nexport type V2FeedbackUploadParams = {\n  readonly classification: string;\n  readonly extraLogFiles?: ReadonlyArray<string> | null;\n  readonly includeLogs?: boolean;\n  readonly reason?: string | null;\n  readonly tags?: { readonly [x: string]: string } | null;\n  readonly threadId?: string | null;\n};\nexport const V2FeedbackUploadParams = Schema.Struct({\n  classification: Schema.String,\n  extraLogFiles: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  includeLogs: Schema.optionalKey(Schema.Boolean),\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  tags: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.String), Schema.Null]),\n  ),\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"FeedbackUploadParams\" });\n\nexport type V2FeedbackUploadResponse = { readonly threadId: string };\nexport const V2FeedbackUploadResponse = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"FeedbackUploadResponse\",\n});\n\nexport type V2FileChangeOutputDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2FileChangeOutputDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"FileChangeOutputDeltaNotification\",\n  description:\n    \"Deprecated legacy notification for `apply_patch` textual output.\\n\\nThe server no longer emits this notification.\",\n});\n\nexport type V2FileChangePatchUpdatedNotification = {\n  readonly changes: ReadonlyArray<V2FileChangePatchUpdatedNotification__FileUpdateChange>;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2FileChangePatchUpdatedNotification = Schema.Struct({\n  changes: Schema.Array(V2FileChangePatchUpdatedNotification__FileUpdateChange),\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"FileChangePatchUpdatedNotification\" });\n\nexport type V2FsChangedNotification = {\n  readonly changedPaths: ReadonlyArray<V2FsChangedNotification__AbsolutePathBuf>;\n  readonly watchId: string;\n};\nexport const V2FsChangedNotification = Schema.Struct({\n  changedPaths: Schema.Array(V2FsChangedNotification__AbsolutePathBuf).annotate({\n    description: \"File or directory paths associated with this event.\",\n  }),\n  watchId: Schema.String.annotate({\n    description: \"Watch identifier previously provided to `fs/watch`.\",\n  }),\n}).annotate({\n  title: \"FsChangedNotification\",\n  description: \"Filesystem watch notification emitted for `fs/watch` subscribers.\",\n});\n\nexport type V2FsCopyParams = {\n  readonly destinationPath: string;\n  readonly recursive?: boolean;\n  readonly sourcePath: string;\n};\nexport const V2FsCopyParams = Schema.Struct({\n  destinationPath: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  recursive: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Required for directory copies; ignored for file copies.\",\n    }),\n  ),\n  sourcePath: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({\n  title: \"FsCopyParams\",\n  description: \"Copy a file or directory tree on the host filesystem.\",\n});\n\nexport type V2FsCopyParams__AbsolutePathBuf = string;\nexport const V2FsCopyParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsCopyResponse = {};\nexport const V2FsCopyResponse = Schema.Struct({}).annotate({\n  title: \"FsCopyResponse\",\n  description: \"Successful response for `fs/copy`.\",\n});\n\nexport type V2FsCreateDirectoryParams = {\n  readonly path: string;\n  readonly recursive?: boolean | null;\n};\nexport const V2FsCreateDirectoryParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  recursive: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"Whether parent directories should also be created. Defaults to `true`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  title: \"FsCreateDirectoryParams\",\n  description: \"Create a directory on the host filesystem.\",\n});\n\nexport type V2FsCreateDirectoryParams__AbsolutePathBuf = string;\nexport const V2FsCreateDirectoryParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsCreateDirectoryResponse = {};\nexport const V2FsCreateDirectoryResponse = Schema.Struct({}).annotate({\n  title: \"FsCreateDirectoryResponse\",\n  description: \"Successful response for `fs/createDirectory`.\",\n});\n\nexport type V2FsGetMetadataParams = { readonly path: string };\nexport const V2FsGetMetadataParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({\n  title: \"FsGetMetadataParams\",\n  description: \"Request metadata for an absolute path.\",\n});\n\nexport type V2FsGetMetadataParams__AbsolutePathBuf = string;\nexport const V2FsGetMetadataParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsGetMetadataResponse = {\n  readonly createdAtMs: number;\n  readonly isDirectory: boolean;\n  readonly isFile: boolean;\n  readonly isSymlink: boolean;\n  readonly modifiedAtMs: number;\n};\nexport const V2FsGetMetadataResponse = Schema.Struct({\n  createdAtMs: Schema.Number.annotate({\n    description: \"File creation time in Unix milliseconds when available, otherwise `0`.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  isDirectory: Schema.Boolean.annotate({\n    description: \"Whether the path resolves to a directory.\",\n  }),\n  isFile: Schema.Boolean.annotate({ description: \"Whether the path resolves to a regular file.\" }),\n  isSymlink: Schema.Boolean.annotate({\n    description: \"Whether the path itself is a symbolic link.\",\n  }),\n  modifiedAtMs: Schema.Number.annotate({\n    description: \"File modification time in Unix milliseconds when available, otherwise `0`.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n}).annotate({\n  title: \"FsGetMetadataResponse\",\n  description: \"Metadata returned by `fs/getMetadata`.\",\n});\n\nexport type V2FsReadDirectoryParams = { readonly path: string };\nexport const V2FsReadDirectoryParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({\n  title: \"FsReadDirectoryParams\",\n  description: \"List direct child names for a directory.\",\n});\n\nexport type V2FsReadDirectoryParams__AbsolutePathBuf = string;\nexport const V2FsReadDirectoryParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsReadDirectoryResponse = {\n  readonly entries: ReadonlyArray<V2FsReadDirectoryResponse__FsReadDirectoryEntry>;\n};\nexport const V2FsReadDirectoryResponse = Schema.Struct({\n  entries: Schema.Array(V2FsReadDirectoryResponse__FsReadDirectoryEntry).annotate({\n    description: \"Direct child entries in the requested directory.\",\n  }),\n}).annotate({\n  title: \"FsReadDirectoryResponse\",\n  description: \"Directory entries returned by `fs/readDirectory`.\",\n});\n\nexport type V2FsReadFileParams = { readonly path: string };\nexport const V2FsReadFileParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ title: \"FsReadFileParams\", description: \"Read a file from the host filesystem.\" });\n\nexport type V2FsReadFileParams__AbsolutePathBuf = string;\nexport const V2FsReadFileParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsReadFileResponse = { readonly dataBase64: string };\nexport const V2FsReadFileResponse = Schema.Struct({\n  dataBase64: Schema.String.annotate({ description: \"File contents encoded as base64.\" }),\n}).annotate({\n  title: \"FsReadFileResponse\",\n  description: \"Base64-encoded file contents returned by `fs/readFile`.\",\n});\n\nexport type V2FsRemoveParams = {\n  readonly force?: boolean | null;\n  readonly path: string;\n  readonly recursive?: boolean | null;\n};\nexport const V2FsRemoveParams = Schema.Struct({\n  force: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"Whether missing paths should be ignored. Defaults to `true`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  recursive: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"Whether directory removal should recurse. Defaults to `true`.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  title: \"FsRemoveParams\",\n  description: \"Remove a file or directory tree from the host filesystem.\",\n});\n\nexport type V2FsRemoveParams__AbsolutePathBuf = string;\nexport const V2FsRemoveParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsRemoveResponse = {};\nexport const V2FsRemoveResponse = Schema.Struct({}).annotate({\n  title: \"FsRemoveResponse\",\n  description: \"Successful response for `fs/remove`.\",\n});\n\nexport type V2FsUnwatchParams = { readonly watchId: string };\nexport const V2FsUnwatchParams = Schema.Struct({\n  watchId: Schema.String.annotate({\n    description: \"Watch identifier previously provided to `fs/watch`.\",\n  }),\n}).annotate({\n  title: \"FsUnwatchParams\",\n  description: \"Stop filesystem watch notifications for a prior `fs/watch`.\",\n});\n\nexport type V2FsUnwatchResponse = {};\nexport const V2FsUnwatchResponse = Schema.Struct({}).annotate({\n  title: \"FsUnwatchResponse\",\n  description: \"Successful response for `fs/unwatch`.\",\n});\n\nexport type V2FsWatchParams = { readonly path: string; readonly watchId: string };\nexport const V2FsWatchParams = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  watchId: Schema.String.annotate({\n    description: \"Connection-scoped watch identifier used for `fs/unwatch` and `fs/changed`.\",\n  }),\n}).annotate({\n  title: \"FsWatchParams\",\n  description: \"Start filesystem watch notifications for an absolute path.\",\n});\n\nexport type V2FsWatchParams__AbsolutePathBuf = string;\nexport const V2FsWatchParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsWatchResponse = { readonly path: string };\nexport const V2FsWatchResponse = Schema.Struct({\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ title: \"FsWatchResponse\", description: \"Successful response for `fs/watch`.\" });\n\nexport type V2FsWatchResponse__AbsolutePathBuf = string;\nexport const V2FsWatchResponse__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsWriteFileParams = { readonly dataBase64: string; readonly path: string };\nexport const V2FsWriteFileParams = Schema.Struct({\n  dataBase64: Schema.String.annotate({ description: \"File contents encoded as base64.\" }),\n  path: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n}).annotate({ title: \"FsWriteFileParams\", description: \"Write a file on the host filesystem.\" });\n\nexport type V2FsWriteFileParams__AbsolutePathBuf = string;\nexport const V2FsWriteFileParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2FsWriteFileResponse = {};\nexport const V2FsWriteFileResponse = Schema.Struct({}).annotate({\n  title: \"FsWriteFileResponse\",\n  description: \"Successful response for `fs/writeFile`.\",\n});\n\nexport type V2GetAccountParams = { readonly refreshToken?: boolean };\nexport const V2GetAccountParams = Schema.Struct({\n  refreshToken: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"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`.\",\n    }),\n  ),\n}).annotate({ title: \"GetAccountParams\" });\n\nexport type V2GetAccountRateLimitsResponse = {\n  readonly rateLimits: {\n    readonly credits?: V2GetAccountRateLimitsResponse__CreditsSnapshot | null;\n    readonly individualLimit?: V2GetAccountRateLimitsResponse__SpendControlLimitSnapshot | null;\n    readonly limitId?: string | null;\n    readonly limitName?: string | null;\n    readonly planType?: V2GetAccountRateLimitsResponse__PlanType | null;\n    readonly primary?: V2GetAccountRateLimitsResponse__RateLimitWindow | null;\n    readonly rateLimitReachedType?: V2GetAccountRateLimitsResponse__RateLimitReachedType | null;\n    readonly secondary?: V2GetAccountRateLimitsResponse__RateLimitWindow | null;\n  };\n  readonly rateLimitsByLimitId?: {\n    readonly [x: string]: V2GetAccountRateLimitsResponse__RateLimitSnapshot;\n  } | null;\n};\nexport const V2GetAccountRateLimitsResponse = Schema.Struct({\n  rateLimits: Schema.Struct({\n    credits: Schema.optionalKey(\n      Schema.Union([V2GetAccountRateLimitsResponse__CreditsSnapshot, Schema.Null]),\n    ),\n    individualLimit: Schema.optionalKey(\n      Schema.Union([V2GetAccountRateLimitsResponse__SpendControlLimitSnapshot, Schema.Null]),\n    ),\n    limitId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    limitName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    planType: Schema.optionalKey(\n      Schema.Union([V2GetAccountRateLimitsResponse__PlanType, Schema.Null]),\n    ),\n    primary: Schema.optionalKey(\n      Schema.Union([V2GetAccountRateLimitsResponse__RateLimitWindow, Schema.Null]),\n    ),\n    rateLimitReachedType: Schema.optionalKey(\n      Schema.Union([V2GetAccountRateLimitsResponse__RateLimitReachedType, Schema.Null]),\n    ),\n    secondary: Schema.optionalKey(\n      Schema.Union([V2GetAccountRateLimitsResponse__RateLimitWindow, Schema.Null]),\n    ),\n  }).annotate({\n    description: \"Backward-compatible single-bucket view; mirrors the historical payload.\",\n  }),\n  rateLimitsByLimitId: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, V2GetAccountRateLimitsResponse__RateLimitSnapshot).annotate({\n        description: \"Multi-bucket view keyed by metered `limit_id` (for example, `codex`).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"GetAccountRateLimitsResponse\" });\n\nexport type V2GetAccountResponse = {\n  readonly account?: V2GetAccountResponse__Account | null;\n  readonly requiresOpenaiAuth: boolean;\n};\nexport const V2GetAccountResponse = Schema.Struct({\n  account: Schema.optionalKey(Schema.Union([V2GetAccountResponse__Account, Schema.Null])),\n  requiresOpenaiAuth: Schema.Boolean,\n}).annotate({ title: \"GetAccountResponse\" });\n\nexport type V2GetAccountTokenUsageResponse = {\n  readonly dailyUsageBuckets?: ReadonlyArray<V2GetAccountTokenUsageResponse__AccountTokenUsageDailyBucket> | null;\n  readonly summary: V2GetAccountTokenUsageResponse__AccountTokenUsageSummary;\n};\nexport const V2GetAccountTokenUsageResponse = Schema.Struct({\n  dailyUsageBuckets: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(V2GetAccountTokenUsageResponse__AccountTokenUsageDailyBucket),\n      Schema.Null,\n    ]),\n  ),\n  summary: V2GetAccountTokenUsageResponse__AccountTokenUsageSummary,\n}).annotate({ title: \"GetAccountTokenUsageResponse\" });\n\nexport type V2GuardianWarningNotification = { readonly message: string; readonly threadId: string };\nexport const V2GuardianWarningNotification = Schema.Struct({\n  message: Schema.String.annotate({\n    description: \"Concise guardian warning message for the user.\",\n  }),\n  threadId: Schema.String.annotate({ description: \"Thread target for the guardian warning.\" }),\n}).annotate({ title: \"GuardianWarningNotification\" });\n\nexport type V2HookCompletedNotification = {\n  readonly run: V2HookCompletedNotification__HookRunSummary;\n  readonly threadId: string;\n  readonly turnId?: string | null;\n};\nexport const V2HookCompletedNotification = Schema.Struct({\n  run: V2HookCompletedNotification__HookRunSummary,\n  threadId: Schema.String,\n  turnId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"HookCompletedNotification\" });\n\nexport type V2HookCompletedNotification__HookSource =\n  | \"system\"\n  | \"user\"\n  | \"project\"\n  | \"mdm\"\n  | \"sessionFlags\"\n  | \"plugin\"\n  | \"cloudRequirements\"\n  | \"cloudManagedConfig\"\n  | \"legacyManagedConfigFile\"\n  | \"legacyManagedConfigMdm\"\n  | \"unknown\";\nexport const V2HookCompletedNotification__HookSource = Schema.Literals([\n  \"system\",\n  \"user\",\n  \"project\",\n  \"mdm\",\n  \"sessionFlags\",\n  \"plugin\",\n  \"cloudRequirements\",\n  \"cloudManagedConfig\",\n  \"legacyManagedConfigFile\",\n  \"legacyManagedConfigMdm\",\n  \"unknown\",\n]);\n\nexport type V2HooksListParams = { readonly cwds?: ReadonlyArray<string> };\nexport const V2HooksListParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({\n      description: \"When empty, defaults to the current session working directory.\",\n    }),\n  ),\n}).annotate({ title: \"HooksListParams\" });\n\nexport type V2HooksListResponse = {\n  readonly data: ReadonlyArray<V2HooksListResponse__HooksListEntry>;\n};\nexport const V2HooksListResponse = Schema.Struct({\n  data: Schema.Array(V2HooksListResponse__HooksListEntry),\n}).annotate({ title: \"HooksListResponse\" });\n\nexport type V2HookStartedNotification = {\n  readonly run: V2HookStartedNotification__HookRunSummary;\n  readonly threadId: string;\n  readonly turnId?: string | null;\n};\nexport const V2HookStartedNotification = Schema.Struct({\n  run: V2HookStartedNotification__HookRunSummary,\n  threadId: Schema.String,\n  turnId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"HookStartedNotification\" });\n\nexport type V2HookStartedNotification__HookSource =\n  | \"system\"\n  | \"user\"\n  | \"project\"\n  | \"mdm\"\n  | \"sessionFlags\"\n  | \"plugin\"\n  | \"cloudRequirements\"\n  | \"cloudManagedConfig\"\n  | \"legacyManagedConfigFile\"\n  | \"legacyManagedConfigMdm\"\n  | \"unknown\";\nexport const V2HookStartedNotification__HookSource = Schema.Literals([\n  \"system\",\n  \"user\",\n  \"project\",\n  \"mdm\",\n  \"sessionFlags\",\n  \"plugin\",\n  \"cloudRequirements\",\n  \"cloudManagedConfig\",\n  \"legacyManagedConfigFile\",\n  \"legacyManagedConfigMdm\",\n  \"unknown\",\n]);\n\nexport type V2ItemCompletedNotification = {\n  readonly completedAtMs: number;\n  readonly item: V2ItemCompletedNotification__ThreadItem;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ItemCompletedNotification = Schema.Struct({\n  completedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this item lifecycle completed.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  item: V2ItemCompletedNotification__ThreadItem,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"ItemCompletedNotification\" });\n\nexport type V2ItemCompletedNotification__ByteRange = {\n  readonly end: number;\n  readonly start: number;\n};\nexport const V2ItemCompletedNotification__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ItemCompletedNotification__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ItemCompletedNotification__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ItemCompletedNotification__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ItemCompletedNotification__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ItemCompletedNotification__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ItemCompletedNotification__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ItemGuardianApprovalReviewCompletedNotification = {\n  readonly action: V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewAction;\n  readonly completedAtMs: number;\n  readonly decisionSource: V2ItemGuardianApprovalReviewCompletedNotification__AutoReviewDecisionSource;\n  readonly review: V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReview;\n  readonly reviewId: string;\n  readonly startedAtMs: number;\n  readonly targetItemId?: string | null;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ItemGuardianApprovalReviewCompletedNotification = Schema.Struct({\n  action: V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReviewAction,\n  completedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this review completed.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  decisionSource: V2ItemGuardianApprovalReviewCompletedNotification__AutoReviewDecisionSource,\n  review: V2ItemGuardianApprovalReviewCompletedNotification__GuardianApprovalReview,\n  reviewId: Schema.String.annotate({ description: \"Stable identifier for this review.\" }),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this review started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  targetItemId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Identifier for the reviewed item or tool call when one exists.\\n\\nIn most cases, one review maps to one target item. The exceptions are - execve reviews, where a single command may contain multiple execve calls to review (only possible when using the shell_zsh_fork feature) - network policy reviews, where there is no target item\\n\\nA network call is triggered by a CommandExecution item, so having a target_item_id set to the CommandExecution item would be misleading because the review is about the network call, not the command execution. Therefore, target_item_id is set to None for network policy reviews.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"ItemGuardianApprovalReviewCompletedNotification\",\n  description:\n    \"[UNSTABLE] Temporary notification payload for approval auto-review. This shape is expected to change soon.\",\n});\n\nexport type V2ItemGuardianApprovalReviewStartedNotification = {\n  readonly action: V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewAction;\n  readonly review: V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReview;\n  readonly reviewId: string;\n  readonly startedAtMs: number;\n  readonly targetItemId?: string | null;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ItemGuardianApprovalReviewStartedNotification = Schema.Struct({\n  action: V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReviewAction,\n  review: V2ItemGuardianApprovalReviewStartedNotification__GuardianApprovalReview,\n  reviewId: Schema.String.annotate({ description: \"Stable identifier for this review.\" }),\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this review started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  targetItemId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Identifier for the reviewed item or tool call when one exists.\\n\\nIn most cases, one review maps to one target item. The exceptions are - execve reviews, where a single command may contain multiple execve calls to review (only possible when using the shell_zsh_fork feature) - network policy reviews, where there is no target item\\n\\nA network call is triggered by a CommandExecution item, so having a target_item_id set to the CommandExecution item would be misleading because the review is about the network call, not the command execution. Therefore, target_item_id is set to None for network policy reviews.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"ItemGuardianApprovalReviewStartedNotification\",\n  description:\n    \"[UNSTABLE] Temporary notification payload for approval auto-review. This shape is expected to change soon.\",\n});\n\nexport type V2ItemStartedNotification = {\n  readonly item: V2ItemStartedNotification__ThreadItem;\n  readonly startedAtMs: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ItemStartedNotification = Schema.Struct({\n  item: V2ItemStartedNotification__ThreadItem,\n  startedAtMs: Schema.Number.annotate({\n    description: \"Unix timestamp (in milliseconds) when this item lifecycle started.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"ItemStartedNotification\" });\n\nexport type V2ItemStartedNotification__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ItemStartedNotification__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ItemStartedNotification__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ItemStartedNotification__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ItemStartedNotification__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ItemStartedNotification__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ItemStartedNotification__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ItemStartedNotification__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ListMcpServerStatusParams = {\n  readonly cursor?: string | null;\n  readonly detail?: V2ListMcpServerStatusParams__McpServerStatusDetail | null;\n  readonly limit?: number | null;\n  readonly threadId?: string | null;\n};\nexport const V2ListMcpServerStatusParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  detail: Schema.optionalKey(\n    Schema.Union([V2ListMcpServerStatusParams__McpServerStatusDetail, Schema.Null]).annotate({\n      description:\n        \"Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a server-defined value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"ListMcpServerStatusParams\" });\n\nexport type V2ListMcpServerStatusResponse = {\n  readonly data: ReadonlyArray<V2ListMcpServerStatusResponse__McpServerStatus>;\n  readonly nextCursor?: string | null;\n};\nexport const V2ListMcpServerStatusResponse = Schema.Struct({\n  data: Schema.Array(V2ListMcpServerStatusResponse__McpServerStatus),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ListMcpServerStatusResponse\" });\n\nexport type V2LoginAccountParams =\n  | { readonly apiKey: string; readonly type: \"apiKey\" }\n  | { readonly codexStreamlinedLogin?: boolean; readonly type: \"chatgpt\" }\n  | { readonly type: \"chatgptDeviceCode\" }\n  | {\n      readonly accessToken: string;\n      readonly chatgptAccountId: string;\n      readonly chatgptPlanType?: string | null;\n      readonly type: \"chatgptAuthTokens\";\n    };\nexport const V2LoginAccountParams = Schema.Union(\n  [\n    Schema.Struct({\n      apiKey: Schema.String,\n      type: Schema.Literal(\"apiKey\").annotate({ title: \"ApiKeyv2::LoginAccountParamsType\" }),\n    }).annotate({ title: \"ApiKeyv2::LoginAccountParams\" }),\n    Schema.Struct({\n      codexStreamlinedLogin: Schema.optionalKey(Schema.Boolean),\n      type: Schema.Literal(\"chatgpt\").annotate({ title: \"Chatgptv2::LoginAccountParamsType\" }),\n    }).annotate({ title: \"Chatgptv2::LoginAccountParams\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"chatgptDeviceCode\").annotate({\n        title: \"ChatgptDeviceCodev2::LoginAccountParamsType\",\n      }),\n    }).annotate({ title: \"ChatgptDeviceCodev2::LoginAccountParams\" }),\n    Schema.Struct({\n      accessToken: Schema.String.annotate({\n        description:\n          \"Access token (JWT) supplied by the client. This token is used for backend API requests and email extraction.\",\n      }),\n      chatgptAccountId: Schema.String.annotate({\n        description: \"Workspace/account identifier supplied by the client.\",\n      }),\n      chatgptPlanType: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"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`.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.Literal(\"chatgptAuthTokens\").annotate({\n        title: \"ChatgptAuthTokensv2::LoginAccountParamsType\",\n      }),\n    }).annotate({\n      title: \"ChatgptAuthTokensv2::LoginAccountParams\",\n      description:\n        \"[UNSTABLE] FOR OPENAI INTERNAL USE ONLY - DO NOT USE. The access token must contain the same scopes that Codex-managed ChatGPT auth tokens have.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ title: \"LoginAccountParams\" });\n\nexport type V2LoginAccountResponse =\n  | { readonly type: \"apiKey\" }\n  | { readonly authUrl: string; readonly loginId: string; readonly type: \"chatgpt\" }\n  | {\n      readonly loginId: string;\n      readonly type: \"chatgptDeviceCode\";\n      readonly userCode: string;\n      readonly verificationUrl: string;\n    }\n  | { readonly type: \"chatgptAuthTokens\" };\nexport const V2LoginAccountResponse = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"apiKey\").annotate({ title: \"ApiKeyv2::LoginAccountResponseType\" }),\n    }).annotate({ title: \"ApiKeyv2::LoginAccountResponse\" }),\n    Schema.Struct({\n      authUrl: Schema.String.annotate({\n        description: \"URL the client should open in a browser to initiate the OAuth flow.\",\n      }),\n      loginId: Schema.String,\n      type: Schema.Literal(\"chatgpt\").annotate({ title: \"Chatgptv2::LoginAccountResponseType\" }),\n    }).annotate({ title: \"Chatgptv2::LoginAccountResponse\" }),\n    Schema.Struct({\n      loginId: Schema.String,\n      type: Schema.Literal(\"chatgptDeviceCode\").annotate({\n        title: \"ChatgptDeviceCodev2::LoginAccountResponseType\",\n      }),\n      userCode: Schema.String.annotate({\n        description: \"One-time code the user must enter after signing in.\",\n      }),\n      verificationUrl: Schema.String.annotate({\n        description:\n          \"URL the client should open in a browser to complete device code authorization.\",\n      }),\n    }).annotate({ title: \"ChatgptDeviceCodev2::LoginAccountResponse\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"chatgptAuthTokens\").annotate({\n        title: \"ChatgptAuthTokensv2::LoginAccountResponseType\",\n      }),\n    }).annotate({ title: \"ChatgptAuthTokensv2::LoginAccountResponse\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ title: \"LoginAccountResponse\" });\n\nexport type V2LogoutAccountResponse = {};\nexport const V2LogoutAccountResponse = Schema.Struct({}).annotate({\n  title: \"LogoutAccountResponse\",\n});\n\nexport type V2MarketplaceAddParams = {\n  readonly refName?: string | null;\n  readonly source: string;\n  readonly sparsePaths?: ReadonlyArray<string> | null;\n};\nexport const V2MarketplaceAddParams = Schema.Struct({\n  refName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  source: Schema.String,\n  sparsePaths: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n}).annotate({ title: \"MarketplaceAddParams\" });\n\nexport type V2MarketplaceAddResponse = {\n  readonly alreadyAdded: boolean;\n  readonly installedRoot: V2MarketplaceAddResponse__AbsolutePathBuf;\n  readonly marketplaceName: string;\n};\nexport const V2MarketplaceAddResponse = Schema.Struct({\n  alreadyAdded: Schema.Boolean,\n  installedRoot: V2MarketplaceAddResponse__AbsolutePathBuf,\n  marketplaceName: Schema.String,\n}).annotate({ title: \"MarketplaceAddResponse\" });\n\nexport type V2MarketplaceRemoveParams = { readonly marketplaceName: string };\nexport const V2MarketplaceRemoveParams = Schema.Struct({ marketplaceName: Schema.String }).annotate(\n  { title: \"MarketplaceRemoveParams\" },\n);\n\nexport type V2MarketplaceRemoveResponse = {\n  readonly installedRoot?: V2MarketplaceRemoveResponse__AbsolutePathBuf | null;\n  readonly marketplaceName: string;\n};\nexport const V2MarketplaceRemoveResponse = Schema.Struct({\n  installedRoot: Schema.optionalKey(\n    Schema.Union([V2MarketplaceRemoveResponse__AbsolutePathBuf, Schema.Null]),\n  ),\n  marketplaceName: Schema.String,\n}).annotate({ title: \"MarketplaceRemoveResponse\" });\n\nexport type V2MarketplaceUpgradeParams = { readonly marketplaceName?: string | null };\nexport const V2MarketplaceUpgradeParams = Schema.Struct({\n  marketplaceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"MarketplaceUpgradeParams\" });\n\nexport type V2MarketplaceUpgradeResponse = {\n  readonly errors: ReadonlyArray<V2MarketplaceUpgradeResponse__MarketplaceUpgradeErrorInfo>;\n  readonly selectedMarketplaces: ReadonlyArray<string>;\n  readonly upgradedRoots: ReadonlyArray<V2MarketplaceUpgradeResponse__AbsolutePathBuf>;\n};\nexport const V2MarketplaceUpgradeResponse = Schema.Struct({\n  errors: Schema.Array(V2MarketplaceUpgradeResponse__MarketplaceUpgradeErrorInfo),\n  selectedMarketplaces: Schema.Array(Schema.String),\n  upgradedRoots: Schema.Array(V2MarketplaceUpgradeResponse__AbsolutePathBuf),\n}).annotate({ title: \"MarketplaceUpgradeResponse\" });\n\nexport type V2McpResourceReadParams = {\n  readonly server: string;\n  readonly threadId?: string | null;\n  readonly uri: string;\n};\nexport const V2McpResourceReadParams = Schema.Struct({\n  server: Schema.String,\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  uri: Schema.String,\n}).annotate({ title: \"McpResourceReadParams\" });\n\nexport type V2McpResourceReadResponse = {\n  readonly contents: ReadonlyArray<V2McpResourceReadResponse__ResourceContent>;\n};\nexport const V2McpResourceReadResponse = Schema.Struct({\n  contents: Schema.Array(V2McpResourceReadResponse__ResourceContent),\n}).annotate({ title: \"McpResourceReadResponse\" });\n\nexport type V2McpServerOauthLoginCompletedNotification = {\n  readonly error?: string | null;\n  readonly name: string;\n  readonly success: boolean;\n};\nexport const V2McpServerOauthLoginCompletedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  success: Schema.Boolean,\n}).annotate({ title: \"McpServerOauthLoginCompletedNotification\" });\n\nexport type V2McpServerOauthLoginParams = {\n  readonly name: string;\n  readonly scopes?: ReadonlyArray<string> | null;\n  readonly timeoutSecs?: number | null;\n};\nexport const V2McpServerOauthLoginParams = Schema.Struct({\n  name: Schema.String,\n  scopes: Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null])),\n  timeoutSecs: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n}).annotate({ title: \"McpServerOauthLoginParams\" });\n\nexport type V2McpServerOauthLoginResponse = { readonly authorizationUrl: string };\nexport const V2McpServerOauthLoginResponse = Schema.Struct({\n  authorizationUrl: Schema.String,\n}).annotate({ title: \"McpServerOauthLoginResponse\" });\n\nexport type V2McpServerRefreshResponse = {};\nexport const V2McpServerRefreshResponse = Schema.Struct({}).annotate({\n  title: \"McpServerRefreshResponse\",\n});\n\nexport type V2McpServerStatusUpdatedNotification = {\n  readonly error?: string | null;\n  readonly name: string;\n  readonly status: V2McpServerStatusUpdatedNotification__McpServerStartupState;\n  readonly threadId?: string | null;\n};\nexport const V2McpServerStatusUpdatedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  status: V2McpServerStatusUpdatedNotification__McpServerStartupState,\n  threadId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"McpServerStatusUpdatedNotification\" });\n\nexport type V2McpServerToolCallParams = {\n  readonly _meta?: unknown;\n  readonly arguments?: unknown;\n  readonly server: string;\n  readonly threadId: string;\n  readonly tool: string;\n};\nexport const V2McpServerToolCallParams = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  arguments: Schema.optionalKey(Schema.Unknown),\n  server: Schema.String,\n  threadId: Schema.String,\n  tool: Schema.String,\n}).annotate({ title: \"McpServerToolCallParams\" });\n\nexport type V2McpServerToolCallResponse = {\n  readonly _meta?: unknown;\n  readonly content: ReadonlyArray<unknown>;\n  readonly isError?: boolean | null;\n  readonly structuredContent?: unknown;\n};\nexport const V2McpServerToolCallResponse = Schema.Struct({\n  _meta: Schema.optionalKey(Schema.Unknown),\n  content: Schema.Array(Schema.Unknown),\n  isError: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  structuredContent: Schema.optionalKey(Schema.Unknown),\n}).annotate({ title: \"McpServerToolCallResponse\" });\n\nexport type V2McpToolCallProgressNotification = {\n  readonly itemId: string;\n  readonly message: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2McpToolCallProgressNotification = Schema.Struct({\n  itemId: Schema.String,\n  message: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"McpToolCallProgressNotification\" });\n\nexport type V2ModelListParams = {\n  readonly cursor?: string | null;\n  readonly includeHidden?: boolean | null;\n  readonly limit?: number | null;\n};\nexport const V2ModelListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  includeHidden: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description: \"When true, include models that are hidden from the default picker list.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ModelListParams\" });\n\nexport type V2ModelListResponse = {\n  readonly data: ReadonlyArray<V2ModelListResponse__Model>;\n  readonly nextCursor?: string | null;\n};\nexport const V2ModelListResponse = Schema.Struct({\n  data: Schema.Array(V2ModelListResponse__Model),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ModelListResponse\" });\n\nexport type V2ModelProviderCapabilitiesReadParams = {};\nexport const V2ModelProviderCapabilitiesReadParams = Schema.Struct({}).annotate({\n  title: \"ModelProviderCapabilitiesReadParams\",\n});\n\nexport type V2ModelProviderCapabilitiesReadResponse = {\n  readonly imageGeneration: boolean;\n  readonly namespaceTools: boolean;\n  readonly webSearch: boolean;\n};\nexport const V2ModelProviderCapabilitiesReadResponse = Schema.Struct({\n  imageGeneration: Schema.Boolean,\n  namespaceTools: Schema.Boolean,\n  webSearch: Schema.Boolean,\n}).annotate({ title: \"ModelProviderCapabilitiesReadResponse\" });\n\nexport type V2ModelReroutedNotification = {\n  readonly fromModel: string;\n  readonly reason: V2ModelReroutedNotification__ModelRerouteReason;\n  readonly threadId: string;\n  readonly toModel: string;\n  readonly turnId: string;\n};\nexport const V2ModelReroutedNotification = Schema.Struct({\n  fromModel: Schema.String,\n  reason: V2ModelReroutedNotification__ModelRerouteReason,\n  threadId: Schema.String,\n  toModel: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"ModelReroutedNotification\" });\n\nexport type V2ModelVerificationNotification = {\n  readonly threadId: string;\n  readonly turnId: string;\n  readonly verifications: ReadonlyArray<V2ModelVerificationNotification__ModelVerification>;\n};\nexport const V2ModelVerificationNotification = Schema.Struct({\n  threadId: Schema.String,\n  turnId: Schema.String,\n  verifications: Schema.Array(V2ModelVerificationNotification__ModelVerification),\n}).annotate({ title: \"ModelVerificationNotification\" });\n\nexport type V2PermissionProfileListParams = {\n  readonly cursor?: string | null;\n  readonly cwd?: string | null;\n  readonly limit?: number | null;\n};\nexport const V2PermissionProfileListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional working directory to resolve project config layers.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to the full result set.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"PermissionProfileListParams\" });\n\nexport type V2PermissionProfileListResponse = {\n  readonly data: ReadonlyArray<V2PermissionProfileListResponse__PermissionProfileSummary>;\n  readonly nextCursor?: string | null;\n};\nexport const V2PermissionProfileListResponse = Schema.Struct({\n  data: Schema.Array(V2PermissionProfileListResponse__PermissionProfileSummary),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"PermissionProfileListResponse\" });\n\nexport type V2PlanDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2PlanDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"PlanDeltaNotification\",\n  description:\n    \"EXPERIMENTAL - proposed plan streaming deltas for plan items. Clients should not assume concatenated deltas match the completed plan item content.\",\n});\n\nexport type V2PluginInstalledParams = {\n  readonly cwds?: ReadonlyArray<V2PluginInstalledParams__AbsolutePathBuf> | null;\n  readonly installSuggestionPluginNames?: ReadonlyArray<string> | null;\n};\nexport const V2PluginInstalledParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(V2PluginInstalledParams__AbsolutePathBuf).annotate({\n        description: \"Optional working directories used to discover repo marketplaces.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  installSuggestionPluginNames: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Additional uninstalled plugin names that should be returned when present locally. This is used by mention surfaces that intentionally expose install entrypoints.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"PluginInstalledParams\" });\n\nexport type V2PluginInstalledResponse = {\n  readonly marketplaceLoadErrors?: ReadonlyArray<V2PluginInstalledResponse__MarketplaceLoadErrorInfo>;\n  readonly marketplaces: ReadonlyArray<V2PluginInstalledResponse__PluginMarketplaceEntry>;\n};\nexport const V2PluginInstalledResponse = Schema.Struct({\n  marketplaceLoadErrors: Schema.optionalKey(\n    Schema.Array(V2PluginInstalledResponse__MarketplaceLoadErrorInfo).annotate({ default: [] }),\n  ),\n  marketplaces: Schema.Array(V2PluginInstalledResponse__PluginMarketplaceEntry),\n}).annotate({ title: \"PluginInstalledResponse\" });\n\nexport type V2PluginInstalledResponse__PluginAvailability = \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\nexport const V2PluginInstalledResponse__PluginAvailability = Schema.Literals([\n  \"DISABLED_BY_ADMIN\",\n  \"AVAILABLE\",\n]);\n\nexport type V2PluginInstallParams = {\n  readonly marketplacePath?: V2PluginInstallParams__AbsolutePathBuf | null;\n  readonly pluginName: string;\n  readonly remoteMarketplaceName?: string | null;\n};\nexport const V2PluginInstallParams = Schema.Struct({\n  marketplacePath: Schema.optionalKey(\n    Schema.Union([V2PluginInstallParams__AbsolutePathBuf, Schema.Null]),\n  ),\n  pluginName: Schema.String,\n  remoteMarketplaceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"PluginInstallParams\" });\n\nexport type V2PluginInstallResponse = {\n  readonly appsNeedingAuth: ReadonlyArray<V2PluginInstallResponse__AppSummary>;\n  readonly authPolicy: V2PluginInstallResponse__PluginAuthPolicy;\n};\nexport const V2PluginInstallResponse = Schema.Struct({\n  appsNeedingAuth: Schema.Array(V2PluginInstallResponse__AppSummary),\n  authPolicy: V2PluginInstallResponse__PluginAuthPolicy,\n}).annotate({ title: \"PluginInstallResponse\" });\n\nexport type V2PluginListParams = {\n  readonly cwds?: ReadonlyArray<V2PluginListParams__AbsolutePathBuf> | null;\n  readonly marketplaceKinds?: ReadonlyArray<V2PluginListParams__PluginListMarketplaceKind> | null;\n};\nexport const V2PluginListParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(V2PluginListParams__AbsolutePathBuf).annotate({\n        description:\n          \"Optional working directories used to discover repo marketplaces. When omitted, only home-scoped marketplaces and the official curated marketplace are considered.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  marketplaceKinds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(V2PluginListParams__PluginListMarketplaceKind).annotate({\n        description:\n          \"Optional marketplace kind filter. When omitted, only local marketplaces are queried, plus the default remote catalog when enabled by feature flag.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"PluginListParams\" });\n\nexport type V2PluginListResponse = {\n  readonly featuredPluginIds?: ReadonlyArray<string>;\n  readonly marketplaceLoadErrors?: ReadonlyArray<V2PluginListResponse__MarketplaceLoadErrorInfo>;\n  readonly marketplaces: ReadonlyArray<V2PluginListResponse__PluginMarketplaceEntry>;\n};\nexport const V2PluginListResponse = Schema.Struct({\n  featuredPluginIds: Schema.optionalKey(Schema.Array(Schema.String).annotate({ default: [] })),\n  marketplaceLoadErrors: Schema.optionalKey(\n    Schema.Array(V2PluginListResponse__MarketplaceLoadErrorInfo).annotate({ default: [] }),\n  ),\n  marketplaces: Schema.Array(V2PluginListResponse__PluginMarketplaceEntry),\n}).annotate({ title: \"PluginListResponse\" });\n\nexport type V2PluginListResponse__PluginAvailability = \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\nexport const V2PluginListResponse__PluginAvailability = Schema.Literals([\n  \"DISABLED_BY_ADMIN\",\n  \"AVAILABLE\",\n]);\n\nexport type V2PluginReadParams = {\n  readonly marketplacePath?: V2PluginReadParams__AbsolutePathBuf | null;\n  readonly pluginName: string;\n  readonly remoteMarketplaceName?: string | null;\n};\nexport const V2PluginReadParams = Schema.Struct({\n  marketplacePath: Schema.optionalKey(\n    Schema.Union([V2PluginReadParams__AbsolutePathBuf, Schema.Null]),\n  ),\n  pluginName: Schema.String,\n  remoteMarketplaceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"PluginReadParams\" });\n\nexport type V2PluginReadResponse = { readonly plugin: V2PluginReadResponse__PluginDetail };\nexport const V2PluginReadResponse = Schema.Struct({\n  plugin: V2PluginReadResponse__PluginDetail,\n}).annotate({ title: \"PluginReadResponse\" });\n\nexport type V2PluginReadResponse__PluginAvailability = \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\nexport const V2PluginReadResponse__PluginAvailability = Schema.Literals([\n  \"DISABLED_BY_ADMIN\",\n  \"AVAILABLE\",\n]);\n\nexport type V2PluginShareCheckoutParams = { readonly remotePluginId: string };\nexport const V2PluginShareCheckoutParams = Schema.Struct({\n  remotePluginId: Schema.String,\n}).annotate({ title: \"PluginShareCheckoutParams\" });\n\nexport type V2PluginShareCheckoutResponse = {\n  readonly marketplaceName: string;\n  readonly marketplacePath: V2PluginShareCheckoutResponse__AbsolutePathBuf;\n  readonly pluginId: string;\n  readonly pluginName: string;\n  readonly pluginPath: V2PluginShareCheckoutResponse__AbsolutePathBuf;\n  readonly remotePluginId: string;\n  readonly remoteVersion?: string | null;\n};\nexport const V2PluginShareCheckoutResponse = Schema.Struct({\n  marketplaceName: Schema.String,\n  marketplacePath: V2PluginShareCheckoutResponse__AbsolutePathBuf,\n  pluginId: Schema.String,\n  pluginName: Schema.String,\n  pluginPath: V2PluginShareCheckoutResponse__AbsolutePathBuf,\n  remotePluginId: Schema.String,\n  remoteVersion: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"PluginShareCheckoutResponse\" });\n\nexport type V2PluginShareDeleteParams = { readonly remotePluginId: string };\nexport const V2PluginShareDeleteParams = Schema.Struct({ remotePluginId: Schema.String }).annotate({\n  title: \"PluginShareDeleteParams\",\n});\n\nexport type V2PluginShareDeleteResponse = {};\nexport const V2PluginShareDeleteResponse = Schema.Struct({}).annotate({\n  title: \"PluginShareDeleteResponse\",\n});\n\nexport type V2PluginShareListParams = {};\nexport const V2PluginShareListParams = Schema.Struct({}).annotate({\n  title: \"PluginShareListParams\",\n});\n\nexport type V2PluginShareListResponse = {\n  readonly data: ReadonlyArray<V2PluginShareListResponse__PluginShareListItem>;\n};\nexport const V2PluginShareListResponse = Schema.Struct({\n  data: Schema.Array(V2PluginShareListResponse__PluginShareListItem),\n}).annotate({ title: \"PluginShareListResponse\" });\n\nexport type V2PluginShareListResponse__PluginAvailability = \"DISABLED_BY_ADMIN\" | \"AVAILABLE\";\nexport const V2PluginShareListResponse__PluginAvailability = Schema.Literals([\n  \"DISABLED_BY_ADMIN\",\n  \"AVAILABLE\",\n]);\n\nexport type V2PluginShareSaveParams = {\n  readonly discoverability?: V2PluginShareSaveParams__PluginShareDiscoverability | null;\n  readonly pluginPath: V2PluginShareSaveParams__AbsolutePathBuf;\n  readonly remotePluginId?: string | null;\n  readonly shareTargets?: ReadonlyArray<V2PluginShareSaveParams__PluginShareTarget> | null;\n};\nexport const V2PluginShareSaveParams = Schema.Struct({\n  discoverability: Schema.optionalKey(\n    Schema.Union([V2PluginShareSaveParams__PluginShareDiscoverability, Schema.Null]),\n  ),\n  pluginPath: V2PluginShareSaveParams__AbsolutePathBuf,\n  remotePluginId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  shareTargets: Schema.optionalKey(\n    Schema.Union([Schema.Array(V2PluginShareSaveParams__PluginShareTarget), Schema.Null]),\n  ),\n}).annotate({ title: \"PluginShareSaveParams\" });\n\nexport type V2PluginShareSaveResponse = {\n  readonly remotePluginId: string;\n  readonly shareUrl: string;\n};\nexport const V2PluginShareSaveResponse = Schema.Struct({\n  remotePluginId: Schema.String,\n  shareUrl: Schema.String,\n}).annotate({ title: \"PluginShareSaveResponse\" });\n\nexport type V2PluginShareUpdateTargetsParams = {\n  readonly discoverability: V2PluginShareUpdateTargetsParams__PluginShareUpdateDiscoverability;\n  readonly remotePluginId: string;\n  readonly shareTargets: ReadonlyArray<V2PluginShareUpdateTargetsParams__PluginShareTarget>;\n};\nexport const V2PluginShareUpdateTargetsParams = Schema.Struct({\n  discoverability: V2PluginShareUpdateTargetsParams__PluginShareUpdateDiscoverability,\n  remotePluginId: Schema.String,\n  shareTargets: Schema.Array(V2PluginShareUpdateTargetsParams__PluginShareTarget),\n}).annotate({ title: \"PluginShareUpdateTargetsParams\" });\n\nexport type V2PluginShareUpdateTargetsResponse = {\n  readonly discoverability: V2PluginShareUpdateTargetsResponse__PluginShareDiscoverability;\n  readonly principals: ReadonlyArray<V2PluginShareUpdateTargetsResponse__PluginSharePrincipal>;\n};\nexport const V2PluginShareUpdateTargetsResponse = Schema.Struct({\n  discoverability: V2PluginShareUpdateTargetsResponse__PluginShareDiscoverability,\n  principals: Schema.Array(V2PluginShareUpdateTargetsResponse__PluginSharePrincipal),\n}).annotate({ title: \"PluginShareUpdateTargetsResponse\" });\n\nexport type V2PluginSkillReadParams = {\n  readonly remoteMarketplaceName: string;\n  readonly remotePluginId: string;\n  readonly skillName: string;\n};\nexport const V2PluginSkillReadParams = Schema.Struct({\n  remoteMarketplaceName: Schema.String,\n  remotePluginId: Schema.String,\n  skillName: Schema.String,\n}).annotate({ title: \"PluginSkillReadParams\" });\n\nexport type V2PluginSkillReadResponse = { readonly contents?: string | null };\nexport const V2PluginSkillReadResponse = Schema.Struct({\n  contents: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"PluginSkillReadResponse\" });\n\nexport type V2PluginUninstallParams = { readonly pluginId: string };\nexport const V2PluginUninstallParams = Schema.Struct({ pluginId: Schema.String }).annotate({\n  title: \"PluginUninstallParams\",\n});\n\nexport type V2PluginUninstallResponse = {};\nexport const V2PluginUninstallResponse = Schema.Struct({}).annotate({\n  title: \"PluginUninstallResponse\",\n});\n\nexport type V2ProcessExitedNotification = {\n  readonly exitCode: number;\n  readonly processHandle: string;\n  readonly stderr: string;\n  readonly stderrCapReached: boolean;\n  readonly stdout: string;\n  readonly stdoutCapReached: boolean;\n};\nexport const V2ProcessExitedNotification = Schema.Struct({\n  exitCode: Schema.Number.annotate({ description: \"Process exit code.\", format: \"int32\" }).check(\n    Schema.isInt(),\n  ),\n  processHandle: Schema.String.annotate({\n    description: \"Client-supplied, connection-scoped `processHandle` from `process/spawn`.\",\n  }),\n  stderr: Schema.String.annotate({\n    description:\n      \"Buffered stderr capture.\\n\\nEmpty when stderr was streamed via `process/outputDelta`.\",\n  }),\n  stderrCapReached: Schema.Boolean.annotate({\n    description:\n      \"Whether stderr reached `outputBytesCap`.\\n\\nIn streaming mode, stderr is empty and cap state is also reported on the final stderr `process/outputDelta` notification.\",\n  }),\n  stdout: Schema.String.annotate({\n    description:\n      \"Buffered stdout capture.\\n\\nEmpty when stdout was streamed via `process/outputDelta`.\",\n  }),\n  stdoutCapReached: Schema.Boolean.annotate({\n    description:\n      \"Whether stdout reached `outputBytesCap`.\\n\\nIn streaming mode, stdout is empty and cap state is also reported on the final stdout `process/outputDelta` notification.\",\n  }),\n}).annotate({\n  title: \"ProcessExitedNotification\",\n  description: \"Final process exit notification for `process/spawn`.\",\n});\n\nexport type V2ProcessOutputDeltaNotification = {\n  readonly capReached: boolean;\n  readonly deltaBase64: string;\n  readonly processHandle: string;\n  readonly stream: \"stdout\" | \"stderr\";\n};\nexport const V2ProcessOutputDeltaNotification = Schema.Struct({\n  capReached: Schema.Boolean.annotate({\n    description:\n      \"True on the final streamed chunk for this stream when output was truncated by `outputBytesCap`.\",\n  }),\n  deltaBase64: Schema.String.annotate({ description: \"Base64-encoded output bytes.\" }),\n  processHandle: Schema.String.annotate({\n    description: \"Client-supplied, connection-scoped `processHandle` from `process/spawn`.\",\n  }),\n  stream: Schema.Literals([\"stdout\", \"stderr\"]).annotate({\n    description: \"Stream label for `process/outputDelta` notifications.\",\n  }),\n}).annotate({\n  title: \"ProcessOutputDeltaNotification\",\n  description: \"Base64-encoded output chunk emitted for a streaming `process/spawn` request.\",\n});\n\nexport type V2ProcessOutputDeltaNotification__ProcessOutputStream = \"stdout\" | \"stderr\";\nexport const V2ProcessOutputDeltaNotification__ProcessOutputStream = Schema.Literals([\n  \"stdout\",\n  \"stderr\",\n]).annotate({ description: \"Stream label for `process/outputDelta` notifications.\" });\n\nexport type V2RawResponseItemCompletedNotification = {\n  readonly item: V2RawResponseItemCompletedNotification__ResponseItem;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2RawResponseItemCompletedNotification = Schema.Struct({\n  item: V2RawResponseItemCompletedNotification__ResponseItem,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"RawResponseItemCompletedNotification\" });\n\nexport type V2ReasoningSummaryPartAddedNotification = {\n  readonly itemId: string;\n  readonly summaryIndex: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ReasoningSummaryPartAddedNotification = Schema.Struct({\n  itemId: Schema.String,\n  summaryIndex: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"ReasoningSummaryPartAddedNotification\" });\n\nexport type V2ReasoningSummaryTextDeltaNotification = {\n  readonly delta: string;\n  readonly itemId: string;\n  readonly summaryIndex: number;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ReasoningSummaryTextDeltaNotification = Schema.Struct({\n  delta: Schema.String,\n  itemId: Schema.String,\n  summaryIndex: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"ReasoningSummaryTextDeltaNotification\" });\n\nexport type V2ReasoningTextDeltaNotification = {\n  readonly contentIndex: number;\n  readonly delta: string;\n  readonly itemId: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2ReasoningTextDeltaNotification = Schema.Struct({\n  contentIndex: Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n  delta: Schema.String,\n  itemId: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"ReasoningTextDeltaNotification\" });\n\nexport type V2RemoteControlStatusChangedNotification = {\n  readonly environmentId?: string | null;\n  readonly installationId: string;\n  readonly serverName: string;\n  readonly status: V2RemoteControlStatusChangedNotification__RemoteControlConnectionStatus;\n};\nexport const V2RemoteControlStatusChangedNotification = Schema.Struct({\n  environmentId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  installationId: Schema.String,\n  serverName: Schema.String,\n  status: V2RemoteControlStatusChangedNotification__RemoteControlConnectionStatus,\n}).annotate({\n  title: \"RemoteControlStatusChangedNotification\",\n  description: \"Current remote-control connection status and remote identity exposed to clients.\",\n});\n\nexport type V2ReviewStartParams = {\n  readonly delivery?: V2ReviewStartParams__ReviewDelivery | null;\n  readonly target: V2ReviewStartParams__ReviewTarget;\n  readonly threadId: string;\n};\nexport const V2ReviewStartParams = Schema.Struct({\n  delivery: Schema.optionalKey(\n    Schema.Union([V2ReviewStartParams__ReviewDelivery, Schema.Null]).annotate({\n      description:\n        \"Where to run the review: inline (default) on the current thread or detached on a new thread (returned in `reviewThreadId`).\",\n    }),\n  ),\n  target: V2ReviewStartParams__ReviewTarget,\n  threadId: Schema.String,\n}).annotate({ title: \"ReviewStartParams\" });\n\nexport type V2ReviewStartResponse = {\n  readonly reviewThreadId: string;\n  readonly turn: V2ReviewStartResponse__Turn;\n};\nexport const V2ReviewStartResponse = Schema.Struct({\n  reviewThreadId: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  turn: V2ReviewStartResponse__Turn,\n}).annotate({ title: \"ReviewStartResponse\" });\n\nexport type V2ReviewStartResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ReviewStartResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ReviewStartResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ReviewStartResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ReviewStartResponse__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ReviewStartResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ReviewStartResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ReviewStartResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ReviewStartResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ReviewStartResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2SendAddCreditsNudgeEmailParams = {\n  readonly creditType: V2SendAddCreditsNudgeEmailParams__AddCreditsNudgeCreditType;\n};\nexport const V2SendAddCreditsNudgeEmailParams = Schema.Struct({\n  creditType: V2SendAddCreditsNudgeEmailParams__AddCreditsNudgeCreditType,\n}).annotate({ title: \"SendAddCreditsNudgeEmailParams\" });\n\nexport type V2SendAddCreditsNudgeEmailResponse = {\n  readonly status: V2SendAddCreditsNudgeEmailResponse__AddCreditsNudgeEmailStatus;\n};\nexport const V2SendAddCreditsNudgeEmailResponse = Schema.Struct({\n  status: V2SendAddCreditsNudgeEmailResponse__AddCreditsNudgeEmailStatus,\n}).annotate({ title: \"SendAddCreditsNudgeEmailResponse\" });\n\nexport type V2ServerRequestResolvedNotification = {\n  readonly requestId: V2ServerRequestResolvedNotification__RequestId;\n  readonly threadId: string;\n};\nexport const V2ServerRequestResolvedNotification = Schema.Struct({\n  requestId: V2ServerRequestResolvedNotification__RequestId,\n  threadId: Schema.String,\n}).annotate({ title: \"ServerRequestResolvedNotification\" });\n\nexport type V2SkillsChangedNotification = {};\nexport const V2SkillsChangedNotification = Schema.Struct({}).annotate({\n  title: \"SkillsChangedNotification\",\n  description:\n    \"Notification emitted when watched local skill files change.\\n\\nTreat this as an invalidation signal and re-run `skills/list` with the client's current parameters when refreshed skill metadata is needed.\",\n});\n\nexport type V2SkillsConfigWriteParams = {\n  readonly enabled: boolean;\n  readonly name?: string | null;\n  readonly path?: V2SkillsConfigWriteParams__AbsolutePathBuf | null;\n};\nexport const V2SkillsConfigWriteParams = Schema.Struct({\n  enabled: Schema.Boolean,\n  name: Schema.optionalKey(\n    Schema.Union([Schema.String.annotate({ description: \"Name-based selector.\" }), Schema.Null]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([V2SkillsConfigWriteParams__AbsolutePathBuf, Schema.Null]).annotate({\n      description: \"Path-based selector.\",\n    }),\n  ),\n}).annotate({ title: \"SkillsConfigWriteParams\" });\n\nexport type V2SkillsConfigWriteResponse = { readonly effectiveEnabled: boolean };\nexport const V2SkillsConfigWriteResponse = Schema.Struct({\n  effectiveEnabled: Schema.Boolean,\n}).annotate({ title: \"SkillsConfigWriteResponse\" });\n\nexport type V2SkillsExtraRootsSetParams = {\n  readonly extraRoots: ReadonlyArray<V2SkillsExtraRootsSetParams__AbsolutePathBuf>;\n};\nexport const V2SkillsExtraRootsSetParams = Schema.Struct({\n  extraRoots: Schema.Array(V2SkillsExtraRootsSetParams__AbsolutePathBuf),\n}).annotate({ title: \"SkillsExtraRootsSetParams\" });\n\nexport type V2SkillsExtraRootsSetResponse = {};\nexport const V2SkillsExtraRootsSetResponse = Schema.Struct({}).annotate({\n  title: \"SkillsExtraRootsSetResponse\",\n});\n\nexport type V2SkillsListParams = {\n  readonly cwds?: ReadonlyArray<string>;\n  readonly forceReload?: boolean;\n};\nexport const V2SkillsListParams = Schema.Struct({\n  cwds: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({\n      description: \"When empty, defaults to the current session working directory.\",\n    }),\n  ),\n  forceReload: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"When true, bypass the skills cache and re-scan skills from disk.\",\n    }),\n  ),\n}).annotate({ title: \"SkillsListParams\" });\n\nexport type V2SkillsListResponse = {\n  readonly data: ReadonlyArray<V2SkillsListResponse__SkillsListEntry>;\n};\nexport const V2SkillsListResponse = Schema.Struct({\n  data: Schema.Array(V2SkillsListResponse__SkillsListEntry),\n}).annotate({ title: \"SkillsListResponse\" });\n\nexport type V2TerminalInteractionNotification = {\n  readonly itemId: string;\n  readonly processId: string;\n  readonly stdin: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2TerminalInteractionNotification = Schema.Struct({\n  itemId: Schema.String,\n  processId: Schema.String,\n  stdin: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"TerminalInteractionNotification\" });\n\nexport type V2ThreadApproveGuardianDeniedActionParams = {\n  readonly event: unknown;\n  readonly threadId: string;\n};\nexport const V2ThreadApproveGuardianDeniedActionParams = Schema.Struct({\n  event: Schema.Unknown.annotate({\n    description: \"Serialized `codex_protocol::protocol::GuardianAssessmentEvent`.\",\n  }),\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadApproveGuardianDeniedActionParams\" });\n\nexport type V2ThreadApproveGuardianDeniedActionResponse = {};\nexport const V2ThreadApproveGuardianDeniedActionResponse = Schema.Struct({}).annotate({\n  title: \"ThreadApproveGuardianDeniedActionResponse\",\n});\n\nexport type V2ThreadArchivedNotification = { readonly threadId: string };\nexport const V2ThreadArchivedNotification = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadArchivedNotification\",\n});\n\nexport type V2ThreadArchiveParams = { readonly threadId: string };\nexport const V2ThreadArchiveParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadArchiveParams\",\n});\n\nexport type V2ThreadArchiveResponse = {};\nexport const V2ThreadArchiveResponse = Schema.Struct({}).annotate({\n  title: \"ThreadArchiveResponse\",\n});\n\nexport type V2ThreadClosedNotification = { readonly threadId: string };\nexport const V2ThreadClosedNotification = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadClosedNotification\",\n});\n\nexport type V2ThreadCompactStartParams = { readonly threadId: string };\nexport const V2ThreadCompactStartParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadCompactStartParams\",\n});\n\nexport type V2ThreadCompactStartResponse = {};\nexport const V2ThreadCompactStartResponse = Schema.Struct({}).annotate({\n  title: \"ThreadCompactStartResponse\",\n});\n\nexport type V2ThreadDeletedNotification = { readonly threadId: string };\nexport const V2ThreadDeletedNotification = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadDeletedNotification\",\n});\n\nexport type V2ThreadDeleteParams = { readonly threadId: string };\nexport const V2ThreadDeleteParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadDeleteParams\",\n});\n\nexport type V2ThreadDeleteResponse = {};\nexport const V2ThreadDeleteResponse = Schema.Struct({}).annotate({ title: \"ThreadDeleteResponse\" });\n\nexport type V2ThreadForkParams = {\n  readonly approvalPolicy?: V2ThreadForkParams__AskForApproval | null;\n  readonly approvalsReviewer?: V2ThreadForkParams__ApprovalsReviewer | null;\n  readonly baseInstructions?: string | null;\n  readonly config?: { readonly [x: string]: unknown } | null;\n  readonly cwd?: string | null;\n  readonly developerInstructions?: string | null;\n  readonly ephemeral?: boolean;\n  readonly model?: string | null;\n  readonly modelProvider?: string | null;\n  readonly sandbox?: V2ThreadForkParams__SandboxMode | null;\n  readonly serviceTier?: string | null;\n  readonly threadId: string;\n  readonly threadSource?: V2ThreadForkParams__ThreadSource | null;\n};\nexport const V2ThreadForkParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(\n    Schema.Union([V2ThreadForkParams__AskForApproval, Schema.Null]),\n  ),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([V2ThreadForkParams__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this thread and subsequent turns.\",\n    }),\n  ),\n  baseInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  config: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n  ),\n  cwd: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developerInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  ephemeral: Schema.optionalKey(Schema.Boolean),\n  model: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Configuration overrides for the forked thread, if any.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  modelProvider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sandbox: Schema.optionalKey(Schema.Union([V2ThreadForkParams__SandboxMode, Schema.Null])),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadForkParams__ThreadSource, Schema.Null]).annotate({\n      description:\n        \"Optional client-supplied analytics source classification for this forked thread.\",\n    }),\n  ),\n}).annotate({\n  title: \"ThreadForkParams\",\n  description:\n    \"There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\\n\\nIf using a non-empty path, the thread_id param will be ignored. Empty string path values are treated as absent.\\n\\nPrefer using thread_id whenever possible.\",\n});\n\nexport type V2ThreadForkParams__AbsolutePathBuf = string;\nexport const V2ThreadForkParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadForkResponse = {\n  readonly approvalPolicy: V2ThreadForkResponse__AskForApproval;\n  readonly approvalsReviewer: \"user\" | \"auto_review\" | \"guardian_subagent\";\n  readonly cwd: V2ThreadForkResponse__AbsolutePathBuf;\n  readonly instructionSources?: ReadonlyArray<V2ThreadForkResponse__AbsolutePathBuf>;\n  readonly model: string;\n  readonly modelProvider: string;\n  readonly reasoningEffort?: V2ThreadForkResponse__ReasoningEffort | null;\n  readonly sandbox:\n    | { readonly type: \"dangerFullAccess\" }\n    | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n    | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n    | {\n        readonly excludeSlashTmp?: boolean;\n        readonly excludeTmpdirEnvVar?: boolean;\n        readonly networkAccess?: boolean;\n        readonly type: \"workspaceWrite\";\n        readonly writableRoots?: ReadonlyArray<V2ThreadForkResponse__AbsolutePathBuf>;\n      };\n  readonly serviceTier?: string | null;\n  readonly thread: V2ThreadForkResponse__Thread;\n};\nexport const V2ThreadForkResponse = Schema.Struct({\n  approvalPolicy: V2ThreadForkResponse__AskForApproval,\n  approvalsReviewer: Schema.Literals([\"user\", \"auto_review\", \"guardian_subagent\"]).annotate({\n    description:\n      \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n  }),\n  cwd: V2ThreadForkResponse__AbsolutePathBuf,\n  instructionSources: Schema.optionalKey(\n    Schema.Array(V2ThreadForkResponse__AbsolutePathBuf).annotate({\n      description: \"Instruction source files currently loaded for this thread.\",\n      default: [],\n    }),\n  ),\n  model: Schema.String,\n  modelProvider: Schema.String,\n  reasoningEffort: Schema.optionalKey(\n    Schema.Union([V2ThreadForkResponse__ReasoningEffort, Schema.Null]),\n  ),\n  sandbox: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"dangerFullAccess\").annotate({\n          title: \"DangerFullAccessSandboxPolicyType\",\n        }),\n      }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n      Schema.Struct({\n        networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n      }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n      Schema.Struct({\n        networkAccess: Schema.optionalKey(\n          Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n        ),\n        type: Schema.Literal(\"externalSandbox\").annotate({\n          title: \"ExternalSandboxSandboxPolicyType\",\n        }),\n      }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n      Schema.Struct({\n        excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        type: Schema.Literal(\"workspaceWrite\").annotate({\n          title: \"WorkspaceWriteSandboxPolicyType\",\n        }),\n        writableRoots: Schema.optionalKey(\n          Schema.Array(V2ThreadForkResponse__AbsolutePathBuf).annotate({ default: [] }),\n        ),\n      }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"Legacy sandbox policy retained for compatibility. Experimental clients should prefer `activePermissionProfile` for profile provenance.\",\n  }),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  thread: V2ThreadForkResponse__Thread,\n}).annotate({ title: \"ThreadForkResponse\" });\n\nexport type V2ThreadForkResponse__ActivePermissionProfile = {\n  readonly extends?: string | null;\n  readonly id: string;\n};\nexport const V2ThreadForkResponse__ActivePermissionProfile = Schema.Struct({\n  extends: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Parent profile identifier from the selected permissions profile's `extends` setting, when present.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({\n    description:\n      \"Identifier from `default_permissions` or the implicit built-in default, such as `:workspace` or a user-defined `[permissions.<id>]` profile.\",\n  }),\n});\n\nexport type V2ThreadForkResponse__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2ThreadForkResponse__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadForkResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadForkResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadForkResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadForkResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadForkResponse__CollabAgentToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadForkResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadForkResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadForkResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadForkResponse__NetworkAccess = \"restricted\" | \"enabled\";\nexport const V2ThreadForkResponse__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type V2ThreadForkResponse__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<V2ThreadForkResponse__AbsolutePathBuf>;\n    };\nexport const V2ThreadForkResponse__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(V2ThreadForkResponse__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadForkResponse__SubAgentSource };\nexport const V2ThreadForkResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadForkResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadForkResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadForkResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadForkResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadForkResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadForkResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadGoalClearedNotification = { readonly threadId: string };\nexport const V2ThreadGoalClearedNotification = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadGoalClearedNotification\",\n});\n\nexport type V2ThreadGoalClearParams = { readonly threadId: string };\nexport const V2ThreadGoalClearParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadGoalClearParams\",\n});\n\nexport type V2ThreadGoalClearResponse = { readonly cleared: boolean };\nexport const V2ThreadGoalClearResponse = Schema.Struct({ cleared: Schema.Boolean }).annotate({\n  title: \"ThreadGoalClearResponse\",\n});\n\nexport type V2ThreadGoalGetParams = { readonly threadId: string };\nexport const V2ThreadGoalGetParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadGoalGetParams\",\n});\n\nexport type V2ThreadGoalGetResponse = {\n  readonly goal?: V2ThreadGoalGetResponse__ThreadGoal | null;\n};\nexport const V2ThreadGoalGetResponse = Schema.Struct({\n  goal: Schema.optionalKey(Schema.Union([V2ThreadGoalGetResponse__ThreadGoal, Schema.Null])),\n}).annotate({ title: \"ThreadGoalGetResponse\" });\n\nexport type V2ThreadGoalSetParams = {\n  readonly objective?: string | null;\n  readonly status?: V2ThreadGoalSetParams__ThreadGoalStatus | null;\n  readonly threadId: string;\n  readonly tokenBudget?: number | null;\n};\nexport const V2ThreadGoalSetParams = Schema.Struct({\n  objective: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  status: Schema.optionalKey(Schema.Union([V2ThreadGoalSetParams__ThreadGoalStatus, Schema.Null])),\n  threadId: Schema.String,\n  tokenBudget: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n}).annotate({ title: \"ThreadGoalSetParams\" });\n\nexport type V2ThreadGoalSetResponse = { readonly goal: V2ThreadGoalSetResponse__ThreadGoal };\nexport const V2ThreadGoalSetResponse = Schema.Struct({\n  goal: V2ThreadGoalSetResponse__ThreadGoal,\n}).annotate({ title: \"ThreadGoalSetResponse\" });\n\nexport type V2ThreadGoalUpdatedNotification = {\n  readonly goal: V2ThreadGoalUpdatedNotification__ThreadGoal;\n  readonly threadId: string;\n  readonly turnId?: string | null;\n};\nexport const V2ThreadGoalUpdatedNotification = Schema.Struct({\n  goal: V2ThreadGoalUpdatedNotification__ThreadGoal,\n  threadId: Schema.String,\n  turnId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"ThreadGoalUpdatedNotification\" });\n\nexport type V2ThreadInjectItemsParams = {\n  readonly items: ReadonlyArray<unknown>;\n  readonly threadId: string;\n};\nexport const V2ThreadInjectItemsParams = Schema.Struct({\n  items: Schema.Array(Schema.Unknown).annotate({\n    description: \"Raw Responses API items to append to the thread's model-visible history.\",\n  }),\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadInjectItemsParams\" });\n\nexport type V2ThreadInjectItemsResponse = {};\nexport const V2ThreadInjectItemsResponse = Schema.Struct({}).annotate({\n  title: \"ThreadInjectItemsResponse\",\n});\n\nexport type V2ThreadListParams = {\n  readonly archived?: boolean | null;\n  readonly cursor?: string | null;\n  readonly cwd?: V2ThreadListParams__ThreadListCwdFilter | null;\n  readonly limit?: number | null;\n  readonly modelProviders?: ReadonlyArray<string> | null;\n  readonly searchTerm?: string | null;\n  readonly sortDirection?: V2ThreadListParams__SortDirection | null;\n  readonly sortKey?: V2ThreadListParams__ThreadSortKey | null;\n  readonly sourceKinds?: ReadonlyArray<V2ThreadListParams__ThreadSourceKind> | null;\n  readonly useStateDbOnly?: boolean;\n};\nexport const V2ThreadListParams = Schema.Struct({\n  archived: Schema.optionalKey(\n    Schema.Union([\n      Schema.Boolean.annotate({\n        description:\n          \"Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([V2ThreadListParams__ThreadListCwdFilter, Schema.Null]).annotate({\n      description:\n        \"Optional cwd filter or filters; when set, only threads whose session cwd exactly matches one of these paths are returned.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to a reasonable server-side value.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  modelProviders: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Optional provider filter; when set, only sessions recorded under these providers are returned. When present but empty, includes all providers.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  searchTerm: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional substring filter for the extracted thread title.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sortDirection: Schema.optionalKey(\n    Schema.Union([V2ThreadListParams__SortDirection, Schema.Null]).annotate({\n      description: \"Optional sort direction; defaults to descending (newest first).\",\n    }),\n  ),\n  sortKey: Schema.optionalKey(\n    Schema.Union([V2ThreadListParams__ThreadSortKey, Schema.Null]).annotate({\n      description: \"Optional sort key; defaults to created_at.\",\n    }),\n  ),\n  sourceKinds: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(V2ThreadListParams__ThreadSourceKind).annotate({\n        description:\n          \"Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  useStateDbOnly: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"If true, return from the state DB without scanning JSONL rollouts to repair thread metadata. Omitted or false preserves scan-and-repair behavior.\",\n    }),\n  ),\n}).annotate({ title: \"ThreadListParams\" });\n\nexport type V2ThreadListResponse = {\n  readonly backwardsCursor?: string | null;\n  readonly data: ReadonlyArray<V2ThreadListResponse__Thread>;\n  readonly nextCursor?: string | null;\n};\nexport const V2ThreadListResponse = Schema.Struct({\n  backwardsCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"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.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  data: Schema.Array(V2ThreadListResponse__Thread),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ThreadListResponse\" });\n\nexport type V2ThreadListResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadListResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadListResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadListResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadListResponse__CollabAgentToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadListResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadListResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadListResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadListResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadListResponse__SubAgentSource };\nexport const V2ThreadListResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadListResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadListResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadListResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadListResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadListResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadListResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadLoadedListParams = {\n  readonly cursor?: string | null;\n  readonly limit?: number | null;\n};\nexport const V2ThreadLoadedListParams = Schema.Struct({\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Opaque pagination cursor returned by a previous call.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional page size; defaults to no limit.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ThreadLoadedListParams\" });\n\nexport type V2ThreadLoadedListResponse = {\n  readonly data: ReadonlyArray<string>;\n  readonly nextCursor?: string | null;\n};\nexport const V2ThreadLoadedListResponse = Schema.Struct({\n  data: Schema.Array(Schema.String).annotate({\n    description: \"Thread ids for sessions currently loaded in memory.\",\n  }),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"ThreadLoadedListResponse\" });\n\nexport type V2ThreadMetadataUpdateParams = {\n  readonly gitInfo?: V2ThreadMetadataUpdateParams__ThreadMetadataGitInfoUpdateParams | null;\n  readonly threadId: string;\n};\nexport const V2ThreadMetadataUpdateParams = Schema.Struct({\n  gitInfo: Schema.optionalKey(\n    Schema.Union([\n      V2ThreadMetadataUpdateParams__ThreadMetadataGitInfoUpdateParams,\n      Schema.Null,\n    ]).annotate({\n      description:\n        \"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.\",\n    }),\n  ),\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadMetadataUpdateParams\" });\n\nexport type V2ThreadMetadataUpdateResponse = {\n  readonly thread: V2ThreadMetadataUpdateResponse__Thread;\n};\nexport const V2ThreadMetadataUpdateResponse = Schema.Struct({\n  thread: V2ThreadMetadataUpdateResponse__Thread,\n}).annotate({ title: \"ThreadMetadataUpdateResponse\" });\n\nexport type V2ThreadMetadataUpdateResponse__ByteRange = {\n  readonly end: number;\n  readonly start: number;\n};\nexport const V2ThreadMetadataUpdateResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadMetadataUpdateResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadMetadataUpdateResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadMetadataUpdateResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadMetadataUpdateResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadMetadataUpdateResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadMetadataUpdateResponse__SubAgentSource };\nexport const V2ThreadMetadataUpdateResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadMetadataUpdateResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadMetadataUpdateResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadMetadataUpdateResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadMetadataUpdateResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadMetadataUpdateResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadMetadataUpdateResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadNameUpdatedNotification = {\n  readonly threadId: string;\n  readonly threadName?: string | null;\n};\nexport const V2ThreadNameUpdatedNotification = Schema.Struct({\n  threadId: Schema.String,\n  threadName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ title: \"ThreadNameUpdatedNotification\" });\n\nexport type V2ThreadReadParams = { readonly includeTurns?: boolean; readonly threadId: string };\nexport const V2ThreadReadParams = Schema.Struct({\n  includeTurns: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"When true, include turns and their items from rollout history.\",\n    }),\n  ),\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadReadParams\" });\n\nexport type V2ThreadReadResponse = { readonly thread: V2ThreadReadResponse__Thread };\nexport const V2ThreadReadResponse = Schema.Struct({\n  thread: V2ThreadReadResponse__Thread,\n}).annotate({ title: \"ThreadReadResponse\" });\n\nexport type V2ThreadReadResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadReadResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadReadResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadReadResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadReadResponse__CollabAgentToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2ThreadReadResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadReadResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadReadResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadReadResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadReadResponse__SubAgentSource };\nexport const V2ThreadReadResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadReadResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadReadResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadReadResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadReadResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadReadResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadReadResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadRealtimeClosedNotification = {\n  readonly reason?: string | null;\n  readonly threadId: string;\n};\nexport const V2ThreadRealtimeClosedNotification = Schema.Struct({\n  reason: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeClosedNotification\",\n  description: \"EXPERIMENTAL - emitted when thread realtime transport closes.\",\n});\n\nexport type V2ThreadRealtimeErrorNotification = {\n  readonly message: string;\n  readonly threadId: string;\n};\nexport const V2ThreadRealtimeErrorNotification = Schema.Struct({\n  message: Schema.String,\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeErrorNotification\",\n  description: \"EXPERIMENTAL - emitted when thread realtime encounters an error.\",\n});\n\nexport type V2ThreadRealtimeItemAddedNotification = {\n  readonly item: unknown;\n  readonly threadId: string;\n};\nexport const V2ThreadRealtimeItemAddedNotification = Schema.Struct({\n  item: Schema.Unknown,\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeItemAddedNotification\",\n  description: \"EXPERIMENTAL - raw non-audio thread realtime item emitted by the backend.\",\n});\n\nexport type V2ThreadRealtimeOutputAudioDeltaNotification = {\n  readonly audio: V2ThreadRealtimeOutputAudioDeltaNotification__ThreadRealtimeAudioChunk;\n  readonly threadId: string;\n};\nexport const V2ThreadRealtimeOutputAudioDeltaNotification = Schema.Struct({\n  audio: V2ThreadRealtimeOutputAudioDeltaNotification__ThreadRealtimeAudioChunk,\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeOutputAudioDeltaNotification\",\n  description: \"EXPERIMENTAL - streamed output audio emitted by thread realtime.\",\n});\n\nexport type V2ThreadRealtimeSdpNotification = { readonly sdp: string; readonly threadId: string };\nexport const V2ThreadRealtimeSdpNotification = Schema.Struct({\n  sdp: Schema.String,\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeSdpNotification\",\n  description: \"EXPERIMENTAL - emitted with the remote SDP for a WebRTC realtime session.\",\n});\n\nexport type V2ThreadRealtimeStartedNotification = {\n  readonly realtimeSessionId?: string | null;\n  readonly threadId: string;\n  readonly version: V2ThreadRealtimeStartedNotification__RealtimeConversationVersion;\n};\nexport const V2ThreadRealtimeStartedNotification = Schema.Struct({\n  realtimeSessionId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n  version: V2ThreadRealtimeStartedNotification__RealtimeConversationVersion,\n}).annotate({\n  title: \"ThreadRealtimeStartedNotification\",\n  description: \"EXPERIMENTAL - emitted when thread realtime startup is accepted.\",\n});\n\nexport type V2ThreadRealtimeTranscriptDeltaNotification = {\n  readonly delta: string;\n  readonly role: string;\n  readonly threadId: string;\n};\nexport const V2ThreadRealtimeTranscriptDeltaNotification = Schema.Struct({\n  delta: Schema.String.annotate({ description: \"Live transcript delta from the realtime event.\" }),\n  role: Schema.String,\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeTranscriptDeltaNotification\",\n  description:\n    \"EXPERIMENTAL - flat transcript delta emitted whenever realtime transcript text changes.\",\n});\n\nexport type V2ThreadRealtimeTranscriptDoneNotification = {\n  readonly role: string;\n  readonly text: string;\n  readonly threadId: string;\n};\nexport const V2ThreadRealtimeTranscriptDoneNotification = Schema.Struct({\n  role: Schema.String,\n  text: Schema.String.annotate({ description: \"Final complete text for the transcript part.\" }),\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadRealtimeTranscriptDoneNotification\",\n  description:\n    \"EXPERIMENTAL - final transcript text emitted when realtime completes a transcript part.\",\n});\n\nexport type V2ThreadResumeParams = {\n  readonly approvalPolicy?: V2ThreadResumeParams__AskForApproval | null;\n  readonly approvalsReviewer?: V2ThreadResumeParams__ApprovalsReviewer | null;\n  readonly baseInstructions?: string | null;\n  readonly config?: { readonly [x: string]: unknown } | null;\n  readonly cwd?: string | null;\n  readonly developerInstructions?: string | null;\n  readonly model?: string | null;\n  readonly modelProvider?: string | null;\n  readonly personality?: V2ThreadResumeParams__Personality | null;\n  readonly sandbox?: V2ThreadResumeParams__SandboxMode | null;\n  readonly serviceTier?: string | null;\n  readonly threadId: string;\n};\nexport const V2ThreadResumeParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeParams__AskForApproval, Schema.Null]),\n  ),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeParams__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this thread and subsequent turns.\",\n    }),\n  ),\n  baseInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  config: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n  ),\n  cwd: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developerInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  model: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Configuration overrides for the resumed thread, if any.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  modelProvider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  personality: Schema.optionalKey(Schema.Union([V2ThreadResumeParams__Personality, Schema.Null])),\n  sandbox: Schema.optionalKey(Schema.Union([V2ThreadResumeParams__SandboxMode, Schema.Null])),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  threadId: Schema.String,\n}).annotate({\n  title: \"ThreadResumeParams\",\n  description:\n    \"There are three ways to resume a thread: 1. By thread_id: load the thread from disk by thread_id and resume it. 2. By history: instantiate the thread from memory and resume it. 3. By path: load the thread from disk by path and resume it.\\n\\nFor non-running threads, the precedence is: history > non-empty path > thread_id. If using history or a non-empty path for a non-running thread, the thread_id param will be ignored.\\n\\nIf thread_id identifies a running thread, app-server rejoins that thread and treats a non-empty path as a consistency check against the active rollout path. Empty string path values are treated as absent.\\n\\nPrefer using thread_id whenever possible.\",\n});\n\nexport type V2ThreadResumeParams__AbsolutePathBuf = string;\nexport const V2ThreadResumeParams__AbsolutePathBuf = Schema.String.annotate({\n  description:\n    \"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.\",\n});\n\nexport type V2ThreadResumeParams__ResponseItem =\n  | {\n      readonly content: ReadonlyArray<V2ThreadResumeParams__ContentItem>;\n      readonly id?: string | null;\n      readonly phase?: V2ThreadResumeParams__MessagePhase | null;\n      readonly role: string;\n      readonly type: \"message\";\n    }\n  | {\n      readonly author: string;\n      readonly content: ReadonlyArray<V2ThreadResumeParams__AgentMessageInputContent>;\n      readonly recipient: string;\n      readonly type: \"agent_message\";\n    }\n  | {\n      readonly content?: ReadonlyArray<V2ThreadResumeParams__ReasoningItemContent> | null;\n      readonly encrypted_content?: string | null;\n      readonly summary: ReadonlyArray<V2ThreadResumeParams__ReasoningItemReasoningSummary>;\n      readonly type: \"reasoning\";\n    }\n  | {\n      readonly action: V2ThreadResumeParams__LocalShellAction;\n      readonly call_id?: string | null;\n      readonly id?: string | null;\n      readonly status: V2ThreadResumeParams__LocalShellStatus;\n      readonly type: \"local_shell_call\";\n    }\n  | {\n      readonly arguments: string;\n      readonly call_id: string;\n      readonly id?: string | null;\n      readonly name: string;\n      readonly namespace?: string | null;\n      readonly type: \"function_call\";\n    }\n  | {\n      readonly arguments: unknown;\n      readonly call_id?: string | null;\n      readonly execution: string;\n      readonly id?: string | null;\n      readonly status?: string | null;\n      readonly type: \"tool_search_call\";\n    }\n  | {\n      readonly call_id: string;\n      readonly output: V2ThreadResumeParams__FunctionCallOutputBody;\n      readonly type: \"function_call_output\";\n    }\n  | {\n      readonly call_id: string;\n      readonly id?: string | null;\n      readonly input: string;\n      readonly name: string;\n      readonly status?: string | null;\n      readonly type: \"custom_tool_call\";\n    }\n  | {\n      readonly call_id: string;\n      readonly name?: string | null;\n      readonly output: V2ThreadResumeParams__FunctionCallOutputBody;\n      readonly type: \"custom_tool_call_output\";\n    }\n  | {\n      readonly call_id?: string | null;\n      readonly execution: string;\n      readonly status: string;\n      readonly tools: ReadonlyArray<unknown>;\n      readonly type: \"tool_search_output\";\n    }\n  | {\n      readonly action?: V2ThreadResumeParams__ResponsesApiWebSearchAction | null;\n      readonly id?: string | null;\n      readonly status?: string | null;\n      readonly type: \"web_search_call\";\n    }\n  | {\n      readonly id: string;\n      readonly result: string;\n      readonly revised_prompt?: string | null;\n      readonly status: string;\n      readonly type: \"image_generation_call\";\n    }\n  | { readonly encrypted_content: string; readonly type: \"compaction\" }\n  | { readonly type: \"compaction_trigger\" }\n  | { readonly encrypted_content?: string | null; readonly type: \"context_compaction\" }\n  | { readonly type: \"other\" };\nexport const V2ThreadResumeParams__ResponseItem = Schema.Union(\n  [\n    Schema.Struct({\n      content: Schema.Array(V2ThreadResumeParams__ContentItem),\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      phase: Schema.optionalKey(Schema.Union([V2ThreadResumeParams__MessagePhase, Schema.Null])),\n      role: Schema.String,\n      type: Schema.Literal(\"message\").annotate({ title: \"MessageResponseItemType\" }),\n    }).annotate({ title: \"MessageResponseItem\" }),\n    Schema.Struct({\n      author: Schema.String,\n      content: Schema.Array(V2ThreadResumeParams__AgentMessageInputContent),\n      recipient: Schema.String,\n      type: Schema.Literal(\"agent_message\").annotate({ title: \"AgentMessageResponseItemType\" }),\n    }).annotate({ title: \"AgentMessageResponseItem\" }),\n    Schema.Struct({\n      content: Schema.optionalKey(\n        Schema.Union([Schema.Array(V2ThreadResumeParams__ReasoningItemContent), Schema.Null]),\n      ),\n      encrypted_content: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      summary: Schema.Array(V2ThreadResumeParams__ReasoningItemReasoningSummary),\n      type: Schema.Literal(\"reasoning\").annotate({ title: \"ReasoningResponseItemType\" }),\n    }).annotate({ title: \"ReasoningResponseItem\" }),\n    Schema.Struct({\n      action: V2ThreadResumeParams__LocalShellAction,\n      call_id: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Set when using the Responses API.\" }),\n          Schema.Null,\n        ]),\n      ),\n      id: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Legacy id field retained for compatibility with older payloads.\",\n            writeOnly: true,\n          }),\n          Schema.Null,\n        ]),\n      ),\n      status: V2ThreadResumeParams__LocalShellStatus,\n      type: Schema.Literal(\"local_shell_call\").annotate({\n        title: \"LocalShellCallResponseItemType\",\n      }),\n    }).annotate({ title: \"LocalShellCallResponseItem\" }),\n    Schema.Struct({\n      arguments: Schema.String,\n      call_id: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      name: Schema.String,\n      namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"function_call\").annotate({ title: \"FunctionCallResponseItemType\" }),\n    }).annotate({ title: \"FunctionCallResponseItem\" }),\n    Schema.Struct({\n      arguments: Schema.Unknown,\n      call_id: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      execution: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"tool_search_call\").annotate({\n        title: \"ToolSearchCallResponseItemType\",\n      }),\n    }).annotate({ title: \"ToolSearchCallResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      output: V2ThreadResumeParams__FunctionCallOutputBody,\n      type: Schema.Literal(\"function_call_output\").annotate({\n        title: \"FunctionCallOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"FunctionCallOutputResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      input: Schema.String,\n      name: Schema.String,\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"custom_tool_call\").annotate({\n        title: \"CustomToolCallResponseItemType\",\n      }),\n    }).annotate({ title: \"CustomToolCallResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.String,\n      name: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      output: V2ThreadResumeParams__FunctionCallOutputBody,\n      type: Schema.Literal(\"custom_tool_call_output\").annotate({\n        title: \"CustomToolCallOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"CustomToolCallOutputResponseItem\" }),\n    Schema.Struct({\n      call_id: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      execution: Schema.String,\n      status: Schema.String,\n      tools: Schema.Array(Schema.Unknown),\n      type: Schema.Literal(\"tool_search_output\").annotate({\n        title: \"ToolSearchOutputResponseItemType\",\n      }),\n    }).annotate({ title: \"ToolSearchOutputResponseItem\" }),\n    Schema.Struct({\n      action: Schema.optionalKey(\n        Schema.Union([V2ThreadResumeParams__ResponsesApiWebSearchAction, Schema.Null]),\n      ),\n      id: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ writeOnly: true }), Schema.Null]),\n      ),\n      status: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"web_search_call\").annotate({ title: \"WebSearchCallResponseItemType\" }),\n    }).annotate({ title: \"WebSearchCallResponseItem\" }),\n    Schema.Struct({\n      id: Schema.String,\n      result: Schema.String,\n      revised_prompt: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      status: Schema.String,\n      type: Schema.Literal(\"image_generation_call\").annotate({\n        title: \"ImageGenerationCallResponseItemType\",\n      }),\n    }).annotate({ title: \"ImageGenerationCallResponseItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.String,\n      type: Schema.Literal(\"compaction\").annotate({ title: \"CompactionResponseItemType\" }),\n    }).annotate({ title: \"CompactionResponseItem\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"compaction_trigger\").annotate({\n        title: \"CompactionTriggerResponseItemType\",\n      }),\n    }).annotate({ title: \"CompactionTriggerResponseItem\" }),\n    Schema.Struct({\n      encrypted_content: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      type: Schema.Literal(\"context_compaction\").annotate({\n        title: \"ContextCompactionResponseItemType\",\n      }),\n    }).annotate({ title: \"ContextCompactionResponseItem\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"other\").annotate({ title: \"OtherResponseItemType\" }),\n    }).annotate({ title: \"OtherResponseItem\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeParams__ThreadResumeInitialTurnsPageParams = {\n  readonly itemsView?: V2ThreadResumeParams__TurnItemsView | null;\n  readonly limit?: number | null;\n  readonly sortDirection?: V2ThreadResumeParams__SortDirection | null;\n};\nexport const V2ThreadResumeParams__ThreadResumeInitialTurnsPageParams = Schema.Struct({\n  itemsView: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeParams__TurnItemsView, Schema.Null]).annotate({\n      description: \"How much item detail to include for each returned turn; defaults to summary.\",\n    }),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Optional turn page size.\", format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  sortDirection: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeParams__SortDirection, Schema.Null]).annotate({\n      description: \"Optional turn pagination direction; defaults to descending.\",\n    }),\n  ),\n});\n\nexport type V2ThreadResumeResponse = {\n  readonly approvalPolicy: V2ThreadResumeResponse__AskForApproval;\n  readonly approvalsReviewer: \"user\" | \"auto_review\" | \"guardian_subagent\";\n  readonly cwd: V2ThreadResumeResponse__AbsolutePathBuf;\n  readonly instructionSources?: ReadonlyArray<V2ThreadResumeResponse__AbsolutePathBuf>;\n  readonly model: string;\n  readonly modelProvider: string;\n  readonly reasoningEffort?: V2ThreadResumeResponse__ReasoningEffort | null;\n  readonly sandbox:\n    | { readonly type: \"dangerFullAccess\" }\n    | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n    | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n    | {\n        readonly excludeSlashTmp?: boolean;\n        readonly excludeTmpdirEnvVar?: boolean;\n        readonly networkAccess?: boolean;\n        readonly type: \"workspaceWrite\";\n        readonly writableRoots?: ReadonlyArray<V2ThreadResumeResponse__AbsolutePathBuf>;\n      };\n  readonly serviceTier?: string | null;\n  readonly thread: V2ThreadResumeResponse__Thread;\n};\nexport const V2ThreadResumeResponse = Schema.Struct({\n  approvalPolicy: V2ThreadResumeResponse__AskForApproval,\n  approvalsReviewer: Schema.Literals([\"user\", \"auto_review\", \"guardian_subagent\"]).annotate({\n    description:\n      \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n  }),\n  cwd: V2ThreadResumeResponse__AbsolutePathBuf,\n  instructionSources: Schema.optionalKey(\n    Schema.Array(V2ThreadResumeResponse__AbsolutePathBuf).annotate({\n      description: \"Instruction source files currently loaded for this thread.\",\n      default: [],\n    }),\n  ),\n  model: Schema.String,\n  modelProvider: Schema.String,\n  reasoningEffort: Schema.optionalKey(\n    Schema.Union([V2ThreadResumeResponse__ReasoningEffort, Schema.Null]),\n  ),\n  sandbox: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"dangerFullAccess\").annotate({\n          title: \"DangerFullAccessSandboxPolicyType\",\n        }),\n      }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n      Schema.Struct({\n        networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n      }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n      Schema.Struct({\n        networkAccess: Schema.optionalKey(\n          Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n        ),\n        type: Schema.Literal(\"externalSandbox\").annotate({\n          title: \"ExternalSandboxSandboxPolicyType\",\n        }),\n      }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n      Schema.Struct({\n        excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        type: Schema.Literal(\"workspaceWrite\").annotate({\n          title: \"WorkspaceWriteSandboxPolicyType\",\n        }),\n        writableRoots: Schema.optionalKey(\n          Schema.Array(V2ThreadResumeResponse__AbsolutePathBuf).annotate({ default: [] }),\n        ),\n      }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"Legacy sandbox policy retained for compatibility. Experimental clients should prefer `activePermissionProfile` for profile provenance.\",\n  }),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  thread: V2ThreadResumeResponse__Thread,\n}).annotate({ title: \"ThreadResumeResponse\" });\n\nexport type V2ThreadResumeResponse__ActivePermissionProfile = {\n  readonly extends?: string | null;\n  readonly id: string;\n};\nexport const V2ThreadResumeResponse__ActivePermissionProfile = Schema.Struct({\n  extends: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Parent profile identifier from the selected permissions profile's `extends` setting, when present.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({\n    description:\n      \"Identifier from `default_permissions` or the implicit built-in default, such as `:workspace` or a user-defined `[permissions.<id>]` profile.\",\n  }),\n});\n\nexport type V2ThreadResumeResponse__ApprovalsReviewer =\n  | \"user\"\n  | \"auto_review\"\n  | \"guardian_subagent\";\nexport const V2ThreadResumeResponse__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadResumeResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadResumeResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadResumeResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadResumeResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadResumeResponse__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadResumeResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadResumeResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadResumeResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadResumeResponse__NetworkAccess = \"restricted\" | \"enabled\";\nexport const V2ThreadResumeResponse__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type V2ThreadResumeResponse__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<V2ThreadResumeResponse__AbsolutePathBuf>;\n    };\nexport const V2ThreadResumeResponse__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(V2ThreadResumeResponse__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadResumeResponse__SubAgentSource };\nexport const V2ThreadResumeResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadResumeResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadResumeResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadResumeResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadResumeResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadResumeResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadResumeResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadResumeResponse__TurnsPage = {\n  readonly backwardsCursor?: string | null;\n  readonly data: ReadonlyArray<V2ThreadResumeResponse__Turn>;\n  readonly nextCursor?: string | null;\n};\nexport const V2ThreadResumeResponse__TurnsPage = Schema.Struct({\n  backwardsCursor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  data: Schema.Array(V2ThreadResumeResponse__Turn),\n  nextCursor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadRollbackParams = { readonly numTurns: number; readonly threadId: string };\nexport const V2ThreadRollbackParams = Schema.Struct({\n  numTurns: Schema.Number.annotate({\n    description:\n      \"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.\",\n    format: \"uint32\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadRollbackParams\" });\n\nexport type V2ThreadRollbackResponse = {\n  readonly thread: {\n    readonly agentNickname?: string | null;\n    readonly agentRole?: string | null;\n    readonly cliVersion: string;\n    readonly createdAt: number;\n    readonly cwd: string;\n    readonly ephemeral: boolean;\n    readonly forkedFromId?: string | null;\n    readonly gitInfo?: V2ThreadRollbackResponse__GitInfo | null;\n    readonly id: string;\n    readonly modelProvider: string;\n    readonly name?: string | null;\n    readonly parentThreadId?: string | null;\n    readonly path?: string | null;\n    readonly preview: string;\n    readonly sessionId: string;\n    readonly source:\n      | \"cli\"\n      | \"vscode\"\n      | \"exec\"\n      | \"appServer\"\n      | \"unknown\"\n      | { readonly custom: string }\n      | { readonly subAgent: V2ThreadRollbackResponse__SubAgentSource };\n    readonly status:\n      | { readonly type: \"notLoaded\" }\n      | { readonly type: \"idle\" }\n      | { readonly type: \"systemError\" }\n      | {\n          readonly activeFlags: ReadonlyArray<V2ThreadRollbackResponse__ThreadActiveFlag>;\n          readonly type: \"active\";\n        };\n    readonly threadSource?: V2ThreadRollbackResponse__ThreadSource | null;\n    readonly turns: ReadonlyArray<V2ThreadRollbackResponse__Turn>;\n    readonly updatedAt: number;\n  };\n};\nexport const V2ThreadRollbackResponse = Schema.Struct({\n  thread: Schema.Struct({\n    agentNickname: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description:\n            \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    agentRole: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    cliVersion: Schema.String.annotate({\n      description: \"Version of the CLI that created the thread.\",\n    }),\n    createdAt: Schema.Number.annotate({\n      description: \"Unix timestamp (in seconds) when the thread was created.\",\n      format: \"int64\",\n    }).check(Schema.isInt()),\n    cwd: Schema.String.annotate({\n      description:\n        \"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.\",\n    }),\n    ephemeral: Schema.Boolean.annotate({\n      description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n    }),\n    forkedFromId: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description: \"Source thread id when this thread was created by forking another thread.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    gitInfo: Schema.optionalKey(\n      Schema.Union([V2ThreadRollbackResponse__GitInfo, Schema.Null]).annotate({\n        description: \"Optional Git metadata captured when the thread was created.\",\n      }),\n    ),\n    id: Schema.String,\n    modelProvider: Schema.String.annotate({\n      description: \"Model provider used for this thread (for example, 'openai').\",\n    }),\n    name: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n        Schema.Null,\n      ]),\n    ),\n    parentThreadId: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description:\n            \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    path: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n        Schema.Null,\n      ]),\n    ),\n    preview: Schema.String.annotate({\n      description: \"Usually the first user message in the thread, if available.\",\n    }),\n    sessionId: Schema.String.annotate({\n      description: \"Session id shared by threads that belong to the same session tree.\",\n    }),\n    source: Schema.Union(\n      [\n        Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n        Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n        Schema.Struct({ subAgent: V2ThreadRollbackResponse__SubAgentSource }).annotate({\n          title: \"SubAgentSessionSource\",\n        }),\n      ],\n      { mode: \"oneOf\" },\n    ).annotate({\n      description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n    }),\n    status: Schema.Union(\n      [\n        Schema.Struct({\n          type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n        }).annotate({ title: \"NotLoadedThreadStatus\" }),\n        Schema.Struct({\n          type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n        }).annotate({ title: \"IdleThreadStatus\" }),\n        Schema.Struct({\n          type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n        }).annotate({ title: \"SystemErrorThreadStatus\" }),\n        Schema.Struct({\n          activeFlags: Schema.Array(V2ThreadRollbackResponse__ThreadActiveFlag),\n          type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n        }).annotate({ title: \"ActiveThreadStatus\" }),\n      ],\n      { mode: \"oneOf\" },\n    ).annotate({ description: \"Current runtime status for the thread.\" }),\n    threadSource: Schema.optionalKey(\n      Schema.Union([V2ThreadRollbackResponse__ThreadSource, Schema.Null]).annotate({\n        description: \"Optional analytics source classification for this thread.\",\n      }),\n    ),\n    turns: Schema.Array(V2ThreadRollbackResponse__Turn).annotate({\n      description:\n        \"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.\",\n    }),\n    updatedAt: Schema.Number.annotate({\n      description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n      format: \"int64\",\n    }).check(Schema.isInt()),\n  }).annotate({\n    description:\n      \"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`.\",\n  }),\n}).annotate({ title: \"ThreadRollbackResponse\" });\n\nexport type V2ThreadRollbackResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadRollbackResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadRollbackResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadRollbackResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadRollbackResponse__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadRollbackResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadRollbackResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadRollbackResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadRollbackResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadRollbackResponse__SubAgentSource };\nexport const V2ThreadRollbackResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadRollbackResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__Thread = {\n  readonly agentNickname?: string | null;\n  readonly agentRole?: string | null;\n  readonly cliVersion: string;\n  readonly createdAt: number;\n  readonly cwd: string;\n  readonly ephemeral: boolean;\n  readonly forkedFromId?: string | null;\n  readonly gitInfo?: V2ThreadRollbackResponse__GitInfo | null;\n  readonly id: string;\n  readonly modelProvider: string;\n  readonly name?: string | null;\n  readonly parentThreadId?: string | null;\n  readonly path?: string | null;\n  readonly preview: string;\n  readonly sessionId: string;\n  readonly source:\n    | \"cli\"\n    | \"vscode\"\n    | \"exec\"\n    | \"appServer\"\n    | \"unknown\"\n    | { readonly custom: string }\n    | { readonly subAgent: V2ThreadRollbackResponse__SubAgentSource };\n  readonly status:\n    | { readonly type: \"notLoaded\" }\n    | { readonly type: \"idle\" }\n    | { readonly type: \"systemError\" }\n    | {\n        readonly activeFlags: ReadonlyArray<V2ThreadRollbackResponse__ThreadActiveFlag>;\n        readonly type: \"active\";\n      };\n  readonly threadSource?: V2ThreadRollbackResponse__ThreadSource | null;\n  readonly turns: ReadonlyArray<V2ThreadRollbackResponse__Turn>;\n  readonly updatedAt: number;\n};\nexport const V2ThreadRollbackResponse__Thread = Schema.Struct({\n  agentNickname: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional random unique nickname assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentRole: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cliVersion: Schema.String.annotate({\n    description: \"Version of the CLI that created the thread.\",\n  }),\n  createdAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was created.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n  cwd: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  ephemeral: Schema.Boolean.annotate({\n    description: \"Whether the thread is ephemeral and should not be materialized on disk.\",\n  }),\n  forkedFromId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Source thread id when this thread was created by forking another thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  gitInfo: Schema.optionalKey(\n    Schema.Union([V2ThreadRollbackResponse__GitInfo, Schema.Null]).annotate({\n      description: \"Optional Git metadata captured when the thread was created.\",\n    }),\n  ),\n  id: Schema.String,\n  modelProvider: Schema.String.annotate({\n    description: \"Model provider used for this thread (for example, 'openai').\",\n  }),\n  name: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional user-facing thread title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  parentThreadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"The ID of the parent thread. This will only be set if this thread is a subagent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"[UNSTABLE] Path to the thread on disk.\" }),\n      Schema.Null,\n    ]),\n  ),\n  preview: Schema.String.annotate({\n    description: \"Usually the first user message in the thread, if available.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description: \"Session id shared by threads that belong to the same session tree.\",\n  }),\n  source: Schema.Union(\n    [\n      Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n      Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n      Schema.Struct({ subAgent: V2ThreadRollbackResponse__SubAgentSource }).annotate({\n        title: \"SubAgentSessionSource\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description: \"Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).\",\n  }),\n  status: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n      }).annotate({ title: \"NotLoadedThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n      }).annotate({ title: \"IdleThreadStatus\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n      }).annotate({ title: \"SystemErrorThreadStatus\" }),\n      Schema.Struct({\n        activeFlags: Schema.Array(V2ThreadRollbackResponse__ThreadActiveFlag),\n        type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n      }).annotate({ title: \"ActiveThreadStatus\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Current runtime status for the thread.\" }),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadRollbackResponse__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional analytics source classification for this thread.\",\n    }),\n  ),\n  turns: Schema.Array(V2ThreadRollbackResponse__Turn).annotate({\n    description:\n      \"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.\",\n  }),\n  updatedAt: Schema.Number.annotate({\n    description: \"Unix timestamp (in seconds) when the thread was last updated.\",\n    format: \"int64\",\n  }).check(Schema.isInt()),\n});\n\nexport type V2ThreadRollbackResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadRollbackResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadRollbackResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadRollbackResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadRollbackResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadRollbackResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadSetNameParams = { readonly name: string; readonly threadId: string };\nexport const V2ThreadSetNameParams = Schema.Struct({\n  name: Schema.String,\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadSetNameParams\" });\n\nexport type V2ThreadSetNameResponse = {};\nexport const V2ThreadSetNameResponse = Schema.Struct({}).annotate({\n  title: \"ThreadSetNameResponse\",\n});\n\nexport type V2ThreadSettingsUpdatedNotification = {\n  readonly threadId: string;\n  readonly threadSettings: V2ThreadSettingsUpdatedNotification__ThreadSettings;\n};\nexport const V2ThreadSettingsUpdatedNotification = Schema.Struct({\n  threadId: Schema.String,\n  threadSettings: V2ThreadSettingsUpdatedNotification__ThreadSettings,\n}).annotate({ title: \"ThreadSettingsUpdatedNotification\" });\n\nexport type V2ThreadSettingsUpdatedNotification__NetworkAccess = \"restricted\" | \"enabled\";\nexport const V2ThreadSettingsUpdatedNotification__NetworkAccess = Schema.Literals([\n  \"restricted\",\n  \"enabled\",\n]);\n\nexport type V2ThreadShellCommandParams = { readonly command: string; readonly threadId: string };\nexport const V2ThreadShellCommandParams = Schema.Struct({\n  command: Schema.String.annotate({\n    description:\n      \"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.\",\n  }),\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadShellCommandParams\" });\n\nexport type V2ThreadShellCommandResponse = {};\nexport const V2ThreadShellCommandResponse = Schema.Struct({}).annotate({\n  title: \"ThreadShellCommandResponse\",\n});\n\nexport type V2ThreadStartedNotification = { readonly thread: V2ThreadStartedNotification__Thread };\nexport const V2ThreadStartedNotification = Schema.Struct({\n  thread: V2ThreadStartedNotification__Thread,\n}).annotate({ title: \"ThreadStartedNotification\" });\n\nexport type V2ThreadStartedNotification__ByteRange = {\n  readonly end: number;\n  readonly start: number;\n};\nexport const V2ThreadStartedNotification__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadStartedNotification__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadStartedNotification__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadStartedNotification__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadStartedNotification__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadStartedNotification__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadStartedNotification__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadStartedNotification__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadStartedNotification__SubAgentSource };\nexport const V2ThreadStartedNotification__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadStartedNotification__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartedNotification__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadStartedNotification__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadStartedNotification__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadStartedNotification__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartedNotification__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadStartedNotification__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadStartParams = {\n  readonly approvalPolicy?: V2ThreadStartParams__AskForApproval | null;\n  readonly approvalsReviewer?: V2ThreadStartParams__ApprovalsReviewer | null;\n  readonly baseInstructions?: string | null;\n  readonly config?: { readonly [x: string]: unknown } | null;\n  readonly cwd?: string | null;\n  readonly developerInstructions?: string | null;\n  readonly ephemeral?: boolean | null;\n  readonly model?: string | null;\n  readonly modelProvider?: string | null;\n  readonly personality?: V2ThreadStartParams__Personality | null;\n  readonly sandbox?: V2ThreadStartParams__SandboxMode | null;\n  readonly serviceName?: string | null;\n  readonly serviceTier?: string | null;\n  readonly sessionStartSource?: V2ThreadStartParams__ThreadStartSource | null;\n  readonly threadSource?: V2ThreadStartParams__ThreadSource | null;\n};\nexport const V2ThreadStartParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(\n    Schema.Union([V2ThreadStartParams__AskForApproval, Schema.Null]),\n  ),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([V2ThreadStartParams__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this thread and subsequent turns.\",\n    }),\n  ),\n  baseInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  config: Schema.optionalKey(\n    Schema.Union([Schema.Record(Schema.String, Schema.Unknown), Schema.Null]),\n  ),\n  cwd: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  developerInstructions: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  ephemeral: Schema.optionalKey(Schema.Union([Schema.Boolean, Schema.Null])),\n  model: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  modelProvider: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  personality: Schema.optionalKey(Schema.Union([V2ThreadStartParams__Personality, Schema.Null])),\n  sandbox: Schema.optionalKey(Schema.Union([V2ThreadStartParams__SandboxMode, Schema.Null])),\n  serviceName: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  sessionStartSource: Schema.optionalKey(\n    Schema.Union([V2ThreadStartParams__ThreadStartSource, Schema.Null]),\n  ),\n  threadSource: Schema.optionalKey(\n    Schema.Union([V2ThreadStartParams__ThreadSource, Schema.Null]).annotate({\n      description: \"Optional client-supplied analytics source classification for this thread.\",\n    }),\n  ),\n}).annotate({ title: \"ThreadStartParams\" });\n\nexport type V2ThreadStartParams__CapabilityRootLocation = {\n  readonly environmentId: string;\n  readonly path: string;\n  readonly type: \"environment\";\n};\nexport const V2ThreadStartParams__CapabilityRootLocation = Schema.Union(\n  [\n    Schema.Struct({\n      environmentId: Schema.String,\n      path: Schema.String,\n      type: Schema.Literal(\"environment\").annotate({\n        title: \"EnvironmentCapabilityRootLocationType\",\n      }),\n    }).annotate({\n      title: \"EnvironmentCapabilityRootLocation\",\n      description: \"A path owned by an execution environment.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ description: \"Location used to resolve a selected capability root.\" });\n\nexport type V2ThreadStartParams__DynamicToolSpec = {\n  readonly deferLoading?: boolean;\n  readonly description: string;\n  readonly inputSchema: unknown;\n  readonly name: string;\n  readonly namespace?: string | null;\n};\nexport const V2ThreadStartParams__DynamicToolSpec = Schema.Struct({\n  deferLoading: Schema.optionalKey(Schema.Boolean),\n  description: Schema.String,\n  inputSchema: Schema.Unknown,\n  name: Schema.String,\n  namespace: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n});\n\nexport type V2ThreadStartParams__SelectedCapabilityRoot = {\n  readonly id: string;\n  readonly location: {\n    readonly environmentId: string;\n    readonly path: string;\n    readonly type: \"environment\";\n  };\n};\nexport const V2ThreadStartParams__SelectedCapabilityRoot = Schema.Struct({\n  id: Schema.String.annotate({\n    description: \"Stable identifier supplied by the capability selection platform.\",\n  }),\n  location: Schema.Union(\n    [\n      Schema.Struct({\n        environmentId: Schema.String,\n        path: Schema.String,\n        type: Schema.Literal(\"environment\").annotate({\n          title: \"EnvironmentCapabilityRootLocationType\",\n        }),\n      }).annotate({\n        title: \"EnvironmentCapabilityRootLocation\",\n        description: \"A path owned by an execution environment.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"Location used to resolve a selected capability root.\" }),\n}).annotate({\n  description: \"A user-selected root that can expose one or more runtime capabilities.\",\n});\n\nexport type V2ThreadStartParams__TurnEnvironmentParams = {\n  readonly cwd: V2ThreadStartParams__AbsolutePathBuf;\n  readonly environmentId: string;\n};\nexport const V2ThreadStartParams__TurnEnvironmentParams = Schema.Struct({\n  cwd: V2ThreadStartParams__AbsolutePathBuf,\n  environmentId: Schema.String,\n});\n\nexport type V2ThreadStartResponse = {\n  readonly approvalPolicy: V2ThreadStartResponse__AskForApproval;\n  readonly approvalsReviewer: \"user\" | \"auto_review\" | \"guardian_subagent\";\n  readonly cwd: V2ThreadStartResponse__AbsolutePathBuf;\n  readonly instructionSources?: ReadonlyArray<V2ThreadStartResponse__AbsolutePathBuf>;\n  readonly model: string;\n  readonly modelProvider: string;\n  readonly reasoningEffort?: V2ThreadStartResponse__ReasoningEffort | null;\n  readonly sandbox:\n    | { readonly type: \"dangerFullAccess\" }\n    | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n    | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n    | {\n        readonly excludeSlashTmp?: boolean;\n        readonly excludeTmpdirEnvVar?: boolean;\n        readonly networkAccess?: boolean;\n        readonly type: \"workspaceWrite\";\n        readonly writableRoots?: ReadonlyArray<V2ThreadStartResponse__AbsolutePathBuf>;\n      };\n  readonly serviceTier?: string | null;\n  readonly thread: V2ThreadStartResponse__Thread;\n};\nexport const V2ThreadStartResponse = Schema.Struct({\n  approvalPolicy: V2ThreadStartResponse__AskForApproval,\n  approvalsReviewer: Schema.Literals([\"user\", \"auto_review\", \"guardian_subagent\"]).annotate({\n    description:\n      \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n  }),\n  cwd: V2ThreadStartResponse__AbsolutePathBuf,\n  instructionSources: Schema.optionalKey(\n    Schema.Array(V2ThreadStartResponse__AbsolutePathBuf).annotate({\n      description: \"Instruction source files currently loaded for this thread.\",\n      default: [],\n    }),\n  ),\n  model: Schema.String,\n  modelProvider: Schema.String,\n  reasoningEffort: Schema.optionalKey(\n    Schema.Union([V2ThreadStartResponse__ReasoningEffort, Schema.Null]),\n  ),\n  sandbox: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"dangerFullAccess\").annotate({\n          title: \"DangerFullAccessSandboxPolicyType\",\n        }),\n      }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n      Schema.Struct({\n        networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n      }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n      Schema.Struct({\n        networkAccess: Schema.optionalKey(\n          Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n        ),\n        type: Schema.Literal(\"externalSandbox\").annotate({\n          title: \"ExternalSandboxSandboxPolicyType\",\n        }),\n      }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n      Schema.Struct({\n        excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n        type: Schema.Literal(\"workspaceWrite\").annotate({\n          title: \"WorkspaceWriteSandboxPolicyType\",\n        }),\n        writableRoots: Schema.optionalKey(\n          Schema.Array(V2ThreadStartResponse__AbsolutePathBuf).annotate({ default: [] }),\n        ),\n      }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"Legacy sandbox policy retained for compatibility. Experimental clients should prefer `activePermissionProfile` for profile provenance.\",\n  }),\n  serviceTier: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  thread: V2ThreadStartResponse__Thread,\n}).annotate({ title: \"ThreadStartResponse\" });\n\nexport type V2ThreadStartResponse__ActivePermissionProfile = {\n  readonly extends?: string | null;\n  readonly id: string;\n};\nexport const V2ThreadStartResponse__ActivePermissionProfile = Schema.Struct({\n  extends: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Parent profile identifier from the selected permissions profile's `extends` setting, when present.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({\n    description:\n      \"Identifier from `default_permissions` or the implicit built-in default, such as `:workspace` or a user-defined `[permissions.<id>]` profile.\",\n  }),\n});\n\nexport type V2ThreadStartResponse__ApprovalsReviewer = \"user\" | \"auto_review\" | \"guardian_subagent\";\nexport const V2ThreadStartResponse__ApprovalsReviewer = Schema.Literals([\n  \"user\",\n  \"auto_review\",\n  \"guardian_subagent\",\n]).annotate({\n  description:\n    \"Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.\",\n});\n\nexport type V2ThreadStartResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadStartResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadStartResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadStartResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadStartResponse__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadStartResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadStartResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadStartResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadStartResponse__NetworkAccess = \"restricted\" | \"enabled\";\nexport const V2ThreadStartResponse__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type V2ThreadStartResponse__SandboxPolicy =\n  | { readonly type: \"dangerFullAccess\" }\n  | { readonly networkAccess?: boolean; readonly type: \"readOnly\" }\n  | { readonly networkAccess?: \"restricted\" | \"enabled\"; readonly type: \"externalSandbox\" }\n  | {\n      readonly excludeSlashTmp?: boolean;\n      readonly excludeTmpdirEnvVar?: boolean;\n      readonly networkAccess?: boolean;\n      readonly type: \"workspaceWrite\";\n      readonly writableRoots?: ReadonlyArray<V2ThreadStartResponse__AbsolutePathBuf>;\n    };\nexport const V2ThreadStartResponse__SandboxPolicy = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"dangerFullAccess\").annotate({\n        title: \"DangerFullAccessSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"DangerFullAccessSandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"readOnly\").annotate({ title: \"ReadOnlySandboxPolicyType\" }),\n    }).annotate({ title: \"ReadOnlySandboxPolicy\" }),\n    Schema.Struct({\n      networkAccess: Schema.optionalKey(\n        Schema.Literals([\"restricted\", \"enabled\"]).annotate({ default: \"restricted\" }),\n      ),\n      type: Schema.Literal(\"externalSandbox\").annotate({\n        title: \"ExternalSandboxSandboxPolicyType\",\n      }),\n    }).annotate({ title: \"ExternalSandboxSandboxPolicy\" }),\n    Schema.Struct({\n      excludeSlashTmp: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      excludeTmpdirEnvVar: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      networkAccess: Schema.optionalKey(Schema.Boolean.annotate({ default: false })),\n      type: Schema.Literal(\"workspaceWrite\").annotate({ title: \"WorkspaceWriteSandboxPolicyType\" }),\n      writableRoots: Schema.optionalKey(\n        Schema.Array(V2ThreadStartResponse__AbsolutePathBuf).annotate({ default: [] }),\n      ),\n    }).annotate({ title: \"WorkspaceWriteSandboxPolicy\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadStartResponse__SubAgentSource };\nexport const V2ThreadStartResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadStartResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadStartResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadStartResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadStartResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadStartResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadStartResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadStatusChangedNotification = {\n  readonly status: V2ThreadStatusChangedNotification__ThreadStatus;\n  readonly threadId: string;\n};\nexport const V2ThreadStatusChangedNotification = Schema.Struct({\n  status: V2ThreadStatusChangedNotification__ThreadStatus,\n  threadId: Schema.String,\n}).annotate({ title: \"ThreadStatusChangedNotification\" });\n\nexport type V2ThreadTokenUsageUpdatedNotification = {\n  readonly threadId: string;\n  readonly tokenUsage: V2ThreadTokenUsageUpdatedNotification__ThreadTokenUsage;\n  readonly turnId: string;\n};\nexport const V2ThreadTokenUsageUpdatedNotification = Schema.Struct({\n  threadId: Schema.String,\n  tokenUsage: V2ThreadTokenUsageUpdatedNotification__ThreadTokenUsage,\n  turnId: Schema.String,\n}).annotate({ title: \"ThreadTokenUsageUpdatedNotification\" });\n\nexport type V2ThreadUnarchivedNotification = { readonly threadId: string };\nexport const V2ThreadUnarchivedNotification = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadUnarchivedNotification\",\n});\n\nexport type V2ThreadUnarchiveParams = { readonly threadId: string };\nexport const V2ThreadUnarchiveParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadUnarchiveParams\",\n});\n\nexport type V2ThreadUnarchiveResponse = { readonly thread: V2ThreadUnarchiveResponse__Thread };\nexport const V2ThreadUnarchiveResponse = Schema.Struct({\n  thread: V2ThreadUnarchiveResponse__Thread,\n}).annotate({ title: \"ThreadUnarchiveResponse\" });\n\nexport type V2ThreadUnarchiveResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2ThreadUnarchiveResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2ThreadUnarchiveResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2ThreadUnarchiveResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2ThreadUnarchiveResponse__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2ThreadUnarchiveResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2ThreadUnarchiveResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2ThreadUnarchiveResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2ThreadUnarchiveResponse__SessionSource =\n  | \"cli\"\n  | \"vscode\"\n  | \"exec\"\n  | \"appServer\"\n  | \"unknown\"\n  | { readonly custom: string }\n  | { readonly subAgent: V2ThreadUnarchiveResponse__SubAgentSource };\nexport const V2ThreadUnarchiveResponse__SessionSource = Schema.Union(\n  [\n    Schema.Literals([\"cli\", \"vscode\", \"exec\", \"appServer\", \"unknown\"]),\n    Schema.Struct({ custom: Schema.String }).annotate({ title: \"CustomSessionSource\" }),\n    Schema.Struct({ subAgent: V2ThreadUnarchiveResponse__SubAgentSource }).annotate({\n      title: \"SubAgentSessionSource\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__ThreadStatus =\n  | { readonly type: \"notLoaded\" }\n  | { readonly type: \"idle\" }\n  | { readonly type: \"systemError\" }\n  | {\n      readonly activeFlags: ReadonlyArray<V2ThreadUnarchiveResponse__ThreadActiveFlag>;\n      readonly type: \"active\";\n    };\nexport const V2ThreadUnarchiveResponse__ThreadStatus = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"notLoaded\").annotate({ title: \"NotLoadedThreadStatusType\" }),\n    }).annotate({ title: \"NotLoadedThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"idle\").annotate({ title: \"IdleThreadStatusType\" }),\n    }).annotate({ title: \"IdleThreadStatus\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"systemError\").annotate({ title: \"SystemErrorThreadStatusType\" }),\n    }).annotate({ title: \"SystemErrorThreadStatus\" }),\n    Schema.Struct({\n      activeFlags: Schema.Array(V2ThreadUnarchiveResponse__ThreadActiveFlag),\n      type: Schema.Literal(\"active\").annotate({ title: \"ActiveThreadStatusType\" }),\n    }).annotate({ title: \"ActiveThreadStatus\" }),\n  ],\n  { mode: \"oneOf\" },\n);\n\nexport type V2ThreadUnarchiveResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2ThreadUnarchiveResponse__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2ThreadUnsubscribeParams = { readonly threadId: string };\nexport const V2ThreadUnsubscribeParams = Schema.Struct({ threadId: Schema.String }).annotate({\n  title: \"ThreadUnsubscribeParams\",\n});\n\nexport type V2ThreadUnsubscribeResponse = {\n  readonly status: V2ThreadUnsubscribeResponse__ThreadUnsubscribeStatus;\n};\nexport const V2ThreadUnsubscribeResponse = Schema.Struct({\n  status: V2ThreadUnsubscribeResponse__ThreadUnsubscribeStatus,\n}).annotate({ title: \"ThreadUnsubscribeResponse\" });\n\nexport type V2TurnCompletedNotification = {\n  readonly threadId: string;\n  readonly turn: V2TurnCompletedNotification__Turn;\n};\nexport const V2TurnCompletedNotification = Schema.Struct({\n  threadId: Schema.String,\n  turn: V2TurnCompletedNotification__Turn,\n}).annotate({ title: \"TurnCompletedNotification\" });\n\nexport type V2TurnCompletedNotification__ByteRange = {\n  readonly end: number;\n  readonly start: number;\n};\nexport const V2TurnCompletedNotification__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2TurnCompletedNotification__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2TurnCompletedNotification__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2TurnCompletedNotification__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2TurnCompletedNotification__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnCompletedNotification__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2TurnCompletedNotification__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2TurnCompletedNotification__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2TurnCompletedNotification__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2TurnDiffUpdatedNotification = {\n  readonly diff: string;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2TurnDiffUpdatedNotification = Schema.Struct({\n  diff: Schema.String,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({\n  title: \"TurnDiffUpdatedNotification\",\n  description:\n    \"Notification that the turn-level unified diff has changed. Contains the latest aggregated diff across all file changes in the turn.\",\n});\n\nexport type V2TurnInterruptParams = { readonly threadId: string; readonly turnId: string };\nexport const V2TurnInterruptParams = Schema.Struct({\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"TurnInterruptParams\" });\n\nexport type V2TurnInterruptResponse = {};\nexport const V2TurnInterruptResponse = Schema.Struct({}).annotate({\n  title: \"TurnInterruptResponse\",\n});\n\nexport type V2TurnModerationMetadataNotification = {\n  readonly metadata: unknown;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2TurnModerationMetadataNotification = Schema.Struct({\n  metadata: Schema.Unknown,\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"TurnModerationMetadataNotification\" });\n\nexport type V2TurnPlanUpdatedNotification = {\n  readonly explanation?: string | null;\n  readonly plan: ReadonlyArray<V2TurnPlanUpdatedNotification__TurnPlanStep>;\n  readonly threadId: string;\n  readonly turnId: string;\n};\nexport const V2TurnPlanUpdatedNotification = Schema.Struct({\n  explanation: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  plan: Schema.Array(V2TurnPlanUpdatedNotification__TurnPlanStep),\n  threadId: Schema.String,\n  turnId: Schema.String,\n}).annotate({ title: \"TurnPlanUpdatedNotification\" });\n\nexport type V2TurnStartedNotification = {\n  readonly threadId: string;\n  readonly turn: V2TurnStartedNotification__Turn;\n};\nexport const V2TurnStartedNotification = Schema.Struct({\n  threadId: Schema.String,\n  turn: V2TurnStartedNotification__Turn,\n}).annotate({ title: \"TurnStartedNotification\" });\n\nexport type V2TurnStartedNotification__ByteRange = { readonly end: number; readonly start: number };\nexport const V2TurnStartedNotification__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2TurnStartedNotification__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2TurnStartedNotification__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2TurnStartedNotification__CollabAgentToolCallStatus =\n  | \"inProgress\"\n  | \"completed\"\n  | \"failed\";\nexport const V2TurnStartedNotification__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnStartedNotification__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2TurnStartedNotification__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2TurnStartedNotification__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2TurnStartedNotification__TurnItemsView = Schema.Literals([\n  \"notLoaded\",\n  \"summary\",\n  \"full\",\n]);\n\nexport type V2TurnStartParams = {\n  readonly approvalPolicy?: V2TurnStartParams__AskForApproval | null;\n  readonly approvalsReviewer?: V2TurnStartParams__ApprovalsReviewer | null;\n  readonly clientUserMessageId?: string | null;\n  readonly cwd?: string | null;\n  readonly effort?: V2TurnStartParams__ReasoningEffort | null;\n  readonly input: ReadonlyArray<V2TurnStartParams__UserInput>;\n  readonly model?: string | null;\n  readonly outputSchema?: unknown;\n  readonly personality?: V2TurnStartParams__Personality | null;\n  readonly sandboxPolicy?: V2TurnStartParams__SandboxPolicy | null;\n  readonly serviceTier?: string | null;\n  readonly summary?: V2TurnStartParams__ReasoningSummary | null;\n  readonly threadId: string;\n};\nexport const V2TurnStartParams = Schema.Struct({\n  approvalPolicy: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__AskForApproval, Schema.Null]).annotate({\n      description: \"Override the approval policy for this turn and subsequent turns.\",\n    }),\n  ),\n  approvalsReviewer: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__ApprovalsReviewer, Schema.Null]).annotate({\n      description:\n        \"Override where approval requests are routed for review on this turn and subsequent turns.\",\n    }),\n  ),\n  clientUserMessageId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Override the working directory for this turn and subsequent turns.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  effort: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__ReasoningEffort, Schema.Null]).annotate({\n      description: \"Override the reasoning effort for this turn and subsequent turns.\",\n    }),\n  ),\n  input: Schema.Array(V2TurnStartParams__UserInput),\n  model: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Override the model for this turn and subsequent turns.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  outputSchema: Schema.optionalKey(\n    Schema.Unknown.annotate({\n      description:\n        \"Optional JSON Schema used to constrain the final assistant message for this turn.\",\n    }),\n  ),\n  personality: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__Personality, Schema.Null]).annotate({\n      description: \"Override the personality for this turn and subsequent turns.\",\n    }),\n  ),\n  sandboxPolicy: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__SandboxPolicy, Schema.Null]).annotate({\n      description: \"Override the sandbox policy for this turn and subsequent turns.\",\n    }),\n  ),\n  serviceTier: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Override the service tier for this turn and subsequent turns.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  summary: Schema.optionalKey(\n    Schema.Union([V2TurnStartParams__ReasoningSummary, Schema.Null]).annotate({\n      description: \"Override the reasoning summary for this turn and subsequent turns.\",\n    }),\n  ),\n  threadId: Schema.String,\n}).annotate({ title: \"TurnStartParams\" });\n\nexport type V2TurnStartParams__AdditionalContextEntry = {\n  readonly kind: V2TurnStartParams__AdditionalContextKind;\n  readonly value: string;\n};\nexport const V2TurnStartParams__AdditionalContextEntry = Schema.Struct({\n  kind: V2TurnStartParams__AdditionalContextKind,\n  value: Schema.String,\n});\n\nexport type V2TurnStartParams__ByteRange = { readonly end: number; readonly start: number };\nexport const V2TurnStartParams__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2TurnStartParams__CollaborationMode = {\n  readonly mode: V2TurnStartParams__ModeKind;\n  readonly settings: V2TurnStartParams__Settings;\n};\nexport const V2TurnStartParams__CollaborationMode = Schema.Struct({\n  mode: V2TurnStartParams__ModeKind,\n  settings: V2TurnStartParams__Settings,\n}).annotate({ description: \"Collaboration mode for a Codex session.\" });\n\nexport type V2TurnStartParams__NetworkAccess = \"restricted\" | \"enabled\";\nexport const V2TurnStartParams__NetworkAccess = Schema.Literals([\"restricted\", \"enabled\"]);\n\nexport type V2TurnStartParams__TurnEnvironmentParams = {\n  readonly cwd: V2TurnStartParams__AbsolutePathBuf;\n  readonly environmentId: string;\n};\nexport const V2TurnStartParams__TurnEnvironmentParams = Schema.Struct({\n  cwd: V2TurnStartParams__AbsolutePathBuf,\n  environmentId: Schema.String,\n});\n\nexport type V2TurnStartResponse = { readonly turn: V2TurnStartResponse__Turn };\nexport const V2TurnStartResponse = Schema.Struct({ turn: V2TurnStartResponse__Turn }).annotate({\n  title: \"TurnStartResponse\",\n});\n\nexport type V2TurnStartResponse__ByteRange = { readonly end: number; readonly start: number };\nexport const V2TurnStartResponse__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2TurnStartResponse__CollabAgentTool =\n  | \"spawnAgent\"\n  | \"sendInput\"\n  | \"resumeAgent\"\n  | \"wait\"\n  | \"closeAgent\";\nexport const V2TurnStartResponse__CollabAgentTool = Schema.Literals([\n  \"spawnAgent\",\n  \"sendInput\",\n  \"resumeAgent\",\n  \"wait\",\n  \"closeAgent\",\n]);\n\nexport type V2TurnStartResponse__CollabAgentToolCallStatus = \"inProgress\" | \"completed\" | \"failed\";\nexport const V2TurnStartResponse__CollabAgentToolCallStatus = Schema.Literals([\n  \"inProgress\",\n  \"completed\",\n  \"failed\",\n]);\n\nexport type V2TurnStartResponse__CommandExecutionSource =\n  | \"agent\"\n  | \"userShell\"\n  | \"unifiedExecStartup\"\n  | \"unifiedExecInteraction\";\nexport const V2TurnStartResponse__CommandExecutionSource = Schema.Literals([\n  \"agent\",\n  \"userShell\",\n  \"unifiedExecStartup\",\n  \"unifiedExecInteraction\",\n]);\n\nexport type V2TurnStartResponse__TurnItemsView = \"notLoaded\" | \"summary\" | \"full\";\nexport const V2TurnStartResponse__TurnItemsView = Schema.Literals([\"notLoaded\", \"summary\", \"full\"]);\n\nexport type V2TurnSteerParams = {\n  readonly clientUserMessageId?: string | null;\n  readonly expectedTurnId: string;\n  readonly input: ReadonlyArray<V2TurnSteerParams__UserInput>;\n  readonly threadId: string;\n};\nexport const V2TurnSteerParams = Schema.Struct({\n  clientUserMessageId: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  expectedTurnId: Schema.String.annotate({\n    description:\n      \"Required active turn id precondition. The request fails when it does not match the currently active turn.\",\n  }),\n  input: Schema.Array(V2TurnSteerParams__UserInput),\n  threadId: Schema.String,\n}).annotate({ title: \"TurnSteerParams\" });\n\nexport type V2TurnSteerParams__AdditionalContextEntry = {\n  readonly kind: V2TurnSteerParams__AdditionalContextKind;\n  readonly value: string;\n};\nexport const V2TurnSteerParams__AdditionalContextEntry = Schema.Struct({\n  kind: V2TurnSteerParams__AdditionalContextKind,\n  value: Schema.String,\n});\n\nexport type V2TurnSteerParams__ByteRange = { readonly end: number; readonly start: number };\nexport const V2TurnSteerParams__ByteRange = Schema.Struct({\n  end: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  start: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type V2TurnSteerResponse = { readonly turnId: string };\nexport const V2TurnSteerResponse = Schema.Struct({ turnId: Schema.String }).annotate({\n  title: \"TurnSteerResponse\",\n});\n\nexport type V2WarningNotification = { readonly message: string; readonly threadId?: string | null };\nexport const V2WarningNotification = Schema.Struct({\n  message: Schema.String.annotate({ description: \"Concise warning message for the user.\" }),\n  threadId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional thread target when the warning applies to a specific thread.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ title: \"WarningNotification\" });\n\nexport type V2WindowsSandboxReadinessResponse = {\n  readonly status: V2WindowsSandboxReadinessResponse__WindowsSandboxReadiness;\n};\nexport const V2WindowsSandboxReadinessResponse = Schema.Struct({\n  status: V2WindowsSandboxReadinessResponse__WindowsSandboxReadiness,\n}).annotate({ title: \"WindowsSandboxReadinessResponse\" });\n\nexport type V2WindowsSandboxSetupCompletedNotification = {\n  readonly error?: string | null;\n  readonly mode: V2WindowsSandboxSetupCompletedNotification__WindowsSandboxSetupMode;\n  readonly success: boolean;\n};\nexport const V2WindowsSandboxSetupCompletedNotification = Schema.Struct({\n  error: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  mode: V2WindowsSandboxSetupCompletedNotification__WindowsSandboxSetupMode,\n  success: Schema.Boolean,\n}).annotate({ title: \"WindowsSandboxSetupCompletedNotification\" });\n\nexport type V2WindowsSandboxSetupStartParams = {\n  readonly cwd?: V2WindowsSandboxSetupStartParams__AbsolutePathBuf | null;\n  readonly mode: V2WindowsSandboxSetupStartParams__WindowsSandboxSetupMode;\n};\nexport const V2WindowsSandboxSetupStartParams = Schema.Struct({\n  cwd: Schema.optionalKey(\n    Schema.Union([V2WindowsSandboxSetupStartParams__AbsolutePathBuf, Schema.Null]),\n  ),\n  mode: V2WindowsSandboxSetupStartParams__WindowsSandboxSetupMode,\n}).annotate({ title: \"WindowsSandboxSetupStartParams\" });\n\nexport type V2WindowsSandboxSetupStartResponse = { readonly started: boolean };\nexport const V2WindowsSandboxSetupStartResponse = Schema.Struct({\n  started: Schema.Boolean,\n}).annotate({ title: \"WindowsSandboxSetupStartResponse\" });\n\nexport type V2WindowsWorldWritableWarningNotification = {\n  readonly extraCount: number;\n  readonly failedScan: boolean;\n  readonly samplePaths: ReadonlyArray<string>;\n};\nexport const V2WindowsWorldWritableWarningNotification = Schema.Struct({\n  extraCount: Schema.Number.annotate({ format: \"uint\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  failedScan: Schema.Boolean,\n  samplePaths: Schema.Array(Schema.String),\n}).annotate({ title: \"WindowsWorldWritableWarningNotification\" });\n","// This file is generated by the effect-codex-app-server package. Do not edit manually.\n// Upstream protocol ref: b39f943a634a6e7ba86c3d6e8cf6d5f35e612566\n\nimport * as CodexSchema from \"./schema.gen.ts\";\n\nexport const CLIENT_REQUEST_METHODS = {\n  initialize: \"initialize\",\n  \"thread/start\": \"thread/start\",\n  \"thread/resume\": \"thread/resume\",\n  \"thread/fork\": \"thread/fork\",\n  \"thread/archive\": \"thread/archive\",\n  \"thread/delete\": \"thread/delete\",\n  \"thread/unsubscribe\": \"thread/unsubscribe\",\n  \"thread/name/set\": \"thread/name/set\",\n  \"thread/goal/set\": \"thread/goal/set\",\n  \"thread/goal/get\": \"thread/goal/get\",\n  \"thread/goal/clear\": \"thread/goal/clear\",\n  \"thread/metadata/update\": \"thread/metadata/update\",\n  \"thread/unarchive\": \"thread/unarchive\",\n  \"thread/compact/start\": \"thread/compact/start\",\n  \"thread/shellCommand\": \"thread/shellCommand\",\n  \"thread/approveGuardianDeniedAction\": \"thread/approveGuardianDeniedAction\",\n  \"thread/rollback\": \"thread/rollback\",\n  \"thread/list\": \"thread/list\",\n  \"thread/loaded/list\": \"thread/loaded/list\",\n  \"thread/read\": \"thread/read\",\n  \"thread/inject_items\": \"thread/inject_items\",\n  \"skills/list\": \"skills/list\",\n  \"skills/extraRoots/set\": \"skills/extraRoots/set\",\n  \"hooks/list\": \"hooks/list\",\n  \"marketplace/add\": \"marketplace/add\",\n  \"marketplace/remove\": \"marketplace/remove\",\n  \"marketplace/upgrade\": \"marketplace/upgrade\",\n  \"plugin/list\": \"plugin/list\",\n  \"plugin/installed\": \"plugin/installed\",\n  \"plugin/read\": \"plugin/read\",\n  \"plugin/skill/read\": \"plugin/skill/read\",\n  \"plugin/share/save\": \"plugin/share/save\",\n  \"plugin/share/updateTargets\": \"plugin/share/updateTargets\",\n  \"plugin/share/list\": \"plugin/share/list\",\n  \"plugin/share/checkout\": \"plugin/share/checkout\",\n  \"plugin/share/delete\": \"plugin/share/delete\",\n  \"app/list\": \"app/list\",\n  \"fs/readFile\": \"fs/readFile\",\n  \"fs/writeFile\": \"fs/writeFile\",\n  \"fs/createDirectory\": \"fs/createDirectory\",\n  \"fs/getMetadata\": \"fs/getMetadata\",\n  \"fs/readDirectory\": \"fs/readDirectory\",\n  \"fs/remove\": \"fs/remove\",\n  \"fs/copy\": \"fs/copy\",\n  \"fs/watch\": \"fs/watch\",\n  \"fs/unwatch\": \"fs/unwatch\",\n  \"skills/config/write\": \"skills/config/write\",\n  \"plugin/install\": \"plugin/install\",\n  \"plugin/uninstall\": \"plugin/uninstall\",\n  \"turn/start\": \"turn/start\",\n  \"turn/steer\": \"turn/steer\",\n  \"turn/interrupt\": \"turn/interrupt\",\n  \"review/start\": \"review/start\",\n  \"model/list\": \"model/list\",\n  \"modelProvider/capabilities/read\": \"modelProvider/capabilities/read\",\n  \"experimentalFeature/list\": \"experimentalFeature/list\",\n  \"permissionProfile/list\": \"permissionProfile/list\",\n  \"experimentalFeature/enablement/set\": \"experimentalFeature/enablement/set\",\n  \"mcpServer/oauth/login\": \"mcpServer/oauth/login\",\n  \"config/mcpServer/reload\": \"config/mcpServer/reload\",\n  \"mcpServerStatus/list\": \"mcpServerStatus/list\",\n  \"mcpServer/resource/read\": \"mcpServer/resource/read\",\n  \"mcpServer/tool/call\": \"mcpServer/tool/call\",\n  \"windowsSandbox/setupStart\": \"windowsSandbox/setupStart\",\n  \"windowsSandbox/readiness\": \"windowsSandbox/readiness\",\n  \"account/login/start\": \"account/login/start\",\n  \"account/login/cancel\": \"account/login/cancel\",\n  \"account/logout\": \"account/logout\",\n  \"account/rateLimits/read\": \"account/rateLimits/read\",\n  \"account/usage/read\": \"account/usage/read\",\n  \"account/sendAddCreditsNudgeEmail\": \"account/sendAddCreditsNudgeEmail\",\n  \"feedback/upload\": \"feedback/upload\",\n  \"command/exec\": \"command/exec\",\n  \"command/exec/write\": \"command/exec/write\",\n  \"command/exec/terminate\": \"command/exec/terminate\",\n  \"command/exec/resize\": \"command/exec/resize\",\n  \"config/read\": \"config/read\",\n  \"externalAgentConfig/detect\": \"externalAgentConfig/detect\",\n  \"externalAgentConfig/import\": \"externalAgentConfig/import\",\n  \"config/value/write\": \"config/value/write\",\n  \"config/batchWrite\": \"config/batchWrite\",\n  \"configRequirements/read\": \"configRequirements/read\",\n  \"account/read\": \"account/read\",\n  getConversationSummary: \"getConversationSummary\",\n  gitDiffToRemote: \"gitDiffToRemote\",\n  getAuthStatus: \"getAuthStatus\",\n  fuzzyFileSearch: \"fuzzyFileSearch\",\n} as const;\n\nexport const CLIENT_NOTIFICATION_METHODS = {\n  initialized: \"initialized\",\n} as const;\n\nexport const SERVER_REQUEST_METHODS = {\n  \"item/commandExecution/requestApproval\": \"item/commandExecution/requestApproval\",\n  \"item/fileChange/requestApproval\": \"item/fileChange/requestApproval\",\n  \"item/tool/requestUserInput\": \"item/tool/requestUserInput\",\n  \"mcpServer/elicitation/request\": \"mcpServer/elicitation/request\",\n  \"item/permissions/requestApproval\": \"item/permissions/requestApproval\",\n  \"item/tool/call\": \"item/tool/call\",\n  \"account/chatgptAuthTokens/refresh\": \"account/chatgptAuthTokens/refresh\",\n  \"attestation/generate\": \"attestation/generate\",\n  applyPatchApproval: \"applyPatchApproval\",\n  execCommandApproval: \"execCommandApproval\",\n} as const;\n\nexport const SERVER_NOTIFICATION_METHODS = {\n  error: \"error\",\n  \"thread/started\": \"thread/started\",\n  \"thread/status/changed\": \"thread/status/changed\",\n  \"thread/archived\": \"thread/archived\",\n  \"thread/deleted\": \"thread/deleted\",\n  \"thread/unarchived\": \"thread/unarchived\",\n  \"thread/closed\": \"thread/closed\",\n  \"skills/changed\": \"skills/changed\",\n  \"thread/name/updated\": \"thread/name/updated\",\n  \"thread/goal/updated\": \"thread/goal/updated\",\n  \"thread/goal/cleared\": \"thread/goal/cleared\",\n  \"thread/settings/updated\": \"thread/settings/updated\",\n  \"thread/tokenUsage/updated\": \"thread/tokenUsage/updated\",\n  \"turn/started\": \"turn/started\",\n  \"hook/started\": \"hook/started\",\n  \"turn/completed\": \"turn/completed\",\n  \"hook/completed\": \"hook/completed\",\n  \"turn/diff/updated\": \"turn/diff/updated\",\n  \"turn/plan/updated\": \"turn/plan/updated\",\n  \"item/started\": \"item/started\",\n  \"item/autoApprovalReview/started\": \"item/autoApprovalReview/started\",\n  \"item/autoApprovalReview/completed\": \"item/autoApprovalReview/completed\",\n  \"item/completed\": \"item/completed\",\n  \"rawResponseItem/completed\": \"rawResponseItem/completed\",\n  \"item/agentMessage/delta\": \"item/agentMessage/delta\",\n  \"item/plan/delta\": \"item/plan/delta\",\n  \"command/exec/outputDelta\": \"command/exec/outputDelta\",\n  \"process/outputDelta\": \"process/outputDelta\",\n  \"process/exited\": \"process/exited\",\n  \"item/commandExecution/outputDelta\": \"item/commandExecution/outputDelta\",\n  \"item/commandExecution/terminalInteraction\": \"item/commandExecution/terminalInteraction\",\n  \"item/fileChange/outputDelta\": \"item/fileChange/outputDelta\",\n  \"item/fileChange/patchUpdated\": \"item/fileChange/patchUpdated\",\n  \"serverRequest/resolved\": \"serverRequest/resolved\",\n  \"item/mcpToolCall/progress\": \"item/mcpToolCall/progress\",\n  \"mcpServer/oauthLogin/completed\": \"mcpServer/oauthLogin/completed\",\n  \"mcpServer/startupStatus/updated\": \"mcpServer/startupStatus/updated\",\n  \"account/updated\": \"account/updated\",\n  \"account/rateLimits/updated\": \"account/rateLimits/updated\",\n  \"app/list/updated\": \"app/list/updated\",\n  \"remoteControl/status/changed\": \"remoteControl/status/changed\",\n  \"externalAgentConfig/import/completed\": \"externalAgentConfig/import/completed\",\n  \"fs/changed\": \"fs/changed\",\n  \"item/reasoning/summaryTextDelta\": \"item/reasoning/summaryTextDelta\",\n  \"item/reasoning/summaryPartAdded\": \"item/reasoning/summaryPartAdded\",\n  \"item/reasoning/textDelta\": \"item/reasoning/textDelta\",\n  \"thread/compacted\": \"thread/compacted\",\n  \"model/rerouted\": \"model/rerouted\",\n  \"model/verification\": \"model/verification\",\n  \"turn/moderationMetadata\": \"turn/moderationMetadata\",\n  warning: \"warning\",\n  guardianWarning: \"guardianWarning\",\n  deprecationNotice: \"deprecationNotice\",\n  configWarning: \"configWarning\",\n  \"fuzzyFileSearch/sessionUpdated\": \"fuzzyFileSearch/sessionUpdated\",\n  \"fuzzyFileSearch/sessionCompleted\": \"fuzzyFileSearch/sessionCompleted\",\n  \"thread/realtime/started\": \"thread/realtime/started\",\n  \"thread/realtime/itemAdded\": \"thread/realtime/itemAdded\",\n  \"thread/realtime/transcript/delta\": \"thread/realtime/transcript/delta\",\n  \"thread/realtime/transcript/done\": \"thread/realtime/transcript/done\",\n  \"thread/realtime/outputAudio/delta\": \"thread/realtime/outputAudio/delta\",\n  \"thread/realtime/sdp\": \"thread/realtime/sdp\",\n  \"thread/realtime/error\": \"thread/realtime/error\",\n  \"thread/realtime/closed\": \"thread/realtime/closed\",\n  \"windows/worldWritableWarning\": \"windows/worldWritableWarning\",\n  \"windowsSandbox/setupCompleted\": \"windowsSandbox/setupCompleted\",\n  \"account/login/completed\": \"account/login/completed\",\n} as const;\n\nexport type ClientRequestMethod = keyof typeof CLIENT_REQUEST_METHODS;\nexport type ClientNotificationMethod = keyof typeof CLIENT_NOTIFICATION_METHODS;\nexport type ServerRequestMethod = keyof typeof SERVER_REQUEST_METHODS;\nexport type ServerNotificationMethod = keyof typeof SERVER_NOTIFICATION_METHODS;\n\nexport interface ClientRequestParamsByMethod {\n  readonly initialize: CodexSchema.V1InitializeParams;\n  readonly \"thread/start\": CodexSchema.V2ThreadStartParams;\n  readonly \"thread/resume\": CodexSchema.V2ThreadResumeParams;\n  readonly \"thread/fork\": CodexSchema.V2ThreadForkParams;\n  readonly \"thread/archive\": CodexSchema.V2ThreadArchiveParams;\n  readonly \"thread/delete\": CodexSchema.V2ThreadDeleteParams;\n  readonly \"thread/unsubscribe\": CodexSchema.V2ThreadUnsubscribeParams;\n  readonly \"thread/name/set\": CodexSchema.V2ThreadSetNameParams;\n  readonly \"thread/goal/set\": CodexSchema.V2ThreadGoalSetParams;\n  readonly \"thread/goal/get\": CodexSchema.V2ThreadGoalGetParams;\n  readonly \"thread/goal/clear\": CodexSchema.V2ThreadGoalClearParams;\n  readonly \"thread/metadata/update\": CodexSchema.V2ThreadMetadataUpdateParams;\n  readonly \"thread/unarchive\": CodexSchema.V2ThreadUnarchiveParams;\n  readonly \"thread/compact/start\": CodexSchema.V2ThreadCompactStartParams;\n  readonly \"thread/shellCommand\": CodexSchema.V2ThreadShellCommandParams;\n  readonly \"thread/approveGuardianDeniedAction\": CodexSchema.V2ThreadApproveGuardianDeniedActionParams;\n  readonly \"thread/rollback\": CodexSchema.V2ThreadRollbackParams;\n  readonly \"thread/list\": CodexSchema.V2ThreadListParams;\n  readonly \"thread/loaded/list\": CodexSchema.V2ThreadLoadedListParams;\n  readonly \"thread/read\": CodexSchema.V2ThreadReadParams;\n  readonly \"thread/inject_items\": CodexSchema.V2ThreadInjectItemsParams;\n  readonly \"skills/list\": CodexSchema.V2SkillsListParams;\n  readonly \"skills/extraRoots/set\": CodexSchema.V2SkillsExtraRootsSetParams;\n  readonly \"hooks/list\": CodexSchema.V2HooksListParams;\n  readonly \"marketplace/add\": CodexSchema.V2MarketplaceAddParams;\n  readonly \"marketplace/remove\": CodexSchema.V2MarketplaceRemoveParams;\n  readonly \"marketplace/upgrade\": CodexSchema.V2MarketplaceUpgradeParams;\n  readonly \"plugin/list\": CodexSchema.V2PluginListParams;\n  readonly \"plugin/installed\": CodexSchema.V2PluginInstalledParams;\n  readonly \"plugin/read\": CodexSchema.V2PluginReadParams;\n  readonly \"plugin/skill/read\": CodexSchema.V2PluginSkillReadParams;\n  readonly \"plugin/share/save\": CodexSchema.V2PluginShareSaveParams;\n  readonly \"plugin/share/updateTargets\": CodexSchema.V2PluginShareUpdateTargetsParams;\n  readonly \"plugin/share/list\": CodexSchema.V2PluginShareListParams;\n  readonly \"plugin/share/checkout\": CodexSchema.V2PluginShareCheckoutParams;\n  readonly \"plugin/share/delete\": CodexSchema.V2PluginShareDeleteParams;\n  readonly \"app/list\": CodexSchema.V2AppsListParams;\n  readonly \"fs/readFile\": CodexSchema.V2FsReadFileParams;\n  readonly \"fs/writeFile\": CodexSchema.V2FsWriteFileParams;\n  readonly \"fs/createDirectory\": CodexSchema.V2FsCreateDirectoryParams;\n  readonly \"fs/getMetadata\": CodexSchema.V2FsGetMetadataParams;\n  readonly \"fs/readDirectory\": CodexSchema.V2FsReadDirectoryParams;\n  readonly \"fs/remove\": CodexSchema.V2FsRemoveParams;\n  readonly \"fs/copy\": CodexSchema.V2FsCopyParams;\n  readonly \"fs/watch\": CodexSchema.V2FsWatchParams;\n  readonly \"fs/unwatch\": CodexSchema.V2FsUnwatchParams;\n  readonly \"skills/config/write\": CodexSchema.V2SkillsConfigWriteParams;\n  readonly \"plugin/install\": CodexSchema.V2PluginInstallParams;\n  readonly \"plugin/uninstall\": CodexSchema.V2PluginUninstallParams;\n  readonly \"turn/start\": CodexSchema.V2TurnStartParams;\n  readonly \"turn/steer\": CodexSchema.V2TurnSteerParams;\n  readonly \"turn/interrupt\": CodexSchema.V2TurnInterruptParams;\n  readonly \"review/start\": CodexSchema.V2ReviewStartParams;\n  readonly \"model/list\": CodexSchema.V2ModelListParams;\n  readonly \"modelProvider/capabilities/read\": CodexSchema.V2ModelProviderCapabilitiesReadParams;\n  readonly \"experimentalFeature/list\": CodexSchema.V2ExperimentalFeatureListParams;\n  readonly \"permissionProfile/list\": CodexSchema.V2PermissionProfileListParams;\n  readonly \"experimentalFeature/enablement/set\": CodexSchema.V2ExperimentalFeatureEnablementSetParams;\n  readonly \"mcpServer/oauth/login\": CodexSchema.V2McpServerOauthLoginParams;\n  readonly \"config/mcpServer/reload\": undefined;\n  readonly \"mcpServerStatus/list\": CodexSchema.V2ListMcpServerStatusParams;\n  readonly \"mcpServer/resource/read\": CodexSchema.V2McpResourceReadParams;\n  readonly \"mcpServer/tool/call\": CodexSchema.V2McpServerToolCallParams;\n  readonly \"windowsSandbox/setupStart\": CodexSchema.V2WindowsSandboxSetupStartParams;\n  readonly \"windowsSandbox/readiness\": undefined;\n  readonly \"account/login/start\": CodexSchema.V2LoginAccountParams;\n  readonly \"account/login/cancel\": CodexSchema.V2CancelLoginAccountParams;\n  readonly \"account/logout\": undefined;\n  readonly \"account/rateLimits/read\": undefined;\n  readonly \"account/usage/read\": undefined;\n  readonly \"account/sendAddCreditsNudgeEmail\": CodexSchema.V2SendAddCreditsNudgeEmailParams;\n  readonly \"feedback/upload\": CodexSchema.V2FeedbackUploadParams;\n  readonly \"command/exec\": CodexSchema.V2CommandExecParams;\n  readonly \"command/exec/write\": CodexSchema.V2CommandExecWriteParams;\n  readonly \"command/exec/terminate\": CodexSchema.V2CommandExecTerminateParams;\n  readonly \"command/exec/resize\": CodexSchema.V2CommandExecResizeParams;\n  readonly \"config/read\": CodexSchema.V2ConfigReadParams;\n  readonly \"externalAgentConfig/detect\": CodexSchema.V2ExternalAgentConfigDetectParams;\n  readonly \"externalAgentConfig/import\": CodexSchema.V2ExternalAgentConfigImportParams;\n  readonly \"config/value/write\": CodexSchema.V2ConfigValueWriteParams;\n  readonly \"config/batchWrite\": CodexSchema.V2ConfigBatchWriteParams;\n  readonly \"configRequirements/read\": undefined;\n  readonly \"account/read\": CodexSchema.V2GetAccountParams;\n  readonly getConversationSummary: CodexSchema.GetConversationSummaryParams;\n  readonly gitDiffToRemote: CodexSchema.GitDiffToRemoteParams;\n  readonly getAuthStatus: CodexSchema.GetAuthStatusParams;\n  readonly fuzzyFileSearch: CodexSchema.FuzzyFileSearchParams;\n}\n\nexport interface ClientRequestResponsesByMethod {\n  readonly initialize: CodexSchema.V1InitializeResponse;\n  readonly \"thread/start\": CodexSchema.V2ThreadStartResponse;\n  readonly \"thread/resume\": CodexSchema.V2ThreadResumeResponse;\n  readonly \"thread/fork\": CodexSchema.V2ThreadForkResponse;\n  readonly \"thread/archive\": CodexSchema.V2ThreadArchiveResponse;\n  readonly \"thread/delete\": CodexSchema.V2ThreadDeleteResponse;\n  readonly \"thread/unsubscribe\": CodexSchema.V2ThreadUnsubscribeResponse;\n  readonly \"thread/name/set\": CodexSchema.V2ThreadSetNameResponse;\n  readonly \"thread/goal/set\": CodexSchema.V2ThreadGoalSetResponse;\n  readonly \"thread/goal/get\": CodexSchema.V2ThreadGoalGetResponse;\n  readonly \"thread/goal/clear\": CodexSchema.V2ThreadGoalClearResponse;\n  readonly \"thread/metadata/update\": CodexSchema.V2ThreadMetadataUpdateResponse;\n  readonly \"thread/unarchive\": CodexSchema.V2ThreadUnarchiveResponse;\n  readonly \"thread/compact/start\": CodexSchema.V2ThreadCompactStartResponse;\n  readonly \"thread/shellCommand\": CodexSchema.V2ThreadShellCommandResponse;\n  readonly \"thread/approveGuardianDeniedAction\": CodexSchema.V2ThreadApproveGuardianDeniedActionResponse;\n  readonly \"thread/rollback\": CodexSchema.V2ThreadRollbackResponse;\n  readonly \"thread/list\": CodexSchema.V2ThreadListResponse;\n  readonly \"thread/loaded/list\": CodexSchema.V2ThreadLoadedListResponse;\n  readonly \"thread/read\": CodexSchema.V2ThreadReadResponse;\n  readonly \"thread/inject_items\": CodexSchema.V2ThreadInjectItemsResponse;\n  readonly \"skills/list\": CodexSchema.V2SkillsListResponse;\n  readonly \"skills/extraRoots/set\": CodexSchema.V2SkillsExtraRootsSetResponse;\n  readonly \"hooks/list\": CodexSchema.V2HooksListResponse;\n  readonly \"marketplace/add\": CodexSchema.V2MarketplaceAddResponse;\n  readonly \"marketplace/remove\": CodexSchema.V2MarketplaceRemoveResponse;\n  readonly \"marketplace/upgrade\": CodexSchema.V2MarketplaceUpgradeResponse;\n  readonly \"plugin/list\": CodexSchema.V2PluginListResponse;\n  readonly \"plugin/installed\": CodexSchema.V2PluginInstalledResponse;\n  readonly \"plugin/read\": CodexSchema.V2PluginReadResponse;\n  readonly \"plugin/skill/read\": CodexSchema.V2PluginSkillReadResponse;\n  readonly \"plugin/share/save\": CodexSchema.V2PluginShareSaveResponse;\n  readonly \"plugin/share/updateTargets\": CodexSchema.V2PluginShareUpdateTargetsResponse;\n  readonly \"plugin/share/list\": CodexSchema.V2PluginShareListResponse;\n  readonly \"plugin/share/checkout\": CodexSchema.V2PluginShareCheckoutResponse;\n  readonly \"plugin/share/delete\": CodexSchema.V2PluginShareDeleteResponse;\n  readonly \"app/list\": CodexSchema.V2AppsListResponse;\n  readonly \"fs/readFile\": CodexSchema.V2FsReadFileResponse;\n  readonly \"fs/writeFile\": CodexSchema.V2FsWriteFileResponse;\n  readonly \"fs/createDirectory\": CodexSchema.V2FsCreateDirectoryResponse;\n  readonly \"fs/getMetadata\": CodexSchema.V2FsGetMetadataResponse;\n  readonly \"fs/readDirectory\": CodexSchema.V2FsReadDirectoryResponse;\n  readonly \"fs/remove\": CodexSchema.V2FsRemoveResponse;\n  readonly \"fs/copy\": CodexSchema.V2FsCopyResponse;\n  readonly \"fs/watch\": CodexSchema.V2FsWatchResponse;\n  readonly \"fs/unwatch\": CodexSchema.V2FsUnwatchResponse;\n  readonly \"skills/config/write\": CodexSchema.V2SkillsConfigWriteResponse;\n  readonly \"plugin/install\": CodexSchema.V2PluginInstallResponse;\n  readonly \"plugin/uninstall\": CodexSchema.V2PluginUninstallResponse;\n  readonly \"turn/start\": CodexSchema.V2TurnStartResponse;\n  readonly \"turn/steer\": CodexSchema.V2TurnSteerResponse;\n  readonly \"turn/interrupt\": CodexSchema.V2TurnInterruptResponse;\n  readonly \"review/start\": CodexSchema.V2ReviewStartResponse;\n  readonly \"model/list\": CodexSchema.V2ModelListResponse;\n  readonly \"modelProvider/capabilities/read\": CodexSchema.V2ModelProviderCapabilitiesReadResponse;\n  readonly \"experimentalFeature/list\": CodexSchema.V2ExperimentalFeatureListResponse;\n  readonly \"permissionProfile/list\": CodexSchema.V2PermissionProfileListResponse;\n  readonly \"experimentalFeature/enablement/set\": CodexSchema.V2ExperimentalFeatureEnablementSetResponse;\n  readonly \"mcpServer/oauth/login\": CodexSchema.V2McpServerOauthLoginResponse;\n  readonly \"config/mcpServer/reload\": CodexSchema.V2McpServerRefreshResponse;\n  readonly \"mcpServerStatus/list\": CodexSchema.V2ListMcpServerStatusResponse;\n  readonly \"mcpServer/resource/read\": CodexSchema.V2McpResourceReadResponse;\n  readonly \"mcpServer/tool/call\": CodexSchema.V2McpServerToolCallResponse;\n  readonly \"windowsSandbox/setupStart\": CodexSchema.V2WindowsSandboxSetupStartResponse;\n  readonly \"windowsSandbox/readiness\": CodexSchema.V2WindowsSandboxReadinessResponse;\n  readonly \"account/login/start\": CodexSchema.V2LoginAccountResponse;\n  readonly \"account/login/cancel\": CodexSchema.V2CancelLoginAccountResponse;\n  readonly \"account/logout\": CodexSchema.V2LogoutAccountResponse;\n  readonly \"account/rateLimits/read\": CodexSchema.V2GetAccountRateLimitsResponse;\n  readonly \"account/usage/read\": CodexSchema.V2GetAccountTokenUsageResponse;\n  readonly \"account/sendAddCreditsNudgeEmail\": CodexSchema.V2SendAddCreditsNudgeEmailResponse;\n  readonly \"feedback/upload\": CodexSchema.V2FeedbackUploadResponse;\n  readonly \"command/exec\": CodexSchema.V2CommandExecResponse;\n  readonly \"command/exec/write\": CodexSchema.V2CommandExecWriteResponse;\n  readonly \"command/exec/terminate\": CodexSchema.V2CommandExecTerminateResponse;\n  readonly \"command/exec/resize\": CodexSchema.V2CommandExecResizeResponse;\n  readonly \"config/read\": CodexSchema.V2ConfigReadResponse;\n  readonly \"externalAgentConfig/detect\": CodexSchema.V2ExternalAgentConfigDetectResponse;\n  readonly \"externalAgentConfig/import\": CodexSchema.V2ExternalAgentConfigImportResponse;\n  readonly \"config/value/write\": CodexSchema.V2ConfigWriteResponse;\n  readonly \"config/batchWrite\": CodexSchema.V2ConfigWriteResponse;\n  readonly \"configRequirements/read\": CodexSchema.V2ConfigRequirementsReadResponse;\n  readonly \"account/read\": CodexSchema.V2GetAccountResponse;\n  readonly getConversationSummary: CodexSchema.GetConversationSummaryResponse;\n  readonly gitDiffToRemote: CodexSchema.GitDiffToRemoteResponse;\n  readonly getAuthStatus: CodexSchema.GetAuthStatusResponse;\n  readonly fuzzyFileSearch: CodexSchema.FuzzyFileSearchResponse;\n}\n\nexport interface ClientNotificationParamsByMethod {\n  readonly initialized: undefined;\n}\n\nexport interface ServerRequestParamsByMethod {\n  readonly \"item/commandExecution/requestApproval\": CodexSchema.CommandExecutionRequestApprovalParams;\n  readonly \"item/fileChange/requestApproval\": CodexSchema.FileChangeRequestApprovalParams;\n  readonly \"item/tool/requestUserInput\": CodexSchema.ToolRequestUserInputParams;\n  readonly \"mcpServer/elicitation/request\": CodexSchema.McpServerElicitationRequestParams;\n  readonly \"item/permissions/requestApproval\": CodexSchema.PermissionsRequestApprovalParams;\n  readonly \"item/tool/call\": CodexSchema.DynamicToolCallParams;\n  readonly \"account/chatgptAuthTokens/refresh\": CodexSchema.ChatgptAuthTokensRefreshParams;\n  readonly \"attestation/generate\": CodexSchema.AttestationGenerateParams;\n  readonly applyPatchApproval: CodexSchema.ApplyPatchApprovalParams;\n  readonly execCommandApproval: CodexSchema.ExecCommandApprovalParams;\n}\n\nexport interface ServerRequestResponsesByMethod {\n  readonly \"item/commandExecution/requestApproval\": CodexSchema.CommandExecutionRequestApprovalResponse;\n  readonly \"item/fileChange/requestApproval\": CodexSchema.FileChangeRequestApprovalResponse;\n  readonly \"item/tool/requestUserInput\": CodexSchema.ToolRequestUserInputResponse;\n  readonly \"mcpServer/elicitation/request\": CodexSchema.McpServerElicitationRequestResponse;\n  readonly \"item/permissions/requestApproval\": CodexSchema.PermissionsRequestApprovalResponse;\n  readonly \"item/tool/call\": CodexSchema.DynamicToolCallResponse;\n  readonly \"account/chatgptAuthTokens/refresh\": CodexSchema.ChatgptAuthTokensRefreshResponse;\n  readonly \"attestation/generate\": CodexSchema.AttestationGenerateResponse;\n  readonly applyPatchApproval: CodexSchema.ApplyPatchApprovalResponse;\n  readonly execCommandApproval: CodexSchema.ExecCommandApprovalResponse;\n}\n\nexport interface ServerNotificationParamsByMethod {\n  readonly error: CodexSchema.V2ErrorNotification;\n  readonly \"thread/started\": CodexSchema.V2ThreadStartedNotification;\n  readonly \"thread/status/changed\": CodexSchema.V2ThreadStatusChangedNotification;\n  readonly \"thread/archived\": CodexSchema.V2ThreadArchivedNotification;\n  readonly \"thread/deleted\": CodexSchema.V2ThreadDeletedNotification;\n  readonly \"thread/unarchived\": CodexSchema.V2ThreadUnarchivedNotification;\n  readonly \"thread/closed\": CodexSchema.V2ThreadClosedNotification;\n  readonly \"skills/changed\": CodexSchema.V2SkillsChangedNotification;\n  readonly \"thread/name/updated\": CodexSchema.V2ThreadNameUpdatedNotification;\n  readonly \"thread/goal/updated\": CodexSchema.V2ThreadGoalUpdatedNotification;\n  readonly \"thread/goal/cleared\": CodexSchema.V2ThreadGoalClearedNotification;\n  readonly \"thread/settings/updated\": CodexSchema.V2ThreadSettingsUpdatedNotification;\n  readonly \"thread/tokenUsage/updated\": CodexSchema.V2ThreadTokenUsageUpdatedNotification;\n  readonly \"turn/started\": CodexSchema.V2TurnStartedNotification;\n  readonly \"hook/started\": CodexSchema.V2HookStartedNotification;\n  readonly \"turn/completed\": CodexSchema.V2TurnCompletedNotification;\n  readonly \"hook/completed\": CodexSchema.V2HookCompletedNotification;\n  readonly \"turn/diff/updated\": CodexSchema.V2TurnDiffUpdatedNotification;\n  readonly \"turn/plan/updated\": CodexSchema.V2TurnPlanUpdatedNotification;\n  readonly \"item/started\": CodexSchema.V2ItemStartedNotification;\n  readonly \"item/autoApprovalReview/started\": CodexSchema.V2ItemGuardianApprovalReviewStartedNotification;\n  readonly \"item/autoApprovalReview/completed\": CodexSchema.V2ItemGuardianApprovalReviewCompletedNotification;\n  readonly \"item/completed\": CodexSchema.V2ItemCompletedNotification;\n  readonly \"rawResponseItem/completed\": CodexSchema.V2RawResponseItemCompletedNotification;\n  readonly \"item/agentMessage/delta\": CodexSchema.V2AgentMessageDeltaNotification;\n  readonly \"item/plan/delta\": CodexSchema.V2PlanDeltaNotification;\n  readonly \"command/exec/outputDelta\": CodexSchema.V2CommandExecOutputDeltaNotification;\n  readonly \"process/outputDelta\": CodexSchema.V2ProcessOutputDeltaNotification;\n  readonly \"process/exited\": CodexSchema.V2ProcessExitedNotification;\n  readonly \"item/commandExecution/outputDelta\": CodexSchema.V2CommandExecutionOutputDeltaNotification;\n  readonly \"item/commandExecution/terminalInteraction\": CodexSchema.V2TerminalInteractionNotification;\n  readonly \"item/fileChange/outputDelta\": CodexSchema.V2FileChangeOutputDeltaNotification;\n  readonly \"item/fileChange/patchUpdated\": CodexSchema.V2FileChangePatchUpdatedNotification;\n  readonly \"serverRequest/resolved\": CodexSchema.V2ServerRequestResolvedNotification;\n  readonly \"item/mcpToolCall/progress\": CodexSchema.V2McpToolCallProgressNotification;\n  readonly \"mcpServer/oauthLogin/completed\": CodexSchema.V2McpServerOauthLoginCompletedNotification;\n  readonly \"mcpServer/startupStatus/updated\": CodexSchema.V2McpServerStatusUpdatedNotification;\n  readonly \"account/updated\": CodexSchema.V2AccountUpdatedNotification;\n  readonly \"account/rateLimits/updated\": CodexSchema.V2AccountRateLimitsUpdatedNotification;\n  readonly \"app/list/updated\": CodexSchema.V2AppListUpdatedNotification;\n  readonly \"remoteControl/status/changed\": CodexSchema.V2RemoteControlStatusChangedNotification;\n  readonly \"externalAgentConfig/import/completed\": CodexSchema.V2ExternalAgentConfigImportCompletedNotification;\n  readonly \"fs/changed\": CodexSchema.V2FsChangedNotification;\n  readonly \"item/reasoning/summaryTextDelta\": CodexSchema.V2ReasoningSummaryTextDeltaNotification;\n  readonly \"item/reasoning/summaryPartAdded\": CodexSchema.V2ReasoningSummaryPartAddedNotification;\n  readonly \"item/reasoning/textDelta\": CodexSchema.V2ReasoningTextDeltaNotification;\n  readonly \"thread/compacted\": CodexSchema.V2ContextCompactedNotification;\n  readonly \"model/rerouted\": CodexSchema.V2ModelReroutedNotification;\n  readonly \"model/verification\": CodexSchema.V2ModelVerificationNotification;\n  readonly \"turn/moderationMetadata\": CodexSchema.V2TurnModerationMetadataNotification;\n  readonly warning: CodexSchema.V2WarningNotification;\n  readonly guardianWarning: CodexSchema.V2GuardianWarningNotification;\n  readonly deprecationNotice: CodexSchema.V2DeprecationNoticeNotification;\n  readonly configWarning: CodexSchema.V2ConfigWarningNotification;\n  readonly \"fuzzyFileSearch/sessionUpdated\": CodexSchema.FuzzyFileSearchSessionUpdatedNotification;\n  readonly \"fuzzyFileSearch/sessionCompleted\": CodexSchema.FuzzyFileSearchSessionCompletedNotification;\n  readonly \"thread/realtime/started\": CodexSchema.V2ThreadRealtimeStartedNotification;\n  readonly \"thread/realtime/itemAdded\": CodexSchema.V2ThreadRealtimeItemAddedNotification;\n  readonly \"thread/realtime/transcript/delta\": CodexSchema.V2ThreadRealtimeTranscriptDeltaNotification;\n  readonly \"thread/realtime/transcript/done\": CodexSchema.V2ThreadRealtimeTranscriptDoneNotification;\n  readonly \"thread/realtime/outputAudio/delta\": CodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification;\n  readonly \"thread/realtime/sdp\": CodexSchema.V2ThreadRealtimeSdpNotification;\n  readonly \"thread/realtime/error\": CodexSchema.V2ThreadRealtimeErrorNotification;\n  readonly \"thread/realtime/closed\": CodexSchema.V2ThreadRealtimeClosedNotification;\n  readonly \"windows/worldWritableWarning\": CodexSchema.V2WindowsWorldWritableWarningNotification;\n  readonly \"windowsSandbox/setupCompleted\": CodexSchema.V2WindowsSandboxSetupCompletedNotification;\n  readonly \"account/login/completed\": CodexSchema.V2AccountLoginCompletedNotification;\n}\n\nexport const CLIENT_REQUEST_PARAMS = {\n  initialize: CodexSchema.V1InitializeParams,\n  \"thread/start\": CodexSchema.V2ThreadStartParams,\n  \"thread/resume\": CodexSchema.V2ThreadResumeParams,\n  \"thread/fork\": CodexSchema.V2ThreadForkParams,\n  \"thread/archive\": CodexSchema.V2ThreadArchiveParams,\n  \"thread/delete\": CodexSchema.V2ThreadDeleteParams,\n  \"thread/unsubscribe\": CodexSchema.V2ThreadUnsubscribeParams,\n  \"thread/name/set\": CodexSchema.V2ThreadSetNameParams,\n  \"thread/goal/set\": CodexSchema.V2ThreadGoalSetParams,\n  \"thread/goal/get\": CodexSchema.V2ThreadGoalGetParams,\n  \"thread/goal/clear\": CodexSchema.V2ThreadGoalClearParams,\n  \"thread/metadata/update\": CodexSchema.V2ThreadMetadataUpdateParams,\n  \"thread/unarchive\": CodexSchema.V2ThreadUnarchiveParams,\n  \"thread/compact/start\": CodexSchema.V2ThreadCompactStartParams,\n  \"thread/shellCommand\": CodexSchema.V2ThreadShellCommandParams,\n  \"thread/approveGuardianDeniedAction\": CodexSchema.V2ThreadApproveGuardianDeniedActionParams,\n  \"thread/rollback\": CodexSchema.V2ThreadRollbackParams,\n  \"thread/list\": CodexSchema.V2ThreadListParams,\n  \"thread/loaded/list\": CodexSchema.V2ThreadLoadedListParams,\n  \"thread/read\": CodexSchema.V2ThreadReadParams,\n  \"thread/inject_items\": CodexSchema.V2ThreadInjectItemsParams,\n  \"skills/list\": CodexSchema.V2SkillsListParams,\n  \"skills/extraRoots/set\": CodexSchema.V2SkillsExtraRootsSetParams,\n  \"hooks/list\": CodexSchema.V2HooksListParams,\n  \"marketplace/add\": CodexSchema.V2MarketplaceAddParams,\n  \"marketplace/remove\": CodexSchema.V2MarketplaceRemoveParams,\n  \"marketplace/upgrade\": CodexSchema.V2MarketplaceUpgradeParams,\n  \"plugin/list\": CodexSchema.V2PluginListParams,\n  \"plugin/installed\": CodexSchema.V2PluginInstalledParams,\n  \"plugin/read\": CodexSchema.V2PluginReadParams,\n  \"plugin/skill/read\": CodexSchema.V2PluginSkillReadParams,\n  \"plugin/share/save\": CodexSchema.V2PluginShareSaveParams,\n  \"plugin/share/updateTargets\": CodexSchema.V2PluginShareUpdateTargetsParams,\n  \"plugin/share/list\": CodexSchema.V2PluginShareListParams,\n  \"plugin/share/checkout\": CodexSchema.V2PluginShareCheckoutParams,\n  \"plugin/share/delete\": CodexSchema.V2PluginShareDeleteParams,\n  \"app/list\": CodexSchema.V2AppsListParams,\n  \"fs/readFile\": CodexSchema.V2FsReadFileParams,\n  \"fs/writeFile\": CodexSchema.V2FsWriteFileParams,\n  \"fs/createDirectory\": CodexSchema.V2FsCreateDirectoryParams,\n  \"fs/getMetadata\": CodexSchema.V2FsGetMetadataParams,\n  \"fs/readDirectory\": CodexSchema.V2FsReadDirectoryParams,\n  \"fs/remove\": CodexSchema.V2FsRemoveParams,\n  \"fs/copy\": CodexSchema.V2FsCopyParams,\n  \"fs/watch\": CodexSchema.V2FsWatchParams,\n  \"fs/unwatch\": CodexSchema.V2FsUnwatchParams,\n  \"skills/config/write\": CodexSchema.V2SkillsConfigWriteParams,\n  \"plugin/install\": CodexSchema.V2PluginInstallParams,\n  \"plugin/uninstall\": CodexSchema.V2PluginUninstallParams,\n  \"turn/start\": CodexSchema.V2TurnStartParams,\n  \"turn/steer\": CodexSchema.V2TurnSteerParams,\n  \"turn/interrupt\": CodexSchema.V2TurnInterruptParams,\n  \"review/start\": CodexSchema.V2ReviewStartParams,\n  \"model/list\": CodexSchema.V2ModelListParams,\n  \"modelProvider/capabilities/read\": CodexSchema.V2ModelProviderCapabilitiesReadParams,\n  \"experimentalFeature/list\": CodexSchema.V2ExperimentalFeatureListParams,\n  \"permissionProfile/list\": CodexSchema.V2PermissionProfileListParams,\n  \"experimentalFeature/enablement/set\": CodexSchema.V2ExperimentalFeatureEnablementSetParams,\n  \"mcpServer/oauth/login\": CodexSchema.V2McpServerOauthLoginParams,\n  \"config/mcpServer/reload\": undefined,\n  \"mcpServerStatus/list\": CodexSchema.V2ListMcpServerStatusParams,\n  \"mcpServer/resource/read\": CodexSchema.V2McpResourceReadParams,\n  \"mcpServer/tool/call\": CodexSchema.V2McpServerToolCallParams,\n  \"windowsSandbox/setupStart\": CodexSchema.V2WindowsSandboxSetupStartParams,\n  \"windowsSandbox/readiness\": undefined,\n  \"account/login/start\": CodexSchema.V2LoginAccountParams,\n  \"account/login/cancel\": CodexSchema.V2CancelLoginAccountParams,\n  \"account/logout\": undefined,\n  \"account/rateLimits/read\": undefined,\n  \"account/usage/read\": undefined,\n  \"account/sendAddCreditsNudgeEmail\": CodexSchema.V2SendAddCreditsNudgeEmailParams,\n  \"feedback/upload\": CodexSchema.V2FeedbackUploadParams,\n  \"command/exec\": CodexSchema.V2CommandExecParams,\n  \"command/exec/write\": CodexSchema.V2CommandExecWriteParams,\n  \"command/exec/terminate\": CodexSchema.V2CommandExecTerminateParams,\n  \"command/exec/resize\": CodexSchema.V2CommandExecResizeParams,\n  \"config/read\": CodexSchema.V2ConfigReadParams,\n  \"externalAgentConfig/detect\": CodexSchema.V2ExternalAgentConfigDetectParams,\n  \"externalAgentConfig/import\": CodexSchema.V2ExternalAgentConfigImportParams,\n  \"config/value/write\": CodexSchema.V2ConfigValueWriteParams,\n  \"config/batchWrite\": CodexSchema.V2ConfigBatchWriteParams,\n  \"configRequirements/read\": undefined,\n  \"account/read\": CodexSchema.V2GetAccountParams,\n  getConversationSummary: CodexSchema.GetConversationSummaryParams,\n  gitDiffToRemote: CodexSchema.GitDiffToRemoteParams,\n  getAuthStatus: CodexSchema.GetAuthStatusParams,\n  fuzzyFileSearch: CodexSchema.FuzzyFileSearchParams,\n} as const;\n\nexport const CLIENT_REQUEST_RESPONSES = {\n  initialize: CodexSchema.V1InitializeResponse,\n  \"thread/start\": CodexSchema.V2ThreadStartResponse,\n  \"thread/resume\": CodexSchema.V2ThreadResumeResponse,\n  \"thread/fork\": CodexSchema.V2ThreadForkResponse,\n  \"thread/archive\": CodexSchema.V2ThreadArchiveResponse,\n  \"thread/delete\": CodexSchema.V2ThreadDeleteResponse,\n  \"thread/unsubscribe\": CodexSchema.V2ThreadUnsubscribeResponse,\n  \"thread/name/set\": CodexSchema.V2ThreadSetNameResponse,\n  \"thread/goal/set\": CodexSchema.V2ThreadGoalSetResponse,\n  \"thread/goal/get\": CodexSchema.V2ThreadGoalGetResponse,\n  \"thread/goal/clear\": CodexSchema.V2ThreadGoalClearResponse,\n  \"thread/metadata/update\": CodexSchema.V2ThreadMetadataUpdateResponse,\n  \"thread/unarchive\": CodexSchema.V2ThreadUnarchiveResponse,\n  \"thread/compact/start\": CodexSchema.V2ThreadCompactStartResponse,\n  \"thread/shellCommand\": CodexSchema.V2ThreadShellCommandResponse,\n  \"thread/approveGuardianDeniedAction\": CodexSchema.V2ThreadApproveGuardianDeniedActionResponse,\n  \"thread/rollback\": CodexSchema.V2ThreadRollbackResponse,\n  \"thread/list\": CodexSchema.V2ThreadListResponse,\n  \"thread/loaded/list\": CodexSchema.V2ThreadLoadedListResponse,\n  \"thread/read\": CodexSchema.V2ThreadReadResponse,\n  \"thread/inject_items\": CodexSchema.V2ThreadInjectItemsResponse,\n  \"skills/list\": CodexSchema.V2SkillsListResponse,\n  \"skills/extraRoots/set\": CodexSchema.V2SkillsExtraRootsSetResponse,\n  \"hooks/list\": CodexSchema.V2HooksListResponse,\n  \"marketplace/add\": CodexSchema.V2MarketplaceAddResponse,\n  \"marketplace/remove\": CodexSchema.V2MarketplaceRemoveResponse,\n  \"marketplace/upgrade\": CodexSchema.V2MarketplaceUpgradeResponse,\n  \"plugin/list\": CodexSchema.V2PluginListResponse,\n  \"plugin/installed\": CodexSchema.V2PluginInstalledResponse,\n  \"plugin/read\": CodexSchema.V2PluginReadResponse,\n  \"plugin/skill/read\": CodexSchema.V2PluginSkillReadResponse,\n  \"plugin/share/save\": CodexSchema.V2PluginShareSaveResponse,\n  \"plugin/share/updateTargets\": CodexSchema.V2PluginShareUpdateTargetsResponse,\n  \"plugin/share/list\": CodexSchema.V2PluginShareListResponse,\n  \"plugin/share/checkout\": CodexSchema.V2PluginShareCheckoutResponse,\n  \"plugin/share/delete\": CodexSchema.V2PluginShareDeleteResponse,\n  \"app/list\": CodexSchema.V2AppsListResponse,\n  \"fs/readFile\": CodexSchema.V2FsReadFileResponse,\n  \"fs/writeFile\": CodexSchema.V2FsWriteFileResponse,\n  \"fs/createDirectory\": CodexSchema.V2FsCreateDirectoryResponse,\n  \"fs/getMetadata\": CodexSchema.V2FsGetMetadataResponse,\n  \"fs/readDirectory\": CodexSchema.V2FsReadDirectoryResponse,\n  \"fs/remove\": CodexSchema.V2FsRemoveResponse,\n  \"fs/copy\": CodexSchema.V2FsCopyResponse,\n  \"fs/watch\": CodexSchema.V2FsWatchResponse,\n  \"fs/unwatch\": CodexSchema.V2FsUnwatchResponse,\n  \"skills/config/write\": CodexSchema.V2SkillsConfigWriteResponse,\n  \"plugin/install\": CodexSchema.V2PluginInstallResponse,\n  \"plugin/uninstall\": CodexSchema.V2PluginUninstallResponse,\n  \"turn/start\": CodexSchema.V2TurnStartResponse,\n  \"turn/steer\": CodexSchema.V2TurnSteerResponse,\n  \"turn/interrupt\": CodexSchema.V2TurnInterruptResponse,\n  \"review/start\": CodexSchema.V2ReviewStartResponse,\n  \"model/list\": CodexSchema.V2ModelListResponse,\n  \"modelProvider/capabilities/read\": CodexSchema.V2ModelProviderCapabilitiesReadResponse,\n  \"experimentalFeature/list\": CodexSchema.V2ExperimentalFeatureListResponse,\n  \"permissionProfile/list\": CodexSchema.V2PermissionProfileListResponse,\n  \"experimentalFeature/enablement/set\": CodexSchema.V2ExperimentalFeatureEnablementSetResponse,\n  \"mcpServer/oauth/login\": CodexSchema.V2McpServerOauthLoginResponse,\n  \"config/mcpServer/reload\": CodexSchema.V2McpServerRefreshResponse,\n  \"mcpServerStatus/list\": CodexSchema.V2ListMcpServerStatusResponse,\n  \"mcpServer/resource/read\": CodexSchema.V2McpResourceReadResponse,\n  \"mcpServer/tool/call\": CodexSchema.V2McpServerToolCallResponse,\n  \"windowsSandbox/setupStart\": CodexSchema.V2WindowsSandboxSetupStartResponse,\n  \"windowsSandbox/readiness\": CodexSchema.V2WindowsSandboxReadinessResponse,\n  \"account/login/start\": CodexSchema.V2LoginAccountResponse,\n  \"account/login/cancel\": CodexSchema.V2CancelLoginAccountResponse,\n  \"account/logout\": CodexSchema.V2LogoutAccountResponse,\n  \"account/rateLimits/read\": CodexSchema.V2GetAccountRateLimitsResponse,\n  \"account/usage/read\": CodexSchema.V2GetAccountTokenUsageResponse,\n  \"account/sendAddCreditsNudgeEmail\": CodexSchema.V2SendAddCreditsNudgeEmailResponse,\n  \"feedback/upload\": CodexSchema.V2FeedbackUploadResponse,\n  \"command/exec\": CodexSchema.V2CommandExecResponse,\n  \"command/exec/write\": CodexSchema.V2CommandExecWriteResponse,\n  \"command/exec/terminate\": CodexSchema.V2CommandExecTerminateResponse,\n  \"command/exec/resize\": CodexSchema.V2CommandExecResizeResponse,\n  \"config/read\": CodexSchema.V2ConfigReadResponse,\n  \"externalAgentConfig/detect\": CodexSchema.V2ExternalAgentConfigDetectResponse,\n  \"externalAgentConfig/import\": CodexSchema.V2ExternalAgentConfigImportResponse,\n  \"config/value/write\": CodexSchema.V2ConfigWriteResponse,\n  \"config/batchWrite\": CodexSchema.V2ConfigWriteResponse,\n  \"configRequirements/read\": CodexSchema.V2ConfigRequirementsReadResponse,\n  \"account/read\": CodexSchema.V2GetAccountResponse,\n  getConversationSummary: CodexSchema.GetConversationSummaryResponse,\n  gitDiffToRemote: CodexSchema.GitDiffToRemoteResponse,\n  getAuthStatus: CodexSchema.GetAuthStatusResponse,\n  fuzzyFileSearch: CodexSchema.FuzzyFileSearchResponse,\n} as const;\n\nexport const CLIENT_NOTIFICATION_PARAMS = {\n  initialized: undefined,\n} as const;\n\nexport const SERVER_REQUEST_PARAMS = {\n  \"item/commandExecution/requestApproval\": CodexSchema.CommandExecutionRequestApprovalParams,\n  \"item/fileChange/requestApproval\": CodexSchema.FileChangeRequestApprovalParams,\n  \"item/tool/requestUserInput\": CodexSchema.ToolRequestUserInputParams,\n  \"mcpServer/elicitation/request\": CodexSchema.McpServerElicitationRequestParams,\n  \"item/permissions/requestApproval\": CodexSchema.PermissionsRequestApprovalParams,\n  \"item/tool/call\": CodexSchema.DynamicToolCallParams,\n  \"account/chatgptAuthTokens/refresh\": CodexSchema.ChatgptAuthTokensRefreshParams,\n  \"attestation/generate\": CodexSchema.AttestationGenerateParams,\n  applyPatchApproval: CodexSchema.ApplyPatchApprovalParams,\n  execCommandApproval: CodexSchema.ExecCommandApprovalParams,\n} as const;\n\nexport const SERVER_REQUEST_RESPONSES = {\n  \"item/commandExecution/requestApproval\": CodexSchema.CommandExecutionRequestApprovalResponse,\n  \"item/fileChange/requestApproval\": CodexSchema.FileChangeRequestApprovalResponse,\n  \"item/tool/requestUserInput\": CodexSchema.ToolRequestUserInputResponse,\n  \"mcpServer/elicitation/request\": CodexSchema.McpServerElicitationRequestResponse,\n  \"item/permissions/requestApproval\": CodexSchema.PermissionsRequestApprovalResponse,\n  \"item/tool/call\": CodexSchema.DynamicToolCallResponse,\n  \"account/chatgptAuthTokens/refresh\": CodexSchema.ChatgptAuthTokensRefreshResponse,\n  \"attestation/generate\": CodexSchema.AttestationGenerateResponse,\n  applyPatchApproval: CodexSchema.ApplyPatchApprovalResponse,\n  execCommandApproval: CodexSchema.ExecCommandApprovalResponse,\n} as const;\n\nexport const SERVER_NOTIFICATION_PARAMS = {\n  error: CodexSchema.V2ErrorNotification,\n  \"thread/started\": CodexSchema.V2ThreadStartedNotification,\n  \"thread/status/changed\": CodexSchema.V2ThreadStatusChangedNotification,\n  \"thread/archived\": CodexSchema.V2ThreadArchivedNotification,\n  \"thread/deleted\": CodexSchema.V2ThreadDeletedNotification,\n  \"thread/unarchived\": CodexSchema.V2ThreadUnarchivedNotification,\n  \"thread/closed\": CodexSchema.V2ThreadClosedNotification,\n  \"skills/changed\": CodexSchema.V2SkillsChangedNotification,\n  \"thread/name/updated\": CodexSchema.V2ThreadNameUpdatedNotification,\n  \"thread/goal/updated\": CodexSchema.V2ThreadGoalUpdatedNotification,\n  \"thread/goal/cleared\": CodexSchema.V2ThreadGoalClearedNotification,\n  \"thread/settings/updated\": CodexSchema.V2ThreadSettingsUpdatedNotification,\n  \"thread/tokenUsage/updated\": CodexSchema.V2ThreadTokenUsageUpdatedNotification,\n  \"turn/started\": CodexSchema.V2TurnStartedNotification,\n  \"hook/started\": CodexSchema.V2HookStartedNotification,\n  \"turn/completed\": CodexSchema.V2TurnCompletedNotification,\n  \"hook/completed\": CodexSchema.V2HookCompletedNotification,\n  \"turn/diff/updated\": CodexSchema.V2TurnDiffUpdatedNotification,\n  \"turn/plan/updated\": CodexSchema.V2TurnPlanUpdatedNotification,\n  \"item/started\": CodexSchema.V2ItemStartedNotification,\n  \"item/autoApprovalReview/started\": CodexSchema.V2ItemGuardianApprovalReviewStartedNotification,\n  \"item/autoApprovalReview/completed\":\n    CodexSchema.V2ItemGuardianApprovalReviewCompletedNotification,\n  \"item/completed\": CodexSchema.V2ItemCompletedNotification,\n  \"rawResponseItem/completed\": CodexSchema.V2RawResponseItemCompletedNotification,\n  \"item/agentMessage/delta\": CodexSchema.V2AgentMessageDeltaNotification,\n  \"item/plan/delta\": CodexSchema.V2PlanDeltaNotification,\n  \"command/exec/outputDelta\": CodexSchema.V2CommandExecOutputDeltaNotification,\n  \"process/outputDelta\": CodexSchema.V2ProcessOutputDeltaNotification,\n  \"process/exited\": CodexSchema.V2ProcessExitedNotification,\n  \"item/commandExecution/outputDelta\": CodexSchema.V2CommandExecutionOutputDeltaNotification,\n  \"item/commandExecution/terminalInteraction\": CodexSchema.V2TerminalInteractionNotification,\n  \"item/fileChange/outputDelta\": CodexSchema.V2FileChangeOutputDeltaNotification,\n  \"item/fileChange/patchUpdated\": CodexSchema.V2FileChangePatchUpdatedNotification,\n  \"serverRequest/resolved\": CodexSchema.V2ServerRequestResolvedNotification,\n  \"item/mcpToolCall/progress\": CodexSchema.V2McpToolCallProgressNotification,\n  \"mcpServer/oauthLogin/completed\": CodexSchema.V2McpServerOauthLoginCompletedNotification,\n  \"mcpServer/startupStatus/updated\": CodexSchema.V2McpServerStatusUpdatedNotification,\n  \"account/updated\": CodexSchema.V2AccountUpdatedNotification,\n  \"account/rateLimits/updated\": CodexSchema.V2AccountRateLimitsUpdatedNotification,\n  \"app/list/updated\": CodexSchema.V2AppListUpdatedNotification,\n  \"remoteControl/status/changed\": CodexSchema.V2RemoteControlStatusChangedNotification,\n  \"externalAgentConfig/import/completed\":\n    CodexSchema.V2ExternalAgentConfigImportCompletedNotification,\n  \"fs/changed\": CodexSchema.V2FsChangedNotification,\n  \"item/reasoning/summaryTextDelta\": CodexSchema.V2ReasoningSummaryTextDeltaNotification,\n  \"item/reasoning/summaryPartAdded\": CodexSchema.V2ReasoningSummaryPartAddedNotification,\n  \"item/reasoning/textDelta\": CodexSchema.V2ReasoningTextDeltaNotification,\n  \"thread/compacted\": CodexSchema.V2ContextCompactedNotification,\n  \"model/rerouted\": CodexSchema.V2ModelReroutedNotification,\n  \"model/verification\": CodexSchema.V2ModelVerificationNotification,\n  \"turn/moderationMetadata\": CodexSchema.V2TurnModerationMetadataNotification,\n  warning: CodexSchema.V2WarningNotification,\n  guardianWarning: CodexSchema.V2GuardianWarningNotification,\n  deprecationNotice: CodexSchema.V2DeprecationNoticeNotification,\n  configWarning: CodexSchema.V2ConfigWarningNotification,\n  \"fuzzyFileSearch/sessionUpdated\": CodexSchema.FuzzyFileSearchSessionUpdatedNotification,\n  \"fuzzyFileSearch/sessionCompleted\": CodexSchema.FuzzyFileSearchSessionCompletedNotification,\n  \"thread/realtime/started\": CodexSchema.V2ThreadRealtimeStartedNotification,\n  \"thread/realtime/itemAdded\": CodexSchema.V2ThreadRealtimeItemAddedNotification,\n  \"thread/realtime/transcript/delta\": CodexSchema.V2ThreadRealtimeTranscriptDeltaNotification,\n  \"thread/realtime/transcript/done\": CodexSchema.V2ThreadRealtimeTranscriptDoneNotification,\n  \"thread/realtime/outputAudio/delta\": CodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification,\n  \"thread/realtime/sdp\": CodexSchema.V2ThreadRealtimeSdpNotification,\n  \"thread/realtime/error\": CodexSchema.V2ThreadRealtimeErrorNotification,\n  \"thread/realtime/closed\": CodexSchema.V2ThreadRealtimeClosedNotification,\n  \"windows/worldWritableWarning\": CodexSchema.V2WindowsWorldWritableWarningNotification,\n  \"windowsSandbox/setupCompleted\": CodexSchema.V2WindowsSandboxSetupCompletedNotification,\n  \"account/login/completed\": CodexSchema.V2AccountLoginCompletedNotification,\n} as const;\n","import * as Schema from \"effect/Schema\";\n\nexport interface CodexAppServerProtocolErrorShape {\n  readonly code: number;\n  readonly message: string;\n  readonly data?: unknown;\n}\n\nexport class CodexAppServerSpawnError extends Schema.TaggedErrorClass<CodexAppServerSpawnError>()(\n  \"CodexAppServerSpawnError\",\n  {\n    command: Schema.optional(Schema.String),\n    cause: Schema.Defect(),\n  },\n) {\n  override get message() {\n    return this.command\n      ? `Failed to spawn Codex App Server process for command: ${this.command}`\n      : \"Failed to spawn Codex App Server process\";\n  }\n}\n\nexport class CodexAppServerProcessExitedError extends Schema.TaggedErrorClass<CodexAppServerProcessExitedError>()(\n  \"CodexAppServerProcessExitedError\",\n  {\n    code: Schema.optional(Schema.Number),\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message() {\n    return this.code === undefined\n      ? \"Codex App Server process exited\"\n      : `Codex App Server process exited with code ${this.code}`;\n  }\n}\n\nexport class CodexAppServerProtocolParseError extends Schema.TaggedErrorClass<CodexAppServerProtocolParseError>()(\n  \"CodexAppServerProtocolParseError\",\n  {\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message() {\n    return `Failed to parse Codex App Server protocol message: ${this.detail}`;\n  }\n}\n\nexport class CodexAppServerTransportError extends Schema.TaggedErrorClass<CodexAppServerTransportError>()(\n  \"CodexAppServerTransportError\",\n  {\n    detail: Schema.String,\n    cause: Schema.Defect(),\n  },\n) {\n  override get message() {\n    return this.detail;\n  }\n}\n\nexport class CodexAppServerRequestError extends Schema.TaggedErrorClass<CodexAppServerRequestError>()(\n  \"CodexAppServerRequestError\",\n  {\n    code: Schema.Number,\n    errorMessage: Schema.String,\n    data: Schema.optional(Schema.Unknown),\n  },\n) {\n  override get message() {\n    return this.errorMessage;\n  }\n\n  static fromProtocolError(error: CodexAppServerProtocolErrorShape) {\n    return new CodexAppServerRequestError({\n      code: error.code,\n      errorMessage: error.message,\n      ...(error.data !== undefined ? { data: error.data } : {}),\n    });\n  }\n\n  static parseError(message = \"Parse error\", data?: unknown) {\n    return new CodexAppServerRequestError({\n      code: -32700,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static invalidRequest(message = \"Invalid request\", data?: unknown) {\n    return new CodexAppServerRequestError({\n      code: -32600,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static methodNotFound(method: string) {\n    return new CodexAppServerRequestError({\n      code: -32601,\n      errorMessage: `Method not found: ${method}`,\n    });\n  }\n\n  static invalidParams(message = \"Invalid params\", data?: unknown) {\n    return new CodexAppServerRequestError({\n      code: -32602,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static internalError(message = \"Internal error\", data?: unknown) {\n    return new CodexAppServerRequestError({\n      code: -32603,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static overloaded(message = \"Server overloaded; retry later.\", data?: unknown) {\n    return new CodexAppServerRequestError({\n      code: -32001,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  toProtocolError(): CodexAppServerProtocolErrorShape {\n    return {\n      code: this.code,\n      message: this.errorMessage,\n      ...(this.data !== undefined ? { data: this.data } : {}),\n    };\n  }\n}\n\nexport const CodexAppServerError = Schema.Union([\n  CodexAppServerRequestError,\n  CodexAppServerSpawnError,\n  CodexAppServerProcessExitedError,\n  CodexAppServerProtocolParseError,\n  CodexAppServerTransportError,\n]);\n\nexport type CodexAppServerError = typeof CodexAppServerError.Type;\nconst isCodexAppServerRequestError = Schema.is(CodexAppServerRequestError);\n\nexport function normalizeToRequestError(error: CodexAppServerError): CodexAppServerRequestError {\n  return isCodexAppServerRequestError(error)\n    ? error\n    : CodexAppServerRequestError.internalError(error.message);\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\n\nimport * as CodexError from \"../errors.ts\";\n\nconst formatSchemaIssue = SchemaIssue.makeFormatterDefault();\n\nexport const JsonRpcId = Schema.Union([Schema.Number, Schema.String]);\n\nexport const JsonRpcError = Schema.Struct({\n  code: Schema.Number,\n  message: Schema.String,\n  data: Schema.optional(Schema.Unknown),\n});\n\nexport const JsonRpcResponseEnvelope = Schema.Struct({\n  id: JsonRpcId,\n  result: Schema.optional(Schema.Unknown),\n  error: Schema.optional(JsonRpcError),\n});\n\nexport const decodeOptionalPayload = <A, I>(\n  method: string,\n  schema: Schema.Codec<A, I> | undefined,\n  raw: unknown,\n): Effect.Effect<A, CodexError.CodexAppServerRequestError> => {\n  if (!schema) {\n    if (raw === undefined) {\n      return Effect.sync(() => undefined as A);\n    }\n    return Effect.fail(\n      CodexError.CodexAppServerRequestError.invalidParams(`${method} does not accept params`, raw),\n    );\n  }\n\n  return Schema.decodeUnknownEffect(schema)(raw).pipe(\n    Effect.mapError((error) =>\n      CodexError.CodexAppServerRequestError.invalidParams(\n        `Invalid ${method} payload: ${formatSchemaIssue(error.issue)}`,\n        { issue: error.issue },\n      ),\n    ),\n  );\n};\n\nexport const encodeOptionalPayload = <A, I>(\n  method: string,\n  schema: Schema.Codec<A, I> | undefined,\n  payload: A,\n): Effect.Effect<I | undefined, CodexError.CodexAppServerRequestError> => {\n  if (!schema) {\n    if (payload === undefined) {\n      return Effect.sync(() => undefined);\n    }\n    return Effect.fail(\n      CodexError.CodexAppServerRequestError.invalidParams(\n        `${method} does not accept params`,\n        payload,\n      ),\n    );\n  }\n\n  return Schema.encodeEffect(schema)(payload).pipe(\n    Effect.mapError((error) =>\n      CodexError.CodexAppServerRequestError.invalidParams(\n        `Invalid ${method} payload: ${formatSchemaIssue(error.issue)}`,\n        { issue: error.issue },\n      ),\n    ),\n  );\n};\n\nexport const decodeNotificationPayload = <A, I>(\n  method: string,\n  schema: Schema.Codec<A, I> | undefined,\n  raw: unknown,\n): Effect.Effect<A, CodexError.CodexAppServerProtocolParseError> =>\n  decodeOptionalPayload(method, schema, raw).pipe(\n    Effect.mapError(\n      (error) =>\n        new CodexError.CodexAppServerProtocolParseError({\n          detail: error.message,\n          cause: error,\n        }),\n    ),\n  );\n\nexport const runHandler = Effect.fnUntraced(function* <A, B>(\n  handler: ((payload: A) => Effect.Effect<B, CodexError.CodexAppServerError>) | undefined,\n  payload: A,\n  method: string,\n) {\n  if (!handler) {\n    return yield* CodexError.CodexAppServerRequestError.methodNotFound(method);\n  }\n\n  return yield* handler(payload).pipe(\n    Effect.mapError((error) => CodexError.normalizeToRequestError(error)),\n  );\n});\n","import * as Cause from \"effect/Cause\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stdio from \"effect/Stdio\";\nimport * as Stream from \"effect/Stream\";\n\nimport * as CodexError from \"./errors.ts\";\nimport { JsonRpcId, JsonRpcResponseEnvelope } from \"./_internal/shared.ts\";\nconst isJsonRpcId = Schema.is(JsonRpcId);\nconst isJsonRpcResponseEnvelope = Schema.is(JsonRpcResponseEnvelope);\nconst isCodexAppServerError = Schema.is(CodexError.CodexAppServerError);\n\nexport interface CodexAppServerProtocolLogEvent {\n  readonly direction: \"incoming\" | \"outgoing\";\n  readonly stage: \"raw\" | \"decoded\" | \"decode_failed\";\n  readonly payload: unknown;\n}\n\nexport interface CodexAppServerIncomingNotification {\n  readonly method: string;\n  readonly params?: unknown;\n}\n\nexport interface CodexAppServerIncomingRequest {\n  readonly id: string | number;\n  readonly method: string;\n  readonly params?: unknown;\n}\n\nexport interface CodexAppServerPatchedProtocolOptions {\n  readonly stdio: Stdio.Stdio;\n  readonly terminationError?: Effect.Effect<CodexError.CodexAppServerError>;\n  readonly logIncoming?: boolean;\n  readonly logOutgoing?: boolean;\n  readonly logger?: (event: CodexAppServerProtocolLogEvent) => Effect.Effect<void, never>;\n  readonly onNotification?: (\n    notification: CodexAppServerIncomingNotification,\n  ) => Effect.Effect<void, never>;\n  readonly onRequest?: (\n    request: CodexAppServerIncomingRequest,\n  ) => Effect.Effect<unknown, CodexError.CodexAppServerError>;\n  readonly onTermination?: (error: CodexError.CodexAppServerError) => Effect.Effect<void, never>;\n}\n\nexport interface CodexAppServerPatchedProtocol {\n  readonly incomingNotifications: Stream.Stream<CodexAppServerIncomingNotification>;\n  readonly incomingRequests: Stream.Stream<CodexAppServerIncomingRequest>;\n  readonly request: (\n    method: string,\n    payload?: unknown,\n  ) => Effect.Effect<unknown, CodexError.CodexAppServerError>;\n  readonly notify: (\n    method: string,\n    payload?: unknown,\n  ) => Effect.Effect<void, CodexError.CodexAppServerError>;\n  readonly respond: (\n    requestId: string | number,\n    result: unknown,\n  ) => Effect.Effect<void, CodexError.CodexAppServerError>;\n  readonly respondError: (\n    requestId: string | number,\n    error: CodexError.CodexAppServerRequestError,\n  ) => Effect.Effect<void, CodexError.CodexAppServerError>;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null;\n}\n\nfunction isIncomingRequest(value: unknown): value is CodexAppServerIncomingRequest {\n  if (!isObject(value) || typeof value.method !== \"string\") {\n    return false;\n  }\n  return isJsonRpcId(value.id);\n}\n\nfunction isIncomingNotification(value: unknown): value is CodexAppServerIncomingNotification {\n  return isObject(value) && typeof value.method === \"string\" && !(\"id\" in value);\n}\n\nfunction isIncomingResponse(value: unknown): value is typeof JsonRpcResponseEnvelope.Type {\n  return isJsonRpcResponseEnvelope(value);\n}\n\nconst encodeJsonString = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);\nconst decodeJsonString = Schema.decodeUnknownEffect(Schema.UnknownFromJsonString);\n\nconst encodeWireMessage = (\n  message: Record<string, unknown>,\n): Effect.Effect<string, CodexError.CodexAppServerProtocolParseError> =>\n  encodeJsonString(message).pipe(\n    Effect.map((encoded) => `${encoded}\\n`),\n    Effect.mapError(\n      (cause) =>\n        new CodexError.CodexAppServerProtocolParseError({\n          detail: \"Failed to encode Codex App Server message\",\n          cause,\n        }),\n    ),\n  );\n\nconst decodeWireMessage = (\n  line: string,\n): Effect.Effect<unknown, CodexError.CodexAppServerProtocolParseError> =>\n  decodeJsonString(line).pipe(\n    Effect.mapError(\n      (cause) =>\n        new CodexError.CodexAppServerProtocolParseError({\n          detail: \"Failed to decode Codex App Server wire message\",\n          cause,\n        }),\n    ),\n  );\n\nconst normalizeIncomingError = (error: unknown, detail: string): CodexError.CodexAppServerError =>\n  isCodexAppServerError(error)\n    ? error\n    : new CodexError.CodexAppServerTransportError({\n        detail,\n        cause: error,\n      });\n\nconst toProtocolMessage = (\n  requestId: string | number,\n  fields: {\n    readonly result?: unknown;\n    readonly error?: CodexError.CodexAppServerProtocolErrorShape;\n  },\n): { readonly [key: string]: unknown } => ({\n  id: requestId,\n  ...(fields.result !== undefined ? { result: fields.result } : {}),\n  ...(fields.error !== undefined ? { error: fields.error } : {}),\n});\n\nexport const makeCodexAppServerPatchedProtocol = Effect.fn(\"makeCodexAppServerPatchedProtocol\")(\n  function* (\n    options: CodexAppServerPatchedProtocolOptions,\n  ): Effect.fn.Return<CodexAppServerPatchedProtocol, never, Scope.Scope> {\n    const outgoing = yield* Queue.unbounded<string, Cause.Done<void>>();\n    const incomingNotifications = yield* Queue.unbounded<CodexAppServerIncomingNotification>();\n    const incomingRequests = yield* Queue.unbounded<CodexAppServerIncomingRequest>();\n    const pending = yield* Ref.make(\n      new Map<string, Deferred.Deferred<unknown, CodexError.CodexAppServerError>>(),\n    );\n    const nextRequestId = yield* Ref.make(1);\n    const remainder = yield* Ref.make(\"\");\n    const terminationHandled = yield* Ref.make(false);\n\n    const logProtocol = (event: CodexAppServerProtocolLogEvent) => {\n      if (event.direction === \"incoming\" && !options.logIncoming) {\n        return Effect.void;\n      }\n      if (event.direction === \"outgoing\" && !options.logOutgoing) {\n        return Effect.void;\n      }\n      return (\n        options.logger?.(event) ??\n        Effect.logDebug(\"Codex App Server protocol event\").pipe(Effect.annotateLogs({ event }))\n      );\n    };\n\n    const failAllPending = (error: CodexError.CodexAppServerError) =>\n      Ref.get(pending).pipe(\n        Effect.flatMap((current) =>\n          Effect.forEach([...current.values()], (deferred) => Deferred.fail(deferred, error), {\n            discard: true,\n          }),\n        ),\n        Effect.andThen(Ref.set(pending, new Map())),\n      );\n\n    const handleTermination = (classify: () => Effect.Effect<CodexError.CodexAppServerError>) =>\n      Ref.modify(terminationHandled, (handled) => {\n        if (handled) {\n          return [Effect.void, true] as const;\n        }\n        return [\n          Effect.gen(function* () {\n            const error = yield* classify();\n            yield* failAllPending(error);\n            yield* Queue.end(outgoing);\n            if (options.onTermination) {\n              yield* options.onTermination(error);\n            }\n          }),\n          true,\n        ] as const;\n      }).pipe(Effect.flatten);\n\n    const offerOutgoing = (message: Record<string, unknown>) =>\n      Effect.gen(function* () {\n        yield* logProtocol({\n          direction: \"outgoing\",\n          stage: \"decoded\",\n          payload: message,\n        });\n        const encoded = yield* encodeWireMessage(message);\n        yield* logProtocol({\n          direction: \"outgoing\",\n          stage: \"raw\",\n          payload: encoded,\n        });\n        yield* Queue.offer(outgoing, encoded).pipe(Effect.asVoid);\n      });\n\n    const removePending = (requestId: string) =>\n      Ref.update(pending, (current) => {\n        if (!current.has(requestId)) {\n          return current;\n        }\n        const next = new Map(current);\n        next.delete(requestId);\n        return next;\n      });\n\n    const resolvePending = (\n      requestId: string,\n      handler: (\n        deferred: Deferred.Deferred<unknown, CodexError.CodexAppServerError>,\n      ) => Effect.Effect<void>,\n    ) =>\n      Ref.modify(pending, (current) => {\n        const deferred = current.get(requestId);\n        if (!deferred) {\n          return [Effect.void, current] as const;\n        }\n        const next = new Map(current);\n        next.delete(requestId);\n        return [handler(deferred), next] as const;\n      }).pipe(Effect.flatten);\n\n    const respond = (requestId: string | number, result: unknown) =>\n      offerOutgoing(toProtocolMessage(requestId, { result }));\n\n    const respondError = (\n      requestId: string | number,\n      error: CodexError.CodexAppServerRequestError,\n    ) => offerOutgoing(toProtocolMessage(requestId, { error: error.toProtocolError() }));\n\n    const handleResponse = (response: typeof JsonRpcResponseEnvelope.Type) => {\n      const requestId = String(response.id);\n      const protocolError = response.error;\n      if (protocolError !== undefined) {\n        return resolvePending(requestId, (deferred) =>\n          Deferred.fail(\n            deferred,\n            CodexError.CodexAppServerRequestError.fromProtocolError(protocolError),\n          ),\n        );\n      }\n      return resolvePending(requestId, (deferred) => Deferred.succeed(deferred, response.result));\n    };\n\n    const handleRequest = (request: CodexAppServerIncomingRequest) =>\n      Queue.offer(incomingRequests, request).pipe(\n        Effect.andThen(\n          options.onRequest\n            ? options.onRequest(request).pipe(\n                Effect.matchEffect({\n                  onFailure: (error) =>\n                    respondError(request.id, CodexError.normalizeToRequestError(error)),\n                  onSuccess: (result) => respond(request.id, result),\n                }),\n              )\n            : Effect.void,\n        ),\n        Effect.asVoid,\n      );\n\n    const handleNotification = (notification: CodexAppServerIncomingNotification) =>\n      Queue.offer(incomingNotifications, notification).pipe(\n        Effect.andThen(options.onNotification ? options.onNotification(notification) : Effect.void),\n        Effect.asVoid,\n      );\n\n    const routeMessage = (\n      message: unknown,\n    ): Effect.Effect<void, CodexError.CodexAppServerError> => {\n      if (isIncomingRequest(message)) {\n        return handleRequest(message);\n      }\n      if (isIncomingNotification(message)) {\n        return handleNotification(message);\n      }\n      if (isIncomingResponse(message)) {\n        return handleResponse(message);\n      }\n      return Effect.fail(\n        new CodexError.CodexAppServerProtocolParseError({\n          detail: \"Received protocol message in an unknown shape\",\n        }),\n      );\n    };\n\n    const handleLine = (line: string): Effect.Effect<void, CodexError.CodexAppServerError> => {\n      if (line.trim().length === 0) {\n        return Effect.void;\n      }\n      return logProtocol({\n        direction: \"incoming\",\n        stage: \"raw\",\n        payload: line,\n      }).pipe(\n        Effect.flatMap(() => decodeWireMessage(line)),\n        Effect.tap((decoded) =>\n          logProtocol({\n            direction: \"incoming\",\n            stage: \"decoded\",\n            payload: decoded,\n          }),\n        ),\n        Effect.tapErrorTag(\"CodexAppServerProtocolParseError\", (error) =>\n          logProtocol({\n            direction: \"incoming\",\n            stage: \"decode_failed\",\n            payload: {\n              detail: error.detail,\n              cause: error.cause,\n            },\n          }),\n        ),\n        Effect.flatMap(routeMessage),\n      );\n    };\n\n    yield* options.stdio.stdin.pipe(\n      Stream.decodeText(),\n      Stream.runForEach((chunk) =>\n        Ref.modify(remainder, (current) => {\n          const combined = current + chunk;\n          const lines = combined.split(\"\\n\");\n          const nextRemainder = lines.pop() ?? \"\";\n          return [lines.map((line) => line.replace(/\\r$/, \"\")), nextRemainder] as const;\n        }).pipe(Effect.flatMap((lines) => Effect.forEach(lines, handleLine, { discard: true }))),\n      ),\n      Effect.matchEffect({\n        onFailure: (error) =>\n          handleTermination(() =>\n            Effect.succeed(normalizeIncomingError(error, \"Codex App Server input stream failed\")),\n          ),\n        onSuccess: () =>\n          Ref.get(remainder).pipe(\n            Effect.flatMap((line) => (line.trim().length === 0 ? Effect.void : handleLine(line))),\n            Effect.matchEffect({\n              onFailure: (error) => handleTermination(() => Effect.succeed(error)),\n              onSuccess: () =>\n                handleTermination(\n                  () =>\n                    options.terminationError ??\n                    Effect.succeed(\n                      new CodexError.CodexAppServerTransportError({\n                        detail: \"Codex App Server input stream ended\",\n                        cause: new Error(\"Codex App Server input stream ended\"),\n                      }),\n                    ),\n                ),\n            }),\n          ),\n      }),\n      Effect.forkScoped,\n    );\n\n    yield* Stream.fromQueue(outgoing).pipe(Stream.run(options.stdio.stdout()), Effect.forkScoped);\n\n    const request = (method: string, payload?: unknown) =>\n      Effect.gen(function* () {\n        const requestId = yield* Ref.modify(\n          nextRequestId,\n          (current) => [current, current + 1] as const,\n        );\n        const deferred = yield* Deferred.make<unknown, CodexError.CodexAppServerError>();\n        yield* Ref.update(pending, (current) => new Map(current).set(String(requestId), deferred));\n        yield* offerOutgoing({\n          id: requestId,\n          method,\n          ...(payload !== undefined ? { params: payload } : {}),\n        }).pipe(\n          Effect.catch((error) =>\n            removePending(String(requestId)).pipe(Effect.andThen(Effect.fail(error))),\n          ),\n        );\n        return yield* Deferred.await(deferred).pipe(\n          Effect.onInterrupt(() => removePending(String(requestId))),\n        );\n      });\n\n    const notify = (method: string, payload?: unknown) =>\n      offerOutgoing({\n        method,\n        ...(payload !== undefined ? { params: payload } : {}),\n      });\n\n    return {\n      incomingNotifications: Stream.fromQueue(incomingNotifications),\n      incomingRequests: Stream.fromQueue(incomingRequests),\n      request,\n      notify,\n      respond,\n      respondError,\n    } satisfies CodexAppServerPatchedProtocol;\n  },\n);\n","import * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Queue from \"effect/Queue\";\nimport * as Sink from \"effect/Sink\";\nimport * as Stdio from \"effect/Stdio\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport * as CodexError from \"../errors.ts\";\n\nconst encoder = new TextEncoder();\n\nexport const makeChildStdio = (handle: ChildProcessSpawner.ChildProcessHandle) =>\n  Stdio.make({\n    args: Effect.succeed([]),\n    stdin: handle.stdout,\n    stdout: () =>\n      Sink.mapInput(handle.stdin, (chunk: string | Uint8Array) =>\n        typeof chunk === \"string\" ? encoder.encode(chunk) : chunk,\n      ),\n    stderr: () => Sink.drain,\n  });\n\nexport const makeInMemoryStdio = Effect.fn(\"makeInMemoryStdio\")(function* () {\n  const input = yield* Queue.unbounded<Uint8Array, Cause.Done<void>>();\n  const output = yield* Queue.unbounded<string>();\n  const decoder = new TextDecoder();\n\n  return {\n    stdio: Stdio.make({\n      args: Effect.succeed([]),\n      stdin: Stream.fromQueue(input),\n      stdout: () =>\n        Sink.forEach((chunk: string | Uint8Array) =>\n          Queue.offer(\n            output,\n            typeof chunk === \"string\" ? chunk : decoder.decode(chunk, { stream: true }),\n          ),\n        ),\n      stderr: () => Sink.drain,\n    }),\n    input,\n    output,\n  };\n});\n\nexport const makeTerminationError = (\n  handle: ChildProcessSpawner.ChildProcessHandle,\n): Effect.Effect<CodexError.CodexAppServerError> =>\n  Effect.match(handle.exitCode, {\n    onFailure: (cause) =>\n      new CodexError.CodexAppServerTransportError({\n        detail: \"Failed to determine Codex App Server process exit status\",\n        cause,\n      }),\n    onSuccess: (code) => new CodexError.CodexAppServerProcessExitedError({ code }),\n  });\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stdio from \"effect/Stdio\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport * as CodexRpc from \"./_generated/meta.gen.ts\";\nimport * as CodexError from \"./errors.ts\";\nimport * as CodexProtocol from \"./protocol.ts\";\nimport {\n  decodeNotificationPayload,\n  decodeOptionalPayload,\n  encodeOptionalPayload,\n  runHandler,\n} from \"./_internal/shared.ts\";\nimport { makeChildStdio, makeTerminationError } from \"./_internal/stdio.ts\";\n\nconst DEFAULT_APP_SERVER_FORCE_KILL_AFTER = \"2 seconds\" as const;\n\nexport interface CodexAppServerClientOptions {\n  readonly logIncoming?: boolean;\n  readonly logOutgoing?: boolean;\n  readonly logger?: (\n    event: CodexProtocol.CodexAppServerProtocolLogEvent,\n  ) => Effect.Effect<void, never>;\n}\n\ninterface CodexAppServerClientRaw {\n  readonly notifications: CodexProtocol.CodexAppServerPatchedProtocol[\"incomingNotifications\"];\n  readonly requests: CodexProtocol.CodexAppServerPatchedProtocol[\"incomingRequests\"];\n  readonly request: CodexProtocol.CodexAppServerPatchedProtocol[\"request\"];\n  readonly notify: CodexProtocol.CodexAppServerPatchedProtocol[\"notify\"];\n  readonly respond: CodexProtocol.CodexAppServerPatchedProtocol[\"respond\"];\n  readonly respondError: CodexProtocol.CodexAppServerPatchedProtocol[\"respondError\"];\n}\n\nexport interface CodexAppServerClientShape {\n  readonly raw: CodexAppServerClientRaw;\n  readonly request: <M extends CodexRpc.ClientRequestMethod>(\n    method: M,\n    payload: CodexRpc.ClientRequestParamsByMethod[M],\n  ) => Effect.Effect<CodexRpc.ClientRequestResponsesByMethod[M], CodexError.CodexAppServerError>;\n  readonly notify: <M extends CodexRpc.ClientNotificationMethod>(\n    method: M,\n    payload: CodexRpc.ClientNotificationParamsByMethod[M],\n  ) => Effect.Effect<void, CodexError.CodexAppServerError>;\n  readonly handleServerRequest: <M extends CodexRpc.ServerRequestMethod>(\n    method: M,\n    handler: (\n      payload: CodexRpc.ServerRequestParamsByMethod[M],\n    ) => Effect.Effect<CodexRpc.ServerRequestResponsesByMethod[M], CodexError.CodexAppServerError>,\n  ) => Effect.Effect<void>;\n  readonly handleServerNotification: <M extends CodexRpc.ServerNotificationMethod>(\n    method: M,\n    handler: (\n      payload: CodexRpc.ServerNotificationParamsByMethod[M],\n    ) => Effect.Effect<void, CodexError.CodexAppServerError>,\n  ) => Effect.Effect<void>;\n  readonly handleUnknownServerRequest: (\n    handler: (\n      method: string,\n      params: unknown,\n    ) => Effect.Effect<unknown, CodexError.CodexAppServerError>,\n  ) => Effect.Effect<void>;\n  readonly handleUnknownServerNotification: (\n    handler: (\n      method: string,\n      params: unknown,\n    ) => Effect.Effect<void, CodexError.CodexAppServerError>,\n  ) => Effect.Effect<void>;\n}\n\nexport class CodexAppServerClient extends Context.Service<\n  CodexAppServerClient,\n  CodexAppServerClientShape\n>()(\"effect-codex-app-server/client/CodexAppServerClient\") {}\n\ntype ServerRequestHandler = (\n  payload: unknown,\n) => Effect.Effect<unknown, CodexError.CodexAppServerError>;\ntype ServerNotificationHandler = (\n  payload: unknown,\n) => Effect.Effect<void, CodexError.CodexAppServerError>;\n\nexport const make = Effect.fn(\"effect-codex-app-server/CodexAppServerClient.make\")(function* (\n  stdio: Stdio.Stdio,\n  options: CodexAppServerClientOptions = {},\n  terminationError?: Effect.Effect<CodexError.CodexAppServerError>,\n): Effect.fn.Return<CodexAppServerClientShape, never, Scope.Scope> {\n  const requestHandlers = new Map<string, ServerRequestHandler>();\n  const notificationHandlers = new Map<string, Array<ServerNotificationHandler>>();\n  let unknownRequestHandler:\n    | ((method: string, params: unknown) => Effect.Effect<unknown, CodexError.CodexAppServerError>)\n    | undefined;\n  let unknownNotificationHandler:\n    | ((method: string, params: unknown) => Effect.Effect<void, CodexError.CodexAppServerError>)\n    | undefined;\n\n  const getServerRequestParamSchema = <M extends CodexRpc.ServerRequestMethod>(\n    method: M,\n  ):\n    | Schema.Codec<CodexRpc.ServerRequestParamsByMethod[M], CodexRpc.ServerRequestParamsByMethod[M]>\n    | undefined => CodexRpc.SERVER_REQUEST_PARAMS[method] as never;\n\n  const getServerRequestResponseSchema = <M extends CodexRpc.ServerRequestMethod>(\n    method: M,\n  ):\n    | Schema.Codec<\n        CodexRpc.ServerRequestResponsesByMethod[M],\n        CodexRpc.ServerRequestResponsesByMethod[M]\n      >\n    | undefined => CodexRpc.SERVER_REQUEST_RESPONSES[method] as never;\n\n  const getClientRequestParamSchema = <M extends CodexRpc.ClientRequestMethod>(\n    method: M,\n  ):\n    | Schema.Codec<CodexRpc.ClientRequestParamsByMethod[M], CodexRpc.ClientRequestParamsByMethod[M]>\n    | undefined => CodexRpc.CLIENT_REQUEST_PARAMS[method] as never;\n\n  const getClientRequestResponseSchema = <M extends CodexRpc.ClientRequestMethod>(\n    method: M,\n  ):\n    | Schema.Codec<\n        CodexRpc.ClientRequestResponsesByMethod[M],\n        CodexRpc.ClientRequestResponsesByMethod[M]\n      >\n    | undefined => CodexRpc.CLIENT_REQUEST_RESPONSES[method] as never;\n\n  const getClientNotificationParamSchema = <M extends CodexRpc.ClientNotificationMethod>(\n    method: M,\n  ):\n    | Schema.Codec<\n        CodexRpc.ClientNotificationParamsByMethod[M],\n        CodexRpc.ClientNotificationParamsByMethod[M]\n      >\n    | undefined => CodexRpc.CLIENT_NOTIFICATION_PARAMS[method] as never;\n\n  const dispatchNotification = (\n    notification: CodexProtocol.CodexAppServerIncomingNotification,\n  ): Effect.Effect<void, never> => {\n    const schema =\n      notification.method in CodexRpc.SERVER_NOTIFICATION_PARAMS\n        ? CodexRpc.SERVER_NOTIFICATION_PARAMS[\n            notification.method as CodexRpc.ServerNotificationMethod\n          ]\n        : undefined;\n    const handlers = notificationHandlers.get(notification.method) ?? [];\n\n    if (schema) {\n      return decodeNotificationPayload(notification.method, schema, notification.params).pipe(\n        Effect.flatMap((decoded) =>\n          Effect.forEach(handlers, (handler) => handler(decoded), { discard: true }),\n        ),\n        Effect.catch(() => Effect.void),\n      );\n    }\n\n    return unknownNotificationHandler\n      ? unknownNotificationHandler(notification.method, notification.params).pipe(\n          Effect.catch(() => Effect.void),\n        )\n      : Effect.void;\n  };\n\n  const dispatchRequest = (\n    request: CodexProtocol.CodexAppServerIncomingRequest,\n  ): Effect.Effect<unknown, CodexError.CodexAppServerError> => {\n    if (request.method in CodexRpc.SERVER_REQUEST_PARAMS) {\n      const method = request.method as CodexRpc.ServerRequestMethod;\n      const payloadSchema = getServerRequestParamSchema(method);\n      const responseSchema = getServerRequestResponseSchema(method);\n      const handler = requestHandlers.get(method);\n\n      return decodeOptionalPayload(method, payloadSchema, request.params).pipe(\n        Effect.flatMap((decoded) => runHandler(handler, decoded, method)),\n        Effect.flatMap((result) => encodeOptionalPayload(method, responseSchema, result)),\n      );\n    }\n\n    return unknownRequestHandler\n      ? unknownRequestHandler(request.method, request.params)\n      : Effect.fail(CodexError.CodexAppServerRequestError.methodNotFound(request.method));\n  };\n\n  const transport = yield* CodexProtocol.makeCodexAppServerPatchedProtocol({\n    stdio,\n    ...(terminationError ? { terminationError } : {}),\n    ...(options.logIncoming !== undefined ? { logIncoming: options.logIncoming } : {}),\n    ...(options.logOutgoing !== undefined ? { logOutgoing: options.logOutgoing } : {}),\n    ...(options.logger ? { logger: options.logger } : {}),\n    onNotification: dispatchNotification,\n    onRequest: dispatchRequest,\n  });\n\n  const request = <M extends CodexRpc.ClientRequestMethod>(\n    method: M,\n    payload: CodexRpc.ClientRequestParamsByMethod[M],\n  ): Effect.Effect<CodexRpc.ClientRequestResponsesByMethod[M], CodexError.CodexAppServerError> =>\n    encodeOptionalPayload(method, getClientRequestParamSchema(method), payload).pipe(\n      Effect.flatMap((encoded) => transport.request(method, encoded)),\n      Effect.flatMap(\n        (\n          raw,\n        ): Effect.Effect<\n          CodexRpc.ClientRequestResponsesByMethod[M],\n          CodexError.CodexAppServerError\n        > => decodeOptionalPayload(method, getClientRequestResponseSchema(method), raw),\n      ),\n    );\n\n  const notify = <M extends CodexRpc.ClientNotificationMethod>(\n    method: M,\n    payload: CodexRpc.ClientNotificationParamsByMethod[M],\n  ) =>\n    encodeOptionalPayload(method, getClientNotificationParamSchema(method), payload).pipe(\n      Effect.flatMap((encoded) => transport.notify(method, encoded)),\n    );\n\n  return CodexAppServerClient.of({\n    raw: {\n      notifications: transport.incomingNotifications,\n      requests: transport.incomingRequests,\n      request: transport.request,\n      notify: transport.notify,\n      respond: transport.respond,\n      respondError: transport.respondError,\n    },\n    request,\n    notify,\n    handleServerRequest: (method, handler) =>\n      Effect.sync(() => {\n        requestHandlers.set(method, handler as ServerRequestHandler);\n      }),\n    handleServerNotification: (method, handler) =>\n      Effect.sync(() => {\n        const current = notificationHandlers.get(method) ?? [];\n        current.push(handler as ServerNotificationHandler);\n        notificationHandlers.set(method, current);\n      }),\n    handleUnknownServerRequest: (handler) =>\n      Effect.sync(() => {\n        unknownRequestHandler = handler;\n      }),\n    handleUnknownServerNotification: (handler) =>\n      Effect.sync(() => {\n        unknownNotificationHandler = handler;\n      }),\n  });\n});\n\nexport const layerChildProcess = (\n  handle: ChildProcessSpawner.ChildProcessHandle,\n  options: CodexAppServerClientOptions = {},\n): Layer.Layer<CodexAppServerClient> =>\n  Layer.effect(CodexAppServerClient, makeChildProcessClient(handle, options));\n\nconst makeChildProcessClient = Effect.fn(\n  \"effect-codex-app-server/CodexAppServerClient.makeChildProcessClient\",\n)(function* (handle: ChildProcessSpawner.ChildProcessHandle, options: CodexAppServerClientOptions) {\n  yield* Stream.runDrain(handle.stderr).pipe(Effect.ignore, Effect.forkScoped);\n  return yield* make(makeChildStdio(handle), options, makeTerminationError(handle));\n});\n\nexport interface CodexAppServerCommandLayerOptions extends CodexAppServerClientOptions {\n  readonly command: string;\n  readonly args?: ReadonlyArray<string>;\n  readonly cwd?: string;\n  readonly env?: Record<string, string>;\n}\n\nexport const layerCommand = (\n  options: CodexAppServerCommandLayerOptions,\n): Layer.Layer<\n  CodexAppServerClient,\n  CodexError.CodexAppServerSpawnError,\n  ChildProcessSpawner.ChildProcessSpawner\n> =>\n  Layer.effect(\n    CodexAppServerClient,\n    Effect.gen(function* () {\n      const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n      const args = options.args ?? [];\n      const env = options.env ? { ...process.env, ...options.env } : undefined;\n      const spawnCommand = resolveSpawnCommand(\n        options.command,\n        args,\n        env !== undefined ? { env } : {},\n      );\n      const command = ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n        ...(options.cwd ? { cwd: options.cwd } : {}),\n        ...(env ? { env } : {}),\n        forceKillAfter: DEFAULT_APP_SERVER_FORCE_KILL_AFTER,\n        shell: spawnCommand.shell,\n      });\n      return yield* spawner.spawn(command).pipe(\n        Effect.mapError(\n          (cause) =>\n            new CodexError.CodexAppServerSpawnError({\n              command: [options.command, ...(options.args ?? [])].join(\" \"),\n              cause,\n            }),\n        ),\n      );\n    }).pipe(Effect.flatMap((handle) => makeChildProcessClient(handle, options))),\n  );\n","// This file is generated by the effect-codex-app-server package. Do not edit manually.\n// Upstream protocol ref: b39f943a634a6e7ba86c3d6e8cf6d5f35e612566\n\nimport * as CodexSchema from \"./schema.gen.ts\";\n\nexport const v1 = {\n  InitializeParams: CodexSchema.V1InitializeParams,\n  InitializeResponse: CodexSchema.V1InitializeResponse,\n} as const;\n\nexport const v2 = {\n  AccountLoginCompletedNotification: CodexSchema.V2AccountLoginCompletedNotification,\n  AccountRateLimitsUpdatedNotification: CodexSchema.V2AccountRateLimitsUpdatedNotification,\n  AccountUpdatedNotification: CodexSchema.V2AccountUpdatedNotification,\n  AgentMessageDeltaNotification: CodexSchema.V2AgentMessageDeltaNotification,\n  AppListUpdatedNotification: CodexSchema.V2AppListUpdatedNotification,\n  AppsListParams: CodexSchema.V2AppsListParams,\n  AppsListResponse: CodexSchema.V2AppsListResponse,\n  CancelLoginAccountParams: CodexSchema.V2CancelLoginAccountParams,\n  CancelLoginAccountResponse: CodexSchema.V2CancelLoginAccountResponse,\n  CommandExecOutputDeltaNotification: CodexSchema.V2CommandExecOutputDeltaNotification,\n  CommandExecParams: CodexSchema.V2CommandExecParams,\n  CommandExecResizeParams: CodexSchema.V2CommandExecResizeParams,\n  CommandExecResizeResponse: CodexSchema.V2CommandExecResizeResponse,\n  CommandExecResponse: CodexSchema.V2CommandExecResponse,\n  CommandExecTerminateParams: CodexSchema.V2CommandExecTerminateParams,\n  CommandExecTerminateResponse: CodexSchema.V2CommandExecTerminateResponse,\n  CommandExecutionOutputDeltaNotification: CodexSchema.V2CommandExecutionOutputDeltaNotification,\n  CommandExecWriteParams: CodexSchema.V2CommandExecWriteParams,\n  CommandExecWriteResponse: CodexSchema.V2CommandExecWriteResponse,\n  ConfigBatchWriteParams: CodexSchema.V2ConfigBatchWriteParams,\n  ConfigReadParams: CodexSchema.V2ConfigReadParams,\n  ConfigReadResponse: CodexSchema.V2ConfigReadResponse,\n  ConfigRequirementsReadResponse: CodexSchema.V2ConfigRequirementsReadResponse,\n  ConfigValueWriteParams: CodexSchema.V2ConfigValueWriteParams,\n  ConfigWarningNotification: CodexSchema.V2ConfigWarningNotification,\n  ConfigWriteResponse: CodexSchema.V2ConfigWriteResponse,\n  ContextCompactedNotification: CodexSchema.V2ContextCompactedNotification,\n  DeprecationNoticeNotification: CodexSchema.V2DeprecationNoticeNotification,\n  ErrorNotification: CodexSchema.V2ErrorNotification,\n  ExperimentalFeatureEnablementSetParams: CodexSchema.V2ExperimentalFeatureEnablementSetParams,\n  ExperimentalFeatureEnablementSetResponse: CodexSchema.V2ExperimentalFeatureEnablementSetResponse,\n  ExperimentalFeatureListParams: CodexSchema.V2ExperimentalFeatureListParams,\n  ExperimentalFeatureListResponse: CodexSchema.V2ExperimentalFeatureListResponse,\n  ExternalAgentConfigDetectParams: CodexSchema.V2ExternalAgentConfigDetectParams,\n  ExternalAgentConfigDetectResponse: CodexSchema.V2ExternalAgentConfigDetectResponse,\n  ExternalAgentConfigImportCompletedNotification:\n    CodexSchema.V2ExternalAgentConfigImportCompletedNotification,\n  ExternalAgentConfigImportParams: CodexSchema.V2ExternalAgentConfigImportParams,\n  ExternalAgentConfigImportResponse: CodexSchema.V2ExternalAgentConfigImportResponse,\n  FeedbackUploadParams: CodexSchema.V2FeedbackUploadParams,\n  FeedbackUploadResponse: CodexSchema.V2FeedbackUploadResponse,\n  FileChangeOutputDeltaNotification: CodexSchema.V2FileChangeOutputDeltaNotification,\n  FileChangePatchUpdatedNotification: CodexSchema.V2FileChangePatchUpdatedNotification,\n  FsChangedNotification: CodexSchema.V2FsChangedNotification,\n  FsCopyParams: CodexSchema.V2FsCopyParams,\n  FsCopyResponse: CodexSchema.V2FsCopyResponse,\n  FsCreateDirectoryParams: CodexSchema.V2FsCreateDirectoryParams,\n  FsCreateDirectoryResponse: CodexSchema.V2FsCreateDirectoryResponse,\n  FsGetMetadataParams: CodexSchema.V2FsGetMetadataParams,\n  FsGetMetadataResponse: CodexSchema.V2FsGetMetadataResponse,\n  FsReadDirectoryParams: CodexSchema.V2FsReadDirectoryParams,\n  FsReadDirectoryResponse: CodexSchema.V2FsReadDirectoryResponse,\n  FsReadFileParams: CodexSchema.V2FsReadFileParams,\n  FsReadFileResponse: CodexSchema.V2FsReadFileResponse,\n  FsRemoveParams: CodexSchema.V2FsRemoveParams,\n  FsRemoveResponse: CodexSchema.V2FsRemoveResponse,\n  FsUnwatchParams: CodexSchema.V2FsUnwatchParams,\n  FsUnwatchResponse: CodexSchema.V2FsUnwatchResponse,\n  FsWatchParams: CodexSchema.V2FsWatchParams,\n  FsWatchResponse: CodexSchema.V2FsWatchResponse,\n  FsWriteFileParams: CodexSchema.V2FsWriteFileParams,\n  FsWriteFileResponse: CodexSchema.V2FsWriteFileResponse,\n  GetAccountParams: CodexSchema.V2GetAccountParams,\n  GetAccountRateLimitsResponse: CodexSchema.V2GetAccountRateLimitsResponse,\n  GetAccountResponse: CodexSchema.V2GetAccountResponse,\n  GetAccountTokenUsageResponse: CodexSchema.V2GetAccountTokenUsageResponse,\n  GuardianWarningNotification: CodexSchema.V2GuardianWarningNotification,\n  HookCompletedNotification: CodexSchema.V2HookCompletedNotification,\n  HooksListParams: CodexSchema.V2HooksListParams,\n  HooksListResponse: CodexSchema.V2HooksListResponse,\n  HookStartedNotification: CodexSchema.V2HookStartedNotification,\n  ItemCompletedNotification: CodexSchema.V2ItemCompletedNotification,\n  ItemGuardianApprovalReviewCompletedNotification:\n    CodexSchema.V2ItemGuardianApprovalReviewCompletedNotification,\n  ItemGuardianApprovalReviewStartedNotification:\n    CodexSchema.V2ItemGuardianApprovalReviewStartedNotification,\n  ItemStartedNotification: CodexSchema.V2ItemStartedNotification,\n  ListMcpServerStatusParams: CodexSchema.V2ListMcpServerStatusParams,\n  ListMcpServerStatusResponse: CodexSchema.V2ListMcpServerStatusResponse,\n  LoginAccountParams: CodexSchema.V2LoginAccountParams,\n  LoginAccountResponse: CodexSchema.V2LoginAccountResponse,\n  LogoutAccountResponse: CodexSchema.V2LogoutAccountResponse,\n  MarketplaceAddParams: CodexSchema.V2MarketplaceAddParams,\n  MarketplaceAddResponse: CodexSchema.V2MarketplaceAddResponse,\n  MarketplaceRemoveParams: CodexSchema.V2MarketplaceRemoveParams,\n  MarketplaceRemoveResponse: CodexSchema.V2MarketplaceRemoveResponse,\n  MarketplaceUpgradeParams: CodexSchema.V2MarketplaceUpgradeParams,\n  MarketplaceUpgradeResponse: CodexSchema.V2MarketplaceUpgradeResponse,\n  McpResourceReadParams: CodexSchema.V2McpResourceReadParams,\n  McpResourceReadResponse: CodexSchema.V2McpResourceReadResponse,\n  McpServerOauthLoginCompletedNotification: CodexSchema.V2McpServerOauthLoginCompletedNotification,\n  McpServerOauthLoginParams: CodexSchema.V2McpServerOauthLoginParams,\n  McpServerOauthLoginResponse: CodexSchema.V2McpServerOauthLoginResponse,\n  McpServerRefreshResponse: CodexSchema.V2McpServerRefreshResponse,\n  McpServerStatusUpdatedNotification: CodexSchema.V2McpServerStatusUpdatedNotification,\n  McpServerToolCallParams: CodexSchema.V2McpServerToolCallParams,\n  McpServerToolCallResponse: CodexSchema.V2McpServerToolCallResponse,\n  McpToolCallProgressNotification: CodexSchema.V2McpToolCallProgressNotification,\n  ModelListParams: CodexSchema.V2ModelListParams,\n  ModelListResponse: CodexSchema.V2ModelListResponse,\n  ModelProviderCapabilitiesReadParams: CodexSchema.V2ModelProviderCapabilitiesReadParams,\n  ModelProviderCapabilitiesReadResponse: CodexSchema.V2ModelProviderCapabilitiesReadResponse,\n  ModelReroutedNotification: CodexSchema.V2ModelReroutedNotification,\n  ModelVerificationNotification: CodexSchema.V2ModelVerificationNotification,\n  PermissionProfileListParams: CodexSchema.V2PermissionProfileListParams,\n  PermissionProfileListResponse: CodexSchema.V2PermissionProfileListResponse,\n  PlanDeltaNotification: CodexSchema.V2PlanDeltaNotification,\n  PluginInstalledParams: CodexSchema.V2PluginInstalledParams,\n  PluginInstalledResponse: CodexSchema.V2PluginInstalledResponse,\n  PluginInstallParams: CodexSchema.V2PluginInstallParams,\n  PluginInstallResponse: CodexSchema.V2PluginInstallResponse,\n  PluginListParams: CodexSchema.V2PluginListParams,\n  PluginListResponse: CodexSchema.V2PluginListResponse,\n  PluginReadParams: CodexSchema.V2PluginReadParams,\n  PluginReadResponse: CodexSchema.V2PluginReadResponse,\n  PluginShareCheckoutParams: CodexSchema.V2PluginShareCheckoutParams,\n  PluginShareCheckoutResponse: CodexSchema.V2PluginShareCheckoutResponse,\n  PluginShareDeleteParams: CodexSchema.V2PluginShareDeleteParams,\n  PluginShareDeleteResponse: CodexSchema.V2PluginShareDeleteResponse,\n  PluginShareListParams: CodexSchema.V2PluginShareListParams,\n  PluginShareListResponse: CodexSchema.V2PluginShareListResponse,\n  PluginShareSaveParams: CodexSchema.V2PluginShareSaveParams,\n  PluginShareSaveResponse: CodexSchema.V2PluginShareSaveResponse,\n  PluginShareUpdateTargetsParams: CodexSchema.V2PluginShareUpdateTargetsParams,\n  PluginShareUpdateTargetsResponse: CodexSchema.V2PluginShareUpdateTargetsResponse,\n  PluginSkillReadParams: CodexSchema.V2PluginSkillReadParams,\n  PluginSkillReadResponse: CodexSchema.V2PluginSkillReadResponse,\n  PluginUninstallParams: CodexSchema.V2PluginUninstallParams,\n  PluginUninstallResponse: CodexSchema.V2PluginUninstallResponse,\n  ProcessExitedNotification: CodexSchema.V2ProcessExitedNotification,\n  ProcessOutputDeltaNotification: CodexSchema.V2ProcessOutputDeltaNotification,\n  RawResponseItemCompletedNotification: CodexSchema.V2RawResponseItemCompletedNotification,\n  ReasoningSummaryPartAddedNotification: CodexSchema.V2ReasoningSummaryPartAddedNotification,\n  ReasoningSummaryTextDeltaNotification: CodexSchema.V2ReasoningSummaryTextDeltaNotification,\n  ReasoningTextDeltaNotification: CodexSchema.V2ReasoningTextDeltaNotification,\n  RemoteControlStatusChangedNotification: CodexSchema.V2RemoteControlStatusChangedNotification,\n  ReviewStartParams: CodexSchema.V2ReviewStartParams,\n  ReviewStartResponse: CodexSchema.V2ReviewStartResponse,\n  SendAddCreditsNudgeEmailParams: CodexSchema.V2SendAddCreditsNudgeEmailParams,\n  SendAddCreditsNudgeEmailResponse: CodexSchema.V2SendAddCreditsNudgeEmailResponse,\n  ServerRequestResolvedNotification: CodexSchema.V2ServerRequestResolvedNotification,\n  SkillsChangedNotification: CodexSchema.V2SkillsChangedNotification,\n  SkillsConfigWriteParams: CodexSchema.V2SkillsConfigWriteParams,\n  SkillsConfigWriteResponse: CodexSchema.V2SkillsConfigWriteResponse,\n  SkillsExtraRootsSetParams: CodexSchema.V2SkillsExtraRootsSetParams,\n  SkillsExtraRootsSetResponse: CodexSchema.V2SkillsExtraRootsSetResponse,\n  SkillsListParams: CodexSchema.V2SkillsListParams,\n  SkillsListResponse: CodexSchema.V2SkillsListResponse,\n  TerminalInteractionNotification: CodexSchema.V2TerminalInteractionNotification,\n  ThreadApproveGuardianDeniedActionParams: CodexSchema.V2ThreadApproveGuardianDeniedActionParams,\n  ThreadApproveGuardianDeniedActionResponse:\n    CodexSchema.V2ThreadApproveGuardianDeniedActionResponse,\n  ThreadArchivedNotification: CodexSchema.V2ThreadArchivedNotification,\n  ThreadArchiveParams: CodexSchema.V2ThreadArchiveParams,\n  ThreadArchiveResponse: CodexSchema.V2ThreadArchiveResponse,\n  ThreadClosedNotification: CodexSchema.V2ThreadClosedNotification,\n  ThreadCompactStartParams: CodexSchema.V2ThreadCompactStartParams,\n  ThreadCompactStartResponse: CodexSchema.V2ThreadCompactStartResponse,\n  ThreadDeletedNotification: CodexSchema.V2ThreadDeletedNotification,\n  ThreadDeleteParams: CodexSchema.V2ThreadDeleteParams,\n  ThreadDeleteResponse: CodexSchema.V2ThreadDeleteResponse,\n  ThreadForkParams: CodexSchema.V2ThreadForkParams,\n  ThreadForkResponse: CodexSchema.V2ThreadForkResponse,\n  ThreadGoalClearedNotification: CodexSchema.V2ThreadGoalClearedNotification,\n  ThreadGoalClearParams: CodexSchema.V2ThreadGoalClearParams,\n  ThreadGoalClearResponse: CodexSchema.V2ThreadGoalClearResponse,\n  ThreadGoalGetParams: CodexSchema.V2ThreadGoalGetParams,\n  ThreadGoalGetResponse: CodexSchema.V2ThreadGoalGetResponse,\n  ThreadGoalSetParams: CodexSchema.V2ThreadGoalSetParams,\n  ThreadGoalSetResponse: CodexSchema.V2ThreadGoalSetResponse,\n  ThreadGoalUpdatedNotification: CodexSchema.V2ThreadGoalUpdatedNotification,\n  ThreadInjectItemsParams: CodexSchema.V2ThreadInjectItemsParams,\n  ThreadInjectItemsResponse: CodexSchema.V2ThreadInjectItemsResponse,\n  ThreadListParams: CodexSchema.V2ThreadListParams,\n  ThreadListResponse: CodexSchema.V2ThreadListResponse,\n  ThreadLoadedListParams: CodexSchema.V2ThreadLoadedListParams,\n  ThreadLoadedListResponse: CodexSchema.V2ThreadLoadedListResponse,\n  ThreadMetadataUpdateParams: CodexSchema.V2ThreadMetadataUpdateParams,\n  ThreadMetadataUpdateResponse: CodexSchema.V2ThreadMetadataUpdateResponse,\n  ThreadNameUpdatedNotification: CodexSchema.V2ThreadNameUpdatedNotification,\n  ThreadReadParams: CodexSchema.V2ThreadReadParams,\n  ThreadReadResponse: CodexSchema.V2ThreadReadResponse,\n  ThreadRealtimeClosedNotification: CodexSchema.V2ThreadRealtimeClosedNotification,\n  ThreadRealtimeErrorNotification: CodexSchema.V2ThreadRealtimeErrorNotification,\n  ThreadRealtimeItemAddedNotification: CodexSchema.V2ThreadRealtimeItemAddedNotification,\n  ThreadRealtimeOutputAudioDeltaNotification:\n    CodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification,\n  ThreadRealtimeSdpNotification: CodexSchema.V2ThreadRealtimeSdpNotification,\n  ThreadRealtimeStartedNotification: CodexSchema.V2ThreadRealtimeStartedNotification,\n  ThreadRealtimeTranscriptDeltaNotification:\n    CodexSchema.V2ThreadRealtimeTranscriptDeltaNotification,\n  ThreadRealtimeTranscriptDoneNotification: CodexSchema.V2ThreadRealtimeTranscriptDoneNotification,\n  ThreadResumeParams: CodexSchema.V2ThreadResumeParams,\n  ThreadResumeResponse: CodexSchema.V2ThreadResumeResponse,\n  ThreadRollbackParams: CodexSchema.V2ThreadRollbackParams,\n  ThreadRollbackResponse: CodexSchema.V2ThreadRollbackResponse,\n  ThreadSetNameParams: CodexSchema.V2ThreadSetNameParams,\n  ThreadSetNameResponse: CodexSchema.V2ThreadSetNameResponse,\n  ThreadSettingsUpdatedNotification: CodexSchema.V2ThreadSettingsUpdatedNotification,\n  ThreadShellCommandParams: CodexSchema.V2ThreadShellCommandParams,\n  ThreadShellCommandResponse: CodexSchema.V2ThreadShellCommandResponse,\n  ThreadStartedNotification: CodexSchema.V2ThreadStartedNotification,\n  ThreadStartParams: CodexSchema.V2ThreadStartParams,\n  ThreadStartResponse: CodexSchema.V2ThreadStartResponse,\n  ThreadStatusChangedNotification: CodexSchema.V2ThreadStatusChangedNotification,\n  ThreadTokenUsageUpdatedNotification: CodexSchema.V2ThreadTokenUsageUpdatedNotification,\n  ThreadUnarchivedNotification: CodexSchema.V2ThreadUnarchivedNotification,\n  ThreadUnarchiveParams: CodexSchema.V2ThreadUnarchiveParams,\n  ThreadUnarchiveResponse: CodexSchema.V2ThreadUnarchiveResponse,\n  ThreadUnsubscribeParams: CodexSchema.V2ThreadUnsubscribeParams,\n  ThreadUnsubscribeResponse: CodexSchema.V2ThreadUnsubscribeResponse,\n  TurnCompletedNotification: CodexSchema.V2TurnCompletedNotification,\n  TurnDiffUpdatedNotification: CodexSchema.V2TurnDiffUpdatedNotification,\n  TurnInterruptParams: CodexSchema.V2TurnInterruptParams,\n  TurnInterruptResponse: CodexSchema.V2TurnInterruptResponse,\n  TurnModerationMetadataNotification: CodexSchema.V2TurnModerationMetadataNotification,\n  TurnPlanUpdatedNotification: CodexSchema.V2TurnPlanUpdatedNotification,\n  TurnStartedNotification: CodexSchema.V2TurnStartedNotification,\n  TurnStartParams: CodexSchema.V2TurnStartParams,\n  TurnStartResponse: CodexSchema.V2TurnStartResponse,\n  TurnSteerParams: CodexSchema.V2TurnSteerParams,\n  TurnSteerResponse: CodexSchema.V2TurnSteerResponse,\n  WarningNotification: CodexSchema.V2WarningNotification,\n  WindowsSandboxReadinessResponse: CodexSchema.V2WindowsSandboxReadinessResponse,\n  WindowsSandboxSetupCompletedNotification: CodexSchema.V2WindowsSandboxSetupCompletedNotification,\n  WindowsSandboxSetupStartParams: CodexSchema.V2WindowsSandboxSetupStartParams,\n  WindowsSandboxSetupStartResponse: CodexSchema.V2WindowsSandboxSetupStartResponse,\n  WindowsWorldWritableWarningNotification: CodexSchema.V2WindowsWorldWritableWarningNotification,\n} as const;\n","/**\n * KeyedCoalescingWorker - A keyed worker that keeps only the latest value per key.\n *\n * Enqueues for an active or already-queued key are merged atomically instead of\n * creating duplicate queued items. `drainKey()` resolves only when that key has\n * no queued, pending, or active work left.\n *\n * @module KeyedCoalescingWorker\n */\nimport * as Scope from \"effect/Scope\";\nimport * as Effect from \"effect/Effect\";\nimport * as TxQueue from \"effect/TxQueue\";\nimport * as TxRef from \"effect/TxRef\";\n\nexport interface KeyedCoalescingWorker<K, V> {\n  readonly enqueue: (key: K, value: V) => Effect.Effect<void>;\n  readonly drainKey: (key: K) => Effect.Effect<void>;\n}\n\ninterface KeyedCoalescingWorkerState<K, V> {\n  readonly latestByKey: Map<K, V>;\n  readonly queuedKeys: Set<K>;\n  readonly activeKeys: Set<K>;\n}\n\nexport const makeKeyedCoalescingWorker = <K, V, E, R>(options: {\n  readonly merge: (current: V, next: V) => V;\n  readonly process: (key: K, value: V) => Effect.Effect<void, E, R>;\n}): Effect.Effect<KeyedCoalescingWorker<K, V>, never, Scope.Scope | R> =>\n  Effect.gen(function* () {\n    const queue = yield* Effect.acquireRelease(TxQueue.unbounded<K>(), TxQueue.shutdown);\n    const stateRef = yield* TxRef.make<KeyedCoalescingWorkerState<K, V>>({\n      latestByKey: new Map(),\n      queuedKeys: new Set(),\n      activeKeys: new Set(),\n    });\n\n    const processKey = (key: K, value: V): Effect.Effect<void, E, R> =>\n      options.process(key, value).pipe(\n        Effect.flatMap(() =>\n          TxRef.modify(stateRef, (state) => {\n            const nextValue = state.latestByKey.get(key);\n            if (nextValue === undefined) {\n              const activeKeys = new Set(state.activeKeys);\n              activeKeys.delete(key);\n              return [null, { ...state, activeKeys }] as const;\n            }\n\n            const latestByKey = new Map(state.latestByKey);\n            latestByKey.delete(key);\n            return [nextValue, { ...state, latestByKey }] as const;\n          }).pipe(Effect.tx),\n        ),\n        Effect.flatMap((nextValue) =>\n          nextValue === null ? Effect.void : processKey(key, nextValue),\n        ),\n      );\n\n    const cleanupFailedKey = (key: K): Effect.Effect<void> =>\n      TxRef.modify(stateRef, (state) => {\n        const activeKeys = new Set(state.activeKeys);\n        activeKeys.delete(key);\n\n        if (state.latestByKey.has(key) && !state.queuedKeys.has(key)) {\n          const queuedKeys = new Set(state.queuedKeys);\n          queuedKeys.add(key);\n          return [true, { ...state, activeKeys, queuedKeys }] as const;\n        }\n\n        return [false, { ...state, activeKeys }] as const;\n      }).pipe(\n        Effect.tx,\n        Effect.flatMap((shouldRequeue) =>\n          shouldRequeue ? TxQueue.offer(queue, key) : Effect.void,\n        ),\n      );\n\n    yield* TxQueue.take(queue).pipe(\n      Effect.flatMap((key) =>\n        TxRef.modify(stateRef, (state) => {\n          const queuedKeys = new Set(state.queuedKeys);\n          queuedKeys.delete(key);\n\n          const value = state.latestByKey.get(key);\n          if (value === undefined) {\n            return [null, { ...state, queuedKeys }] as const;\n          }\n\n          const latestByKey = new Map(state.latestByKey);\n          latestByKey.delete(key);\n          const activeKeys = new Set(state.activeKeys);\n          activeKeys.add(key);\n\n          return [\n            { key, value } as const,\n            { ...state, latestByKey, queuedKeys, activeKeys },\n          ] as const;\n        }).pipe(Effect.tx),\n      ),\n      Effect.flatMap((item) =>\n        item === null\n          ? Effect.void\n          : processKey(item.key, item.value).pipe(\n              Effect.catchCause(() => cleanupFailedKey(item.key)),\n            ),\n      ),\n      Effect.forever,\n      Effect.forkScoped,\n    );\n\n    const enqueue: KeyedCoalescingWorker<K, V>[\"enqueue\"] = (key, value) =>\n      TxRef.modify(stateRef, (state) => {\n        const latestByKey = new Map(state.latestByKey);\n        const existing = latestByKey.get(key);\n        latestByKey.set(key, existing === undefined ? value : options.merge(existing, value));\n\n        if (state.queuedKeys.has(key) || state.activeKeys.has(key)) {\n          return [false, { ...state, latestByKey }] as const;\n        }\n\n        const queuedKeys = new Set(state.queuedKeys);\n        queuedKeys.add(key);\n        return [true, { ...state, latestByKey, queuedKeys }] as const;\n      }).pipe(\n        Effect.flatMap((shouldOffer) => (shouldOffer ? TxQueue.offer(queue, key) : Effect.void)),\n        Effect.tx,\n        Effect.asVoid,\n      );\n\n    const drainKey: KeyedCoalescingWorker<K, V>[\"drainKey\"] = (key) =>\n      TxRef.get(stateRef).pipe(\n        Effect.tap((state) =>\n          state.latestByKey.has(key) || state.queuedKeys.has(key) || state.activeKeys.has(key)\n            ? Effect.txRetry\n            : Effect.void,\n        ),\n        Effect.asVoid,\n        Effect.tx,\n      );\n\n    return { enqueue, drainKey } satisfies KeyedCoalescingWorker<K, V>;\n  });\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { randomUUID } from \"node:crypto\";\nimport {\n  mkdirSync,\n  readFileSync,\n  readdirSync,\n  renameSync,\n  unlinkSync,\n  writeFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nconst PROCESS_REAP_CONCURRENCY = 8;\nconst PROCESS_TERMINATE_ATTEMPTS = 10;\nconst PROCESS_TERMINATE_RETRY_DELAY = \"200 millis\";\n\nexport interface ManagedChildProcessIdentity {\n  readonly pid: number;\n  readonly startTimeTicks: string;\n}\n\nexport interface ManagedChildProcessControl {\n  /** `null` means absent; `undefined` means the process could not be inspected safely. */\n  readonly readIdentity: (pid: number) => ManagedChildProcessIdentity | null | undefined;\n  readonly signal: (pid: number, signal: \"SIGTERM\" | \"SIGKILL\") => boolean;\n}\n\ninterface ManagedChildProcessRecord {\n  readonly version: 1;\n  readonly owner: ManagedChildProcessIdentity;\n  readonly child: ManagedChildProcessIdentity;\n}\n\ninterface ManagedChildProcessRegistration {\n  readonly filePath: string;\n  readonly record: ManagedChildProcessRecord;\n}\n\nconst ManagedChildProcessIdentitySchema = Schema.Struct({\n  pid: Schema.Int,\n  startTimeTicks: Schema.String,\n});\nconst ManagedChildProcessRecordSchema = Schema.Struct({\n  version: Schema.Literal(1),\n  owner: ManagedChildProcessIdentitySchema,\n  child: ManagedChildProcessIdentitySchema,\n});\nconst LegacyManagedSidecarRecordSchema = Schema.Struct({\n  version: Schema.Literal(1),\n  owner: ManagedChildProcessIdentitySchema,\n  sidecar: ManagedChildProcessIdentitySchema,\n});\nconst decodeProcessRecord = Schema.decodeUnknownOption(\n  Schema.fromJsonString(\n    Schema.Union([ManagedChildProcessRecordSchema, LegacyManagedSidecarRecordSchema]),\n  ),\n);\nconst encodeProcessRecord = Schema.encodeUnknownEffect(\n  Schema.fromJsonString(ManagedChildProcessRecordSchema),\n);\n\nfunction readLinuxProcessIdentity(pid: number): ManagedChildProcessIdentity | null | undefined {\n  if (process.platform !== \"linux\" || !Number.isInteger(pid) || pid < 1) return undefined;\n  try {\n    const stat = readFileSync(`/proc/${pid}/stat`, \"utf8\");\n    const commandEnd = stat.lastIndexOf(\")\");\n    if (commandEnd < 0) return undefined;\n    // Fields after the parenthesized command begin at proc(5)'s field 3 (state).\n    const fields = stat\n      .slice(commandEnd + 1)\n      .trim()\n      .split(/\\s+/g);\n    const state = fields[0];\n    const startTimeTicks = fields[19];\n    if (state === \"Z\") return null;\n    if (!startTimeTicks || !/^\\d+$/.test(startTimeTicks)) return undefined;\n    return { pid, startTimeTicks };\n  } catch (error) {\n    return (error as NodeJS.ErrnoException).code === \"ENOENT\" ? null : undefined;\n  }\n}\n\nconst defaultProcessControl: ManagedChildProcessControl = {\n  readIdentity: readLinuxProcessIdentity,\n  signal: (pid, signal) => {\n    try {\n      process.kill(pid, signal);\n      return true;\n    } catch {\n      return false;\n    }\n  },\n};\n\nfunction safeReadIdentity(\n  processControl: ManagedChildProcessControl,\n  pid: number,\n): ManagedChildProcessIdentity | null | undefined {\n  try {\n    return processControl.readIdentity(pid);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction sameProcess(\n  expected: ManagedChildProcessIdentity,\n  actual: ManagedChildProcessIdentity | null | undefined,\n): boolean {\n  return actual?.pid === expected.pid && actual.startTimeTicks === expected.startTimeTicks;\n}\n\nfunction parseProcessRecord(raw: string): ManagedChildProcessRecord | null {\n  const decoded = Option.getOrNull(decodeProcessRecord(raw));\n  const record = decoded\n    ? {\n        version: decoded.version,\n        owner: decoded.owner,\n        child: \"child\" in decoded ? decoded.child : decoded.sidecar,\n      }\n    : null;\n  if (\n    !record ||\n    record.owner.pid < 1 ||\n    record.child.pid < 1 ||\n    !/^\\d+$/.test(record.owner.startTimeTicks) ||\n    !/^\\d+$/.test(record.child.startTimeTicks)\n  ) {\n    return null;\n  }\n  return record;\n}\n\nfunction removeRegistrationIfChildExited(input: {\n  readonly registration: ManagedChildProcessRegistration;\n  readonly processControl: ManagedChildProcessControl;\n}) {\n  return Effect.sync(() => {\n    const identity = safeReadIdentity(input.processControl, input.registration.record.child.pid);\n    if (identity !== undefined && !sameProcess(input.registration.record.child, identity)) {\n      try {\n        unlinkSync(input.registration.filePath);\n      } catch {\n        // The record may already have been removed by a concurrent startup reconciliation.\n      }\n    }\n  });\n}\n\nexport const registerManagedChildProcess = Effect.fn(\"managedChildProcess.register\")(\n  function* (input: {\n    readonly registryDirectory: string;\n    readonly childPid: number;\n    readonly terminate: Effect.Effect<void>;\n    readonly processControl?: ManagedChildProcessControl;\n  }) {\n    const processControl = input.processControl ?? defaultProcessControl;\n    let registration: ManagedChildProcessRegistration | undefined;\n    yield* Effect.addFinalizer(() =>\n      input.terminate.pipe(\n        Effect.ignore,\n        Effect.andThen(\n          Effect.suspend(() =>\n            registration === undefined\n              ? Effect.void\n              : removeRegistrationIfChildExited({ registration, processControl }),\n          ),\n        ),\n        Effect.ignore,\n      ),\n    );\n\n    const owner = safeReadIdentity(processControl, process.pid);\n    const child = safeReadIdentity(processControl, input.childPid);\n    if (!owner || !child) return;\n\n    const nextRegistration: ManagedChildProcessRegistration = {\n      filePath: join(input.registryDirectory, `${randomUUID()}.json`),\n      record: { version: 1, owner, child },\n    };\n    registration = yield* Effect.gen(function* () {\n      const contents = yield* encodeProcessRecord(nextRegistration.record);\n      yield* Effect.sync(() => {\n        mkdirSync(input.registryDirectory, { recursive: true });\n        const temporaryPath = `${nextRegistration.filePath}.${randomUUID()}.tmp`;\n        try {\n          writeFileSync(temporaryPath, `${contents}\\n`, \"utf8\");\n          renameSync(temporaryPath, nextRegistration.filePath);\n        } finally {\n          try {\n            unlinkSync(temporaryPath);\n          } catch {\n            // A successful rename removes the temporary path.\n          }\n        }\n      });\n      return nextRegistration;\n    }).pipe(\n      Effect.catchCause((cause) =>\n        Effect.logWarning(\"Unable to persist managed child-process ownership\", {\n          registryDirectory: input.registryDirectory,\n          cause,\n        }).pipe(Effect.as(undefined)),\n      ),\n    );\n  },\n);\n\nfunction waitForProcessLifetimeToEnd(input: {\n  readonly identity: ManagedChildProcessIdentity;\n  readonly processControl: ManagedChildProcessControl;\n  readonly attempts?: number;\n}): Effect.Effect<boolean> {\n  return Effect.gen(function* () {\n    const actual = safeReadIdentity(input.processControl, input.identity.pid);\n    if (actual === undefined) return false;\n    if (!sameProcess(input.identity, actual)) {\n      return true;\n    }\n    const attempts = input.attempts ?? PROCESS_TERMINATE_ATTEMPTS;\n    if (attempts <= 0) return false;\n    yield* Effect.sleep(PROCESS_TERMINATE_RETRY_DELAY);\n    return yield* waitForProcessLifetimeToEnd({ ...input, attempts: attempts - 1 });\n  });\n}\n\nfunction signalProcess(\n  processControl: ManagedChildProcessControl,\n  identity: ManagedChildProcessIdentity,\n  signal: \"SIGTERM\" | \"SIGKILL\",\n): boolean {\n  if (!sameProcess(identity, safeReadIdentity(processControl, identity.pid))) return false;\n  try {\n    return processControl.signal(identity.pid, signal);\n  } catch {\n    return false;\n  }\n}\n\nconst reapProcessRecord = Effect.fn(\"managedChildProcess.reapRecord\")(function* (input: {\n  readonly filePath: string;\n  readonly processControl: ManagedChildProcessControl;\n}) {\n  const raw = yield* Effect.sync(() => {\n    try {\n      return readFileSync(input.filePath, \"utf8\");\n    } catch {\n      return \"\";\n    }\n  });\n  const record = parseProcessRecord(raw);\n  if (!record) {\n    yield* Effect.sync(() => {\n      try {\n        unlinkSync(input.filePath);\n      } catch {\n        // Best-effort cleanup of malformed or concurrently removed records.\n      }\n    });\n    return;\n  }\n\n  const owner = safeReadIdentity(input.processControl, record.owner.pid);\n  const child = safeReadIdentity(input.processControl, record.child.pid);\n  if (owner === undefined || child === undefined) return;\n  if (sameProcess(record.owner, owner) && sameProcess(record.child, child)) return;\n  if (!sameProcess(record.child, child)) {\n    yield* Effect.sync(() => {\n      try {\n        unlinkSync(input.filePath);\n      } catch {\n        // Best-effort cleanup of a record whose PID was reused.\n      }\n    });\n    return;\n  }\n\n  signalProcess(input.processControl, record.child, \"SIGTERM\");\n  const terminated = yield* waitForProcessLifetimeToEnd({\n    identity: record.child,\n    processControl: input.processControl,\n  });\n  if (!terminated) {\n    signalProcess(input.processControl, record.child, \"SIGKILL\");\n    yield* waitForProcessLifetimeToEnd({\n      identity: record.child,\n      processControl: input.processControl,\n    });\n  }\n  const finalChild = safeReadIdentity(input.processControl, record.child.pid);\n  if (finalChild !== undefined && !sameProcess(record.child, finalChild)) {\n    yield* Effect.sync(() => {\n      try {\n        unlinkSync(input.filePath);\n      } catch {\n        // A concurrent reconciliation may already have removed it.\n      }\n    });\n  }\n});\n\nexport const reapManagedChildProcesses = Effect.fn(\"managedChildProcess.reap\")(function* (input: {\n  readonly registryDirectory: string;\n  readonly processControl?: ManagedChildProcessControl;\n}) {\n  const entries = yield* Effect.sync(() => {\n    try {\n      return readdirSync(input.registryDirectory);\n    } catch {\n      return [] as string[];\n    }\n  });\n  const processControl = input.processControl ?? defaultProcessControl;\n  yield* Effect.forEach(\n    entries,\n    (entry) =>\n      reapProcessRecord({\n        filePath: join(input.registryDirectory, entry),\n        processControl,\n      }).pipe(Effect.catchCause(() => Effect.void)),\n    { concurrency: PROCESS_REAP_CONCURRENCY, discard: true },\n  );\n});\n","import * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport type { ChildProcessSpawner } from \"effect/unstable/process\";\n\nexport interface TerminateChildProcessOptions {\n  readonly gracefulTimeout?: Duration.Input;\n  readonly forceTimeout?: Duration.Input;\n}\n\nconst DEFAULT_GRACEFUL_TIMEOUT = \"2 seconds\";\nconst DEFAULT_FORCE_TIMEOUT = \"2 seconds\";\n\nconst signalAndWait = (\n  child: ChildProcessSpawner.ChildProcessHandle,\n  signal: \"SIGTERM\" | \"SIGKILL\",\n  timeout: Duration.Input,\n) =>\n  child.kill({ killSignal: signal }).pipe(\n    Effect.interruptible,\n    Effect.exit,\n    Effect.timeoutOption(timeout),\n    Effect.map(\n      Option.match({\n        onNone: () => false,\n        onSome: Exit.isSuccess,\n      }),\n    ),\n  );\n\n/**\n * Terminates a scoped child without trusting the platform spawner's finalizer\n * to bound its wait for the process exit event.\n */\nexport const terminateChildProcess = Effect.fn(\"childProcess.terminate\")(function* (\n  child: ChildProcessSpawner.ChildProcessHandle,\n  options?: TerminateChildProcessOptions,\n) {\n  const running = yield* child.isRunning.pipe(Effect.catchCause(() => Effect.succeed(true)));\n  if (!running) return;\n\n  const terminated = yield* signalAndWait(\n    child,\n    \"SIGTERM\",\n    options?.gracefulTimeout ?? DEFAULT_GRACEFUL_TIMEOUT,\n  );\n  if (terminated) return;\n\n  const killed = yield* signalAndWait(\n    child,\n    \"SIGKILL\",\n    options?.forceTimeout ?? DEFAULT_FORCE_TIMEOUT,\n  );\n  if (!killed) {\n    // The platform spawner's later scope finalizer skips unreferenced handles.\n    yield* child.unref.pipe(Effect.ignore);\n  }\n});\n","import * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Types from \"effect/Types\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as CodexClient from \"effect-codex-app-server/client\";\nimport * as CodexSchema from \"effect-codex-app-server/schema\";\nimport * as CodexErrors from \"effect-codex-app-server/errors\";\n\nimport type {\n  CodexSettings,\n  ServerProvider,\n  ServerProviderState,\n  ModelCapabilities,\n  ProviderOptionDescriptor,\n  ServerProviderModel,\n  ServerProviderSkill,\n} from \"@salchi/contracts\";\nimport { PREFERRED_DEFAULT_CODEX_MODELS, ServerSettingsError } from \"@salchi/contracts\";\n\nimport { createModelCapabilities } from \"@salchi/shared/model\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\nimport {\n  AUTH_PROBE_TIMEOUT_MS,\n  buildServerProvider,\n  type ServerProviderDraft,\n} from \"../providerSnapshot.ts\";\nimport { expandHomePath } from \"../../pathExpansion.ts\";\nimport packageJson from \"../../../package.json\" with { type: \"json\" };\nconst isCodexAppServerSpawnError = Schema.is(CodexErrors.CodexAppServerSpawnError);\n\nconst CODEX_PRESENTATION = {\n  displayName: \"Codex\",\n  showInteractionModeToggle: true,\n} as const;\n\nexport interface CodexAppServerProviderSnapshot {\n  readonly account: CodexSchema.V2GetAccountResponse;\n  readonly version: string | undefined;\n  readonly models: ReadonlyArray<ServerProviderModel>;\n  readonly skills: ReadonlyArray<ServerProviderSkill>;\n}\n\ninterface CodexAutoReviewSupport {\n  readonly currentValue: boolean;\n}\n\nconst REASONING_EFFORT_LABELS: Readonly<Record<string, string>> = {\n  none: \"None\",\n  minimal: \"Minimal\",\n  low: \"Low\",\n  medium: \"Medium\",\n  high: \"High\",\n  xhigh: \"Extra High\",\n  max: \"Max\",\n  ultra: \"Ultra\",\n};\n\nconst DEFAULT_SERVICE_TIER_ID = \"default\";\nconst CODEX_APP_SERVER_PROBE_FORCE_KILL_AFTER = \"2 seconds\" as const;\n\nfunction reasoningEffortLabel(reasoningEffort: string): string {\n  return REASONING_EFFORT_LABELS[reasoningEffort] ?? reasoningEffort;\n}\n\nfunction codexAccountAuthLabel(account: CodexSchema.V2GetAccountResponse[\"account\"]) {\n  if (!account) return undefined;\n  if (account.type === \"apiKey\") return \"OpenAI API Key\";\n  if (account.type === \"amazonBedrock\") return \"Amazon Bedrock\";\n  if (account.type !== \"chatgpt\") return undefined;\n\n  switch (account.planType) {\n    case \"free\":\n      return \"ChatGPT Free Subscription\";\n    case \"go\":\n      return \"ChatGPT Go Subscription\";\n    case \"plus\":\n      return \"ChatGPT Plus Subscription\";\n    case \"pro\":\n      return \"ChatGPT Pro 20x Subscription\";\n    case \"prolite\":\n      return \"ChatGPT Pro 5x Subscription\";\n    case \"team\":\n      return \"ChatGPT Team Subscription\";\n    case \"self_serve_business_usage_based\":\n    case \"business\":\n      return \"ChatGPT Business Subscription\";\n    case \"enterprise_cbp_usage_based\":\n    case \"enterprise\":\n      return \"ChatGPT Enterprise Subscription\";\n    case \"edu\":\n      return \"ChatGPT Edu Subscription\";\n    case \"unknown\":\n      return \"ChatGPT Subscription\";\n    default:\n      account.planType satisfies never;\n      return undefined;\n  }\n}\n\nfunction codexAccountEmail(account: CodexSchema.V2GetAccountResponse[\"account\"]) {\n  if (!account || account.type !== \"chatgpt\") return undefined;\n  return account.email;\n}\n\nexport function mapCodexModelCapabilities(\n  model: CodexSchema.V2ModelListResponse__Model,\n): ModelCapabilities {\n  const reasoningOptions = model.supportedReasoningEfforts.map(({ reasoningEffort }) =>\n    reasoningEffort === model.defaultReasoningEffort\n      ? {\n          id: reasoningEffort,\n          label: reasoningEffortLabel(reasoningEffort),\n          isDefault: true,\n        }\n      : {\n          id: reasoningEffort,\n          label: reasoningEffortLabel(reasoningEffort),\n        },\n  );\n  const defaultReasoning = reasoningOptions.find((option) => option.isDefault)?.id;\n  const serviceTiers =\n    model.serviceTiers && model.serviceTiers.length > 0\n      ? model.serviceTiers\n      : (model.additionalSpeedTiers ?? []).map((id) => ({\n          id,\n          name: id === \"fast\" ? \"Fast\" : id,\n          description: \"\",\n        }));\n  const catalogDefaultServiceTier = serviceTiers.some(\n    (tier) => tier.id === model.defaultServiceTier,\n  )\n    ? model.defaultServiceTier\n    : null;\n  const defaultServiceTier = catalogDefaultServiceTier ?? DEFAULT_SERVICE_TIER_ID;\n  const optionDescriptors: ProviderOptionDescriptor[] = [];\n\n  if (reasoningOptions.length > 0) {\n    optionDescriptors.push({\n      id: \"reasoningEffort\",\n      label: \"Reasoning\",\n      type: \"select\",\n      options: reasoningOptions,\n      ...(defaultReasoning ? { currentValue: defaultReasoning } : {}),\n    });\n  }\n  if (serviceTiers.length > 0) {\n    optionDescriptors.push({\n      id: \"serviceTier\",\n      label: \"Service Tier\",\n      type: \"select\",\n      options: [\n        {\n          id: DEFAULT_SERVICE_TIER_ID,\n          label: \"Standard\",\n          ...(defaultServiceTier === DEFAULT_SERVICE_TIER_ID ? { isDefault: true } : {}),\n        },\n        ...serviceTiers.map((tier) => ({\n          id: tier.id,\n          label: tier.name,\n          ...(tier.description ? { description: tier.description } : {}),\n          ...(defaultServiceTier === tier.id ? { isDefault: true } : {}),\n        })),\n      ],\n      currentValue: defaultServiceTier,\n    });\n  }\n\n  return createModelCapabilities({\n    optionDescriptors,\n  });\n}\n\nfunction isEnabledCodexFeature(\n  feature: CodexSchema.V2ExperimentalFeatureListResponse__ExperimentalFeature | undefined,\n): boolean {\n  return (\n    feature !== undefined &&\n    feature.enabled &&\n    feature.stage !== \"removed\" &&\n    feature.stage !== \"deprecated\"\n  );\n}\n\nfunction isAutoReviewApprovalsReviewer(\n  value: CodexSchema.V2ConfigReadResponse__ApprovalsReviewer | null | undefined,\n): boolean {\n  return value === \"auto_review\" || value === \"guardian_subagent\";\n}\n\nfunction applyCodexAutoReviewSupport(\n  models: ReadonlyArray<ServerProviderModel>,\n  support: CodexAutoReviewSupport | null,\n): ReadonlyArray<ServerProviderModel> {\n  if (!support) {\n    return models;\n  }\n\n  return models.map((model) => {\n    const descriptors = model.capabilities?.optionDescriptors ?? [];\n    const withoutExistingAutoReview = descriptors.filter(\n      (descriptor) => descriptor.id !== \"autoReview\",\n    );\n    return {\n      ...model,\n      capabilities: createModelCapabilities({\n        optionDescriptors: [\n          ...withoutExistingAutoReview,\n          {\n            id: \"autoReview\",\n            label: \"Auto Review\",\n            description: \"Route approval requests to Codex's automatic approval reviewer.\",\n            type: \"boolean\" as const,\n            currentValue: support.currentValue,\n          },\n        ],\n      }),\n    };\n  });\n}\n\nconst toDisplayName = (model: CodexSchema.V2ModelListResponse__Model): string => {\n  // Capitalize 'gpt' to 'GPT-' and capitalize any letter following a dash\n  return model.displayName\n    .replace(/^gpt/i, \"GPT\") // Handle start with 'gpt' or 'GPT'\n    .replace(/-([a-z])/g, (_, c) => \"-\" + c.toUpperCase());\n};\n\nfunction parseCodexModelListResponse(\n  response: CodexSchema.V2ModelListResponse,\n): ReadonlyArray<ServerProviderModel> {\n  return response.data.map((model) => ({\n    slug: model.model,\n    name: toDisplayName(model),\n    isCustom: false,\n    ...(model.isDefault ? { isDefault: true } : {}),\n    capabilities: mapCodexModelCapabilities(model),\n  }));\n}\n\n/**\n * Prefer Salchi's current Codex default ranking when a preferred built-in\n * model is available. Otherwise preserve Codex's live `isDefault` choice.\n */\nexport function applyPreferredCodexDefaultModel(\n  models: ReadonlyArray<ServerProviderModel>,\n): ReadonlyArray<ServerProviderModel> {\n  const preferredSlug = PREFERRED_DEFAULT_CODEX_MODELS.find((slug) =>\n    models.some((model) => model.slug === slug && !model.isCustom),\n  );\n  if (!preferredSlug) {\n    return models;\n  }\n  return models.map((model) => {\n    if (model.slug === preferredSlug) {\n      return model.isDefault ? model : { ...model, isDefault: true };\n    }\n    if (!model.isDefault) {\n      return model;\n    }\n    const { isDefault: _isDefault, ...rest } = model;\n    return rest;\n  });\n}\n\nfunction appendCustomCodexModels(\n  models: ReadonlyArray<ServerProviderModel>,\n  customModels: ReadonlyArray<string>,\n): ReadonlyArray<ServerProviderModel> {\n  if (customModels.length === 0) {\n    return models;\n  }\n\n  const seen = new Set(models.map((model) => model.slug));\n  const fallbackCapabilities = models.find((model) => model.capabilities)?.capabilities ?? null;\n  const customEntries: ServerProviderModel[] = [];\n  for (const rawModel of customModels) {\n    const slug = rawModel.trim();\n    if (!slug || seen.has(slug)) {\n      continue;\n    }\n    seen.add(slug);\n    customEntries.push({\n      slug,\n      name: slug,\n      isCustom: true,\n      capabilities: fallbackCapabilities,\n    });\n  }\n  return customEntries.length === 0 ? models : [...models, ...customEntries];\n}\n\nconst requestCodexAutoReviewSupport = Effect.fn(\"requestCodexAutoReviewSupport\")(function* (\n  client: CodexClient.CodexAppServerClientShape,\n  cwd: string,\n) {\n  const features: CodexSchema.V2ExperimentalFeatureListResponse__ExperimentalFeature[] = [];\n  let cursor: string | null | undefined = undefined;\n\n  do {\n    const response: CodexSchema.V2ExperimentalFeatureListResponse = yield* client.request(\n      \"experimentalFeature/list\",\n      cursor ? { cursor } : {},\n    );\n    features.push(...response.data);\n    cursor = response.nextCursor;\n  } while (cursor);\n\n  if (!isEnabledCodexFeature(features.find((feature) => feature.name === \"guardian_approval\"))) {\n    return null;\n  }\n\n  const config: CodexSchema.V2ConfigReadResponse = yield* client.request(\"config/read\", {\n    cwd,\n    includeLayers: false,\n  });\n\n  return {\n    currentValue: isAutoReviewApprovalsReviewer(config.config.approvals_reviewer),\n  } satisfies CodexAutoReviewSupport;\n});\n\nfunction parseCodexSkillsListResponse(\n  response: CodexSchema.V2SkillsListResponse,\n  cwd: string,\n): ReadonlyArray<ServerProviderSkill> {\n  const matchingEntry = response.data.find((entry) => entry.cwd === cwd);\n  const skills = matchingEntry\n    ? matchingEntry.skills\n    : response.data.flatMap((entry) => entry.skills);\n\n  return skills.map((skill) => {\n    const shortDescription =\n      skill.shortDescription ?? skill.interface?.shortDescription ?? undefined;\n\n    const parsedSkill: Types.Mutable<ServerProviderSkill> = {\n      name: skill.name,\n      path: skill.path,\n      enabled: skill.enabled,\n    };\n\n    if (skill.description) {\n      parsedSkill.description = skill.description;\n    }\n    if (skill.scope) {\n      parsedSkill.scope = skill.scope;\n    }\n    if (skill.interface?.displayName) {\n      parsedSkill.displayName = skill.interface.displayName;\n    }\n    if (shortDescription) {\n      parsedSkill.shortDescription = shortDescription;\n    }\n\n    return parsedSkill;\n  });\n}\n\nconst requestAllCodexModels = Effect.fn(\"requestAllCodexModels\")(function* (\n  client: CodexClient.CodexAppServerClientShape,\n) {\n  const models: ServerProviderModel[] = [];\n  let cursor: string | null | undefined = undefined;\n\n  do {\n    const response: CodexSchema.V2ModelListResponse = yield* client.request(\n      \"model/list\",\n      cursor ? { cursor } : {},\n    );\n    models.push(...parseCodexModelListResponse(response));\n    cursor = response.nextCursor;\n  } while (cursor);\n\n  return models;\n});\n\nexport function buildCodexInitializeParams(): CodexSchema.V1InitializeParams {\n  return {\n    clientInfo: {\n      name: \"salchi_desktop\",\n      title: \"Salchi Desktop\",\n      version: packageJson.version,\n    },\n    capabilities: {\n      experimentalApi: true,\n    },\n  };\n}\n\nconst probeCodexAppServerProvider = Effect.fn(\"probeCodexAppServerProvider\")(function* (input: {\n  readonly binaryPath: string;\n  readonly homePath?: string;\n  readonly cwd: string;\n  readonly customModels?: ReadonlyArray<string>;\n  readonly environment?: NodeJS.ProcessEnv;\n}) {\n  // `~` is not shell-expanded when env vars are set via `child_process.spawn`,\n  // so `CODEX_HOME=~/.codex_work` would reach codex verbatim and trip\n  // \"CODEX_HOME points to '~/.codex_work', but that path does not exist\".\n  // Expand here for parity with `CodexTextGeneration`/`CodexSessionRuntime`.\n  const resolvedHomePath = input.homePath ? expandHomePath(input.homePath) : undefined;\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const environment = {\n    ...(input.environment ?? process.env),\n    ...(resolvedHomePath ? { CODEX_HOME: resolvedHomePath } : {}),\n  };\n  const spawnCommand = resolveSpawnCommand(input.binaryPath, [\"app-server\"], {\n    env: environment,\n    extendEnv: true,\n  });\n  const child = yield* spawner\n    .spawn(\n      ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n        cwd: input.cwd,\n        env: environment,\n        forceKillAfter: CODEX_APP_SERVER_PROBE_FORCE_KILL_AFTER,\n        shell: spawnCommand.shell,\n      }),\n    )\n    .pipe(\n      Effect.mapError(\n        (cause) =>\n          new CodexErrors.CodexAppServerSpawnError({\n            command: `${input.binaryPath} app-server`,\n            cause,\n          }),\n      ),\n    );\n  const clientContext = yield* Layer.build(CodexClient.layerChildProcess(child));\n  const client = yield* Effect.service(CodexClient.CodexAppServerClient).pipe(\n    Effect.provide(clientContext),\n  );\n\n  const initialize = yield* client.request(\"initialize\", {\n    clientInfo: {\n      name: \"salchi_desktop\",\n      title: \"Salchi Desktop\",\n      version: \"0.1.0\",\n    },\n    capabilities: {\n      experimentalApi: true,\n    },\n  });\n  yield* client.notify(\"initialized\", undefined);\n\n  // Extract the version string after the first '/' in userAgent, up to the next space or the end\n  const versionMatch = initialize.userAgent.match(/\\/([^\\s]+)/);\n  const version = versionMatch ? versionMatch[1] : undefined;\n\n  const accountResponse = yield* client.request(\"account/read\", {});\n  if (!accountResponse.account && accountResponse.requiresOpenaiAuth) {\n    return {\n      account: accountResponse,\n      version,\n      models: appendCustomCodexModels([], input.customModels ?? []),\n      skills: [],\n    } satisfies CodexAppServerProviderSnapshot;\n  }\n\n  const [skillsResponse, models] = yield* Effect.all(\n    [\n      client.request(\"skills/list\", {\n        cwds: [input.cwd],\n      }),\n      requestAllCodexModels(client),\n    ],\n    { concurrency: \"unbounded\" },\n  );\n  const autoReviewSupport = yield* requestCodexAutoReviewSupport(client, input.cwd).pipe(\n    Effect.catch((error: CodexErrors.CodexAppServerError) =>\n      Effect.logDebug(\"Codex auto review support probe failed\", {\n        cause: error.message,\n      }).pipe(Effect.as(null)),\n    ),\n  );\n\n  return {\n    account: accountResponse,\n    version,\n    models: applyCodexAutoReviewSupport(\n      applyPreferredCodexDefaultModel(appendCustomCodexModels(models, input.customModels ?? [])),\n      autoReviewSupport,\n    ),\n    skills: parseCodexSkillsListResponse(skillsResponse, input.cwd),\n  } satisfies CodexAppServerProviderSnapshot;\n});\n\nconst emptyCodexModelsFromSettings = (codexSettings: CodexSettings): ServerProvider[\"models\"] => {\n  const models = new Set<string>();\n  for (const model of codexSettings.customModels) {\n    const trimmed = model.trim();\n    if (trimmed.length > 0) {\n      models.add(trimmed);\n    }\n  }\n  return Array.from(models, (model) => ({\n    slug: model,\n    name: model,\n    isCustom: true,\n    capabilities: null,\n  }));\n};\n\nconst makePendingCodexProvider = (\n  codexSettings: CodexSettings,\n): Effect.Effect<ServerProviderDraft> =>\n  Effect.gen(function* () {\n    const checkedAt = yield* Effect.map(DateTime.now, DateTime.formatIso);\n    const models = emptyCodexModelsFromSettings(codexSettings);\n\n    if (!codexSettings.enabled) {\n      return buildServerProvider({\n        presentation: CODEX_PRESENTATION,\n        enabled: false,\n        checkedAt,\n        models,\n        skills: [],\n        probe: {\n          installed: false,\n          version: null,\n          status: \"warning\",\n          auth: { status: \"unknown\" },\n          message: \"Codex is disabled in Salchi settings.\",\n        },\n      });\n    }\n\n    return buildServerProvider({\n      presentation: CODEX_PRESENTATION,\n      enabled: true,\n      checkedAt,\n      models,\n      skills: [],\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Codex provider status has not been checked in this session yet.\",\n      },\n    });\n  });\n\nfunction accountProbeStatus(account: CodexAppServerProviderSnapshot[\"account\"]): {\n  readonly status: Exclude<ServerProviderState, \"disabled\">;\n  readonly auth: ServerProvider[\"auth\"];\n  readonly message?: string;\n} {\n  const authLabel = codexAccountAuthLabel(account.account);\n  const authEmail = codexAccountEmail(account.account);\n  const auth = {\n    status: account.account ? (\"authenticated\" as const) : (\"unknown\" as const),\n    ...(account.account?.type ? { type: account.account?.type } : {}),\n    ...(authLabel ? { label: authLabel } : {}),\n    ...(authEmail ? { email: authEmail } : {}),\n  } satisfies ServerProvider[\"auth\"];\n\n  if (account.account) {\n    return { status: \"ready\", auth };\n  }\n\n  if (account.requiresOpenaiAuth) {\n    return {\n      status: \"error\",\n      auth: { status: \"unauthenticated\" },\n      message: \"Codex CLI is not authenticated. Run `codex login` and try again.\",\n    };\n  }\n\n  return { status: \"ready\", auth };\n}\n\nexport const checkCodexProviderStatus = Effect.fn(\"checkCodexProviderStatus\")(function* (\n  codexSettings: CodexSettings,\n  probe: (input: {\n    readonly binaryPath: string;\n    readonly homePath?: string;\n    readonly cwd: string;\n    readonly customModels: ReadonlyArray<string>;\n    readonly environment?: NodeJS.ProcessEnv;\n  }) => Effect.Effect<\n    CodexAppServerProviderSnapshot,\n    CodexErrors.CodexAppServerError,\n    ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n  > = probeCodexAppServerProvider,\n  environment: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<\n  ServerProviderDraft,\n  ServerSettingsError,\n  ChildProcessSpawner.ChildProcessSpawner\n> {\n  const checkedAt = DateTime.formatIso(yield* DateTime.now);\n  const emptyModels = emptyCodexModelsFromSettings(codexSettings);\n\n  if (!codexSettings.enabled) {\n    return buildServerProvider({\n      presentation: CODEX_PRESENTATION,\n      enabled: false,\n      checkedAt,\n      models: emptyModels,\n      skills: [],\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Codex is disabled in Salchi settings.\",\n      },\n    });\n  }\n\n  const probeResult = yield* probe({\n    binaryPath: codexSettings.binaryPath,\n    homePath: codexSettings.homePath,\n    cwd: process.cwd(),\n    customModels: codexSettings.customModels,\n    environment,\n  }).pipe(\n    Effect.scoped,\n    Effect.timeoutOption(Duration.millis(AUTH_PROBE_TIMEOUT_MS)),\n    Effect.result,\n  );\n\n  if (Result.isFailure(probeResult)) {\n    const error = probeResult.failure;\n    const installed = !isCodexAppServerSpawnError(error);\n    return buildServerProvider({\n      presentation: CODEX_PRESENTATION,\n      enabled: codexSettings.enabled,\n      checkedAt,\n      models: emptyModels,\n      skills: [],\n      probe: {\n        installed,\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: installed\n          ? `Codex app-server provider probe failed: ${error.message}.`\n          : \"Codex CLI (`codex`) is not installed or not on PATH.\",\n      },\n    });\n  }\n\n  if (Option.isNone(probeResult.success)) {\n    return buildServerProvider({\n      presentation: CODEX_PRESENTATION,\n      enabled: codexSettings.enabled,\n      checkedAt,\n      models: emptyModels,\n      skills: [],\n      probe: {\n        installed: true,\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: \"Timed out while checking Codex app-server provider status.\",\n      },\n    });\n  }\n\n  const snapshot = probeResult.success.value;\n  const accountStatus = accountProbeStatus(snapshot.account);\n\n  return buildServerProvider({\n    presentation: CODEX_PRESENTATION,\n    enabled: codexSettings.enabled,\n    checkedAt,\n    models: snapshot.models,\n    skills: snapshot.skills,\n    probe: {\n      installed: true,\n      version: snapshot.version ?? null,\n      status: accountStatus.status,\n      auth: accountStatus.auth,\n      ...(accountStatus.message ? { message: accountStatus.message } : {}),\n    },\n  });\n});\n\n// NOTE: the singleton `CodexProviderLive` Layer has been removed as part of\n// the per-instance-driver refactor. `CodexDriver.create()` builds a managed\n// snapshot per instance (each with its own `CodexSettings`) and hands the\n// resulting `ServerProviderShape` back as `ProviderInstance.snapshot`.\n//\n// The `makePendingCodexProvider` and `checkCodexProviderStatus` helpers are\n// re-exported for use by `CodexDriver`.\nexport { makePendingCodexProvider };\n","import { INDEPENDENT_THREAD_TOOL_CODEX_INSTRUCTIONS } from \"./IndependentThreadTool.ts\";\n\nexport const CODEX_PLAN_MODE_DEVELOPER_INSTRUCTIONS = `<collaboration_mode># Plan Mode (Conversational)\n\nYou work in 3 phases, and you should *chat your way* to a great plan before finalizing it. A great plan is very detailed-intent- and implementation-wise-so that it can be handed to another engineer or agent to be implemented right away. It must be **decision complete**, where the implementer does not need to make any decisions.\n\n## Mode rules (strict)\n\nYou are in **Plan Mode** until a developer message explicitly ends it.\n\nPlan Mode is not changed by user intent, tone, or imperative language. If a user asks for execution while still in Plan Mode, treat it as a request to **plan the execution**, not perform it.\n\n## Plan Mode vs update_plan tool\n\nPlan Mode is a collaboration mode that can involve requesting user input and eventually issuing a \\`<proposed_plan>\\` block.\n\nSeparately, \\`update_plan\\` is a checklist/progress/TODOs tool; it does not enter or exit Plan Mode. Do not confuse it with Plan mode or try to use it while in Plan mode. If you try to use \\`update_plan\\` in Plan mode, it will return an error.\n\n## Execution vs. mutation in Plan Mode\n\nYou may explore and execute **non-mutating** actions that improve the plan. You must not perform **mutating** actions.\n\n### Allowed (non-mutating, plan-improving)\n\nActions that gather truth, reduce ambiguity, or validate feasibility without changing repo-tracked state. Examples:\n\n* Reading or searching files, configs, schemas, types, manifests, and docs\n* Static analysis, inspection, and repo exploration\n* Dry-run style commands when they do not edit repo-tracked files\n* Tests, builds, or checks that may write to caches or build artifacts (for example, \\`target/\\`, \\`.cache/\\`, or snapshots) so long as they do not edit repo-tracked files\n\n### Not allowed (mutating, plan-executing)\n\nActions that implement the plan or change repo-tracked state. Examples:\n\n* Editing or writing files\n* Running formatters or linters that rewrite files\n* Applying patches, migrations, or codegen that updates repo-tracked files\n* Side-effectful commands whose purpose is to carry out the plan rather than refine it\n\nWhen in doubt: if the action would reasonably be described as \"doing the work\" rather than \"planning the work,\" do not do it.\n\n## PHASE 1 - Ground in the environment (explore first, ask second)\n\nBegin by grounding yourself in the actual environment. Eliminate unknowns in the prompt by discovering facts, not by asking the user. Resolve all questions that can be answered through exploration or inspection. Identify missing or ambiguous details only if they cannot be derived from the environment. Silent exploration between turns is allowed and encouraged.\n\nBefore asking the user any question, perform at least one targeted non-mutating exploration pass (for example: search relevant files, inspect likely entrypoints/configs, confirm current implementation shape), unless no local environment/repo is available.\n\nException: you may ask clarifying questions about the user's prompt before exploring, ONLY if there are obvious ambiguities or contradictions in the prompt itself. However, if ambiguity might be resolved by exploring, always prefer exploring first.\n\nDo not ask questions that can be answered from the repo or system (for example, \"where is this struct?\" or \"which UI component should we use?\" when exploration can make it clear). Only ask once you have exhausted reasonable non-mutating exploration.\n\n## PHASE 2 - Intent chat (what they actually want)\n\n* Keep asking until you can clearly state: goal + success criteria, audience, in/out of scope, constraints, current state, and the key preferences/tradeoffs.\n* Bias toward questions over guessing: if any high-impact ambiguity remains, do NOT plan yet-ask.\n\n## PHASE 3 - Implementation chat (what/how we'll build)\n\n* Once intent is stable, keep asking until the spec is decision complete: approach, interfaces (APIs/schemas/I/O), data flow, edge cases/failure modes, testing + acceptance criteria, rollout/monitoring, and any migrations/compat constraints.\n\n## Asking questions\n\nCritical rules:\n\n* Strongly prefer using the \\`request_user_input\\` tool to ask any questions.\n* Offer only meaningful multiple-choice options; don't include filler choices that are obviously wrong or irrelevant.\n* In rare cases where an unavoidable, important question can't be expressed with reasonable multiple-choice options (due to extreme ambiguity), you may ask it directly without the tool.\n\nYou SHOULD ask many questions, but each question must:\n\n* materially change the spec/plan, OR\n* confirm/lock an assumption, OR\n* choose between meaningful tradeoffs.\n* not be answerable by non-mutating commands.\n\nUse the \\`request_user_input\\` tool only for decisions that materially change the plan, for confirming important assumptions, or for information that cannot be discovered via non-mutating exploration.\n\n## Independent thread creation\n\n${INDEPENDENT_THREAD_TOOL_CODEX_INSTRUCTIONS}\n\n## Two kinds of unknowns (treat differently)\n\n1. **Discoverable facts** (repo/system truth): explore first.\n\n   * Before asking, run targeted searches and check likely sources of truth (configs/manifests/entrypoints/schemas/types/constants).\n   * Ask only if: multiple plausible candidates; nothing found but you need a missing identifier/context; or ambiguity is actually product intent.\n   * If asking, present concrete candidates (paths/service names) + recommend one.\n   * Never ask questions you can answer from your environment (e.g., \"where is this struct\").\n\n2. **Preferences/tradeoffs** (not discoverable): ask early.\n\n   * These are intent or implementation preferences that cannot be derived from exploration.\n   * Provide 2-4 mutually exclusive options + a recommended default.\n   * If unanswered, proceed with the recommended option and record it as an assumption in the final plan.\n\n## Finalization rule\n\nOnly output the final plan when it is decision complete and leaves no decisions to the implementer.\n\nWhen you present the official plan, wrap it in a \\`<proposed_plan>\\` block so the client can render it specially:\n\n1) The opening tag must be on its own line.\n2) Start the plan content on the next line (no text on the same line as the tag).\n3) The closing tag must be on its own line.\n4) Use Markdown inside the block.\n5) Keep the tags exactly as \\`<proposed_plan>\\` and \\`</proposed_plan>\\` (do not translate or rename them), even if the plan content is in another language.\n\nExample:\n\n<proposed_plan>\nplan content\n</proposed_plan>\n\nplan content should be human and agent digestible. The final plan must be plan-only and include:\n\n* A clear title\n* A brief summary section\n* Important changes or additions to public APIs/interfaces/types\n* Test cases and scenarios\n* Explicit assumptions and defaults chosen where needed\n\nDo not ask \"should I proceed?\" in the final output. The user can easily switch out of Plan mode and request implementation if you have included a \\`<proposed_plan>\\` block in your response. Alternatively, they can decide to stay in Plan mode and continue refining the plan.\n\nOnly produce at most one \\`<proposed_plan>\\` block per turn, and only when you are presenting a complete spec.\n</collaboration_mode>`;\n\nexport const CODEX_DEFAULT_MODE_DEVELOPER_INSTRUCTIONS = `<collaboration_mode># Collaboration Mode: Default\n\nYou are now in Default mode. Any previous instructions for other modes (e.g. Plan mode) are no longer active.\n\nYour active mode changes only when new developer instructions with a different \\`<collaboration_mode>...</collaboration_mode>\\` change it; user requests or tool descriptions do not change mode by themselves. Known mode names are Default and Plan.\n\n## request_user_input availability\n\nThe \\`request_user_input\\` tool is unavailable in Default mode. If you call it while in Default mode, it will return an error.\n\nIn Default mode, strongly prefer making reasonable assumptions and executing the user's request rather than stopping to ask questions. If you absolutely must ask a question because the answer cannot be discovered from local context and a reasonable assumption would be risky, ask the user directly with a concise plain-text question. Never write a multiple choice question as a textual assistant message.\n\n## Independent thread creation\n\n${INDEPENDENT_THREAD_TOOL_CODEX_INSTRUCTIONS}\n</collaboration_mode>`;\n","import { createHash } from \"node:crypto\";\n\nimport { ThreadId, type ProviderInstanceId } from \"@salchi/contracts\";\n\nexport interface CodexThreadSpawnMetadata {\n  readonly providerParentThreadId: string;\n  readonly subagentKind: string;\n  readonly subagentNickname?: string;\n  readonly subagentRole?: string;\n  readonly subagentPath?: string;\n  readonly hiddenFromThreadList: boolean;\n}\n\nexport interface CodexSubagentMetadata {\n  readonly providerParentThreadId?: string;\n  readonly subagentKind: string;\n  readonly subagentNickname?: string;\n  readonly subagentRole?: string;\n  readonly subagentPath?: string;\n  readonly hiddenFromThreadList: boolean;\n}\n\nexport function codexChildThreadId(\n  providerInstanceId: ProviderInstanceId,\n  providerThreadId: string,\n): ThreadId {\n  const digest = createHash(\"sha256\")\n    .update(`${providerInstanceId}\\0${providerThreadId}`)\n    .digest(\"hex\")\n    .slice(0, 32);\n  return ThreadId.make(`codex-child-${digest}`);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n  if (typeof value !== \"string\") return undefined;\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction readThreadRecord(value: unknown): Record<string, unknown> | null {\n  if (!isRecord(value)) return null;\n  const maybeThread = value.thread;\n  if (isRecord(maybeThread)) return maybeThread;\n  return value;\n}\n\nfunction parseJsonRecord(value: string): Record<string, unknown> | null {\n  try {\n    const parsed: unknown = JSON.parse(value);\n    return isRecord(parsed) ? parsed : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction readSubagentSource(thread: Record<string, unknown>): unknown {\n  const source = thread.source;\n  const sourceRecord = isRecord(source)\n    ? source\n    : typeof source === \"string\"\n      ? parseJsonRecord(source)\n      : null;\n  if (!sourceRecord) return null;\n  return sourceRecord.subAgent ?? sourceRecord.subagent ?? null;\n}\n\nexport function extractCodexThreadSpawnMetadata(value: unknown): CodexThreadSpawnMetadata | null {\n  const thread = readThreadRecord(value);\n  if (!thread) return null;\n\n  const source = readSubagentSource(thread);\n  const topLevelThreadSource =\n    readString(thread.threadSource) ?? readString(thread.thread_source) ?? undefined;\n  const topLevelSpawnRecord =\n    topLevelThreadSource === \"subagent\" &&\n    (readString(thread.parentThreadId) || readString(thread.parent_thread_id))\n      ? thread\n      : null;\n  const spawnRecord =\n    isRecord(source) && isRecord(source.thread_spawn) ? source.thread_spawn : topLevelSpawnRecord;\n  if (!spawnRecord) {\n    return null;\n  }\n\n  const providerParentThreadId =\n    readString(spawnRecord.parent_thread_id) ??\n    readString(spawnRecord.parentThreadId) ??\n    readString(thread.parentThreadId) ??\n    readString(thread.parent_thread_id);\n  if (!providerParentThreadId) {\n    return null;\n  }\n\n  const subagentNickname =\n    readString(spawnRecord.agent_nickname) ??\n    readString(spawnRecord.agentNickname) ??\n    readString(thread.agentNickname) ??\n    readString(thread.agent_nickname);\n  const subagentRole =\n    readString(spawnRecord.agent_role) ??\n    readString(spawnRecord.agentRole) ??\n    readString(thread.agentRole) ??\n    readString(thread.agent_role);\n  const subagentPath =\n    readString(spawnRecord.agent_path) ??\n    readString(spawnRecord.agentPath) ??\n    readString(thread.agentPath) ??\n    readString(thread.agent_path) ??\n    readString(thread.path);\n\n  return {\n    providerParentThreadId,\n    subagentKind: \"thread_spawn\",\n    ...(subagentNickname ? { subagentNickname } : {}),\n    ...(subagentRole ? { subagentRole } : {}),\n    ...(subagentPath ? { subagentPath } : {}),\n    hiddenFromThreadList: false,\n  };\n}\n\nexport function extractCodexSubagentMetadata(value: unknown): CodexSubagentMetadata | null {\n  const thread = readThreadRecord(value);\n  if (!thread) return null;\n\n  const spawn = extractCodexThreadSpawnMetadata(thread);\n  if (spawn) return spawn;\n\n  const source = readSubagentSource(thread);\n  if (source === \"review\" || source === \"compact\" || source === \"memory_consolidation\") {\n    return {\n      subagentKind: source,\n      hiddenFromThreadList: true,\n    };\n  }\n\n  if (isRecord(source)) {\n    const other = readString(source.other);\n    if (other) {\n      return {\n        subagentKind: other,\n        hiddenFromThreadList: true,\n      };\n    }\n  }\n\n  return null;\n}\n","import {\n  ApprovalRequestId,\n  DEFAULT_MODEL,\n  EventId,\n  MessageId,\n  ProviderDriverKind,\n  ProviderItemId,\n  ProviderInstanceId,\n  type ProviderApprovalDecision,\n  type ProviderEvent,\n  type ProviderInteractionMode,\n  type ProviderRequestKind,\n  type ProviderSession,\n  type ProviderTurnStartResult,\n  type ProviderUserInputAnswers,\n  RuntimeMode,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport { normalizeModelSlug } from \"@salchi/shared/model\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as CodexClient from \"effect-codex-app-server/client\";\nimport * as CodexErrors from \"effect-codex-app-server/errors\";\nimport * as CodexRpc from \"effect-codex-app-server/rpc\";\nimport * as EffectCodexSchema from \"effect-codex-app-server/schema\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\nimport { terminateChildProcess } from \"@salchi/shared/childProcess\";\nimport { registerManagedChildProcess } from \"../../process/ManagedChildProcessRegistry.ts\";\n\nimport { buildCodexInitializeParams } from \"./CodexProvider.ts\";\nimport { expandHomePath } from \"../../pathExpansion.ts\";\nimport {\n  CODEX_DEFAULT_MODE_DEVELOPER_INSTRUCTIONS,\n  CODEX_PLAN_MODE_DEVELOPER_INSTRUCTIONS,\n} from \"../CodexDeveloperInstructions.ts\";\nimport { codexChildThreadId, extractCodexThreadSpawnMetadata } from \"./CodexChildThreads.ts\";\nimport {\n  INDEPENDENT_THREAD_TOOL_METHOD,\n  INDEPENDENT_THREAD_TOOL_SPEC,\n  isIndependentThreadToolCall,\n  parseIndependentThreadToolArguments,\n} from \"../IndependentThreadTool.ts\";\nconst decodeV2TurnStartResponse = Schema.decodeUnknownEffect(EffectCodexSchema.V2TurnStartResponse);\nconst decodeV2TurnSteerParams = Schema.decodeUnknownEffect(EffectCodexSchema.V2TurnSteerParams);\nconst decodeV2TurnSteerResponse = Schema.decodeUnknownEffect(EffectCodexSchema.V2TurnSteerResponse);\nconst decodeV2ThreadStartResponse = Schema.decodeUnknownEffect(\n  EffectCodexSchema.V2ThreadStartResponse,\n);\n\nconst PROVIDER = ProviderDriverKind.make(\"codex\");\n\nconst ANSI_ESCAPE_CHAR = String.fromCharCode(27);\nconst ANSI_ESCAPE_REGEX = new RegExp(`${ANSI_ESCAPE_CHAR}\\\\[[0-9;]*m`, \"g\");\nconst CODEX_STDERR_LOG_REGEX =\n  /^\\d{4}-\\d{2}-\\d{2}T\\S+\\s+(TRACE|DEBUG|INFO|WARN|ERROR)\\s+\\S+:\\s+(.*)$/;\nconst BENIGN_ERROR_LOG_SNIPPETS = [\n  \"state db missing rollout path for thread\",\n  \"state db record_discrepancy: find_thread_path_by_id_str_in_subdir, falling_back\",\n];\nconst CODEX_APP_SERVER_FORCE_KILL_AFTER = \"2 seconds\" as const;\nexport const CODEX_USAGE_REFRESH_TIMEOUT = Duration.seconds(10);\nconst RECOVERABLE_THREAD_RESUME_ERROR_SNIPPETS = [\n  \"not found\",\n  \"missing thread\",\n  \"no such thread\",\n  \"unknown thread\",\n  \"does not exist\",\n];\n\nexport const CodexResumeCursorSchema = Schema.Struct({\n  threadId: Schema.String,\n});\nconst CodexUserInputAnswerObject = Schema.Struct({\n  answers: Schema.Array(Schema.String),\n});\nconst isCodexResumeCursorSchema = Schema.is(CodexResumeCursorSchema);\nconst isCodexUserInputAnswerObject = Schema.is(CodexUserInputAnswerObject);\n\n// TODO: Verify `packages/effect-codex-app-server/scripts/generate.ts` so the generated\n// `V2TurnStartParams` schema includes `collaborationMode` directly.\nconst CodexTurnStartParamsWithCollaborationMode = EffectCodexSchema.V2TurnStartParams.pipe(\n  Schema.fieldsAssign({\n    collaborationMode: Schema.optionalKey(EffectCodexSchema.V2TurnStartParams__CollaborationMode),\n  }),\n);\nconst decodeCodexTurnStartParamsWithCollaborationMode = Schema.decodeUnknownEffect(\n  CodexTurnStartParamsWithCollaborationMode,\n);\n\nexport type CodexTurnStartParamsWithCollaborationMode =\n  typeof CodexTurnStartParamsWithCollaborationMode.Type;\nconst formatSchemaIssue = SchemaIssue.makeFormatterDefault();\n\nexport type CodexResumeCursor = typeof CodexResumeCursorSchema.Type;\ntype CodexServiceTier = NonNullable<EffectCodexSchema.V2ThreadStartParams[\"serviceTier\"]>;\ntype CodexDynamicToolSpec = EffectCodexSchema.V2ThreadStartParams__DynamicToolSpec;\ntype CodexThreadStartParamsWithDynamicTools = EffectCodexSchema.V2ThreadStartParams & {\n  readonly dynamicTools?: ReadonlyArray<CodexDynamicToolSpec> | null;\n};\ntype CodexThreadItem =\n  | EffectCodexSchema.V2ThreadReadResponse[\"thread\"][\"turns\"][number][\"items\"][number]\n  | EffectCodexSchema.V2ThreadRollbackResponse[\"thread\"][\"turns\"][number][\"items\"][number];\nexport type CodexSessionRuntimeAttachmentInput = Extract<\n  EffectCodexSchema.V2TurnStartParams__UserInput,\n  { readonly type: \"image\" } | { readonly type: \"mention\" }\n>;\n\nexport interface CodexSessionRuntimeOptions {\n  readonly threadId: ThreadId;\n  readonly providerInstanceId?: ProviderInstanceId;\n  readonly binaryPath: string;\n  readonly homePath?: string;\n  readonly environment?: NodeJS.ProcessEnv;\n  readonly cwd: string;\n  readonly processRegistryDirectory?: string;\n  readonly runtimeMode: RuntimeMode;\n  readonly model?: string;\n  readonly serviceTier?: CodexServiceTier | undefined;\n  readonly approvalsReviewer?: EffectCodexSchema.V2ThreadStartParams__ApprovalsReviewer | undefined;\n  readonly resumeCursor?: CodexResumeCursor;\n}\n\nexport interface CodexSessionRuntimeSendTurnInput {\n  readonly input?: string;\n  readonly attachments?: ReadonlyArray<CodexSessionRuntimeAttachmentInput>;\n  readonly model?: string;\n  readonly serviceTier?: CodexServiceTier | undefined;\n  readonly effort?: EffectCodexSchema.V2TurnStartParams__ReasoningEffort | undefined;\n  readonly approvalsReviewer?: EffectCodexSchema.V2TurnStartParams__ApprovalsReviewer | undefined;\n  readonly interactionMode?: ProviderInteractionMode;\n}\n\nexport interface CodexSessionRuntimeSteerTurnInput {\n  readonly expectedTurnId: TurnId;\n  readonly messageId: MessageId;\n  readonly input?: string;\n  readonly attachments?: ReadonlyArray<CodexSessionRuntimeAttachmentInput>;\n}\n\nexport interface CodexThreadTurnSnapshot {\n  readonly id: TurnId;\n  readonly status: string;\n  readonly startedAt?: number | null;\n  readonly completedAt?: number | null;\n  readonly errorMessage?: string;\n  readonly items: ReadonlyArray<CodexThreadItem>;\n}\n\nexport interface CodexThreadSnapshot {\n  readonly threadId: string;\n  readonly turns: ReadonlyArray<CodexThreadTurnSnapshot>;\n}\n\nexport interface CodexSpawnedChildThreadListOptions {\n  readonly candidateProviderThreadIds?: ReadonlySet<string>;\n  readonly allowScanRepair?: boolean;\n  readonly maxPages?: number;\n}\n\nexport interface CodexSessionRuntimeShape {\n  readonly start: () => Effect.Effect<ProviderSession, CodexSessionRuntimeError>;\n  readonly getSession: Effect.Effect<ProviderSession>;\n  readonly registerProviderThreadBinding: (input: {\n    readonly providerThreadId: string;\n    readonly threadId: ThreadId;\n    readonly parentThreadId?: ThreadId;\n  }) => Effect.Effect<void>;\n  readonly sendTurn: (\n    input: CodexSessionRuntimeSendTurnInput,\n  ) => Effect.Effect<ProviderTurnStartResult, CodexSessionRuntimeError>;\n  readonly sendTurnToProviderThread: (\n    providerThreadId: string,\n    input: CodexSessionRuntimeSendTurnInput,\n  ) => Effect.Effect<ProviderTurnStartResult, CodexSessionRuntimeError>;\n  readonly steerTurn: (\n    input: CodexSessionRuntimeSteerTurnInput,\n  ) => Effect.Effect<ProviderTurnStartResult, CodexSessionRuntimeError>;\n  readonly steerTurnToProviderThread: (\n    providerThreadId: string,\n    input: CodexSessionRuntimeSteerTurnInput,\n  ) => Effect.Effect<ProviderTurnStartResult, CodexSessionRuntimeError>;\n  readonly interruptTurn: (turnId?: TurnId) => Effect.Effect<void, CodexSessionRuntimeError>;\n  readonly interruptProviderThreadTurn: (\n    providerThreadId: string,\n    turnId?: TurnId,\n  ) => Effect.Effect<void, CodexSessionRuntimeError>;\n  readonly readThread: Effect.Effect<CodexThreadSnapshot, CodexSessionRuntimeError>;\n  readonly readProviderThread: (\n    providerThreadId: string,\n  ) => Effect.Effect<CodexThreadSnapshot, CodexSessionRuntimeError>;\n  readonly rollbackThread: (\n    numTurns: number,\n  ) => Effect.Effect<CodexThreadSnapshot, CodexSessionRuntimeError>;\n  readonly rollbackProviderThread: (\n    providerThreadId: string,\n    numTurns: number,\n  ) => Effect.Effect<CodexThreadSnapshot, CodexSessionRuntimeError>;\n  readonly listSpawnedChildThreads: (\n    parentProviderThreadId: string,\n    options?: CodexSpawnedChildThreadListOptions,\n  ) => Effect.Effect<\n    ReadonlyArray<EffectCodexSchema.V2ThreadListResponse[\"data\"][number]>,\n    CodexSessionRuntimeError\n  >;\n  readonly refreshUsage: Effect.Effect<void, CodexSessionRuntimeError>;\n  readonly respondToRequest: (\n    requestId: ApprovalRequestId,\n    decision: ProviderApprovalDecision,\n  ) => Effect.Effect<void, CodexSessionRuntimeError>;\n  readonly respondToUserInput: (\n    requestId: ApprovalRequestId,\n    answers: ProviderUserInputAnswers,\n  ) => Effect.Effect<void, CodexSessionRuntimeError>;\n  readonly events: Stream.Stream<ProviderEvent, never>;\n  readonly close: Effect.Effect<void>;\n}\n\nexport type CodexSessionRuntimeError =\n  | CodexErrors.CodexAppServerError\n  | CodexSessionRuntimePendingApprovalNotFoundError\n  | CodexSessionRuntimePendingUserInputNotFoundError\n  | CodexSessionRuntimeInvalidUserInputAnswersError\n  | CodexSessionRuntimeThreadIdMissingError;\n\nexport class CodexSessionRuntimePendingApprovalNotFoundError extends Schema.TaggedErrorClass<CodexSessionRuntimePendingApprovalNotFoundError>()(\n  \"CodexSessionRuntimePendingApprovalNotFoundError\",\n  {\n    requestId: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Unknown pending Codex approval request: ${this.requestId}`;\n  }\n}\n\nexport class CodexSessionRuntimePendingUserInputNotFoundError extends Schema.TaggedErrorClass<CodexSessionRuntimePendingUserInputNotFoundError>()(\n  \"CodexSessionRuntimePendingUserInputNotFoundError\",\n  {\n    requestId: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Unknown pending Codex user input request: ${this.requestId}`;\n  }\n}\n\nexport class CodexSessionRuntimeInvalidUserInputAnswersError extends Schema.TaggedErrorClass<CodexSessionRuntimeInvalidUserInputAnswersError>()(\n  \"CodexSessionRuntimeInvalidUserInputAnswersError\",\n  {\n    questionId: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Invalid Codex user input answers for question '${this.questionId}'`;\n  }\n}\n\nexport class CodexSessionRuntimeThreadIdMissingError extends Schema.TaggedErrorClass<CodexSessionRuntimeThreadIdMissingError>()(\n  \"CodexSessionRuntimeThreadIdMissingError\",\n  {\n    threadId: Schema.String,\n  },\n) {\n  override get message(): string {\n    return `Codex session is missing a provider thread id for ${this.threadId}`;\n  }\n}\n\ninterface PendingApproval {\n  readonly requestId: ApprovalRequestId;\n  readonly jsonRpcId: string;\n  readonly requestKind: ProviderRequestKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly itemId: ProviderItemId | undefined;\n  readonly decision: Deferred.Deferred<ProviderApprovalDecision>;\n}\n\ninterface ApprovalCorrelation {\n  readonly requestId: ApprovalRequestId;\n  readonly requestKind: ProviderRequestKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly itemId: ProviderItemId | undefined;\n}\n\ninterface PendingUserInput {\n  readonly requestId: ApprovalRequestId;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly itemId: ProviderItemId | undefined;\n  readonly answers: Deferred.Deferred<ProviderUserInputAnswers>;\n}\n\ntype CodexServerNotification = {\n  readonly [M in CodexRpc.ServerNotificationMethod]: {\n    readonly method: M;\n    readonly params: CodexRpc.ServerNotificationParamsByMethod[M];\n  };\n}[CodexRpc.ServerNotificationMethod];\n\nfunction makeCodexServerNotification<M extends CodexRpc.ServerNotificationMethod>(\n  method: M,\n  params: CodexRpc.ServerNotificationParamsByMethod[M],\n): CodexServerNotification {\n  return { method, params } as CodexServerNotification;\n}\n\nfunction normalizeCodexModelSlug(\n  model: string | undefined | null,\n  preferredId?: string,\n): string | undefined {\n  const normalized = normalizeModelSlug(model);\n  if (!normalized) {\n    return undefined;\n  }\n  if (preferredId?.endsWith(\"-codex\") && preferredId !== normalized) {\n    return preferredId;\n  }\n  return normalized;\n}\n\nfunction readResumeCursorThreadId(\n  resumeCursor: ProviderSession[\"resumeCursor\"],\n): string | undefined {\n  return isCodexResumeCursorSchema(resumeCursor) ? resumeCursor.threadId : undefined;\n}\n\nfunction runtimeModeToThreadConfig(input: RuntimeMode): {\n  readonly approvalPolicy: EffectCodexSchema.V2ThreadStartParams__AskForApproval;\n  readonly sandbox: EffectCodexSchema.V2ThreadStartParams__SandboxMode;\n} {\n  switch (input) {\n    case \"approval-required\":\n      return {\n        approvalPolicy: \"untrusted\",\n        sandbox: \"read-only\",\n      };\n    case \"auto-accept-edits\":\n      return {\n        approvalPolicy: \"on-request\",\n        sandbox: \"workspace-write\",\n      };\n    case \"full-access\":\n    default:\n      return {\n        approvalPolicy: \"never\",\n        sandbox: \"danger-full-access\",\n      };\n  }\n}\n\nfunction buildThreadStartParams(input: {\n  readonly cwd: string;\n  readonly runtimeMode: RuntimeMode;\n  readonly model: string | undefined;\n  readonly serviceTier: CodexServiceTier | undefined;\n  readonly approvalsReviewer: EffectCodexSchema.V2ThreadStartParams__ApprovalsReviewer | undefined;\n}): CodexThreadStartParamsWithDynamicTools {\n  const config = runtimeModeToThreadConfig(input.runtimeMode);\n  return {\n    cwd: input.cwd,\n    approvalPolicy: config.approvalPolicy,\n    sandbox: config.sandbox,\n    dynamicTools: [INDEPENDENT_THREAD_TOOL_SPEC],\n    ...(input.model ? { model: input.model } : {}),\n    ...(input.serviceTier ? { serviceTier: input.serviceTier } : {}),\n    ...(input.approvalsReviewer ? { approvalsReviewer: input.approvalsReviewer } : {}),\n  };\n}\n\nfunction buildThreadResumeParams(input: {\n  readonly threadId: string;\n  readonly cwd: string;\n  readonly runtimeMode: RuntimeMode;\n  readonly model: string | undefined;\n  readonly serviceTier: CodexServiceTier | undefined;\n  readonly approvalsReviewer: EffectCodexSchema.V2ThreadResumeParams__ApprovalsReviewer | undefined;\n}): EffectCodexSchema.V2ThreadResumeParams {\n  const config = runtimeModeToThreadConfig(input.runtimeMode);\n  return {\n    threadId: input.threadId,\n    cwd: input.cwd,\n    approvalPolicy: config.approvalPolicy,\n    sandbox: config.sandbox,\n    ...(input.model ? { model: input.model } : {}),\n    ...(input.serviceTier ? { serviceTier: input.serviceTier } : {}),\n    ...(input.approvalsReviewer ? { approvalsReviewer: input.approvalsReviewer } : {}),\n  };\n}\n\nfunction runtimeModeToTurnSandboxPolicy(\n  input: RuntimeMode,\n): EffectCodexSchema.V2TurnStartParams__SandboxPolicy {\n  switch (input) {\n    case \"approval-required\":\n      return {\n        type: \"readOnly\",\n      };\n    case \"auto-accept-edits\":\n      return {\n        type: \"workspaceWrite\",\n      };\n    case \"full-access\":\n    default:\n      return {\n        type: \"dangerFullAccess\",\n      };\n  }\n}\n\nfunction buildCodexCollaborationMode(input: {\n  readonly interactionMode?: ProviderInteractionMode;\n  readonly model?: string;\n  readonly effort?: EffectCodexSchema.V2TurnStartParams__ReasoningEffort;\n}): EffectCodexSchema.V2TurnStartParams__CollaborationMode | undefined {\n  if (input.interactionMode === undefined) {\n    return undefined;\n  }\n  const model = normalizeCodexModelSlug(input.model) ?? DEFAULT_MODEL;\n  return {\n    mode: input.interactionMode,\n    settings: {\n      model,\n      reasoning_effort: input.effort ?? \"medium\",\n      developer_instructions:\n        input.interactionMode === \"plan\"\n          ? CODEX_PLAN_MODE_DEVELOPER_INSTRUCTIONS\n          : CODEX_DEFAULT_MODE_DEVELOPER_INSTRUCTIONS,\n    },\n  };\n}\n\nexport function buildTurnStartParams(input: {\n  readonly threadId: string;\n  readonly runtimeMode: RuntimeMode;\n  readonly prompt?: string;\n  readonly attachments?: ReadonlyArray<CodexSessionRuntimeAttachmentInput>;\n  readonly model?: string;\n  readonly serviceTier?: CodexServiceTier;\n  readonly effort?: EffectCodexSchema.V2TurnStartParams__ReasoningEffort;\n  readonly approvalsReviewer?: EffectCodexSchema.V2TurnStartParams__ApprovalsReviewer;\n  readonly interactionMode?: ProviderInteractionMode;\n}): Effect.Effect<\n  CodexTurnStartParamsWithCollaborationMode,\n  CodexErrors.CodexAppServerProtocolParseError\n> {\n  const turnInput: Array<EffectCodexSchema.V2TurnStartParams__UserInput> = [];\n  if (input.prompt) {\n    turnInput.push({\n      type: \"text\",\n      text: input.prompt,\n    });\n  }\n  for (const attachment of input.attachments ?? []) {\n    turnInput.push(attachment);\n  }\n\n  const config = runtimeModeToThreadConfig(input.runtimeMode);\n  const collaborationMode = buildCodexCollaborationMode({\n    ...(input.interactionMode ? { interactionMode: input.interactionMode } : {}),\n    ...(input.model ? { model: input.model } : {}),\n    ...(input.effort ? { effort: input.effort } : {}),\n  });\n\n  return decodeCodexTurnStartParamsWithCollaborationMode({\n    threadId: input.threadId,\n    input: turnInput,\n    approvalPolicy: config.approvalPolicy,\n    sandboxPolicy: runtimeModeToTurnSandboxPolicy(input.runtimeMode),\n    ...(input.model ? { model: input.model } : {}),\n    ...(input.serviceTier ? { serviceTier: input.serviceTier } : {}),\n    ...(input.effort ? { effort: input.effort } : {}),\n    ...(input.approvalsReviewer ? { approvalsReviewer: input.approvalsReviewer } : {}),\n    ...(collaborationMode ? { collaborationMode } : {}),\n  }).pipe(\n    Effect.mapError((error) => toProtocolParseError(\"Invalid turn/start request payload\", error)),\n  );\n}\n\nexport function buildTurnSteerParams(input: {\n  readonly threadId: string;\n  readonly expectedTurnId: TurnId;\n  readonly messageId: MessageId;\n  readonly prompt?: string;\n  readonly attachments?: ReadonlyArray<CodexSessionRuntimeAttachmentInput>;\n}): Effect.Effect<\n  EffectCodexSchema.V2TurnSteerParams,\n  CodexErrors.CodexAppServerProtocolParseError\n> {\n  const turnInput: Array<EffectCodexSchema.V2TurnSteerParams__UserInput> = [];\n  if (input.prompt) {\n    turnInput.push({\n      type: \"text\",\n      text: input.prompt,\n    });\n  }\n  turnInput.push(...(input.attachments ?? []));\n\n  return decodeV2TurnSteerParams({\n    threadId: input.threadId,\n    expectedTurnId: input.expectedTurnId,\n    clientUserMessageId: input.messageId,\n    input: turnInput,\n  }).pipe(\n    Effect.mapError((error) => toProtocolParseError(\"Invalid turn/steer request payload\", error)),\n  );\n}\n\nfunction classifyCodexStderrLine(rawLine: string): { readonly message: string } | null {\n  const line = rawLine.replaceAll(ANSI_ESCAPE_REGEX, \"\").trim();\n  if (!line) {\n    return null;\n  }\n\n  const match = line.match(CODEX_STDERR_LOG_REGEX);\n  if (match) {\n    const level = match[1];\n    if (level && level !== \"ERROR\") {\n      return null;\n    }\n    if (BENIGN_ERROR_LOG_SNIPPETS.some((snippet) => line.includes(snippet))) {\n      return null;\n    }\n  }\n\n  return { message: line };\n}\n\nexport function isRecoverableThreadResumeError(error: unknown): boolean {\n  const message = (error instanceof Error ? error.message : String(error)).toLowerCase();\n  if (!message.includes(\"thread\")) {\n    return false;\n  }\n  return RECOVERABLE_THREAD_RESUME_ERROR_SNIPPETS.some((snippet) => message.includes(snippet));\n}\n\ntype CodexThreadOpenResponse =\n  | CodexRpc.ClientRequestResponsesByMethod[\"thread/start\"]\n  | CodexRpc.ClientRequestResponsesByMethod[\"thread/resume\"];\n\ntype CodexThreadOpenMethod = \"thread/start\" | \"thread/resume\";\n\ninterface CodexThreadOpenClient {\n  readonly raw: {\n    readonly request: (\n      method: string,\n      payload?: unknown,\n    ) => Effect.Effect<unknown, CodexErrors.CodexAppServerError>;\n  };\n  readonly request: <M extends CodexThreadOpenMethod>(\n    method: M,\n    payload: CodexRpc.ClientRequestParamsByMethod[M],\n  ) => Effect.Effect<CodexRpc.ClientRequestResponsesByMethod[M], CodexErrors.CodexAppServerError>;\n}\n\nfunction startCodexThread(\n  client: CodexThreadOpenClient,\n  payload: CodexThreadStartParamsWithDynamicTools,\n): Effect.Effect<\n  CodexRpc.ClientRequestResponsesByMethod[\"thread/start\"],\n  CodexErrors.CodexAppServerError\n> {\n  return client.raw\n    .request(\"thread/start\", payload)\n    .pipe(\n      Effect.flatMap((raw) =>\n        decodeV2ThreadStartResponse(raw).pipe(\n          Effect.mapError((error) =>\n            toProtocolParseError(\"Invalid thread/start response payload\", error),\n          ),\n        ),\n      ),\n    );\n}\n\nexport const openCodexThread = (input: {\n  readonly client: CodexThreadOpenClient;\n  readonly threadId: ThreadId;\n  readonly runtimeMode: RuntimeMode;\n  readonly cwd: string;\n  readonly requestedModel: string | undefined;\n  readonly serviceTier: CodexServiceTier | undefined;\n  readonly approvalsReviewer: EffectCodexSchema.V2ThreadStartParams__ApprovalsReviewer | undefined;\n  readonly resumeThreadId: string | undefined;\n}): Effect.Effect<CodexThreadOpenResponse, CodexErrors.CodexAppServerError> => {\n  const resumeThreadId = input.resumeThreadId;\n  const startParams = buildThreadStartParams({\n    cwd: input.cwd,\n    runtimeMode: input.runtimeMode,\n    model: input.requestedModel,\n    serviceTier: input.serviceTier,\n    approvalsReviewer: input.approvalsReviewer,\n  });\n\n  if (resumeThreadId === undefined) {\n    return startCodexThread(input.client, startParams);\n  }\n\n  return input.client\n    .request(\n      \"thread/resume\",\n      buildThreadResumeParams({\n        threadId: resumeThreadId,\n        cwd: input.cwd,\n        runtimeMode: input.runtimeMode,\n        model: input.requestedModel,\n        serviceTier: input.serviceTier,\n        approvalsReviewer: input.approvalsReviewer,\n      }),\n    )\n    .pipe(\n      Effect.catchIf(isRecoverableThreadResumeError, (error) =>\n        Effect.logWarning(\"codex app-server thread resume fell back to fresh start\", {\n          threadId: input.threadId,\n          requestedRuntimeMode: input.runtimeMode,\n          resumeThreadId,\n          recoverable: true,\n          cause: error.message,\n        }).pipe(Effect.andThen(startCodexThread(input.client, startParams))),\n      ),\n    );\n};\n\nfunction readNotificationThreadId(notification: CodexServerNotification): string | undefined {\n  switch (notification.method) {\n    case \"thread/started\":\n      return notification.params.thread.id;\n    case \"error\":\n    case \"thread/status/changed\":\n    case \"thread/archived\":\n    case \"thread/unarchived\":\n    case \"thread/closed\":\n    case \"thread/name/updated\":\n    case \"thread/tokenUsage/updated\":\n    case \"turn/started\":\n    case \"hook/started\":\n    case \"turn/completed\":\n    case \"hook/completed\":\n    case \"turn/diff/updated\":\n    case \"turn/plan/updated\":\n    case \"item/started\":\n    case \"item/autoApprovalReview/started\":\n    case \"item/autoApprovalReview/completed\":\n    case \"item/completed\":\n    case \"rawResponseItem/completed\":\n    case \"item/agentMessage/delta\":\n    case \"item/plan/delta\":\n    case \"item/commandExecution/outputDelta\":\n    case \"item/commandExecution/terminalInteraction\":\n    case \"item/fileChange/outputDelta\":\n    case \"item/fileChange/patchUpdated\":\n    case \"serverRequest/resolved\":\n    case \"item/mcpToolCall/progress\":\n    case \"item/reasoning/summaryTextDelta\":\n    case \"item/reasoning/summaryPartAdded\":\n    case \"item/reasoning/textDelta\":\n    case \"thread/compacted\":\n    case \"thread/realtime/started\":\n    case \"thread/realtime/itemAdded\":\n    case \"thread/realtime/transcript/delta\":\n    case \"thread/realtime/transcript/done\":\n    case \"thread/realtime/outputAudio/delta\":\n    case \"thread/realtime/sdp\":\n    case \"thread/realtime/error\":\n    case \"thread/realtime/closed\":\n      return notification.params.threadId;\n    default:\n      return undefined;\n  }\n}\n\nfunction readProviderThreadIdFromPayload(payload: unknown): string | undefined {\n  if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) {\n    return undefined;\n  }\n  const raw = (payload as Record<string, unknown>).threadId;\n  if (typeof raw !== \"string\") {\n    return undefined;\n  }\n  const trimmed = raw.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction readRouteFields(notification: CodexServerNotification): {\n  readonly turnId: TurnId | undefined;\n  readonly itemId: ProviderItemId | undefined;\n} {\n  switch (notification.method) {\n    case \"thread/started\":\n      return {\n        turnId: undefined,\n        itemId: undefined,\n      };\n    case \"turn/started\":\n    case \"turn/completed\":\n      return {\n        turnId: TurnId.make(notification.params.turn.id),\n        itemId: undefined,\n      };\n    case \"error\":\n      return {\n        turnId: TurnId.make(notification.params.turnId),\n        itemId: undefined,\n      };\n    case \"turn/diff/updated\":\n    case \"turn/plan/updated\":\n      return {\n        turnId: TurnId.make(notification.params.turnId),\n        itemId: undefined,\n      };\n    case \"serverRequest/resolved\":\n      return {\n        turnId: undefined,\n        itemId: undefined,\n      };\n    case \"rawResponseItem/completed\": {\n      const rawItemId =\n        \"id\" in notification.params.item && typeof notification.params.item.id === \"string\"\n          ? notification.params.item.id\n          : undefined;\n      return {\n        turnId: TurnId.make(notification.params.turnId),\n        itemId: rawItemId ? ProviderItemId.make(rawItemId) : undefined,\n      };\n    }\n    case \"item/started\":\n    case \"item/completed\":\n      return {\n        turnId: TurnId.make(notification.params.turnId),\n        itemId: ProviderItemId.make(notification.params.item.id),\n      };\n    case \"item/agentMessage/delta\":\n    case \"item/plan/delta\":\n    case \"item/commandExecution/outputDelta\":\n    case \"item/commandExecution/terminalInteraction\":\n    case \"item/fileChange/outputDelta\":\n    case \"item/fileChange/patchUpdated\":\n    case \"item/reasoning/summaryTextDelta\":\n    case \"item/reasoning/summaryPartAdded\":\n    case \"item/reasoning/textDelta\":\n      return {\n        turnId: TurnId.make(notification.params.turnId),\n        itemId: ProviderItemId.make(notification.params.itemId),\n      };\n    default:\n      return {\n        turnId: undefined,\n        itemId: undefined,\n      };\n  }\n}\n\nfunction rememberCollabReceiverTurns(\n  collabReceiverTurns: Map<string, TurnId>,\n  notification: CodexServerNotification,\n  parentTurnId: TurnId | undefined,\n): void {\n  if (!parentTurnId) {\n    return;\n  }\n\n  if (notification.method !== \"item/started\" && notification.method !== \"item/completed\") {\n    return;\n  }\n\n  if (notification.params.item.type !== \"collabAgentToolCall\") {\n    return;\n  }\n\n  for (const receiverThreadId of notification.params.item.receiverThreadIds) {\n    collabReceiverTurns.set(receiverThreadId, parentTurnId);\n  }\n}\n\nfunction shouldSuppressChildConversationNotification(\n  method: CodexRpc.ServerNotificationMethod,\n): boolean {\n  return (\n    method === \"thread/started\" ||\n    method === \"thread/status/changed\" ||\n    method === \"thread/archived\" ||\n    method === \"thread/unarchived\" ||\n    method === \"thread/closed\" ||\n    method === \"thread/compacted\" ||\n    method === \"thread/name/updated\" ||\n    method === \"thread/tokenUsage/updated\" ||\n    method === \"turn/started\" ||\n    method === \"turn/completed\" ||\n    method === \"turn/plan/updated\" ||\n    method === \"item/plan/delta\"\n  );\n}\n\nfunction toCodexUserInputAnswer(\n  questionId: string,\n  value: ProviderUserInputAnswers[string],\n): Effect.Effect<\n  EffectCodexSchema.ToolRequestUserInputResponse__ToolRequestUserInputAnswer,\n  CodexSessionRuntimeInvalidUserInputAnswersError\n> {\n  if (typeof value === \"string\") {\n    return Effect.succeed({ answers: [value] });\n  }\n  if (Array.isArray(value)) {\n    const answers = value.filter((entry): entry is string => typeof entry === \"string\");\n    return Effect.succeed({ answers });\n  }\n  if (isCodexUserInputAnswerObject(value)) {\n    return Effect.succeed({ answers: value.answers });\n  }\n  return Effect.fail(new CodexSessionRuntimeInvalidUserInputAnswersError({ questionId }));\n}\n\nfunction toCodexUserInputAnswers(\n  answers: ProviderUserInputAnswers,\n): Effect.Effect<\n  EffectCodexSchema.ToolRequestUserInputResponse[\"answers\"],\n  CodexSessionRuntimeInvalidUserInputAnswersError\n> {\n  return Effect.forEach(\n    Object.entries(answers),\n    ([questionId, value]) =>\n      toCodexUserInputAnswer(questionId, value).pipe(\n        Effect.map((answer) => [questionId, answer] as const),\n      ),\n    { concurrency: 1 },\n  ).pipe(Effect.map((entries) => Object.fromEntries(entries)));\n}\n\nfunction toProtocolParseError(\n  detail: string,\n  cause: Schema.SchemaError,\n): CodexErrors.CodexAppServerProtocolParseError {\n  return new CodexErrors.CodexAppServerProtocolParseError({\n    detail: `${detail}: ${formatSchemaIssue(cause.issue)}`,\n    cause,\n  });\n}\n\nfunction currentProviderThreadId(session: ProviderSession): string | undefined {\n  return readResumeCursorThreadId(session.resumeCursor);\n}\n\nfunction updateSession(\n  sessionRef: Ref.Ref<ProviderSession>,\n  updates: Partial<ProviderSession>,\n): Effect.Effect<void> {\n  return Effect.gen(function* () {\n    const updatedAt = DateTime.formatIso(yield* DateTime.now);\n    yield* Ref.update(sessionRef, (session) => ({\n      ...session,\n      ...updates,\n      updatedAt,\n    }));\n  });\n}\n\nfunction parseThreadSnapshot(\n  response: EffectCodexSchema.V2ThreadReadResponse | EffectCodexSchema.V2ThreadRollbackResponse,\n): CodexThreadSnapshot {\n  return {\n    threadId: response.thread.id,\n    turns: response.thread.turns.map((turn) => ({\n      id: TurnId.make(turn.id),\n      status: turn.status,\n      ...(turn.startedAt !== undefined ? { startedAt: turn.startedAt } : {}),\n      ...(turn.completedAt !== undefined ? { completedAt: turn.completedAt } : {}),\n      ...(turn.error?.message ? { errorMessage: turn.error.message } : {}),\n      items: turn.items,\n    })),\n  };\n}\n\nexport interface MakeCodexAppServerClientOptions {\n  readonly binaryPath: string;\n  readonly homePath?: string;\n  readonly cwd: string;\n  readonly processRegistryDirectory?: string;\n  readonly environment?: NodeJS.ProcessEnv;\n}\n\nexport interface CodexAppServerClientHandle {\n  readonly client: CodexClient.CodexAppServerClientShape;\n  readonly child: ChildProcessSpawner.ChildProcessHandle;\n}\n\nexport const makeCodexAppServerClient = (\n  options: MakeCodexAppServerClientOptions,\n): Effect.Effect<\n  CodexAppServerClientHandle,\n  CodexErrors.CodexAppServerError,\n  ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n  Effect.gen(function* () {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const clientScope = yield* Scope.Scope;\n\n    const resolvedHomePath = options.homePath ? expandHomePath(options.homePath) : undefined;\n    const env = {\n      ...(options.environment ?? process.env),\n      ...(resolvedHomePath ? { CODEX_HOME: resolvedHomePath } : {}),\n    };\n    const spawnCommand = resolveSpawnCommand(options.binaryPath, [\"app-server\"], {\n      env,\n      extendEnv: true,\n    });\n    const child = yield* spawner\n      .spawn(\n        ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n          cwd: options.cwd,\n          env,\n          shell: spawnCommand.shell,\n        }),\n      )\n      .pipe(\n        Effect.provideService(Scope.Scope, clientScope),\n        Effect.mapError(\n          (cause) =>\n            new CodexErrors.CodexAppServerSpawnError({\n              command: `${options.binaryPath} app-server`,\n              cause,\n            }),\n        ),\n      );\n\n    const terminate = terminateChildProcess(child, {\n      gracefulTimeout: CODEX_APP_SERVER_FORCE_KILL_AFTER,\n      forceTimeout: CODEX_APP_SERVER_FORCE_KILL_AFTER,\n    }).pipe(Effect.ignore);\n    if (options.processRegistryDirectory) {\n      yield* registerManagedChildProcess({\n        registryDirectory: options.processRegistryDirectory,\n        childPid: Number(child.pid),\n        terminate,\n      });\n    } else {\n      yield* Scope.addFinalizer(clientScope, terminate);\n    }\n\n    const clientContext = yield* CodexClient.layerChildProcess(child).pipe(\n      Layer.build,\n      Effect.provideService(Scope.Scope, clientScope),\n    );\n    const client = yield* Effect.service(CodexClient.CodexAppServerClient).pipe(\n      Effect.provide(clientContext),\n    );\n\n    yield* client.request(\"initialize\", buildCodexInitializeParams());\n    yield* client.notify(\"initialized\", undefined);\n    return { client, child } satisfies CodexAppServerClientHandle;\n  });\n\nexport const makeCodexSessionRuntime = (\n  options: CodexSessionRuntimeOptions,\n): Effect.Effect<\n  CodexSessionRuntimeShape,\n  CodexErrors.CodexAppServerError,\n  ChildProcessSpawner.ChildProcessSpawner | Crypto.Crypto | Scope.Scope\n> =>\n  Effect.gen(function* () {\n    const runtimeScope = yield* Scope.Scope;\n    const crypto = yield* Crypto.Crypto;\n    const events = yield* Queue.unbounded<ProviderEvent>();\n    const pendingApprovalsRef = yield* Ref.make(new Map<ApprovalRequestId, PendingApproval>());\n    const approvalCorrelationsRef = yield* Ref.make(new Map<string, ApprovalCorrelation>());\n    const pendingUserInputsRef = yield* Ref.make(new Map<ApprovalRequestId, PendingUserInput>());\n    const collabReceiverTurnsRef = yield* Ref.make(new Map<string, TurnId>());\n    const providerThreadToSalchiThreadRef = yield* Ref.make(new Map<string, ThreadId>());\n    const providerThreadParentSalchiThreadRef = yield* Ref.make(new Map<string, ThreadId>());\n    const activeProviderThreadTurnsRef = yield* Ref.make(new Map<string, TurnId>());\n    const closedRef = yield* Ref.make(false);\n    const providerInstanceId = options.providerInstanceId ?? ProviderInstanceId.make(\"codex\");\n\n    const { client, child } = yield* makeCodexAppServerClient({\n      binaryPath: options.binaryPath,\n      ...(options.homePath ? { homePath: options.homePath } : {}),\n      cwd: options.cwd,\n      ...(options.processRegistryDirectory\n        ? { processRegistryDirectory: options.processRegistryDirectory }\n        : {}),\n      ...(options.environment ? { environment: options.environment } : {}),\n    });\n    const serverNotifications = yield* Queue.unbounded<CodexServerNotification>();\n    const nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n    const randomUUIDv4 = crypto.randomUUIDv4.pipe(\n      Effect.mapError(\n        (cause) =>\n          new CodexErrors.CodexAppServerTransportError({\n            detail: \"Failed to generate Codex runtime identifier.\",\n            cause,\n          }),\n      ),\n    );\n\n    const sessionCreatedAt = yield* nowIso;\n    const initialSession = {\n      provider: PROVIDER,\n      ...(options.providerInstanceId ? { providerInstanceId: options.providerInstanceId } : {}),\n      status: \"connecting\",\n      runtimeMode: options.runtimeMode,\n      cwd: options.cwd,\n      ...(options.model ? { model: options.model } : {}),\n      threadId: options.threadId,\n      ...(options.resumeCursor !== undefined ? { resumeCursor: options.resumeCursor } : {}),\n      createdAt: sessionCreatedAt,\n      updatedAt: sessionCreatedAt,\n    } satisfies ProviderSession;\n    const sessionRef = yield* Ref.make<ProviderSession>(initialSession);\n    const offerEvent = (event: ProviderEvent) => Queue.offer(events, event).pipe(Effect.asVoid);\n\n    const emitEvent = (event: Omit<ProviderEvent, \"id\" | \"provider\" | \"createdAt\">) =>\n      Effect.gen(function* () {\n        const id = yield* randomUUIDv4;\n        return yield* offerEvent({\n          id: EventId.make(id),\n          provider: PROVIDER,\n          ...(options.providerInstanceId ? { providerInstanceId: options.providerInstanceId } : {}),\n          createdAt: yield* nowIso,\n          ...event,\n        });\n      });\n    const rememberProviderThreadBinding = (input: {\n      readonly providerThreadId: string;\n      readonly threadId: ThreadId;\n      readonly parentThreadId?: ThreadId;\n    }) => {\n      const parentThreadId = input.parentThreadId;\n      return Effect.all([\n        Ref.update(providerThreadToSalchiThreadRef, (current) => {\n          const next = new Map(current);\n          next.set(input.providerThreadId, input.threadId);\n          return next;\n        }),\n        parentThreadId\n          ? Ref.update(providerThreadParentSalchiThreadRef, (current) => {\n              const next = new Map(current);\n              next.set(input.providerThreadId, parentThreadId);\n              return next;\n            })\n          : Effect.void,\n      ]).pipe(Effect.asVoid);\n    };\n    const resolveSalchiThreadIdForProviderThread = (providerThreadId: string | undefined) =>\n      providerThreadId\n        ? Ref.get(providerThreadToSalchiThreadRef).pipe(\n            Effect.map((bindings) => bindings.get(providerThreadId) ?? options.threadId),\n          )\n        : Effect.succeed(options.threadId);\n    const emitSessionEvent = (method: string, message: string) =>\n      emitEvent({\n        kind: \"session\",\n        threadId: options.threadId,\n        method,\n        message,\n      });\n\n    const refreshAccountRateLimits = Effect.gen(function* () {\n      const response = yield* client.request(\"account/rateLimits/read\", undefined).pipe(\n        Effect.timeoutOption(CODEX_USAGE_REFRESH_TIMEOUT),\n        Effect.flatMap(\n          Option.match({\n            onNone: () =>\n              Effect.fail(\n                CodexErrors.CodexAppServerRequestError.internalError(\n                  \"Codex account rate-limit refresh timed out.\",\n                ),\n              ),\n            onSome: (value) => Effect.succeed(value),\n          }),\n        ),\n      );\n\n      yield* emitEvent({\n        kind: \"notification\",\n        threadId: options.threadId,\n        method: \"account/rateLimits/updated\",\n        message: \"Codex usage limits refreshed.\",\n        payload: response,\n      });\n    });\n\n    const refreshAccountRateLimitsBestEffort = refreshAccountRateLimits.pipe(\n      Effect.catch((error) =>\n        Effect.logDebug(\"codex.usage.refresh.failed\", {\n          threadId: options.threadId,\n          detail: error instanceof Error ? error.message : String(error),\n        }),\n      ),\n    );\n\n    // Ongoing usage polling is provider-scoped so opening more sessions cannot multiply account\n    // requests. Keep one non-blocking initial read to populate the session immediately.\n    const startInitialUsageRefresh = refreshAccountRateLimitsBestEffort.pipe(\n      Effect.forkIn(runtimeScope),\n    );\n\n    const settlePendingApprovals = (decision: ProviderApprovalDecision) =>\n      Ref.get(pendingApprovalsRef).pipe(\n        Effect.flatMap((pendingApprovals) =>\n          Effect.forEach(\n            Array.from(pendingApprovals.values()),\n            (pendingApproval) =>\n              Deferred.succeed(pendingApproval.decision, decision).pipe(Effect.ignore),\n            { discard: true },\n          ),\n        ),\n      );\n\n    const settlePendingUserInputs = (answers: ProviderUserInputAnswers) =>\n      Ref.get(pendingUserInputsRef).pipe(\n        Effect.flatMap((pendingUserInputs) =>\n          Effect.forEach(\n            Array.from(pendingUserInputs.values()),\n            (pendingUserInput) =>\n              Deferred.succeed(pendingUserInput.answers, answers).pipe(Effect.ignore),\n            { discard: true },\n          ),\n        ),\n      );\n\n    const handleRawNotification = (notification: CodexServerNotification) =>\n      Effect.gen(function* () {\n        const payload = notification.params;\n        const route = readRouteFields(notification);\n        const providerThreadId = readNotificationThreadId(notification);\n        const collabReceiverTurns = yield* Ref.get(collabReceiverTurnsRef);\n        const childParentTurnId = (() => {\n          return providerThreadId ? collabReceiverTurns.get(providerThreadId) : undefined;\n        })();\n\n        rememberCollabReceiverTurns(collabReceiverTurns, notification, route.turnId);\n        const mappedThreadId =\n          providerThreadId !== undefined\n            ? (yield* Ref.get(providerThreadToSalchiThreadRef)).get(providerThreadId)\n            : undefined;\n\n        if (\n          childParentTurnId &&\n          mappedThreadId === undefined &&\n          shouldSuppressChildConversationNotification(notification.method)\n        ) {\n          yield* Ref.set(collabReceiverTurnsRef, collabReceiverTurns);\n          return;\n        }\n\n        let requestId: ApprovalRequestId | undefined;\n        let requestKind: ProviderRequestKind | undefined;\n        let turnId =\n          mappedThreadId === undefined ? (childParentTurnId ?? route.turnId) : route.turnId;\n        let itemId = route.itemId;\n        let threadId =\n          mappedThreadId ?? (yield* resolveSalchiThreadIdForProviderThread(providerThreadId));\n        let eventPayload: unknown = payload;\n\n        if (notification.method === \"thread/started\") {\n          const spawnMetadata = extractCodexThreadSpawnMetadata(notification.params.thread);\n          if (spawnMetadata) {\n            const parentThreadId = (yield* Ref.get(providerThreadToSalchiThreadRef)).get(\n              spawnMetadata.providerParentThreadId,\n            );\n            if (parentThreadId) {\n              threadId = codexChildThreadId(providerInstanceId, notification.params.thread.id);\n              yield* rememberProviderThreadBinding({\n                providerThreadId: notification.params.thread.id,\n                threadId,\n                parentThreadId,\n              });\n              eventPayload = {\n                ...payload,\n                salchiParentThreadId: parentThreadId,\n              };\n            }\n          }\n        }\n\n        if (notification.method === \"serverRequest/resolved\") {\n          const rawRequestId =\n            typeof notification.params.requestId === \"string\"\n              ? notification.params.requestId\n              : String(notification.params.requestId);\n          const correlation = rawRequestId\n            ? (yield* Ref.get(approvalCorrelationsRef)).get(rawRequestId)\n            : undefined;\n          if (correlation) {\n            requestId = correlation.requestId;\n            requestKind = correlation.requestKind;\n            threadId = correlation.threadId;\n            turnId = correlation.turnId ?? turnId;\n            itemId = correlation.itemId ?? itemId;\n            yield* Ref.update(approvalCorrelationsRef, (current) => {\n              const next = new Map(current);\n              next.delete(rawRequestId);\n              return next;\n            });\n          }\n        }\n\n        yield* Ref.set(collabReceiverTurnsRef, collabReceiverTurns);\n        if (notification.method === \"turn/started\") {\n          yield* Ref.update(activeProviderThreadTurnsRef, (current) => {\n            const next = new Map(current);\n            next.set(notification.params.threadId, TurnId.make(notification.params.turn.id));\n            return next;\n          });\n        } else if (notification.method === \"turn/completed\") {\n          yield* Ref.update(activeProviderThreadTurnsRef, (current) => {\n            const next = new Map(current);\n            next.delete(notification.params.threadId);\n            return next;\n          });\n        }\n        yield* emitEvent({\n          kind: \"notification\",\n          threadId,\n          method: notification.method,\n          ...(turnId ? { turnId } : {}),\n          ...(itemId ? { itemId } : {}),\n          ...(requestId ? { requestId } : {}),\n          ...(requestKind ? { requestKind } : {}),\n          ...(notification.method === \"item/agentMessage/delta\"\n            ? { textDelta: notification.params.delta }\n            : {}),\n          ...(eventPayload !== undefined ? { payload: eventPayload } : {}),\n        });\n      });\n\n    const currentSessionProviderThreadId = Effect.map(Ref.get(sessionRef), currentProviderThreadId);\n\n    yield* client.handleServerNotification(\"thread/started\", (payload) =>\n      currentSessionProviderThreadId.pipe(\n        Effect.flatMap((providerThreadId) => {\n          if (providerThreadId && payload.thread.id !== providerThreadId) {\n            return Effect.void;\n          }\n          return updateSession(sessionRef, {\n            resumeCursor: { threadId: payload.thread.id },\n          });\n        }),\n      ),\n    );\n\n    yield* client.handleServerNotification(\"turn/started\", (payload) =>\n      currentSessionProviderThreadId.pipe(\n        Effect.flatMap((providerThreadId) => {\n          if (providerThreadId && payload.threadId !== providerThreadId) {\n            return Effect.void;\n          }\n          return updateSession(sessionRef, {\n            status: \"running\",\n            activeTurnId: TurnId.make(payload.turn.id),\n          });\n        }),\n      ),\n    );\n\n    yield* client.handleServerNotification(\"turn/completed\", (payload) =>\n      currentSessionProviderThreadId.pipe(\n        Effect.flatMap((providerThreadId) => {\n          if (providerThreadId && payload.threadId !== providerThreadId) {\n            return Effect.void;\n          }\n          const lastError =\n            payload.turn.status === \"failed\" && \"error\" in payload.turn && payload.turn.error\n              ? payload.turn.error.message\n              : undefined;\n          return updateSession(sessionRef, {\n            status: payload.turn.status === \"failed\" ? \"error\" : \"ready\",\n            activeTurnId: undefined,\n            ...(lastError ? { lastError } : {}),\n          });\n        }),\n      ),\n    );\n\n    yield* client.handleServerNotification(\"error\", (payload) =>\n      currentSessionProviderThreadId.pipe(\n        Effect.flatMap((providerThreadId) => {\n          const payloadThreadId = payload.threadId;\n          if (providerThreadId && payloadThreadId && payloadThreadId !== providerThreadId) {\n            return Effect.void;\n          }\n          const errorMessage = payload.error.message;\n          const willRetry = payload.willRetry;\n          return updateSession(sessionRef, {\n            status: willRetry ? \"running\" : \"error\",\n            ...(errorMessage ? { lastError: errorMessage } : {}),\n          });\n        }),\n      ),\n    );\n\n    yield* client.handleServerRequest(\"item/commandExecution/requestApproval\", (payload) =>\n      Effect.gen(function* () {\n        const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n        const turnId = TurnId.make(payload.turnId);\n        const itemId = ProviderItemId.make(payload.itemId);\n        const decision = yield* Deferred.make<ProviderApprovalDecision>();\n        const threadId = yield* resolveSalchiThreadIdForProviderThread(\n          readProviderThreadIdFromPayload(payload),\n        );\n\n        yield* Ref.update(pendingApprovalsRef, (current) => {\n          const next = new Map(current);\n          next.set(requestId, {\n            requestId,\n            jsonRpcId: payload.approvalId ?? payload.itemId,\n            requestKind: \"command\",\n            threadId,\n            turnId,\n            itemId,\n            decision,\n          });\n          return next;\n        });\n        yield* Ref.update(approvalCorrelationsRef, (current) => {\n          const next = new Map(current);\n          next.set(payload.approvalId ?? payload.itemId, {\n            requestId,\n            requestKind: \"command\",\n            threadId,\n            turnId,\n            itemId,\n          });\n          return next;\n        });\n\n        yield* emitEvent({\n          kind: \"request\",\n          threadId,\n          method: \"item/commandExecution/requestApproval\",\n          requestId,\n          requestKind: \"command\",\n          ...(turnId ? { turnId } : {}),\n          ...(itemId ? { itemId } : {}),\n          payload,\n        });\n\n        const resolved = yield* Deferred.await(decision).pipe(\n          Effect.ensuring(\n            Ref.update(pendingApprovalsRef, (current) => {\n              const next = new Map(current);\n              next.delete(requestId);\n              return next;\n            }),\n          ),\n        );\n        return {\n          decision: resolved,\n        } satisfies EffectCodexSchema.CommandExecutionRequestApprovalResponse;\n      }),\n    );\n\n    yield* client.handleServerRequest(\"item/fileChange/requestApproval\", (payload) =>\n      Effect.gen(function* () {\n        const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n        const turnId = TurnId.make(payload.turnId);\n        const itemId = ProviderItemId.make(payload.itemId);\n        const decision = yield* Deferred.make<ProviderApprovalDecision>();\n        const threadId = yield* resolveSalchiThreadIdForProviderThread(\n          readProviderThreadIdFromPayload(payload),\n        );\n\n        yield* Ref.update(pendingApprovalsRef, (current) => {\n          const next = new Map(current);\n          next.set(requestId, {\n            requestId,\n            jsonRpcId: payload.itemId,\n            requestKind: \"file-change\",\n            threadId,\n            turnId,\n            itemId,\n            decision,\n          });\n          return next;\n        });\n        yield* Ref.update(approvalCorrelationsRef, (current) => {\n          const next = new Map(current);\n          next.set(payload.itemId, {\n            requestId,\n            requestKind: \"file-change\",\n            threadId,\n            turnId,\n            itemId,\n          });\n          return next;\n        });\n\n        yield* emitEvent({\n          kind: \"request\",\n          threadId,\n          method: \"item/fileChange/requestApproval\",\n          requestId,\n          requestKind: \"file-change\",\n          ...(turnId ? { turnId } : {}),\n          ...(itemId ? { itemId } : {}),\n          payload,\n        });\n\n        const resolved = yield* Deferred.await(decision).pipe(\n          Effect.ensuring(\n            Ref.update(pendingApprovalsRef, (current) => {\n              const next = new Map(current);\n              next.delete(requestId);\n              return next;\n            }),\n          ),\n        );\n        return {\n          decision: resolved,\n        } satisfies EffectCodexSchema.FileChangeRequestApprovalResponse;\n      }),\n    );\n\n    yield* client.handleServerRequest(\"item/tool/requestUserInput\", (payload) =>\n      Effect.gen(function* () {\n        const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n        const turnId = TurnId.make(payload.turnId);\n        const itemId = ProviderItemId.make(payload.itemId);\n        const answers = yield* Deferred.make<ProviderUserInputAnswers>();\n        const threadId = yield* resolveSalchiThreadIdForProviderThread(\n          readProviderThreadIdFromPayload(payload),\n        );\n\n        yield* Ref.update(pendingUserInputsRef, (current) => {\n          const next = new Map(current);\n          next.set(requestId, {\n            requestId,\n            threadId,\n            turnId,\n            itemId,\n            answers,\n          });\n          return next;\n        });\n\n        yield* emitEvent({\n          kind: \"request\",\n          threadId,\n          method: \"item/tool/requestUserInput\",\n          requestId,\n          ...(turnId ? { turnId } : {}),\n          ...(itemId ? { itemId } : {}),\n          payload,\n        });\n\n        const resolvedAnswers = yield* Deferred.await(answers).pipe(\n          Effect.ensuring(\n            Ref.update(pendingUserInputsRef, (current) => {\n              const next = new Map(current);\n              next.delete(requestId);\n              return next;\n            }),\n          ),\n        );\n\n        return {\n          answers: yield* toCodexUserInputAnswers(resolvedAnswers).pipe(\n            Effect.mapError((error) =>\n              CodexErrors.CodexAppServerRequestError.invalidParams(error.message, {\n                questionId: error.questionId,\n              }),\n            ),\n          ),\n        } satisfies EffectCodexSchema.ToolRequestUserInputResponse;\n      }),\n    );\n\n    yield* client.handleServerRequest(\"item/tool/call\", (payload) =>\n      Effect.gen(function* () {\n        if (!isIndependentThreadToolCall(payload)) {\n          return {\n            success: false,\n            contentItems: [\n              {\n                type: \"inputText\",\n                text: `Unsupported Salchi dynamic tool: ${\n                  payload.namespace ? `${payload.namespace}/` : \"\"\n                }${payload.tool}`,\n              },\n            ],\n          } satisfies EffectCodexSchema.DynamicToolCallResponse;\n        }\n\n        const sourceThreadId = yield* resolveSalchiThreadIdForProviderThread(\n          readProviderThreadIdFromPayload(payload),\n        );\n        const turnId = TurnId.make(payload.turnId);\n        const itemId = ProviderItemId.make(payload.callId);\n        const parsedArguments = parseIndependentThreadToolArguments(payload.arguments);\n        if (\n          parsedArguments.checkoutMode === \"worktree\" &&\n          typeof parsedArguments.worktreePath !== \"string\"\n        ) {\n          return {\n            success: false,\n            contentItems: [\n              {\n                type: \"inputText\",\n                text: \"create_thread with checkoutMode 'worktree' requires worktreePath.\",\n              },\n            ],\n          } satisfies EffectCodexSchema.DynamicToolCallResponse;\n        }\n        const createdThreadId =\n          parsedArguments.requestedThreadId ?? ThreadId.make(`codex-tool:${payload.callId}`);\n        const initialMessageId = MessageId.make(`codex-tool:${payload.callId}:initial-message`);\n\n        yield* emitEvent({\n          kind: \"notification\",\n          threadId: sourceThreadId,\n          method: INDEPENDENT_THREAD_TOOL_METHOD,\n          turnId,\n          itemId,\n          payload: {\n            threadId: createdThreadId,\n            title: parsedArguments.title,\n            createdByThreadId: sourceThreadId,\n            initialMessageId,\n            sourceItemId: itemId,\n            ...(parsedArguments.initialPrompt\n              ? { initialPrompt: parsedArguments.initialPrompt }\n              : {}),\n            ...(parsedArguments.titleSeed ? { titleSeed: parsedArguments.titleSeed } : {}),\n            ...(parsedArguments.branch !== undefined ? { branch: parsedArguments.branch } : {}),\n            ...(parsedArguments.worktreePath !== undefined\n              ? { worktreePath: parsedArguments.worktreePath }\n              : {}),\n            ...(parsedArguments.workspaceRoot !== undefined\n              ? { workspaceRoot: parsedArguments.workspaceRoot }\n              : {}),\n          },\n        });\n\n        return {\n          success: true,\n          contentItems: [\n            {\n              type: \"inputText\",\n              text: `Created independent thread '${createdThreadId}' (${parsedArguments.title}) from '${sourceThreadId}'.`,\n            },\n          ],\n        } satisfies EffectCodexSchema.DynamicToolCallResponse;\n      }),\n    );\n\n    yield* client.handleUnknownServerRequest((method) =>\n      Effect.fail(CodexErrors.CodexAppServerRequestError.methodNotFound(method)),\n    );\n\n    const registerServerNotification = <M extends CodexRpc.ServerNotificationMethod>(method: M) =>\n      client.handleServerNotification(method, (params) =>\n        Queue.offer(serverNotifications, makeCodexServerNotification(method, params)).pipe(\n          Effect.asVoid,\n        ),\n      );\n\n    yield* Effect.forEach(\n      Object.values(\n        CodexRpc.SERVER_NOTIFICATION_METHODS,\n      ) as ReadonlyArray<CodexRpc.ServerNotificationMethod>,\n      registerServerNotification,\n      { concurrency: 1, discard: true },\n    );\n\n    yield* Stream.fromQueue(serverNotifications).pipe(\n      Stream.runForEach(handleRawNotification),\n      Effect.forkIn(runtimeScope),\n    );\n\n    const stderrRemainderRef = yield* Ref.make(\"\");\n    yield* child.stderr.pipe(\n      Stream.decodeText(),\n      Stream.runForEach((chunk) =>\n        Ref.modify(stderrRemainderRef, (current) => {\n          const combined = current + chunk;\n          const lines = combined.split(\"\\n\");\n          const remainder = lines.pop() ?? \"\";\n          return [lines.map((line) => line.replace(/\\r$/, \"\")), remainder] as const;\n        }).pipe(\n          Effect.flatMap((lines) =>\n            Effect.forEach(\n              lines,\n              (line) => {\n                const classified = classifyCodexStderrLine(line);\n                if (!classified) {\n                  return Effect.void;\n                }\n                return emitEvent({\n                  kind: \"notification\",\n                  threadId: options.threadId,\n                  method: \"process/stderr\",\n                  message: classified.message,\n                });\n              },\n              { discard: true },\n            ),\n          ),\n        ),\n      ),\n      Effect.forkIn(runtimeScope),\n    );\n\n    yield* child.exitCode.pipe(\n      Effect.flatMap((exitCode) =>\n        Ref.get(closedRef).pipe(\n          Effect.flatMap((closed) => {\n            if (closed) {\n              return Effect.void;\n            }\n            const nextStatus = exitCode === 0 ? \"closed\" : \"error\";\n            return updateSession(sessionRef, {\n              status: nextStatus,\n              activeTurnId: undefined,\n            }).pipe(\n              Effect.andThen(\n                emitSessionEvent(\n                  \"session/exited\",\n                  exitCode === 0\n                    ? \"Codex App Server exited.\"\n                    : `Codex App Server exited with code ${exitCode}.`,\n                ),\n              ),\n            );\n          }),\n        ),\n      ),\n      Effect.forkIn(runtimeScope),\n    );\n\n    const start = Effect.fn(\"CodexSessionRuntime.start\")(function* () {\n      yield* emitSessionEvent(\"session/connecting\", \"Starting Codex App Server session.\");\n\n      const requestedModel = normalizeCodexModelSlug(options.model);\n\n      const opened = yield* openCodexThread({\n        client,\n        threadId: options.threadId,\n        runtimeMode: options.runtimeMode,\n        cwd: options.cwd,\n        requestedModel,\n        serviceTier: options.serviceTier,\n        approvalsReviewer: options.approvalsReviewer,\n        resumeThreadId: readResumeCursorThreadId(options.resumeCursor),\n      });\n\n      const providerThreadId = opened.thread.id;\n      yield* rememberProviderThreadBinding({\n        providerThreadId,\n        threadId: options.threadId,\n      });\n      const session = {\n        ...(yield* Ref.get(sessionRef)),\n        status: \"ready\",\n        cwd: opened.cwd,\n        model: opened.model,\n        resumeCursor: { threadId: providerThreadId },\n        updatedAt: yield* nowIso,\n      } satisfies ProviderSession;\n      yield* Ref.set(sessionRef, session);\n      yield* emitSessionEvent(\"session/ready\", \"Codex App Server session ready.\");\n      yield* startInitialUsageRefresh;\n      return session;\n    });\n\n    const readProviderThreadId = Effect.gen(function* () {\n      const providerThreadId = currentProviderThreadId(yield* Ref.get(sessionRef));\n      if (!providerThreadId) {\n        return yield* new CodexSessionRuntimeThreadIdMissingError({\n          threadId: options.threadId,\n        });\n      }\n      return providerThreadId;\n    });\n\n    const close = Effect.gen(function* () {\n      const alreadyClosed = yield* Ref.getAndSet(closedRef, true);\n      if (alreadyClosed) {\n        return;\n      }\n      yield* settlePendingApprovals(\"cancel\");\n      yield* settlePendingUserInputs({});\n      yield* updateSession(sessionRef, {\n        status: \"closed\",\n        activeTurnId: undefined,\n      });\n      yield* emitSessionEvent(\"session/closed\", \"Session stopped\").pipe(\n        Effect.catch((cause) =>\n          Effect.logError(\"Failed to emit Codex session closed event.\", { cause }),\n        ),\n      );\n      yield* Scope.close(runtimeScope, Exit.void);\n      yield* Queue.shutdown(serverNotifications);\n      yield* Queue.shutdown(events);\n    });\n\n    const sendTurnToProviderThread = (\n      providerThreadId: string,\n      input: CodexSessionRuntimeSendTurnInput,\n    ) =>\n      Effect.gen(function* () {\n        const normalizedModel = normalizeCodexModelSlug(\n          input.model ?? (yield* Ref.get(sessionRef)).model,\n        );\n        const params = yield* buildTurnStartParams({\n          threadId: providerThreadId,\n          runtimeMode: options.runtimeMode,\n          ...(input.input ? { prompt: input.input } : {}),\n          ...(input.attachments ? { attachments: input.attachments } : {}),\n          ...(normalizedModel ? { model: normalizedModel } : {}),\n          ...(input.serviceTier ? { serviceTier: input.serviceTier } : {}),\n          ...(input.effort ? { effort: input.effort } : {}),\n          ...(input.approvalsReviewer ? { approvalsReviewer: input.approvalsReviewer } : {}),\n          ...(input.interactionMode ? { interactionMode: input.interactionMode } : {}),\n        });\n        const rawResponse = yield* client.raw.request(\"turn/start\", params);\n        const response = yield* decodeV2TurnStartResponse(rawResponse).pipe(\n          Effect.mapError((error) =>\n            toProtocolParseError(\"Invalid turn/start response payload\", error),\n          ),\n        );\n        const turnId = TurnId.make(response.turn.id);\n        const rootProviderThreadId = currentProviderThreadId(yield* Ref.get(sessionRef));\n        yield* Ref.update(activeProviderThreadTurnsRef, (current) => {\n          const next = new Map(current);\n          next.set(providerThreadId, turnId);\n          return next;\n        });\n        if (providerThreadId === rootProviderThreadId) {\n          yield* updateSession(sessionRef, {\n            status: \"running\",\n            activeTurnId: turnId,\n            ...(normalizedModel ? { model: normalizedModel } : {}),\n          });\n        }\n        const salchiThreadId = yield* resolveSalchiThreadIdForProviderThread(providerThreadId);\n        return {\n          threadId: salchiThreadId,\n          turnId,\n          resumeCursor: { threadId: providerThreadId },\n        } satisfies ProviderTurnStartResult;\n      });\n\n    const steerTurnToProviderThread = (\n      providerThreadId: string,\n      input: CodexSessionRuntimeSteerTurnInput,\n    ) =>\n      Effect.gen(function* () {\n        const params = yield* buildTurnSteerParams({\n          threadId: providerThreadId,\n          expectedTurnId: input.expectedTurnId,\n          messageId: input.messageId,\n          ...(input.input ? { prompt: input.input } : {}),\n          ...(input.attachments ? { attachments: input.attachments } : {}),\n        });\n        const rawResponse = yield* client.raw.request(\"turn/steer\", params);\n        const response = yield* decodeV2TurnSteerResponse(rawResponse).pipe(\n          Effect.mapError((error) =>\n            toProtocolParseError(\"Invalid turn/steer response payload\", error),\n          ),\n        );\n        const turnId = TurnId.make(response.turnId);\n        const salchiThreadId = yield* resolveSalchiThreadIdForProviderThread(providerThreadId);\n        return {\n          threadId: salchiThreadId,\n          turnId,\n          resumeCursor: { threadId: providerThreadId },\n        } satisfies ProviderTurnStartResult;\n      });\n\n    const interruptProviderThreadTurn = (providerThreadId: string, turnId?: TurnId) =>\n      Effect.gen(function* () {\n        const session = yield* Ref.get(sessionRef);\n        const activeProviderThreadTurns = yield* Ref.get(activeProviderThreadTurnsRef);\n        const effectiveTurnId =\n          turnId ??\n          activeProviderThreadTurns.get(providerThreadId) ??\n          (providerThreadId === currentProviderThreadId(session)\n            ? session.activeTurnId\n            : undefined);\n        if (!effectiveTurnId) {\n          return;\n        }\n        yield* client.request(\"turn/interrupt\", {\n          threadId: providerThreadId,\n          turnId: effectiveTurnId,\n        });\n      });\n\n    const readProviderThread = (providerThreadId: string) =>\n      Effect.gen(function* () {\n        const response = yield* client.request(\"thread/read\", {\n          threadId: providerThreadId,\n          includeTurns: true,\n        });\n        return parseThreadSnapshot(response);\n      });\n\n    const rollbackProviderThread = (providerThreadId: string, numTurns: number) =>\n      Effect.gen(function* () {\n        const response = yield* client.request(\"thread/rollback\", {\n          threadId: providerThreadId,\n          numTurns,\n        });\n        const rootProviderThreadId = currentProviderThreadId(yield* Ref.get(sessionRef));\n        yield* Ref.update(activeProviderThreadTurnsRef, (current) => {\n          const next = new Map(current);\n          next.delete(providerThreadId);\n          return next;\n        });\n        if (providerThreadId === rootProviderThreadId) {\n          yield* updateSession(sessionRef, {\n            status: \"ready\",\n            activeTurnId: undefined,\n          });\n        }\n        return parseThreadSnapshot(response);\n      });\n\n    const listSpawnedChildThreads = (\n      parentProviderThreadId: string,\n      options: CodexSpawnedChildThreadListOptions = {},\n    ) =>\n      Effect.gen(function* () {\n        const candidateProviderThreadIds = options.candidateProviderThreadIds;\n        const hasAllCandidates = (\n          threads: ReadonlyArray<EffectCodexSchema.V2ThreadListResponse[\"data\"][number]>,\n        ) => {\n          if (!candidateProviderThreadIds || candidateProviderThreadIds.size === 0) {\n            return false;\n          }\n          const found = new Set(threads.map((thread) => thread.id));\n          for (const candidate of candidateProviderThreadIds) {\n            if (!found.has(candidate)) {\n              return false;\n            }\n          }\n          return true;\n        };\n        const listWithStateDbMode = (useStateDbOnly: boolean) =>\n          Effect.gen(function* () {\n            const maxPages = Math.max(1, options.maxPages ?? 10);\n            const threads: Array<EffectCodexSchema.V2ThreadListResponse[\"data\"][number]> = [];\n            let cursor: string | null | undefined;\n            for (let page = 0; page < maxPages; page += 1) {\n              const response = yield* client.request(\"thread/list\", {\n                sourceKinds: [\"subAgentThreadSpawn\"],\n                useStateDbOnly,\n                limit: 200,\n                ...(cursor ? { cursor } : {}),\n              });\n              threads.push(\n                ...response.data.filter(\n                  (thread) =>\n                    extractCodexThreadSpawnMetadata(thread)?.providerParentThreadId ===\n                    parentProviderThreadId,\n                ),\n              );\n              if (hasAllCandidates(threads)) {\n                break;\n              }\n              cursor = response.nextCursor;\n              if (!cursor) {\n                break;\n              }\n            }\n            return threads;\n          });\n\n        const stateDbThreads = yield* listWithStateDbMode(true);\n        if (hasAllCandidates(stateDbThreads) || !options.allowScanRepair) {\n          return stateDbThreads;\n        }\n\n        const repairedThreads = yield* listWithStateDbMode(false);\n        const mergedThreadsById = new Map<string, (typeof stateDbThreads)[number]>();\n        for (const thread of stateDbThreads) {\n          mergedThreadsById.set(thread.id, thread);\n        }\n        for (const thread of repairedThreads) {\n          mergedThreadsById.set(thread.id, thread);\n        }\n        const mergedThreads = [...mergedThreadsById.values()];\n        if (candidateProviderThreadIds && !hasAllCandidates(mergedThreads)) {\n          const found = new Set(mergedThreads.map((thread) => thread.id));\n          const missing = [...candidateProviderThreadIds].filter(\n            (candidate) => !found.has(candidate),\n          );\n          if (missing.length > 0) {\n            yield* Effect.logWarning(\"Codex spawned child thread/list candidates missing\", {\n              parentProviderThreadId,\n              missingProviderThreadIds: missing,\n            });\n          }\n        }\n        return mergedThreads;\n      });\n\n    return {\n      start,\n      getSession: Ref.get(sessionRef),\n      registerProviderThreadBinding: rememberProviderThreadBinding,\n      sendTurn: (input) =>\n        readProviderThreadId.pipe(\n          Effect.flatMap((providerThreadId) => sendTurnToProviderThread(providerThreadId, input)),\n        ),\n      sendTurnToProviderThread,\n      steerTurn: (input) =>\n        readProviderThreadId.pipe(\n          Effect.flatMap((providerThreadId) => steerTurnToProviderThread(providerThreadId, input)),\n        ),\n      steerTurnToProviderThread,\n      interruptTurn: (turnId) =>\n        readProviderThreadId.pipe(\n          Effect.flatMap((providerThreadId) =>\n            interruptProviderThreadTurn(providerThreadId, turnId),\n          ),\n        ),\n      interruptProviderThreadTurn,\n      readThread: readProviderThreadId.pipe(Effect.flatMap(readProviderThread)),\n      readProviderThread,\n      rollbackThread: (numTurns) =>\n        readProviderThreadId.pipe(\n          Effect.flatMap((providerThreadId) => rollbackProviderThread(providerThreadId, numTurns)),\n        ),\n      rollbackProviderThread,\n      listSpawnedChildThreads,\n      refreshUsage: refreshAccountRateLimits,\n      respondToRequest: (requestId, decision) =>\n        Effect.gen(function* () {\n          const pending = (yield* Ref.get(pendingApprovalsRef)).get(requestId);\n          if (!pending) {\n            return yield* new CodexSessionRuntimePendingApprovalNotFoundError({\n              requestId,\n            });\n          }\n          yield* Ref.update(pendingApprovalsRef, (current) => {\n            const next = new Map(current);\n            next.delete(requestId);\n            return next;\n          });\n          yield* Deferred.succeed(pending.decision, decision);\n          yield* emitEvent({\n            kind: \"notification\",\n            threadId: pending.threadId,\n            method: \"item/requestApproval/decision\",\n            requestId: pending.requestId,\n            requestKind: pending.requestKind,\n            ...(pending.turnId ? { turnId: pending.turnId } : {}),\n            ...(pending.itemId ? { itemId: pending.itemId } : {}),\n            payload: {\n              requestId: pending.requestId,\n              requestKind: pending.requestKind,\n              decision,\n            },\n          });\n        }),\n      respondToUserInput: (requestId, answers) =>\n        Effect.gen(function* () {\n          const pending = (yield* Ref.get(pendingUserInputsRef)).get(requestId);\n          if (!pending) {\n            return yield* new CodexSessionRuntimePendingUserInputNotFoundError({\n              requestId,\n            });\n          }\n          const codexAnswers = yield* toCodexUserInputAnswers(answers);\n          yield* Ref.update(pendingUserInputsRef, (current) => {\n            const next = new Map(current);\n            next.delete(requestId);\n            return next;\n          });\n          yield* Deferred.succeed(pending.answers, answers);\n          yield* emitEvent({\n            kind: \"notification\",\n            threadId: pending.threadId,\n            method: \"item/tool/requestUserInput/answered\",\n            requestId: pending.requestId,\n            ...(pending.turnId ? { turnId: pending.turnId } : {}),\n            ...(pending.itemId ? { itemId: pending.itemId } : {}),\n            payload: {\n              answers: codexAnswers,\n            },\n          });\n        }),\n      events: Stream.fromQueue(events),\n      close,\n    } satisfies CodexSessionRuntimeShape;\n  });\n","/**\n * CodexAdapterLive - Scoped live implementation for the Codex provider adapter.\n *\n * Wraps the typed Codex session runtime behind the `CodexAdapter` service\n * contract and maps runtime failures into the shared `ProviderAdapterError`\n * algebra.\n *\n * @module CodexAdapterLive\n */\nimport {\n  type CanonicalItemType,\n  type CanonicalRequestType,\n  CHAT_IMAGE_ATTACHMENT_MAX_BYTES,\n  type CodexSettings,\n  EventId,\n  MessageId,\n  ProviderDriverKind,\n  type ProviderEvent,\n  ProviderInstanceId,\n  type ProviderRuntimeEvent,\n  type ProviderRequestKind,\n  type ThreadTokenUsageSnapshot,\n  type ProviderUserInputAnswers,\n  RuntimeItemId,\n  RuntimeRequestId,\n  RuntimeSubagentId,\n  ProviderApprovalDecision,\n  ThreadId,\n  TrimmedNonEmptyString,\n  ProviderSendTurnInput,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Option from \"effect/Option\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Queue from \"effect/Queue\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as CodexClient from \"effect-codex-app-server/client\";\nimport * as CodexErrors from \"effect-codex-app-server/errors\";\nimport * as EffectCodexSchema from \"effect-codex-app-server/schema\";\nimport {\n  makeKeyedCoalescingWorker,\n  type KeyedCoalescingWorker,\n} from \"@salchi/shared/KeyedCoalescingWorker\";\n\nimport {\n  getModelSelectionBooleanOptionValue,\n  getModelSelectionStringOptionValue,\n} from \"@salchi/shared/model\";\nimport { getCodexServiceTierOptionValue } from \"../../codexModelOptions.ts\";\n\nimport {\n  ProviderAdapterRequestError,\n  ProviderAdapterProcessError,\n  ProviderAdapterSessionClosedError,\n  ProviderAdapterSessionNotFoundError,\n  ProviderAdapterValidationError,\n  type ProviderAdapterError,\n} from \"../Errors.ts\";\nimport { type CodexAdapterShape } from \"../Services/CodexAdapter.ts\";\nimport { resolveAttachmentPath } from \"../../attachmentStore.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport { imageMimeTypeFromFileName } from \"../../imageMime.ts\";\nimport { reapManagedChildProcesses } from \"../../process/ManagedChildProcessRegistry.ts\";\nimport {\n  formatPdfAttachmentReferenceText,\n  toProviderAttachmentReference,\n} from \"../attachmentInputs.ts\";\nimport {\n  CodexResumeCursorSchema,\n  CodexSessionRuntimeThreadIdMissingError,\n  CODEX_USAGE_REFRESH_TIMEOUT,\n  makeCodexAppServerClient,\n  makeCodexSessionRuntime,\n  type CodexAppServerClientHandle,\n  type CodexSpawnedChildThreadListOptions,\n  type CodexSessionRuntimeError,\n  type CodexSessionRuntimeOptions,\n  type CodexSessionRuntimeShape,\n  type CodexThreadSnapshot,\n  type MakeCodexAppServerClientOptions,\n} from \"./CodexSessionRuntime.ts\";\nimport { type EventNdjsonLogger, makeEventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\nimport {\n  codexChildThreadId,\n  extractCodexSubagentMetadata,\n  extractCodexThreadSpawnMetadata,\n} from \"./CodexChildThreads.ts\";\nimport { INDEPENDENT_THREAD_TOOL_METHOD } from \"../IndependentThreadTool.ts\";\nconst isCodexAppServerProcessExitedError = Schema.is(CodexErrors.CodexAppServerProcessExitedError);\nconst isCodexAppServerTransportError = Schema.is(CodexErrors.CodexAppServerTransportError);\nconst isCodexSessionRuntimeThreadIdMissingError = Schema.is(\n  CodexSessionRuntimeThreadIdMissingError,\n);\nconst isCodexResumeCursorSchema = Schema.is(CodexResumeCursorSchema);\n\nconst PROVIDER = ProviderDriverKind.make(\"codex\");\n\nexport interface CodexAdapterLiveOptions {\n  readonly instanceId?: ProviderInstanceId;\n  readonly environment?: NodeJS.ProcessEnv;\n  readonly makeRuntime?: (\n    options: CodexSessionRuntimeOptions,\n  ) => Effect.Effect<\n    CodexSessionRuntimeShape,\n    CodexSessionRuntimeError,\n    ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n  >;\n  readonly makeCodexAppServerClient?: (\n    options: MakeCodexAppServerClientOptions,\n  ) => Effect.Effect<\n    CodexAppServerClientHandle,\n    CodexErrors.CodexAppServerError,\n    ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n  >;\n  readonly nativeEventLogPath?: string;\n  readonly nativeEventLogger?: EventNdjsonLogger;\n}\n\ninterface CodexAdapterRootSessionContext {\n  readonly kind: \"root\";\n  readonly threadId: ThreadId;\n  readonly scope: Scope.Closeable;\n  readonly runtime: CodexSessionRuntimeShape;\n  readonly eventFiber: Fiber.Fiber<void, never>;\n  readonly childThreadIds: Set<ThreadId>;\n  readonly stoppedChildThreadIds: Set<ThreadId>;\n  readonly stoppedChildProviderThreadIds: Set<string>;\n  readonly childThreadStartedMetadataByProviderThreadId: Map<\n    string,\n    { readonly key: string; readonly score: number }\n  >;\n  readonly recoveryWorker: KeyedCoalescingWorker<ThreadId, CodexChildRecoveryWork>;\n  providerThreadId?: string;\n  stopped: boolean;\n}\n\ninterface CodexAdapterChildSessionContext {\n  readonly kind: \"child\";\n  readonly threadId: ThreadId;\n  readonly parentThreadId: ThreadId;\n  readonly rootThreadId: ThreadId;\n  readonly providerThreadId: string;\n  readonly runtime: CodexSessionRuntimeShape;\n  stopped: boolean;\n}\n\ntype CodexAdapterSessionContext = CodexAdapterRootSessionContext | CodexAdapterChildSessionContext;\n\ninterface CodexChildBackfillWork {\n  readonly threadId: ThreadId;\n  readonly providerThreadId: string;\n}\n\ninterface CodexChildHydrationWork {\n  readonly candidateProviderThreadIds?: ReadonlySet<string>;\n  readonly allowScanRepair?: boolean;\n  readonly maxPages?: number;\n  readonly reason?: string;\n}\n\ninterface CodexChildRecoveryWork {\n  readonly root: CodexAdapterRootSessionContext;\n  readonly backfills: ReadonlyMap<string, CodexChildBackfillWork>;\n  readonly hydrations: ReadonlyArray<CodexChildHydrationWork>;\n}\n\nfunction mapCodexRuntimeError(\n  threadId: ThreadId,\n  method: string,\n  error: CodexSessionRuntimeError,\n): ProviderAdapterError {\n  if (isCodexAppServerProcessExitedError(error) || isCodexAppServerTransportError(error)) {\n    return new ProviderAdapterSessionClosedError({\n      provider: PROVIDER,\n      threadId,\n      cause: error,\n    });\n  }\n\n  if (isCodexSessionRuntimeThreadIdMissingError(error)) {\n    return new ProviderAdapterSessionNotFoundError({\n      provider: PROVIDER,\n      threadId,\n      cause: error,\n    });\n  }\n\n  return new ProviderAdapterRequestError({\n    provider: PROVIDER,\n    method,\n    detail: error.message,\n    cause: error,\n  });\n}\n\ntype CodexLifecycleItem =\n  | EffectCodexSchema.V2ItemStartedNotification[\"item\"]\n  | EffectCodexSchema.V2ItemCompletedNotification[\"item\"]\n  | CodexThreadSnapshot[\"turns\"][number][\"items\"][number];\n\ntype CodexToolUserInputQuestion =\n  | EffectCodexSchema.ServerRequest__ToolRequestUserInputQuestion\n  | EffectCodexSchema.ToolRequestUserInputParams__ToolRequestUserInputQuestion;\n\nconst ApprovalDecisionPayload = Schema.Struct({\n  decision: ProviderApprovalDecision,\n});\n\nconst SalchiThreadCreateNotificationPayload = Schema.Struct({\n  threadId: ThreadId,\n  title: TrimmedNonEmptyString,\n  initialPrompt: Schema.optional(TrimmedNonEmptyString),\n  initialMessageId: Schema.optional(MessageId),\n  titleSeed: Schema.optional(TrimmedNonEmptyString),\n  createdByThreadId: Schema.optional(ThreadId),\n  sourceItemId: Schema.optional(RuntimeItemId),\n  branch: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  worktreePath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n  workspaceRoot: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),\n});\n\nfunction readPayload<A>(\n  schema: Schema.Schema<A>,\n  payload: ProviderEvent[\"payload\"],\n): A | undefined {\n  const isPayload = Schema.is(schema);\n  return isPayload(payload) ? payload : undefined;\n}\n\nfunction readSalchiParentThreadId(payload: unknown): ThreadId | undefined {\n  if (!isRecord(payload)) return undefined;\n  const raw = payload.salchiParentThreadId;\n  return typeof raw === \"string\" && raw.trim().length > 0 ? ThreadId.make(raw) : undefined;\n}\n\nfunction trimText(value: string | undefined | null): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n  return typeof value === \"string\" ? trimText(value) : undefined;\n}\n\nfunction readStringArray(value: unknown): ReadonlyArray<string> {\n  return Array.isArray(value)\n    ? value.flatMap((entry) => {\n        const text = readString(entry);\n        return text ? [text] : [];\n      })\n    : [];\n}\n\nconst FATAL_CODEX_STDERR_SNIPPETS = [\"failed to connect to websocket\"];\n\nfunction isFatalCodexProcessStderrMessage(message: string): boolean {\n  const normalized = message.toLowerCase();\n  return FATAL_CODEX_STDERR_SNIPPETS.some((snippet) => normalized.includes(snippet));\n}\n\nfunction normalizeCodexTokenUsage(\n  usage: EffectCodexSchema.V2ThreadTokenUsageUpdatedNotification[\"tokenUsage\"],\n): ThreadTokenUsageSnapshot | undefined {\n  const totalProcessedTokens = usage.total.totalTokens;\n  const usedTokens = usage.last.totalTokens;\n  if (usedTokens === undefined || usedTokens <= 0) {\n    return undefined;\n  }\n\n  const maxTokens = usage.modelContextWindow ?? undefined;\n  const inputTokens = usage.last.inputTokens;\n  const cachedInputTokens = usage.last.cachedInputTokens;\n  const outputTokens = usage.last.outputTokens;\n  const reasoningOutputTokens = usage.last.reasoningOutputTokens;\n\n  return {\n    usedTokens,\n    ...(totalProcessedTokens !== undefined && totalProcessedTokens > usedTokens\n      ? { totalProcessedTokens }\n      : {}),\n    ...(maxTokens !== undefined ? { maxTokens } : {}),\n    ...(inputTokens !== undefined ? { inputTokens } : {}),\n    ...(cachedInputTokens !== undefined ? { cachedInputTokens } : {}),\n    ...(outputTokens !== undefined ? { outputTokens } : {}),\n    ...(reasoningOutputTokens !== undefined ? { reasoningOutputTokens } : {}),\n    ...(usedTokens !== undefined ? { lastUsedTokens: usedTokens } : {}),\n    ...(inputTokens !== undefined ? { lastInputTokens: inputTokens } : {}),\n    ...(cachedInputTokens !== undefined ? { lastCachedInputTokens: cachedInputTokens } : {}),\n    ...(outputTokens !== undefined ? { lastOutputTokens: outputTokens } : {}),\n    ...(reasoningOutputTokens !== undefined\n      ? { lastReasoningOutputTokens: reasoningOutputTokens }\n      : {}),\n    compactsAutomatically: true,\n  };\n}\n\nfunction resolveCodexApprovalsReviewer(\n  modelSelection: ProviderSendTurnInput[\"modelSelection\"] | undefined,\n  boundInstanceId: ProviderInstanceId,\n): EffectCodexSchema.V2TurnStartParams__ApprovalsReviewer | undefined {\n  if (modelSelection?.instanceId !== boundInstanceId) {\n    return undefined;\n  }\n  const autoReview = getModelSelectionBooleanOptionValue(modelSelection, \"autoReview\");\n  if (autoReview === true) {\n    return \"auto_review\";\n  }\n  if (autoReview === false) {\n    return \"user\";\n  }\n  return undefined;\n}\n\nfunction toTurnStatus(\n  value: EffectCodexSchema.V2TurnCompletedNotification[\"turn\"][\"status\"] | \"cancelled\",\n): \"completed\" | \"failed\" | \"cancelled\" | \"interrupted\" {\n  switch (value) {\n    case \"completed\":\n    case \"failed\":\n    case \"cancelled\":\n    case \"interrupted\":\n      return value;\n    default:\n      return \"completed\";\n  }\n}\n\nfunction normalizeItemType(raw: string | undefined | null): string {\n  const type = trimText(raw);\n  if (!type) return \"item\";\n  return type\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/[._/-]/g, \" \")\n    .replace(/\\s+/g, \" \")\n    .trim()\n    .toLowerCase();\n}\n\nfunction toCanonicalItemType(raw: string | undefined | null): CanonicalItemType {\n  const type = normalizeItemType(raw);\n  if (type.includes(\"user\")) return \"user_message\";\n  if (type.includes(\"agent message\") || type.includes(\"assistant\")) return \"assistant_message\";\n  if (type.includes(\"reasoning\") || type.includes(\"thought\")) return \"reasoning\";\n  if (type.includes(\"plan\") || type.includes(\"todo\")) return \"plan\";\n  if (type.includes(\"command\")) return \"command_execution\";\n  if (type.includes(\"file change\") || type.includes(\"patch\") || type.includes(\"edit\"))\n    return \"file_change\";\n  if (type.includes(\"mcp\")) return \"mcp_tool_call\";\n  if (type.includes(\"dynamic tool\")) return \"dynamic_tool_call\";\n  if (type.includes(\"collab\") || type.includes(\"sub agent\") || type.includes(\"agent activity\"))\n    return \"collab_agent_tool_call\";\n  if (type.includes(\"web search\")) return \"web_search\";\n  if (type.includes(\"image\")) return \"image_view\";\n  if (type.includes(\"review entered\")) return \"review_entered\";\n  if (type.includes(\"review exited\")) return \"review_exited\";\n  if (type.includes(\"compact\")) return \"context_compaction\";\n  if (type.includes(\"error\")) return \"error\";\n  return \"unknown\";\n}\n\nfunction itemTitle(itemType: CanonicalItemType): string | undefined {\n  switch (itemType) {\n    case \"assistant_message\":\n      return \"Assistant message\";\n    case \"user_message\":\n      return \"User message\";\n    case \"reasoning\":\n      return \"Reasoning\";\n    case \"plan\":\n      return \"Plan\";\n    case \"command_execution\":\n      return \"Ran command\";\n    case \"file_change\":\n      return \"File change\";\n    case \"mcp_tool_call\":\n      return \"MCP tool call\";\n    case \"dynamic_tool_call\":\n      return \"Tool call\";\n    case \"collab_agent_tool_call\":\n      return \"Subagent task\";\n    case \"web_search\":\n      return \"Web search\";\n    case \"image_view\":\n      return \"Image view\";\n    case \"error\":\n      return \"Error\";\n    default:\n      return undefined;\n  }\n}\n\nfunction itemDetail(item: CodexLifecycleItem): string | undefined {\n  const candidates = [\n    \"command\" in item ? item.command : undefined,\n    \"title\" in item ? item.title : undefined,\n    \"summary\" in item ? item.summary : undefined,\n    \"text\" in item ? item.text : undefined,\n    \"path\" in item ? item.path : undefined,\n    \"prompt\" in item ? item.prompt : undefined,\n  ];\n  for (const candidate of candidates) {\n    const trimmed = typeof candidate === \"string\" ? trimText(candidate) : undefined;\n    if (!trimmed) continue;\n    return trimmed;\n  }\n  return undefined;\n}\n\nfunction isoFromUnixSeconds(value: number | null | undefined, fallback: string): string {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return fallback;\n  }\n  return DateTime.formatIso(DateTime.makeUnsafe(value * 1000));\n}\n\nfunction runtimeTurnStateFromSnapshotStatus(\n  status: string,\n): \"completed\" | \"failed\" | \"interrupted\" | undefined {\n  switch (status) {\n    case \"completed\":\n      return \"completed\";\n    case \"failed\":\n      return \"failed\";\n    case \"interrupted\":\n      return \"interrupted\";\n    default:\n      return undefined;\n  }\n}\n\nfunction runtimeItemStatusFromSnapshotItem(\n  item: CodexThreadSnapshot[\"turns\"][number][\"items\"][number],\n): \"inProgress\" | \"completed\" | \"failed\" | \"declined\" | undefined {\n  if (!(\"status\" in item) || typeof item.status !== \"string\") {\n    return undefined;\n  }\n  switch (item.status) {\n    case \"inProgress\":\n    case \"completed\":\n    case \"failed\":\n    case \"declined\":\n      return item.status;\n    default:\n      return undefined;\n  }\n}\n\nfunction backfillEventId(...parts: ReadonlyArray<string>): EventId {\n  return EventId.make([\"codex-snapshot-backfill\", ...parts].join(\":\"));\n}\n\nfunction codexThreadSnapshotBackfillEvents(input: {\n  readonly threadId: ThreadId;\n  readonly providerInstanceId: ProviderInstanceId;\n  readonly snapshot: CodexThreadSnapshot;\n  readonly fallbackCreatedAt: string;\n}): ReadonlyArray<ProviderRuntimeEvent> {\n  const events: ProviderRuntimeEvent[] = [];\n\n  for (const turn of input.snapshot.turns) {\n    const turnStartedAt = isoFromUnixSeconds(turn.startedAt, input.fallbackCreatedAt);\n    const turnCompletedAt = isoFromUnixSeconds(\n      turn.completedAt ?? turn.startedAt,\n      input.fallbackCreatedAt,\n    );\n    events.push({\n      eventId: backfillEventId(input.snapshot.threadId, turn.id, \"turn-started\"),\n      provider: PROVIDER,\n      providerInstanceId: input.providerInstanceId,\n      threadId: input.threadId,\n      turnId: turn.id,\n      createdAt: turnStartedAt,\n      type: \"turn.started\",\n      payload: {},\n    });\n\n    for (const item of turn.items) {\n      const itemId = RuntimeItemId.make(item.id);\n      const itemType = toCanonicalItemType(item.type);\n      const detail = itemDetail(item);\n      const status = runtimeItemStatusFromSnapshotItem(item);\n      const eventType = status === \"inProgress\" ? \"item.updated\" : \"item.completed\";\n      const generatedImages = generatedImagePayloadsFromItem(item);\n      for (const [index, generatedImage] of generatedImages.entries()) {\n        events.push({\n          eventId: backfillEventId(\n            input.snapshot.threadId,\n            turn.id,\n            item.id,\n            \"image-generated\",\n            String(index),\n          ),\n          provider: PROVIDER,\n          providerInstanceId: input.providerInstanceId,\n          threadId: input.threadId,\n          turnId: turn.id,\n          itemId,\n          createdAt: turnCompletedAt,\n          type: \"image.generated\",\n          payload: generatedImage,\n        });\n      }\n      events.push({\n        eventId: backfillEventId(input.snapshot.threadId, turn.id, item.id, eventType),\n        provider: PROVIDER,\n        providerInstanceId: input.providerInstanceId,\n        threadId: input.threadId,\n        turnId: turn.id,\n        itemId,\n        createdAt: turnCompletedAt,\n        type: eventType,\n        payload: {\n          itemType,\n          ...(status ? { status } : {}),\n          ...(itemTitle(itemType) ? { title: itemTitle(itemType) } : {}),\n          ...(detail ? { detail } : {}),\n          data: {\n            source: \"codex.thread-read.backfill\",\n            providerThreadId: input.snapshot.threadId,\n            item,\n          },\n        },\n      });\n    }\n\n    const turnState = runtimeTurnStateFromSnapshotStatus(turn.status);\n    if (turnState) {\n      events.push({\n        eventId: backfillEventId(input.snapshot.threadId, turn.id, \"turn-completed\"),\n        provider: PROVIDER,\n        providerInstanceId: input.providerInstanceId,\n        threadId: input.threadId,\n        turnId: turn.id,\n        createdAt: turnCompletedAt,\n        type: \"turn.completed\",\n        payload: {\n          state: turnState,\n          ...(turn.errorMessage ? { errorMessage: turn.errorMessage } : {}),\n        },\n      });\n    }\n  }\n\n  return events;\n}\n\ninterface GeneratedImagePayload {\n  readonly name: string;\n  readonly dataUrl: string;\n}\n\nfunction imageDataUrl(value: unknown): string | undefined {\n  const url = readString(value);\n  return url && /^data:image\\/[^;,]+;base64,/i.test(url) ? url : undefined;\n}\n\nfunction base64ImageDataUrl(input: {\n  readonly data: unknown;\n  readonly mimeType: unknown;\n}): string | undefined {\n  const data = readString(input.data);\n  const mimeType = readString(input.mimeType)?.toLowerCase();\n  if (!data || !mimeType?.startsWith(\"image/\")) {\n    return undefined;\n  }\n  return `data:${mimeType};base64,${data}`;\n}\n\nfunction imagePayloadFromToolContentItem(\n  contentItem: unknown,\n  name: string,\n): GeneratedImagePayload | undefined {\n  if (!isRecord(contentItem)) {\n    return undefined;\n  }\n\n  const type = readString(contentItem.type);\n  if (type === \"inputImage\") {\n    const dataUrl = imageDataUrl(contentItem.imageUrl);\n    return dataUrl ? { name, dataUrl } : undefined;\n  }\n  if (type === \"input_image\") {\n    const dataUrl = imageDataUrl(contentItem.image_url);\n    return dataUrl ? { name, dataUrl } : undefined;\n  }\n  if (type === \"image\") {\n    const dataUrl = base64ImageDataUrl({\n      data: contentItem.data,\n      mimeType: contentItem.mimeType ?? contentItem.mime_type,\n    });\n    return dataUrl ? { name, dataUrl } : undefined;\n  }\n  if (type === \"resource\" && isRecord(contentItem.resource)) {\n    const dataUrl = base64ImageDataUrl({\n      data: contentItem.resource.blob,\n      mimeType: contentItem.resource.mimeType ?? contentItem.resource.mime_type,\n    });\n    return dataUrl ? { name, dataUrl } : undefined;\n  }\n  return undefined;\n}\n\nfunction generatedImagePayloadsFromItem(item: unknown): ReadonlyArray<GeneratedImagePayload> {\n  if (!isRecord(item)) {\n    return [];\n  }\n\n  const type = readString(item.type);\n  const itemId = readString(item.id) ?? \"tool-output\";\n  if (type === \"imageGeneration\" || type === \"image_generation_call\") {\n    const result = readString(item.result);\n    if (!result) {\n      return [];\n    }\n    return [\n      {\n        name: `${itemId}.png`,\n        dataUrl: imageDataUrl(result) ?? `data:image/png;base64,${result}`,\n      },\n    ];\n  }\n\n  const contentItems =\n    type === \"dynamicToolCall\"\n      ? item.contentItems\n      : type === \"mcpToolCall\" && isRecord(item.result)\n        ? item.result.content\n        : undefined;\n  if (!Array.isArray(contentItems)) {\n    return [];\n  }\n\n  const images: GeneratedImagePayload[] = [];\n  for (const contentItem of contentItems) {\n    const imageNumber = images.length + 1;\n    const image = imagePayloadFromToolContentItem(contentItem, `${itemId}-image-${imageNumber}`);\n    if (image) {\n      images.push(image);\n    }\n  }\n  return images;\n}\n\nfunction imageGeneratedRuntimeEventsFromItem(\n  event: ProviderEvent,\n  canonicalThreadId: ThreadId,\n  item: unknown,\n): ReadonlyArray<ProviderRuntimeEvent> {\n  return generatedImagePayloadsFromItem(item).map((generatedImage, index) => ({\n    ...runtimeEventBase(event, canonicalThreadId),\n    eventId: EventId.make(`${event.id}:image:${index}`),\n    type: \"image.generated\",\n    payload: generatedImage,\n  }));\n}\n\nfunction toRequestTypeFromMethod(method: string): CanonicalRequestType {\n  switch (method) {\n    case \"item/commandExecution/requestApproval\":\n      return \"command_execution_approval\";\n    case \"item/fileRead/requestApproval\":\n      return \"file_read_approval\";\n    case \"item/fileChange/requestApproval\":\n      return \"file_change_approval\";\n    case \"applyPatchApproval\":\n      return \"apply_patch_approval\";\n    case \"execCommandApproval\":\n      return \"exec_command_approval\";\n    case \"item/tool/requestUserInput\":\n      return \"tool_user_input\";\n    case \"item/tool/call\":\n      return \"dynamic_tool_call\";\n    case \"account/chatgptAuthTokens/refresh\":\n      return \"auth_tokens_refresh\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction toRequestTypeFromKind(kind: ProviderRequestKind | undefined): CanonicalRequestType {\n  switch (kind) {\n    case \"command\":\n      return \"command_execution_approval\";\n    case \"file-read\":\n      return \"file_read_approval\";\n    case \"file-change\":\n      return \"file_change_approval\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction toCanonicalUserInputAnswers(\n  answers: EffectCodexSchema.ToolRequestUserInputResponse[\"answers\"],\n): ProviderUserInputAnswers {\n  return Object.fromEntries(\n    Object.entries(answers).map(([questionId, value]) => {\n      const normalizedAnswers = value.answers.length === 1 ? value.answers[0]! : [...value.answers];\n      return [questionId, normalizedAnswers] as const;\n    }),\n  );\n}\n\nfunction toUserInputQuestions(questions: ReadonlyArray<CodexToolUserInputQuestion>) {\n  const parsedQuestions = questions\n    .map((question) => {\n      const options =\n        question.options\n          ?.map((option) => {\n            const label = trimText(option.label);\n            const description = trimText(option.description);\n            if (!label || !description) {\n              return undefined;\n            }\n            return { label, description };\n          })\n          .filter((option) => option !== undefined) ?? [];\n\n      const id = trimText(question.id);\n      const header = trimText(question.header);\n      const prompt = trimText(question.question);\n      if (!id || !header || !prompt || options.length === 0) {\n        return undefined;\n      }\n      return {\n        id,\n        header,\n        question: prompt,\n        options,\n        multiSelect: false,\n      };\n    })\n    .filter((question) => question !== undefined);\n\n  return parsedQuestions.length > 0 ? parsedQuestions : undefined;\n}\n\nfunction toThreadState(\n  status: EffectCodexSchema.V2ThreadStatusChangedNotification[\"status\"],\n): \"active\" | \"idle\" | \"archived\" | \"closed\" | \"compacted\" | \"error\" {\n  switch (status.type) {\n    case \"idle\":\n      return \"idle\";\n    case \"systemError\":\n      return \"error\";\n    default:\n      return \"active\";\n  }\n}\n\nfunction contentStreamKindFromMethod(\n  method: string,\n):\n  | \"assistant_text\"\n  | \"reasoning_text\"\n  | \"reasoning_summary_text\"\n  | \"plan_text\"\n  | \"command_output\"\n  | \"file_change_output\" {\n  switch (method) {\n    case \"item/agentMessage/delta\":\n      return \"assistant_text\";\n    case \"item/reasoning/textDelta\":\n      return \"reasoning_text\";\n    case \"item/reasoning/summaryTextDelta\":\n      return \"reasoning_summary_text\";\n    case \"item/commandExecution/outputDelta\":\n      return \"command_output\";\n    case \"item/fileChange/outputDelta\":\n      return \"file_change_output\";\n    default:\n      return \"assistant_text\";\n  }\n}\n\nfunction asRuntimeItemId(itemId: ProviderEvent[\"itemId\"] & string): RuntimeItemId {\n  return RuntimeItemId.make(itemId);\n}\n\nfunction asRuntimeSubagentId(subagentId: string): RuntimeSubagentId {\n  return RuntimeSubagentId.make(subagentId);\n}\n\nfunction asRuntimeRequestId(requestId: string): RuntimeRequestId {\n  return RuntimeRequestId.make(requestId);\n}\n\nfunction eventRawSource(event: ProviderEvent): NonNullable<ProviderRuntimeEvent[\"raw\"]>[\"source\"] {\n  return event.kind === \"request\" ? \"codex.app-server.request\" : \"codex.app-server.notification\";\n}\n\nfunction providerRefsFromEvent(\n  event: ProviderEvent,\n): ProviderRuntimeEvent[\"providerRefs\"] | undefined {\n  const refs: Record<string, string> = {};\n  if (event.turnId) refs.providerTurnId = event.turnId;\n  if (event.itemId) refs.providerItemId = event.itemId;\n  if (event.requestId) refs.providerRequestId = event.requestId;\n\n  return Object.keys(refs).length > 0 ? (refs as ProviderRuntimeEvent[\"providerRefs\"]) : undefined;\n}\n\nfunction runtimeEventBase(\n  event: ProviderEvent,\n  canonicalThreadId: ThreadId,\n): Omit<ProviderRuntimeEvent, \"type\" | \"payload\"> {\n  const refs = providerRefsFromEvent(event);\n  return {\n    eventId: event.id,\n    provider: event.provider,\n    threadId: canonicalThreadId,\n    createdAt: event.createdAt,\n    ...(event.turnId ? { turnId: event.turnId } : {}),\n    ...(event.itemId ? { itemId: asRuntimeItemId(event.itemId) } : {}),\n    ...(event.requestId ? { requestId: asRuntimeRequestId(event.requestId) } : {}),\n    ...(refs ? { providerRefs: refs } : {}),\n    raw: {\n      source: eventRawSource(event),\n      method: event.method,\n      payload: event.payload ?? {},\n    },\n  };\n}\n\nfunction subagentNicknameFromPath(agentPath: string | undefined): string | undefined {\n  if (!agentPath) {\n    return undefined;\n  }\n  const segments = agentPath.split(/[\\\\/]/).map((segment) => trimText(segment));\n  const basename = segments.findLast((segment) => segment !== undefined);\n  if (!basename) {\n    return undefined;\n  }\n  return trimText(basename.replace(/\\.[^.]+$/, \"\")) ?? basename;\n}\n\nfunction subagentNicknameFromPrompt(prompt: string | undefined): string | undefined {\n  if (!prompt) {\n    return undefined;\n  }\n  const match = prompt.match(/\\byour\\s+nickname\\s+is\\s+([A-Za-z][\\w-]{0,63})\\b/i);\n  return match?.[1] ? trimText(match[1]) : undefined;\n}\n\nfunction collabAgentMetadataFromState(\n  record: Record<string, unknown>,\n  subagentId: string,\n): { readonly role?: string; readonly nickname?: string; readonly path?: string } {\n  const agentsStates = isRecord(record.agentsStates) ? record.agentsStates : null;\n  const state =\n    agentsStates && isRecord(agentsStates[subagentId]) ? agentsStates[subagentId] : null;\n  if (!state) {\n    return {};\n  }\n\n  const agentPath =\n    readString(state.agentPath) ?? readString(state.agent_path) ?? readString(state.path);\n  const role = readString(state.agentRole) ?? readString(state.agent_role) ?? agentPath;\n  const nickname =\n    readString(state.agentNickname) ??\n    readString(state.agent_nickname) ??\n    readString(state.nickname) ??\n    readString(state.agentName) ??\n    readString(state.name) ??\n    subagentNicknameFromPrompt(readString(record.prompt)) ??\n    subagentNicknameFromPath(agentPath);\n\n  return {\n    ...(role ? { role } : {}),\n    ...(nickname ? { nickname } : {}),\n    ...(agentPath ? { path: agentPath } : {}),\n  };\n}\n\nfunction readCollabAgentReceiverThreadIds(item: unknown): string[] {\n  if (!isRecord(item) || readString(item.type) !== \"collabAgentToolCall\") {\n    return [];\n  }\n  return [...readStringArray(item.receiverThreadIds)];\n}\n\nfunction shouldHydrateSpawnedChildrenFromCollabTool(item: unknown): boolean {\n  if (!isRecord(item) || readCollabAgentReceiverThreadIds(item).length === 0) {\n    return false;\n  }\n  if (readString(item.status) !== \"completed\") {\n    return false;\n  }\n\n  switch (readString(item.tool)) {\n    case \"spawnAgent\":\n    case \"wait\":\n    case \"closeAgent\":\n      return true;\n    default:\n      return false;\n  }\n}\n\nfunction subAgentActivityThreadId(item: unknown): string | undefined {\n  if (\n    !isRecord(item) ||\n    readString(item.type) !== \"subAgentActivity\" ||\n    readString(item.kind) !== \"started\"\n  ) {\n    return undefined;\n  }\n  return readString(item.agentThreadId);\n}\n\nfunction codexChildHydrationInputFromEvent(\n  event: ProviderEvent,\n): { readonly candidateProviderThreadIds: ReadonlySet<string>; readonly reason: string } | null {\n  if (event.method !== \"item/completed\") {\n    return null;\n  }\n  if (!isRecord(event.payload)) {\n    return null;\n  }\n  const item = event.payload.item;\n  const activityThreadId = subAgentActivityThreadId(item);\n  if (activityThreadId) {\n    return {\n      candidateProviderThreadIds: new Set([activityThreadId]),\n      reason: \"subagent-activity:started\",\n    };\n  }\n  if (!shouldHydrateSpawnedChildrenFromCollabTool(item)) {\n    return null;\n  }\n  const receiverThreadIds = readCollabAgentReceiverThreadIds(item);\n  if (receiverThreadIds.length === 0) {\n    return null;\n  }\n  const tool = isRecord(item) ? readString(item.tool) : undefined;\n  return {\n    candidateProviderThreadIds: new Set(receiverThreadIds),\n    reason: tool ? `collab-agent:${tool}` : \"collab-agent\",\n  };\n}\n\nfunction childThreadSpawnMetadataFromEvent(\n  event: ProviderEvent,\n  providerThreadId: string,\n): {\n  readonly subagentNickname?: string;\n  readonly subagentRole?: string;\n  readonly subagentPath?: string;\n} {\n  if (!isRecord(event.payload) || !isRecord(event.payload.item)) {\n    return {};\n  }\n  const item = event.payload.item;\n  if (\n    readString(item.type) === \"subAgentActivity\" &&\n    readString(item.agentThreadId) === providerThreadId\n  ) {\n    const path = readString(item.agentPath) ?? readString(item.agent_path);\n    const role = readString(item.agentRole) ?? readString(item.agent_role) ?? path;\n    const nickname =\n      readString(item.agentNickname) ??\n      readString(item.agent_nickname) ??\n      subagentNicknameFromPath(path);\n    return {\n      ...(nickname ? { subagentNickname: nickname } : {}),\n      ...(role ? { subagentRole: role } : {}),\n      ...(path ? { subagentPath: path } : {}),\n    };\n  }\n\n  const metadata = collabAgentMetadataFromState(item, providerThreadId);\n  return {\n    ...(metadata.nickname ? { subagentNickname: metadata.nickname } : {}),\n    ...(metadata.role ? { subagentRole: metadata.role } : {}),\n    ...(metadata.path ? { subagentPath: metadata.path } : {}),\n  };\n}\n\nfunction codexCollabToolSummary(\n  tool: string | undefined,\n  lifecycle: \"item.started\" | \"item.completed\",\n  status: string | undefined,\n): string {\n  if (status === \"failed\") {\n    return \"Subagent action failed\";\n  }\n\n  switch (tool) {\n    case \"spawnAgent\":\n      return lifecycle === \"item.started\" ? \"Subagent started\" : \"Subagent spawned\";\n    case \"sendInput\":\n      return lifecycle === \"item.started\" ? \"Sending input to subagent\" : \"Subagent input sent\";\n    case \"resumeAgent\":\n      return lifecycle === \"item.started\" ? \"Resuming subagent\" : \"Subagent resumed\";\n    case \"wait\":\n      return lifecycle === \"item.started\" ? \"Waiting on subagent\" : \"Subagent wait completed\";\n    case \"closeAgent\":\n      return lifecycle === \"item.started\" ? \"Closing subagent\" : \"Subagent closed\";\n    default:\n      return lifecycle === \"item.started\"\n        ? \"Subagent activity started\"\n        : \"Subagent activity completed\";\n  }\n}\n\nfunction codexSubagentEventsFromLifecycle(\n  event: ProviderEvent,\n  canonicalThreadId: ThreadId,\n  lifecycle: \"item.started\" | \"item.completed\",\n  item: CodexLifecycleItem,\n): ReadonlyArray<ProviderRuntimeEvent> {\n  if (!isRecord(item)) {\n    return [];\n  }\n\n  const record = item as Record<string, unknown>;\n  const itemType = readString(record.type);\n  if (itemType === \"subAgentActivity\") {\n    const subagentThreadId = readString(record.agentThreadId);\n    if (!subagentThreadId) {\n      return [];\n    }\n\n    const agentPath = readString(record.agentPath);\n    const nickname = subagentNicknameFromPath(agentPath);\n    const commonPayload = {\n      subagentId: asRuntimeSubagentId(subagentThreadId),\n      providerThreadId: subagentThreadId,\n      ...(event.turnId ? { parentTurnId: event.turnId } : {}),\n      ...(event.itemId ? { sourceItemId: asRuntimeItemId(event.itemId) } : {}),\n      ...(agentPath ? { role: agentPath } : {}),\n      ...(nickname && nickname !== agentPath ? { nickname } : {}),\n    };\n\n    switch (readString(record.kind)) {\n      case \"started\":\n        return [\n          {\n            ...runtimeEventBase(event, canonicalThreadId),\n            type: \"subagent.started\",\n            payload: {\n              ...commonPayload,\n              status: \"running\",\n              summary: \"Subagent started\",\n            },\n          },\n        ];\n      case \"interacted\":\n        return [\n          {\n            ...runtimeEventBase(event, canonicalThreadId),\n            type: \"subagent.updated\",\n            payload: {\n              ...commonPayload,\n              status: \"running\",\n              summary: \"Subagent active\",\n            },\n          },\n        ];\n      case \"interrupted\":\n        return [\n          {\n            ...runtimeEventBase(event, canonicalThreadId),\n            type: \"subagent.completed\",\n            payload: {\n              ...commonPayload,\n              status: \"interrupted\",\n              summary: \"Subagent interrupted\",\n            },\n          },\n        ];\n      default:\n        return [];\n    }\n  }\n\n  if (itemType !== \"collabAgentToolCall\") {\n    return [];\n  }\n\n  const receiverThreadIds = readStringArray(record.receiverThreadIds);\n  const fallbackId = readString(record.id);\n  const subagentIds =\n    receiverThreadIds.length > 0 ? receiverThreadIds : fallbackId ? [fallbackId] : [];\n  if (subagentIds.length === 0) {\n    return [];\n  }\n\n  const tool = readString(record.tool);\n  const status = readString(record.status);\n  const model = readString(record.model);\n  const prompt = readString(record.prompt);\n  const receiverThreadIdSet = new Set(receiverThreadIds);\n  const summary = codexCollabToolSummary(tool, lifecycle, status);\n\n  return subagentIds.map((subagentId) => {\n    const metadata = collabAgentMetadataFromState(record, subagentId);\n    const commonPayload = {\n      subagentId: asRuntimeSubagentId(subagentId),\n      ...(receiverThreadIdSet.has(subagentId) ? { providerThreadId: subagentId } : {}),\n      ...(event.turnId ? { parentTurnId: event.turnId } : {}),\n      ...(event.itemId ? { sourceItemId: asRuntimeItemId(event.itemId) } : {}),\n      ...metadata,\n      ...(model ? { model } : {}),\n      ...(prompt ? { prompt } : {}),\n      summary,\n    };\n\n    if (tool === \"spawnAgent\" && lifecycle === \"item.started\") {\n      return {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"subagent.started\",\n        payload: {\n          ...commonPayload,\n          status: \"running\",\n        },\n      };\n    }\n\n    if (tool === \"spawnAgent\" && lifecycle === \"item.completed\" && status === \"failed\") {\n      return {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"subagent.completed\",\n        payload: {\n          ...commonPayload,\n          status: \"failed\",\n          error: summary,\n        },\n      };\n    }\n\n    if (tool === \"closeAgent\" && lifecycle === \"item.completed\" && status === \"completed\") {\n      return {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"subagent.completed\",\n        payload: {\n          ...commonPayload,\n          status: \"stopped\",\n        },\n      };\n    }\n\n    return {\n      ...runtimeEventBase(event, canonicalThreadId),\n      type: \"subagent.updated\",\n      payload: {\n        ...commonPayload,\n        ...(status === \"failed\" ? {} : { status: \"running\" }),\n        ...(tool ? { lastToolName: tool } : {}),\n      },\n    };\n  });\n}\n\nfunction mapItemLifecycle(\n  event: ProviderEvent,\n  canonicalThreadId: ThreadId,\n  lifecycle: \"item.started\" | \"item.updated\" | \"item.completed\",\n): ProviderRuntimeEvent | undefined {\n  const payload =\n    readPayload(EffectCodexSchema.V2ItemStartedNotification, event.payload) ??\n    readPayload(EffectCodexSchema.V2ItemCompletedNotification, event.payload);\n  const item = payload?.item;\n  if (!item) {\n    return undefined;\n  }\n  const itemType = toCanonicalItemType(item.type);\n  if (itemType === \"unknown\" && lifecycle !== \"item.updated\") {\n    return undefined;\n  }\n\n  const detail = itemDetail(item);\n  const status =\n    lifecycle === \"item.started\"\n      ? \"inProgress\"\n      : lifecycle === \"item.completed\"\n        ? \"completed\"\n        : undefined;\n\n  return {\n    ...runtimeEventBase(event, canonicalThreadId),\n    type: lifecycle,\n    payload: {\n      itemType,\n      ...(status ? { status } : {}),\n      ...(itemTitle(itemType) ? { title: itemTitle(itemType) } : {}),\n      ...(detail ? { detail } : {}),\n      ...(event.payload !== undefined ? { data: event.payload } : {}),\n    },\n  };\n}\n\nfunction mapToRuntimeEvents(\n  event: ProviderEvent,\n  canonicalThreadId: ThreadId,\n): ReadonlyArray<ProviderRuntimeEvent> {\n  if (event.kind === \"error\") {\n    if (!event.message) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"runtime.error\",\n        payload: {\n          message: event.message,\n          class: \"provider_error\",\n          ...(event.payload !== undefined ? { detail: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === INDEPENDENT_THREAD_TOOL_METHOD) {\n    const payload = readPayload(SalchiThreadCreateNotificationPayload, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"thread.independent.created\",\n        payload: {\n          threadId: payload.threadId,\n          title: payload.title,\n          createdByThreadId: payload.createdByThreadId ?? canonicalThreadId,\n          ...(payload.initialPrompt ? { initialPrompt: payload.initialPrompt } : {}),\n          ...(payload.initialMessageId ? { initialMessageId: payload.initialMessageId } : {}),\n          ...(payload.titleSeed ? { titleSeed: payload.titleSeed } : {}),\n          ...(payload.sourceItemId ? { sourceItemId: payload.sourceItemId } : {}),\n          ...(payload.branch !== undefined ? { branch: payload.branch } : {}),\n          ...(payload.worktreePath !== undefined ? { worktreePath: payload.worktreePath } : {}),\n          ...(payload.workspaceRoot !== undefined ? { workspaceRoot: payload.workspaceRoot } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.kind === \"request\") {\n    if (event.method === \"item/tool/requestUserInput\") {\n      const payload =\n        readPayload(EffectCodexSchema.ServerRequest__ToolRequestUserInputParams, event.payload) ??\n        readPayload(EffectCodexSchema.ToolRequestUserInputParams, event.payload);\n      const questions = payload ? toUserInputQuestions(payload.questions) : undefined;\n      if (!questions) {\n        return [];\n      }\n      return [\n        {\n          ...runtimeEventBase(event, canonicalThreadId),\n          type: \"user-input.requested\",\n          payload: {\n            questions,\n          },\n        },\n      ];\n    }\n\n    const detail = (() => {\n      switch (event.method) {\n        case \"item/commandExecution/requestApproval\": {\n          const payload = readPayload(\n            EffectCodexSchema.ServerRequest__CommandExecutionRequestApprovalParams,\n            event.payload,\n          );\n          return payload?.command ?? payload?.reason ?? undefined;\n        }\n        case \"item/fileChange/requestApproval\": {\n          const payload = readPayload(\n            EffectCodexSchema.ServerRequest__FileChangeRequestApprovalParams,\n            event.payload,\n          );\n          return payload?.reason ?? undefined;\n        }\n        case \"applyPatchApproval\": {\n          const payload = readPayload(\n            EffectCodexSchema.ServerRequest__ApplyPatchApprovalParams,\n            event.payload,\n          );\n          return payload?.reason ?? undefined;\n        }\n        case \"execCommandApproval\": {\n          const payload = readPayload(\n            EffectCodexSchema.ServerRequest__ExecCommandApprovalParams,\n            event.payload,\n          );\n          return payload?.reason ?? payload?.command.join(\" \");\n        }\n        case \"item/tool/call\": {\n          const payload = readPayload(\n            EffectCodexSchema.ServerRequest__DynamicToolCallParams,\n            event.payload,\n          );\n          return payload?.tool ?? undefined;\n        }\n        default:\n          return undefined;\n      }\n    })();\n\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"request.opened\",\n        payload: {\n          requestType: toRequestTypeFromMethod(event.method),\n          ...(detail ? { detail } : {}),\n          ...(event.payload !== undefined ? { args: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/requestApproval/decision\" && event.requestId) {\n    const payload = readPayload(ApprovalDecisionPayload, event.payload);\n    const requestType =\n      event.requestKind !== undefined\n        ? toRequestTypeFromKind(event.requestKind)\n        : toRequestTypeFromMethod(event.method);\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"request.resolved\",\n        payload: {\n          requestType,\n          ...(payload ? { decision: payload.decision } : {}),\n          ...(event.payload !== undefined ? { resolution: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"session/connecting\") {\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"session.state.changed\",\n        payload: {\n          state: \"starting\",\n          ...(event.message ? { reason: event.message } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"session/ready\") {\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"session.state.changed\",\n        payload: {\n          state: \"ready\",\n          ...(event.message ? { reason: event.message } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"session/started\") {\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"session.started\",\n        payload: {\n          ...(event.message ? { message: event.message } : {}),\n          ...(event.payload !== undefined ? { resume: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"session/exited\" || event.method === \"session/closed\") {\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"session.exited\",\n        payload: {\n          ...(event.message ? { reason: event.message } : {}),\n          ...(event.method === \"session/closed\" ? { exitKind: \"graceful\" } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/started\") {\n    const payload = readPayload(EffectCodexSchema.V2ThreadStartedNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    const metadata = extractCodexSubagentMetadata(payload.thread);\n    const parentThreadId = readSalchiParentThreadId(event.payload);\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"thread.started\",\n        payload: {\n          providerThreadId: payload.thread.id,\n          ...(metadata?.providerParentThreadId\n            ? { providerParentThreadId: metadata.providerParentThreadId }\n            : {}),\n          ...(parentThreadId ? { parentThreadId } : {}),\n          ...(metadata?.subagentKind ? { subagentKind: metadata.subagentKind } : {}),\n          ...(metadata?.subagentNickname ? { subagentNickname: metadata.subagentNickname } : {}),\n          ...(metadata?.subagentRole ? { subagentRole: metadata.subagentRole } : {}),\n          ...(metadata?.subagentPath ? { subagentPath: metadata.subagentPath } : {}),\n          ...(metadata ? { hiddenFromThreadList: metadata.hiddenFromThreadList } : {}),\n        },\n      },\n    ];\n  }\n\n  if (\n    event.method === \"thread/status/changed\" ||\n    event.method === \"thread/archived\" ||\n    event.method === \"thread/unarchived\" ||\n    event.method === \"thread/closed\" ||\n    event.method === \"thread/compacted\"\n  ) {\n    const payload =\n      event.method === \"thread/status/changed\"\n        ? readPayload(EffectCodexSchema.V2ThreadStatusChangedNotification, event.payload)\n        : undefined;\n    return [\n      {\n        type: \"thread.state.changed\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          state:\n            event.method === \"thread/archived\"\n              ? \"archived\"\n              : event.method === \"thread/closed\"\n                ? \"closed\"\n                : event.method === \"thread/compacted\"\n                  ? \"compacted\"\n                  : payload\n                    ? toThreadState(payload.status)\n                    : \"active\",\n          ...(event.payload !== undefined ? { detail: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/name/updated\") {\n    const payload = readPayload(EffectCodexSchema.V2ThreadNameUpdatedNotification, event.payload);\n    return [\n      {\n        type: \"thread.metadata.updated\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          ...(trimText(payload?.threadName) ? { name: trimText(payload?.threadName) } : {}),\n          ...(payload\n            ? {\n                metadata: {\n                  threadId: payload.threadId,\n                  ...(payload.threadName !== undefined && payload.threadName !== null\n                    ? { threadName: payload.threadName }\n                    : {}),\n                },\n              }\n            : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/tokenUsage/updated\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ThreadTokenUsageUpdatedNotification,\n      event.payload,\n    );\n    const normalizedUsage = payload ? normalizeCodexTokenUsage(payload.tokenUsage) : undefined;\n    if (!normalizedUsage) {\n      return [];\n    }\n    return [\n      {\n        type: \"thread.token-usage.updated\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          usage: normalizedUsage,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"turn/started\") {\n    const turnId = event.turnId;\n    if (!turnId) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        turnId,\n        type: \"turn.started\",\n        payload: {},\n      },\n    ];\n  }\n\n  if (event.method === \"turn/completed\") {\n    const payload = readPayload(EffectCodexSchema.V2TurnCompletedNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    const errorMessage = trimText(payload.turn.error?.message);\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"turn.completed\",\n        payload: {\n          state: toTurnStatus(payload.turn.status),\n          ...(errorMessage ? { errorMessage } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"turn/aborted\") {\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"turn.aborted\",\n        payload: {\n          reason: event.message ?? \"Turn aborted\",\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"turn/plan/updated\") {\n    const payload = readPayload(EffectCodexSchema.V2TurnPlanUpdatedNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"turn.plan.updated\",\n        payload: {\n          ...(trimText(payload.explanation) ? { explanation: trimText(payload.explanation) } : {}),\n          plan: payload.plan.map((step) => ({\n            step: trimText(step.step) ?? \"step\",\n            status:\n              step.status === \"completed\" || step.status === \"inProgress\" ? step.status : \"pending\",\n          })),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"turn/diff/updated\") {\n    const payload = readPayload(EffectCodexSchema.V2TurnDiffUpdatedNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"turn.diff.updated\",\n        payload: {\n          unifiedDiff: payload.diff,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"rawResponseItem/completed\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2RawResponseItemCompletedNotification,\n      event.payload,\n    );\n    const generatedEvents = imageGeneratedRuntimeEventsFromItem(\n      event,\n      canonicalThreadId,\n      payload?.item,\n    );\n    return generatedEvents;\n  }\n\n  if (event.method === \"item/started\") {\n    const payload = readPayload(EffectCodexSchema.V2ItemStartedNotification, event.payload);\n    const generatedEvents = imageGeneratedRuntimeEventsFromItem(\n      event,\n      canonicalThreadId,\n      payload?.item,\n    );\n    const started = mapItemLifecycle(event, canonicalThreadId, \"item.started\");\n    const subagentEvents = payload?.item\n      ? codexSubagentEventsFromLifecycle(event, canonicalThreadId, \"item.started\", payload.item)\n      : [];\n    return [...generatedEvents, ...(started ? [started] : []), ...subagentEvents];\n  }\n\n  if (event.method === \"item/completed\") {\n    const payload = readPayload(EffectCodexSchema.V2ItemCompletedNotification, event.payload);\n    const item = payload?.item;\n    if (!item) {\n      return [];\n    }\n    const itemType = toCanonicalItemType(item.type);\n    if (itemType === \"plan\") {\n      const detail = itemDetail(item);\n      if (!detail) {\n        return [];\n      }\n      return [\n        {\n          ...runtimeEventBase(event, canonicalThreadId),\n          type: \"turn.proposed.completed\",\n          payload: {\n            planMarkdown: detail,\n          },\n        },\n      ];\n    }\n    const generatedEvents = imageGeneratedRuntimeEventsFromItem(event, canonicalThreadId, item);\n    const completed = mapItemLifecycle(event, canonicalThreadId, \"item.completed\");\n    const subagentEvents = codexSubagentEventsFromLifecycle(\n      event,\n      canonicalThreadId,\n      \"item.completed\",\n      item,\n    );\n    return [...generatedEvents, ...(completed ? [completed] : []), ...subagentEvents];\n  }\n\n  if (\n    event.method === \"item/reasoning/summaryPartAdded\" ||\n    event.method === \"item/commandExecution/terminalInteraction\"\n  ) {\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"item.updated\",\n        payload: {\n          itemType:\n            event.method === \"item/reasoning/summaryPartAdded\" ? \"reasoning\" : \"command_execution\",\n          ...(event.payload !== undefined ? { data: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/plan/delta\") {\n    const payload = readPayload(EffectCodexSchema.V2PlanDeltaNotification, event.payload);\n    const delta = event.textDelta ?? payload?.delta;\n    if (!delta || delta.length === 0) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"turn.proposed.delta\",\n        payload: {\n          delta,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/agentMessage/delta\") {\n    const payload = readPayload(EffectCodexSchema.V2AgentMessageDeltaNotification, event.payload);\n    const delta = event.textDelta ?? payload?.delta;\n    if (!delta || delta.length === 0) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"content.delta\",\n        payload: {\n          streamKind: contentStreamKindFromMethod(event.method),\n          delta,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/commandExecution/outputDelta\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2CommandExecutionOutputDeltaNotification,\n      event.payload,\n    );\n    const delta = event.textDelta ?? payload?.delta;\n    if (!delta || delta.length === 0) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"content.delta\",\n        payload: {\n          streamKind: \"command_output\",\n          delta,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/fileChange/outputDelta\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2FileChangeOutputDeltaNotification,\n      event.payload,\n    );\n    const delta = event.textDelta ?? payload?.delta;\n    if (!delta || delta.length === 0) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"content.delta\",\n        payload: {\n          streamKind: \"file_change_output\",\n          delta,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/reasoning/summaryTextDelta\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ReasoningSummaryTextDeltaNotification,\n      event.payload,\n    );\n    const delta = event.textDelta ?? payload?.delta;\n    if (!delta || delta.length === 0) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"content.delta\",\n        payload: {\n          streamKind: \"reasoning_summary_text\",\n          delta,\n          ...(payload ? { summaryIndex: payload.summaryIndex } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/reasoning/textDelta\") {\n    const payload = readPayload(EffectCodexSchema.V2ReasoningTextDeltaNotification, event.payload);\n    const delta = event.textDelta ?? payload?.delta;\n    if (!delta || delta.length === 0) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"content.delta\",\n        payload: {\n          streamKind: \"reasoning_text\",\n          delta,\n          ...(payload ? { contentIndex: payload.contentIndex } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/mcpToolCall/progress\") {\n    const payload = readPayload(EffectCodexSchema.V2McpToolCallProgressNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"tool.progress\",\n        payload: {\n          summary: payload.message,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"serverRequest/resolved\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ServerRequestResolvedNotification,\n      event.payload,\n    );\n    if (!payload) {\n      return [];\n    }\n    const requestType = toRequestTypeFromKind(event.requestKind);\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"request.resolved\",\n        payload: {\n          requestType,\n          ...(event.payload !== undefined ? { resolution: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"item/tool/requestUserInput/answered\") {\n    const payload = readPayload(EffectCodexSchema.ToolRequestUserInputResponse, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        type: \"user-input.resolved\",\n        payload: {\n          answers: toCanonicalUserInputAnswers(payload.answers),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"model/rerouted\") {\n    const payload = readPayload(EffectCodexSchema.V2ModelReroutedNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"model.rerouted\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          fromModel: payload.fromModel,\n          toModel: payload.toModel,\n          reason: payload.reason,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"deprecationNotice\") {\n    const payload = readPayload(EffectCodexSchema.V2DeprecationNoticeNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"deprecation.notice\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          summary: payload.summary,\n          ...(trimText(payload.details) ? { details: trimText(payload.details) } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"configWarning\") {\n    const payload = readPayload(EffectCodexSchema.V2ConfigWarningNotification, event.payload);\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"config.warning\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          summary: payload.summary,\n          ...(trimText(payload.details) ? { details: trimText(payload.details) } : {}),\n          ...(trimText(payload.path) ? { path: trimText(payload.path) } : {}),\n          ...(payload.range !== undefined && payload.range !== null\n            ? { range: payload.range }\n            : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"account/updated\") {\n    if (!readPayload(EffectCodexSchema.V2AccountUpdatedNotification, event.payload)) {\n      return [];\n    }\n    return [\n      {\n        type: \"account.updated\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          account: event.payload ?? {},\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"account/rateLimits/updated\") {\n    if (!readPayload(EffectCodexSchema.V2AccountRateLimitsUpdatedNotification, event.payload)) {\n      return [];\n    }\n    return [\n      {\n        type: \"account.rate-limits.updated\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          rateLimits: event.payload ?? {},\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"mcpServer/oauthLogin/completed\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2McpServerOauthLoginCompletedNotification,\n      event.payload,\n    );\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"mcp.oauth.completed\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          success: payload.success,\n          name: payload.name,\n          ...(trimText(payload.error) ? { error: trimText(payload.error) } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/realtime/started\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ThreadRealtimeStartedNotification,\n      event.payload,\n    );\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"thread.realtime.started\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          realtimeSessionId: payload.realtimeSessionId ?? undefined,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/realtime/itemAdded\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ThreadRealtimeItemAddedNotification,\n      event.payload,\n    );\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"thread.realtime.item-added\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          item: payload.item,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/realtime/outputAudio/delta\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ThreadRealtimeOutputAudioDeltaNotification,\n      event.payload,\n    );\n    if (!payload) {\n      return [];\n    }\n    return [\n      {\n        type: \"thread.realtime.audio.delta\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          audio: payload.audio,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/realtime/error\") {\n    const payload = readPayload(EffectCodexSchema.V2ThreadRealtimeErrorNotification, event.payload);\n    const message = payload?.message ?? event.message ?? \"Realtime error\";\n    return [\n      {\n        type: \"thread.realtime.error\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          message,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"thread/realtime/closed\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2ThreadRealtimeClosedNotification,\n      event.payload,\n    );\n    return [\n      {\n        type: \"thread.realtime.closed\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          reason: payload?.reason ?? event.message,\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"error\") {\n    const payload = readPayload(EffectCodexSchema.V2ErrorNotification, event.payload);\n    const message = payload?.error.message ?? event.message ?? \"Provider runtime error\";\n    const willRetry = payload?.willRetry === true;\n    return [\n      {\n        type: willRetry ? \"runtime.warning\" : \"runtime.error\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          message,\n          ...(!willRetry ? { class: \"provider_error\" as const } : {}),\n          ...(event.payload !== undefined ? { detail: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"process/stderr\") {\n    const message = event.message ?? \"Codex process stderr\";\n    const isFatal = isFatalCodexProcessStderrMessage(message);\n    return [\n      isFatal\n        ? {\n            type: \"runtime.error\",\n            ...runtimeEventBase(event, canonicalThreadId),\n            payload: {\n              message,\n              class: \"provider_error\" as const,\n              ...(event.payload !== undefined ? { detail: event.payload } : {}),\n            },\n          }\n        : {\n            type: \"runtime.warning\",\n            ...runtimeEventBase(event, canonicalThreadId),\n            payload: {\n              message,\n              ...(event.payload !== undefined ? { detail: event.payload } : {}),\n            },\n          },\n    ];\n  }\n\n  if (event.method === \"windows/worldWritableWarning\") {\n    if (!readPayload(EffectCodexSchema.V2WindowsWorldWritableWarningNotification, event.payload)) {\n      return [];\n    }\n    return [\n      {\n        type: \"runtime.warning\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          message: event.message ?? \"Windows world-writable warning\",\n          ...(event.payload !== undefined ? { detail: event.payload } : {}),\n        },\n      },\n    ];\n  }\n\n  if (event.method === \"windowsSandbox/setupCompleted\") {\n    const payload = readPayload(\n      EffectCodexSchema.V2WindowsSandboxSetupCompletedNotification,\n      event.payload,\n    );\n    if (!payload) {\n      return [];\n    }\n    const successMessage = event.message ?? \"Windows sandbox setup completed\";\n    const failureMessage = event.message ?? \"Windows sandbox setup failed\";\n\n    return [\n      {\n        type: \"session.state.changed\",\n        ...runtimeEventBase(event, canonicalThreadId),\n        payload: {\n          state: payload.success === false ? \"error\" : \"ready\",\n          reason: payload.success === false ? failureMessage : successMessage,\n          ...(event.payload !== undefined ? { detail: event.payload } : {}),\n        },\n      },\n      ...(payload.success === false\n        ? [\n            {\n              type: \"runtime.warning\" as const,\n              ...runtimeEventBase(event, canonicalThreadId),\n              payload: {\n                message: failureMessage,\n                ...(event.payload !== undefined ? { detail: event.payload } : {}),\n              },\n            },\n          ]\n        : []),\n    ];\n  }\n\n  return [];\n}\n\n/**\n * Build a Codex provider adapter bound to a specific `CodexSettings` payload.\n *\n * The adapter is a captured closure over `codexConfig` — the `binaryPath` and\n * `homePath` are read from that payload, not from `ServerSettingsService`.\n * This is what makes multi-instance routing possible: each `ProviderInstance`\n * in the registry owns its own closure with its own config, so two Codex\n * instances with different `homePath`s cannot step on each other.\n */\nexport const makeCodexAdapter = Effect.fn(\"makeCodexAdapter\")(function* (\n  codexConfig: CodexSettings,\n  options?: CodexAdapterLiveOptions,\n) {\n  const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(\"codex\");\n  const fileSystem = yield* FileSystem.FileSystem;\n  const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const crypto = yield* Crypto.Crypto;\n  const path = yield* Path.Path;\n  const serverConfig = yield* Effect.service(ServerConfig);\n  const processRegistryDirectory = path.join(\n    serverConfig.providerStatusCacheDir,\n    \"codex-app-servers\",\n  );\n  yield* reapManagedChildProcesses({ registryDirectory: processRegistryDirectory });\n  const nativeEventLogger =\n    options?.nativeEventLogger ??\n    (options?.nativeEventLogPath !== undefined\n      ? yield* makeEventNdjsonLogger(options.nativeEventLogPath, {\n          stream: \"native\",\n        })\n      : undefined);\n  const managedNativeEventLogger =\n    options?.nativeEventLogger === undefined ? nativeEventLogger : undefined;\n  const runtimeEventQueue = yield* Queue.unbounded<ProviderRuntimeEvent>();\n  const sessions = new Map<ThreadId, CodexAdapterSessionContext>();\n  let accountClient:\n    | {\n        readonly scope: Scope.Scope;\n        readonly client: CodexClient.CodexAppServerClientShape;\n      }\n    | undefined;\n\n  const materializeImageViewRuntimeEvents = Effect.fn(\"codex.materializeImageView\")(function* (\n    event: ProviderEvent,\n    canonicalThreadId: ThreadId,\n  ): Effect.fn.Return<ReadonlyArray<ProviderRuntimeEvent>> {\n    if (event.method !== \"item/completed\") {\n      return [];\n    }\n\n    const payload = readPayload(EffectCodexSchema.V2ItemCompletedNotification, event.payload);\n    const item = payload?.item;\n    if (!item || item.type !== \"imageView\") {\n      return [];\n    }\n\n    const imagePath = item.path;\n    const mimeType = imageMimeTypeFromFileName(imagePath);\n    if (!path.isAbsolute(imagePath) || !mimeType) {\n      return [];\n    }\n\n    const fileInfo = yield* fileSystem\n      .stat(imagePath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!fileInfo || fileInfo.type !== \"File\") {\n      return [];\n    }\n\n    const fileSize = Number(fileInfo.size);\n    if (\n      !Number.isSafeInteger(fileSize) ||\n      fileSize <= 0 ||\n      fileSize > CHAT_IMAGE_ATTACHMENT_MAX_BYTES\n    ) {\n      return [];\n    }\n\n    const bytes = yield* fileSystem\n      .readFile(imagePath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (!bytes || bytes.byteLength === 0) {\n      return [];\n    }\n\n    return [\n      {\n        ...runtimeEventBase(event, canonicalThreadId),\n        eventId: EventId.make(`${event.id}:image-view`),\n        type: \"image.generated\",\n        payload: {\n          name: path.basename(imagePath),\n          dataUrl: `data:${mimeType};base64,${Buffer.from(bytes).toString(\"base64\")}`,\n        },\n      },\n    ];\n  });\n\n  const childThreadStartedMetadataKey = (input: {\n    readonly providerThreadId: string;\n    readonly providerParentThreadId: string;\n    readonly parentThreadId: ThreadId;\n    readonly subagentNickname?: string | undefined;\n    readonly subagentRole?: string | undefined;\n    readonly subagentPath?: string | undefined;\n  }): string =>\n    JSON.stringify({\n      providerThreadId: input.providerThreadId,\n      providerParentThreadId: input.providerParentThreadId,\n      parentThreadId: input.parentThreadId,\n      subagentKind: \"thread_spawn\",\n      subagentNickname: input.subagentNickname ?? null,\n      subagentRole: input.subagentRole ?? null,\n      subagentPath: input.subagentPath ?? null,\n      hiddenFromThreadList: false,\n    });\n\n  const childThreadStartedMetadataScore = (input: {\n    readonly subagentNickname?: string | undefined;\n    readonly subagentRole?: string | undefined;\n    readonly subagentPath?: string | undefined;\n  }): number =>\n    (input.subagentNickname ? 1 : 0) + (input.subagentRole ? 1 : 0) + (input.subagentPath ? 1 : 0);\n\n  const childThreadStartedEventId = (input: {\n    readonly providerParentThreadId: string;\n    readonly providerThreadId: string;\n    readonly metadataKey: string;\n  }): EventId => {\n    const suffix = Buffer.from(input.metadataKey).toString(\"base64url\").slice(0, 96);\n    return EventId.make(\n      [\n        \"codex-child-thread-started\",\n        input.providerParentThreadId,\n        input.providerThreadId,\n        suffix,\n      ].join(\":\"),\n    );\n  };\n\n  const registerVirtualChildSession = Effect.fn(\"registerVirtualChildSession\")(function* (input: {\n    readonly root: CodexAdapterRootSessionContext;\n    readonly threadId: ThreadId;\n    readonly parentThreadId: ThreadId;\n    readonly providerThreadId: string;\n  }) {\n    const existing = sessions.get(input.threadId);\n    if (existing && !existing.stopped) {\n      if (existing.kind === \"child\" && existing.providerThreadId === input.providerThreadId) {\n        return;\n      }\n      yield* stopSessionInternal(existing);\n    }\n\n    yield* input.root.runtime.registerProviderThreadBinding({\n      providerThreadId: input.providerThreadId,\n      threadId: input.threadId,\n      parentThreadId: input.parentThreadId,\n    });\n    input.root.childThreadIds.add(input.threadId);\n    sessions.set(input.threadId, {\n      kind: \"child\",\n      threadId: input.threadId,\n      parentThreadId: input.parentThreadId,\n      rootThreadId: input.root.threadId,\n      providerThreadId: input.providerThreadId,\n      runtime: input.root.runtime,\n      stopped: false,\n    });\n  });\n\n  const emitMaterializedChildThreadStarted = Effect.fn(\"emitMaterializedChildThreadStarted\")(\n    function* (input: {\n      readonly root: CodexAdapterRootSessionContext;\n      readonly threadId: ThreadId;\n      readonly providerThreadId: string;\n      readonly createdAt: string;\n      readonly subagentNickname?: string | undefined;\n      readonly subagentRole?: string | undefined;\n      readonly subagentPath?: string | undefined;\n      readonly raw?: ProviderRuntimeEvent[\"raw\"] | undefined;\n      readonly providerRefs?: ProviderRuntimeEvent[\"providerRefs\"] | undefined;\n    }) {\n      const providerParentThreadId = input.root.providerThreadId;\n      if (!providerParentThreadId) {\n        return;\n      }\n      const metadataKey = childThreadStartedMetadataKey({\n        providerThreadId: input.providerThreadId,\n        providerParentThreadId,\n        parentThreadId: input.root.threadId,\n        subagentNickname: input.subagentNickname,\n        subagentRole: input.subagentRole,\n        subagentPath: input.subagentPath,\n      });\n      const metadataScore = childThreadStartedMetadataScore(input);\n      const previousMetadata = input.root.childThreadStartedMetadataByProviderThreadId.get(\n        input.providerThreadId,\n      );\n      if (\n        previousMetadata?.key === metadataKey ||\n        (previousMetadata?.score ?? -1) > metadataScore\n      ) {\n        return;\n      }\n      input.root.childThreadStartedMetadataByProviderThreadId.set(input.providerThreadId, {\n        key: metadataKey,\n        score: metadataScore,\n      });\n\n      yield* Queue.offer(runtimeEventQueue, {\n        eventId: childThreadStartedEventId({\n          providerParentThreadId,\n          providerThreadId: input.providerThreadId,\n          metadataKey,\n        }),\n        provider: PROVIDER,\n        providerInstanceId: boundInstanceId,\n        threadId: input.threadId,\n        createdAt: input.createdAt,\n        type: \"thread.started\",\n        payload: {\n          providerThreadId: input.providerThreadId,\n          providerParentThreadId,\n          parentThreadId: input.root.threadId,\n          subagentKind: \"thread_spawn\",\n          hiddenFromThreadList: false,\n          ...(input.subagentNickname ? { subagentNickname: input.subagentNickname } : {}),\n          ...(input.subagentRole ? { subagentRole: input.subagentRole } : {}),\n          ...(input.subagentPath ? { subagentPath: input.subagentPath } : {}),\n        },\n        ...(input.providerRefs ? { providerRefs: input.providerRefs } : {}),\n        ...(input.raw ? { raw: input.raw } : {}),\n      });\n    },\n  );\n\n  const ensureMaterializedCandidateChildSessions = Effect.fn(\n    \"ensureMaterializedCandidateChildSessions\",\n  )(function* (\n    root: CodexAdapterRootSessionContext,\n    event: ProviderEvent,\n    hydration: CodexChildHydrationWork,\n  ) {\n    if (!root.providerThreadId || !hydration.candidateProviderThreadIds) {\n      return;\n    }\n\n    yield* Effect.forEach(\n      hydration.candidateProviderThreadIds,\n      (providerThreadId) =>\n        Effect.gen(function* () {\n          if (root.stoppedChildProviderThreadIds.has(providerThreadId)) {\n            return;\n          }\n\n          const threadId = codexChildThreadId(boundInstanceId, providerThreadId);\n          if (root.stoppedChildThreadIds.has(threadId)) {\n            return;\n          }\n\n          const existing = sessions.get(threadId);\n          if (\n            !existing ||\n            existing.stopped ||\n            existing.kind !== \"child\" ||\n            existing.providerThreadId !== providerThreadId\n          ) {\n            yield* registerVirtualChildSession({\n              root,\n              threadId,\n              parentThreadId: root.threadId,\n              providerThreadId,\n            });\n          }\n\n          const metadata = childThreadSpawnMetadataFromEvent(event, providerThreadId);\n          yield* emitMaterializedChildThreadStarted({\n            root,\n            threadId,\n            providerThreadId,\n            createdAt: event.createdAt,\n            ...metadata,\n            providerRefs: providerRefsFromEvent(event),\n            raw: {\n              source: eventRawSource(event),\n              method: event.method,\n              payload: event.payload ?? {},\n            },\n          });\n          yield* enqueueChildBackfillRecovery(root, { threadId, providerThreadId });\n        }),\n      { concurrency: 1, discard: true },\n    );\n  });\n\n  const enqueueChildThreadSnapshotBackfill = Effect.fn(\"enqueueChildThreadSnapshotBackfill\")(\n    function* (input: {\n      readonly root: CodexAdapterRootSessionContext;\n      readonly threadId: ThreadId;\n      readonly providerThreadId: string;\n    }) {\n      const rootSession = yield* input.root.runtime.getSession;\n      const snapshot = yield* input.root.runtime.readProviderThread(input.providerThreadId);\n      const runtimeEvents = codexThreadSnapshotBackfillEvents({\n        threadId: input.threadId,\n        providerInstanceId: boundInstanceId,\n        snapshot,\n        fallbackCreatedAt: rootSession.updatedAt,\n      });\n      if (runtimeEvents.length > 0) {\n        yield* Queue.offerAll(runtimeEventQueue, runtimeEvents);\n      }\n    },\n  );\n\n  const registerVirtualChildFromThreadStartedEvent = Effect.fn(\n    \"registerVirtualChildFromThreadStartedEvent\",\n  )(function* (root: CodexAdapterRootSessionContext, event: ProviderEvent) {\n    if (event.method !== \"thread/started\" || event.threadId === root.threadId) {\n      return;\n    }\n    if (root.stoppedChildThreadIds.has(event.threadId)) {\n      return;\n    }\n    const payload = readPayload(EffectCodexSchema.V2ThreadStartedNotification, event.payload);\n    if (!payload) {\n      return;\n    }\n    if (root.stoppedChildProviderThreadIds.has(payload.thread.id)) {\n      return;\n    }\n    const metadata = extractCodexThreadSpawnMetadata(payload.thread);\n    if (!metadata) {\n      return;\n    }\n    yield* registerVirtualChildSession({\n      root,\n      threadId: event.threadId,\n      parentThreadId: readSalchiParentThreadId(event.payload) ?? root.threadId,\n      providerThreadId: payload.thread.id,\n    });\n  });\n\n  const hydrateSpawnedChildSessions = Effect.fn(\"hydrateSpawnedChildSessions\")(function* (\n    root: CodexAdapterRootSessionContext,\n    options?: CodexSpawnedChildThreadListOptions & {\n      readonly reason?: string;\n    },\n  ) {\n    if (!root.providerThreadId) {\n      return;\n    }\n    const children = yield* root.runtime.listSpawnedChildThreads(root.providerThreadId, options);\n    const rootSession = yield* root.runtime.getSession;\n    yield* Effect.forEach(\n      children,\n      (thread) =>\n        Effect.gen(function* () {\n          const metadata = extractCodexThreadSpawnMetadata(thread);\n          if (!metadata) {\n            return;\n          }\n          if (\n            options?.candidateProviderThreadIds &&\n            !options.candidateProviderThreadIds.has(thread.id)\n          ) {\n            return;\n          }\n          if (root.stoppedChildProviderThreadIds.has(thread.id)) {\n            return;\n          }\n          const threadId = codexChildThreadId(boundInstanceId, thread.id);\n          if (root.stoppedChildThreadIds.has(threadId)) {\n            return;\n          }\n          const existing = sessions.get(threadId);\n          if (\n            !existing ||\n            existing.stopped ||\n            existing.kind !== \"child\" ||\n            existing.providerThreadId !== thread.id\n          ) {\n            yield* registerVirtualChildSession({\n              root,\n              threadId,\n              parentThreadId: root.threadId,\n              providerThreadId: thread.id,\n            });\n          }\n          yield* emitMaterializedChildThreadStarted({\n            root,\n            threadId,\n            providerThreadId: thread.id,\n            createdAt: rootSession.updatedAt,\n            subagentNickname: metadata.subagentNickname,\n            subagentRole: metadata.subagentRole,\n            subagentPath: metadata.subagentPath,\n            raw: {\n              source: \"codex.app-server.notification\",\n              method: \"thread/started\",\n              payload: {\n                thread,\n                salchiParentThreadId: root.threadId,\n              },\n            },\n          });\n          yield* enqueueChildBackfillRecovery(root, {\n            threadId,\n            providerThreadId: thread.id,\n          });\n        }),\n      { concurrency: 1, discard: true },\n    );\n  });\n\n  const emptyRecoveryWork = (root: CodexAdapterRootSessionContext): CodexChildRecoveryWork => ({\n    root,\n    backfills: new Map(),\n    hydrations: [],\n  });\n\n  const mergeRecoveryWork = (\n    current: CodexChildRecoveryWork,\n    next: CodexChildRecoveryWork,\n  ): CodexChildRecoveryWork => {\n    const backfills = new Map(current.backfills);\n    for (const [providerThreadId, backfill] of next.backfills) {\n      backfills.set(providerThreadId, backfill);\n    }\n    return {\n      root: next.root,\n      backfills,\n      hydrations: [...current.hydrations, ...next.hydrations],\n    };\n  };\n\n  const processChildRecoveryWork = (work: CodexChildRecoveryWork) =>\n    Effect.gen(function* () {\n      if (work.root.stopped) {\n        return;\n      }\n      yield* Effect.forEach(\n        Array.from(work.backfills.values()),\n        (backfill) =>\n          enqueueChildThreadSnapshotBackfill({\n            root: work.root,\n            threadId: backfill.threadId,\n            providerThreadId: backfill.providerThreadId,\n          }).pipe(\n            Effect.catchCause((cause) =>\n              Effect.logWarning(\"failed to backfill Codex spawned child thread\", {\n                threadId: backfill.threadId,\n                providerThreadId: backfill.providerThreadId,\n                cause,\n              }),\n            ),\n          ),\n        { concurrency: 1, discard: true },\n      );\n      yield* Effect.forEach(\n        work.hydrations,\n        (hydration) =>\n          hydrateSpawnedChildSessions(work.root, hydration).pipe(\n            Effect.catchCause((cause) =>\n              Effect.logWarning(\"failed to hydrate Codex spawned child threads\", {\n                threadId: work.root.threadId,\n                reason: hydration.reason,\n                candidateProviderThreadIds: hydration.candidateProviderThreadIds\n                  ? [...hydration.candidateProviderThreadIds]\n                  : undefined,\n                cause,\n              }),\n            ),\n          ),\n        { concurrency: 1, discard: true },\n      );\n    });\n\n  const enqueueChildBackfillRecovery = (\n    root: CodexAdapterRootSessionContext,\n    backfill: CodexChildBackfillWork,\n  ) =>\n    root.recoveryWorker.enqueue(root.threadId, {\n      ...emptyRecoveryWork(root),\n      backfills: new Map([[backfill.providerThreadId, backfill]]),\n    });\n\n  const enqueueChildHydrationRecovery = (\n    root: CodexAdapterRootSessionContext,\n    hydration: CodexChildHydrationWork = {},\n  ) =>\n    root.recoveryWorker.enqueue(root.threadId, {\n      ...emptyRecoveryWork(root),\n      hydrations: [hydration],\n    });\n\n  const startSession: CodexAdapterShape[\"startSession\"] = (input) =>\n    Effect.scoped(\n      Effect.gen(function* () {\n        if (input.provider !== undefined && input.provider !== PROVIDER) {\n          return yield* new ProviderAdapterValidationError({\n            provider: PROVIDER,\n            operation: \"startSession\",\n            issue: `Expected provider '${PROVIDER}' but received '${input.provider}'.`,\n          });\n        }\n\n        const existing = sessions.get(input.threadId);\n        if (existing && !existing.stopped) {\n          yield* Effect.suspend(() => stopSessionInternal(existing));\n        }\n\n        const approvalsReviewer = resolveCodexApprovalsReviewer(\n          input.modelSelection,\n          boundInstanceId,\n        );\n        const serviceTier =\n          input.modelSelection?.instanceId === boundInstanceId\n            ? getCodexServiceTierOptionValue(input.modelSelection)\n            : undefined;\n        const runtimeInput: CodexSessionRuntimeOptions = {\n          threadId: input.threadId,\n          providerInstanceId: boundInstanceId,\n          cwd: input.cwd ?? process.cwd(),\n          binaryPath: codexConfig.binaryPath,\n          processRegistryDirectory,\n          ...(options?.environment ? { environment: options.environment } : {}),\n          ...(codexConfig.homePath ? { homePath: codexConfig.homePath } : {}),\n          ...(isCodexResumeCursorSchema(input.resumeCursor)\n            ? { resumeCursor: input.resumeCursor }\n            : {}),\n          runtimeMode: input.runtimeMode,\n          ...(input.modelSelection?.instanceId === boundInstanceId\n            ? { model: input.modelSelection.model }\n            : {}),\n          ...(serviceTier ? { serviceTier } : {}),\n          ...(approvalsReviewer\n            ? {\n                approvalsReviewer:\n                  approvalsReviewer as EffectCodexSchema.V2ThreadStartParams__ApprovalsReviewer,\n              }\n            : {}),\n        };\n        const sessionScope = yield* Scope.make(\"sequential\");\n        let sessionScopeTransferred = false;\n        yield* Effect.addFinalizer(() =>\n          sessionScopeTransferred ? Effect.void : Scope.close(sessionScope, Exit.void),\n        );\n        const createRuntime = options?.makeRuntime ?? makeCodexSessionRuntime;\n        const runtime = yield* createRuntime(runtimeInput).pipe(\n          Effect.provideService(Scope.Scope, sessionScope),\n          Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, childProcessSpawner),\n          Effect.provideService(Crypto.Crypto, crypto),\n          Effect.mapError(\n            (cause) =>\n              new ProviderAdapterProcessError({\n                provider: PROVIDER,\n                threadId: input.threadId,\n                detail: cause.message,\n                cause,\n              }),\n          ),\n        );\n        const recoveryWorker = yield* makeKeyedCoalescingWorker({\n          merge: mergeRecoveryWork,\n          process: (_rootThreadId: ThreadId, work: CodexChildRecoveryWork) =>\n            processChildRecoveryWork(work),\n        }).pipe(Effect.provideService(Scope.Scope, sessionScope));\n\n        let rootSession: CodexAdapterRootSessionContext | undefined;\n        const eventFiber = yield* Stream.runForEach(runtime.events, (event) =>\n          Effect.gen(function* () {\n            yield* writeNativeEvent(event);\n            const root = rootSession;\n            if (root?.stoppedChildThreadIds.has(event.threadId)) {\n              return;\n            }\n            if (root) {\n              yield* registerVirtualChildFromThreadStartedEvent(root, event);\n            }\n            const hydrationInput = root ? codexChildHydrationInputFromEvent(event) : null;\n            if (root && hydrationInput) {\n              yield* ensureMaterializedCandidateChildSessions(root, event, hydrationInput);\n            }\n            const imageViewRuntimeEvents = yield* materializeImageViewRuntimeEvents(\n              event,\n              event.threadId,\n            );\n            const runtimeEvents = [\n              ...imageViewRuntimeEvents,\n              ...mapToRuntimeEvents(event, event.threadId),\n            ];\n            if (runtimeEvents.length === 0) {\n              yield* Effect.logDebug(\"ignoring unhandled Codex provider event\", {\n                method: event.method,\n                threadId: event.threadId,\n                turnId: event.turnId,\n                itemId: event.itemId,\n              });\n            } else {\n              yield* Queue.offerAll(runtimeEventQueue, runtimeEvents);\n            }\n            if (runtimeEvents.length > 0 && event.method === \"thread/started\" && root) {\n              const childSession = sessions.get(event.threadId);\n              if (childSession?.kind === \"child\") {\n                yield* enqueueChildBackfillRecovery(root, {\n                  threadId: childSession.threadId,\n                  providerThreadId: childSession.providerThreadId,\n                });\n              }\n            }\n            if (root && hydrationInput) {\n              yield* enqueueChildHydrationRecovery(root, {\n                ...hydrationInput,\n                allowScanRepair: true,\n              });\n            }\n          }),\n        ).pipe(Effect.forkChild);\n        rootSession = {\n          kind: \"root\",\n          threadId: input.threadId,\n          scope: sessionScope,\n          runtime,\n          eventFiber,\n          childThreadIds: new Set(),\n          stoppedChildThreadIds: new Set(),\n          stoppedChildProviderThreadIds: new Set(),\n          childThreadStartedMetadataByProviderThreadId: new Map(),\n          recoveryWorker,\n          stopped: false,\n        };\n\n        const started = yield* runtime.start().pipe(\n          Effect.mapError(\n            (cause) =>\n              new ProviderAdapterProcessError({\n                provider: PROVIDER,\n                threadId: input.threadId,\n                detail: cause.message,\n                cause,\n              }),\n          ),\n          Effect.onError(() =>\n            runtime.close.pipe(\n              Effect.andThen(Effect.ignore(Scope.close(sessionScope, Exit.void))),\n              Effect.andThen(Fiber.interrupt(eventFiber)),\n              Effect.ignore,\n            ),\n          ),\n        );\n\n        const startedProviderThreadId = isCodexResumeCursorSchema(started.resumeCursor)\n          ? started.resumeCursor.threadId\n          : undefined;\n        if (startedProviderThreadId) {\n          rootSession.providerThreadId = startedProviderThreadId;\n        }\n        sessions.set(input.threadId, rootSession);\n        if (startedProviderThreadId && String(input.threadId).startsWith(\"codex-child-\")) {\n          yield* enqueueChildBackfillRecovery(rootSession, {\n            threadId: input.threadId,\n            providerThreadId: startedProviderThreadId,\n          });\n        }\n        yield* enqueueChildHydrationRecovery(rootSession, {\n          allowScanRepair: true,\n          reason: \"root-start\",\n        });\n        sessionScopeTransferred = true;\n\n        return started;\n      }),\n    );\n\n  const resolveAttachment = Effect.fn(\"resolveAttachment\")(function* (\n    method: \"turn/start\" | \"turn/steer\",\n    attachment: NonNullable<ProviderSendTurnInput[\"attachments\"]>[number],\n  ) {\n    const attachmentPath = resolveAttachmentPath({\n      attachmentsDir: serverConfig.attachmentsDir,\n      attachment,\n    });\n    if (!attachmentPath) {\n      return yield* new ProviderAdapterRequestError({\n        provider: PROVIDER,\n        method,\n        detail: `Invalid attachment id '${attachment.id}'.`,\n      });\n    }\n    if (attachment.type === \"pdf\") {\n      const reference = toProviderAttachmentReference(attachment, attachmentPath);\n      return {\n        input: {\n          type: \"mention\" as const,\n          name: attachment.name,\n          path: attachmentPath,\n        },\n        reference,\n      };\n    }\n    const bytes = yield* fileSystem.readFile(attachmentPath).pipe(\n      Effect.mapError(\n        (cause) =>\n          new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method,\n            detail: `Failed to read attachment file: ${cause.message}.`,\n            cause,\n          }),\n      ),\n    );\n    return {\n      input: {\n        type: \"image\" as const,\n        url: `data:${attachment.mimeType};base64,${Buffer.from(bytes).toString(\"base64\")}`,\n      },\n    };\n  });\n\n  const sendTurn: CodexAdapterShape[\"sendTurn\"] = Effect.fn(\"sendTurn\")(function* (input) {\n    const resolvedAttachments = yield* Effect.forEach(\n      input.attachments ?? [],\n      (attachment) => resolveAttachment(\"turn/start\", attachment),\n      { concurrency: 1 },\n    );\n    const codexAttachments = resolvedAttachments.map((attachment) => attachment.input);\n    const attachmentReferenceText = formatPdfAttachmentReferenceText(\n      resolvedAttachments.flatMap((attachment) =>\n        attachment.reference ? [attachment.reference] : [],\n      ),\n    );\n    const runtimeInputText = [input.input, attachmentReferenceText]\n      .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n      .join(\"\\n\\n\");\n\n    const session = yield* requireSession(input.threadId);\n    const reasoningEffort =\n      input.modelSelection?.instanceId === boundInstanceId\n        ? getModelSelectionStringOptionValue(input.modelSelection, \"reasoningEffort\")\n        : undefined;\n    const serviceTier =\n      input.modelSelection?.instanceId === boundInstanceId\n        ? getCodexServiceTierOptionValue(input.modelSelection)\n        : undefined;\n    const approvalsReviewer = resolveCodexApprovalsReviewer(input.modelSelection, boundInstanceId);\n    const runtimeTurnInput = {\n      ...(runtimeInputText.length > 0 ? { input: runtimeInputText } : {}),\n      ...(input.modelSelection?.instanceId === boundInstanceId\n        ? { model: input.modelSelection.model }\n        : {}),\n      ...(reasoningEffort\n        ? {\n            effort: reasoningEffort as EffectCodexSchema.V2TurnStartParams__ReasoningEffort,\n          }\n        : {}),\n      ...(serviceTier ? { serviceTier } : {}),\n      ...(approvalsReviewer ? { approvalsReviewer } : {}),\n      ...(input.interactionMode !== undefined ? { interactionMode: input.interactionMode } : {}),\n      ...(codexAttachments.length > 0 ? { attachments: codexAttachments } : {}),\n    };\n    const turn =\n      session.kind === \"child\"\n        ? session.runtime.sendTurnToProviderThread(session.providerThreadId, runtimeTurnInput)\n        : session.runtime.sendTurn(runtimeTurnInput);\n    return yield* turn.pipe(\n      Effect.map((result) => ({ ...result, threadId: input.threadId })),\n      Effect.mapError((cause) => mapCodexRuntimeError(input.threadId, \"turn/start\", cause)),\n    );\n  });\n\n  const steerTurn: CodexAdapterShape[\"steerTurn\"] = Effect.fn(\"steerTurn\")(function* (input) {\n    const resolvedAttachments = yield* Effect.forEach(\n      input.attachments ?? [],\n      (attachment) => resolveAttachment(\"turn/steer\", attachment),\n      { concurrency: 1 },\n    );\n    const codexAttachments = resolvedAttachments.map((attachment) => attachment.input);\n    const attachmentReferenceText = formatPdfAttachmentReferenceText(\n      resolvedAttachments.flatMap((attachment) =>\n        attachment.reference ? [attachment.reference] : [],\n      ),\n    );\n    const runtimeInputText = [input.input, attachmentReferenceText]\n      .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n      .join(\"\\n\\n\");\n    const runtimeSteerInput = {\n      expectedTurnId: input.expectedTurnId,\n      messageId: input.messageId,\n      ...(runtimeInputText.length > 0 ? { input: runtimeInputText } : {}),\n      ...(codexAttachments.length > 0 ? { attachments: codexAttachments } : {}),\n    } satisfies Parameters<CodexSessionRuntimeShape[\"steerTurn\"]>[0];\n\n    const session = yield* requireSession(input.threadId);\n    const turn =\n      session.kind === \"child\"\n        ? session.runtime.steerTurnToProviderThread(session.providerThreadId, runtimeSteerInput)\n        : session.runtime.steerTurn(runtimeSteerInput);\n    return yield* turn.pipe(\n      Effect.map((result) => ({ ...result, threadId: input.threadId })),\n      Effect.mapError((cause) => mapCodexRuntimeError(input.threadId, \"turn/steer\", cause)),\n    );\n  });\n\n  const requireSession = Effect.fn(\"requireSession\")(function* (threadId: ThreadId) {\n    const session = sessions.get(threadId);\n    if (!session || session.stopped) {\n      return yield* new ProviderAdapterSessionNotFoundError({\n        provider: PROVIDER,\n        threadId,\n      });\n    }\n    return session;\n  });\n\n  const interruptTurn: CodexAdapterShape[\"interruptTurn\"] = (threadId, turnId) =>\n    requireSession(threadId).pipe(\n      Effect.flatMap((session) =>\n        session.kind === \"child\"\n          ? session.runtime.interruptProviderThreadTurn(session.providerThreadId, turnId)\n          : session.runtime.interruptTurn(turnId),\n      ),\n      Effect.mapError((cause) =>\n        cause._tag === \"ProviderAdapterSessionNotFoundError\"\n          ? cause\n          : mapCodexRuntimeError(threadId, \"turn/interrupt\", cause),\n      ),\n    );\n\n  const readThread: CodexAdapterShape[\"readThread\"] = (threadId) =>\n    requireSession(threadId).pipe(\n      Effect.flatMap((session) =>\n        session.kind === \"child\"\n          ? session.runtime.readProviderThread(session.providerThreadId)\n          : session.runtime.readThread,\n      ),\n      Effect.mapError((cause) =>\n        cause._tag === \"ProviderAdapterSessionNotFoundError\"\n          ? cause\n          : mapCodexRuntimeError(threadId, \"thread/read\", cause),\n      ),\n      Effect.map((snapshot) => ({\n        threadId,\n        turns: snapshot.turns,\n      })),\n    );\n\n  const rollbackThread: CodexAdapterShape[\"rollbackThread\"] = (threadId, numTurns) => {\n    if (!Number.isInteger(numTurns) || numTurns < 1) {\n      return Effect.fail(\n        new ProviderAdapterValidationError({\n          provider: PROVIDER,\n          operation: \"rollbackThread\",\n          issue: \"numTurns must be an integer >= 1.\",\n        }),\n      );\n    }\n\n    return requireSession(threadId).pipe(\n      Effect.flatMap((session) =>\n        session.kind === \"child\"\n          ? session.runtime.rollbackProviderThread(session.providerThreadId, numTurns)\n          : session.runtime.rollbackThread(numTurns),\n      ),\n      Effect.mapError((cause) =>\n        cause._tag === \"ProviderAdapterSessionNotFoundError\"\n          ? cause\n          : mapCodexRuntimeError(threadId, \"thread/rollback\", cause),\n      ),\n      Effect.map((snapshot) => ({\n        threadId,\n        turns: snapshot.turns,\n      })),\n    );\n  };\n\n  const respondToRequest: CodexAdapterShape[\"respondToRequest\"] = (threadId, requestId, decision) =>\n    requireSession(threadId).pipe(\n      Effect.flatMap((session) => session.runtime.respondToRequest(requestId, decision)),\n      Effect.mapError((cause) =>\n        cause._tag === \"ProviderAdapterSessionNotFoundError\"\n          ? cause\n          : mapCodexRuntimeError(threadId, \"item/requestApproval/decision\", cause),\n      ),\n    );\n\n  const respondToUserInput: CodexAdapterShape[\"respondToUserInput\"] = (\n    threadId,\n    requestId,\n    answers,\n  ) =>\n    requireSession(threadId).pipe(\n      Effect.flatMap((session) => session.runtime.respondToUserInput(requestId, answers)),\n      Effect.mapError((cause) =>\n        cause._tag === \"ProviderAdapterSessionNotFoundError\"\n          ? cause\n          : mapCodexRuntimeError(threadId, \"item/tool/requestUserInput\", cause),\n      ),\n    );\n\n  const writeNativeEvent = Effect.fn(\"writeNativeEvent\")(function* (event: ProviderEvent) {\n    if (!nativeEventLogger) {\n      return;\n    }\n    yield* nativeEventLogger.write(event, event.threadId);\n  });\n\n  const stopSessionInternal = Effect.fn(\"stopSessionInternal\")(function* (\n    session: CodexAdapterSessionContext,\n  ) {\n    if (session.stopped) {\n      return;\n    }\n    if (session.kind === \"child\") {\n      session.stopped = true;\n      sessions.delete(session.threadId);\n      const root = sessions.get(session.rootThreadId);\n      if (root?.kind === \"root\") {\n        root.childThreadIds.delete(session.threadId);\n        root.stoppedChildThreadIds.add(session.threadId);\n        root.stoppedChildProviderThreadIds.add(session.providerThreadId);\n      }\n      return;\n    }\n\n    session.stopped = true;\n    sessions.delete(session.threadId);\n    for (const childThreadId of session.childThreadIds) {\n      const child = sessions.get(childThreadId);\n      if (child?.kind === \"child\") {\n        child.stopped = true;\n        session.stoppedChildThreadIds.add(child.threadId);\n        session.stoppedChildProviderThreadIds.add(child.providerThreadId);\n        sessions.delete(childThreadId);\n      }\n    }\n    session.childThreadIds.clear();\n    yield* session.runtime.close.pipe(Effect.ignore);\n    yield* Effect.ignore(Scope.close(session.scope, Exit.void));\n    yield* Fiber.interrupt(session.eventFiber).pipe(Effect.ignore);\n  });\n\n  const stopSession: CodexAdapterShape[\"stopSession\"] = (threadId) =>\n    Effect.gen(function* () {\n      const session = sessions.get(threadId);\n      if (!session) {\n        return;\n      }\n      yield* stopSessionInternal(session);\n    });\n\n  const listSessions: CodexAdapterShape[\"listSessions\"] = () =>\n    Effect.forEach(\n      Array.from(sessions.values()).filter((session) => !session.stopped),\n      (session) =>\n        session.kind === \"child\"\n          ? session.runtime.getSession.pipe(\n              Effect.map((rootSession) => ({\n                ...rootSession,\n                threadId: session.threadId,\n                resumeCursor: { threadId: session.providerThreadId },\n                status: session.stopped ? \"closed\" : rootSession.status,\n              })),\n            )\n          : session.runtime.getSession,\n      { concurrency: 1 },\n    );\n\n  const hasSession: CodexAdapterShape[\"hasSession\"] = (threadId) =>\n    Effect.succeed(Boolean(sessions.get(threadId) && !sessions.get(threadId)?.stopped));\n\n  const refreshUsage: NonNullable<CodexAdapterShape[\"refreshUsage\"]> = () => {\n    const session = Array.from(sessions.values()).find(\n      (candidate): candidate is CodexAdapterRootSessionContext =>\n        candidate.kind === \"root\" && !candidate.stopped,\n    );\n    if (!session) {\n      return Effect.void;\n    }\n    // Usage is account-scoped for an adapter instance. Refreshing every root produces identical\n    // work and synchronized app-server traffic, so one healthy root is sufficient.\n    return session.runtime.refreshUsage.pipe(\n      Effect.catchCause((cause) =>\n        Effect.logDebug(\"codex.adapter.usage.refresh-failed\", {\n          threadId: session.threadId,\n          cause,\n        }),\n      ),\n      Effect.asVoid,\n    );\n  };\n\n  const getAccountRateLimits: NonNullable<CodexAdapterShape[\"getAccountRateLimits\"]> = () =>\n    Effect.gen(function* () {\n      if (process.platform === \"win32\") {\n        return undefined;\n      }\n\n      if (!accountClient) {\n        const accountScope = yield* Scope.make(\"sequential\");\n        const createAccountClient = options?.makeCodexAppServerClient ?? makeCodexAppServerClient;\n        const handle = yield* createAccountClient({\n          binaryPath: codexConfig.binaryPath,\n          ...(codexConfig.homePath ? { homePath: codexConfig.homePath } : {}),\n          cwd: process.cwd(),\n          processRegistryDirectory,\n          ...(options?.environment ? { environment: options.environment } : {}),\n        }).pipe(\n          Effect.provideService(Scope.Scope, accountScope),\n          Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, childProcessSpawner),\n        );\n        accountClient = {\n          scope: accountScope,\n          client: handle.client,\n        };\n      }\n\n      return yield* accountClient.client.request(\"account/rateLimits/read\", undefined).pipe(\n        Effect.timeoutOption(CODEX_USAGE_REFRESH_TIMEOUT),\n        Effect.flatMap(\n          Option.match({\n            onNone: () => Effect.void,\n            onSome: (value) => Effect.succeed(value),\n          }),\n        ),\n      );\n    }).pipe(\n      Effect.catchCause((cause) =>\n        Effect.logDebug(\"codex.account-rate-limits.failed\", { cause }).pipe(Effect.as(undefined)),\n      ),\n    );\n\n  const stopAll: CodexAdapterShape[\"stopAll\"] = () =>\n    Effect.forEach(\n      Array.from(sessions.values()).filter(\n        (session): session is CodexAdapterRootSessionContext => session.kind === \"root\",\n      ),\n      stopSessionInternal,\n      {\n        concurrency: 1,\n        discard: true,\n      },\n    ).pipe(Effect.asVoid);\n\n  const closeAccountClient = Effect.gen(function* () {\n    if (!accountClient) {\n      return;\n    }\n    const current = accountClient;\n    accountClient = undefined;\n    yield* Scope.close(current.scope, Exit.void);\n  });\n\n  yield* Effect.acquireRelease(Effect.void, () =>\n    stopAll().pipe(\n      Effect.andThen(closeAccountClient),\n      Effect.andThen(Queue.shutdown(runtimeEventQueue)),\n      Effect.andThen(managedNativeEventLogger?.close() ?? Effect.void),\n      Effect.ignore,\n    ),\n  );\n\n  return {\n    provider: PROVIDER,\n    capabilities: {\n      sessionModelSwitch: \"in-session\",\n      childThreadMode: \"materialized\",\n      activeTurnSteering: \"native\",\n    },\n    startSession,\n    sendTurn,\n    steerTurn,\n    interruptTurn,\n    readThread,\n    rollbackThread,\n    respondToRequest,\n    respondToUserInput,\n    stopSession,\n    listSessions,\n    hasSession,\n    refreshUsage,\n    getAccountRateLimits,\n    stopAll,\n    get streamEvents() {\n      return Stream.fromQueue(runtimeEventQueue);\n    },\n  } satisfies CodexAdapterShape;\n});\n\n// NOTE: the old `CodexAdapterLive` / `makeCodexAdapterLive` singleton Layer\n// exports have been removed as part of the per-instance-driver refactor.\n// `makeCodexAdapter(codexConfig, options?)` is now invoked directly by\n// `CodexDriver.create()` for each configured instance; downstream consumers\n// (server bootstrap, integration harness, this module's tests) will be\n// migrated to the registry in a follow-up pass.\n","import * as NodeOS from \"node:os\";\n\nimport { ProviderDriverKind, type CodexSettings } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as PlatformError from \"effect/PlatformError\";\n\nimport { expandHomePath } from \"../../pathExpansion.ts\";\n\nexport interface CodexHomeLayout {\n  readonly mode: \"direct\" | \"authOverlay\";\n  readonly sharedHomePath: string;\n  readonly effectiveHomePath: string | undefined;\n  readonly continuationKey: string;\n}\n\nconst KNOWN_SHARED_DIRECTORIES = [\n  \"sessions\",\n  \"archived_sessions\",\n  \"sqlite\",\n  \"shell_snapshots\",\n  \"worktrees\",\n  \"skills\",\n  \"plugins\",\n  \"cache\",\n  \"logs\",\n] as const;\n\nconst PRIVATE_ENTRY_NAMES = new Set([\"auth.json\", \"models_cache.json\"]);\nconst SHADOW_LOCAL_ENTRY_NAMES = new Set([\"log\", \"memories\", \"tmp\"]);\n\nfunction resolveHomePath(path: Path.Path, value: string | undefined): string {\n  const expanded =\n    value && value.trim().length > 0\n      ? expandHomePath(value)\n      : path.join(NodeOS.homedir(), \".codex\");\n  return path.resolve(expanded);\n}\n\nexport const resolveCodexHomeLayout = Effect.fn(\"resolveCodexHomeLayout\")(function* (\n  config: CodexSettings,\n): Effect.fn.Return<CodexHomeLayout, never, Path.Path> {\n  const path = yield* Path.Path;\n  const sharedHomePath = resolveHomePath(path, config.homePath);\n  const shadowHomePath = config.shadowHomePath.trim();\n  if (shadowHomePath.length === 0) {\n    return {\n      mode: \"direct\",\n      sharedHomePath,\n      effectiveHomePath: config.homePath.trim().length > 0 ? sharedHomePath : undefined,\n      continuationKey: `codex:home:${sharedHomePath}`,\n    };\n  }\n\n  const effectiveHomePath = path.resolve(expandHomePath(shadowHomePath));\n  return {\n    mode: \"authOverlay\",\n    sharedHomePath,\n    effectiveHomePath,\n    continuationKey: `codex:home:${sharedHomePath}`,\n  };\n});\n\nexport class CodexShadowHomeError extends Schema.TaggedErrorClass<CodexShadowHomeError>()(\n  \"CodexShadowHomeError\",\n  {\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Unknown),\n  },\n) {\n  override get message(): string {\n    return this.detail;\n  }\n}\nconst isCodexShadowHomeError = Schema.is(CodexShadowHomeError);\n\ntype LinkState =\n  | {\n      readonly _tag: \"Missing\";\n    }\n  | {\n      readonly _tag: \"NotSymlink\";\n    }\n  | {\n      readonly _tag: \"Symlink\";\n      readonly target: string;\n    };\n\nfunction toShadowHomeError(cause: unknown): CodexShadowHomeError {\n  return isCodexShadowHomeError(cause)\n    ? cause\n    : new CodexShadowHomeError({\n        detail: \"Failed to materialize Codex shadow home.\",\n        cause,\n      });\n}\n\nfunction normalizeShadowHomeError<A, E, R>(\n  effect: Effect.Effect<A, E, R>,\n): Effect.Effect<A, CodexShadowHomeError, R> {\n  return effect.pipe(Effect.mapError(toShadowHomeError));\n}\n\nfunction isNotSymlinkError(error: PlatformError.PlatformError): boolean {\n  const cause = error.reason.cause;\n  return (\n    error.reason._tag === \"Unknown\" &&\n    typeof cause === \"object\" &&\n    cause !== null &&\n    \"code\" in cause &&\n    cause.code === \"EINVAL\"\n  );\n}\n\nconst readLinkState = Effect.fn(\"CodexHomeLayout.readLinkState\")(function* (\n  fileSystem: FileSystem.FileSystem,\n  linkPath: string,\n): Effect.fn.Return<LinkState, CodexShadowHomeError> {\n  return yield* fileSystem.readLink(linkPath).pipe(\n    Effect.map((target): LinkState => ({ _tag: \"Symlink\", target })),\n    Effect.catch((error) => {\n      if (error.reason._tag === \"NotFound\") {\n        return Effect.succeed<LinkState>({ _tag: \"Missing\" });\n      }\n      if (isNotSymlinkError(error)) {\n        return Effect.succeed<LinkState>({ _tag: \"NotSymlink\" });\n      }\n      return Effect.fail(toShadowHomeError(error));\n    }),\n  );\n});\n\nconst removePrivateSymlink = Effect.fn(\"CodexHomeLayout.removePrivateSymlink\")(function* (input: {\n  readonly fileSystem: FileSystem.FileSystem;\n  readonly shadowPath: string;\n  readonly entryName: string;\n}): Effect.fn.Return<void, CodexShadowHomeError, Path.Path> {\n  const path = yield* Path.Path;\n  const privatePath = path.join(input.shadowPath, input.entryName);\n  const state = yield* readLinkState(input.fileSystem, privatePath);\n  if (state._tag === \"Symlink\") {\n    yield* normalizeShadowHomeError(input.fileSystem.remove(privatePath));\n  }\n});\n\nconst ensureSymlink = Effect.fn(\"CodexHomeLayout.ensureSymlink\")(function* (input: {\n  readonly fileSystem: FileSystem.FileSystem;\n  readonly shadowPath: string;\n  readonly sharedPath: string;\n  readonly entryName: string;\n}): Effect.fn.Return<void, CodexShadowHomeError, Path.Path> {\n  const path = yield* Path.Path;\n  const target = path.join(input.sharedPath, input.entryName);\n  const link = path.join(input.shadowPath, input.entryName);\n  const state = yield* readLinkState(input.fileSystem, link);\n\n  if (state._tag === \"NotSymlink\") {\n    return yield* new CodexShadowHomeError({\n      detail: `Cannot create Codex shadow home because '${link}' already exists and is not a symlink.`,\n    });\n  }\n\n  if (state._tag === \"Missing\") {\n    return yield* normalizeShadowHomeError(input.fileSystem.symlink(target, link));\n  }\n\n  const resolvedExisting = path.resolve(path.dirname(link), state.target);\n  if (resolvedExisting !== target) {\n    yield* normalizeShadowHomeError(input.fileSystem.remove(link));\n    yield* normalizeShadowHomeError(input.fileSystem.symlink(target, link));\n  }\n});\n\nconst ensureShadowAuthIsPrivate = Effect.fn(\"CodexHomeLayout.ensureShadowAuthIsPrivate\")(function* (\n  fileSystem: FileSystem.FileSystem,\n  shadowPath: string,\n): Effect.fn.Return<void, CodexShadowHomeError, Path.Path> {\n  const path = yield* Path.Path;\n  const authPath = path.join(shadowPath, \"auth.json\");\n  const state = yield* readLinkState(fileSystem, authPath);\n  if (state._tag === \"Symlink\") {\n    return yield* new CodexShadowHomeError({\n      detail: `Codex shadow auth file '${authPath}' must be a real file, not a symlink.`,\n    });\n  }\n});\n\nexport const materializeCodexShadowHome = Effect.fn(\"materializeCodexShadowHome\")(function* (\n  layout: CodexHomeLayout,\n) {\n  if (layout.mode !== \"authOverlay\") return;\n  const effectiveHomePath = layout.effectiveHomePath;\n  if (!effectiveHomePath) return;\n  if (layout.sharedHomePath === effectiveHomePath) {\n    return yield* new CodexShadowHomeError({\n      detail: \"Codex shadow home path must be different from the shared home path.\",\n    });\n  }\n\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  yield* normalizeShadowHomeError(\n    Effect.all(\n      [\n        fileSystem.makeDirectory(layout.sharedHomePath, { recursive: true }),\n        fileSystem.makeDirectory(effectiveHomePath, { recursive: true }),\n        ...KNOWN_SHARED_DIRECTORIES.map((directory) =>\n          fileSystem.makeDirectory(path.join(layout.sharedHomePath, directory), {\n            recursive: true,\n          }),\n        ),\n      ],\n      { concurrency: \"unbounded\" },\n    ),\n  );\n\n  const sharedEntryNames = yield* normalizeShadowHomeError(\n    fileSystem.readDirectory(layout.sharedHomePath),\n  );\n  const entries = new Set<string>(KNOWN_SHARED_DIRECTORIES);\n  for (const entryName of sharedEntryNames) {\n    if (!PRIVATE_ENTRY_NAMES.has(entryName) && !SHADOW_LOCAL_ENTRY_NAMES.has(entryName)) {\n      entries.add(entryName);\n    }\n  }\n\n  yield* Effect.forEach(\n    PRIVATE_ENTRY_NAMES,\n    (entryName) =>\n      entryName === \"auth.json\"\n        ? Effect.void\n        : removePrivateSymlink({\n            fileSystem,\n            shadowPath: effectiveHomePath,\n            entryName,\n          }),\n    { discard: true },\n  );\n\n  yield* Effect.forEach(\n    entries,\n    (entryName) => {\n      if (PRIVATE_ENTRY_NAMES.has(entryName)) {\n        return Effect.void;\n      }\n      return ensureSymlink({\n        fileSystem,\n        shadowPath: effectiveHomePath,\n        sharedPath: layout.sharedHomePath,\n        entryName,\n      });\n    },\n    { discard: true },\n  );\n\n  yield* ensureShadowAuthIsPrivate(fileSystem, effectiveHomePath);\n});\n\nexport function codexContinuationIdentity(layout: CodexHomeLayout) {\n  return {\n    driverKind: ProviderDriverKind.make(\"codex\"),\n    continuationKey: layout.continuationKey,\n  };\n}\n","/**\n * CodexDriver — first concrete `ProviderDriver` in the new per-instance model.\n *\n * A driver is a plain value (not a Context.Service) whose `create()` returns\n * one `ProviderInstance` bundling:\n *   - `snapshot`   — the live `ServerProviderShape` for this instance;\n *   - `adapter`    — the Codex session/turn/approval runtime;\n *   - `textGeneration` — commit/PR/branch/title generation via `codex exec`.\n *\n * Each call to `create()` captures the `codexConfig` argument in closures\n * owned by the returned instance. Two instances created with different\n * `homePath`s (e.g. `codex_personal` + `codex_work`) therefore run with\n * fully independent Codex app-server processes and `CODEX_HOME`\n * environments — no shared mutable state.\n *\n * Resource lifecycle: `create()` runs in a scope handed in by the registry.\n * Closing that scope releases the adapter's child processes, the managed\n * snapshot's refresh fibre, and the text-generation binaries' transient\n * scratch files. The registry uses this to tear down an instance when its\n * `providerInstances` entry disappears or its config changes.\n *\n * @module provider/Drivers/CodexDriver\n */\nimport { CodexSettings, ProviderDriverKind, type ServerProvider } from \"@salchi/contracts\";\nimport * as Duration from \"effect/Duration\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { makeCodexTextGeneration } from \"../../textGeneration/CodexTextGeneration.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport { ProviderDriverError } from \"../Errors.ts\";\nimport { makeCodexAdapter } from \"../Layers/CodexAdapter.ts\";\nimport { checkCodexProviderStatus, makePendingCodexProvider } from \"../Layers/CodexProvider.ts\";\nimport { ProviderEventLoggers } from \"../Layers/ProviderEventLoggers.ts\";\nimport { makeManagedServerProvider } from \"../makeManagedServerProvider.ts\";\nimport type { ProviderDriver, ProviderInstance } from \"../ProviderDriver.ts\";\nimport type { ServerProviderDraft } from \"../providerSnapshot.ts\";\nimport { mergeProviderInstanceEnvironment } from \"../ProviderInstanceEnvironment.ts\";\nimport {\n  enrichProviderSnapshotWithVersionAdvisory,\n  makePackageManagedProviderMaintenanceResolver,\n  resolveProviderMaintenanceCapabilitiesEffect,\n} from \"../providerMaintenance.ts\";\nimport {\n  codexContinuationIdentity,\n  materializeCodexShadowHome,\n  resolveCodexHomeLayout,\n} from \"./CodexHomeLayout.ts\";\nconst decodeCodexSettings = Schema.decodeSync(CodexSettings);\n\nconst DRIVER_KIND = ProviderDriverKind.make(\"codex\");\nconst SNAPSHOT_REFRESH_INTERVAL = Duration.minutes(5);\nconst UPDATE = makePackageManagedProviderMaintenanceResolver({\n  provider: DRIVER_KIND,\n  npmPackageName: \"@openai/codex\",\n  homebrewFormula: \"codex\",\n  nativeUpdate: null,\n});\n\n/**\n * Services the driver needs to materialize an instance. Surfaced as the\n * driver's `R` so the registry layer aggregates these across every\n * registered driver and the runtime satisfies them once.\n */\nexport type CodexDriverEnv =\n  | ChildProcessSpawner.ChildProcessSpawner\n  | Crypto.Crypto\n  | FileSystem.FileSystem\n  | HttpClient.HttpClient\n  | Path.Path\n  | ProviderEventLoggers\n  | ServerConfig;\n\n/**\n * Stamp instance identity onto a `ServerProvider` snapshot produced by the\n * driver-kind-only codex helpers. Once `buildServerProvider` in\n * `providerSnapshot.ts` is widened to accept `instanceId`/`driver`, this\n * wrapper disappears.\n */\nconst withInstanceIdentity =\n  (input: {\n    readonly instanceId: ProviderInstance[\"instanceId\"];\n    readonly displayName: string | undefined;\n    readonly accentColor: string | undefined;\n    readonly continuationGroupKey: string;\n  }) =>\n  (snapshot: ServerProviderDraft): ServerProvider => ({\n    ...snapshot,\n    instanceId: input.instanceId,\n    driver: DRIVER_KIND,\n    ...(input.displayName ? { displayName: input.displayName } : {}),\n    ...(input.accentColor ? { accentColor: input.accentColor } : {}),\n    continuation: { groupKey: input.continuationGroupKey },\n  });\n\nexport const CodexDriver: ProviderDriver<CodexSettings, CodexDriverEnv> = {\n  driverKind: DRIVER_KIND,\n  metadata: {\n    displayName: \"Codex\",\n    supportsMultipleInstances: true,\n  },\n  configSchema: CodexSettings,\n  defaultConfig: (): CodexSettings => decodeCodexSettings({}),\n  create: ({ instanceId, displayName, accentColor, environment, enabled, config }) =>\n    Effect.gen(function* () {\n      const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n      const httpClient = yield* HttpClient.HttpClient;\n      const eventLoggers = yield* ProviderEventLoggers;\n      const processEnv = mergeProviderInstanceEnvironment(environment);\n      const homeLayout = yield* resolveCodexHomeLayout(config);\n      const continuationIdentity = codexContinuationIdentity(homeLayout);\n      const stampIdentity = withInstanceIdentity({\n        instanceId,\n        displayName,\n        accentColor,\n        continuationGroupKey: continuationIdentity.continuationKey,\n      });\n      yield* materializeCodexShadowHome(homeLayout).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderDriverError({\n              driver: DRIVER_KIND,\n              instanceId,\n              detail: cause.message,\n              cause,\n            }),\n        ),\n      );\n      const effectiveConfig = {\n        ...config,\n        enabled,\n        homePath: homeLayout.effectiveHomePath ?? \"\",\n      } satisfies CodexSettings;\n      const maintenanceCapabilities = yield* resolveProviderMaintenanceCapabilitiesEffect(UPDATE, {\n        binaryPath: effectiveConfig.binaryPath,\n        env: processEnv,\n      });\n\n      // `makeCodexAdapter` and `makeCodexTextGeneration` have `never` error\n      // channels at construction time — their failure modes are all on the\n      // per-operation closures they return. No `mapError` wrapper is needed\n      // here; the registry only has to worry about snapshot-build and\n      // spawner-availability failures surfaced from `checkCodexProviderStatus`\n      // below.\n      const adapter = yield* makeCodexAdapter(effectiveConfig, {\n        instanceId,\n        environment: processEnv,\n        ...(eventLoggers.native ? { nativeEventLogger: eventLoggers.native } : {}),\n      });\n      const textGeneration = yield* makeCodexTextGeneration(effectiveConfig, processEnv);\n\n      // Build a managed snapshot whose settings never change — mutations come\n      // in as instance rebuilds from the registry rather than in-place\n      // updates. Pre-provide `ChildProcessSpawner` so the check fits\n      // `makeManagedServerProvider.checkProvider`'s `R = never`.\n      const checkProvider = checkCodexProviderStatus(effectiveConfig, undefined, processEnv).pipe(\n        Effect.map(stampIdentity),\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n      );\n      const snapshot = yield* makeManagedServerProvider<CodexSettings>({\n        maintenanceCapabilities,\n        getSettings: Effect.succeed(effectiveConfig),\n        streamSettings: Stream.never,\n        haveSettingsChanged: () => false,\n        initialSnapshot: (settings) =>\n          makePendingCodexProvider(settings).pipe(Effect.map(stampIdentity)),\n        checkProvider,\n        enrichSnapshot: ({ snapshot, publishSnapshot }) =>\n          enrichProviderSnapshotWithVersionAdvisory(snapshot, maintenanceCapabilities).pipe(\n            Effect.provideService(HttpClient.HttpClient, httpClient),\n            Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot)),\n          ),\n        refreshInterval: SNAPSHOT_REFRESH_INTERVAL,\n      }).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderDriverError({\n              driver: DRIVER_KIND,\n              instanceId,\n              detail: `Failed to build Codex snapshot: ${cause.message ?? String(cause)}`,\n              cause,\n            }),\n        ),\n      );\n\n      return {\n        instanceId,\n        driverKind: DRIVER_KIND,\n        continuationIdentity,\n        displayName,\n        accentColor,\n        enabled,\n        snapshot,\n        adapter,\n        textGeneration,\n      } satisfies ProviderInstance;\n    }),\n};\n","// This file is generated by the effect-acp package. Do not edit manually.\n// Current ACP schema release: v0.11.3\n\nimport * as Schema from \"effect/Schema\";\n\nexport type AuthEnvVar = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly label?: string | null;\n  readonly name: string;\n  readonly optional?: boolean;\n  readonly secret?: boolean;\n};\nexport const AuthEnvVar = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  label: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Human-readable label for this variable, displayed in client UI.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String.annotate({\n    description: 'The environment variable name (e.g. `\"OPENAI_API_KEY\"`).',\n  }),\n  optional: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Whether this variable is optional.\\n\\nDefaults to `false`.\",\n      default: false,\n    }),\n  ),\n  secret: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Whether this value is a secret (e.g. API key, token).\\nClients should use a password-style input for secret vars.\\n\\nDefaults to `true`.\",\n      default: true,\n    }),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nDescribes a single environment variable for an [`AuthMethodEnvVar`] authentication method.\",\n});\n\nexport type AvailableCommandInput = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly hint: string;\n};\nexport const AvailableCommandInput = Schema.Union([\n  Schema.Struct({\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    hint: Schema.String.annotate({\n      description: \"A hint to display when the input hasn't been provided yet\",\n    }),\n  }).annotate({\n    title: \"unstructured\",\n    description: \"All text that was typed after the command name is provided as input.\",\n  }),\n]).annotate({ description: \"The input specification for a command.\" });\n\nexport type Cost = { readonly amount: number; readonly currency: string };\nexport const Cost = Schema.Struct({\n  amount: Schema.Number.annotate({\n    description: \"Total cumulative cost for session.\",\n    format: \"double\",\n  }).check(Schema.isFinite()),\n  currency: Schema.String.annotate({ description: 'ISO 4217 currency code (e.g., \"USD\", \"EUR\").' }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nCost information for a session.\",\n});\n\nexport type ElicitationContentValue = string | number | number | boolean | ReadonlyArray<string>;\nexport const ElicitationContentValue = Schema.Union([\n  Schema.String.annotate({ title: \"String\" }),\n  Schema.Number.annotate({ title: \"Integer\", format: \"int64\" }).check(Schema.isInt()),\n  Schema.Number.annotate({ title: \"Number\", format: \"double\" }).check(Schema.isFinite()),\n  Schema.Boolean.annotate({ title: \"Boolean\" }),\n  Schema.Array(Schema.String).annotate({ title: \"StringArray\" }),\n]);\n\nexport type ElicitationFormCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n};\nexport const ElicitationFormCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nForm-based elicitation capabilities.\",\n});\n\nexport type ElicitationUrlCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n};\nexport const ElicitationUrlCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nURL-based elicitation capabilities.\",\n});\n\nexport type EmbeddedResourceResource =\n  | {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly mimeType?: string | null;\n      readonly text: string;\n      readonly uri: string;\n    }\n  | {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly blob: string;\n      readonly mimeType?: string | null;\n      readonly uri: string;\n    };\nexport const EmbeddedResourceResource = Schema.Union([\n  Schema.Struct({\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    text: Schema.String,\n    uri: Schema.String,\n  }).annotate({ title: \"TextResourceContents\", description: \"Text-based resource contents.\" }),\n  Schema.Struct({\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    blob: Schema.String,\n    mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    uri: Schema.String,\n  }).annotate({ title: \"BlobResourceContents\", description: \"Binary resource contents.\" }),\n]).annotate({ description: \"Resource content that can be embedded in a message.\" });\n\nexport type EnumOption = { readonly const: string; readonly title: string };\nexport const EnumOption = Schema.Struct({\n  const: Schema.String.annotate({ description: \"The constant value for this option.\" }),\n  title: Schema.String.annotate({ description: \"Human-readable title for this option.\" }),\n}).annotate({ description: \"A titled enum option with a const value and human-readable title.\" });\n\nexport type EnvVariable = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly name: string;\n  readonly value: string;\n};\nexport const EnvVariable = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String.annotate({ description: \"The name of the environment variable.\" }),\n  value: Schema.String.annotate({ description: \"The value to set for the environment variable.\" }),\n}).annotate({ description: \"An environment variable to set when launching an MCP server.\" });\n\nexport type Error = {\n  readonly code:\n    | -32700\n    | -32600\n    | -32601\n    | -32602\n    | -32603\n    | -32800\n    | -32000\n    | -32002\n    | -32042\n    | number;\n  readonly data?: unknown;\n  readonly message: string;\n};\nexport const Error = Schema.Struct({\n  code: Schema.Union([\n    Schema.Literal(-32700).annotate({\n      title: \"Parse error\",\n      description:\n        \"**Parse error**: Invalid JSON was received by the server.\\nAn error occurred on the server while parsing the JSON text.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32600).annotate({\n      title: \"Invalid request\",\n      description: \"**Invalid request**: The JSON sent is not a valid Request object.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32601).annotate({\n      title: \"Method not found\",\n      description: \"**Method not found**: The method does not exist or is not available.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32602).annotate({\n      title: \"Invalid params\",\n      description: \"**Invalid params**: Invalid method parameter(s).\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32603).annotate({\n      title: \"Internal error\",\n      description:\n        \"**Internal error**: Internal JSON-RPC error.\\nReserved for implementation-defined server errors.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32800).annotate({\n      title: \"Request cancelled\",\n      description:\n        \"**Request cancelled**: **UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nExecution of the method was aborted either due to a cancellation request from the caller or\\nbecause of resource constraints or shutdown.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32000).annotate({\n      title: \"Authentication required\",\n      description:\n        \"**Authentication required**: Authentication is required before this operation can be performed.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32002).annotate({\n      title: \"Resource not found\",\n      description: \"**Resource not found**: A given resource, such as a file, was not found.\",\n      format: \"int32\",\n    }),\n    Schema.Literal(-32042).annotate({\n      title: \"URL elicitation required\",\n      description:\n        \"**URL elicitation required**: **UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe agent requires user input via a URL-based elicitation before it can proceed.\",\n      format: \"int32\",\n    }),\n    Schema.Number.annotate({\n      title: \"Other\",\n      description: \"Other undefined error code.\",\n      format: \"int32\",\n    }).check(Schema.isInt()),\n  ]).annotate({\n    description:\n      \"Predefined error codes for common JSON-RPC and ACP-specific errors.\\n\\nThese codes follow the JSON-RPC 2.0 specification for standard errors\\nand use the reserved range (-32000 to -32099) for protocol-specific errors.\",\n  }),\n  data: Schema.optionalKey(\n    Schema.Unknown.annotate({\n      description:\n        \"Optional primitive or structured value that contains additional information about the error.\\nThis may include debugging information or context-specific details.\",\n    }),\n  ),\n  message: Schema.String.annotate({\n    description:\n      \"A string providing a short description of the error.\\nThe message should be limited to a concise single sentence.\",\n  }),\n}).annotate({\n  description:\n    \"JSON-RPC error object.\\n\\nRepresents an error that occurred during method execution, following the\\nJSON-RPC 2.0 error object specification with optional additional data.\\n\\nSee protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification#error_object)\",\n});\n\nexport type HttpHeader = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly name: string;\n  readonly value: string;\n};\nexport const HttpHeader = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String.annotate({ description: \"The name of the HTTP header.\" }),\n  value: Schema.String.annotate({ description: \"The value to set for the HTTP header.\" }),\n}).annotate({ description: \"An HTTP header to set when making requests to the MCP server.\" });\n\nexport type Implementation = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly name: string;\n  readonly title?: string | null;\n  readonly version: string;\n};\nexport const Implementation = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String.annotate({\n    description:\n      \"Intended for programmatic or logical use, but can be used as a display\\nname fallback if title isn’t present.\",\n  }),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Intended for UI and end-user contexts — optimized to be human-readable\\nand easily understood.\\n\\nIf not provided, the name should be used for display.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  version: Schema.String.annotate({\n    description:\n      'Version of the implementation. Can be displayed to the user or used\\nfor debugging or metrics purposes. (e.g. \"1.0.0\").',\n  }),\n}).annotate({\n  description:\n    \"Metadata about the implementation of the client or agent.\\nDescribes the name and version of an MCP implementation, with an optional\\ntitle for UI representation.\",\n});\n\nexport type LogoutCapabilities = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const LogoutCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nLogout capabilities supported by the agent.\\n\\nBy supplying `{}` it means that the agent supports the logout method.\",\n});\n\nexport type ModelInfo = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly description?: string | null;\n  readonly modelId: string;\n  readonly name: string;\n};\nexport const ModelInfo = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional description of the model.\" }),\n      Schema.Null,\n    ]),\n  ),\n  modelId: Schema.String.annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for a model.\",\n  }),\n  name: Schema.String.annotate({ description: \"Human-readable name of the model.\" }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInformation about a selectable model.\",\n});\n\nexport type PermissionOption = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly kind: \"allow_once\" | \"allow_always\" | \"reject_once\" | \"reject_always\";\n  readonly name: string;\n  readonly optionId: string;\n};\nexport const PermissionOption = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  kind: Schema.Literals([\"allow_once\", \"allow_always\", \"reject_once\", \"reject_always\"]).annotate({\n    description:\n      \"The type of permission option being presented to the user.\\n\\nHelps clients choose appropriate icons and UI treatment.\",\n  }),\n  name: Schema.String.annotate({ description: \"Human-readable label to display to the user.\" }),\n  optionId: Schema.String.annotate({ description: \"Unique identifier for a permission option.\" }),\n}).annotate({ description: \"An option presented to the user when requesting permission.\" });\n\nexport type PlanEntry = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content: string;\n  readonly priority: \"high\" | \"medium\" | \"low\";\n  readonly status: \"pending\" | \"in_progress\" | \"completed\";\n};\nexport const PlanEntry = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.String.annotate({\n    description: \"Human-readable description of what this task aims to accomplish.\",\n  }),\n  priority: Schema.Literals([\"high\", \"medium\", \"low\"]).annotate({\n    description:\n      \"Priority levels for plan entries.\\n\\nUsed to indicate the relative importance or urgency of different\\ntasks in the execution plan.\\nSee protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)\",\n  }),\n  status: Schema.Literals([\"pending\", \"in_progress\", \"completed\"]).annotate({\n    description:\n      \"Status of a plan entry in the execution flow.\\n\\nTracks the lifecycle of each task from planning through completion.\\nSee protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)\",\n  }),\n}).annotate({\n  description:\n    \"A single entry in the execution plan.\\n\\nRepresents a task or goal that the assistant intends to accomplish\\nas part of fulfilling the user's request.\\nSee protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)\",\n});\n\nexport type RequestId = null | number | string;\nexport const RequestId = Schema.Union([\n  Schema.Null.annotate({ title: \"Null\" }),\n  Schema.Number.annotate({ title: \"Number\", format: \"int64\" }).check(Schema.isInt()),\n  Schema.String.annotate({ title: \"Str\" }),\n]).annotate({\n  description:\n    \"JSON RPC Request Id\\n\\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\\n\\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\\n\\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\\n\\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions.\",\n});\n\nexport type Role = \"assistant\" | \"user\";\nexport const Role = Schema.Literals([\"assistant\", \"user\"]).annotate({\n  description: \"The sender or recipient of messages and data in a conversation.\",\n});\n\nexport type SessionCloseCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n};\nexport const SessionCloseCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nCapabilities for the `session/close` method.\\n\\nBy supplying `{}` it means that the agent supports closing of sessions.\",\n});\n\nexport type SessionConfigOptionCategory = \"mode\" | \"model\" | \"thought_level\" | string;\nexport const SessionConfigOptionCategory = Schema.Union([\n  Schema.Literal(\"mode\").annotate({ description: \"Session mode selector.\" }),\n  Schema.Literal(\"model\").annotate({ description: \"Model selector.\" }),\n  Schema.Literal(\"thought_level\").annotate({ description: \"Thought/reasoning level selector.\" }),\n  Schema.String.annotate({ title: \"other\", description: \"Unknown / uncategorized selector.\" }),\n]).annotate({\n  description:\n    \"Semantic category for a session configuration option.\\n\\nThis is intended to help Clients distinguish broadly common selectors (e.g. model selector vs\\nsession mode selector vs thought/reasoning level) for UX purposes (keyboard shortcuts, icons,\\nplacement). It MUST NOT be required for correctness. Clients MUST handle missing or unknown\\ncategories gracefully.\\n\\nCategory names beginning with `_` are free for custom use, like other ACP extension methods.\\nCategory names that do not begin with `_` are reserved for the ACP spec.\",\n});\n\nexport type SessionConfigSelectOption = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly description?: string | null;\n  readonly name: string;\n  readonly value: string;\n};\nexport const SessionConfigSelectOption = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional description for this option value.\" }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String.annotate({ description: \"Human-readable label for this option value.\" }),\n  value: Schema.String.annotate({\n    description: \"Unique identifier for a session configuration option value.\",\n  }),\n}).annotate({ description: \"A possible value for a session configuration option.\" });\n\nexport type SessionForkCapabilities = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const SessionForkCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nCapabilities for the `session/fork` method.\\n\\nBy supplying `{}` it means that the agent supports forking of sessions.\",\n});\n\nexport type SessionInfo = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cwd: string;\n  readonly sessionId: string;\n  readonly title?: string | null;\n  readonly updatedAt?: string | null;\n};\nexport const SessionInfo = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.String.annotate({\n    description: \"The working directory for this session. Must be an absolute path.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Human-readable title for the session\" }),\n      Schema.Null,\n    ]),\n  ),\n  updatedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"ISO 8601 timestamp of last activity\" }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Information about a session returned by session/list\" });\n\nexport type SessionListCapabilities = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const SessionListCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"Capabilities for the `session/list` method.\\n\\nBy supplying `{}` it means that the agent supports listing of sessions.\",\n});\n\nexport type SessionModeId = string;\nexport const SessionModeId = Schema.String.annotate({\n  description: \"Unique identifier for a Session Mode.\",\n});\n\nexport type SessionResumeCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n};\nexport const SessionResumeCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nCapabilities for the `session/resume` method.\\n\\nBy supplying `{}` it means that the agent supports resuming of sessions.\",\n});\n\nexport type StringFormat = \"email\" | \"uri\" | \"date\" | \"date-time\";\nexport const StringFormat = Schema.Literals([\"email\", \"uri\", \"date\", \"date-time\"]).annotate({\n  description: \"String format types for string properties in elicitation schemas.\",\n});\n\nexport type TerminalExitStatus = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly exitCode?: number | null;\n  readonly signal?: string | null;\n};\nexport const TerminalExitStatus = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  exitCode: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"The process exit code (may be null if terminated by signal).\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  signal: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"The signal that terminated the process (may be null if exited normally).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Exit status of a terminal command.\" });\n\nexport type ToolCallLocation = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly line?: number | null;\n  readonly path: string;\n};\nexport const ToolCallLocation = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  line: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Optional line number within the file.\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.String.annotate({ description: \"The file path being accessed or modified.\" }),\n}).annotate({\n  description:\n    'A file location being accessed or modified by a tool.\\n\\nEnables clients to implement \"follow-along\" features that track\\nwhich files the agent is working with in real-time.\\n\\nSee protocol docs: [Following the Agent](https://agentclientprotocol.com/protocol/tool-calls#following-the-agent)',\n});\n\nexport type ToolCallStatus = \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\nexport const ToolCallStatus = Schema.Literals([\n  \"pending\",\n  \"in_progress\",\n  \"completed\",\n  \"failed\",\n]).annotate({\n  description:\n    \"Execution status of a tool call.\\n\\nTool calls progress through different statuses during their lifecycle.\\n\\nSee protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status)\",\n});\n\nexport type ToolKind =\n  | \"read\"\n  | \"edit\"\n  | \"delete\"\n  | \"move\"\n  | \"search\"\n  | \"execute\"\n  | \"think\"\n  | \"fetch\"\n  | \"switch_mode\"\n  | \"other\";\nexport const ToolKind = Schema.Literals([\n  \"read\",\n  \"edit\",\n  \"delete\",\n  \"move\",\n  \"search\",\n  \"execute\",\n  \"think\",\n  \"fetch\",\n  \"switch_mode\",\n  \"other\",\n]).annotate({\n  description:\n    \"Categories of tools that can be invoked.\\n\\nTool kinds help clients choose appropriate icons and optimize how they\\ndisplay tool execution progress.\\n\\nSee protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)\",\n});\n\nexport type Usage = {\n  readonly cachedReadTokens?: number | null;\n  readonly cachedWriteTokens?: number | null;\n  readonly inputTokens: number;\n  readonly outputTokens: number;\n  readonly thoughtTokens?: number | null;\n  readonly totalTokens: number;\n};\nexport const Usage = Schema.Struct({\n  cachedReadTokens: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Total cache read tokens.\", format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  cachedWriteTokens: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Total cache write tokens.\", format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  inputTokens: Schema.Number.annotate({\n    description: \"Total input tokens across all turns.\",\n    format: \"uint64\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  outputTokens: Schema.Number.annotate({\n    description: \"Total output tokens across all turns.\",\n    format: \"uint64\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  thoughtTokens: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Total thought/reasoning tokens\", format: \"uint64\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  totalTokens: Schema.Number.annotate({\n    description: \"Sum of all token types across session.\",\n    format: \"uint64\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nToken usage information for a prompt turn.\",\n});\n\nexport type AuthMethod =\n  | {\n      readonly type: \"env_var\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly description?: string | null;\n      readonly id: string;\n      readonly link?: string | null;\n      readonly name: string;\n      readonly vars: ReadonlyArray<AuthEnvVar>;\n    }\n  | {\n      readonly type: \"terminal\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly args?: ReadonlyArray<string>;\n      readonly description?: string | null;\n      readonly env?: { readonly [x: string]: string };\n      readonly id: string;\n      readonly name: string;\n    }\n  | {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly description?: string | null;\n      readonly id: string;\n      readonly name: string;\n    };\nexport const AuthMethod = Schema.Union([\n  Schema.Struct({\n    type: Schema.Literal(\"env_var\"),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    description: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description:\n            \"Optional description providing more details about this authentication method.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    id: Schema.String.annotate({\n      description: \"Unique identifier for this authentication method.\",\n    }),\n    link: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description: \"Optional link to a page where the user can obtain their credentials.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    name: Schema.String.annotate({\n      description: \"Human-readable name of the authentication method.\",\n    }),\n    vars: Schema.Array(AuthEnvVar).annotate({\n      description: \"The environment variables the client should set.\",\n    }),\n  }).annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nEnvironment variable authentication method.\\n\\nThe user provides credentials that the client passes to the agent as environment variables.\",\n  }),\n  Schema.Struct({\n    type: Schema.Literal(\"terminal\"),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    args: Schema.optionalKey(\n      Schema.Array(Schema.String).annotate({\n        description:\n          \"Additional arguments to pass when running the agent binary for terminal auth.\",\n      }),\n    ),\n    description: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description:\n            \"Optional description providing more details about this authentication method.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    env: Schema.optionalKey(\n      Schema.Record(Schema.String, Schema.String).annotate({\n        description:\n          \"Additional environment variables to set when running the agent binary for terminal auth.\",\n      }),\n    ),\n    id: Schema.String.annotate({\n      description: \"Unique identifier for this authentication method.\",\n    }),\n    name: Schema.String.annotate({\n      description: \"Human-readable name of the authentication method.\",\n    }),\n  }).annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nTerminal-based authentication method.\\n\\nThe client runs an interactive terminal for the user to authenticate via a TUI.\",\n  }),\n  Schema.Struct({\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    description: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description:\n            \"Optional description providing more details about this authentication method.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    id: Schema.String.annotate({\n      description: \"Unique identifier for this authentication method.\",\n    }),\n    name: Schema.String.annotate({\n      description: \"Human-readable name of the authentication method.\",\n    }),\n  }).annotate({\n    title: \"agent\",\n    description:\n      \"Agent handles authentication itself.\\n\\nThis is the default authentication method type.\",\n  }),\n]).annotate({\n  description:\n    \"Describes an available authentication method.\\n\\nThe `type` field acts as the discriminator in the serialized JSON form.\\nWhen no `type` is present, the method is treated as `agent`.\",\n});\n\nexport type AvailableCommand = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly description: string;\n  readonly input?: AvailableCommandInput | null;\n  readonly name: string;\n};\nexport const AvailableCommand = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.String.annotate({\n    description: \"Human-readable description of what the command does.\",\n  }),\n  input: Schema.optionalKey(\n    Schema.Union([AvailableCommandInput, Schema.Null]).annotate({\n      description: \"Input for the command if required\",\n    }),\n  ),\n  name: Schema.String.annotate({\n    description: \"Command name (e.g., `create_plan`, `research_codebase`).\",\n  }),\n}).annotate({ description: \"Information about a command.\" });\n\nexport type ElicitationCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly form?: ElicitationFormCapabilities | null;\n  readonly url?: ElicitationUrlCapabilities | null;\n};\nexport const ElicitationCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  form: Schema.optionalKey(\n    Schema.Union([ElicitationFormCapabilities, Schema.Null]).annotate({\n      description: \"Whether the client supports form-based elicitation.\",\n    }),\n  ),\n  url: Schema.optionalKey(\n    Schema.Union([ElicitationUrlCapabilities, Schema.Null]).annotate({\n      description: \"Whether the client supports URL-based elicitation.\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nElicitation capabilities supported by the client.\",\n});\n\nexport type McpServer =\n  | {\n      readonly type: \"http\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly headers: ReadonlyArray<HttpHeader>;\n      readonly name: string;\n      readonly url: string;\n    }\n  | {\n      readonly type: \"sse\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly headers: ReadonlyArray<HttpHeader>;\n      readonly name: string;\n      readonly url: string;\n    }\n  | {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly args: ReadonlyArray<string>;\n      readonly command: string;\n      readonly env: ReadonlyArray<EnvVariable>;\n      readonly name: string;\n    };\nexport const McpServer = Schema.Union([\n  Schema.Struct({\n    type: Schema.Literal(\"http\"),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    headers: Schema.Array(HttpHeader).annotate({\n      description: \"HTTP headers to set when making requests to the MCP server.\",\n    }),\n    name: Schema.String.annotate({\n      description: \"Human-readable name identifying this MCP server.\",\n    }),\n    url: Schema.String.annotate({ description: \"URL to the MCP server.\" }),\n  }).annotate({ description: \"HTTP transport configuration for MCP.\" }),\n  Schema.Struct({\n    type: Schema.Literal(\"sse\"),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    headers: Schema.Array(HttpHeader).annotate({\n      description: \"HTTP headers to set when making requests to the MCP server.\",\n    }),\n    name: Schema.String.annotate({\n      description: \"Human-readable name identifying this MCP server.\",\n    }),\n    url: Schema.String.annotate({ description: \"URL to the MCP server.\" }),\n  }).annotate({ description: \"SSE transport configuration for MCP.\" }),\n  Schema.Struct({\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    args: Schema.Array(Schema.String).annotate({\n      description: \"Command-line arguments to pass to the MCP server.\",\n    }),\n    command: Schema.String.annotate({ description: \"Path to the MCP server executable.\" }),\n    env: Schema.Array(EnvVariable).annotate({\n      description: \"Environment variables to set when launching the MCP server.\",\n    }),\n    name: Schema.String.annotate({\n      description: \"Human-readable name identifying this MCP server.\",\n    }),\n  }).annotate({ title: \"stdio\", description: \"Stdio transport configuration for MCP.\" }),\n]).annotate({\n  description:\n    \"Configuration for connecting to an MCP (Model Context Protocol) server.\\n\\nMCP servers provide tools and context that the agent can use when\\nprocessing prompts.\\n\\nSee protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers)\",\n});\n\nexport type SessionModelState = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly availableModels: ReadonlyArray<ModelInfo>;\n  readonly currentModelId: string;\n};\nexport const SessionModelState = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  availableModels: Schema.Array(ModelInfo).annotate({\n    description: \"The set of models that the Agent can use\",\n  }),\n  currentModelId: Schema.String.annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for a model.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe set of models and the one currently active.\",\n});\n\nexport type Annotations = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly audience?: ReadonlyArray<Role> | null;\n  readonly lastModified?: string | null;\n  readonly priority?: number | null;\n};\nexport const Annotations = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  audience: Schema.optionalKey(Schema.Union([Schema.Array(Role), Schema.Null])),\n  lastModified: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  priority: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ format: \"double\" }).check(Schema.isFinite()),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"Optional annotations for the client. The client can use annotations to inform how objects are used or displayed\",\n});\n\nexport type SessionConfigSelectGroup = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly group: string;\n  readonly name: string;\n  readonly options: ReadonlyArray<SessionConfigSelectOption>;\n};\nexport const SessionConfigSelectGroup = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  group: Schema.String.annotate({\n    description: \"Unique identifier for a session configuration option value group.\",\n  }),\n  name: Schema.String.annotate({ description: \"Human-readable label for this group.\" }),\n  options: Schema.Array(SessionConfigSelectOption).annotate({\n    description: \"The set of option values in this group.\",\n  }),\n}).annotate({ description: \"A group of possible values for a session configuration option.\" });\n\nexport type SessionMode = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly description?: string | null;\n  readonly id: SessionModeId;\n  readonly name: string;\n};\nexport const SessionMode = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  id: SessionModeId,\n  name: Schema.String,\n}).annotate({\n  description:\n    \"A mode the agent can operate in.\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n});\n\nexport type ElicitationPropertySchema =\n  | {\n      readonly type: \"string\";\n      readonly default?: string | null;\n      readonly description?: string | null;\n      readonly enum?: ReadonlyArray<string> | null;\n      readonly format?: StringFormat | null;\n      readonly maxLength?: number | null;\n      readonly minLength?: number | null;\n      readonly oneOf?: ReadonlyArray<EnumOption> | null;\n      readonly pattern?: string | null;\n      readonly title?: string | null;\n    }\n  | {\n      readonly type: \"number\";\n      readonly default?: number | null;\n      readonly description?: string | null;\n      readonly maximum?: number | null;\n      readonly minimum?: number | null;\n      readonly title?: string | null;\n    }\n  | {\n      readonly type: \"integer\";\n      readonly default?: number | null;\n      readonly description?: string | null;\n      readonly maximum?: number | null;\n      readonly minimum?: number | null;\n      readonly title?: string | null;\n    }\n  | {\n      readonly type: \"boolean\";\n      readonly default?: boolean | null;\n      readonly description?: string | null;\n      readonly title?: string | null;\n    }\n  | {\n      readonly type: \"array\";\n      readonly default?: ReadonlyArray<string> | null;\n      readonly description?: string | null;\n      readonly items:\n        | { readonly enum: ReadonlyArray<string>; readonly type: \"string\" }\n        | { readonly anyOf: ReadonlyArray<EnumOption> };\n      readonly maxItems?: number | null;\n      readonly minItems?: number | null;\n      readonly title?: string | null;\n    };\nexport const ElicitationPropertySchema = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"string\"),\n      default: Schema.optionalKey(\n        Schema.Union([Schema.String.annotate({ description: \"Default value.\" }), Schema.Null]),\n      ),\n      description: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Human-readable description.\" }),\n          Schema.Null,\n        ]),\n      ),\n      enum: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(Schema.String).annotate({\n            description: \"Enum values for untitled single-select enums.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      format: Schema.optionalKey(\n        Schema.Union([StringFormat, Schema.Null]).annotate({ description: \"String format.\" }),\n      ),\n      maxLength: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ description: \"Maximum string length.\", format: \"uint32\" })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      minLength: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ description: \"Minimum string length.\", format: \"uint32\" })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      oneOf: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(EnumOption).annotate({\n            description: \"Titled enum options for titled single-select enums.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      pattern: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Pattern the string must match.\" }),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Optional title for the property.\" }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({\n      description:\n        'Schema for string properties in an elicitation form.\\n\\nWhen `enum` or `oneOf` is set, this represents a single-select enum\\nwith `\"type\": \"string\"`.',\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"number\"),\n      default: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ description: \"Default value.\", format: \"double\" }).check(\n            Schema.isFinite(),\n          ),\n          Schema.Null,\n        ]),\n      ),\n      description: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Human-readable description.\" }),\n          Schema.Null,\n        ]),\n      ),\n      maximum: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"Maximum value (inclusive).\",\n            format: \"double\",\n          }).check(Schema.isFinite()),\n          Schema.Null,\n        ]),\n      ),\n      minimum: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"Minimum value (inclusive).\",\n            format: \"double\",\n          }).check(Schema.isFinite()),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Optional title for the property.\" }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({\n      description: \"Schema for number (floating-point) properties in an elicitation form.\",\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"integer\"),\n      default: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ description: \"Default value.\", format: \"int64\" }).check(\n            Schema.isInt(),\n          ),\n          Schema.Null,\n        ]),\n      ),\n      description: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Human-readable description.\" }),\n          Schema.Null,\n        ]),\n      ),\n      maximum: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"Maximum value (inclusive).\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      minimum: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"Minimum value (inclusive).\",\n            format: \"int64\",\n          }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Optional title for the property.\" }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ description: \"Schema for integer properties in an elicitation form.\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"boolean\"),\n      default: Schema.optionalKey(\n        Schema.Union([Schema.Boolean.annotate({ description: \"Default value.\" }), Schema.Null]),\n      ),\n      description: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Human-readable description.\" }),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Optional title for the property.\" }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ description: \"Schema for boolean properties in an elicitation form.\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"array\"),\n      default: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(Schema.String).annotate({ description: \"Default selected values.\" }),\n          Schema.Null,\n        ]),\n      ),\n      description: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Human-readable description.\" }),\n          Schema.Null,\n        ]),\n      ),\n      items: Schema.Union([\n        Schema.Struct({\n          enum: Schema.Array(Schema.String).annotate({ description: \"Allowed enum values.\" }),\n          type: Schema.Literal(\"string\").annotate({\n            description: \"Items definition for untitled multi-select enum properties.\",\n          }),\n        }).annotate({\n          title: \"Untitled\",\n          description: \"Items definition for untitled multi-select enum properties.\",\n        }),\n        Schema.Struct({\n          anyOf: Schema.Array(EnumOption).annotate({ description: \"Titled enum options.\" }),\n        }).annotate({\n          title: \"Titled\",\n          description: \"Items definition for titled multi-select enum properties.\",\n        }),\n      ]).annotate({ description: \"Items for a multi-select (array) property schema.\" }),\n      maxItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"Maximum number of items to select.\",\n            format: \"uint64\",\n          })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      minItems: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({\n            description: \"Minimum number of items to select.\",\n            format: \"uint64\",\n          })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0)),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Optional title for the property.\" }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({\n      description: \"Schema for multi-select (array) properties in an elicitation form.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    'Property schema for elicitation form fields.\\n\\nEach variant corresponds to a JSON Schema `\"type\"` value.\\nSingle-select enums use the `String` variant with `enum` or `oneOf` set.\\nMulti-select enums use the `Array` variant.',\n});\n\nexport type ContentBlock =\n  | {\n      readonly type: \"text\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly annotations?: Annotations | null;\n      readonly text: string;\n    }\n  | {\n      readonly type: \"image\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly annotations?: Annotations | null;\n      readonly data: string;\n      readonly mimeType: string;\n      readonly uri?: string | null;\n    }\n  | {\n      readonly type: \"audio\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly annotations?: Annotations | null;\n      readonly data: string;\n      readonly mimeType: string;\n    }\n  | {\n      readonly type: \"resource_link\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly annotations?: Annotations | null;\n      readonly description?: string | null;\n      readonly mimeType?: string | null;\n      readonly name: string;\n      readonly size?: number | null;\n      readonly title?: string | null;\n      readonly uri: string;\n    }\n  | {\n      readonly type: \"resource\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly annotations?: Annotations | null;\n      readonly resource: EmbeddedResourceResource;\n    };\nexport const ContentBlock = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"text\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n      text: Schema.String,\n    }).annotate({ description: \"Text provided to or from an LLM.\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"image\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n      data: Schema.String,\n      mimeType: Schema.String,\n      uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n    }).annotate({ description: \"An image provided to or from an LLM.\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"audio\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n      data: Schema.String,\n      mimeType: Schema.String,\n    }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"resource_link\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n      description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      name: Schema.String,\n      size: Schema.optionalKey(\n        Schema.Union([\n          Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      uri: Schema.String,\n    }).annotate({\n      description:\n        \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"resource\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n      resource: EmbeddedResourceResource,\n    }).annotate({\n      description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n});\n\nexport type ToolCallContent =\n  | {\n      readonly type: \"content\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly content:\n        | {\n            readonly type: \"text\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly text: string;\n          }\n        | {\n            readonly type: \"image\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n            readonly uri?: string | null;\n          }\n        | {\n            readonly type: \"audio\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n          }\n        | {\n            readonly type: \"resource_link\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly description?: string | null;\n            readonly mimeType?: string | null;\n            readonly name: string;\n            readonly size?: number | null;\n            readonly title?: string | null;\n            readonly uri: string;\n          }\n        | {\n            readonly type: \"resource\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly resource: EmbeddedResourceResource;\n          };\n    }\n  | {\n      readonly type: \"diff\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly newText: string;\n      readonly oldText?: string | null;\n      readonly path: string;\n    }\n  | {\n      readonly type: \"terminal\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly terminalId: string;\n    };\nexport const ToolCallContent = Schema.Union(\n  [\n    Schema.Struct({\n      type: Schema.Literal(\"content\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      content: Schema.Union(\n        [\n          Schema.Struct({\n            type: Schema.Literal(\"text\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            text: Schema.String,\n          }).annotate({ description: \"Text provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"image\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n            uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n          }).annotate({ description: \"An image provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"audio\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n          }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource_link\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            name: Schema.String,\n            size: Schema.optionalKey(\n              Schema.Union([\n                Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                Schema.Null,\n              ]),\n            ),\n            title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            uri: Schema.String,\n          }).annotate({\n            description:\n              \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n          }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            resource: EmbeddedResourceResource,\n          }).annotate({\n            description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n          }),\n        ],\n        { mode: \"oneOf\" },\n      ).annotate({\n        description:\n          \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n      }),\n    }).annotate({ description: \"Standard content block (text, images, resources).\" }),\n    Schema.Struct({\n      type: Schema.Literal(\"diff\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      newText: Schema.String.annotate({ description: \"The new content after modification.\" }),\n      oldText: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"The original content (None for new files).\" }),\n          Schema.Null,\n        ]),\n      ),\n      path: Schema.String.annotate({ description: \"The file path being modified.\" }),\n    }).annotate({\n      description:\n        \"A diff representing file modifications.\\n\\nShows changes to files in a format suitable for display in the client UI.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content)\",\n    }),\n    Schema.Struct({\n      type: Schema.Literal(\"terminal\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      terminalId: Schema.String,\n    }).annotate({\n      description:\n        \"Embed a terminal created with `terminal/create` by its id.\\n\\nThe terminal must be added before calling `terminal/release`.\\n\\nSee protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals)\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"Content produced by a tool call.\\n\\nTool calls can produce different types of content including\\nstandard content blocks (text, images) or file diffs.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content)\",\n});\n\nexport type SessionConfigOption =\n  | {\n      readonly type: \"select\";\n      readonly currentValue: string;\n      readonly options:\n        | ReadonlyArray<SessionConfigSelectOption>\n        | ReadonlyArray<SessionConfigSelectGroup>;\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly category?: SessionConfigOptionCategory | null;\n      readonly description?: string | null;\n      readonly id: string;\n      readonly name: string;\n    }\n  | {\n      readonly type: \"boolean\";\n      readonly currentValue: boolean;\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly category?: SessionConfigOptionCategory | null;\n      readonly description?: string | null;\n      readonly id: string;\n      readonly name: string;\n    };\nexport const SessionConfigOption = Schema.Union([\n  Schema.Struct({\n    type: Schema.Literal(\"select\"),\n    currentValue: Schema.String.annotate({\n      description: \"Unique identifier for a session configuration option value.\",\n    }),\n    options: Schema.Union([\n      Schema.Array(SessionConfigSelectOption).annotate({\n        title: \"Ungrouped\",\n        description: \"A flat list of options with no grouping.\",\n      }),\n      Schema.Array(SessionConfigSelectGroup).annotate({\n        title: \"Grouped\",\n        description: \"A list of options grouped under headers.\",\n      }),\n    ]).annotate({ description: \"Possible values for a session configuration option.\" }),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    category: Schema.optionalKey(\n      Schema.Union([SessionConfigOptionCategory, Schema.Null]).annotate({\n        description: \"Optional semantic category for this option (UX only).\",\n      }),\n    ),\n    description: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description: \"Optional description for the Client to display to the user.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    id: Schema.String.annotate({\n      description: \"Unique identifier for a session configuration option.\",\n    }),\n    name: Schema.String.annotate({ description: \"Human-readable label for the option.\" }),\n  }).annotate({ description: \"A session configuration option selector and its current state.\" }),\n  Schema.Struct({\n    type: Schema.Literal(\"boolean\"),\n    currentValue: Schema.Boolean.annotate({\n      description: \"The current value of the boolean option.\",\n    }),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    category: Schema.optionalKey(\n      Schema.Union([SessionConfigOptionCategory, Schema.Null]).annotate({\n        description: \"Optional semantic category for this option (UX only).\",\n      }),\n    ),\n    description: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description: \"Optional description for the Client to display to the user.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    id: Schema.String.annotate({\n      description: \"Unique identifier for a session configuration option.\",\n    }),\n    name: Schema.String.annotate({ description: \"Human-readable label for the option.\" }),\n  }).annotate({ description: \"A session configuration option selector and its current state.\" }),\n]);\n\nexport type SessionModeState = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly availableModes: ReadonlyArray<SessionMode>;\n  readonly currentModeId: string;\n};\nexport const SessionModeState = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  availableModes: Schema.Array(SessionMode).annotate({\n    description: \"The set of modes that the Agent can operate in\",\n  }),\n  currentModeId: Schema.String.annotate({ description: \"Unique identifier for a Session Mode.\" }),\n}).annotate({ description: \"The set of modes and the one currently active.\" });\n\nexport type AgentAuthCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly logout?: LogoutCapabilities | null;\n};\nexport const AgentAuthCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  logout: Schema.optionalKey(\n    Schema.Union([LogoutCapabilities, Schema.Null]).annotate({\n      description:\n        \"Whether the agent supports the logout method.\\n\\nBy supplying `{}` it means that the agent supports the logout method.\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication-related capabilities supported by the agent.\",\n});\n\nexport type AgentCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly auth?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly logout?: LogoutCapabilities | null;\n  };\n  readonly loadSession?: boolean;\n  readonly mcpCapabilities?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly http?: boolean;\n    readonly sse?: boolean;\n  };\n  readonly promptCapabilities?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly audio?: boolean;\n    readonly embeddedContext?: boolean;\n    readonly image?: boolean;\n  };\n  readonly sessionCapabilities?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly close?: SessionCloseCapabilities | null;\n    readonly fork?: SessionForkCapabilities | null;\n    readonly list?: SessionListCapabilities | null;\n    readonly resume?: SessionResumeCapabilities | null;\n  };\n};\nexport const AgentCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  auth: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      logout: Schema.optionalKey(\n        Schema.Union([LogoutCapabilities, Schema.Null]).annotate({\n          description:\n            \"Whether the agent supports the logout method.\\n\\nBy supplying `{}` it means that the agent supports the logout method.\",\n        }),\n      ),\n    }).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication-related capabilities supported by the agent.\",\n      default: {},\n    }),\n  ),\n  loadSession: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Whether the agent supports `session/load`.\",\n      default: false,\n    }),\n  ),\n  mcpCapabilities: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      http: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Agent supports [`McpServer::Http`].\",\n          default: false,\n        }),\n      ),\n      sse: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Agent supports [`McpServer::Sse`].\",\n          default: false,\n        }),\n      ),\n    }).annotate({\n      description: \"MCP capabilities supported by the agent\",\n      default: { http: false, sse: false },\n    }),\n  ),\n  promptCapabilities: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      audio: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Agent supports [`ContentBlock::Audio`].\",\n          default: false,\n        }),\n      ),\n      embeddedContext: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description:\n            \"Agent supports embedded context in `session/prompt` requests.\\n\\nWhen enabled, the Client is allowed to include [`ContentBlock::Resource`]\\nin prompt requests for pieces of context that are referenced in the message.\",\n          default: false,\n        }),\n      ),\n      image: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Agent supports [`ContentBlock::Image`].\",\n          default: false,\n        }),\n      ),\n    }).annotate({\n      description:\n        \"Prompt capabilities supported by the agent in `session/prompt` requests.\\n\\nBaseline agent functionality requires support for [`ContentBlock::Text`]\\nand [`ContentBlock::ResourceLink`] in prompt requests.\\n\\nOther variants must be explicitly opted in to.\\nCapabilities for different types of content in prompt requests.\\n\\nIndicates which content types beyond the baseline (text and resource links)\\nthe agent can process.\\n\\nSee protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities)\",\n      default: { audio: false, embeddedContext: false, image: false },\n    }),\n  ),\n  sessionCapabilities: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      close: Schema.optionalKey(\n        Schema.Union([SessionCloseCapabilities, Schema.Null]).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/close`.\",\n        }),\n      ),\n      fork: Schema.optionalKey(\n        Schema.Union([SessionForkCapabilities, Schema.Null]).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/fork`.\",\n        }),\n      ),\n      list: Schema.optionalKey(\n        Schema.Union([SessionListCapabilities, Schema.Null]).annotate({\n          description: \"Whether the agent supports `session/list`.\",\n        }),\n      ),\n      resume: Schema.optionalKey(\n        Schema.Union([SessionResumeCapabilities, Schema.Null]).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/resume`.\",\n        }),\n      ),\n    }).annotate({\n      default: {},\n      description:\n        \"Session capabilities supported by the agent.\\n\\nAs a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`.\\n\\nOptionally, they **MAY** support other session methods and notifications by specifying additional capabilities.\\n\\nNote: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol.\\n\\nSee protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities)\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"Capabilities supported by the agent.\\n\\nAdvertised during initialization to inform the client about\\navailable features and content types.\\n\\nSee protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities)\",\n});\n\nexport type AgentNotification = {\n  readonly method: string;\n  readonly params?:\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly sessionId: string;\n        readonly update:\n          | {\n              readonly sessionUpdate: \"user_message_chunk\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly content:\n                | {\n                    readonly type: \"text\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly text: string;\n                  }\n                | {\n                    readonly type: \"image\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly data: string;\n                    readonly mimeType: string;\n                    readonly uri?: string | null;\n                  }\n                | {\n                    readonly type: \"audio\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly data: string;\n                    readonly mimeType: string;\n                  }\n                | {\n                    readonly type: \"resource_link\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly description?: string | null;\n                    readonly mimeType?: string | null;\n                    readonly name: string;\n                    readonly size?: number | null;\n                    readonly title?: string | null;\n                    readonly uri: string;\n                  }\n                | {\n                    readonly type: \"resource\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly resource: EmbeddedResourceResource;\n                  };\n              readonly messageId?: string | null;\n            }\n          | {\n              readonly sessionUpdate: \"agent_message_chunk\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly content:\n                | {\n                    readonly type: \"text\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly text: string;\n                  }\n                | {\n                    readonly type: \"image\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly data: string;\n                    readonly mimeType: string;\n                    readonly uri?: string | null;\n                  }\n                | {\n                    readonly type: \"audio\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly data: string;\n                    readonly mimeType: string;\n                  }\n                | {\n                    readonly type: \"resource_link\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly description?: string | null;\n                    readonly mimeType?: string | null;\n                    readonly name: string;\n                    readonly size?: number | null;\n                    readonly title?: string | null;\n                    readonly uri: string;\n                  }\n                | {\n                    readonly type: \"resource\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly resource: EmbeddedResourceResource;\n                  };\n              readonly messageId?: string | null;\n            }\n          | {\n              readonly sessionUpdate: \"agent_thought_chunk\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly content:\n                | {\n                    readonly type: \"text\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly text: string;\n                  }\n                | {\n                    readonly type: \"image\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly data: string;\n                    readonly mimeType: string;\n                    readonly uri?: string | null;\n                  }\n                | {\n                    readonly type: \"audio\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly data: string;\n                    readonly mimeType: string;\n                  }\n                | {\n                    readonly type: \"resource_link\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly description?: string | null;\n                    readonly mimeType?: string | null;\n                    readonly name: string;\n                    readonly size?: number | null;\n                    readonly title?: string | null;\n                    readonly uri: string;\n                  }\n                | {\n                    readonly type: \"resource\";\n                    readonly _meta?: { readonly [x: string]: unknown } | null;\n                    readonly annotations?: Annotations | null;\n                    readonly resource: EmbeddedResourceResource;\n                  };\n              readonly messageId?: string | null;\n            }\n          | {\n              readonly sessionUpdate: \"tool_call\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly content?: ReadonlyArray<ToolCallContent>;\n              readonly kind?:\n                | \"read\"\n                | \"edit\"\n                | \"delete\"\n                | \"move\"\n                | \"search\"\n                | \"execute\"\n                | \"think\"\n                | \"fetch\"\n                | \"switch_mode\"\n                | \"other\";\n              readonly locations?: ReadonlyArray<ToolCallLocation>;\n              readonly rawInput?: unknown;\n              readonly rawOutput?: unknown;\n              readonly status?: \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n              readonly title: string;\n              readonly toolCallId: string;\n            }\n          | {\n              readonly sessionUpdate: \"tool_call_update\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly content?: ReadonlyArray<ToolCallContent> | null;\n              readonly kind?: ToolKind | null;\n              readonly locations?: ReadonlyArray<ToolCallLocation> | null;\n              readonly rawInput?: unknown;\n              readonly rawOutput?: unknown;\n              readonly status?: ToolCallStatus | null;\n              readonly title?: string | null;\n              readonly toolCallId: string;\n            }\n          | {\n              readonly sessionUpdate: \"plan\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly entries: ReadonlyArray<PlanEntry>;\n            }\n          | {\n              readonly sessionUpdate: \"available_commands_update\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly availableCommands: ReadonlyArray<AvailableCommand>;\n            }\n          | {\n              readonly sessionUpdate: \"current_mode_update\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly currentModeId: string;\n            }\n          | {\n              readonly sessionUpdate: \"config_option_update\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly configOptions: ReadonlyArray<SessionConfigOption>;\n            }\n          | {\n              readonly sessionUpdate: \"session_info_update\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly title?: string | null;\n              readonly updatedAt?: string | null;\n            }\n          | {\n              readonly sessionUpdate: \"usage_update\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly cost?: Cost | null;\n              readonly size: number;\n              readonly used: number;\n            };\n      }\n    | { readonly _meta?: { readonly [x: string]: unknown } | null; readonly elicitationId: string }\n    | unknown\n    | null;\n};\nexport const AgentNotification = Schema.Struct({\n  method: Schema.String,\n  params: Schema.optionalKey(\n    Schema.Union([\n      Schema.Union([\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n          update: Schema.Union(\n            [\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"user_message_chunk\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                content: Schema.Union(\n                  [\n                    Schema.Struct({\n                      type: Schema.Literal(\"text\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      text: Schema.String,\n                    }).annotate({ description: \"Text provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"image\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      data: Schema.String,\n                      mimeType: Schema.String,\n                      uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                    }).annotate({ description: \"An image provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"audio\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      data: Schema.String,\n                      mimeType: Schema.String,\n                    }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"resource_link\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      name: Schema.String,\n                      size: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                          Schema.Null,\n                        ]),\n                      ),\n                      title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      uri: Schema.String,\n                    }).annotate({\n                      description:\n                        \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n                    }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"resource\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      resource: EmbeddedResourceResource,\n                    }).annotate({\n                      description:\n                        \"The contents of a resource, embedded into a prompt or tool call result.\",\n                    }),\n                  ],\n                  { mode: \"oneOf\" },\n                ).annotate({\n                  description:\n                    \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n                }),\n                messageId: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.String.annotate({\n                      description:\n                        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n              }).annotate({ description: \"A streamed item of content\" }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"agent_message_chunk\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                content: Schema.Union(\n                  [\n                    Schema.Struct({\n                      type: Schema.Literal(\"text\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      text: Schema.String,\n                    }).annotate({ description: \"Text provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"image\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      data: Schema.String,\n                      mimeType: Schema.String,\n                      uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                    }).annotate({ description: \"An image provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"audio\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      data: Schema.String,\n                      mimeType: Schema.String,\n                    }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"resource_link\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      name: Schema.String,\n                      size: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                          Schema.Null,\n                        ]),\n                      ),\n                      title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      uri: Schema.String,\n                    }).annotate({\n                      description:\n                        \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n                    }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"resource\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      resource: EmbeddedResourceResource,\n                    }).annotate({\n                      description:\n                        \"The contents of a resource, embedded into a prompt or tool call result.\",\n                    }),\n                  ],\n                  { mode: \"oneOf\" },\n                ).annotate({\n                  description:\n                    \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n                }),\n                messageId: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.String.annotate({\n                      description:\n                        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n              }).annotate({ description: \"A streamed item of content\" }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"agent_thought_chunk\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                content: Schema.Union(\n                  [\n                    Schema.Struct({\n                      type: Schema.Literal(\"text\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      text: Schema.String,\n                    }).annotate({ description: \"Text provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"image\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      data: Schema.String,\n                      mimeType: Schema.String,\n                      uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                    }).annotate({ description: \"An image provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"audio\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      data: Schema.String,\n                      mimeType: Schema.String,\n                    }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"resource_link\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      name: Schema.String,\n                      size: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                          Schema.Null,\n                        ]),\n                      ),\n                      title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n                      uri: Schema.String,\n                    }).annotate({\n                      description:\n                        \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n                    }),\n                    Schema.Struct({\n                      type: Schema.Literal(\"resource\"),\n                      _meta: Schema.optionalKey(\n                        Schema.Union([\n                          Schema.Record(Schema.String, Schema.Unknown).annotate({\n                            description:\n                              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                          }),\n                          Schema.Null,\n                        ]),\n                      ),\n                      annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n                      resource: EmbeddedResourceResource,\n                    }).annotate({\n                      description:\n                        \"The contents of a resource, embedded into a prompt or tool call result.\",\n                    }),\n                  ],\n                  { mode: \"oneOf\" },\n                ).annotate({\n                  description:\n                    \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n                }),\n                messageId: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.String.annotate({\n                      description:\n                        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n              }).annotate({ description: \"A streamed item of content\" }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"tool_call\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                content: Schema.optionalKey(\n                  Schema.Array(ToolCallContent).annotate({\n                    description: \"Content produced by the tool call.\",\n                  }),\n                ),\n                kind: Schema.optionalKey(\n                  Schema.Literals([\n                    \"read\",\n                    \"edit\",\n                    \"delete\",\n                    \"move\",\n                    \"search\",\n                    \"execute\",\n                    \"think\",\n                    \"fetch\",\n                    \"switch_mode\",\n                    \"other\",\n                  ]).annotate({\n                    description:\n                      \"Categories of tools that can be invoked.\\n\\nTool kinds help clients choose appropriate icons and optimize how they\\ndisplay tool execution progress.\\n\\nSee protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)\",\n                  }),\n                ),\n                locations: Schema.optionalKey(\n                  Schema.Array(ToolCallLocation).annotate({\n                    description:\n                      'File locations affected by this tool call.\\nEnables \"follow-along\" features in clients.',\n                  }),\n                ),\n                rawInput: Schema.optionalKey(\n                  Schema.Unknown.annotate({\n                    description: \"Raw input parameters sent to the tool.\",\n                  }),\n                ),\n                rawOutput: Schema.optionalKey(\n                  Schema.Unknown.annotate({ description: \"Raw output returned by the tool.\" }),\n                ),\n                status: Schema.optionalKey(\n                  Schema.Literals([\"pending\", \"in_progress\", \"completed\", \"failed\"]).annotate({\n                    description:\n                      \"Execution status of a tool call.\\n\\nTool calls progress through different statuses during their lifecycle.\\n\\nSee protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status)\",\n                  }),\n                ),\n                title: Schema.String.annotate({\n                  description: \"Human-readable title describing what the tool is doing.\",\n                }),\n                toolCallId: Schema.String.annotate({\n                  description: \"Unique identifier for a tool call within a session.\",\n                }),\n              }).annotate({\n                description:\n                  \"Represents a tool call that the language model has requested.\\n\\nTool calls are actions that the agent executes on behalf of the language model,\\nsuch as reading files, executing code, or fetching data from external sources.\\n\\nSee protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls)\",\n              }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"tool_call_update\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                content: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Array(ToolCallContent).annotate({\n                      description: \"Replace the content collection.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                kind: Schema.optionalKey(\n                  Schema.Union([ToolKind, Schema.Null]).annotate({\n                    description: \"Update the tool kind.\",\n                  }),\n                ),\n                locations: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Array(ToolCallLocation).annotate({\n                      description: \"Replace the locations collection.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                rawInput: Schema.optionalKey(\n                  Schema.Unknown.annotate({ description: \"Update the raw input.\" }),\n                ),\n                rawOutput: Schema.optionalKey(\n                  Schema.Unknown.annotate({ description: \"Update the raw output.\" }),\n                ),\n                status: Schema.optionalKey(\n                  Schema.Union([ToolCallStatus, Schema.Null]).annotate({\n                    description: \"Update the execution status.\",\n                  }),\n                ),\n                title: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.String.annotate({ description: \"Update the human-readable title.\" }),\n                    Schema.Null,\n                  ]),\n                ),\n                toolCallId: Schema.String.annotate({\n                  description: \"Unique identifier for a tool call within a session.\",\n                }),\n              }).annotate({\n                description:\n                  \"An update to an existing tool call.\\n\\nUsed to report progress and results as tools execute. All fields except\\nthe tool call ID are optional - only changed fields need to be included.\\n\\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)\",\n              }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"plan\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                entries: Schema.Array(PlanEntry).annotate({\n                  description:\n                    \"The list of tasks to be accomplished.\\n\\nWhen updating a plan, the agent must send a complete list of all entries\\nwith their current status. The client replaces the entire plan with each update.\",\n                }),\n              }).annotate({\n                description:\n                  \"An execution plan for accomplishing complex tasks.\\n\\nPlans consist of multiple entries representing individual tasks or goals.\\nAgents report plans to clients to provide visibility into their execution strategy.\\nPlans can evolve during execution as the agent discovers new requirements or completes tasks.\\n\\nSee protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)\",\n              }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"available_commands_update\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                availableCommands: Schema.Array(AvailableCommand).annotate({\n                  description: \"Commands the agent can execute\",\n                }),\n              }).annotate({ description: \"Available commands are ready or have changed\" }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"current_mode_update\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                currentModeId: Schema.String.annotate({\n                  description: \"Unique identifier for a Session Mode.\",\n                }),\n              }).annotate({\n                description:\n                  \"The current mode of the session has changed\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n              }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"config_option_update\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                configOptions: Schema.Array(SessionConfigOption).annotate({\n                  description: \"The full set of configuration options and their current values.\",\n                }),\n              }).annotate({ description: \"Session configuration options have been updated.\" }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"session_info_update\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                title: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.String.annotate({\n                      description: \"Human-readable title for the session. Set to null to clear.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                updatedAt: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.String.annotate({\n                      description: \"ISO 8601 timestamp of last activity. Set to null to clear.\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n              }).annotate({\n                description:\n                  \"Update to session metadata. All fields are optional to support partial updates.\\n\\nAgents send this notification to update session information like title or custom metadata.\\nThis allows clients to display dynamic session names and track session state changes.\",\n              }),\n              Schema.Struct({\n                sessionUpdate: Schema.Literal(\"usage_update\"),\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                cost: Schema.optionalKey(\n                  Schema.Union([Cost, Schema.Null]).annotate({\n                    description: \"Cumulative session cost (optional).\",\n                  }),\n                ),\n                size: Schema.Number.annotate({\n                  description: \"Total context window size in tokens.\",\n                  format: \"uint64\",\n                })\n                  .check(Schema.isInt())\n                  .check(Schema.isGreaterThanOrEqualTo(0)),\n                used: Schema.Number.annotate({\n                  description: \"Tokens currently in context.\",\n                  format: \"uint64\",\n                })\n                  .check(Schema.isInt())\n                  .check(Schema.isGreaterThanOrEqualTo(0)),\n              }).annotate({\n                description:\n                  \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nContext window and cost update for a session.\",\n              }),\n            ],\n            { mode: \"oneOf\" },\n          ).annotate({\n            description:\n              \"Different types of updates that can be sent during session processing.\\n\\nThese updates provide real-time feedback about the agent's progress.\\n\\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)\",\n          }),\n        }).annotate({\n          title: \"SessionNotification\",\n          description:\n            \"Notification containing a session update from the agent.\\n\\nUsed to stream real-time progress and results during prompt processing.\\n\\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          elicitationId: Schema.String.annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nUnique identifier for an elicitation.\",\n          }),\n        }).annotate({\n          title: \"ElicitationCompleteNotification\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nNotification sent by the agent when a URL-based elicitation is complete.\",\n        }),\n        Schema.Unknown.annotate({\n          title: \"ExtNotification\",\n          description:\n            \"Allows the Agent to send an arbitrary notification that is not part of the ACP spec.\\nExtension notifications provide a way to send one-way messages for custom functionality\\nwhile maintaining protocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n      ]).annotate({\n        description:\n          \"All possible notifications that an agent can send to a client.\\n\\nThis enum is used internally for routing RPC notifications. You typically won't need\\nto use this directly - use the notification methods on the [`Client`] trait instead.\\n\\nNotifications do not expect a response.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type AgentRequest = {\n  readonly id: RequestId;\n  readonly method: string;\n  readonly params?:\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly content: string;\n        readonly path: string;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly limit?: number | null;\n        readonly line?: number | null;\n        readonly path: string;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly options: ReadonlyArray<PermissionOption>;\n        readonly sessionId: string;\n        readonly toolCall: {\n          readonly _meta?: { readonly [x: string]: unknown } | null;\n          readonly content?: ReadonlyArray<ToolCallContent> | null;\n          readonly kind?: ToolKind | null;\n          readonly locations?: ReadonlyArray<ToolCallLocation> | null;\n          readonly rawInput?: unknown;\n          readonly rawOutput?: unknown;\n          readonly status?: ToolCallStatus | null;\n          readonly title?: string | null;\n          readonly toolCallId: string;\n        };\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly args?: ReadonlyArray<string>;\n        readonly command: string;\n        readonly cwd?: string | null;\n        readonly env?: ReadonlyArray<EnvVariable>;\n        readonly outputByteLimit?: number | null;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly sessionId: string;\n        readonly terminalId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly sessionId: string;\n        readonly terminalId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly sessionId: string;\n        readonly terminalId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly sessionId: string;\n        readonly terminalId: string;\n      }\n    | {\n        readonly mode: \"form\";\n        readonly requestedSchema: {\n          readonly description?: string | null;\n          readonly properties?: { readonly [x: string]: ElicitationPropertySchema };\n          readonly required?: ReadonlyArray<string> | null;\n          readonly title?: string | null;\n          readonly type?: \"object\";\n        };\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly message: string;\n        readonly sessionId: string;\n      }\n    | {\n        readonly mode: \"url\";\n        readonly elicitationId: string;\n        readonly url: string;\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly message: string;\n        readonly sessionId: string;\n      }\n    | unknown\n    | null;\n};\nexport const AgentRequest = Schema.Struct({\n  id: RequestId,\n  method: Schema.String,\n  params: Schema.optionalKey(\n    Schema.Union([\n      Schema.Union([\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          content: Schema.String.annotate({\n            description: \"The text content to write to the file.\",\n          }),\n          path: Schema.String.annotate({ description: \"Absolute path to the file to write.\" }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"WriteTextFileRequest\",\n          description:\n            \"Request to write content to a text file.\\n\\nOnly available if the client supports the `fs.writeTextFile` capability.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          limit: Schema.optionalKey(\n            Schema.Union([\n              Schema.Number.annotate({\n                description: \"Maximum number of lines to read.\",\n                format: \"uint32\",\n              })\n                .check(Schema.isInt())\n                .check(Schema.isGreaterThanOrEqualTo(0)),\n              Schema.Null,\n            ]),\n          ),\n          line: Schema.optionalKey(\n            Schema.Union([\n              Schema.Number.annotate({\n                description: \"Line number to start reading from (1-based).\",\n                format: \"uint32\",\n              })\n                .check(Schema.isInt())\n                .check(Schema.isGreaterThanOrEqualTo(0)),\n              Schema.Null,\n            ]),\n          ),\n          path: Schema.String.annotate({ description: \"Absolute path to the file to read.\" }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"ReadTextFileRequest\",\n          description:\n            \"Request to read content from a text file.\\n\\nOnly available if the client supports the `fs.readTextFile` capability.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          options: Schema.Array(PermissionOption).annotate({\n            description: \"Available permission options for the user to choose from.\",\n          }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n          toolCall: Schema.Struct({\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            content: Schema.optionalKey(\n              Schema.Union([\n                Schema.Array(ToolCallContent).annotate({\n                  description: \"Replace the content collection.\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            kind: Schema.optionalKey(\n              Schema.Union([ToolKind, Schema.Null]).annotate({\n                description: \"Update the tool kind.\",\n              }),\n            ),\n            locations: Schema.optionalKey(\n              Schema.Union([\n                Schema.Array(ToolCallLocation).annotate({\n                  description: \"Replace the locations collection.\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            rawInput: Schema.optionalKey(\n              Schema.Unknown.annotate({ description: \"Update the raw input.\" }),\n            ),\n            rawOutput: Schema.optionalKey(\n              Schema.Unknown.annotate({ description: \"Update the raw output.\" }),\n            ),\n            status: Schema.optionalKey(\n              Schema.Union([ToolCallStatus, Schema.Null]).annotate({\n                description: \"Update the execution status.\",\n              }),\n            ),\n            title: Schema.optionalKey(\n              Schema.Union([\n                Schema.String.annotate({ description: \"Update the human-readable title.\" }),\n                Schema.Null,\n              ]),\n            ),\n            toolCallId: Schema.String.annotate({\n              description: \"Unique identifier for a tool call within a session.\",\n            }),\n          }).annotate({\n            description:\n              \"An update to an existing tool call.\\n\\nUsed to report progress and results as tools execute. All fields except\\nthe tool call ID are optional - only changed fields need to be included.\\n\\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)\",\n          }),\n        }).annotate({\n          title: \"RequestPermissionRequest\",\n          description:\n            \"Request for user permission to execute a tool call.\\n\\nSent when the agent needs authorization before performing a sensitive operation.\\n\\nSee protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission)\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          args: Schema.optionalKey(\n            Schema.Array(Schema.String).annotate({ description: \"Array of command arguments.\" }),\n          ),\n          command: Schema.String.annotate({ description: \"The command to execute.\" }),\n          cwd: Schema.optionalKey(\n            Schema.Union([\n              Schema.String.annotate({\n                description: \"Working directory for the command (absolute path).\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          env: Schema.optionalKey(\n            Schema.Array(EnvVariable).annotate({\n              description: \"Environment variables for the command.\",\n            }),\n          ),\n          outputByteLimit: Schema.optionalKey(\n            Schema.Union([\n              Schema.Number.annotate({\n                description:\n                  \"Maximum number of output bytes to retain.\\n\\nWhen the limit is exceeded, the Client truncates from the beginning of the output\\nto stay within the limit.\\n\\nThe Client MUST ensure truncation happens at a character boundary to maintain valid\\nstring output, even if this means the retained output is slightly less than the\\nspecified limit.\",\n                format: \"uint64\",\n              })\n                .check(Schema.isInt())\n                .check(Schema.isGreaterThanOrEqualTo(0)),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"CreateTerminalRequest\",\n          description: \"Request to create a new terminal and execute a command.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n          terminalId: Schema.String.annotate({\n            description: \"The ID of the terminal to get output from.\",\n          }),\n        }).annotate({\n          title: \"TerminalOutputRequest\",\n          description: \"Request to get the current output and status of a terminal.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n          terminalId: Schema.String.annotate({ description: \"The ID of the terminal to release.\" }),\n        }).annotate({\n          title: \"ReleaseTerminalRequest\",\n          description: \"Request to release a terminal and free its resources.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n          terminalId: Schema.String.annotate({\n            description: \"The ID of the terminal to wait for.\",\n          }),\n        }).annotate({\n          title: \"WaitForTerminalExitRequest\",\n          description: \"Request to wait for a terminal command to exit.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n          terminalId: Schema.String.annotate({ description: \"The ID of the terminal to kill.\" }),\n        }).annotate({\n          title: \"KillTerminalRequest\",\n          description: \"Request to kill a terminal without releasing it.\",\n        }),\n        Schema.Union([\n          Schema.Struct({\n            mode: Schema.Literal(\"form\"),\n            requestedSchema: Schema.Struct({\n              description: Schema.optionalKey(\n                Schema.Union([\n                  Schema.String.annotate({\n                    description: \"Optional description of what this schema represents.\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              properties: Schema.optionalKey(\n                Schema.Record(Schema.String, ElicitationPropertySchema).annotate({\n                  description: \"Property definitions (must be primitive types).\",\n                  default: {},\n                }),\n              ),\n              required: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Array(Schema.String).annotate({\n                    description: \"List of required property names.\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              title: Schema.optionalKey(\n                Schema.Union([\n                  Schema.String.annotate({ description: \"Optional title for the schema.\" }),\n                  Schema.Null,\n                ]),\n              ),\n              type: Schema.optionalKey(\n                Schema.Literal(\"object\").annotate({\n                  description: \"Type discriminator for elicitation schemas.\",\n                  default: \"object\",\n                }),\n              ),\n            }).annotate({\n              description:\n                \"Type-safe elicitation schema for requesting structured user input.\\n\\nThis represents a JSON Schema object with primitive-typed properties,\\nas required by the elicitation specification.\",\n            }),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            message: Schema.String.annotate({\n              description: \"A human-readable message describing what input is needed.\",\n            }),\n            sessionId: Schema.String.annotate({\n              description:\n                \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n            }),\n          }).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest from the agent to elicit structured user input.\\n\\nThe agent sends this to the client to request information from the user,\\neither via a form or by directing them to a URL.\",\n          }),\n          Schema.Struct({\n            mode: Schema.Literal(\"url\"),\n            elicitationId: Schema.String.annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nUnique identifier for an elicitation.\",\n            }),\n            url: Schema.String.annotate({\n              description: \"The URL to direct the user to.\",\n              format: \"uri\",\n            }),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            message: Schema.String.annotate({\n              description: \"A human-readable message describing what input is needed.\",\n            }),\n            sessionId: Schema.String.annotate({\n              description:\n                \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n            }),\n          }).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest from the agent to elicit structured user input.\\n\\nThe agent sends this to the client to request information from the user,\\neither via a form or by directing them to a URL.\",\n          }),\n        ]).annotate({\n          title: \"ElicitationRequest\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequests structured user input via a form or URL.\",\n        }),\n        Schema.Unknown.annotate({\n          title: \"ExtMethodRequest\",\n          description:\n            \"Allows for sending an arbitrary request that is not part of the ACP spec.\\nExtension methods provide a way to add custom functionality while maintaining\\nprotocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n      ]).annotate({\n        description:\n          \"All possible requests that an agent can send to a client.\\n\\nThis enum is used internally for routing RPC requests. You typically won't need\\nto use this directly - instead, use the methods on the [`Client`] trait.\\n\\nThis enum encompasses all method calls from agent to client.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type AgentResponse =\n  | {\n      readonly id: RequestId;\n      readonly result:\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly agentCapabilities?: {\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly auth?: {\n                readonly _meta?: { readonly [x: string]: unknown } | null;\n                readonly logout?: LogoutCapabilities | null;\n              };\n              readonly loadSession?: boolean;\n              readonly mcpCapabilities?: {\n                readonly _meta?: { readonly [x: string]: unknown } | null;\n                readonly http?: boolean;\n                readonly sse?: boolean;\n              };\n              readonly promptCapabilities?: {\n                readonly _meta?: { readonly [x: string]: unknown } | null;\n                readonly audio?: boolean;\n                readonly embeddedContext?: boolean;\n                readonly image?: boolean;\n              };\n              readonly sessionCapabilities?: {\n                readonly _meta?: { readonly [x: string]: unknown } | null;\n                readonly close?: SessionCloseCapabilities | null;\n                readonly fork?: SessionForkCapabilities | null;\n                readonly list?: SessionListCapabilities | null;\n                readonly resume?: SessionResumeCapabilities | null;\n              };\n            };\n            readonly agentInfo?: Implementation | null;\n            readonly authMethods?: ReadonlyArray<AuthMethod>;\n            readonly protocolVersion: number;\n          }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n            readonly models?: SessionModelState | null;\n            readonly modes?: SessionModeState | null;\n            readonly sessionId: string;\n          }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n            readonly models?: SessionModelState | null;\n            readonly modes?: SessionModeState | null;\n          }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly nextCursor?: string | null;\n            readonly sessions: ReadonlyArray<SessionInfo>;\n          }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n            readonly models?: SessionModelState | null;\n            readonly modes?: SessionModeState | null;\n            readonly sessionId: string;\n          }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n            readonly models?: SessionModelState | null;\n            readonly modes?: SessionModeState | null;\n          }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly configOptions: ReadonlyArray<SessionConfigOption>;\n          }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly stopReason:\n              | \"end_turn\"\n              | \"max_tokens\"\n              | \"max_turn_requests\"\n              | \"refusal\"\n              | \"cancelled\";\n            readonly usage?: Usage | null;\n            readonly userMessageId?: string | null;\n          }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | unknown;\n    }\n  | { readonly error: Error; readonly id: RequestId };\nexport const AgentResponse = Schema.Union([\n  Schema.Struct({\n    id: RequestId,\n    result: Schema.Union([\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        agentCapabilities: Schema.optionalKey(\n          Schema.Struct({\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            auth: Schema.optionalKey(\n              Schema.Struct({\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                logout: Schema.optionalKey(\n                  Schema.Union([LogoutCapabilities, Schema.Null]).annotate({\n                    description:\n                      \"Whether the agent supports the logout method.\\n\\nBy supplying `{}` it means that the agent supports the logout method.\",\n                  }),\n                ),\n              }).annotate({\n                description:\n                  \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication-related capabilities supported by the agent.\",\n                default: {},\n              }),\n            ),\n            loadSession: Schema.optionalKey(\n              Schema.Boolean.annotate({\n                description: \"Whether the agent supports `session/load`.\",\n                default: false,\n              }),\n            ),\n            mcpCapabilities: Schema.optionalKey(\n              Schema.Struct({\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                http: Schema.optionalKey(\n                  Schema.Boolean.annotate({\n                    description: \"Agent supports [`McpServer::Http`].\",\n                    default: false,\n                  }),\n                ),\n                sse: Schema.optionalKey(\n                  Schema.Boolean.annotate({\n                    description: \"Agent supports [`McpServer::Sse`].\",\n                    default: false,\n                  }),\n                ),\n              }).annotate({\n                description: \"MCP capabilities supported by the agent\",\n                default: { http: false, sse: false },\n              }),\n            ),\n            promptCapabilities: Schema.optionalKey(\n              Schema.Struct({\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                audio: Schema.optionalKey(\n                  Schema.Boolean.annotate({\n                    description: \"Agent supports [`ContentBlock::Audio`].\",\n                    default: false,\n                  }),\n                ),\n                embeddedContext: Schema.optionalKey(\n                  Schema.Boolean.annotate({\n                    description:\n                      \"Agent supports embedded context in `session/prompt` requests.\\n\\nWhen enabled, the Client is allowed to include [`ContentBlock::Resource`]\\nin prompt requests for pieces of context that are referenced in the message.\",\n                    default: false,\n                  }),\n                ),\n                image: Schema.optionalKey(\n                  Schema.Boolean.annotate({\n                    description: \"Agent supports [`ContentBlock::Image`].\",\n                    default: false,\n                  }),\n                ),\n              }).annotate({\n                description:\n                  \"Prompt capabilities supported by the agent in `session/prompt` requests.\\n\\nBaseline agent functionality requires support for [`ContentBlock::Text`]\\nand [`ContentBlock::ResourceLink`] in prompt requests.\\n\\nOther variants must be explicitly opted in to.\\nCapabilities for different types of content in prompt requests.\\n\\nIndicates which content types beyond the baseline (text and resource links)\\nthe agent can process.\\n\\nSee protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities)\",\n                default: { audio: false, embeddedContext: false, image: false },\n              }),\n            ),\n            sessionCapabilities: Schema.optionalKey(\n              Schema.Struct({\n                _meta: Schema.optionalKey(\n                  Schema.Union([\n                    Schema.Record(Schema.String, Schema.Unknown).annotate({\n                      description:\n                        \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                    }),\n                    Schema.Null,\n                  ]),\n                ),\n                close: Schema.optionalKey(\n                  Schema.Union([SessionCloseCapabilities, Schema.Null]).annotate({\n                    description:\n                      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/close`.\",\n                  }),\n                ),\n                fork: Schema.optionalKey(\n                  Schema.Union([SessionForkCapabilities, Schema.Null]).annotate({\n                    description:\n                      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/fork`.\",\n                  }),\n                ),\n                list: Schema.optionalKey(\n                  Schema.Union([SessionListCapabilities, Schema.Null]).annotate({\n                    description: \"Whether the agent supports `session/list`.\",\n                  }),\n                ),\n                resume: Schema.optionalKey(\n                  Schema.Union([SessionResumeCapabilities, Schema.Null]).annotate({\n                    description:\n                      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/resume`.\",\n                  }),\n                ),\n              }).annotate({\n                default: {},\n                description:\n                  \"Session capabilities supported by the agent.\\n\\nAs a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`.\\n\\nOptionally, they **MAY** support other session methods and notifications by specifying additional capabilities.\\n\\nNote: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol.\\n\\nSee protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities)\",\n              }),\n            ),\n          }).annotate({\n            description:\n              \"Capabilities supported by the agent.\\n\\nAdvertised during initialization to inform the client about\\navailable features and content types.\\n\\nSee protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities)\",\n            default: {\n              auth: {},\n              loadSession: false,\n              mcpCapabilities: { http: false, sse: false },\n              promptCapabilities: { audio: false, embeddedContext: false, image: false },\n              sessionCapabilities: {},\n            },\n          }),\n        ),\n        agentInfo: Schema.optionalKey(\n          Schema.Union([Implementation, Schema.Null]).annotate({\n            description:\n              \"Information about the Agent name and version sent to the Client.\\n\\nNote: in future versions of the protocol, this will be required.\",\n          }),\n        ),\n        authMethods: Schema.optionalKey(\n          Schema.Array(AuthMethod).annotate({\n            description: \"Authentication methods supported by the agent.\",\n            default: [],\n          }),\n        ),\n        protocolVersion: Schema.Number.annotate({\n          description:\n            \"Protocol version identifier.\\n\\nThis version is only bumped for breaking changes.\\nNon-breaking changes should be introduced via capabilities.\",\n          format: \"uint16\",\n        })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0))\n          .check(Schema.isLessThanOrEqualTo(65535)),\n      }).annotate({\n        title: \"InitializeResponse\",\n        description:\n          \"Response to the `initialize` method.\\n\\nContains the negotiated protocol version and agent capabilities.\\n\\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"AuthenticateResponse\",\n        description: \"Response to the `authenticate` method.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"LogoutResponse\",\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse to the `logout` method.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        configOptions: Schema.optionalKey(\n          Schema.Union([\n            Schema.Array(SessionConfigOption).annotate({\n              description: \"Initial session configuration options if supported by the Agent.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        models: Schema.optionalKey(\n          Schema.Union([SessionModelState, Schema.Null]).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n          }),\n        ),\n        modes: Schema.optionalKey(\n          Schema.Union([SessionModeState, Schema.Null]).annotate({\n            description:\n              \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n          }),\n        ),\n        sessionId: Schema.String.annotate({\n          description:\n            \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n        }),\n      }).annotate({\n        title: \"NewSessionResponse\",\n        description:\n          \"Response from creating a new session.\\n\\nSee protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        configOptions: Schema.optionalKey(\n          Schema.Union([\n            Schema.Array(SessionConfigOption).annotate({\n              description: \"Initial session configuration options if supported by the Agent.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        models: Schema.optionalKey(\n          Schema.Union([SessionModelState, Schema.Null]).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n          }),\n        ),\n        modes: Schema.optionalKey(\n          Schema.Union([SessionModeState, Schema.Null]).annotate({\n            description:\n              \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n          }),\n        ),\n      }).annotate({\n        title: \"LoadSessionResponse\",\n        description: \"Response from loading an existing session.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        nextCursor: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description:\n                \"Opaque cursor token. If present, pass this in the next request's cursor parameter\\nto fetch the next page. If absent, there are no more results.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        sessions: Schema.Array(SessionInfo).annotate({\n          description: \"Array of session information objects\",\n        }),\n      }).annotate({\n        title: \"ListSessionsResponse\",\n        description: \"Response from listing sessions.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        configOptions: Schema.optionalKey(\n          Schema.Union([\n            Schema.Array(SessionConfigOption).annotate({\n              description: \"Initial session configuration options if supported by the Agent.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        models: Schema.optionalKey(\n          Schema.Union([SessionModelState, Schema.Null]).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n          }),\n        ),\n        modes: Schema.optionalKey(\n          Schema.Union([SessionModeState, Schema.Null]).annotate({\n            description:\n              \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n          }),\n        ),\n        sessionId: Schema.String.annotate({\n          description:\n            \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n        }),\n      }).annotate({\n        title: \"ForkSessionResponse\",\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from forking an existing session.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        configOptions: Schema.optionalKey(\n          Schema.Union([\n            Schema.Array(SessionConfigOption).annotate({\n              description: \"Initial session configuration options if supported by the Agent.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        models: Schema.optionalKey(\n          Schema.Union([SessionModelState, Schema.Null]).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n          }),\n        ),\n        modes: Schema.optionalKey(\n          Schema.Union([SessionModeState, Schema.Null]).annotate({\n            description:\n              \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n          }),\n        ),\n      }).annotate({\n        title: \"ResumeSessionResponse\",\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from resuming an existing session.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"CloseSessionResponse\",\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from closing a session.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"SetSessionModeResponse\",\n        description: \"Response to `session/set_mode` method.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        configOptions: Schema.Array(SessionConfigOption).annotate({\n          description: \"The full set of configuration options and their current values.\",\n        }),\n      }).annotate({\n        title: \"SetSessionConfigOptionResponse\",\n        description: \"Response to `session/set_config_option` method.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        stopReason: Schema.Literals([\n          \"end_turn\",\n          \"max_tokens\",\n          \"max_turn_requests\",\n          \"refusal\",\n          \"cancelled\",\n        ]).annotate({\n          description:\n            \"Reasons why an agent stops processing a prompt turn.\\n\\nSee protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/prompt-turn#stop-reasons)\",\n        }),\n        usage: Schema.optionalKey(\n          Schema.Union([Usage, Schema.Null]).annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nToken usage for this turn (optional).\",\n          }),\n        ),\n        userMessageId: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe acknowledged user message ID.\\n\\nIf the client provided a `messageId` in the [`PromptRequest`], the agent echoes it here\\nto confirm it was recorded. If the client did not provide one, the agent MAY assign one\\nand return it here. Absence of this field indicates the agent did not record a message ID.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"PromptResponse\",\n        description:\n          \"Response from processing a user prompt.\\n\\nSee protocol docs: [Check for Completion](https://agentclientprotocol.com/protocol/prompt-turn#4-check-for-completion)\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"SetSessionModelResponse\",\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse to `session/set_model` method.\",\n      }),\n      Schema.Unknown.annotate({\n        title: \"ExtMethodResponse\",\n        description:\n          \"Allows for sending an arbitrary response to an [`ExtRequest`] that is not part of the ACP spec.\\nExtension methods provide a way to add custom functionality while maintaining\\nprotocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n    ]).annotate({\n      description:\n        \"All possible responses that an agent can send to a client.\\n\\nThis enum is used internally for routing RPC responses. You typically won't need\\nto use this directly - the responses are handled automatically by the connection.\\n\\nThese are responses to the corresponding `ClientRequest` variants.\",\n    }),\n  }).annotate({ title: \"Result\" }),\n  Schema.Struct({ error: Error, id: RequestId }).annotate({ title: \"Error\" }),\n]);\n\nexport type AudioContent = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly annotations?: Annotations | null;\n  readonly data: string;\n  readonly mimeType: string;\n};\nexport const AudioContent = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n  data: Schema.String,\n  mimeType: Schema.String,\n}).annotate({ description: \"Audio provided to or from an LLM.\" });\n\nexport type AuthCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly terminal?: boolean;\n};\nexport const AuthCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  terminal: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Whether the client supports `terminal` authentication methods.\\n\\nWhen `true`, the agent may include `terminal` entries in its authentication methods.\",\n      default: false,\n    }),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent which authentication\\nmethod types the client can handle. This governs opt-in types that require\\nadditional client-side support.\",\n});\n\nexport type AuthenticateRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly methodId: string;\n};\nexport const AuthenticateRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  methodId: Schema.String.annotate({\n    description:\n      \"The ID of the authentication method to use.\\nMust be one of the methods advertised in the initialize response.\",\n  }),\n}).annotate({\n  description:\n    \"Request parameters for the authenticate method.\\n\\nSpecifies which authentication method to use.\",\n});\n\nexport type AuthenticateResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const AuthenticateResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Response to the `authenticate` method.\" });\n\nexport type AuthMethodAgent = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly description?: string | null;\n  readonly id: string;\n  readonly name: string;\n};\nexport const AuthMethodAgent = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional description providing more details about this authentication method.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({ description: \"Unique identifier for this authentication method.\" }),\n  name: Schema.String.annotate({\n    description: \"Human-readable name of the authentication method.\",\n  }),\n}).annotate({\n  description:\n    \"Agent handles authentication itself.\\n\\nThis is the default authentication method type.\",\n});\n\nexport type AuthMethodEnvVar = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly description?: string | null;\n  readonly id: string;\n  readonly link?: string | null;\n  readonly name: string;\n  readonly vars: ReadonlyArray<AuthEnvVar>;\n};\nexport const AuthMethodEnvVar = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional description providing more details about this authentication method.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  id: Schema.String.annotate({ description: \"Unique identifier for this authentication method.\" }),\n  link: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional link to a page where the user can obtain their credentials.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  name: Schema.String.annotate({\n    description: \"Human-readable name of the authentication method.\",\n  }),\n  vars: Schema.Array(AuthEnvVar).annotate({\n    description: \"The environment variables the client should set.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nEnvironment variable authentication method.\\n\\nThe user provides credentials that the client passes to the agent as environment variables.\",\n});\n\nexport type AuthMethodTerminal = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly args?: ReadonlyArray<string>;\n  readonly description?: string | null;\n  readonly env?: { readonly [x: string]: string };\n  readonly id: string;\n  readonly name: string;\n};\nexport const AuthMethodTerminal = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  args: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({\n      description: \"Additional arguments to pass when running the agent binary for terminal auth.\",\n    }),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Optional description providing more details about this authentication method.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  env: Schema.optionalKey(\n    Schema.Record(Schema.String, Schema.String).annotate({\n      description:\n        \"Additional environment variables to set when running the agent binary for terminal auth.\",\n    }),\n  ),\n  id: Schema.String.annotate({ description: \"Unique identifier for this authentication method.\" }),\n  name: Schema.String.annotate({\n    description: \"Human-readable name of the authentication method.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nTerminal-based authentication method.\\n\\nThe client runs an interactive terminal for the user to authenticate via a TUI.\",\n});\n\nexport type AvailableCommandsUpdate = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly availableCommands: ReadonlyArray<AvailableCommand>;\n};\nexport const AvailableCommandsUpdate = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  availableCommands: Schema.Array(AvailableCommand).annotate({\n    description: \"Commands the agent can execute\",\n  }),\n}).annotate({ description: \"Available commands are ready or have changed\" });\n\nexport type BlobResourceContents = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly blob: string;\n  readonly mimeType?: string | null;\n  readonly uri: string;\n};\nexport const BlobResourceContents = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  blob: Schema.String,\n  mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  uri: Schema.String,\n}).annotate({ description: \"Binary resource contents.\" });\n\nexport type BooleanPropertySchema = {\n  readonly default?: boolean | null;\n  readonly description?: string | null;\n  readonly title?: string | null;\n};\nexport const BooleanPropertySchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([Schema.Boolean.annotate({ description: \"Default value.\" }), Schema.Null]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Human-readable description.\" }),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional title for the property.\" }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Schema for boolean properties in an elicitation form.\" });\n\nexport type CancelNotification = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n};\nexport const CancelNotification = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"Notification to cancel ongoing operations for a session.\\n\\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)\",\n});\n\nexport type CancelRequestNotification = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly requestId: null | number | string;\n};\nexport const CancelRequestNotification = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  requestId: Schema.Union([\n    Schema.Null.annotate({ title: \"Null\" }),\n    Schema.Number.annotate({ title: \"Number\", format: \"int64\" }).check(Schema.isInt()),\n    Schema.String.annotate({ title: \"Str\" }),\n  ]).annotate({\n    description:\n      \"JSON RPC Request Id\\n\\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\\n\\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\\n\\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\\n\\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nNotification to cancel an ongoing request.\\n\\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/cancellation)\",\n});\n\nexport type ClientCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly auth?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly terminal?: boolean;\n  };\n  readonly elicitation?: ElicitationCapabilities | null;\n  readonly fs?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly readTextFile?: boolean;\n    readonly writeTextFile?: boolean;\n  };\n  readonly terminal?: boolean;\n};\nexport const ClientCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  auth: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      terminal: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description:\n            \"Whether the client supports `terminal` authentication methods.\\n\\nWhen `true`, the agent may include `terminal` entries in its authentication methods.\",\n          default: false,\n        }),\n      ),\n    }).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent which authentication\\nmethod types the client can handle. This governs opt-in types that require\\nadditional client-side support.\",\n      default: { terminal: false },\n    }),\n  ),\n  elicitation: Schema.optionalKey(\n    Schema.Union([ElicitationCapabilities, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nElicitation capabilities supported by the client.\\nDetermines which elicitation modes the agent may use.\",\n    }),\n  ),\n  fs: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      readTextFile: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Whether the Client supports `fs/read_text_file` requests.\",\n          default: false,\n        }),\n      ),\n      writeTextFile: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Whether the Client supports `fs/write_text_file` requests.\",\n          default: false,\n        }),\n      ),\n    }).annotate({\n      description:\n        \"File system capabilities that a client may support.\\n\\nSee protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)\",\n      default: { readTextFile: false, writeTextFile: false },\n    }),\n  ),\n  terminal: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Whether the Client support all `terminal/*` methods.\",\n      default: false,\n    }),\n  ),\n}).annotate({\n  description:\n    \"Capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent about\\navailable features and methods.\\n\\nSee protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/initialization#client-capabilities)\",\n});\n\nexport type ClientNotification = {\n  readonly method: string;\n  readonly params?:\n    | { readonly _meta?: { readonly [x: string]: unknown } | null; readonly sessionId: string }\n    | unknown\n    | null;\n};\nexport const ClientNotification = Schema.Struct({\n  method: Schema.String,\n  params: Schema.optionalKey(\n    Schema.Union([\n      Schema.Union([\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"CancelNotification\",\n          description:\n            \"Notification to cancel ongoing operations for a session.\\n\\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)\",\n        }),\n        Schema.Unknown.annotate({\n          title: \"ExtNotification\",\n          description:\n            \"Allows the Agent to send an arbitrary notification that is not part of the ACP spec.\\nExtension notifications provide a way to send one-way messages for custom functionality\\nwhile maintaining protocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n      ]).annotate({\n        description:\n          \"All possible notifications that a client can send to an agent.\\n\\nThis enum is used internally for routing RPC notifications. You typically won't need\\nto use this directly - use the notification methods on the [`Agent`] trait instead.\\n\\nNotifications do not expect a response.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientRequest = {\n  readonly id: RequestId;\n  readonly method: string;\n  readonly params?:\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly clientCapabilities?: {\n          readonly _meta?: { readonly [x: string]: unknown } | null;\n          readonly auth?: {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly terminal?: boolean;\n          };\n          readonly elicitation?: ElicitationCapabilities | null;\n          readonly fs?: {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly readTextFile?: boolean;\n            readonly writeTextFile?: boolean;\n          };\n          readonly terminal?: boolean;\n        };\n        readonly clientInfo?: Implementation | null;\n        readonly protocolVersion: number;\n      }\n    | { readonly _meta?: { readonly [x: string]: unknown } | null; readonly methodId: string }\n    | { readonly _meta?: { readonly [x: string]: unknown } | null }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly cwd: string;\n        readonly mcpServers: ReadonlyArray<McpServer>;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly cwd: string;\n        readonly mcpServers: ReadonlyArray<McpServer>;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly cursor?: string | null;\n        readonly cwd?: string | null;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly cwd: string;\n        readonly mcpServers?: ReadonlyArray<McpServer>;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly cwd: string;\n        readonly mcpServers?: ReadonlyArray<McpServer>;\n        readonly sessionId: string;\n      }\n    | { readonly _meta?: { readonly [x: string]: unknown } | null; readonly sessionId: string }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly modeId: string;\n        readonly sessionId: string;\n      }\n    | {\n        readonly type: \"boolean\";\n        readonly value: boolean;\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly configId: string;\n        readonly sessionId: string;\n      }\n    | {\n        readonly value: string;\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly configId: string;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly messageId?: string | null;\n        readonly prompt: ReadonlyArray<ContentBlock>;\n        readonly sessionId: string;\n      }\n    | {\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly modelId: string;\n        readonly sessionId: string;\n      }\n    | unknown\n    | null;\n};\nexport const ClientRequest = Schema.Struct({\n  id: RequestId,\n  method: Schema.String,\n  params: Schema.optionalKey(\n    Schema.Union([\n      Schema.Union([\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          clientCapabilities: Schema.optionalKey(\n            Schema.Struct({\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              auth: Schema.optionalKey(\n                Schema.Struct({\n                  _meta: Schema.optionalKey(\n                    Schema.Union([\n                      Schema.Record(Schema.String, Schema.Unknown).annotate({\n                        description:\n                          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                      }),\n                      Schema.Null,\n                    ]),\n                  ),\n                  terminal: Schema.optionalKey(\n                    Schema.Boolean.annotate({\n                      description:\n                        \"Whether the client supports `terminal` authentication methods.\\n\\nWhen `true`, the agent may include `terminal` entries in its authentication methods.\",\n                      default: false,\n                    }),\n                  ),\n                }).annotate({\n                  description:\n                    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent which authentication\\nmethod types the client can handle. This governs opt-in types that require\\nadditional client-side support.\",\n                  default: { terminal: false },\n                }),\n              ),\n              elicitation: Schema.optionalKey(\n                Schema.Union([ElicitationCapabilities, Schema.Null]).annotate({\n                  description:\n                    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nElicitation capabilities supported by the client.\\nDetermines which elicitation modes the agent may use.\",\n                }),\n              ),\n              fs: Schema.optionalKey(\n                Schema.Struct({\n                  _meta: Schema.optionalKey(\n                    Schema.Union([\n                      Schema.Record(Schema.String, Schema.Unknown).annotate({\n                        description:\n                          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                      }),\n                      Schema.Null,\n                    ]),\n                  ),\n                  readTextFile: Schema.optionalKey(\n                    Schema.Boolean.annotate({\n                      description: \"Whether the Client supports `fs/read_text_file` requests.\",\n                      default: false,\n                    }),\n                  ),\n                  writeTextFile: Schema.optionalKey(\n                    Schema.Boolean.annotate({\n                      description: \"Whether the Client supports `fs/write_text_file` requests.\",\n                      default: false,\n                    }),\n                  ),\n                }).annotate({\n                  description:\n                    \"File system capabilities that a client may support.\\n\\nSee protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)\",\n                  default: { readTextFile: false, writeTextFile: false },\n                }),\n              ),\n              terminal: Schema.optionalKey(\n                Schema.Boolean.annotate({\n                  description: \"Whether the Client support all `terminal/*` methods.\",\n                  default: false,\n                }),\n              ),\n            }).annotate({\n              description:\n                \"Capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent about\\navailable features and methods.\\n\\nSee protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/initialization#client-capabilities)\",\n              default: {\n                auth: { terminal: false },\n                fs: { readTextFile: false, writeTextFile: false },\n                terminal: false,\n              },\n            }),\n          ),\n          clientInfo: Schema.optionalKey(\n            Schema.Union([Implementation, Schema.Null]).annotate({\n              description:\n                \"Information about the Client name and version sent to the Agent.\\n\\nNote: in future versions of the protocol, this will be required.\",\n            }),\n          ),\n          protocolVersion: Schema.Number.annotate({\n            description:\n              \"Protocol version identifier.\\n\\nThis version is only bumped for breaking changes.\\nNon-breaking changes should be introduced via capabilities.\",\n            format: \"uint16\",\n          })\n            .check(Schema.isInt())\n            .check(Schema.isGreaterThanOrEqualTo(0))\n            .check(Schema.isLessThanOrEqualTo(65535)),\n        }).annotate({\n          title: \"InitializeRequest\",\n          description:\n            \"Request parameters for the initialize method.\\n\\nSent by the client to establish connection and negotiate capabilities.\\n\\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          methodId: Schema.String.annotate({\n            description:\n              \"The ID of the authentication method to use.\\nMust be one of the methods advertised in the initialize response.\",\n          }),\n        }).annotate({\n          title: \"AuthenticateRequest\",\n          description:\n            \"Request parameters for the authenticate method.\\n\\nSpecifies which authentication method to use.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n        }).annotate({\n          title: \"LogoutRequest\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for the logout method.\\n\\nTerminates the current authenticated session.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          cwd: Schema.String.annotate({\n            description: \"The working directory for this session. Must be an absolute path.\",\n          }),\n          mcpServers: Schema.Array(McpServer).annotate({\n            description:\n              \"List of MCP (Model Context Protocol) servers the agent should connect to.\",\n          }),\n        }).annotate({\n          title: \"NewSessionRequest\",\n          description:\n            \"Request parameters for creating a new session.\\n\\nSee protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          cwd: Schema.String.annotate({ description: \"The working directory for this session.\" }),\n          mcpServers: Schema.Array(McpServer).annotate({\n            description: \"List of MCP servers to connect to for this session.\",\n          }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"LoadSessionRequest\",\n          description:\n            \"Request parameters for loading an existing session.\\n\\nOnly available if the Agent supports the `loadSession` capability.\\n\\nSee protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          cursor: Schema.optionalKey(\n            Schema.Union([\n              Schema.String.annotate({\n                description:\n                  \"Opaque cursor token from a previous response's nextCursor field for cursor-based pagination\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          cwd: Schema.optionalKey(\n            Schema.Union([\n              Schema.String.annotate({\n                description: \"Filter sessions by working directory. Must be an absolute path.\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n        }).annotate({\n          title: \"ListSessionsRequest\",\n          description:\n            \"Request parameters for listing existing sessions.\\n\\nOnly available if the Agent supports the `sessionCapabilities.list` capability.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          cwd: Schema.String.annotate({ description: \"The working directory for this session.\" }),\n          mcpServers: Schema.optionalKey(\n            Schema.Array(McpServer).annotate({\n              description: \"List of MCP servers to connect to for this session.\",\n            }),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"ForkSessionRequest\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for forking an existing session.\\n\\nCreates a new session based on the context of an existing one, allowing\\noperations like generating summaries without affecting the original session's history.\\n\\nOnly available if the Agent supports the `session.fork` capability.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          cwd: Schema.String.annotate({ description: \"The working directory for this session.\" }),\n          mcpServers: Schema.optionalKey(\n            Schema.Array(McpServer).annotate({\n              description: \"List of MCP servers to connect to for this session.\",\n            }),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"ResumeSessionRequest\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for resuming an existing session.\\n\\nResumes an existing session without returning previous messages (unlike `session/load`).\\nThis is useful for agents that can resume sessions but don't implement full session loading.\\n\\nOnly available if the Agent supports the `session.resume` capability.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"CloseSessionRequest\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for closing an active session.\\n\\nIf supported, the agent **must** cancel any ongoing work related to the session\\n(treat it as if `session/cancel` was called) and then free up any resources\\nassociated with the session.\\n\\nOnly available if the Agent supports the `session.close` capability.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          modeId: Schema.String.annotate({ description: \"Unique identifier for a Session Mode.\" }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"SetSessionModeRequest\",\n          description: \"Request parameters for setting a session mode.\",\n        }),\n        Schema.Union([\n          Schema.Struct({\n            type: Schema.Literal(\"boolean\"),\n            value: Schema.Boolean.annotate({ description: \"The boolean value.\" }),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            configId: Schema.String.annotate({\n              description: \"Unique identifier for a session configuration option.\",\n            }),\n            sessionId: Schema.String.annotate({\n              description:\n                \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n            }),\n          }).annotate({\n            description: \"Request parameters for setting a session configuration option.\",\n          }),\n          Schema.Struct({\n            value: Schema.String.annotate({\n              description: \"Unique identifier for a session configuration option value.\",\n            }),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            configId: Schema.String.annotate({\n              description: \"Unique identifier for a session configuration option.\",\n            }),\n            sessionId: Schema.String.annotate({\n              description:\n                \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n            }),\n          }).annotate({\n            title: \"value_id\",\n            description: \"Request parameters for setting a session configuration option.\",\n          }),\n        ]).annotate({\n          title: \"SetSessionConfigOptionRequest\",\n          description: \"Sets the current value for a session configuration option.\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          messageId: Schema.optionalKey(\n            Schema.Union([\n              Schema.String.annotate({\n                description:\n                  \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA client-generated unique identifier for this user message.\\n\\nIf provided, the Agent SHOULD echo this value as `userMessageId` in the\\n[`PromptResponse`] to confirm it was recorded.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          prompt: Schema.Array(ContentBlock).annotate({\n            description:\n              \"The blocks of content that compose the user's message.\\n\\nAs a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`],\\nwhile other variants are optionally enabled via [`PromptCapabilities`].\\n\\nThe Client MUST adapt its interface according to [`PromptCapabilities`].\\n\\nThe client MAY include referenced pieces of context as either\\n[`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`].\\n\\nWhen available, [`ContentBlock::Resource`] is preferred\\nas it avoids extra round-trips and allows the message to include\\npieces of context from sources the agent may not have access to.\",\n          }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"PromptRequest\",\n          description:\n            \"Request parameters for sending a user prompt to the agent.\\n\\nContains the user's message and any additional context.\\n\\nSee protocol docs: [User Message](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message)\",\n        }),\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          modelId: Schema.String.annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for a model.\",\n          }),\n          sessionId: Schema.String.annotate({\n            description:\n              \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n          }),\n        }).annotate({\n          title: \"SetSessionModelRequest\",\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for setting a session model.\",\n        }),\n        Schema.Unknown.annotate({\n          title: \"ExtMethodRequest\",\n          description:\n            \"Allows for sending an arbitrary request that is not part of the ACP spec.\\nExtension methods provide a way to add custom functionality while maintaining\\nprotocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n      ]).annotate({\n        description:\n          \"All possible requests that a client can send to an agent.\\n\\nThis enum is used internally for routing RPC requests. You typically won't need\\nto use this directly - instead, use the methods on the [`Agent`] trait.\\n\\nThis enum encompasses all method calls from client to agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n});\n\nexport type ClientResponse =\n  | {\n      readonly id: RequestId;\n      readonly result:\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null; readonly content: string }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly outcome:\n              | { readonly outcome: \"cancelled\" }\n              | {\n                  readonly outcome: \"selected\";\n                  readonly _meta?: { readonly [x: string]: unknown } | null;\n                  readonly optionId: string;\n                };\n          }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null; readonly terminalId: string }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly exitStatus?: TerminalExitStatus | null;\n            readonly output: string;\n            readonly truncated: boolean;\n          }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly exitCode?: number | null;\n            readonly signal?: string | null;\n          }\n        | { readonly _meta?: { readonly [x: string]: unknown } | null }\n        | {\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly action:\n              | {\n                  readonly action: \"accept\";\n                  readonly content?: { readonly [x: string]: ElicitationContentValue } | null;\n                }\n              | { readonly action: \"decline\" }\n              | { readonly action: \"cancel\" };\n          }\n        | unknown;\n    }\n  | { readonly error: Error; readonly id: RequestId };\nexport const ClientResponse = Schema.Union([\n  Schema.Struct({\n    id: RequestId,\n    result: Schema.Union([\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"WriteTextFileResponse\",\n        description: \"Response to `fs/write_text_file`\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        content: Schema.String,\n      }).annotate({\n        title: \"ReadTextFileResponse\",\n        description: \"Response containing the contents of a text file.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        outcome: Schema.Union(\n          [\n            Schema.Struct({ outcome: Schema.Literal(\"cancelled\") }).annotate({\n              description:\n                \"The prompt turn was cancelled before the user responded.\\n\\nWhen a client sends a `session/cancel` notification to cancel an ongoing\\nprompt turn, it MUST respond to all pending `session/request_permission`\\nrequests with this `Cancelled` outcome.\\n\\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)\",\n            }),\n            Schema.Struct({\n              outcome: Schema.Literal(\"selected\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              optionId: Schema.String.annotate({\n                description: \"Unique identifier for a permission option.\",\n              }),\n            }).annotate({ description: \"The user selected one of the provided options.\" }),\n          ],\n          { mode: \"oneOf\" },\n        ).annotate({ description: \"The outcome of a permission request.\" }),\n      }).annotate({\n        title: \"RequestPermissionResponse\",\n        description: \"Response to a permission request.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        terminalId: Schema.String.annotate({\n          description: \"The unique identifier for the created terminal.\",\n        }),\n      }).annotate({\n        title: \"CreateTerminalResponse\",\n        description: \"Response containing the ID of the created terminal.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        exitStatus: Schema.optionalKey(\n          Schema.Union([TerminalExitStatus, Schema.Null]).annotate({\n            description: \"Exit status if the command has completed.\",\n          }),\n        ),\n        output: Schema.String.annotate({ description: \"The terminal output captured so far.\" }),\n        truncated: Schema.Boolean.annotate({\n          description: \"Whether the output was truncated due to byte limits.\",\n        }),\n      }).annotate({\n        title: \"TerminalOutputResponse\",\n        description: \"Response containing the terminal output and exit status.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"ReleaseTerminalResponse\",\n        description: \"Response to terminal/release method\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        exitCode: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({\n              description: \"The process exit code (may be null if terminated by signal).\",\n              format: \"uint32\",\n            })\n              .check(Schema.isInt())\n              .check(Schema.isGreaterThanOrEqualTo(0)),\n            Schema.Null,\n          ]),\n        ),\n        signal: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description:\n                \"The signal that terminated the process (may be null if exited normally).\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"WaitForTerminalExitResponse\",\n        description: \"Response containing the exit status of a terminal command.\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        title: \"KillTerminalResponse\",\n        description: \"Response to `terminal/kill` method\",\n      }),\n      Schema.Struct({\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        action: Schema.Union(\n          [\n            Schema.Struct({\n              action: Schema.Literal(\"accept\"),\n              content: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, ElicitationContentValue).annotate({\n                    description:\n                      \"The user-provided content, if any, as an object matching the requested schema.\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n            }).annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user accepted the elicitation and provided content.\",\n            }),\n            Schema.Struct({ action: Schema.Literal(\"decline\") }).annotate({\n              description: \"The user declined the elicitation.\",\n            }),\n            Schema.Struct({ action: Schema.Literal(\"cancel\") }).annotate({\n              description: \"The elicitation was cancelled.\",\n            }),\n          ],\n          { mode: \"oneOf\" },\n        ).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user's action in response to an elicitation.\",\n        }),\n      }).annotate({\n        title: \"ElicitationResponse\",\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from the client to an elicitation request.\",\n      }),\n      Schema.Unknown.annotate({\n        title: \"ExtMethodResponse\",\n        description:\n          \"Allows for sending an arbitrary response to an [`ExtRequest`] that is not part of the ACP spec.\\nExtension methods provide a way to add custom functionality while maintaining\\nprotocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n    ]).annotate({\n      description:\n        \"All possible responses that a client can send to an agent.\\n\\nThis enum is used internally for routing RPC responses. You typically won't need\\nto use this directly - the responses are handled automatically by the connection.\\n\\nThese are responses to the corresponding `AgentRequest` variants.\",\n    }),\n  }).annotate({ title: \"Result\" }),\n  Schema.Struct({ error: Error, id: RequestId }).annotate({ title: \"Error\" }),\n]);\n\nexport type CloseSessionRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n};\nexport const CloseSessionRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for closing an active session.\\n\\nIf supported, the agent **must** cancel any ongoing work related to the session\\n(treat it as if `session/cancel` was called) and then free up any resources\\nassociated with the session.\\n\\nOnly available if the Agent supports the `session.close` capability.\",\n});\n\nexport type CloseSessionResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const CloseSessionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from closing a session.\",\n});\n\nexport type ConfigOptionUpdate = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly configOptions: ReadonlyArray<SessionConfigOption>;\n};\nexport const ConfigOptionUpdate = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  configOptions: Schema.Array(SessionConfigOption).annotate({\n    description: \"The full set of configuration options and their current values.\",\n  }),\n}).annotate({ description: \"Session configuration options have been updated.\" });\n\nexport type Content = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content:\n    | {\n        readonly type: \"text\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly text: string;\n      }\n    | {\n        readonly type: \"image\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly data: string;\n        readonly mimeType: string;\n        readonly uri?: string | null;\n      }\n    | {\n        readonly type: \"audio\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly data: string;\n        readonly mimeType: string;\n      }\n    | {\n        readonly type: \"resource_link\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly description?: string | null;\n        readonly mimeType?: string | null;\n        readonly name: string;\n        readonly size?: number | null;\n        readonly title?: string | null;\n        readonly uri: string;\n      }\n    | {\n        readonly type: \"resource\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly resource: EmbeddedResourceResource;\n      };\n};\nexport const Content = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"text\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        text: Schema.String,\n      }).annotate({ description: \"Text provided to or from an LLM.\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"image\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        data: Schema.String,\n        mimeType: Schema.String,\n        uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      }).annotate({ description: \"An image provided to or from an LLM.\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"audio\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        data: Schema.String,\n        mimeType: Schema.String,\n      }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"resource_link\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        name: Schema.String,\n        size: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n            Schema.Null,\n          ]),\n        ),\n        title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        uri: Schema.String,\n      }).annotate({\n        description:\n          \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n      }),\n      Schema.Struct({\n        type: Schema.Literal(\"resource\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        resource: EmbeddedResourceResource,\n      }).annotate({\n        description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n  }),\n}).annotate({ description: \"Standard content block (text, images, resources).\" });\n\nexport type ContentChunk = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content:\n    | {\n        readonly type: \"text\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly text: string;\n      }\n    | {\n        readonly type: \"image\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly data: string;\n        readonly mimeType: string;\n        readonly uri?: string | null;\n      }\n    | {\n        readonly type: \"audio\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly data: string;\n        readonly mimeType: string;\n      }\n    | {\n        readonly type: \"resource_link\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly description?: string | null;\n        readonly mimeType?: string | null;\n        readonly name: string;\n        readonly size?: number | null;\n        readonly title?: string | null;\n        readonly uri: string;\n      }\n    | {\n        readonly type: \"resource\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly annotations?: Annotations | null;\n        readonly resource: EmbeddedResourceResource;\n      };\n  readonly messageId?: string | null;\n};\nexport const ContentChunk = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.Union(\n    [\n      Schema.Struct({\n        type: Schema.Literal(\"text\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        text: Schema.String,\n      }).annotate({ description: \"Text provided to or from an LLM.\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"image\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        data: Schema.String,\n        mimeType: Schema.String,\n        uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n      }).annotate({ description: \"An image provided to or from an LLM.\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"audio\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        data: Schema.String,\n        mimeType: Schema.String,\n      }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n      Schema.Struct({\n        type: Schema.Literal(\"resource_link\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        name: Schema.String,\n        size: Schema.optionalKey(\n          Schema.Union([\n            Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n            Schema.Null,\n          ]),\n        ),\n        title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n        uri: Schema.String,\n      }).annotate({\n        description:\n          \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n      }),\n      Schema.Struct({\n        type: Schema.Literal(\"resource\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n        resource: EmbeddedResourceResource,\n      }).annotate({\n        description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n  }),\n  messageId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"A streamed item of content\" });\n\nexport type CreateTerminalRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly args?: ReadonlyArray<string>;\n  readonly command: string;\n  readonly cwd?: string | null;\n  readonly env?: ReadonlyArray<EnvVariable>;\n  readonly outputByteLimit?: number | null;\n  readonly sessionId: string;\n};\nexport const CreateTerminalRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  args: Schema.optionalKey(\n    Schema.Array(Schema.String).annotate({ description: \"Array of command arguments.\" }),\n  ),\n  command: Schema.String.annotate({ description: \"The command to execute.\" }),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Working directory for the command (absolute path).\" }),\n      Schema.Null,\n    ]),\n  ),\n  env: Schema.optionalKey(\n    Schema.Array(EnvVariable).annotate({ description: \"Environment variables for the command.\" }),\n  ),\n  outputByteLimit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description:\n          \"Maximum number of output bytes to retain.\\n\\nWhen the limit is exceeded, the Client truncates from the beginning of the output\\nto stay within the limit.\\n\\nThe Client MUST ensure truncation happens at a character boundary to maintain valid\\nstring output, even if this means the retained output is slightly less than the\\nspecified limit.\",\n        format: \"uint64\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({ description: \"Request to create a new terminal and execute a command.\" });\n\nexport type CreateTerminalResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly terminalId: string;\n};\nexport const CreateTerminalResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  terminalId: Schema.String.annotate({\n    description: \"The unique identifier for the created terminal.\",\n  }),\n}).annotate({ description: \"Response containing the ID of the created terminal.\" });\n\nexport type CurrentModeUpdate = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly currentModeId: string;\n};\nexport const CurrentModeUpdate = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  currentModeId: Schema.String.annotate({ description: \"Unique identifier for a Session Mode.\" }),\n}).annotate({\n  description:\n    \"The current mode of the session has changed\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n});\n\nexport type Diff = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly newText: string;\n  readonly oldText?: string | null;\n  readonly path: string;\n};\nexport const Diff = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  newText: Schema.String.annotate({ description: \"The new content after modification.\" }),\n  oldText: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"The original content (None for new files).\" }),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.String.annotate({ description: \"The file path being modified.\" }),\n}).annotate({\n  description:\n    \"A diff representing file modifications.\\n\\nShows changes to files in a format suitable for display in the client UI.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content)\",\n});\n\nexport type ElicitationAcceptAction = {\n  readonly content?: { readonly [x: string]: ElicitationContentValue } | null;\n};\nexport const ElicitationAcceptAction = Schema.Struct({\n  content: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, ElicitationContentValue).annotate({\n        description:\n          \"The user-provided content, if any, as an object matching the requested schema.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user accepted the elicitation and provided content.\",\n});\n\nexport type ElicitationAction =\n  | {\n      readonly action: \"accept\";\n      readonly content?: { readonly [x: string]: ElicitationContentValue } | null;\n    }\n  | { readonly action: \"decline\" }\n  | { readonly action: \"cancel\" };\nexport const ElicitationAction = Schema.Union(\n  [\n    Schema.Struct({\n      action: Schema.Literal(\"accept\"),\n      content: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, ElicitationContentValue).annotate({\n            description:\n              \"The user-provided content, if any, as an object matching the requested schema.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user accepted the elicitation and provided content.\",\n    }),\n    Schema.Struct({ action: Schema.Literal(\"decline\") }).annotate({\n      description: \"The user declined the elicitation.\",\n    }),\n    Schema.Struct({ action: Schema.Literal(\"cancel\") }).annotate({\n      description: \"The elicitation was cancelled.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user's action in response to an elicitation.\",\n});\n\nexport type ElicitationCompleteNotification = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly elicitationId: string;\n};\nexport const ElicitationCompleteNotification = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  elicitationId: Schema.String.annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nUnique identifier for an elicitation.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nNotification sent by the agent when a URL-based elicitation is complete.\",\n});\n\nexport type ElicitationFormMode = {\n  readonly requestedSchema: {\n    readonly description?: string | null;\n    readonly properties?: { readonly [x: string]: ElicitationPropertySchema };\n    readonly required?: ReadonlyArray<string> | null;\n    readonly title?: string | null;\n    readonly type?: \"object\";\n  };\n};\nexport const ElicitationFormMode = Schema.Struct({\n  requestedSchema: Schema.Struct({\n    description: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({\n          description: \"Optional description of what this schema represents.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    properties: Schema.optionalKey(\n      Schema.Record(Schema.String, ElicitationPropertySchema).annotate({\n        description: \"Property definitions (must be primitive types).\",\n        default: {},\n      }),\n    ),\n    required: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(Schema.String).annotate({ description: \"List of required property names.\" }),\n        Schema.Null,\n      ]),\n    ),\n    title: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({ description: \"Optional title for the schema.\" }),\n        Schema.Null,\n      ]),\n    ),\n    type: Schema.optionalKey(\n      Schema.Literal(\"object\").annotate({\n        description: \"Type discriminator for elicitation schemas.\",\n        default: \"object\",\n      }),\n    ),\n  }).annotate({\n    description:\n      \"Type-safe elicitation schema for requesting structured user input.\\n\\nThis represents a JSON Schema object with primitive-typed properties,\\nas required by the elicitation specification.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nForm-based elicitation mode where the client renders a form from the provided schema.\",\n});\n\nexport type ElicitationId = string;\nexport const ElicitationId = Schema.String.annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nUnique identifier for an elicitation.\",\n});\n\nexport type ElicitationRequest =\n  | {\n      readonly mode: \"form\";\n      readonly requestedSchema: {\n        readonly description?: string | null;\n        readonly properties?: { readonly [x: string]: ElicitationPropertySchema };\n        readonly required?: ReadonlyArray<string> | null;\n        readonly title?: string | null;\n        readonly type?: \"object\";\n      };\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly message: string;\n      readonly sessionId: string;\n    }\n  | {\n      readonly mode: \"url\";\n      readonly elicitationId: string;\n      readonly url: string;\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly message: string;\n      readonly sessionId: string;\n    };\nexport const ElicitationRequest = Schema.Union([\n  Schema.Struct({\n    mode: Schema.Literal(\"form\"),\n    requestedSchema: Schema.Struct({\n      description: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Optional description of what this schema represents.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      properties: Schema.optionalKey(\n        Schema.Record(Schema.String, ElicitationPropertySchema).annotate({\n          description: \"Property definitions (must be primitive types).\",\n          default: {},\n        }),\n      ),\n      required: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(Schema.String).annotate({ description: \"List of required property names.\" }),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Optional title for the schema.\" }),\n          Schema.Null,\n        ]),\n      ),\n      type: Schema.optionalKey(\n        Schema.Literal(\"object\").annotate({\n          description: \"Type discriminator for elicitation schemas.\",\n          default: \"object\",\n        }),\n      ),\n    }).annotate({\n      description:\n        \"Type-safe elicitation schema for requesting structured user input.\\n\\nThis represents a JSON Schema object with primitive-typed properties,\\nas required by the elicitation specification.\",\n    }),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    message: Schema.String.annotate({\n      description: \"A human-readable message describing what input is needed.\",\n    }),\n    sessionId: Schema.String.annotate({\n      description:\n        \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n    }),\n  }).annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest from the agent to elicit structured user input.\\n\\nThe agent sends this to the client to request information from the user,\\neither via a form or by directing them to a URL.\",\n  }),\n  Schema.Struct({\n    mode: Schema.Literal(\"url\"),\n    elicitationId: Schema.String.annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nUnique identifier for an elicitation.\",\n    }),\n    url: Schema.String.annotate({ description: \"The URL to direct the user to.\", format: \"uri\" }),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    message: Schema.String.annotate({\n      description: \"A human-readable message describing what input is needed.\",\n    }),\n    sessionId: Schema.String.annotate({\n      description:\n        \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n    }),\n  }).annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest from the agent to elicit structured user input.\\n\\nThe agent sends this to the client to request information from the user,\\neither via a form or by directing them to a URL.\",\n  }),\n]);\n\nexport type ElicitationResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly action:\n    | {\n        readonly action: \"accept\";\n        readonly content?: { readonly [x: string]: ElicitationContentValue } | null;\n      }\n    | { readonly action: \"decline\" }\n    | { readonly action: \"cancel\" };\n};\nexport const ElicitationResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  action: Schema.Union(\n    [\n      Schema.Struct({\n        action: Schema.Literal(\"accept\"),\n        content: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, ElicitationContentValue).annotate({\n              description:\n                \"The user-provided content, if any, as an object matching the requested schema.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user accepted the elicitation and provided content.\",\n      }),\n      Schema.Struct({ action: Schema.Literal(\"decline\") }).annotate({\n        description: \"The user declined the elicitation.\",\n      }),\n      Schema.Struct({ action: Schema.Literal(\"cancel\") }).annotate({\n        description: \"The elicitation was cancelled.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe user's action in response to an elicitation.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from the client to an elicitation request.\",\n});\n\nexport type ElicitationSchema = {\n  readonly description?: string | null;\n  readonly properties?: { readonly [x: string]: ElicitationPropertySchema };\n  readonly required?: ReadonlyArray<string> | null;\n  readonly title?: string | null;\n  readonly type?: \"object\";\n};\nexport const ElicitationSchema = Schema.Struct({\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Optional description of what this schema represents.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  properties: Schema.optionalKey(\n    Schema.Record(Schema.String, ElicitationPropertySchema).annotate({\n      description: \"Property definitions (must be primitive types).\",\n      default: {},\n    }),\n  ),\n  required: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({ description: \"List of required property names.\" }),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional title for the schema.\" }),\n      Schema.Null,\n    ]),\n  ),\n  type: Schema.optionalKey(\n    Schema.Literal(\"object\").annotate({\n      description: \"Type discriminator for elicitation schemas.\",\n      default: \"object\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"Type-safe elicitation schema for requesting structured user input.\\n\\nThis represents a JSON Schema object with primitive-typed properties,\\nas required by the elicitation specification.\",\n});\n\nexport type ElicitationSchemaType = \"object\";\nexport const ElicitationSchemaType = Schema.Literal(\"object\").annotate({\n  description: \"Type discriminator for elicitation schemas.\",\n});\n\nexport type ElicitationStringType = \"string\";\nexport const ElicitationStringType = Schema.Literal(\"string\").annotate({\n  description: \"Items definition for untitled multi-select enum properties.\",\n});\n\nexport type ElicitationUrlMode = { readonly elicitationId: string; readonly url: string };\nexport const ElicitationUrlMode = Schema.Struct({\n  elicitationId: Schema.String.annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nUnique identifier for an elicitation.\",\n  }),\n  url: Schema.String.annotate({ description: \"The URL to direct the user to.\", format: \"uri\" }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nURL-based elicitation mode where the client directs the user to a URL.\",\n});\n\nexport type EmbeddedResource = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly annotations?: Annotations | null;\n  readonly resource: EmbeddedResourceResource;\n};\nexport const EmbeddedResource = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n  resource: EmbeddedResourceResource,\n}).annotate({\n  description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n});\n\nexport type ErrorCode =\n  | -32700\n  | -32600\n  | -32601\n  | -32602\n  | -32603\n  | -32800\n  | -32000\n  | -32002\n  | -32042\n  | number;\nexport const ErrorCode = Schema.Union([\n  Schema.Literal(-32700).annotate({\n    title: \"Parse error\",\n    description:\n      \"**Parse error**: Invalid JSON was received by the server.\\nAn error occurred on the server while parsing the JSON text.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32600).annotate({\n    title: \"Invalid request\",\n    description: \"**Invalid request**: The JSON sent is not a valid Request object.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32601).annotate({\n    title: \"Method not found\",\n    description: \"**Method not found**: The method does not exist or is not available.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32602).annotate({\n    title: \"Invalid params\",\n    description: \"**Invalid params**: Invalid method parameter(s).\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32603).annotate({\n    title: \"Internal error\",\n    description:\n      \"**Internal error**: Internal JSON-RPC error.\\nReserved for implementation-defined server errors.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32800).annotate({\n    title: \"Request cancelled\",\n    description:\n      \"**Request cancelled**: **UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nExecution of the method was aborted either due to a cancellation request from the caller or\\nbecause of resource constraints or shutdown.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32000).annotate({\n    title: \"Authentication required\",\n    description:\n      \"**Authentication required**: Authentication is required before this operation can be performed.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32002).annotate({\n    title: \"Resource not found\",\n    description: \"**Resource not found**: A given resource, such as a file, was not found.\",\n    format: \"int32\",\n  }),\n  Schema.Literal(-32042).annotate({\n    title: \"URL elicitation required\",\n    description:\n      \"**URL elicitation required**: **UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe agent requires user input via a URL-based elicitation before it can proceed.\",\n    format: \"int32\",\n  }),\n  Schema.Number.annotate({\n    title: \"Other\",\n    description: \"Other undefined error code.\",\n    format: \"int32\",\n  }).check(Schema.isInt()),\n]).annotate({\n  description:\n    \"Predefined error codes for common JSON-RPC and ACP-specific errors.\\n\\nThese codes follow the JSON-RPC 2.0 specification for standard errors\\nand use the reserved range (-32000 to -32099) for protocol-specific errors.\",\n});\n\nexport type ExtNotification = unknown;\nexport const ExtNotification = Schema.Unknown.annotate({\n  description:\n    \"Allows the Agent to send an arbitrary notification that is not part of the ACP spec.\\nExtension notifications provide a way to send one-way messages for custom functionality\\nwhile maintaining protocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n});\n\nexport type ExtRequest = unknown;\nexport const ExtRequest = Schema.Unknown.annotate({\n  description:\n    \"Allows for sending an arbitrary request that is not part of the ACP spec.\\nExtension methods provide a way to add custom functionality while maintaining\\nprotocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n});\n\nexport type ExtResponse = unknown;\nexport const ExtResponse = Schema.Unknown.annotate({\n  description:\n    \"Allows for sending an arbitrary response to an [`ExtRequest`] that is not part of the ACP spec.\\nExtension methods provide a way to add custom functionality while maintaining\\nprotocol compatibility.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n});\n\nexport type FileSystemCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly readTextFile?: boolean;\n  readonly writeTextFile?: boolean;\n};\nexport const FileSystemCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  readTextFile: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Whether the Client supports `fs/read_text_file` requests.\",\n      default: false,\n    }),\n  ),\n  writeTextFile: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Whether the Client supports `fs/write_text_file` requests.\",\n      default: false,\n    }),\n  ),\n}).annotate({\n  description:\n    \"File system capabilities that a client may support.\\n\\nSee protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)\",\n});\n\nexport type ForkSessionRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cwd: string;\n  readonly mcpServers?: ReadonlyArray<McpServer>;\n  readonly sessionId: string;\n};\nexport const ForkSessionRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.String.annotate({ description: \"The working directory for this session.\" }),\n  mcpServers: Schema.optionalKey(\n    Schema.Array(McpServer).annotate({\n      description: \"List of MCP servers to connect to for this session.\",\n    }),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for forking an existing session.\\n\\nCreates a new session based on the context of an existing one, allowing\\noperations like generating summaries without affecting the original session's history.\\n\\nOnly available if the Agent supports the `session.fork` capability.\",\n});\n\nexport type ForkSessionResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n  readonly models?: SessionModelState | null;\n  readonly modes?: SessionModeState | null;\n  readonly sessionId: string;\n};\nexport const ForkSessionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  configOptions: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(SessionConfigOption).annotate({\n        description: \"Initial session configuration options if supported by the Agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  models: Schema.optionalKey(\n    Schema.Union([SessionModelState, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n    }),\n  ),\n  modes: Schema.optionalKey(\n    Schema.Union([SessionModeState, Schema.Null]).annotate({\n      description:\n        \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n    }),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from forking an existing session.\",\n});\n\nexport type ImageContent = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly annotations?: Annotations | null;\n  readonly data: string;\n  readonly mimeType: string;\n  readonly uri?: string | null;\n};\nexport const ImageContent = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n  data: Schema.String,\n  mimeType: Schema.String,\n  uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n}).annotate({ description: \"An image provided to or from an LLM.\" });\n\nexport type InitializeRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly clientCapabilities?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly auth?: {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly terminal?: boolean;\n    };\n    readonly elicitation?: ElicitationCapabilities | null;\n    readonly fs?: {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly readTextFile?: boolean;\n      readonly writeTextFile?: boolean;\n    };\n    readonly terminal?: boolean;\n  };\n  readonly clientInfo?: Implementation | null;\n  readonly protocolVersion: number;\n};\nexport const InitializeRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  clientCapabilities: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      auth: Schema.optionalKey(\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          terminal: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description:\n                \"Whether the client supports `terminal` authentication methods.\\n\\nWhen `true`, the agent may include `terminal` entries in its authentication methods.\",\n              default: false,\n            }),\n          ),\n        }).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent which authentication\\nmethod types the client can handle. This governs opt-in types that require\\nadditional client-side support.\",\n          default: { terminal: false },\n        }),\n      ),\n      elicitation: Schema.optionalKey(\n        Schema.Union([ElicitationCapabilities, Schema.Null]).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nElicitation capabilities supported by the client.\\nDetermines which elicitation modes the agent may use.\",\n        }),\n      ),\n      fs: Schema.optionalKey(\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          readTextFile: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description: \"Whether the Client supports `fs/read_text_file` requests.\",\n              default: false,\n            }),\n          ),\n          writeTextFile: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description: \"Whether the Client supports `fs/write_text_file` requests.\",\n              default: false,\n            }),\n          ),\n        }).annotate({\n          description:\n            \"File system capabilities that a client may support.\\n\\nSee protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)\",\n          default: { readTextFile: false, writeTextFile: false },\n        }),\n      ),\n      terminal: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Whether the Client support all `terminal/*` methods.\",\n          default: false,\n        }),\n      ),\n    }).annotate({\n      description:\n        \"Capabilities supported by the client.\\n\\nAdvertised during initialization to inform the agent about\\navailable features and methods.\\n\\nSee protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/initialization#client-capabilities)\",\n      default: {\n        auth: { terminal: false },\n        fs: { readTextFile: false, writeTextFile: false },\n        terminal: false,\n      },\n    }),\n  ),\n  clientInfo: Schema.optionalKey(\n    Schema.Union([Implementation, Schema.Null]).annotate({\n      description:\n        \"Information about the Client name and version sent to the Agent.\\n\\nNote: in future versions of the protocol, this will be required.\",\n    }),\n  ),\n  protocolVersion: Schema.Number.annotate({\n    description:\n      \"Protocol version identifier.\\n\\nThis version is only bumped for breaking changes.\\nNon-breaking changes should be introduced via capabilities.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0))\n    .check(Schema.isLessThanOrEqualTo(65535)),\n}).annotate({\n  description:\n    \"Request parameters for the initialize method.\\n\\nSent by the client to establish connection and negotiate capabilities.\\n\\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)\",\n});\n\nexport type InitializeResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly agentCapabilities?: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly auth?: {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly logout?: LogoutCapabilities | null;\n    };\n    readonly loadSession?: boolean;\n    readonly mcpCapabilities?: {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly http?: boolean;\n      readonly sse?: boolean;\n    };\n    readonly promptCapabilities?: {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly audio?: boolean;\n      readonly embeddedContext?: boolean;\n      readonly image?: boolean;\n    };\n    readonly sessionCapabilities?: {\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly close?: SessionCloseCapabilities | null;\n      readonly fork?: SessionForkCapabilities | null;\n      readonly list?: SessionListCapabilities | null;\n      readonly resume?: SessionResumeCapabilities | null;\n    };\n  };\n  readonly agentInfo?: Implementation | null;\n  readonly authMethods?: ReadonlyArray<AuthMethod>;\n  readonly protocolVersion: number;\n};\nexport const InitializeResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  agentCapabilities: Schema.optionalKey(\n    Schema.Struct({\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      auth: Schema.optionalKey(\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          logout: Schema.optionalKey(\n            Schema.Union([LogoutCapabilities, Schema.Null]).annotate({\n              description:\n                \"Whether the agent supports the logout method.\\n\\nBy supplying `{}` it means that the agent supports the logout method.\",\n            }),\n          ),\n        }).annotate({\n          description:\n            \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nAuthentication-related capabilities supported by the agent.\",\n          default: {},\n        }),\n      ),\n      loadSession: Schema.optionalKey(\n        Schema.Boolean.annotate({\n          description: \"Whether the agent supports `session/load`.\",\n          default: false,\n        }),\n      ),\n      mcpCapabilities: Schema.optionalKey(\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          http: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description: \"Agent supports [`McpServer::Http`].\",\n              default: false,\n            }),\n          ),\n          sse: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description: \"Agent supports [`McpServer::Sse`].\",\n              default: false,\n            }),\n          ),\n        }).annotate({\n          description: \"MCP capabilities supported by the agent\",\n          default: { http: false, sse: false },\n        }),\n      ),\n      promptCapabilities: Schema.optionalKey(\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          audio: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description: \"Agent supports [`ContentBlock::Audio`].\",\n              default: false,\n            }),\n          ),\n          embeddedContext: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description:\n                \"Agent supports embedded context in `session/prompt` requests.\\n\\nWhen enabled, the Client is allowed to include [`ContentBlock::Resource`]\\nin prompt requests for pieces of context that are referenced in the message.\",\n              default: false,\n            }),\n          ),\n          image: Schema.optionalKey(\n            Schema.Boolean.annotate({\n              description: \"Agent supports [`ContentBlock::Image`].\",\n              default: false,\n            }),\n          ),\n        }).annotate({\n          description:\n            \"Prompt capabilities supported by the agent in `session/prompt` requests.\\n\\nBaseline agent functionality requires support for [`ContentBlock::Text`]\\nand [`ContentBlock::ResourceLink`] in prompt requests.\\n\\nOther variants must be explicitly opted in to.\\nCapabilities for different types of content in prompt requests.\\n\\nIndicates which content types beyond the baseline (text and resource links)\\nthe agent can process.\\n\\nSee protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities)\",\n          default: { audio: false, embeddedContext: false, image: false },\n        }),\n      ),\n      sessionCapabilities: Schema.optionalKey(\n        Schema.Struct({\n          _meta: Schema.optionalKey(\n            Schema.Union([\n              Schema.Record(Schema.String, Schema.Unknown).annotate({\n                description:\n                  \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n              }),\n              Schema.Null,\n            ]),\n          ),\n          close: Schema.optionalKey(\n            Schema.Union([SessionCloseCapabilities, Schema.Null]).annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/close`.\",\n            }),\n          ),\n          fork: Schema.optionalKey(\n            Schema.Union([SessionForkCapabilities, Schema.Null]).annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/fork`.\",\n            }),\n          ),\n          list: Schema.optionalKey(\n            Schema.Union([SessionListCapabilities, Schema.Null]).annotate({\n              description: \"Whether the agent supports `session/list`.\",\n            }),\n          ),\n          resume: Schema.optionalKey(\n            Schema.Union([SessionResumeCapabilities, Schema.Null]).annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/resume`.\",\n            }),\n          ),\n        }).annotate({\n          default: {},\n          description:\n            \"Session capabilities supported by the agent.\\n\\nAs a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`.\\n\\nOptionally, they **MAY** support other session methods and notifications by specifying additional capabilities.\\n\\nNote: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol.\\n\\nSee protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities)\",\n        }),\n      ),\n    }).annotate({\n      description:\n        \"Capabilities supported by the agent.\\n\\nAdvertised during initialization to inform the client about\\navailable features and content types.\\n\\nSee protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities)\",\n      default: {\n        auth: {},\n        loadSession: false,\n        mcpCapabilities: { http: false, sse: false },\n        promptCapabilities: { audio: false, embeddedContext: false, image: false },\n        sessionCapabilities: {},\n      },\n    }),\n  ),\n  agentInfo: Schema.optionalKey(\n    Schema.Union([Implementation, Schema.Null]).annotate({\n      description:\n        \"Information about the Agent name and version sent to the Client.\\n\\nNote: in future versions of the protocol, this will be required.\",\n    }),\n  ),\n  authMethods: Schema.optionalKey(\n    Schema.Array(AuthMethod).annotate({\n      description: \"Authentication methods supported by the agent.\",\n      default: [],\n    }),\n  ),\n  protocolVersion: Schema.Number.annotate({\n    description:\n      \"Protocol version identifier.\\n\\nThis version is only bumped for breaking changes.\\nNon-breaking changes should be introduced via capabilities.\",\n    format: \"uint16\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0))\n    .check(Schema.isLessThanOrEqualTo(65535)),\n}).annotate({\n  description:\n    \"Response to the `initialize` method.\\n\\nContains the negotiated protocol version and agent capabilities.\\n\\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)\",\n});\n\nexport type IntegerPropertySchema = {\n  readonly default?: number | null;\n  readonly description?: string | null;\n  readonly maximum?: number | null;\n  readonly minimum?: number | null;\n  readonly title?: string | null;\n};\nexport const IntegerPropertySchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Default value.\", format: \"int64\" }).check(\n        Schema.isInt(),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Human-readable description.\" }),\n      Schema.Null,\n    ]),\n  ),\n  maximum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Maximum value (inclusive).\", format: \"int64\" }).check(\n        Schema.isInt(),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  minimum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Minimum value (inclusive).\", format: \"int64\" }).check(\n        Schema.isInt(),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional title for the property.\" }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Schema for integer properties in an elicitation form.\" });\n\nexport type KillTerminalRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n  readonly terminalId: string;\n};\nexport const KillTerminalRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  terminalId: Schema.String.annotate({ description: \"The ID of the terminal to kill.\" }),\n}).annotate({ description: \"Request to kill a terminal without releasing it.\" });\n\nexport type KillTerminalResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const KillTerminalResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Response to `terminal/kill` method\" });\n\nexport type ListSessionsRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cursor?: string | null;\n  readonly cwd?: string | null;\n};\nexport const ListSessionsRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor token from a previous response's nextCursor field for cursor-based pagination\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Filter sessions by working directory. Must be an absolute path.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"Request parameters for listing existing sessions.\\n\\nOnly available if the Agent supports the `sessionCapabilities.list` capability.\",\n});\n\nexport type ListSessionsResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly nextCursor?: string | null;\n  readonly sessions: ReadonlyArray<SessionInfo>;\n};\nexport const ListSessionsResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  nextCursor: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"Opaque cursor token. If present, pass this in the next request's cursor parameter\\nto fetch the next page. If absent, there are no more results.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessions: Schema.Array(SessionInfo).annotate({\n    description: \"Array of session information objects\",\n  }),\n}).annotate({ description: \"Response from listing sessions.\" });\n\nexport type LoadSessionRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cwd: string;\n  readonly mcpServers: ReadonlyArray<McpServer>;\n  readonly sessionId: string;\n};\nexport const LoadSessionRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.String.annotate({ description: \"The working directory for this session.\" }),\n  mcpServers: Schema.Array(McpServer).annotate({\n    description: \"List of MCP servers to connect to for this session.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"Request parameters for loading an existing session.\\n\\nOnly available if the Agent supports the `loadSession` capability.\\n\\nSee protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)\",\n});\n\nexport type LoadSessionResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n  readonly models?: SessionModelState | null;\n  readonly modes?: SessionModeState | null;\n};\nexport const LoadSessionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  configOptions: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(SessionConfigOption).annotate({\n        description: \"Initial session configuration options if supported by the Agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  models: Schema.optionalKey(\n    Schema.Union([SessionModelState, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n    }),\n  ),\n  modes: Schema.optionalKey(\n    Schema.Union([SessionModeState, Schema.Null]).annotate({\n      description:\n        \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n    }),\n  ),\n}).annotate({ description: \"Response from loading an existing session.\" });\n\nexport type LogoutRequest = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const LogoutRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for the logout method.\\n\\nTerminates the current authenticated session.\",\n});\n\nexport type LogoutResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const LogoutResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse to the `logout` method.\",\n});\n\nexport type McpCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly http?: boolean;\n  readonly sse?: boolean;\n};\nexport const McpCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  http: Schema.optionalKey(\n    Schema.Boolean.annotate({ description: \"Agent supports [`McpServer::Http`].\", default: false }),\n  ),\n  sse: Schema.optionalKey(\n    Schema.Boolean.annotate({ description: \"Agent supports [`McpServer::Sse`].\", default: false }),\n  ),\n}).annotate({ description: \"MCP capabilities supported by the agent\" });\n\nexport type McpServerHttp = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly headers: ReadonlyArray<HttpHeader>;\n  readonly name: string;\n  readonly url: string;\n};\nexport const McpServerHttp = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  headers: Schema.Array(HttpHeader).annotate({\n    description: \"HTTP headers to set when making requests to the MCP server.\",\n  }),\n  name: Schema.String.annotate({ description: \"Human-readable name identifying this MCP server.\" }),\n  url: Schema.String.annotate({ description: \"URL to the MCP server.\" }),\n}).annotate({ description: \"HTTP transport configuration for MCP.\" });\n\nexport type McpServerSse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly headers: ReadonlyArray<HttpHeader>;\n  readonly name: string;\n  readonly url: string;\n};\nexport const McpServerSse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  headers: Schema.Array(HttpHeader).annotate({\n    description: \"HTTP headers to set when making requests to the MCP server.\",\n  }),\n  name: Schema.String.annotate({ description: \"Human-readable name identifying this MCP server.\" }),\n  url: Schema.String.annotate({ description: \"URL to the MCP server.\" }),\n}).annotate({ description: \"SSE transport configuration for MCP.\" });\n\nexport type McpServerStdio = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly args: ReadonlyArray<string>;\n  readonly command: string;\n  readonly env: ReadonlyArray<EnvVariable>;\n  readonly name: string;\n};\nexport const McpServerStdio = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  args: Schema.Array(Schema.String).annotate({\n    description: \"Command-line arguments to pass to the MCP server.\",\n  }),\n  command: Schema.String.annotate({ description: \"Path to the MCP server executable.\" }),\n  env: Schema.Array(EnvVariable).annotate({\n    description: \"Environment variables to set when launching the MCP server.\",\n  }),\n  name: Schema.String.annotate({ description: \"Human-readable name identifying this MCP server.\" }),\n}).annotate({ description: \"Stdio transport configuration for MCP.\" });\n\nexport type ModelId = string;\nexport const ModelId = Schema.String.annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for a model.\",\n});\n\nexport type MultiSelectItems =\n  | { readonly enum: ReadonlyArray<string>; readonly type: \"string\" }\n  | { readonly anyOf: ReadonlyArray<EnumOption> };\nexport const MultiSelectItems = Schema.Union([\n  Schema.Struct({\n    enum: Schema.Array(Schema.String).annotate({ description: \"Allowed enum values.\" }),\n    type: Schema.Literal(\"string\").annotate({\n      description: \"Items definition for untitled multi-select enum properties.\",\n    }),\n  }).annotate({\n    title: \"Untitled\",\n    description: \"Items definition for untitled multi-select enum properties.\",\n  }),\n  Schema.Struct({\n    anyOf: Schema.Array(EnumOption).annotate({ description: \"Titled enum options.\" }),\n  }).annotate({\n    title: \"Titled\",\n    description: \"Items definition for titled multi-select enum properties.\",\n  }),\n]).annotate({ description: \"Items for a multi-select (array) property schema.\" });\n\nexport type MultiSelectPropertySchema = {\n  readonly default?: ReadonlyArray<string> | null;\n  readonly description?: string | null;\n  readonly items:\n    | { readonly enum: ReadonlyArray<string>; readonly type: \"string\" }\n    | { readonly anyOf: ReadonlyArray<EnumOption> };\n  readonly maxItems?: number | null;\n  readonly minItems?: number | null;\n  readonly title?: string | null;\n};\nexport const MultiSelectPropertySchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({ description: \"Default selected values.\" }),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Human-readable description.\" }),\n      Schema.Null,\n    ]),\n  ),\n  items: Schema.Union([\n    Schema.Struct({\n      enum: Schema.Array(Schema.String).annotate({ description: \"Allowed enum values.\" }),\n      type: Schema.Literal(\"string\").annotate({\n        description: \"Items definition for untitled multi-select enum properties.\",\n      }),\n    }).annotate({\n      title: \"Untitled\",\n      description: \"Items definition for untitled multi-select enum properties.\",\n    }),\n    Schema.Struct({\n      anyOf: Schema.Array(EnumOption).annotate({ description: \"Titled enum options.\" }),\n    }).annotate({\n      title: \"Titled\",\n      description: \"Items definition for titled multi-select enum properties.\",\n    }),\n  ]).annotate({ description: \"Items for a multi-select (array) property schema.\" }),\n  maxItems: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Maximum number of items to select.\",\n        format: \"uint64\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  minItems: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Minimum number of items to select.\",\n        format: \"uint64\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional title for the property.\" }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Schema for multi-select (array) properties in an elicitation form.\" });\n\nexport type NewSessionRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cwd: string;\n  readonly mcpServers: ReadonlyArray<McpServer>;\n};\nexport const NewSessionRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.String.annotate({\n    description: \"The working directory for this session. Must be an absolute path.\",\n  }),\n  mcpServers: Schema.Array(McpServer).annotate({\n    description: \"List of MCP (Model Context Protocol) servers the agent should connect to.\",\n  }),\n}).annotate({\n  description:\n    \"Request parameters for creating a new session.\\n\\nSee protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)\",\n});\n\nexport type NewSessionResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n  readonly models?: SessionModelState | null;\n  readonly modes?: SessionModeState | null;\n  readonly sessionId: string;\n};\nexport const NewSessionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  configOptions: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(SessionConfigOption).annotate({\n        description: \"Initial session configuration options if supported by the Agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  models: Schema.optionalKey(\n    Schema.Union([SessionModelState, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n    }),\n  ),\n  modes: Schema.optionalKey(\n    Schema.Union([SessionModeState, Schema.Null]).annotate({\n      description:\n        \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n    }),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"Response from creating a new session.\\n\\nSee protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)\",\n});\n\nexport type NumberPropertySchema = {\n  readonly default?: number | null;\n  readonly description?: string | null;\n  readonly maximum?: number | null;\n  readonly minimum?: number | null;\n  readonly title?: string | null;\n};\nexport const NumberPropertySchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Default value.\", format: \"double\" }).check(\n        Schema.isFinite(),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Human-readable description.\" }),\n      Schema.Null,\n    ]),\n  ),\n  maximum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Maximum value (inclusive).\", format: \"double\" }).check(\n        Schema.isFinite(),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  minimum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Minimum value (inclusive).\", format: \"double\" }).check(\n        Schema.isFinite(),\n      ),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional title for the property.\" }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description: \"Schema for number (floating-point) properties in an elicitation form.\",\n});\n\nexport type PermissionOptionId = string;\nexport const PermissionOptionId = Schema.String.annotate({\n  description: \"Unique identifier for a permission option.\",\n});\n\nexport type PermissionOptionKind = \"allow_once\" | \"allow_always\" | \"reject_once\" | \"reject_always\";\nexport const PermissionOptionKind = Schema.Literals([\n  \"allow_once\",\n  \"allow_always\",\n  \"reject_once\",\n  \"reject_always\",\n]).annotate({\n  description:\n    \"The type of permission option being presented to the user.\\n\\nHelps clients choose appropriate icons and UI treatment.\",\n});\n\nexport type Plan = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly entries: ReadonlyArray<PlanEntry>;\n};\nexport const Plan = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  entries: Schema.Array(PlanEntry).annotate({\n    description:\n      \"The list of tasks to be accomplished.\\n\\nWhen updating a plan, the agent must send a complete list of all entries\\nwith their current status. The client replaces the entire plan with each update.\",\n  }),\n}).annotate({\n  description:\n    \"An execution plan for accomplishing complex tasks.\\n\\nPlans consist of multiple entries representing individual tasks or goals.\\nAgents report plans to clients to provide visibility into their execution strategy.\\nPlans can evolve during execution as the agent discovers new requirements or completes tasks.\\n\\nSee protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)\",\n});\n\nexport type PlanEntryPriority = \"high\" | \"medium\" | \"low\";\nexport const PlanEntryPriority = Schema.Literals([\"high\", \"medium\", \"low\"]).annotate({\n  description:\n    \"Priority levels for plan entries.\\n\\nUsed to indicate the relative importance or urgency of different\\ntasks in the execution plan.\\nSee protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)\",\n});\n\nexport type PlanEntryStatus = \"pending\" | \"in_progress\" | \"completed\";\nexport const PlanEntryStatus = Schema.Literals([\"pending\", \"in_progress\", \"completed\"]).annotate({\n  description:\n    \"Status of a plan entry in the execution flow.\\n\\nTracks the lifecycle of each task from planning through completion.\\nSee protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)\",\n});\n\nexport type PromptCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly audio?: boolean;\n  readonly embeddedContext?: boolean;\n  readonly image?: boolean;\n};\nexport const PromptCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  audio: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Agent supports [`ContentBlock::Audio`].\",\n      default: false,\n    }),\n  ),\n  embeddedContext: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description:\n        \"Agent supports embedded context in `session/prompt` requests.\\n\\nWhen enabled, the Client is allowed to include [`ContentBlock::Resource`]\\nin prompt requests for pieces of context that are referenced in the message.\",\n      default: false,\n    }),\n  ),\n  image: Schema.optionalKey(\n    Schema.Boolean.annotate({\n      description: \"Agent supports [`ContentBlock::Image`].\",\n      default: false,\n    }),\n  ),\n}).annotate({\n  description:\n    \"Prompt capabilities supported by the agent in `session/prompt` requests.\\n\\nBaseline agent functionality requires support for [`ContentBlock::Text`]\\nand [`ContentBlock::ResourceLink`] in prompt requests.\\n\\nOther variants must be explicitly opted in to.\\nCapabilities for different types of content in prompt requests.\\n\\nIndicates which content types beyond the baseline (text and resource links)\\nthe agent can process.\\n\\nSee protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities)\",\n});\n\nexport type PromptRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly messageId?: string | null;\n  readonly prompt: ReadonlyArray<ContentBlock>;\n  readonly sessionId: string;\n};\nexport const PromptRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  messageId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA client-generated unique identifier for this user message.\\n\\nIf provided, the Agent SHOULD echo this value as `userMessageId` in the\\n[`PromptResponse`] to confirm it was recorded.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  prompt: Schema.Array(ContentBlock).annotate({\n    description:\n      \"The blocks of content that compose the user's message.\\n\\nAs a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`],\\nwhile other variants are optionally enabled via [`PromptCapabilities`].\\n\\nThe Client MUST adapt its interface according to [`PromptCapabilities`].\\n\\nThe client MAY include referenced pieces of context as either\\n[`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`].\\n\\nWhen available, [`ContentBlock::Resource`] is preferred\\nas it avoids extra round-trips and allows the message to include\\npieces of context from sources the agent may not have access to.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"Request parameters for sending a user prompt to the agent.\\n\\nContains the user's message and any additional context.\\n\\nSee protocol docs: [User Message](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message)\",\n});\n\nexport type PromptResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly stopReason: \"end_turn\" | \"max_tokens\" | \"max_turn_requests\" | \"refusal\" | \"cancelled\";\n  readonly usage?: Usage | null;\n  readonly userMessageId?: string | null;\n};\nexport const PromptResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  stopReason: Schema.Literals([\n    \"end_turn\",\n    \"max_tokens\",\n    \"max_turn_requests\",\n    \"refusal\",\n    \"cancelled\",\n  ]).annotate({\n    description:\n      \"Reasons why an agent stops processing a prompt turn.\\n\\nSee protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/prompt-turn#stop-reasons)\",\n  }),\n  usage: Schema.optionalKey(\n    Schema.Union([Usage, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nToken usage for this turn (optional).\",\n    }),\n  ),\n  userMessageId: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nThe acknowledged user message ID.\\n\\nIf the client provided a `messageId` in the [`PromptRequest`], the agent echoes it here\\nto confirm it was recorded. If the client did not provide one, the agent MAY assign one\\nand return it here. Absence of this field indicates the agent did not record a message ID.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"Response from processing a user prompt.\\n\\nSee protocol docs: [Check for Completion](https://agentclientprotocol.com/protocol/prompt-turn#4-check-for-completion)\",\n});\n\nexport type ProtocolVersion = number;\nexport const ProtocolVersion = Schema.Number.annotate({\n  description:\n    \"Protocol version identifier.\\n\\nThis version is only bumped for breaking changes.\\nNon-breaking changes should be introduced via capabilities.\",\n  format: \"uint16\",\n})\n  .check(Schema.isInt())\n  .check(Schema.isGreaterThanOrEqualTo(0))\n  .check(Schema.isLessThanOrEqualTo(65535));\n\nexport type ReadTextFileRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly limit?: number | null;\n  readonly line?: number | null;\n  readonly path: string;\n  readonly sessionId: string;\n};\nexport const ReadTextFileRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  limit: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Maximum number of lines to read.\", format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  line: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"Line number to start reading from (1-based).\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  path: Schema.String.annotate({ description: \"Absolute path to the file to read.\" }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"Request to read content from a text file.\\n\\nOnly available if the client supports the `fs.readTextFile` capability.\",\n});\n\nexport type ReadTextFileResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content: string;\n};\nexport const ReadTextFileResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.String,\n}).annotate({ description: \"Response containing the contents of a text file.\" });\n\nexport type ReleaseTerminalRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n  readonly terminalId: string;\n};\nexport const ReleaseTerminalRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  terminalId: Schema.String.annotate({ description: \"The ID of the terminal to release.\" }),\n}).annotate({ description: \"Request to release a terminal and free its resources.\" });\n\nexport type ReleaseTerminalResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const ReleaseTerminalResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Response to terminal/release method\" });\n\nexport type RequestPermissionOutcome =\n  | { readonly outcome: \"cancelled\" }\n  | {\n      readonly outcome: \"selected\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly optionId: string;\n    };\nexport const RequestPermissionOutcome = Schema.Union(\n  [\n    Schema.Struct({ outcome: Schema.Literal(\"cancelled\") }).annotate({\n      description:\n        \"The prompt turn was cancelled before the user responded.\\n\\nWhen a client sends a `session/cancel` notification to cancel an ongoing\\nprompt turn, it MUST respond to all pending `session/request_permission`\\nrequests with this `Cancelled` outcome.\\n\\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)\",\n    }),\n    Schema.Struct({\n      outcome: Schema.Literal(\"selected\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      optionId: Schema.String.annotate({\n        description: \"Unique identifier for a permission option.\",\n      }),\n    }).annotate({ description: \"The user selected one of the provided options.\" }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({ description: \"The outcome of a permission request.\" });\n\nexport type RequestPermissionRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly options: ReadonlyArray<PermissionOption>;\n  readonly sessionId: string;\n  readonly toolCall: {\n    readonly _meta?: { readonly [x: string]: unknown } | null;\n    readonly content?: ReadonlyArray<ToolCallContent> | null;\n    readonly kind?: ToolKind | null;\n    readonly locations?: ReadonlyArray<ToolCallLocation> | null;\n    readonly rawInput?: unknown;\n    readonly rawOutput?: unknown;\n    readonly status?: ToolCallStatus | null;\n    readonly title?: string | null;\n    readonly toolCallId: string;\n  };\n};\nexport const RequestPermissionRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  options: Schema.Array(PermissionOption).annotate({\n    description: \"Available permission options for the user to choose from.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  toolCall: Schema.Struct({\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    content: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(ToolCallContent).annotate({ description: \"Replace the content collection.\" }),\n        Schema.Null,\n      ]),\n    ),\n    kind: Schema.optionalKey(\n      Schema.Union([ToolKind, Schema.Null]).annotate({ description: \"Update the tool kind.\" }),\n    ),\n    locations: Schema.optionalKey(\n      Schema.Union([\n        Schema.Array(ToolCallLocation).annotate({\n          description: \"Replace the locations collection.\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    rawInput: Schema.optionalKey(Schema.Unknown.annotate({ description: \"Update the raw input.\" })),\n    rawOutput: Schema.optionalKey(\n      Schema.Unknown.annotate({ description: \"Update the raw output.\" }),\n    ),\n    status: Schema.optionalKey(\n      Schema.Union([ToolCallStatus, Schema.Null]).annotate({\n        description: \"Update the execution status.\",\n      }),\n    ),\n    title: Schema.optionalKey(\n      Schema.Union([\n        Schema.String.annotate({ description: \"Update the human-readable title.\" }),\n        Schema.Null,\n      ]),\n    ),\n    toolCallId: Schema.String.annotate({\n      description: \"Unique identifier for a tool call within a session.\",\n    }),\n  }).annotate({\n    description:\n      \"An update to an existing tool call.\\n\\nUsed to report progress and results as tools execute. All fields except\\nthe tool call ID are optional - only changed fields need to be included.\\n\\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)\",\n  }),\n}).annotate({\n  description:\n    \"Request for user permission to execute a tool call.\\n\\nSent when the agent needs authorization before performing a sensitive operation.\\n\\nSee protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission)\",\n});\n\nexport type RequestPermissionResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly outcome:\n    | { readonly outcome: \"cancelled\" }\n    | {\n        readonly outcome: \"selected\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly optionId: string;\n      };\n};\nexport const RequestPermissionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  outcome: Schema.Union(\n    [\n      Schema.Struct({ outcome: Schema.Literal(\"cancelled\") }).annotate({\n        description:\n          \"The prompt turn was cancelled before the user responded.\\n\\nWhen a client sends a `session/cancel` notification to cancel an ongoing\\nprompt turn, it MUST respond to all pending `session/request_permission`\\nrequests with this `Cancelled` outcome.\\n\\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)\",\n      }),\n      Schema.Struct({\n        outcome: Schema.Literal(\"selected\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        optionId: Schema.String.annotate({\n          description: \"Unique identifier for a permission option.\",\n        }),\n      }).annotate({ description: \"The user selected one of the provided options.\" }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({ description: \"The outcome of a permission request.\" }),\n}).annotate({ description: \"Response to a permission request.\" });\n\nexport type ResourceLink = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly annotations?: Annotations | null;\n  readonly description?: string | null;\n  readonly mimeType?: string | null;\n  readonly name: string;\n  readonly size?: number | null;\n  readonly title?: string | null;\n  readonly uri: string;\n};\nexport const ResourceLink = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n  description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  name: Schema.String,\n  size: Schema.optionalKey(\n    Schema.Union([Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()), Schema.Null]),\n  ),\n  title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  uri: Schema.String,\n}).annotate({\n  description:\n    \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n});\n\nexport type ResumeSessionRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cwd: string;\n  readonly mcpServers?: ReadonlyArray<McpServer>;\n  readonly sessionId: string;\n};\nexport const ResumeSessionRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cwd: Schema.String.annotate({ description: \"The working directory for this session.\" }),\n  mcpServers: Schema.optionalKey(\n    Schema.Array(McpServer).annotate({\n      description: \"List of MCP servers to connect to for this session.\",\n    }),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for resuming an existing session.\\n\\nResumes an existing session without returning previous messages (unlike `session/load`).\\nThis is useful for agents that can resume sessions but don't implement full session loading.\\n\\nOnly available if the Agent supports the `session.resume` capability.\",\n});\n\nexport type ResumeSessionResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly configOptions?: ReadonlyArray<SessionConfigOption> | null;\n  readonly models?: SessionModelState | null;\n  readonly modes?: SessionModeState | null;\n};\nexport const ResumeSessionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  configOptions: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(SessionConfigOption).annotate({\n        description: \"Initial session configuration options if supported by the Agent.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  models: Schema.optionalKey(\n    Schema.Union([SessionModelState, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nInitial model state if supported by the Agent\",\n    }),\n  ),\n  modes: Schema.optionalKey(\n    Schema.Union([SessionModeState, Schema.Null]).annotate({\n      description:\n        \"Initial mode state if supported by the Agent\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse from resuming an existing session.\",\n});\n\nexport type SelectedPermissionOutcome = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly optionId: string;\n};\nexport const SelectedPermissionOutcome = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  optionId: Schema.String.annotate({ description: \"Unique identifier for a permission option.\" }),\n}).annotate({ description: \"The user selected one of the provided options.\" });\n\nexport type SessionCapabilities = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly close?: SessionCloseCapabilities | null;\n  readonly fork?: SessionForkCapabilities | null;\n  readonly list?: SessionListCapabilities | null;\n  readonly resume?: SessionResumeCapabilities | null;\n};\nexport const SessionCapabilities = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  close: Schema.optionalKey(\n    Schema.Union([SessionCloseCapabilities, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/close`.\",\n    }),\n  ),\n  fork: Schema.optionalKey(\n    Schema.Union([SessionForkCapabilities, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/fork`.\",\n    }),\n  ),\n  list: Schema.optionalKey(\n    Schema.Union([SessionListCapabilities, Schema.Null]).annotate({\n      description: \"Whether the agent supports `session/list`.\",\n    }),\n  ),\n  resume: Schema.optionalKey(\n    Schema.Union([SessionResumeCapabilities, Schema.Null]).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nWhether the agent supports `session/resume`.\",\n    }),\n  ),\n}).annotate({\n  description:\n    \"Session capabilities supported by the agent.\\n\\nAs a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`.\\n\\nOptionally, they **MAY** support other session methods and notifications by specifying additional capabilities.\\n\\nNote: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol.\\n\\nSee protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities)\",\n});\n\nexport type SessionConfigBoolean = { readonly currentValue: boolean };\nexport const SessionConfigBoolean = Schema.Struct({\n  currentValue: Schema.Boolean.annotate({\n    description: \"The current value of the boolean option.\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA boolean on/off toggle session configuration option payload.\",\n});\n\nexport type SessionConfigGroupId = string;\nexport const SessionConfigGroupId = Schema.String.annotate({\n  description: \"Unique identifier for a session configuration option value group.\",\n});\n\nexport type SessionConfigId = string;\nexport const SessionConfigId = Schema.String.annotate({\n  description: \"Unique identifier for a session configuration option.\",\n});\n\nexport type SessionConfigSelect = {\n  readonly currentValue: string;\n  readonly options:\n    | ReadonlyArray<SessionConfigSelectOption>\n    | ReadonlyArray<SessionConfigSelectGroup>;\n};\nexport const SessionConfigSelect = Schema.Struct({\n  currentValue: Schema.String.annotate({\n    description: \"Unique identifier for a session configuration option value.\",\n  }),\n  options: Schema.Union([\n    Schema.Array(SessionConfigSelectOption).annotate({\n      title: \"Ungrouped\",\n      description: \"A flat list of options with no grouping.\",\n    }),\n    Schema.Array(SessionConfigSelectGroup).annotate({\n      title: \"Grouped\",\n      description: \"A list of options grouped under headers.\",\n    }),\n  ]).annotate({ description: \"Possible values for a session configuration option.\" }),\n}).annotate({\n  description: \"A single-value selector (dropdown) session configuration option payload.\",\n});\n\nexport type SessionConfigSelectOptions =\n  | ReadonlyArray<SessionConfigSelectOption>\n  | ReadonlyArray<SessionConfigSelectGroup>;\nexport const SessionConfigSelectOptions = Schema.Union([\n  Schema.Array(SessionConfigSelectOption).annotate({\n    title: \"Ungrouped\",\n    description: \"A flat list of options with no grouping.\",\n  }),\n  Schema.Array(SessionConfigSelectGroup).annotate({\n    title: \"Grouped\",\n    description: \"A list of options grouped under headers.\",\n  }),\n]).annotate({ description: \"Possible values for a session configuration option.\" });\n\nexport type SessionConfigValueId = string;\nexport const SessionConfigValueId = Schema.String.annotate({\n  description: \"Unique identifier for a session configuration option value.\",\n});\n\nexport type SessionId = string;\nexport const SessionId = Schema.String.annotate({\n  description:\n    \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n});\n\nexport type SessionInfoUpdate = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly title?: string | null;\n  readonly updatedAt?: string | null;\n};\nexport const SessionInfoUpdate = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"Human-readable title for the session. Set to null to clear.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  updatedAt: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"ISO 8601 timestamp of last activity. Set to null to clear.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"Update to session metadata. All fields are optional to support partial updates.\\n\\nAgents send this notification to update session information like title or custom metadata.\\nThis allows clients to display dynamic session names and track session state changes.\",\n});\n\nexport type SessionNotification = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n  readonly update:\n    | {\n        readonly sessionUpdate: \"user_message_chunk\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly content:\n          | {\n              readonly type: \"text\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly text: string;\n            }\n          | {\n              readonly type: \"image\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly data: string;\n              readonly mimeType: string;\n              readonly uri?: string | null;\n            }\n          | {\n              readonly type: \"audio\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly data: string;\n              readonly mimeType: string;\n            }\n          | {\n              readonly type: \"resource_link\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly description?: string | null;\n              readonly mimeType?: string | null;\n              readonly name: string;\n              readonly size?: number | null;\n              readonly title?: string | null;\n              readonly uri: string;\n            }\n          | {\n              readonly type: \"resource\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly resource: EmbeddedResourceResource;\n            };\n        readonly messageId?: string | null;\n      }\n    | {\n        readonly sessionUpdate: \"agent_message_chunk\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly content:\n          | {\n              readonly type: \"text\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly text: string;\n            }\n          | {\n              readonly type: \"image\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly data: string;\n              readonly mimeType: string;\n              readonly uri?: string | null;\n            }\n          | {\n              readonly type: \"audio\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly data: string;\n              readonly mimeType: string;\n            }\n          | {\n              readonly type: \"resource_link\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly description?: string | null;\n              readonly mimeType?: string | null;\n              readonly name: string;\n              readonly size?: number | null;\n              readonly title?: string | null;\n              readonly uri: string;\n            }\n          | {\n              readonly type: \"resource\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly resource: EmbeddedResourceResource;\n            };\n        readonly messageId?: string | null;\n      }\n    | {\n        readonly sessionUpdate: \"agent_thought_chunk\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly content:\n          | {\n              readonly type: \"text\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly text: string;\n            }\n          | {\n              readonly type: \"image\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly data: string;\n              readonly mimeType: string;\n              readonly uri?: string | null;\n            }\n          | {\n              readonly type: \"audio\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly data: string;\n              readonly mimeType: string;\n            }\n          | {\n              readonly type: \"resource_link\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly description?: string | null;\n              readonly mimeType?: string | null;\n              readonly name: string;\n              readonly size?: number | null;\n              readonly title?: string | null;\n              readonly uri: string;\n            }\n          | {\n              readonly type: \"resource\";\n              readonly _meta?: { readonly [x: string]: unknown } | null;\n              readonly annotations?: Annotations | null;\n              readonly resource: EmbeddedResourceResource;\n            };\n        readonly messageId?: string | null;\n      }\n    | {\n        readonly sessionUpdate: \"tool_call\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly content?: ReadonlyArray<ToolCallContent>;\n        readonly kind?:\n          | \"read\"\n          | \"edit\"\n          | \"delete\"\n          | \"move\"\n          | \"search\"\n          | \"execute\"\n          | \"think\"\n          | \"fetch\"\n          | \"switch_mode\"\n          | \"other\";\n        readonly locations?: ReadonlyArray<ToolCallLocation>;\n        readonly rawInput?: unknown;\n        readonly rawOutput?: unknown;\n        readonly status?: \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n        readonly title: string;\n        readonly toolCallId: string;\n      }\n    | {\n        readonly sessionUpdate: \"tool_call_update\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly content?: ReadonlyArray<ToolCallContent> | null;\n        readonly kind?: ToolKind | null;\n        readonly locations?: ReadonlyArray<ToolCallLocation> | null;\n        readonly rawInput?: unknown;\n        readonly rawOutput?: unknown;\n        readonly status?: ToolCallStatus | null;\n        readonly title?: string | null;\n        readonly toolCallId: string;\n      }\n    | {\n        readonly sessionUpdate: \"plan\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly entries: ReadonlyArray<PlanEntry>;\n      }\n    | {\n        readonly sessionUpdate: \"available_commands_update\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly availableCommands: ReadonlyArray<AvailableCommand>;\n      }\n    | {\n        readonly sessionUpdate: \"current_mode_update\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly currentModeId: string;\n      }\n    | {\n        readonly sessionUpdate: \"config_option_update\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly configOptions: ReadonlyArray<SessionConfigOption>;\n      }\n    | {\n        readonly sessionUpdate: \"session_info_update\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly title?: string | null;\n        readonly updatedAt?: string | null;\n      }\n    | {\n        readonly sessionUpdate: \"usage_update\";\n        readonly _meta?: { readonly [x: string]: unknown } | null;\n        readonly cost?: Cost | null;\n        readonly size: number;\n        readonly used: number;\n      };\n};\nexport const SessionNotification = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  update: Schema.Union(\n    [\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"user_message_chunk\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        content: Schema.Union(\n          [\n            Schema.Struct({\n              type: Schema.Literal(\"text\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              text: Schema.String,\n            }).annotate({ description: \"Text provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"image\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              data: Schema.String,\n              mimeType: Schema.String,\n              uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            }).annotate({ description: \"An image provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"audio\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              data: Schema.String,\n              mimeType: Schema.String,\n            }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"resource_link\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              name: Schema.String,\n              size: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                  Schema.Null,\n                ]),\n              ),\n              title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              uri: Schema.String,\n            }).annotate({\n              description:\n                \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n            }),\n            Schema.Struct({\n              type: Schema.Literal(\"resource\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              resource: EmbeddedResourceResource,\n            }).annotate({\n              description:\n                \"The contents of a resource, embedded into a prompt or tool call result.\",\n            }),\n          ],\n          { mode: \"oneOf\" },\n        ).annotate({\n          description:\n            \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n        }),\n        messageId: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({ description: \"A streamed item of content\" }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"agent_message_chunk\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        content: Schema.Union(\n          [\n            Schema.Struct({\n              type: Schema.Literal(\"text\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              text: Schema.String,\n            }).annotate({ description: \"Text provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"image\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              data: Schema.String,\n              mimeType: Schema.String,\n              uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            }).annotate({ description: \"An image provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"audio\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              data: Schema.String,\n              mimeType: Schema.String,\n            }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"resource_link\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              name: Schema.String,\n              size: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                  Schema.Null,\n                ]),\n              ),\n              title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              uri: Schema.String,\n            }).annotate({\n              description:\n                \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n            }),\n            Schema.Struct({\n              type: Schema.Literal(\"resource\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              resource: EmbeddedResourceResource,\n            }).annotate({\n              description:\n                \"The contents of a resource, embedded into a prompt or tool call result.\",\n            }),\n          ],\n          { mode: \"oneOf\" },\n        ).annotate({\n          description:\n            \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n        }),\n        messageId: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({ description: \"A streamed item of content\" }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"agent_thought_chunk\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        content: Schema.Union(\n          [\n            Schema.Struct({\n              type: Schema.Literal(\"text\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              text: Schema.String,\n            }).annotate({ description: \"Text provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"image\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              data: Schema.String,\n              mimeType: Schema.String,\n              uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            }).annotate({ description: \"An image provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"audio\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              data: Schema.String,\n              mimeType: Schema.String,\n            }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n            Schema.Struct({\n              type: Schema.Literal(\"resource_link\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              name: Schema.String,\n              size: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                  Schema.Null,\n                ]),\n              ),\n              title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n              uri: Schema.String,\n            }).annotate({\n              description:\n                \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n            }),\n            Schema.Struct({\n              type: Schema.Literal(\"resource\"),\n              _meta: Schema.optionalKey(\n                Schema.Union([\n                  Schema.Record(Schema.String, Schema.Unknown).annotate({\n                    description:\n                      \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                  }),\n                  Schema.Null,\n                ]),\n              ),\n              annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n              resource: EmbeddedResourceResource,\n            }).annotate({\n              description:\n                \"The contents of a resource, embedded into a prompt or tool call result.\",\n            }),\n          ],\n          { mode: \"oneOf\" },\n        ).annotate({\n          description:\n            \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n        }),\n        messageId: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description:\n                \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({ description: \"A streamed item of content\" }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"tool_call\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        content: Schema.optionalKey(\n          Schema.Array(ToolCallContent).annotate({\n            description: \"Content produced by the tool call.\",\n          }),\n        ),\n        kind: Schema.optionalKey(\n          Schema.Literals([\n            \"read\",\n            \"edit\",\n            \"delete\",\n            \"move\",\n            \"search\",\n            \"execute\",\n            \"think\",\n            \"fetch\",\n            \"switch_mode\",\n            \"other\",\n          ]).annotate({\n            description:\n              \"Categories of tools that can be invoked.\\n\\nTool kinds help clients choose appropriate icons and optimize how they\\ndisplay tool execution progress.\\n\\nSee protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)\",\n          }),\n        ),\n        locations: Schema.optionalKey(\n          Schema.Array(ToolCallLocation).annotate({\n            description:\n              'File locations affected by this tool call.\\nEnables \"follow-along\" features in clients.',\n          }),\n        ),\n        rawInput: Schema.optionalKey(\n          Schema.Unknown.annotate({ description: \"Raw input parameters sent to the tool.\" }),\n        ),\n        rawOutput: Schema.optionalKey(\n          Schema.Unknown.annotate({ description: \"Raw output returned by the tool.\" }),\n        ),\n        status: Schema.optionalKey(\n          Schema.Literals([\"pending\", \"in_progress\", \"completed\", \"failed\"]).annotate({\n            description:\n              \"Execution status of a tool call.\\n\\nTool calls progress through different statuses during their lifecycle.\\n\\nSee protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status)\",\n          }),\n        ),\n        title: Schema.String.annotate({\n          description: \"Human-readable title describing what the tool is doing.\",\n        }),\n        toolCallId: Schema.String.annotate({\n          description: \"Unique identifier for a tool call within a session.\",\n        }),\n      }).annotate({\n        description:\n          \"Represents a tool call that the language model has requested.\\n\\nTool calls are actions that the agent executes on behalf of the language model,\\nsuch as reading files, executing code, or fetching data from external sources.\\n\\nSee protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls)\",\n      }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"tool_call_update\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        content: Schema.optionalKey(\n          Schema.Union([\n            Schema.Array(ToolCallContent).annotate({\n              description: \"Replace the content collection.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        kind: Schema.optionalKey(\n          Schema.Union([ToolKind, Schema.Null]).annotate({ description: \"Update the tool kind.\" }),\n        ),\n        locations: Schema.optionalKey(\n          Schema.Union([\n            Schema.Array(ToolCallLocation).annotate({\n              description: \"Replace the locations collection.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        rawInput: Schema.optionalKey(\n          Schema.Unknown.annotate({ description: \"Update the raw input.\" }),\n        ),\n        rawOutput: Schema.optionalKey(\n          Schema.Unknown.annotate({ description: \"Update the raw output.\" }),\n        ),\n        status: Schema.optionalKey(\n          Schema.Union([ToolCallStatus, Schema.Null]).annotate({\n            description: \"Update the execution status.\",\n          }),\n        ),\n        title: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({ description: \"Update the human-readable title.\" }),\n            Schema.Null,\n          ]),\n        ),\n        toolCallId: Schema.String.annotate({\n          description: \"Unique identifier for a tool call within a session.\",\n        }),\n      }).annotate({\n        description:\n          \"An update to an existing tool call.\\n\\nUsed to report progress and results as tools execute. All fields except\\nthe tool call ID are optional - only changed fields need to be included.\\n\\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)\",\n      }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"plan\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        entries: Schema.Array(PlanEntry).annotate({\n          description:\n            \"The list of tasks to be accomplished.\\n\\nWhen updating a plan, the agent must send a complete list of all entries\\nwith their current status. The client replaces the entire plan with each update.\",\n        }),\n      }).annotate({\n        description:\n          \"An execution plan for accomplishing complex tasks.\\n\\nPlans consist of multiple entries representing individual tasks or goals.\\nAgents report plans to clients to provide visibility into their execution strategy.\\nPlans can evolve during execution as the agent discovers new requirements or completes tasks.\\n\\nSee protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)\",\n      }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"available_commands_update\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        availableCommands: Schema.Array(AvailableCommand).annotate({\n          description: \"Commands the agent can execute\",\n        }),\n      }).annotate({ description: \"Available commands are ready or have changed\" }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"current_mode_update\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        currentModeId: Schema.String.annotate({\n          description: \"Unique identifier for a Session Mode.\",\n        }),\n      }).annotate({\n        description:\n          \"The current mode of the session has changed\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n      }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"config_option_update\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        configOptions: Schema.Array(SessionConfigOption).annotate({\n          description: \"The full set of configuration options and their current values.\",\n        }),\n      }).annotate({ description: \"Session configuration options have been updated.\" }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"session_info_update\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        title: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description: \"Human-readable title for the session. Set to null to clear.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        updatedAt: Schema.optionalKey(\n          Schema.Union([\n            Schema.String.annotate({\n              description: \"ISO 8601 timestamp of last activity. Set to null to clear.\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n      }).annotate({\n        description:\n          \"Update to session metadata. All fields are optional to support partial updates.\\n\\nAgents send this notification to update session information like title or custom metadata.\\nThis allows clients to display dynamic session names and track session state changes.\",\n      }),\n      Schema.Struct({\n        sessionUpdate: Schema.Literal(\"usage_update\"),\n        _meta: Schema.optionalKey(\n          Schema.Union([\n            Schema.Record(Schema.String, Schema.Unknown).annotate({\n              description:\n                \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n            }),\n            Schema.Null,\n          ]),\n        ),\n        cost: Schema.optionalKey(\n          Schema.Union([Cost, Schema.Null]).annotate({\n            description: \"Cumulative session cost (optional).\",\n          }),\n        ),\n        size: Schema.Number.annotate({\n          description: \"Total context window size in tokens.\",\n          format: \"uint64\",\n        })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n        used: Schema.Number.annotate({\n          description: \"Tokens currently in context.\",\n          format: \"uint64\",\n        })\n          .check(Schema.isInt())\n          .check(Schema.isGreaterThanOrEqualTo(0)),\n      }).annotate({\n        description:\n          \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nContext window and cost update for a session.\",\n      }),\n    ],\n    { mode: \"oneOf\" },\n  ).annotate({\n    description:\n      \"Different types of updates that can be sent during session processing.\\n\\nThese updates provide real-time feedback about the agent's progress.\\n\\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)\",\n  }),\n}).annotate({\n  description:\n    \"Notification containing a session update from the agent.\\n\\nUsed to stream real-time progress and results during prompt processing.\\n\\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)\",\n});\n\nexport type SessionUpdate =\n  | {\n      readonly sessionUpdate: \"user_message_chunk\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly content:\n        | {\n            readonly type: \"text\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly text: string;\n          }\n        | {\n            readonly type: \"image\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n            readonly uri?: string | null;\n          }\n        | {\n            readonly type: \"audio\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n          }\n        | {\n            readonly type: \"resource_link\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly description?: string | null;\n            readonly mimeType?: string | null;\n            readonly name: string;\n            readonly size?: number | null;\n            readonly title?: string | null;\n            readonly uri: string;\n          }\n        | {\n            readonly type: \"resource\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly resource: EmbeddedResourceResource;\n          };\n      readonly messageId?: string | null;\n    }\n  | {\n      readonly sessionUpdate: \"agent_message_chunk\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly content:\n        | {\n            readonly type: \"text\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly text: string;\n          }\n        | {\n            readonly type: \"image\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n            readonly uri?: string | null;\n          }\n        | {\n            readonly type: \"audio\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n          }\n        | {\n            readonly type: \"resource_link\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly description?: string | null;\n            readonly mimeType?: string | null;\n            readonly name: string;\n            readonly size?: number | null;\n            readonly title?: string | null;\n            readonly uri: string;\n          }\n        | {\n            readonly type: \"resource\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly resource: EmbeddedResourceResource;\n          };\n      readonly messageId?: string | null;\n    }\n  | {\n      readonly sessionUpdate: \"agent_thought_chunk\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly content:\n        | {\n            readonly type: \"text\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly text: string;\n          }\n        | {\n            readonly type: \"image\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n            readonly uri?: string | null;\n          }\n        | {\n            readonly type: \"audio\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly data: string;\n            readonly mimeType: string;\n          }\n        | {\n            readonly type: \"resource_link\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly description?: string | null;\n            readonly mimeType?: string | null;\n            readonly name: string;\n            readonly size?: number | null;\n            readonly title?: string | null;\n            readonly uri: string;\n          }\n        | {\n            readonly type: \"resource\";\n            readonly _meta?: { readonly [x: string]: unknown } | null;\n            readonly annotations?: Annotations | null;\n            readonly resource: EmbeddedResourceResource;\n          };\n      readonly messageId?: string | null;\n    }\n  | {\n      readonly sessionUpdate: \"tool_call\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly content?: ReadonlyArray<ToolCallContent>;\n      readonly kind?:\n        | \"read\"\n        | \"edit\"\n        | \"delete\"\n        | \"move\"\n        | \"search\"\n        | \"execute\"\n        | \"think\"\n        | \"fetch\"\n        | \"switch_mode\"\n        | \"other\";\n      readonly locations?: ReadonlyArray<ToolCallLocation>;\n      readonly rawInput?: unknown;\n      readonly rawOutput?: unknown;\n      readonly status?: \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n      readonly title: string;\n      readonly toolCallId: string;\n    }\n  | {\n      readonly sessionUpdate: \"tool_call_update\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly content?: ReadonlyArray<ToolCallContent> | null;\n      readonly kind?: ToolKind | null;\n      readonly locations?: ReadonlyArray<ToolCallLocation> | null;\n      readonly rawInput?: unknown;\n      readonly rawOutput?: unknown;\n      readonly status?: ToolCallStatus | null;\n      readonly title?: string | null;\n      readonly toolCallId: string;\n    }\n  | {\n      readonly sessionUpdate: \"plan\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly entries: ReadonlyArray<PlanEntry>;\n    }\n  | {\n      readonly sessionUpdate: \"available_commands_update\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly availableCommands: ReadonlyArray<AvailableCommand>;\n    }\n  | {\n      readonly sessionUpdate: \"current_mode_update\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly currentModeId: string;\n    }\n  | {\n      readonly sessionUpdate: \"config_option_update\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly configOptions: ReadonlyArray<SessionConfigOption>;\n    }\n  | {\n      readonly sessionUpdate: \"session_info_update\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly title?: string | null;\n      readonly updatedAt?: string | null;\n    }\n  | {\n      readonly sessionUpdate: \"usage_update\";\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly cost?: Cost | null;\n      readonly size: number;\n      readonly used: number;\n    };\nexport const SessionUpdate = Schema.Union(\n  [\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"user_message_chunk\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      content: Schema.Union(\n        [\n          Schema.Struct({\n            type: Schema.Literal(\"text\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            text: Schema.String,\n          }).annotate({ description: \"Text provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"image\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n            uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n          }).annotate({ description: \"An image provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"audio\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n          }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource_link\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            name: Schema.String,\n            size: Schema.optionalKey(\n              Schema.Union([\n                Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                Schema.Null,\n              ]),\n            ),\n            title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            uri: Schema.String,\n          }).annotate({\n            description:\n              \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n          }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            resource: EmbeddedResourceResource,\n          }).annotate({\n            description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n          }),\n        ],\n        { mode: \"oneOf\" },\n      ).annotate({\n        description:\n          \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n      }),\n      messageId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ description: \"A streamed item of content\" }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"agent_message_chunk\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      content: Schema.Union(\n        [\n          Schema.Struct({\n            type: Schema.Literal(\"text\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            text: Schema.String,\n          }).annotate({ description: \"Text provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"image\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n            uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n          }).annotate({ description: \"An image provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"audio\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n          }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource_link\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            name: Schema.String,\n            size: Schema.optionalKey(\n              Schema.Union([\n                Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                Schema.Null,\n              ]),\n            ),\n            title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            uri: Schema.String,\n          }).annotate({\n            description:\n              \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n          }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            resource: EmbeddedResourceResource,\n          }).annotate({\n            description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n          }),\n        ],\n        { mode: \"oneOf\" },\n      ).annotate({\n        description:\n          \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n      }),\n      messageId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ description: \"A streamed item of content\" }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"agent_thought_chunk\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      content: Schema.Union(\n        [\n          Schema.Struct({\n            type: Schema.Literal(\"text\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            text: Schema.String,\n          }).annotate({ description: \"Text provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"image\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n            uri: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n          }).annotate({ description: \"An image provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"audio\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            data: Schema.String,\n            mimeType: Schema.String,\n          }).annotate({ description: \"Audio provided to or from an LLM.\" }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource_link\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            description: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            name: Schema.String,\n            size: Schema.optionalKey(\n              Schema.Union([\n                Schema.Number.annotate({ format: \"int64\" }).check(Schema.isInt()),\n                Schema.Null,\n              ]),\n            ),\n            title: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n            uri: Schema.String,\n          }).annotate({\n            description:\n              \"A resource that the server is capable of reading, included in a prompt or tool call result.\",\n          }),\n          Schema.Struct({\n            type: Schema.Literal(\"resource\"),\n            _meta: Schema.optionalKey(\n              Schema.Union([\n                Schema.Record(Schema.String, Schema.Unknown).annotate({\n                  description:\n                    \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n                }),\n                Schema.Null,\n              ]),\n            ),\n            annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n            resource: EmbeddedResourceResource,\n          }).annotate({\n            description: \"The contents of a resource, embedded into a prompt or tool call result.\",\n          }),\n        ],\n        { mode: \"oneOf\" },\n      ).annotate({\n        description:\n          \"Content blocks represent displayable information in the Agent Client Protocol.\\n\\nThey provide a structured way to handle various types of user-facing content—whether\\nit's text from language models, images for analysis, or embedded resources for context.\\n\\nContent blocks appear in:\\n- User prompts sent via `session/prompt`\\n- Language model output streamed through `session/update` notifications\\n- Progress updates and results from tool calls\\n\\nThis structure is compatible with the Model Context Protocol (MCP), enabling\\nagents to seamlessly forward content from MCP tool outputs without transformation.\\n\\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)\",\n      }),\n      messageId: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description:\n              \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for the message this chunk belongs to.\\n\\nAll chunks belonging to the same message share the same `messageId`.\\nA change in `messageId` indicates a new message has started.\\nBoth clients and agents MUST use UUID format for message IDs.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({ description: \"A streamed item of content\" }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"tool_call\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      content: Schema.optionalKey(\n        Schema.Array(ToolCallContent).annotate({\n          description: \"Content produced by the tool call.\",\n        }),\n      ),\n      kind: Schema.optionalKey(\n        Schema.Literals([\n          \"read\",\n          \"edit\",\n          \"delete\",\n          \"move\",\n          \"search\",\n          \"execute\",\n          \"think\",\n          \"fetch\",\n          \"switch_mode\",\n          \"other\",\n        ]).annotate({\n          description:\n            \"Categories of tools that can be invoked.\\n\\nTool kinds help clients choose appropriate icons and optimize how they\\ndisplay tool execution progress.\\n\\nSee protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)\",\n        }),\n      ),\n      locations: Schema.optionalKey(\n        Schema.Array(ToolCallLocation).annotate({\n          description:\n            'File locations affected by this tool call.\\nEnables \"follow-along\" features in clients.',\n        }),\n      ),\n      rawInput: Schema.optionalKey(\n        Schema.Unknown.annotate({ description: \"Raw input parameters sent to the tool.\" }),\n      ),\n      rawOutput: Schema.optionalKey(\n        Schema.Unknown.annotate({ description: \"Raw output returned by the tool.\" }),\n      ),\n      status: Schema.optionalKey(\n        Schema.Literals([\"pending\", \"in_progress\", \"completed\", \"failed\"]).annotate({\n          description:\n            \"Execution status of a tool call.\\n\\nTool calls progress through different statuses during their lifecycle.\\n\\nSee protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status)\",\n        }),\n      ),\n      title: Schema.String.annotate({\n        description: \"Human-readable title describing what the tool is doing.\",\n      }),\n      toolCallId: Schema.String.annotate({\n        description: \"Unique identifier for a tool call within a session.\",\n      }),\n    }).annotate({\n      description:\n        \"Represents a tool call that the language model has requested.\\n\\nTool calls are actions that the agent executes on behalf of the language model,\\nsuch as reading files, executing code, or fetching data from external sources.\\n\\nSee protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls)\",\n    }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"tool_call_update\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      content: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(ToolCallContent).annotate({\n            description: \"Replace the content collection.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      kind: Schema.optionalKey(\n        Schema.Union([ToolKind, Schema.Null]).annotate({ description: \"Update the tool kind.\" }),\n      ),\n      locations: Schema.optionalKey(\n        Schema.Union([\n          Schema.Array(ToolCallLocation).annotate({\n            description: \"Replace the locations collection.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      rawInput: Schema.optionalKey(\n        Schema.Unknown.annotate({ description: \"Update the raw input.\" }),\n      ),\n      rawOutput: Schema.optionalKey(\n        Schema.Unknown.annotate({ description: \"Update the raw output.\" }),\n      ),\n      status: Schema.optionalKey(\n        Schema.Union([ToolCallStatus, Schema.Null]).annotate({\n          description: \"Update the execution status.\",\n        }),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({ description: \"Update the human-readable title.\" }),\n          Schema.Null,\n        ]),\n      ),\n      toolCallId: Schema.String.annotate({\n        description: \"Unique identifier for a tool call within a session.\",\n      }),\n    }).annotate({\n      description:\n        \"An update to an existing tool call.\\n\\nUsed to report progress and results as tools execute. All fields except\\nthe tool call ID are optional - only changed fields need to be included.\\n\\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)\",\n    }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"plan\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      entries: Schema.Array(PlanEntry).annotate({\n        description:\n          \"The list of tasks to be accomplished.\\n\\nWhen updating a plan, the agent must send a complete list of all entries\\nwith their current status. The client replaces the entire plan with each update.\",\n      }),\n    }).annotate({\n      description:\n        \"An execution plan for accomplishing complex tasks.\\n\\nPlans consist of multiple entries representing individual tasks or goals.\\nAgents report plans to clients to provide visibility into their execution strategy.\\nPlans can evolve during execution as the agent discovers new requirements or completes tasks.\\n\\nSee protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)\",\n    }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"available_commands_update\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      availableCommands: Schema.Array(AvailableCommand).annotate({\n        description: \"Commands the agent can execute\",\n      }),\n    }).annotate({ description: \"Available commands are ready or have changed\" }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"current_mode_update\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      currentModeId: Schema.String.annotate({\n        description: \"Unique identifier for a Session Mode.\",\n      }),\n    }).annotate({\n      description:\n        \"The current mode of the session has changed\\n\\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)\",\n    }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"config_option_update\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      configOptions: Schema.Array(SessionConfigOption).annotate({\n        description: \"The full set of configuration options and their current values.\",\n      }),\n    }).annotate({ description: \"Session configuration options have been updated.\" }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"session_info_update\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      title: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"Human-readable title for the session. Set to null to clear.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      updatedAt: Schema.optionalKey(\n        Schema.Union([\n          Schema.String.annotate({\n            description: \"ISO 8601 timestamp of last activity. Set to null to clear.\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n    }).annotate({\n      description:\n        \"Update to session metadata. All fields are optional to support partial updates.\\n\\nAgents send this notification to update session information like title or custom metadata.\\nThis allows clients to display dynamic session names and track session state changes.\",\n    }),\n    Schema.Struct({\n      sessionUpdate: Schema.Literal(\"usage_update\"),\n      _meta: Schema.optionalKey(\n        Schema.Union([\n          Schema.Record(Schema.String, Schema.Unknown).annotate({\n            description:\n              \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n          }),\n          Schema.Null,\n        ]),\n      ),\n      cost: Schema.optionalKey(\n        Schema.Union([Cost, Schema.Null]).annotate({\n          description: \"Cumulative session cost (optional).\",\n        }),\n      ),\n      size: Schema.Number.annotate({\n        description: \"Total context window size in tokens.\",\n        format: \"uint64\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      used: Schema.Number.annotate({\n        description: \"Tokens currently in context.\",\n        format: \"uint64\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n    }).annotate({\n      description:\n        \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nContext window and cost update for a session.\",\n    }),\n  ],\n  { mode: \"oneOf\" },\n).annotate({\n  description:\n    \"Different types of updates that can be sent during session processing.\\n\\nThese updates provide real-time feedback about the agent's progress.\\n\\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)\",\n});\n\nexport type SetSessionConfigOptionRequest =\n  | {\n      readonly type: \"boolean\";\n      readonly value: boolean;\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly configId: string;\n      readonly sessionId: string;\n    }\n  | {\n      readonly value: string;\n      readonly _meta?: { readonly [x: string]: unknown } | null;\n      readonly configId: string;\n      readonly sessionId: string;\n    };\nexport const SetSessionConfigOptionRequest = Schema.Union([\n  Schema.Struct({\n    type: Schema.Literal(\"boolean\"),\n    value: Schema.Boolean.annotate({ description: \"The boolean value.\" }),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    configId: Schema.String.annotate({\n      description: \"Unique identifier for a session configuration option.\",\n    }),\n    sessionId: Schema.String.annotate({\n      description:\n        \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n    }),\n  }).annotate({ description: \"Request parameters for setting a session configuration option.\" }),\n  Schema.Struct({\n    value: Schema.String.annotate({\n      description: \"Unique identifier for a session configuration option value.\",\n    }),\n    _meta: Schema.optionalKey(\n      Schema.Union([\n        Schema.Record(Schema.String, Schema.Unknown).annotate({\n          description:\n            \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n        }),\n        Schema.Null,\n      ]),\n    ),\n    configId: Schema.String.annotate({\n      description: \"Unique identifier for a session configuration option.\",\n    }),\n    sessionId: Schema.String.annotate({\n      description:\n        \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n    }),\n  }).annotate({\n    title: \"value_id\",\n    description: \"Request parameters for setting a session configuration option.\",\n  }),\n]);\n\nexport type SetSessionConfigOptionResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly configOptions: ReadonlyArray<SessionConfigOption>;\n};\nexport const SetSessionConfigOptionResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  configOptions: Schema.Array(SessionConfigOption).annotate({\n    description: \"The full set of configuration options and their current values.\",\n  }),\n}).annotate({ description: \"Response to `session/set_config_option` method.\" });\n\nexport type SetSessionModelRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly modelId: string;\n  readonly sessionId: string;\n};\nexport const SetSessionModelRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  modelId: Schema.String.annotate({\n    description:\n      \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nA unique identifier for a model.\",\n  }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nRequest parameters for setting a session model.\",\n});\n\nexport type SetSessionModelResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const SetSessionModelResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nResponse to `session/set_model` method.\",\n});\n\nexport type SetSessionModeRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly modeId: string;\n  readonly sessionId: string;\n};\nexport const SetSessionModeRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  modeId: Schema.String.annotate({ description: \"Unique identifier for a Session Mode.\" }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({ description: \"Request parameters for setting a session mode.\" });\n\nexport type SetSessionModeResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const SetSessionModeResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Response to `session/set_mode` method.\" });\n\nexport type StopReason = \"end_turn\" | \"max_tokens\" | \"max_turn_requests\" | \"refusal\" | \"cancelled\";\nexport const StopReason = Schema.Literals([\n  \"end_turn\",\n  \"max_tokens\",\n  \"max_turn_requests\",\n  \"refusal\",\n  \"cancelled\",\n]).annotate({\n  description:\n    \"Reasons why an agent stops processing a prompt turn.\\n\\nSee protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/prompt-turn#stop-reasons)\",\n});\n\nexport type StringPropertySchema = {\n  readonly default?: string | null;\n  readonly description?: string | null;\n  readonly enum?: ReadonlyArray<string> | null;\n  readonly format?: StringFormat | null;\n  readonly maxLength?: number | null;\n  readonly minLength?: number | null;\n  readonly oneOf?: ReadonlyArray<EnumOption> | null;\n  readonly pattern?: string | null;\n  readonly title?: string | null;\n};\nexport const StringPropertySchema = Schema.Struct({\n  default: Schema.optionalKey(\n    Schema.Union([Schema.String.annotate({ description: \"Default value.\" }), Schema.Null]),\n  ),\n  description: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Human-readable description.\" }),\n      Schema.Null,\n    ]),\n  ),\n  enum: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(Schema.String).annotate({\n        description: \"Enum values for untitled single-select enums.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  format: Schema.optionalKey(\n    Schema.Union([StringFormat, Schema.Null]).annotate({ description: \"String format.\" }),\n  ),\n  maxLength: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Maximum string length.\", format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  minLength: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({ description: \"Minimum string length.\", format: \"uint32\" })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  oneOf: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(EnumOption).annotate({\n        description: \"Titled enum options for titled single-select enums.\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  pattern: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Pattern the string must match.\" }),\n      Schema.Null,\n    ]),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Optional title for the property.\" }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({\n  description:\n    'Schema for string properties in an elicitation form.\\n\\nWhen `enum` or `oneOf` is set, this represents a single-select enum\\nwith `\"type\": \"string\"`.',\n});\n\nexport type Terminal = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly terminalId: string;\n};\nexport const Terminal = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  terminalId: Schema.String,\n}).annotate({\n  description:\n    \"Embed a terminal created with `terminal/create` by its id.\\n\\nThe terminal must be added before calling `terminal/release`.\\n\\nSee protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals)\",\n});\n\nexport type TerminalOutputRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n  readonly terminalId: string;\n};\nexport const TerminalOutputRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  terminalId: Schema.String.annotate({ description: \"The ID of the terminal to get output from.\" }),\n}).annotate({ description: \"Request to get the current output and status of a terminal.\" });\n\nexport type TerminalOutputResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly exitStatus?: TerminalExitStatus | null;\n  readonly output: string;\n  readonly truncated: boolean;\n};\nexport const TerminalOutputResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  exitStatus: Schema.optionalKey(\n    Schema.Union([TerminalExitStatus, Schema.Null]).annotate({\n      description: \"Exit status if the command has completed.\",\n    }),\n  ),\n  output: Schema.String.annotate({ description: \"The terminal output captured so far.\" }),\n  truncated: Schema.Boolean.annotate({\n    description: \"Whether the output was truncated due to byte limits.\",\n  }),\n}).annotate({ description: \"Response containing the terminal output and exit status.\" });\n\nexport type TextContent = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly annotations?: Annotations | null;\n  readonly text: string;\n};\nexport const TextContent = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  annotations: Schema.optionalKey(Schema.Union([Annotations, Schema.Null])),\n  text: Schema.String,\n}).annotate({ description: \"Text provided to or from an LLM.\" });\n\nexport type TextResourceContents = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly mimeType?: string | null;\n  readonly text: string;\n  readonly uri: string;\n};\nexport const TextResourceContents = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  mimeType: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n  text: Schema.String,\n  uri: Schema.String,\n}).annotate({ description: \"Text-based resource contents.\" });\n\nexport type TitledMultiSelectItems = { readonly anyOf: ReadonlyArray<EnumOption> };\nexport const TitledMultiSelectItems = Schema.Struct({\n  anyOf: Schema.Array(EnumOption).annotate({ description: \"Titled enum options.\" }),\n}).annotate({ description: \"Items definition for titled multi-select enum properties.\" });\n\nexport type ToolCall = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content?: ReadonlyArray<ToolCallContent>;\n  readonly kind?:\n    | \"read\"\n    | \"edit\"\n    | \"delete\"\n    | \"move\"\n    | \"search\"\n    | \"execute\"\n    | \"think\"\n    | \"fetch\"\n    | \"switch_mode\"\n    | \"other\";\n  readonly locations?: ReadonlyArray<ToolCallLocation>;\n  readonly rawInput?: unknown;\n  readonly rawOutput?: unknown;\n  readonly status?: \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n  readonly title: string;\n  readonly toolCallId: string;\n};\nexport const ToolCall = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.optionalKey(\n    Schema.Array(ToolCallContent).annotate({ description: \"Content produced by the tool call.\" }),\n  ),\n  kind: Schema.optionalKey(\n    Schema.Literals([\n      \"read\",\n      \"edit\",\n      \"delete\",\n      \"move\",\n      \"search\",\n      \"execute\",\n      \"think\",\n      \"fetch\",\n      \"switch_mode\",\n      \"other\",\n    ]).annotate({\n      description:\n        \"Categories of tools that can be invoked.\\n\\nTool kinds help clients choose appropriate icons and optimize how they\\ndisplay tool execution progress.\\n\\nSee protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)\",\n    }),\n  ),\n  locations: Schema.optionalKey(\n    Schema.Array(ToolCallLocation).annotate({\n      description:\n        'File locations affected by this tool call.\\nEnables \"follow-along\" features in clients.',\n    }),\n  ),\n  rawInput: Schema.optionalKey(\n    Schema.Unknown.annotate({ description: \"Raw input parameters sent to the tool.\" }),\n  ),\n  rawOutput: Schema.optionalKey(\n    Schema.Unknown.annotate({ description: \"Raw output returned by the tool.\" }),\n  ),\n  status: Schema.optionalKey(\n    Schema.Literals([\"pending\", \"in_progress\", \"completed\", \"failed\"]).annotate({\n      description:\n        \"Execution status of a tool call.\\n\\nTool calls progress through different statuses during their lifecycle.\\n\\nSee protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status)\",\n    }),\n  ),\n  title: Schema.String.annotate({\n    description: \"Human-readable title describing what the tool is doing.\",\n  }),\n  toolCallId: Schema.String.annotate({\n    description: \"Unique identifier for a tool call within a session.\",\n  }),\n}).annotate({\n  description:\n    \"Represents a tool call that the language model has requested.\\n\\nTool calls are actions that the agent executes on behalf of the language model,\\nsuch as reading files, executing code, or fetching data from external sources.\\n\\nSee protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls)\",\n});\n\nexport type ToolCallId = string;\nexport const ToolCallId = Schema.String.annotate({\n  description: \"Unique identifier for a tool call within a session.\",\n});\n\nexport type ToolCallUpdate = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content?: ReadonlyArray<ToolCallContent> | null;\n  readonly kind?: ToolKind | null;\n  readonly locations?: ReadonlyArray<ToolCallLocation> | null;\n  readonly rawInput?: unknown;\n  readonly rawOutput?: unknown;\n  readonly status?: ToolCallStatus | null;\n  readonly title?: string | null;\n  readonly toolCallId: string;\n};\nexport const ToolCallUpdate = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ToolCallContent).annotate({ description: \"Replace the content collection.\" }),\n      Schema.Null,\n    ]),\n  ),\n  kind: Schema.optionalKey(\n    Schema.Union([ToolKind, Schema.Null]).annotate({ description: \"Update the tool kind.\" }),\n  ),\n  locations: Schema.optionalKey(\n    Schema.Union([\n      Schema.Array(ToolCallLocation).annotate({ description: \"Replace the locations collection.\" }),\n      Schema.Null,\n    ]),\n  ),\n  rawInput: Schema.optionalKey(Schema.Unknown.annotate({ description: \"Update the raw input.\" })),\n  rawOutput: Schema.optionalKey(Schema.Unknown.annotate({ description: \"Update the raw output.\" })),\n  status: Schema.optionalKey(\n    Schema.Union([ToolCallStatus, Schema.Null]).annotate({\n      description: \"Update the execution status.\",\n    }),\n  ),\n  title: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({ description: \"Update the human-readable title.\" }),\n      Schema.Null,\n    ]),\n  ),\n  toolCallId: Schema.String.annotate({\n    description: \"Unique identifier for a tool call within a session.\",\n  }),\n}).annotate({\n  description:\n    \"An update to an existing tool call.\\n\\nUsed to report progress and results as tools execute. All fields except\\nthe tool call ID are optional - only changed fields need to be included.\\n\\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)\",\n});\n\nexport type UnstructuredCommandInput = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly hint: string;\n};\nexport const UnstructuredCommandInput = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  hint: Schema.String.annotate({\n    description: \"A hint to display when the input hasn't been provided yet\",\n  }),\n}).annotate({\n  description: \"All text that was typed after the command name is provided as input.\",\n});\n\nexport type UntitledMultiSelectItems = {\n  readonly enum: ReadonlyArray<string>;\n  readonly type: \"string\";\n};\nexport const UntitledMultiSelectItems = Schema.Struct({\n  enum: Schema.Array(Schema.String).annotate({ description: \"Allowed enum values.\" }),\n  type: Schema.Literal(\"string\").annotate({\n    description: \"Items definition for untitled multi-select enum properties.\",\n  }),\n}).annotate({ description: \"Items definition for untitled multi-select enum properties.\" });\n\nexport type UsageUpdate = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly cost?: Cost | null;\n  readonly size: number;\n  readonly used: number;\n};\nexport const UsageUpdate = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  cost: Schema.optionalKey(\n    Schema.Union([Cost, Schema.Null]).annotate({\n      description: \"Cumulative session cost (optional).\",\n    }),\n  ),\n  size: Schema.Number.annotate({\n    description: \"Total context window size in tokens.\",\n    format: \"uint64\",\n  })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n  used: Schema.Number.annotate({ description: \"Tokens currently in context.\", format: \"uint64\" })\n    .check(Schema.isInt())\n    .check(Schema.isGreaterThanOrEqualTo(0)),\n}).annotate({\n  description:\n    \"**UNSTABLE**\\n\\nThis capability is not part of the spec yet, and may be removed or changed at any point.\\n\\nContext window and cost update for a session.\",\n});\n\nexport type WaitForTerminalExitRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly sessionId: string;\n  readonly terminalId: string;\n};\nexport const WaitForTerminalExitRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n  terminalId: Schema.String.annotate({ description: \"The ID of the terminal to wait for.\" }),\n}).annotate({ description: \"Request to wait for a terminal command to exit.\" });\n\nexport type WaitForTerminalExitResponse = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly exitCode?: number | null;\n  readonly signal?: string | null;\n};\nexport const WaitForTerminalExitResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  exitCode: Schema.optionalKey(\n    Schema.Union([\n      Schema.Number.annotate({\n        description: \"The process exit code (may be null if terminated by signal).\",\n        format: \"uint32\",\n      })\n        .check(Schema.isInt())\n        .check(Schema.isGreaterThanOrEqualTo(0)),\n      Schema.Null,\n    ]),\n  ),\n  signal: Schema.optionalKey(\n    Schema.Union([\n      Schema.String.annotate({\n        description: \"The signal that terminated the process (may be null if exited normally).\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Response containing the exit status of a terminal command.\" });\n\nexport type WriteTextFileRequest = {\n  readonly _meta?: { readonly [x: string]: unknown } | null;\n  readonly content: string;\n  readonly path: string;\n  readonly sessionId: string;\n};\nexport const WriteTextFileRequest = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n  content: Schema.String.annotate({ description: \"The text content to write to the file.\" }),\n  path: Schema.String.annotate({ description: \"Absolute path to the file to write.\" }),\n  sessionId: Schema.String.annotate({\n    description:\n      \"A unique identifier for a conversation session between a client and agent.\\n\\nSessions maintain their own context, conversation history, and state,\\nallowing multiple independent interactions with the same agent.\\n\\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)\",\n  }),\n}).annotate({\n  description:\n    \"Request to write content to a text file.\\n\\nOnly available if the client supports the `fs.writeTextFile` capability.\",\n});\n\nexport type WriteTextFileResponse = { readonly _meta?: { readonly [x: string]: unknown } | null };\nexport const WriteTextFileResponse = Schema.Struct({\n  _meta: Schema.optionalKey(\n    Schema.Union([\n      Schema.Record(Schema.String, Schema.Unknown).annotate({\n        description:\n          \"The _meta property is reserved by ACP to allow clients and agents to attach additional\\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\\nthese keys.\\n\\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)\",\n      }),\n      Schema.Null,\n    ]),\n  ),\n}).annotate({ description: \"Response to `fs/write_text_file`\" });\n","// This file is generated by the effect-acp package. Do not edit manually.\n// Current ACP schema release: v0.11.3\n\nexport const AGENT_METHODS = {\n  authenticate: \"authenticate\",\n  initialize: \"initialize\",\n  logout: \"logout\",\n  session_cancel: \"session/cancel\",\n  session_close: \"session/close\",\n  session_fork: \"session/fork\",\n  session_list: \"session/list\",\n  session_load: \"session/load\",\n  session_new: \"session/new\",\n  session_prompt: \"session/prompt\",\n  session_resume: \"session/resume\",\n  session_set_config_option: \"session/set_config_option\",\n  session_set_mode: \"session/set_mode\",\n  session_set_model: \"session/set_model\",\n} as const;\n\nexport const CLIENT_METHODS = {\n  fs_read_text_file: \"fs/read_text_file\",\n  fs_write_text_file: \"fs/write_text_file\",\n  session_elicitation: \"session/elicitation\",\n  session_elicitation_complete: \"session/elicitation/complete\",\n  session_request_permission: \"session/request_permission\",\n  session_update: \"session/update\",\n  terminal_create: \"terminal/create\",\n  terminal_kill: \"terminal/kill\",\n  terminal_output: \"terminal/output\",\n  terminal_release: \"terminal/release\",\n  terminal_wait_for_exit: \"terminal/wait_for_exit\",\n} as const;\n\nexport const PROTOCOL_VERSION = 1 as const;\n","/**\n * Public Docs: https://cursor.com/docs/cli/acp#cursor-extension-methods\n * Additional reference provided by the Cursor team: https://anysphere.enterprise.slack.com/files/U068SSJE141/F0APT1HSZRP/cursor-acp-extension-method-schemas.md\n */\nimport type { UserInputQuestion } from \"@salchi/contracts\";\nimport * as AcpSchema from \"effect-acp/schema\";\nimport * as Schema from \"effect/Schema\";\n\nconst CursorAskQuestionOption = Schema.Struct({\n  id: Schema.String,\n  label: Schema.String,\n});\n\nconst CursorAskQuestion = Schema.Struct({\n  id: Schema.String,\n  prompt: Schema.String,\n  options: Schema.Array(CursorAskQuestionOption),\n  allowMultiple: Schema.optional(Schema.Boolean),\n});\n\nexport const CursorAskQuestionRequest = Schema.Struct({\n  toolCallId: Schema.String,\n  title: Schema.optional(Schema.String),\n  questions: Schema.Array(CursorAskQuestion),\n});\n\nconst CursorTodoStatus = Schema.String;\n\nconst CursorTodo = Schema.Struct({\n  id: Schema.optional(Schema.String),\n  content: Schema.optional(Schema.String),\n  title: Schema.optional(Schema.String),\n  status: Schema.optional(CursorTodoStatus),\n});\n\nconst CursorPlanPhase = Schema.Struct({\n  name: Schema.String,\n  todos: Schema.Array(CursorTodo),\n});\n\nexport const CursorCreatePlanRequest = Schema.Struct({\n  toolCallId: Schema.String,\n  name: Schema.optional(Schema.String),\n  overview: Schema.optional(Schema.String),\n  plan: Schema.String,\n  todos: Schema.Array(CursorTodo),\n  isProject: Schema.optional(Schema.Boolean),\n  phases: Schema.optional(Schema.Array(CursorPlanPhase)),\n});\n\nexport const CursorUpdateTodosRequest = Schema.Struct({\n  toolCallId: Schema.String,\n  todos: Schema.Array(CursorTodo),\n  merge: Schema.Boolean,\n});\n\nconst CursorAvailableModel = Schema.Struct({\n  value: Schema.String,\n  name: Schema.String,\n  configOptions: Schema.optional(Schema.Array(AcpSchema.SessionConfigOption)),\n});\n\nexport const CursorListAvailableModelsResponse = Schema.Struct({\n  models: Schema.Array(CursorAvailableModel),\n});\n\nexport function extractAskQuestions(\n  params: typeof CursorAskQuestionRequest.Type,\n): ReadonlyArray<UserInputQuestion> {\n  return params.questions.map((question) => ({\n    id: question.id,\n    header: \"Question\",\n    question: question.prompt,\n    multiSelect: question.allowMultiple === true,\n    options:\n      question.options.length > 0\n        ? question.options.map((option) => ({\n            label: option.label,\n            description: option.label,\n          }))\n        : [{ label: \"OK\", description: \"Continue\" }],\n  }));\n}\n\nexport function extractPlanMarkdown(params: typeof CursorCreatePlanRequest.Type): string {\n  return params.plan || \"# Plan\\n\\n(Cursor did not supply plan text.)\";\n}\n\nexport function extractTodosAsPlan(params: typeof CursorUpdateTodosRequest.Type): {\n  readonly explanation?: string;\n  readonly plan: ReadonlyArray<{\n    readonly step: string;\n    readonly status: \"pending\" | \"inProgress\" | \"completed\";\n  }>;\n} {\n  const plan = params.todos.flatMap((todo) => {\n    const step = todo.content?.trim() ?? todo.title?.trim() ?? \"\";\n    if (step === \"\") {\n      return [];\n    }\n    const status: \"pending\" | \"inProgress\" | \"completed\" =\n      todo.status === \"completed\"\n        ? \"completed\"\n        : todo.status === \"in_progress\" || todo.status === \"inProgress\"\n          ? \"inProgress\"\n          : \"pending\";\n    return [{ step, status }];\n  });\n  return { plan };\n}\n","import * as Schema from \"effect/Schema\";\n\nimport * as AcpSchema from \"./_generated/schema.gen.ts\";\n\nexport class AcpSpawnError extends Schema.TaggedErrorClass<AcpSpawnError>()(\"AcpSpawnError\", {\n  command: Schema.optional(Schema.String),\n  cause: Schema.Defect(),\n}) {\n  override get message() {\n    return this.command\n      ? `Failed to spawn ACP process for command: ${this.command}`\n      : \"Failed to spawn ACP process\";\n  }\n}\n\nexport class AcpProcessExitedError extends Schema.TaggedErrorClass<AcpProcessExitedError>()(\n  \"AcpProcessExitedError\",\n  {\n    code: Schema.optional(Schema.Number),\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message() {\n    return this.code === undefined\n      ? \"ACP process exited\"\n      : `ACP process exited with code ${this.code}`;\n  }\n}\n\nexport class AcpProtocolParseError extends Schema.TaggedErrorClass<AcpProtocolParseError>()(\n  \"AcpProtocolParseError\",\n  {\n    detail: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {\n  override get message() {\n    return `Failed to parse ACP protocol message: ${this.detail}`;\n  }\n}\n\nexport class AcpTransportError extends Schema.TaggedErrorClass<AcpTransportError>()(\n  \"AcpTransportError\",\n  {\n    detail: Schema.String,\n    cause: Schema.Defect(),\n  },\n) {}\n\nexport class AcpRequestError extends Schema.TaggedErrorClass<AcpRequestError>()(\"AcpRequestError\", {\n  code: AcpSchema.ErrorCode,\n  errorMessage: Schema.String,\n  data: Schema.optional(Schema.Unknown),\n}) {\n  override get message() {\n    return this.errorMessage;\n  }\n\n  static fromProtocolError(error: AcpSchema.Error) {\n    return new AcpRequestError({\n      code: error.code,\n      errorMessage: error.message,\n      ...(error.data !== undefined ? { data: error.data } : {}),\n    });\n  }\n\n  static parseError(message = \"Parse error\", data?: unknown) {\n    return new AcpRequestError({\n      code: -32700,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static invalidRequest(message = \"Invalid request\", data?: unknown) {\n    return new AcpRequestError({\n      code: -32600,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static methodNotFound(method: string) {\n    return new AcpRequestError({\n      code: -32601,\n      errorMessage: `Method not found: ${method}`,\n    });\n  }\n\n  static invalidParams(message = \"Invalid params\", data?: unknown) {\n    return new AcpRequestError({\n      code: -32602,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static internalError(message = \"Internal error\", data?: unknown) {\n    return new AcpRequestError({\n      code: -32603,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static authRequired(message = \"Authentication required\", data?: unknown) {\n    return new AcpRequestError({\n      code: -32000,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  static resourceNotFound(message = \"Resource not found\", data?: unknown) {\n    return new AcpRequestError({\n      code: -32002,\n      errorMessage: message,\n      ...(data !== undefined ? { data } : {}),\n    });\n  }\n\n  toProtocolError() {\n    return AcpSchema.Error.make({\n      code: this.code,\n      message: this.errorMessage,\n      ...(this.data !== undefined ? { data: this.data } : {}),\n    });\n  }\n}\n\nexport const AcpError = Schema.Union([\n  AcpRequestError,\n  AcpSpawnError,\n  AcpProcessExitedError,\n  AcpProtocolParseError,\n  AcpTransportError,\n]);\n\nexport type AcpError = typeof AcpError.Type;\n","import * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport * as Stdio from \"effect/Stdio\";\nimport * as RpcClient from \"effect/unstable/rpc/RpcClient\";\nimport * as RpcClientError from \"effect/unstable/rpc/RpcClientError\";\nimport * as RpcMessage from \"effect/unstable/rpc/RpcMessage\";\nimport * as RpcSerialization from \"effect/unstable/rpc/RpcSerialization\";\nimport * as RpcServer from \"effect/unstable/rpc/RpcServer\";\n\nimport * as AcpSchema from \"./_generated/schema.gen.ts\";\nimport { CLIENT_METHODS } from \"./_generated/meta.gen.ts\";\nimport * as AcpError from \"./errors.ts\";\nconst isAcpError = Schema.is(AcpError.AcpError);\nconst isAcpRequestError = Schema.is(AcpError.AcpRequestError);\n\nexport interface AcpProtocolLogEvent {\n  readonly direction: \"incoming\" | \"outgoing\";\n  readonly stage: \"raw\" | \"decoded\" | \"decode_failed\";\n  readonly payload: unknown;\n}\n\nexport type AcpIncomingNotification =\n  | {\n      readonly _tag: \"SessionUpdate\";\n      readonly method: typeof CLIENT_METHODS.session_update;\n      readonly params: AcpSchema.SessionNotification;\n    }\n  | {\n      readonly _tag: \"ElicitationComplete\";\n      readonly method: typeof CLIENT_METHODS.session_elicitation_complete;\n      readonly params: AcpSchema.ElicitationCompleteNotification;\n    }\n  | {\n      readonly _tag: \"ExtNotification\";\n      readonly method: string;\n      readonly params: unknown;\n    };\n\nexport interface AcpPatchedProtocolOptions {\n  readonly stdio: Stdio.Stdio;\n  readonly terminationError?: Effect.Effect<AcpError.AcpError>;\n  readonly serverRequestMethods: ReadonlySet<string>;\n  readonly logIncoming?: boolean;\n  readonly logOutgoing?: boolean;\n  readonly logger?: (event: AcpProtocolLogEvent) => Effect.Effect<void, never>;\n  readonly onNotification?: (\n    notification: AcpIncomingNotification,\n  ) => Effect.Effect<void, AcpError.AcpError, never>;\n  readonly onExtRequest?: (\n    method: string,\n    params: unknown,\n  ) => Effect.Effect<unknown, AcpError.AcpError, never>;\n  readonly onTermination?: (error: AcpError.AcpError) => Effect.Effect<void, never, never>;\n}\n\nexport interface AcpPatchedProtocol {\n  readonly clientProtocol: RpcClient.Protocol[\"Service\"];\n  readonly serverProtocol: RpcServer.Protocol[\"Service\"];\n  readonly incoming: Stream.Stream<AcpIncomingNotification>;\n  readonly request: (method: string, payload: unknown) => Effect.Effect<unknown, AcpError.AcpError>;\n  readonly notify: (method: string, payload: unknown) => Effect.Effect<void, AcpError.AcpError>;\n}\n\nconst decodeSessionUpdate = Schema.decodeUnknownEffect(AcpSchema.SessionNotification);\nconst decodeElicitationComplete = Schema.decodeUnknownEffect(\n  AcpSchema.ElicitationCompleteNotification,\n);\nconst encodeUnknownJsonString = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);\nconst parserFactory = RpcSerialization.ndJsonRpc();\n\nexport const makeAcpPatchedProtocol = Effect.fn(\"makeAcpPatchedProtocol\")(function* (\n  options: AcpPatchedProtocolOptions,\n): Effect.fn.Return<AcpPatchedProtocol, never, Scope.Scope> {\n  const parser = parserFactory.makeUnsafe();\n  const serverQueue = yield* Queue.unbounded<RpcMessage.FromClientEncoded>();\n  const clientQueue = yield* Queue.unbounded<RpcMessage.FromServerEncoded>();\n  const notificationQueue = yield* Queue.unbounded<AcpIncomingNotification>();\n  const disconnects = yield* Queue.unbounded<number>();\n  const outgoing = yield* Queue.unbounded<string | Uint8Array, Cause.Done<void>>();\n  const nextRequestId = yield* Ref.make(1n);\n  const terminationHandled = yield* Ref.make(false);\n  const extPending = yield* Ref.make(\n    new Map<string, Deferred.Deferred<unknown, AcpError.AcpError>>(),\n  );\n\n  const logProtocol = (event: AcpProtocolLogEvent) => {\n    if (event.direction === \"incoming\" && !options.logIncoming) {\n      return Effect.void;\n    }\n    if (event.direction === \"outgoing\" && !options.logOutgoing) {\n      return Effect.void;\n    }\n    return (\n      options.logger?.(event) ??\n      Effect.logDebug(\"ACP protocol event\").pipe(Effect.annotateLogs({ event }))\n    );\n  };\n\n  const offerOutgoing = Effect.fn(\"offerOutgoing\")(function* (\n    message: RpcMessage.FromClientEncoded | RpcMessage.FromServerEncoded,\n  ) {\n    yield* logProtocol({\n      direction: \"outgoing\",\n      stage: \"decoded\",\n      payload: message,\n    });\n\n    const encoded = yield* Effect.try({\n      try: () => parser.encode(message),\n      catch: (cause) =>\n        new AcpError.AcpProtocolParseError({\n          detail: \"Failed to encode ACP message\",\n          cause,\n        }),\n    });\n\n    if (encoded) {\n      yield* logProtocol({\n        direction: \"outgoing\",\n        stage: \"raw\",\n        payload: typeof encoded === \"string\" ? encoded : new TextDecoder().decode(encoded),\n      });\n\n      yield* Queue.offer(outgoing, encoded).pipe(Effect.asVoid);\n    }\n  });\n\n  const resolveExtPending = (\n    requestId: string,\n    onFound: (deferred: Deferred.Deferred<unknown, AcpError.AcpError>) => Effect.Effect<void>,\n  ) =>\n    Ref.modify(extPending, (pending) => {\n      const deferred = pending.get(requestId);\n      if (!deferred) {\n        return [Effect.void, pending] as const;\n      }\n      const next = new Map(pending);\n      next.delete(requestId);\n      return [onFound(deferred), next] as const;\n    }).pipe(Effect.flatten);\n\n  const removeExtPending = (requestId: string) =>\n    Ref.update(extPending, (pending) => {\n      if (!pending.has(requestId)) {\n        return pending;\n      }\n      const next = new Map(pending);\n      next.delete(requestId);\n      return next;\n    });\n\n  const completeExtPendingFailure = (requestId: string, error: AcpError.AcpError) =>\n    resolveExtPending(requestId, (deferred) => Deferred.fail(deferred, error));\n\n  const completeExtPendingSuccess = (requestId: string, value: unknown) =>\n    resolveExtPending(requestId, (deferred) => Deferred.succeed(deferred, value));\n\n  const failAllExtPending = (error: AcpError.AcpError) =>\n    Ref.getAndSet(extPending, new Map()).pipe(\n      Effect.flatMap((pending) =>\n        Effect.forEach([...pending.values()], (deferred) => Deferred.fail(deferred, error), {\n          discard: true,\n        }),\n      ),\n    );\n\n  const dispatchNotification = (notification: AcpIncomingNotification) =>\n    Queue.offer(notificationQueue, notification).pipe(\n      Effect.andThen(\n        options.onNotification\n          ? options.onNotification(notification).pipe(Effect.catch(() => Effect.void))\n          : Effect.void,\n      ),\n      Effect.asVoid,\n    );\n\n  const emitClientProtocolError = (error: AcpError.AcpError) =>\n    Queue.offer(clientQueue, {\n      _tag: \"ClientProtocolError\",\n      error: new RpcClientError.RpcClientError({\n        reason: new RpcClientError.RpcClientDefect({\n          message: error.message,\n          cause: error,\n        }),\n      }),\n    }).pipe(Effect.asVoid);\n\n  const handleTermination = (classify: () => Effect.Effect<AcpError.AcpError | undefined>) =>\n    Ref.modify(terminationHandled, (handled) => {\n      if (handled) {\n        return [Effect.void, true] as const;\n      }\n      return [\n        Effect.gen(function* () {\n          yield* Queue.offer(disconnects, 0);\n          const error = yield* classify();\n          if (!error) {\n            return;\n          }\n          yield* failAllExtPending(error);\n          yield* emitClientProtocolError(error);\n          if (options.onTermination) {\n            yield* options.onTermination(error);\n          }\n        }),\n        true,\n      ] as const;\n    }).pipe(Effect.flatten);\n\n  const respondWithSuccess = (requestId: string | number, value: unknown) =>\n    offerOutgoing({\n      _tag: \"Exit\",\n      requestId,\n      exit: {\n        _tag: \"Success\",\n        value,\n      },\n    });\n\n  const respondWithError = (requestId: string | number, error: AcpError.AcpRequestError) =>\n    offerOutgoing({\n      _tag: \"Exit\",\n      requestId,\n      exit: {\n        _tag: \"Failure\",\n        cause: [\n          {\n            _tag: \"Fail\",\n            error: error.toProtocolError(),\n          },\n        ],\n      },\n    });\n\n  const handleExtRequest = (message: RpcMessage.RequestEncoded) => {\n    if (!options.onExtRequest) {\n      return respondWithError(message.id, AcpError.AcpRequestError.methodNotFound(message.tag));\n    }\n    return options.onExtRequest(message.tag, message.payload).pipe(\n      Effect.matchEffect({\n        onFailure: (error) => respondWithError(message.id, normalizeToRequestError(error)),\n        onSuccess: (value) => respondWithSuccess(message.id, value),\n      }),\n    );\n  };\n\n  const handleRequestEncoded = (message: RpcMessage.RequestEncoded) => {\n    if (message.id === \"\") {\n      if (message.tag === CLIENT_METHODS.session_update) {\n        return decodeSessionUpdate(message.payload).pipe(\n          Effect.map(\n            (params) =>\n              ({\n                _tag: \"SessionUpdate\",\n                method: CLIENT_METHODS.session_update,\n                params,\n              }) satisfies AcpIncomingNotification,\n          ),\n          Effect.mapError(\n            (cause) =>\n              new AcpError.AcpProtocolParseError({\n                detail: `Invalid ${CLIENT_METHODS.session_update} notification payload`,\n                cause,\n              }),\n          ),\n          Effect.flatMap(dispatchNotification),\n        );\n      }\n      if (message.tag === CLIENT_METHODS.session_elicitation_complete) {\n        return decodeElicitationComplete(message.payload).pipe(\n          Effect.map(\n            (params) =>\n              ({\n                _tag: \"ElicitationComplete\",\n                method: CLIENT_METHODS.session_elicitation_complete,\n                params,\n              }) satisfies AcpIncomingNotification,\n          ),\n          Effect.mapError(\n            (cause) =>\n              new AcpError.AcpProtocolParseError({\n                detail: `Invalid ${CLIENT_METHODS.session_elicitation_complete} notification payload`,\n                cause,\n              }),\n          ),\n          Effect.flatMap(dispatchNotification),\n        );\n      }\n      return dispatchNotification({\n        _tag: \"ExtNotification\",\n        method: message.tag,\n        params: message.payload,\n      });\n    }\n\n    if (!options.serverRequestMethods.has(message.tag)) {\n      return handleExtRequest(message).pipe(\n        Effect.catch(() => respondWithError(message.id, AcpError.AcpRequestError.internalError())),\n        Effect.asVoid,\n      );\n    }\n\n    return Queue.offer(serverQueue, message).pipe(Effect.asVoid);\n  };\n\n  const handleExitEncoded = (message: RpcMessage.ResponseExitEncoded) =>\n    Ref.get(extPending).pipe(\n      Effect.flatMap((pending) => {\n        const requestId = String(message.requestId);\n        if (!pending.has(requestId)) {\n          return Queue.offer(clientQueue, message).pipe(Effect.asVoid);\n        }\n        if (message.exit._tag === \"Success\") {\n          return completeExtPendingSuccess(requestId, message.exit.value);\n        }\n        const failure = message.exit.cause.find((entry) => entry._tag === \"Fail\");\n        if (failure && isProtocolError(failure.error)) {\n          return completeExtPendingFailure(\n            requestId,\n            AcpError.AcpRequestError.fromProtocolError(failure.error),\n          );\n        }\n        return completeExtPendingFailure(\n          requestId,\n          AcpError.AcpRequestError.internalError(\"Extension request failed\"),\n        );\n      }),\n    );\n\n  const routeDecodedMessage = (\n    message: RpcMessage.FromClientEncoded | RpcMessage.FromServerEncoded,\n  ): Effect.Effect<void, AcpError.AcpError> => {\n    switch (message._tag) {\n      case \"Request\":\n        return handleRequestEncoded(message);\n      case \"Exit\":\n        return handleExitEncoded(message);\n      case \"Chunk\":\n        return Ref.get(extPending).pipe(\n          Effect.flatMap((pending) =>\n            pending.has(String(message.requestId))\n              ? completeExtPendingFailure(\n                  String(message.requestId),\n                  AcpError.AcpRequestError.internalError(\n                    \"Streaming extension responses are not supported\",\n                  ),\n                )\n              : Queue.offer(clientQueue, message).pipe(Effect.asVoid),\n          ),\n        );\n      case \"Defect\":\n      case \"ClientProtocolError\":\n      case \"Pong\":\n        return Queue.offer(clientQueue, message).pipe(Effect.asVoid);\n      case \"Ack\":\n      case \"Interrupt\":\n      case \"Ping\":\n      case \"Eof\":\n        return Queue.offer(serverQueue, message).pipe(Effect.asVoid);\n    }\n  };\n\n  yield* options.stdio.stdin.pipe(\n    Stream.runForEach((data) =>\n      logProtocol({\n        direction: \"incoming\",\n        stage: \"raw\",\n        payload: typeof data === \"string\" ? data : new TextDecoder().decode(data),\n      }).pipe(\n        Effect.flatMap(() =>\n          Effect.try({\n            try: () =>\n              parser.decode(data) as ReadonlyArray<\n                RpcMessage.FromClientEncoded | RpcMessage.FromServerEncoded\n              >,\n            catch: (cause) =>\n              new AcpError.AcpProtocolParseError({\n                detail: \"Failed to decode ACP wire message\",\n                cause,\n              }),\n          }),\n        ),\n        Effect.tap((messages) =>\n          logProtocol({\n            direction: \"incoming\",\n            stage: \"decoded\",\n            payload: messages,\n          }),\n        ),\n        Effect.tapErrorTag(\"AcpProtocolParseError\", (error) =>\n          logProtocol({\n            direction: \"incoming\",\n            stage: \"decode_failed\",\n            payload: {\n              detail: error.detail,\n              cause: error.cause,\n            },\n          }),\n        ),\n        Effect.flatMap((messages) =>\n          Effect.forEach(messages, routeDecodedMessage, {\n            discard: true,\n          }),\n        ),\n      ),\n    ),\n    Effect.matchEffect({\n      onFailure: (error) => {\n        const normalized: AcpError.AcpError = isAcpError(error)\n          ? error\n          : new AcpError.AcpTransportError({\n              detail: error instanceof Error ? error.message : String(error),\n              cause: error,\n            });\n        return handleTermination(() => Effect.succeed(normalized));\n      },\n      onSuccess: () =>\n        handleTermination(\n          () =>\n            options.terminationError ??\n            Effect.succeed(\n              new AcpError.AcpTransportError({\n                detail: \"ACP input stream ended\",\n                cause: new Error(\"ACP input stream ended\"),\n              }),\n            ),\n        ),\n    }),\n    Effect.forkScoped,\n  );\n\n  yield* Stream.fromQueue(outgoing).pipe(Stream.run(options.stdio.stdout()), Effect.forkScoped);\n\n  const clientProtocol = RpcClient.Protocol.of({\n    run: (_clientId, f) =>\n      Stream.fromQueue(clientQueue).pipe(\n        Stream.runForEach((message) => f(message)),\n        Effect.forever,\n      ),\n    send: (_clientId, request) => offerOutgoing(request).pipe(Effect.mapError(toRpcClientError)),\n    supportsAck: true,\n    supportsTransferables: false,\n  });\n\n  const serverProtocol = RpcServer.Protocol.of({\n    run: (f) =>\n      Stream.fromQueue(serverQueue).pipe(\n        Stream.runForEach((message) => f(0, message)),\n        Effect.forever,\n      ),\n    disconnects,\n    send: (_clientId, response) => offerOutgoing(response).pipe(Effect.orDie),\n    end: (_clientId) => Queue.end(outgoing),\n    clientIds: Effect.succeed(new Set([0])),\n    initialMessage: Effect.succeedNone,\n    supportsAck: true,\n    supportsTransferables: false,\n    supportsSpanPropagation: true,\n  });\n\n  const sendNotification = Effect.fn(\"sendNotification\")(function* (\n    method: string,\n    payload: unknown,\n  ) {\n    yield* logProtocol({\n      direction: \"outgoing\",\n      stage: \"decoded\",\n      payload: {\n        _tag: \"Notification\",\n        method,\n        params: payload,\n      },\n    });\n    const encoded = yield* encodeUnknownJsonString({\n      jsonrpc: \"2.0\",\n      method,\n      params: payload,\n    }).pipe(\n      Effect.map((message) => `${message}\\n`),\n      Effect.mapError(\n        (cause) =>\n          new AcpError.AcpProtocolParseError({\n            detail: \"Failed to encode ACP message\",\n            cause,\n          }),\n      ),\n    );\n    yield* logProtocol({\n      direction: \"outgoing\",\n      stage: \"raw\",\n      payload: encoded,\n    });\n    yield* Queue.offer(outgoing, encoded).pipe(Effect.asVoid);\n  });\n\n  const sendRequest = Effect.fn(\"sendRequest\")(function* (method: string, payload: unknown) {\n    const requestId = yield* Ref.modify(\n      nextRequestId,\n      (current) => [current, current + 1n] as const,\n    );\n    const deferred = yield* Deferred.make<unknown, AcpError.AcpError>();\n    yield* Ref.update(extPending, (pending) => new Map(pending).set(String(requestId), deferred));\n    yield* offerOutgoing({\n      _tag: \"Request\",\n      id: Number(requestId),\n      tag: method,\n      payload,\n      headers: [],\n    }).pipe(\n      Effect.catch((error) =>\n        removeExtPending(String(requestId)).pipe(Effect.andThen(Effect.fail(error))),\n      ),\n    );\n    return yield* Deferred.await(deferred).pipe(\n      Effect.onInterrupt(() => removeExtPending(String(requestId))),\n    );\n  });\n\n  return {\n    clientProtocol,\n    serverProtocol,\n    get incoming() {\n      return Stream.fromQueue(notificationQueue);\n    },\n    request: sendRequest,\n    notify: sendNotification,\n  } satisfies AcpPatchedProtocol;\n});\n\nfunction isProtocolError(\n  value: unknown,\n): value is { code: number; message: string; data?: unknown } {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    \"code\" in value &&\n    typeof value.code === \"number\" &&\n    \"message\" in value &&\n    typeof value.message === \"string\"\n  );\n}\n\nfunction normalizeToRequestError(error: AcpError.AcpError): AcpError.AcpRequestError {\n  return isAcpRequestError(error) ? error : AcpError.AcpRequestError.internalError(error.message);\n}\n\nfunction toRpcClientError(error: AcpError.AcpError): RpcClientError.RpcClientError {\n  return new RpcClientError.RpcClientError({\n    reason: new RpcClientError.RpcClientDefect({\n      message: error.message,\n      cause: error,\n    }),\n  });\n}\n","import * as Rpc from \"effect/unstable/rpc/Rpc\";\nimport * as RpcGroup from \"effect/unstable/rpc/RpcGroup\";\n\nimport * as AcpSchema from \"./_generated/schema.gen.ts\";\nimport { AGENT_METHODS, CLIENT_METHODS } from \"./_generated/meta.gen.ts\";\n\nexport const InitializeRpc = Rpc.make(AGENT_METHODS.initialize, {\n  payload: AcpSchema.InitializeRequest,\n  success: AcpSchema.InitializeResponse,\n  error: AcpSchema.Error,\n});\n\nexport const AuthenticateRpc = Rpc.make(AGENT_METHODS.authenticate, {\n  payload: AcpSchema.AuthenticateRequest,\n  success: AcpSchema.AuthenticateResponse,\n  error: AcpSchema.Error,\n});\n\nexport const LogoutRpc = Rpc.make(AGENT_METHODS.logout, {\n  payload: AcpSchema.LogoutRequest,\n  success: AcpSchema.LogoutResponse,\n  error: AcpSchema.Error,\n});\n\nexport const NewSessionRpc = Rpc.make(AGENT_METHODS.session_new, {\n  payload: AcpSchema.NewSessionRequest,\n  success: AcpSchema.NewSessionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const LoadSessionRpc = Rpc.make(AGENT_METHODS.session_load, {\n  payload: AcpSchema.LoadSessionRequest,\n  success: AcpSchema.LoadSessionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const ListSessionsRpc = Rpc.make(AGENT_METHODS.session_list, {\n  payload: AcpSchema.ListSessionsRequest,\n  success: AcpSchema.ListSessionsResponse,\n  error: AcpSchema.Error,\n});\n\nexport const ForkSessionRpc = Rpc.make(AGENT_METHODS.session_fork, {\n  payload: AcpSchema.ForkSessionRequest,\n  success: AcpSchema.ForkSessionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const ResumeSessionRpc = Rpc.make(AGENT_METHODS.session_resume, {\n  payload: AcpSchema.ResumeSessionRequest,\n  success: AcpSchema.ResumeSessionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const CloseSessionRpc = Rpc.make(AGENT_METHODS.session_close, {\n  payload: AcpSchema.CloseSessionRequest,\n  success: AcpSchema.CloseSessionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const PromptRpc = Rpc.make(AGENT_METHODS.session_prompt, {\n  payload: AcpSchema.PromptRequest,\n  success: AcpSchema.PromptResponse,\n  error: AcpSchema.Error,\n});\n\nexport const SetSessionModelRpc = Rpc.make(AGENT_METHODS.session_set_model, {\n  payload: AcpSchema.SetSessionModelRequest,\n  success: AcpSchema.SetSessionModelResponse,\n  error: AcpSchema.Error,\n});\n\nexport const SetSessionConfigOptionRpc = Rpc.make(AGENT_METHODS.session_set_config_option, {\n  payload: AcpSchema.SetSessionConfigOptionRequest,\n  success: AcpSchema.SetSessionConfigOptionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const ReadTextFileRpc = Rpc.make(CLIENT_METHODS.fs_read_text_file, {\n  payload: AcpSchema.ReadTextFileRequest,\n  success: AcpSchema.ReadTextFileResponse,\n  error: AcpSchema.Error,\n});\n\nexport const WriteTextFileRpc = Rpc.make(CLIENT_METHODS.fs_write_text_file, {\n  payload: AcpSchema.WriteTextFileRequest,\n  success: AcpSchema.WriteTextFileResponse,\n  error: AcpSchema.Error,\n});\n\nexport const RequestPermissionRpc = Rpc.make(CLIENT_METHODS.session_request_permission, {\n  payload: AcpSchema.RequestPermissionRequest,\n  success: AcpSchema.RequestPermissionResponse,\n  error: AcpSchema.Error,\n});\n\nexport const ElicitationRpc = Rpc.make(CLIENT_METHODS.session_elicitation, {\n  payload: AcpSchema.ElicitationRequest,\n  success: AcpSchema.ElicitationResponse,\n  error: AcpSchema.Error,\n});\n\nexport const CreateTerminalRpc = Rpc.make(CLIENT_METHODS.terminal_create, {\n  payload: AcpSchema.CreateTerminalRequest,\n  success: AcpSchema.CreateTerminalResponse,\n  error: AcpSchema.Error,\n});\n\nexport const TerminalOutputRpc = Rpc.make(CLIENT_METHODS.terminal_output, {\n  payload: AcpSchema.TerminalOutputRequest,\n  success: AcpSchema.TerminalOutputResponse,\n  error: AcpSchema.Error,\n});\n\nexport const ReleaseTerminalRpc = Rpc.make(CLIENT_METHODS.terminal_release, {\n  payload: AcpSchema.ReleaseTerminalRequest,\n  success: AcpSchema.ReleaseTerminalResponse,\n  error: AcpSchema.Error,\n});\n\nexport const WaitForTerminalExitRpc = Rpc.make(CLIENT_METHODS.terminal_wait_for_exit, {\n  payload: AcpSchema.WaitForTerminalExitRequest,\n  success: AcpSchema.WaitForTerminalExitResponse,\n  error: AcpSchema.Error,\n});\n\nexport const KillTerminalRpc = Rpc.make(CLIENT_METHODS.terminal_kill, {\n  payload: AcpSchema.KillTerminalRequest,\n  success: AcpSchema.KillTerminalResponse,\n  error: AcpSchema.Error,\n});\n\nexport const AgentRpcs = RpcGroup.make(\n  InitializeRpc,\n  AuthenticateRpc,\n  LogoutRpc,\n  NewSessionRpc,\n  LoadSessionRpc,\n  ListSessionsRpc,\n  ForkSessionRpc,\n  ResumeSessionRpc,\n  CloseSessionRpc,\n  PromptRpc,\n  SetSessionModelRpc,\n  SetSessionConfigOptionRpc,\n);\n\nexport const ClientRpcs = RpcGroup.make(\n  ReadTextFileRpc,\n  WriteTextFileRpc,\n  RequestPermissionRpc,\n  ElicitationRpc,\n  CreateTerminalRpc,\n  TerminalOutputRpc,\n  ReleaseTerminalRpc,\n  WaitForTerminalExitRpc,\n  KillTerminalRpc,\n);\n","import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport { RpcClientError } from \"effect/unstable/rpc\";\n\nimport * as AcpSchema from \"../_generated/schema.gen.ts\";\nimport * as AcpError from \"../errors.ts\";\nconst isError = Schema.is(AcpSchema.Error);\nconst isAcpRequestError = Schema.is(AcpError.AcpRequestError);\n\nconst formatSchemaIssue = SchemaIssue.makeFormatterDefault();\n\nexport const callRpc = <A>(\n  effect: Effect.Effect<A, RpcClientError.RpcClientError | AcpSchema.Error>,\n): Effect.Effect<A, AcpError.AcpError> =>\n  effect.pipe(\n    Effect.catchTag(\"RpcClientError\", (error) =>\n      Effect.fail(\n        new AcpError.AcpTransportError({\n          detail: error.message,\n          cause: error,\n        }),\n      ),\n    ),\n    Effect.catchIf(isError, (error) =>\n      Effect.fail(AcpError.AcpRequestError.fromProtocolError(error)),\n    ),\n  );\n\nexport const runHandler = Effect.fnUntraced(function* <A, B>(\n  handler: ((payload: A) => Effect.Effect<B, AcpError.AcpError>) | undefined,\n  payload: A,\n  method: string,\n) {\n  if (!handler) {\n    return yield* Effect.fail(AcpError.AcpRequestError.methodNotFound(method).toProtocolError());\n  }\n  return yield* handler(payload).pipe(\n    Effect.mapError((error) =>\n      isAcpRequestError(error)\n        ? error.toProtocolError()\n        : AcpError.AcpRequestError.internalError(error.message).toProtocolError(),\n    ),\n  );\n});\n\nexport function decodeExtRequestRegistration<A, I>(\n  method: string,\n  payload: Schema.Codec<A, I>,\n  handler: (payload: A) => Effect.Effect<unknown, AcpError.AcpError>,\n) {\n  return (params: unknown): Effect.Effect<unknown, AcpError.AcpError> =>\n    Schema.decodeUnknownEffect(payload)(params).pipe(\n      Effect.mapError((error) =>\n        AcpError.AcpRequestError.invalidParams(\n          `Invalid ${method} payload: ${formatSchemaIssue(error.issue)}`,\n          { issue: error.issue },\n        ),\n      ),\n      Effect.flatMap((decoded) => handler(decoded)),\n    );\n}\n\nexport function decodeExtNotificationRegistration<A, I>(\n  method: string,\n  payload: Schema.Codec<A, I>,\n  handler: (payload: A) => Effect.Effect<void, AcpError.AcpError>,\n) {\n  return (params: unknown): Effect.Effect<void, AcpError.AcpError> =>\n    Schema.decodeUnknownEffect(payload)(params).pipe(\n      Effect.mapError(\n        (error) =>\n          new AcpError.AcpProtocolParseError({\n            detail: `Invalid ${method} notification payload: ${formatSchemaIssue(error.issue)}`,\n            cause: error,\n          }),\n      ),\n      Effect.flatMap((decoded) => handler(decoded)),\n    );\n}\n\nconst encoder = new TextEncoder();\n\nconst JsonRpcId = Schema.Union([Schema.Number, Schema.String]);\nconst JsonRpcHeaders = Schema.Array(Schema.Unknown);\n\nexport const jsonRpcRequest = <A, I>(method: string, params: Schema.Codec<A, I>) =>\n  Schema.Struct({\n    jsonrpc: Schema.Literal(\"2.0\"),\n    id: JsonRpcId,\n    method: Schema.Literal(method),\n    params,\n    headers: JsonRpcHeaders,\n  });\n\nexport const jsonRpcNotification = <A, I>(method: string, params: Schema.Codec<A, I>) =>\n  Schema.Struct({\n    jsonrpc: Schema.Literal(\"2.0\"),\n    method: Schema.Literal(method),\n    params,\n  });\n\nexport const jsonRpcResponse = <A, I>(result: Schema.Codec<A, I>) =>\n  Schema.Struct({\n    jsonrpc: Schema.Literal(\"2.0\"),\n    id: JsonRpcId,\n    result,\n  });\n\nexport const encodeJsonl = <A, I>(schema: Schema.Codec<A, I>, value: A) =>\n  Effect.map(Schema.encodeEffect(Schema.fromJsonString(schema))(value), (encoded) =>\n    encoder.encode(`${encoded}\\n`),\n  );\n","import * as Queue from \"effect/Queue\";\nimport * as Stream from \"effect/Stream\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Sink from \"effect/Sink\";\nimport * as Stdio from \"effect/Stdio\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport * as AcpError from \"../errors.ts\";\n\nconst encoder = new TextEncoder();\n\nexport const makeChildStdio = (handle: ChildProcessSpawner.ChildProcessHandle) =>\n  Stdio.make({\n    args: Effect.succeed([]),\n    stdin: handle.stdout,\n    stdout: () =>\n      Sink.mapInput(handle.stdin, (chunk: string | Uint8Array) =>\n        typeof chunk === \"string\" ? encoder.encode(chunk) : chunk,\n      ),\n    stderr: () => Sink.drain,\n  });\n\nexport const makeInMemoryStdio = Effect.fn(\"makeInMemoryStdio\")(function* () {\n  const input = yield* Queue.unbounded<Uint8Array, Cause.Done<void>>();\n  const output = yield* Queue.unbounded<string>();\n  const decoder = new TextDecoder();\n\n  return {\n    stdio: Stdio.make({\n      args: Effect.succeed([]),\n      stdin: Stream.fromQueue(input),\n      stdout: () =>\n        Sink.forEach((chunk: string | Uint8Array) =>\n          Queue.offer(\n            output,\n            typeof chunk === \"string\" ? chunk : decoder.decode(chunk, { stream: true }),\n          ),\n        ),\n      stderr: () => Sink.drain,\n    }),\n    input,\n    output,\n  };\n});\n\nexport const makeTerminationError = (\n  handle: ChildProcessSpawner.ChildProcessHandle,\n): Effect.Effect<AcpError.AcpError> =>\n  Effect.match(handle.exitCode, {\n    onFailure: (cause) =>\n      new AcpError.AcpTransportError({\n        detail: \"Failed to determine ACP process exit status\",\n        cause,\n      }),\n    onSuccess: (code) => new AcpError.AcpProcessExitedError({ code }),\n  });\n","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Stdio from \"effect/Stdio\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport * as RpcClient from \"effect/unstable/rpc/RpcClient\";\nimport * as RpcServer from \"effect/unstable/rpc/RpcServer\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport * as AcpError from \"./errors.ts\";\nimport * as AcpProtocol from \"./protocol.ts\";\nimport * as AcpRpcs from \"./rpc.ts\";\nimport * as AcpSchema from \"./_generated/schema.gen.ts\";\nimport { AGENT_METHODS, CLIENT_METHODS } from \"./_generated/meta.gen.ts\";\nimport {\n  callRpc,\n  decodeExtNotificationRegistration,\n  decodeExtRequestRegistration,\n  runHandler,\n} from \"./_internal/shared.ts\";\nimport { makeChildStdio, makeTerminationError } from \"./_internal/stdio.ts\";\n\nexport interface AcpClientOptions {\n  readonly logIncoming?: boolean;\n  readonly logOutgoing?: boolean;\n  readonly logger?: (event: AcpProtocol.AcpProtocolLogEvent) => Effect.Effect<void, never>;\n}\n\ntype AcpClientRaw = {\n  readonly notifications: Stream.Stream<AcpProtocol.AcpIncomingNotification>;\n  readonly request: (method: string, payload: unknown) => Effect.Effect<unknown, AcpError.AcpError>;\n  readonly notify: (method: string, payload: unknown) => Effect.Effect<void, AcpError.AcpError>;\n};\n\nexport interface AcpClientShape {\n  readonly raw: AcpClientRaw;\n  readonly agent: {\n    /**\n     * Initializes the ACP session and negotiates capabilities.\n     * @see https://agentclientprotocol.com/protocol/schema#initialize\n     */\n    readonly initialize: (\n      payload: AcpSchema.InitializeRequest,\n    ) => Effect.Effect<AcpSchema.InitializeResponse, AcpError.AcpError>;\n    /**\n     * Performs ACP authentication when the agent requires it.\n     * @see https://agentclientprotocol.com/protocol/schema#authenticate\n     */\n    readonly authenticate: (\n      payload: AcpSchema.AuthenticateRequest,\n    ) => Effect.Effect<AcpSchema.AuthenticateResponse, AcpError.AcpError>;\n    /**\n     * Logs out the current ACP identity.\n     * @see https://agentclientprotocol.com/protocol/schema#logout\n     */\n    readonly logout: (\n      payload: AcpSchema.LogoutRequest,\n    ) => Effect.Effect<AcpSchema.LogoutResponse, AcpError.AcpError>;\n    /**\n     * Starts a new ACP session.\n     * @see https://agentclientprotocol.com/protocol/schema#session/new\n     */\n    readonly createSession: (\n      payload: AcpSchema.NewSessionRequest,\n    ) => Effect.Effect<AcpSchema.NewSessionResponse, AcpError.AcpError>;\n    /**\n     * Loads a previously saved ACP session.\n     * @see https://agentclientprotocol.com/protocol/schema#session/load\n     */\n    readonly loadSession: (\n      payload: AcpSchema.LoadSessionRequest,\n    ) => Effect.Effect<AcpSchema.LoadSessionResponse, AcpError.AcpError>;\n    /**\n     * Lists available ACP sessions.\n     * @see https://agentclientprotocol.com/protocol/schema#session/list\n     */\n    readonly listSessions: (\n      payload: AcpSchema.ListSessionsRequest,\n    ) => Effect.Effect<AcpSchema.ListSessionsResponse, AcpError.AcpError>;\n    /**\n     * Forks an ACP session.\n     * @see https://agentclientprotocol.com/protocol/schema#session/fork\n     */\n    readonly forkSession: (\n      payload: AcpSchema.ForkSessionRequest,\n    ) => Effect.Effect<AcpSchema.ForkSessionResponse, AcpError.AcpError>;\n    /**\n     * Resumes an ACP session.\n     * @see https://agentclientprotocol.com/protocol/schema#session/resume\n     */\n    readonly resumeSession: (\n      payload: AcpSchema.ResumeSessionRequest,\n    ) => Effect.Effect<AcpSchema.ResumeSessionResponse, AcpError.AcpError>;\n    /**\n     * Closes an ACP session.\n     * @see https://agentclientprotocol.com/protocol/schema#session/close\n     */\n    readonly closeSession: (\n      payload: AcpSchema.CloseSessionRequest,\n    ) => Effect.Effect<AcpSchema.CloseSessionResponse, AcpError.AcpError>;\n    /**\n     * Selects the active model for a session.\n     * @see https://agentclientprotocol.com/protocol/schema#session/set_model\n     */\n    readonly setSessionModel: (\n      payload: AcpSchema.SetSessionModelRequest,\n    ) => Effect.Effect<AcpSchema.SetSessionModelResponse, AcpError.AcpError>;\n    /**\n     * Updates a session configuration option.\n     * @see https://agentclientprotocol.com/protocol/schema#session/set_config_option\n     */\n    readonly setSessionConfigOption: (\n      payload: AcpSchema.SetSessionConfigOptionRequest,\n    ) => Effect.Effect<AcpSchema.SetSessionConfigOptionResponse, AcpError.AcpError>;\n    /**\n     * Sends a prompt turn to the agent.\n     * @see https://agentclientprotocol.com/protocol/schema#session/prompt\n     */\n    readonly prompt: (\n      payload: AcpSchema.PromptRequest,\n    ) => Effect.Effect<AcpSchema.PromptResponse, AcpError.AcpError>;\n    /**\n     * Sends a real ACP `session/cancel` notification.\n     * @see https://agentclientprotocol.com/protocol/schema#session/cancel\n     */\n    readonly cancel: (\n      payload: AcpSchema.CancelNotification,\n    ) => Effect.Effect<void, AcpError.AcpError>;\n  };\n  /**\n   * Registers a handler for `session/request_permission`.\n   * @see https://agentclientprotocol.com/protocol/schema#session/request_permission\n   */\n  readonly handleRequestPermission: (\n    handler: (\n      request: AcpSchema.RequestPermissionRequest,\n    ) => Effect.Effect<AcpSchema.RequestPermissionResponse, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `session/elicitation`.\n   * @see https://agentclientprotocol.com/protocol/schema#session/elicitation\n   */\n  readonly handleElicitation: (\n    handler: (\n      request: AcpSchema.ElicitationRequest,\n    ) => Effect.Effect<AcpSchema.ElicitationResponse, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `fs/read_text_file`.\n   * @see https://agentclientprotocol.com/protocol/schema#fs/read_text_file\n   */\n  readonly handleReadTextFile: (\n    handler: (\n      request: AcpSchema.ReadTextFileRequest,\n    ) => Effect.Effect<AcpSchema.ReadTextFileResponse, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `fs/write_text_file`.\n   * @see https://agentclientprotocol.com/protocol/schema#fs/write_text_file\n   */\n  readonly handleWriteTextFile: (\n    handler: (\n      request: AcpSchema.WriteTextFileRequest,\n    ) => Effect.Effect<AcpSchema.WriteTextFileResponse | void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `terminal/create`.\n   * @see https://agentclientprotocol.com/protocol/schema#terminal/create\n   */\n  readonly handleCreateTerminal: (\n    handler: (\n      request: AcpSchema.CreateTerminalRequest,\n    ) => Effect.Effect<AcpSchema.CreateTerminalResponse, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `terminal/output`.\n   * @see https://agentclientprotocol.com/protocol/schema#terminal/output\n   */\n  readonly handleTerminalOutput: (\n    handler: (\n      request: AcpSchema.TerminalOutputRequest,\n    ) => Effect.Effect<AcpSchema.TerminalOutputResponse, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `terminal/wait_for_exit`.\n   * @see https://agentclientprotocol.com/protocol/schema#terminal/wait_for_exit\n   */\n  readonly handleTerminalWaitForExit: (\n    handler: (\n      request: AcpSchema.WaitForTerminalExitRequest,\n    ) => Effect.Effect<AcpSchema.WaitForTerminalExitResponse, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `terminal/kill`.\n   * @see https://agentclientprotocol.com/protocol/schema#terminal/kill\n   */\n  readonly handleTerminalKill: (\n    handler: (\n      request: AcpSchema.KillTerminalRequest,\n    ) => Effect.Effect<AcpSchema.KillTerminalResponse | void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `terminal/release`.\n   * @see https://agentclientprotocol.com/protocol/schema#terminal/release\n   */\n  readonly handleTerminalRelease: (\n    handler: (\n      request: AcpSchema.ReleaseTerminalRequest,\n    ) => Effect.Effect<AcpSchema.ReleaseTerminalResponse | void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `session/update`.\n   * @see https://agentclientprotocol.com/protocol/schema#session/update\n   */\n  readonly handleSessionUpdate: (\n    handler: (\n      notification: AcpSchema.SessionNotification,\n    ) => Effect.Effect<void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a handler for `session/elicitation/complete`.\n   * @see https://agentclientprotocol.com/protocol/schema#session/elicitation/complete\n   */\n  readonly handleElicitationComplete: (\n    handler: (\n      notification: AcpSchema.ElicitationCompleteNotification,\n    ) => Effect.Effect<void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a fallback extension request handler.\n   * @see https://agentclientprotocol.com/protocol/extensibility\n   */\n  readonly handleUnknownExtRequest: (\n    handler: (method: string, params: unknown) => Effect.Effect<unknown, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a fallback extension notification handler.\n   * @see https://agentclientprotocol.com/protocol/extensibility\n   */\n  readonly handleUnknownExtNotification: (\n    handler: (method: string, params: unknown) => Effect.Effect<void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a typed extension request handler.\n   * @see https://agentclientprotocol.com/protocol/extensibility\n   */\n  readonly handleExtRequest: <A, I>(\n    method: string,\n    payload: Schema.Codec<A, I>,\n    handler: (payload: A) => Effect.Effect<unknown, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n  /**\n   * Registers a typed extension notification handler.\n   * @see https://agentclientprotocol.com/protocol/extensibility\n   */\n  readonly handleExtNotification: <A, I>(\n    method: string,\n    payload: Schema.Codec<A, I>,\n    handler: (payload: A) => Effect.Effect<void, AcpError.AcpError>,\n  ) => Effect.Effect<void>;\n}\n\nexport class AcpClient extends Context.Service<AcpClient, AcpClientShape>()(\n  \"effect-acp/client/AcpClient\",\n) {}\n\ninterface AcpCoreRequestHandlers {\n  requestPermission?: (\n    request: AcpSchema.RequestPermissionRequest,\n  ) => Effect.Effect<AcpSchema.RequestPermissionResponse, AcpError.AcpError>;\n  elicitation?: (\n    request: AcpSchema.ElicitationRequest,\n  ) => Effect.Effect<AcpSchema.ElicitationResponse, AcpError.AcpError>;\n  readTextFile?: (\n    request: AcpSchema.ReadTextFileRequest,\n  ) => Effect.Effect<AcpSchema.ReadTextFileResponse, AcpError.AcpError>;\n  writeTextFile?: (\n    request: AcpSchema.WriteTextFileRequest,\n  ) => Effect.Effect<AcpSchema.WriteTextFileResponse | void, AcpError.AcpError>;\n  createTerminal?: (\n    request: AcpSchema.CreateTerminalRequest,\n  ) => Effect.Effect<AcpSchema.CreateTerminalResponse, AcpError.AcpError>;\n  terminalOutput?: (\n    request: AcpSchema.TerminalOutputRequest,\n  ) => Effect.Effect<AcpSchema.TerminalOutputResponse, AcpError.AcpError>;\n  terminalWaitForExit?: (\n    request: AcpSchema.WaitForTerminalExitRequest,\n  ) => Effect.Effect<AcpSchema.WaitForTerminalExitResponse, AcpError.AcpError>;\n  terminalKill?: (\n    request: AcpSchema.KillTerminalRequest,\n  ) => Effect.Effect<AcpSchema.KillTerminalResponse | void, AcpError.AcpError>;\n  terminalRelease?: (\n    request: AcpSchema.ReleaseTerminalRequest,\n  ) => Effect.Effect<AcpSchema.ReleaseTerminalResponse | void, AcpError.AcpError>;\n}\n\ninterface AcpNotificationHandlers {\n  readonly sessionUpdate: BufferedNotificationHandler<AcpSchema.SessionNotification>;\n  readonly elicitationComplete: BufferedNotificationHandler<AcpSchema.ElicitationCompleteNotification>;\n}\n\ninterface BufferedNotificationHandler<A> {\n  readonly handlers: Array<(notification: A) => Effect.Effect<void, AcpError.AcpError>>;\n  readonly pending: Array<A>;\n}\n\nexport const make = Effect.fn(\"effect-acp/AcpClient.make\")(function* (\n  stdio: Stdio.Stdio,\n  options: AcpClientOptions = {},\n  terminationError?: Effect.Effect<AcpError.AcpError>,\n): Effect.fn.Return<AcpClientShape, never, Scope.Scope> {\n  const coreHandlers: AcpCoreRequestHandlers = {};\n  const notificationHandlers: AcpNotificationHandlers = {\n    sessionUpdate: { handlers: [], pending: [] },\n    elicitationComplete: { handlers: [], pending: [] },\n  };\n  const extRequestHandlers = new Map<\n    string,\n    (params: unknown) => Effect.Effect<unknown, AcpError.AcpError>\n  >();\n  const extNotificationHandlers = new Map<\n    string,\n    (params: unknown) => Effect.Effect<void, AcpError.AcpError>\n  >();\n  let unknownExtRequestHandler:\n    | ((method: string, params: unknown) => Effect.Effect<unknown, AcpError.AcpError>)\n    | undefined;\n  let unknownExtNotificationHandler:\n    | ((method: string, params: unknown) => Effect.Effect<void, AcpError.AcpError>)\n    | undefined;\n\n  const runNotificationHandlers = <A>(\n    registration: BufferedNotificationHandler<A>,\n    notification: A,\n  ) =>\n    Effect.forEach(\n      registration.handlers,\n      (handler) => handler(notification).pipe(Effect.catch(() => Effect.void)),\n      { discard: true },\n    );\n\n  const flushBufferedNotifications = <A>(registration: BufferedNotificationHandler<A>) =>\n    Effect.suspend(() => {\n      if (registration.handlers.length === 0 || registration.pending.length === 0) {\n        return Effect.void;\n      }\n      const pending = registration.pending.splice(0, registration.pending.length);\n      return Effect.forEach(\n        pending,\n        (notification) => runNotificationHandlers(registration, notification),\n        {\n          discard: true,\n        },\n      );\n    });\n\n  const dispatchNotification = (notification: AcpProtocol.AcpIncomingNotification) => {\n    switch (notification._tag) {\n      case \"SessionUpdate\": {\n        if (notificationHandlers.sessionUpdate.handlers.length === 0) {\n          notificationHandlers.sessionUpdate.pending.push(notification.params);\n          return Effect.void;\n        }\n        return runNotificationHandlers(notificationHandlers.sessionUpdate, notification.params);\n      }\n      case \"ElicitationComplete\": {\n        if (notificationHandlers.elicitationComplete.handlers.length === 0) {\n          notificationHandlers.elicitationComplete.pending.push(notification.params);\n          return Effect.void;\n        }\n        return runNotificationHandlers(\n          notificationHandlers.elicitationComplete,\n          notification.params,\n        );\n      }\n      case \"ExtNotification\": {\n        const handler = extNotificationHandlers.get(notification.method);\n        if (handler) {\n          return handler(notification.params);\n        }\n        return unknownExtNotificationHandler\n          ? unknownExtNotificationHandler(notification.method, notification.params)\n          : Effect.void;\n      }\n    }\n  };\n\n  const dispatchExtRequest = (method: string, params: unknown) => {\n    const handler = extRequestHandlers.get(method);\n    if (handler) {\n      return handler(params);\n    }\n    return unknownExtRequestHandler\n      ? unknownExtRequestHandler(method, params)\n      : Effect.fail(AcpError.AcpRequestError.methodNotFound(method));\n  };\n\n  const transport = yield* AcpProtocol.makeAcpPatchedProtocol({\n    stdio: stdio,\n    ...(terminationError ? { terminationError } : {}),\n    serverRequestMethods: new Set(AcpRpcs.ClientRpcs.requests.keys()),\n    ...(options.logIncoming !== undefined ? { logIncoming: options.logIncoming } : {}),\n    ...(options.logOutgoing !== undefined ? { logOutgoing: options.logOutgoing } : {}),\n    ...(options.logger ? { logger: options.logger } : {}),\n    onNotification: dispatchNotification,\n    onExtRequest: dispatchExtRequest,\n  });\n\n  const clientHandlerLayer = AcpRpcs.ClientRpcs.toLayer(\n    AcpRpcs.ClientRpcs.of({\n      [CLIENT_METHODS.session_request_permission]: (payload) =>\n        runHandler(\n          coreHandlers.requestPermission,\n          payload,\n          CLIENT_METHODS.session_request_permission,\n        ),\n      [CLIENT_METHODS.session_elicitation]: (payload) =>\n        runHandler(coreHandlers.elicitation, payload, CLIENT_METHODS.session_elicitation),\n      [CLIENT_METHODS.fs_read_text_file]: (payload) =>\n        runHandler(coreHandlers.readTextFile, payload, CLIENT_METHODS.fs_read_text_file),\n      [CLIENT_METHODS.fs_write_text_file]: (payload) =>\n        runHandler(coreHandlers.writeTextFile, payload, CLIENT_METHODS.fs_write_text_file).pipe(\n          Effect.map((result) => result ?? {}),\n        ),\n      [CLIENT_METHODS.terminal_create]: (payload) =>\n        runHandler(coreHandlers.createTerminal, payload, CLIENT_METHODS.terminal_create),\n      [CLIENT_METHODS.terminal_output]: (payload) =>\n        runHandler(coreHandlers.terminalOutput, payload, CLIENT_METHODS.terminal_output),\n      [CLIENT_METHODS.terminal_wait_for_exit]: (payload) =>\n        runHandler(\n          coreHandlers.terminalWaitForExit,\n          payload,\n          CLIENT_METHODS.terminal_wait_for_exit,\n        ),\n      [CLIENT_METHODS.terminal_kill]: (payload) =>\n        runHandler(coreHandlers.terminalKill, payload, CLIENT_METHODS.terminal_kill).pipe(\n          Effect.map((result) => result ?? {}),\n        ),\n      [CLIENT_METHODS.terminal_release]: (payload) =>\n        runHandler(coreHandlers.terminalRelease, payload, CLIENT_METHODS.terminal_release).pipe(\n          Effect.map((result) => result ?? {}),\n        ),\n    }),\n  );\n\n  yield* RpcServer.make(AcpRpcs.ClientRpcs).pipe(\n    Effect.provideService(RpcServer.Protocol, transport.serverProtocol),\n    Effect.provide(clientHandlerLayer),\n    Effect.forkScoped,\n  );\n\n  let nextRpcRequestId = 2 ** 32;\n  const rpc = yield* RpcClient.make(AcpRpcs.AgentRpcs, {\n    generateRequestId: () => nextRpcRequestId++ as never,\n  }).pipe(Effect.provideService(RpcClient.Protocol, transport.clientProtocol));\n\n  return AcpClient.of({\n    raw: {\n      notifications: transport.incoming,\n      request: transport.request,\n      notify: transport.notify,\n    },\n    agent: {\n      initialize: (payload) => callRpc(rpc[AGENT_METHODS.initialize](payload)),\n      authenticate: (payload) => callRpc(rpc[AGENT_METHODS.authenticate](payload)),\n      logout: (payload) => callRpc(rpc[AGENT_METHODS.logout](payload)),\n      createSession: (payload) => callRpc(rpc[AGENT_METHODS.session_new](payload)),\n      loadSession: (payload) => callRpc(rpc[AGENT_METHODS.session_load](payload)),\n      listSessions: (payload) => callRpc(rpc[AGENT_METHODS.session_list](payload)),\n      forkSession: (payload) => callRpc(rpc[AGENT_METHODS.session_fork](payload)),\n      resumeSession: (payload) => callRpc(rpc[AGENT_METHODS.session_resume](payload)),\n      closeSession: (payload) => callRpc(rpc[AGENT_METHODS.session_close](payload)),\n      setSessionModel: (payload) => callRpc(rpc[AGENT_METHODS.session_set_model](payload)),\n      setSessionConfigOption: (payload) =>\n        callRpc(rpc[AGENT_METHODS.session_set_config_option](payload)),\n      prompt: (payload) => callRpc(rpc[AGENT_METHODS.session_prompt](payload)),\n      cancel: (payload) => transport.notify(AGENT_METHODS.session_cancel, payload),\n    },\n    handleRequestPermission: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.requestPermission = handler;\n        return Effect.void;\n      }),\n    handleElicitation: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.elicitation = handler;\n        return Effect.void;\n      }),\n    handleReadTextFile: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.readTextFile = handler;\n        return Effect.void;\n      }),\n    handleWriteTextFile: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.writeTextFile = handler;\n        return Effect.void;\n      }),\n    handleCreateTerminal: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.createTerminal = handler;\n        return Effect.void;\n      }),\n    handleTerminalOutput: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.terminalOutput = handler;\n        return Effect.void;\n      }),\n    handleTerminalWaitForExit: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.terminalWaitForExit = handler;\n        return Effect.void;\n      }),\n    handleTerminalKill: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.terminalKill = handler;\n        return Effect.void;\n      }),\n    handleTerminalRelease: (handler) =>\n      Effect.suspend(() => {\n        coreHandlers.terminalRelease = handler;\n        return Effect.void;\n      }),\n    handleSessionUpdate: (handler) =>\n      Effect.suspend(() => {\n        notificationHandlers.sessionUpdate.handlers.push(handler);\n        return flushBufferedNotifications(notificationHandlers.sessionUpdate);\n      }),\n    handleElicitationComplete: (handler) =>\n      Effect.suspend(() => {\n        notificationHandlers.elicitationComplete.handlers.push(handler);\n        return flushBufferedNotifications(notificationHandlers.elicitationComplete);\n      }),\n    handleUnknownExtRequest: (handler) =>\n      Effect.suspend(() => {\n        unknownExtRequestHandler = handler;\n        return Effect.void;\n      }),\n    handleUnknownExtNotification: (handler) =>\n      Effect.suspend(() => {\n        unknownExtNotificationHandler = handler;\n        return Effect.void;\n      }),\n    handleExtRequest: (method, payload, handler) =>\n      Effect.suspend(() => {\n        extRequestHandlers.set(method, decodeExtRequestRegistration(method, payload, handler));\n        return Effect.void;\n      }),\n    handleExtNotification: (method, payload, handler) =>\n      Effect.suspend(() => {\n        extNotificationHandlers.set(\n          method,\n          decodeExtNotificationRegistration(method, payload, handler),\n        );\n        return Effect.void;\n      }),\n  });\n});\n\nexport const layerChildProcess = (\n  handle: ChildProcessSpawner.ChildProcessHandle,\n  options: AcpClientOptions = {},\n): Layer.Layer<AcpClient> => {\n  const stdio = makeChildStdio(handle);\n  const terminationError = makeTerminationError(handle);\n  return Layer.effect(AcpClient, make(stdio, options, terminationError));\n};\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { execFileSync } from \"node:child_process\";\n\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport type * as ChildProcess from \"effect/unstable/process/ChildProcess\";\nimport type * as ChildProcessSpawner from \"effect/unstable/process/ChildProcessSpawner\";\n\nexport const ACP_PROCESS_TERMINATE_GRACE = \"250 millis\" as const satisfies Duration.Input;\n\nfunction readProcessRows(): ReadonlyArray<{ readonly pid: number; readonly ppid: number }> {\n  try {\n    const raw = execFileSync(\"ps\", [\"-eo\", \"pid=,ppid=\"], {\n      encoding: \"utf8\",\n      timeout: 1000,\n      maxBuffer: 1024 * 1024,\n    });\n    return raw.split(/\\r?\\n/g).flatMap((line) => {\n      const [pidRaw, ppidRaw] = line.trim().split(/\\s+/g);\n      const pid = Number(pidRaw);\n      const ppid = Number(ppidRaw);\n      return Number.isInteger(pid) && Number.isInteger(ppid) ? [{ pid, ppid }] : [];\n    });\n  } catch {\n    return [];\n  }\n}\n\nfunction collectDescendantPids(rootPid: number): ReadonlyArray<number> {\n  const childrenByParent = new Map<number, number[]>();\n  for (const row of readProcessRows()) {\n    const children = childrenByParent.get(row.ppid) ?? [];\n    children.push(row.pid);\n    childrenByParent.set(row.ppid, children);\n  }\n\n  const descendants: number[] = [];\n  const stack = [...(childrenByParent.get(rootPid) ?? [])];\n  while (stack.length > 0) {\n    const pid = stack.pop()!;\n    descendants.push(pid);\n    stack.push(...(childrenByParent.get(pid) ?? []));\n  }\n  return descendants;\n}\n\nfunction readProcessGroupId(pid: number): number | undefined {\n  try {\n    const raw = execFileSync(\"ps\", [\"-o\", \"pgid=\", \"-p\", String(pid)], {\n      encoding: \"utf8\",\n      timeout: 1000,\n      maxBuffer: 1024,\n    }).trim();\n    const pgid = Number(raw);\n    return Number.isInteger(pgid) && pgid > 1 ? pgid : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction canSignalProcessGroup(input: {\n  readonly rootPid: number;\n  readonly processGroupId: number | undefined;\n}): input is { readonly rootPid: number; readonly processGroupId: number } {\n  if (input.processGroupId === undefined) {\n    return false;\n  }\n  if (input.processGroupId === input.rootPid) {\n    return true;\n  }\n  return input.processGroupId !== readProcessGroupId(process.pid);\n}\n\nconst signalPid = (input: {\n  readonly pid: number;\n  readonly signal: ChildProcess.Signal;\n}): Effect.Effect<boolean> =>\n  Effect.sync(() => {\n    try {\n      process.kill(input.pid, input.signal);\n      return true;\n    } catch {\n      return false;\n    }\n  });\n\nconst signalPosixProcessGroup = (input: {\n  readonly processGroupId: number;\n  readonly signal: ChildProcess.Signal;\n}): Effect.Effect<boolean> =>\n  Effect.sync(() => {\n    try {\n      process.kill(-input.processGroupId, input.signal);\n      return true;\n    } catch {\n      return false;\n    }\n  });\n\nconst signalProcessTree = (input: {\n  readonly label: string;\n  readonly rootPid: number;\n  readonly processGroupId?: number | undefined;\n  readonly descendantPids: ReadonlyArray<number>;\n  readonly signal: ChildProcess.Signal;\n}): Effect.Effect<void> =>\n  Effect.gen(function* () {\n    let sentToProcessGroup = false;\n    const processGroupId = input.processGroupId;\n    if (\n      processGroupId !== undefined &&\n      canSignalProcessGroup({\n        rootPid: input.rootPid,\n        processGroupId,\n      })\n    ) {\n      sentToProcessGroup = yield* signalPosixProcessGroup({\n        processGroupId,\n        signal: input.signal,\n      });\n    }\n\n    if (!sentToProcessGroup) {\n      for (const pid of input.descendantPids.toReversed()) {\n        yield* signalPid({ pid, signal: input.signal });\n      }\n      yield* signalPid({ pid: input.rootPid, signal: input.signal });\n    }\n\n    yield* Effect.logDebug(\"ACP process tree cleanup signal sent\", {\n      \"acp.process.label\": input.label,\n      \"acp.process.pid\": input.rootPid,\n      \"acp.process.descendant_pids\": input.descendantPids,\n      \"acp.process.signal\": input.signal,\n      \"acp.process_group.id\": input.processGroupId,\n      \"acp.process_group.signal_sent\": sentToProcessGroup,\n      cursor_process_tree_killed: input.signal === \"SIGKILL\",\n    });\n  }).pipe(Effect.ignore);\n\nconst waitForRootExit = (\n  child: ChildProcessSpawner.ChildProcessHandle,\n  grace: Duration.Input,\n): Effect.Effect<boolean> =>\n  child.exitCode.pipe(Effect.exit, Effect.timeoutOption(grace), Effect.map(Option.isSome));\n\nexport const terminateAcpProcessTree = (input: {\n  readonly child: ChildProcessSpawner.ChildProcessHandle;\n  readonly label: string;\n  readonly grace?: Duration.Input;\n}): Effect.Effect<void> => {\n  const grace = input.grace ?? ACP_PROCESS_TERMINATE_GRACE;\n  return Effect.sync(() => {\n    const rootPid = Number(input.child.pid);\n    return {\n      rootPid,\n      processGroupId: process.platform === \"win32\" ? undefined : readProcessGroupId(rootPid),\n      descendantPids: process.platform === \"win32\" ? ([] as const) : collectDescendantPids(rootPid),\n    };\n  }).pipe(\n    Effect.flatMap(({ rootPid, processGroupId, descendantPids }) =>\n      signalProcessTree({\n        label: input.label,\n        rootPid,\n        processGroupId,\n        descendantPids,\n        signal: \"SIGTERM\",\n      }).pipe(\n        Effect.andThen(waitForRootExit(input.child, grace)),\n        Effect.flatMap((rootExited) => {\n          if (rootExited && descendantPids.length === 0) {\n            return Effect.void;\n          }\n          return signalProcessTree({\n            label: input.label,\n            rootPid,\n            processGroupId,\n            descendantPids,\n            signal: \"SIGKILL\",\n          });\n        }),\n      ),\n    ),\n    Effect.ignore,\n  );\n};\n","import type { ToolLifecycleItemType } from \"@salchi/contracts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n}\n\nfunction asTrimmedString(value: unknown): string | undefined {\n  if (typeof value !== \"string\") {\n    return undefined;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeCommandValue(value: unknown): string | undefined {\n  const direct = asTrimmedString(value);\n  if (direct) {\n    return direct;\n  }\n  if (!Array.isArray(value)) {\n    return undefined;\n  }\n  const parts: string[] = [];\n  for (const entry of value) {\n    const part = asTrimmedString(entry);\n    if (part !== undefined) {\n      parts.push(part);\n    }\n  }\n  return parts.length > 0 ? parts.join(\" \") : undefined;\n}\n\nfunction stripTrailingExitCode(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  if (!trimmed) {\n    return undefined;\n  }\n  const match = /^(?<output>[\\s\\S]*?)(?:\\s*<exited with exit code \\d+>)\\s*$/iu.exec(trimmed);\n  const output = match?.groups?.output?.trim() ?? trimmed;\n  return output.length > 0 ? output : undefined;\n}\n\nfunction extractCommandFromTitle(title: string | undefined): string | undefined {\n  if (!title) {\n    return undefined;\n  }\n  const backtickMatch = /`([^`]+)`/u.exec(title);\n  return backtickMatch?.[1]?.trim() || undefined;\n}\n\nfunction extractToolCommand(data: Record<string, unknown> | undefined, title: string | undefined) {\n  const item = asRecord(data?.item);\n  const itemInput = asRecord(item?.input);\n  const itemResult = asRecord(item?.result);\n  const rawInput = asRecord(data?.rawInput);\n  const candidates = [\n    normalizeCommandValue(item?.command),\n    normalizeCommandValue(itemInput?.command),\n    normalizeCommandValue(itemResult?.command),\n    normalizeCommandValue(data?.command),\n    normalizeCommandValue(rawInput?.command),\n  ];\n  const direct = candidates.find((candidate) => candidate !== undefined);\n  if (direct) {\n    return direct;\n  }\n  const executable = asTrimmedString(rawInput?.executable);\n  const args = normalizeCommandValue(rawInput?.args);\n  if (executable && args) {\n    return `${executable} ${args}`;\n  }\n  if (executable) {\n    return executable;\n  }\n  return extractCommandFromTitle(title);\n}\n\nfunction maybePathLike(value: string | undefined): string | undefined {\n  if (!value) {\n    return undefined;\n  }\n  if (\n    value.includes(\"/\") ||\n    value.includes(\"\\\\\") ||\n    value.startsWith(\".\") ||\n    /\\.(?:[a-z0-9]{1,12})$/iu.test(value)\n  ) {\n    return value;\n  }\n  return undefined;\n}\n\nfunction collectPaths(value: unknown, paths: string[], seen: Set<string>, depth: number): void {\n  if (depth > 4 || paths.length >= 8) {\n    return;\n  }\n  if (Array.isArray(value)) {\n    for (const entry of value) {\n      collectPaths(entry, paths, seen, depth + 1);\n      if (paths.length >= 8) {\n        return;\n      }\n    }\n    return;\n  }\n  const record = asRecord(value);\n  if (!record) {\n    return;\n  }\n  for (const key of [\"path\", \"filePath\", \"relativePath\", \"filename\", \"newPath\", \"oldPath\"]) {\n    const candidate = maybePathLike(asTrimmedString(record[key]));\n    if (!candidate || seen.has(candidate)) {\n      continue;\n    }\n    seen.add(candidate);\n    paths.push(candidate);\n    if (paths.length >= 8) {\n      return;\n    }\n  }\n  for (const nestedKey of [\"locations\", \"item\", \"input\", \"result\", \"rawInput\", \"data\", \"changes\"]) {\n    if (!(nestedKey in record)) {\n      continue;\n    }\n    collectPaths(record[nestedKey], paths, seen, depth + 1);\n    if (paths.length >= 8) {\n      return;\n    }\n  }\n}\n\nfunction extractPrimaryPath(data: Record<string, unknown> | undefined): string | undefined {\n  const paths: string[] = [];\n  collectPaths(data, paths, new Set<string>(), 0);\n  return paths[0];\n}\n\nfunction normalizeEquivalentValue(value: string | undefined): string | undefined {\n  const trimmed = asTrimmedString(value);\n  if (!trimmed) {\n    return undefined;\n  }\n  return trimmed\n    .replace(/\\s+/gu, \" \")\n    .replace(/\\s+(?:complete|completed|started)\\s*$/iu, \"\")\n    .trim();\n}\n\nfunction isEquivalent(left: string | undefined, right: string | undefined): boolean {\n  const normalizedLeft = normalizeEquivalentValue(left)?.toLowerCase();\n  const normalizedRight = normalizeEquivalentValue(right)?.toLowerCase();\n  return normalizedLeft !== undefined && normalizedLeft === normalizedRight;\n}\n\nfunction classifyToolAction(input: {\n  readonly itemType?: ToolLifecycleItemType | null | undefined;\n  readonly title?: string | undefined;\n  readonly data?: Record<string, unknown> | undefined;\n}): \"command\" | \"read\" | \"file_change\" | \"search\" | \"other\" {\n  const itemType = input.itemType ?? undefined;\n  const kind = asTrimmedString(input.data?.kind)?.toLowerCase();\n  const title = asTrimmedString(input.title)?.toLowerCase();\n  if (itemType === \"command_execution\" || kind === \"execute\" || title === \"terminal\") {\n    return \"command\";\n  }\n  if (kind === \"read\" || title === \"read file\") {\n    return \"read\";\n  }\n  if (\n    itemType === \"file_change\" ||\n    kind === \"edit\" ||\n    kind === \"move\" ||\n    kind === \"delete\" ||\n    kind === \"write\"\n  ) {\n    return \"file_change\";\n  }\n  if (itemType === \"web_search\" || kind === \"search\" || title === \"find\" || title === \"grep\") {\n    return \"search\";\n  }\n  return \"other\";\n}\n\nexport interface ToolActivityPresentationInput {\n  readonly itemType?: ToolLifecycleItemType | null | undefined;\n  readonly title?: string | null | undefined;\n  readonly detail?: string | null | undefined;\n  readonly data?: unknown;\n  readonly fallbackSummary?: string | null | undefined;\n}\n\nexport interface ToolActivityPresentation {\n  readonly summary: string;\n  readonly detail?: string | undefined;\n}\n\nexport function deriveToolActivityPresentation(\n  input: ToolActivityPresentationInput,\n): ToolActivityPresentation {\n  const title = asTrimmedString(input.title);\n  const detail = stripTrailingExitCode(asTrimmedString(input.detail));\n  const fallbackSummary = asTrimmedString(input.fallbackSummary) ?? \"Tool\";\n  const data = asRecord(input.data);\n  const command = extractToolCommand(data, title);\n  const primaryPath = extractPrimaryPath(data);\n  const action = classifyToolAction({\n    itemType: input.itemType,\n    title,\n    data,\n  });\n\n  if (action === \"command\") {\n    return {\n      summary: \"Ran command\",\n      ...(command ? { detail: command } : {}),\n    };\n  }\n\n  if (action === \"read\") {\n    if (primaryPath) {\n      return {\n        summary: \"Read file\",\n        detail: primaryPath,\n      };\n    }\n    return {\n      summary: \"Read file\",\n    };\n  }\n\n  if (action === \"file_change\") {\n    return {\n      summary: \"Changed files\",\n      ...(primaryPath ? { detail: primaryPath } : {}),\n    };\n  }\n\n  if (action === \"search\") {\n    const query =\n      asTrimmedString(asRecord(data?.rawInput)?.query) ??\n      asTrimmedString(asRecord(data?.rawInput)?.pattern) ??\n      asTrimmedString(asRecord(data?.rawInput)?.searchTerm);\n    return {\n      summary: \"Searched files\",\n      ...(query ? { detail: query } : {}),\n    };\n  }\n\n  if (detail && !isEquivalent(detail, title) && !isEquivalent(detail, fallbackSummary)) {\n    return {\n      summary: title ?? fallbackSummary,\n      detail,\n    };\n  }\n\n  return {\n    summary: title ?? fallbackSummary,\n  };\n}\n","import type * as EffectAcpSchema from \"effect-acp/schema\";\nimport { deriveToolActivityPresentation } from \"@salchi/shared/toolActivity\";\nimport type { ToolLifecycleItemType } from \"@salchi/contracts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport interface AcpSessionMode {\n  readonly id: string;\n  readonly name: string;\n  readonly description?: string;\n}\n\nexport interface AcpSessionModeState {\n  readonly currentModeId: string;\n  readonly availableModes: ReadonlyArray<AcpSessionMode>;\n}\n\nexport interface AcpToolCallState {\n  readonly toolCallId: string;\n  readonly kind?: string;\n  readonly title?: string;\n  readonly status?: \"pending\" | \"inProgress\" | \"completed\" | \"failed\";\n  readonly command?: string;\n  readonly detail?: string;\n  readonly data: Record<string, unknown>;\n}\n\nexport interface AcpPlanUpdate {\n  readonly explanation?: string | null;\n  readonly plan: ReadonlyArray<{\n    readonly step: string;\n    readonly status: \"pending\" | \"inProgress\" | \"completed\";\n  }>;\n}\n\nexport interface AcpPermissionRequest {\n  readonly kind: string | \"unknown\";\n  readonly detail?: string;\n  readonly toolCall?: AcpToolCallState;\n}\n\nexport type AcpParsedSessionEvent =\n  | {\n      readonly _tag: \"ModeChanged\";\n      readonly modeId: string;\n    }\n  | {\n      readonly _tag: \"AssistantItemStarted\";\n      readonly itemId: string;\n    }\n  | {\n      readonly _tag: \"AssistantItemCompleted\";\n      readonly itemId: string;\n    }\n  | {\n      readonly _tag: \"PlanUpdated\";\n      readonly payload: AcpPlanUpdate;\n      readonly rawPayload: unknown;\n    }\n  | {\n      readonly _tag: \"ToolCallUpdated\";\n      readonly toolCall: AcpToolCallState;\n      readonly rawPayload: unknown;\n    }\n  | {\n      readonly _tag: \"ContentDelta\";\n      readonly itemId?: string;\n      readonly text: string;\n      readonly rawPayload: unknown;\n    };\n\ntype AcpSessionSetupResponse =\n  | EffectAcpSchema.LoadSessionResponse\n  | EffectAcpSchema.NewSessionResponse\n  | EffectAcpSchema.ResumeSessionResponse;\n\ntype AcpToolCallUpdate = Extract<\n  EffectAcpSchema.SessionNotification[\"update\"],\n  { readonly sessionUpdate: \"tool_call\" | \"tool_call_update\" }\n>;\n\nexport function extractModelConfigId(sessionResponse: AcpSessionSetupResponse): string | undefined {\n  const configOptions = sessionResponse.configOptions;\n  if (!configOptions) return undefined;\n  for (const opt of configOptions) {\n    if (opt.category === \"model\" && opt.id.trim().length > 0) {\n      return opt.id.trim();\n    }\n  }\n  return undefined;\n}\n\nexport function findSessionConfigOption(\n  configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null | undefined,\n  configId: string,\n): EffectAcpSchema.SessionConfigOption | undefined {\n  if (!configOptions) {\n    return undefined;\n  }\n  const normalizedConfigId = configId.trim();\n  if (!normalizedConfigId) {\n    return undefined;\n  }\n  return configOptions.find((option) => option.id.trim() === normalizedConfigId);\n}\n\nexport function collectSessionConfigOptionValues(\n  configOption: EffectAcpSchema.SessionConfigOption,\n): ReadonlyArray<string> {\n  if (configOption.type !== \"select\") {\n    return [];\n  }\n  return configOption.options.flatMap((entry) =>\n    \"value\" in entry ? [entry.value] : entry.options.map((option) => option.value),\n  );\n}\n\nexport function parseSessionModeState(\n  sessionResponse: AcpSessionSetupResponse,\n): AcpSessionModeState | undefined {\n  const modes = sessionResponse.modes;\n  if (!modes) return undefined;\n  const currentModeId = modes.currentModeId.trim();\n  if (!currentModeId) {\n    return undefined;\n  }\n  const availableModes: Array<AcpSessionMode> = [];\n  for (const mode of modes.availableModes) {\n    const id = mode.id.trim();\n    const name = mode.name.trim();\n    if (!id || !name) {\n      continue;\n    }\n    const description = mode.description?.trim() || undefined;\n    availableModes.push(\n      description !== undefined\n        ? ({ id, name, description } satisfies AcpSessionMode)\n        : ({ id, name } satisfies AcpSessionMode),\n    );\n  }\n  if (availableModes.length === 0) {\n    return undefined;\n  }\n  return {\n    currentModeId,\n    availableModes,\n  };\n}\n\nfunction normalizePlanStepStatus(raw: unknown): \"pending\" | \"inProgress\" | \"completed\" {\n  switch (raw) {\n    case \"completed\":\n      return \"completed\";\n    case \"in_progress\":\n    case \"inProgress\":\n      return \"inProgress\";\n    default:\n      return \"pending\";\n  }\n}\n\nfunction normalizeToolCallStatus(\n  raw: unknown,\n  fallback?: \"pending\" | \"inProgress\" | \"completed\" | \"failed\",\n): \"pending\" | \"inProgress\" | \"completed\" | \"failed\" | undefined {\n  switch (raw) {\n    case \"pending\":\n      return \"pending\";\n    case \"in_progress\":\n    case \"inProgress\":\n      return \"inProgress\";\n    case \"completed\":\n      return \"completed\";\n    case \"failed\":\n      return \"failed\";\n    default:\n      return fallback;\n  }\n}\n\nfunction normalizeCommandValue(value: unknown): string | undefined {\n  if (typeof value === \"string\" && value.trim().length > 0) {\n    return value.trim();\n  }\n  if (!Array.isArray(value)) {\n    return undefined;\n  }\n  const parts: Array<string> = [];\n  for (const entry of value) {\n    if (typeof entry === \"string\") {\n      const part = entry.trim();\n      if (part.length > 0) {\n        parts.push(part);\n      }\n    }\n  }\n  return parts.length > 0 ? parts.join(\" \") : undefined;\n}\n\nfunction extractCommandFromTitle(title: string | undefined): string | undefined {\n  if (!title) {\n    return undefined;\n  }\n  const match = /`([^`]+)`/.exec(title);\n  return match?.[1]?.trim() || undefined;\n}\n\nfunction extractToolCallCommand(rawInput: unknown, title: string | undefined): string | undefined {\n  if (isRecord(rawInput)) {\n    const directCommand = normalizeCommandValue(rawInput.command);\n    if (directCommand) {\n      return directCommand;\n    }\n    const executable = typeof rawInput.executable === \"string\" ? rawInput.executable.trim() : \"\";\n    const args = normalizeCommandValue(rawInput.args);\n    if (executable && args) {\n      return `${executable} ${args}`;\n    }\n    if (executable) {\n      return executable;\n    }\n  }\n  return extractCommandFromTitle(title);\n}\n\nfunction extractTextContentFromToolCallContent(\n  content: ReadonlyArray<EffectAcpSchema.ToolCallContent> | null | undefined,\n): string | undefined {\n  if (!content) return undefined;\n  const chunks: Array<string> = [];\n  for (const entry of content) {\n    if (entry.type !== \"content\") {\n      continue;\n    }\n    const nestedContent = entry.content;\n    if (nestedContent.type !== \"text\") {\n      continue;\n    }\n    const text = nestedContent.text.trim();\n    if (text.length > 0) {\n      chunks.push(text);\n    }\n  }\n  return chunks.length > 0 ? chunks.join(\"\\n\") : undefined;\n}\n\nfunction normalizeToolKind(kind: unknown): string | undefined {\n  return typeof kind === \"string\" && kind.trim().length > 0 ? kind.trim() : undefined;\n}\n\nfunction canonicalItemTypeFromAcpToolKind(kind: string | undefined): ToolLifecycleItemType {\n  switch (kind) {\n    case \"execute\":\n      return \"command_execution\";\n    case \"edit\":\n    case \"delete\":\n    case \"move\":\n      return \"file_change\";\n    case \"search\":\n    case \"fetch\":\n      return \"web_search\";\n    default:\n      return \"dynamic_tool_call\";\n  }\n}\n\nfunction makeToolCallState(\n  input: {\n    readonly toolCallId: string;\n    readonly title?: string | null | undefined;\n    readonly kind?: EffectAcpSchema.ToolKind | null | undefined;\n    readonly status?: EffectAcpSchema.ToolCallStatus | null | undefined;\n    readonly rawInput?: unknown;\n    readonly rawOutput?: unknown;\n    readonly content?: ReadonlyArray<EffectAcpSchema.ToolCallContent> | null | undefined;\n    readonly locations?: ReadonlyArray<EffectAcpSchema.ToolCallLocation> | null | undefined;\n  },\n  options?: {\n    readonly fallbackStatus?: \"pending\" | \"inProgress\" | \"completed\" | \"failed\";\n  },\n): AcpToolCallState | undefined {\n  const toolCallId = input.toolCallId.trim();\n  if (!toolCallId) {\n    return undefined;\n  }\n  const title = input.title?.trim() || undefined;\n  const command = extractToolCallCommand(input.rawInput, title);\n  const textContent = extractTextContentFromToolCallContent(input.content);\n  const normalizedTitle =\n    title && title.toLowerCase() !== \"terminal\" && title.toLowerCase() !== \"tool call\"\n      ? title\n      : undefined;\n  const data: Record<string, unknown> = { toolCallId };\n  const kind = normalizeToolKind(input.kind);\n  if (kind) {\n    data.kind = kind;\n  }\n  if (command) {\n    data.command = command;\n  }\n  if (input.rawInput !== undefined) {\n    data.rawInput = input.rawInput;\n  }\n  if (input.rawOutput !== undefined) {\n    data.rawOutput = input.rawOutput;\n  }\n  if (input.content !== undefined) {\n    data.content = input.content;\n  }\n  if (input.locations !== undefined) {\n    data.locations = input.locations;\n  }\n  const fallbackDetail = command ?? normalizedTitle ?? textContent;\n  const hasPresentationSeed =\n    title !== undefined ||\n    kind !== undefined ||\n    command !== undefined ||\n    normalizedTitle !== undefined ||\n    textContent !== undefined;\n  const presentation = hasPresentationSeed\n    ? deriveToolActivityPresentation({\n        itemType: canonicalItemTypeFromAcpToolKind(kind),\n        title,\n        detail: fallbackDetail,\n        data,\n        fallbackSummary: title ?? \"Tool\",\n      })\n    : undefined;\n  const status = normalizeToolCallStatus(input.status, options?.fallbackStatus);\n  return {\n    toolCallId,\n    ...(kind ? { kind } : {}),\n    ...(presentation?.summary ? { title: presentation.summary } : {}),\n    ...(status ? { status } : {}),\n    ...(command ? { command } : {}),\n    ...(presentation?.detail ? { detail: presentation.detail } : {}),\n    data,\n  };\n}\n\nfunction parseTypedToolCallState(\n  event: AcpToolCallUpdate,\n  options?: {\n    readonly fallbackStatus?: \"pending\" | \"inProgress\" | \"completed\" | \"failed\";\n  },\n): AcpToolCallState | undefined {\n  return makeToolCallState(\n    {\n      toolCallId: event.toolCallId,\n      title: event.title,\n      kind: event.kind,\n      status: event.status,\n      rawInput: event.rawInput,\n      rawOutput: event.rawOutput,\n      content: event.content,\n      locations: event.locations,\n    },\n    options,\n  );\n}\n\nexport function mergeToolCallState(\n  previous: AcpToolCallState | undefined,\n  next: AcpToolCallState,\n): AcpToolCallState {\n  const nextKind = typeof next.data.kind === \"string\" ? next.data.kind : undefined;\n  const kind = nextKind ?? previous?.kind;\n  const title = next.title ?? previous?.title;\n  const status = next.status ?? previous?.status;\n  const command = next.command ?? previous?.command;\n  const detail = next.detail ?? previous?.detail;\n  return {\n    toolCallId: next.toolCallId,\n    ...(kind ? { kind } : {}),\n    ...(title ? { title } : {}),\n    ...(status ? { status } : {}),\n    ...(command ? { command } : {}),\n    ...(detail ? { detail } : {}),\n    data: {\n      ...previous?.data,\n      ...next.data,\n    },\n  };\n}\n\nexport function parsePermissionRequest(\n  params: EffectAcpSchema.RequestPermissionRequest,\n): AcpPermissionRequest {\n  const toolCall = makeToolCallState(\n    {\n      toolCallId: params.toolCall.toolCallId,\n      title: params.toolCall.title,\n      kind: params.toolCall.kind,\n      status: params.toolCall.status,\n      rawInput: params.toolCall.rawInput,\n      rawOutput: params.toolCall.rawOutput,\n      content: params.toolCall.content,\n      locations: params.toolCall.locations,\n    },\n    { fallbackStatus: \"pending\" },\n  );\n  const kind = normalizeToolKind(params.toolCall.kind) ?? \"unknown\";\n  const detail =\n    toolCall?.command ??\n    toolCall?.title ??\n    toolCall?.detail ??\n    (typeof params.sessionId === \"string\" ? `Session ${params.sessionId}` : undefined);\n  return {\n    kind,\n    ...(detail ? { detail } : {}),\n    ...(toolCall ? { toolCall } : {}),\n  };\n}\n\nexport function parseSessionUpdateEvent(params: EffectAcpSchema.SessionNotification): {\n  readonly modeId?: string;\n  readonly events: ReadonlyArray<AcpParsedSessionEvent>;\n} {\n  const upd = params.update;\n  const events: Array<AcpParsedSessionEvent> = [];\n  let modeId: string | undefined;\n\n  switch (upd.sessionUpdate) {\n    case \"current_mode_update\": {\n      modeId = upd.currentModeId.trim();\n      if (modeId) {\n        events.push({\n          _tag: \"ModeChanged\",\n          modeId,\n        });\n      }\n      break;\n    }\n    case \"plan\": {\n      const plan = upd.entries.map((entry, index) => ({\n        step: entry.content.trim().length > 0 ? entry.content.trim() : `Step ${index + 1}`,\n        status: normalizePlanStepStatus(entry.status),\n      }));\n      if (plan.length > 0) {\n        events.push({\n          _tag: \"PlanUpdated\",\n          payload: {\n            plan,\n          },\n          rawPayload: params,\n        });\n      }\n      break;\n    }\n    case \"tool_call\": {\n      const toolCall = parseTypedToolCallState(upd, {\n        fallbackStatus: \"pending\",\n      });\n      if (toolCall) {\n        events.push({\n          _tag: \"ToolCallUpdated\",\n          toolCall,\n          rawPayload: params,\n        });\n      }\n      break;\n    }\n    case \"tool_call_update\": {\n      const toolCall = parseTypedToolCallState(upd);\n      if (toolCall) {\n        events.push({\n          _tag: \"ToolCallUpdated\",\n          toolCall,\n          rawPayload: params,\n        });\n      }\n      break;\n    }\n    case \"agent_message_chunk\": {\n      if (upd.content.type === \"text\" && upd.content.text.length > 0) {\n        events.push({\n          _tag: \"ContentDelta\",\n          text: upd.content.text,\n          rawPayload: params,\n        });\n      }\n      break;\n    }\n    default:\n      break;\n  }\n\n  return { ...(modeId !== undefined ? { modeId } : {}), events };\n}\n","import type * as EffectAcpSchema from \"effect-acp/schema\";\n\nimport {\n  INDEPENDENT_THREAD_MCP_SERVER_NAME,\n  INDEPENDENT_THREAD_TOOL_DESCRIPTION,\n  INDEPENDENT_THREAD_TOOL_INPUT_SCHEMA,\n  INDEPENDENT_THREAD_TOOL_MCP_INSTRUCTIONS,\n  INDEPENDENT_THREAD_TOOL_NAME,\n  INDEPENDENT_THREAD_TOOL_RESULT_MARKER,\n} from \"../IndependentThreadTool.ts\";\n\nconst MCP_PROTOCOL_VERSION = \"2024-11-05\";\nconst SALCHI_ACP_MCP_SERVER_VERSION = \"0.1.0\";\n\nexport const SALCHI_ACP_MCP_SERVER_SCRIPT = `\nimport { createInterface } from \"node:readline\";\n\nconst protocolVersion = ${JSON.stringify(MCP_PROTOCOL_VERSION)};\nconst serverName = ${JSON.stringify(INDEPENDENT_THREAD_MCP_SERVER_NAME)};\nconst serverVersion = ${JSON.stringify(SALCHI_ACP_MCP_SERVER_VERSION)};\nconst toolName = ${JSON.stringify(INDEPENDENT_THREAD_TOOL_NAME)};\nconst toolDescription = ${JSON.stringify(INDEPENDENT_THREAD_TOOL_DESCRIPTION)};\nconst toolInputSchema = ${JSON.stringify(INDEPENDENT_THREAD_TOOL_INPUT_SCHEMA)};\nconst toolResultMarker = ${JSON.stringify(INDEPENDENT_THREAD_TOOL_RESULT_MARKER)};\nconst instructions = ${JSON.stringify(INDEPENDENT_THREAD_TOOL_MCP_INSTRUCTIONS)};\n\nfunction write(message) {\n  process.stdout.write(JSON.stringify(message) + \"\\\\n\");\n}\n\nfunction respond(id, result) {\n  if (id === undefined || id === null) return;\n  write({ jsonrpc: \"2.0\", id, result });\n}\n\nfunction fail(id, code, message) {\n  if (id === undefined || id === null) return;\n  write({ jsonrpc: \"2.0\", id, error: { code, message } });\n}\n\nfunction normalizeArgs(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value) ? value : {};\n}\n\nfunction isNonEmptyString(value) {\n  return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction hasValidCreateThreadArgs(args) {\n  return isNonEmptyString(args.title) && isNonEmptyString(args.initialPrompt);\n}\n\nconst rl = createInterface({ input: process.stdin, crlfDelay: Infinity });\n\nfor await (const line of rl) {\n  if (!line.trim()) continue;\n  let request;\n  try {\n    request = JSON.parse(line);\n  } catch {\n    continue;\n  }\n\n  const { id, method, params } = request;\n  try {\n    switch (method) {\n      case \"initialize\":\n        respond(id, {\n          protocolVersion,\n          capabilities: { tools: {} },\n          serverInfo: { name: serverName, version: serverVersion },\n          instructions,\n        });\n        break;\n      case \"notifications/initialized\":\n        break;\n      case \"ping\":\n        respond(id, {});\n        break;\n      case \"tools/list\":\n        respond(id, {\n          tools: [\n            {\n              name: toolName,\n              description: toolDescription,\n              inputSchema: toolInputSchema,\n              annotations: {\n                title: \"Create independent Salchi thread\",\n                destructiveHint: false,\n                idempotentHint: false,\n                openWorldHint: true,\n              },\n            },\n          ],\n        });\n        break;\n      case \"tools/call\": {\n        const name = typeof params?.name === \"string\" ? params.name : \"\";\n        if (name !== toolName) {\n          fail(id, -32602, \"Unknown tool: \" + name);\n          break;\n        }\n        const args = normalizeArgs(params?.arguments);\n        if (!hasValidCreateThreadArgs(args)) {\n          fail(id, -32602, \"Invalid arguments: title and initialPrompt are required.\");\n          break;\n        }\n        const structuredContent = {\n          type: toolResultMarker,\n          version: 1,\n          arguments: args,\n        };\n        respond(id, {\n          content: [\n            {\n              type: \"text\",\n              text: toolResultMarker + \" \" + JSON.stringify(structuredContent),\n            },\n          ],\n          structuredContent,\n        });\n        break;\n      }\n      default:\n        fail(id, -32601, \"Method not found: \" + String(method));\n        break;\n    }\n  } catch (error) {\n    fail(id, -32603, error instanceof Error ? error.message : \"Internal error\");\n  }\n}\n`.trim();\n\nexport function makeSalchiAcpMcpServers(): ReadonlyArray<EffectAcpSchema.McpServer> {\n  return [\n    {\n      name: INDEPENDENT_THREAD_MCP_SERVER_NAME,\n      command: process.execPath,\n      args: [\"--input-type=module\", \"--eval\", SALCHI_ACP_MCP_SERVER_SCRIPT],\n      env: [],\n    },\n  ];\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport * as Cause from \"effect/Cause\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Context from \"effect/Context\";\nimport * as Stream from \"effect/Stream\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as EffectAcpClient from \"effect-acp/client\";\nimport * as EffectAcpErrors from \"effect-acp/errors\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\nimport type * as EffectAcpProtocol from \"effect-acp/protocol\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport { ACP_PROCESS_TERMINATE_GRACE, terminateAcpProcessTree } from \"./AcpProcessCleanup.ts\";\nimport {\n  collectSessionConfigOptionValues,\n  extractModelConfigId,\n  findSessionConfigOption,\n  mergeToolCallState,\n  parseSessionModeState,\n  parseSessionUpdateEvent,\n  type AcpParsedSessionEvent,\n  type AcpSessionModeState,\n  type AcpToolCallState,\n} from \"./AcpRuntimeModel.ts\";\nimport { makeSalchiAcpMcpServers } from \"./SalchiAcpMcpServer.ts\";\n\nfunction formatConfigOptionValue(value: string | boolean): string {\n  return JSON.stringify(value);\n}\n\nexport interface AcpSpawnInput {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd?: string;\n  readonly env?: NodeJS.ProcessEnv;\n}\n\nexport interface AcpSessionRuntimeOptions {\n  readonly spawn: AcpSpawnInput;\n  readonly cwd: string;\n  readonly resumeSessionId?: string;\n  readonly clientCapabilities?: EffectAcpSchema.InitializeRequest[\"clientCapabilities\"];\n  readonly clientInfo: {\n    readonly name: string;\n    readonly version: string;\n  };\n  readonly authMethodId: string;\n  readonly requestLogger?: (event: AcpSessionRequestLogEvent) => Effect.Effect<void, never>;\n  readonly protocolLogging?: {\n    readonly logIncoming?: boolean;\n    readonly logOutgoing?: boolean;\n    readonly logger?: (event: EffectAcpProtocol.AcpProtocolLogEvent) => Effect.Effect<void, never>;\n  };\n}\n\nexport interface AcpSessionRequestLogEvent {\n  readonly method: string;\n  readonly payload: unknown;\n  readonly status: \"started\" | \"succeeded\" | \"failed\";\n  readonly result?: unknown;\n  readonly cause?: Cause.Cause<EffectAcpErrors.AcpError>;\n}\n\nexport interface AcpSessionRuntimeStartResult {\n  readonly sessionId: string;\n  readonly initializeResult: EffectAcpSchema.InitializeResponse;\n  readonly sessionSetupResult:\n    | EffectAcpSchema.LoadSessionResponse\n    | EffectAcpSchema.NewSessionResponse\n    | EffectAcpSchema.ResumeSessionResponse;\n  readonly modelConfigId: string | undefined;\n}\n\nexport interface AcpSessionRuntimeShape {\n  readonly handleRequestPermission: EffectAcpClient.AcpClientShape[\"handleRequestPermission\"];\n  readonly handleElicitation: EffectAcpClient.AcpClientShape[\"handleElicitation\"];\n  readonly handleReadTextFile: EffectAcpClient.AcpClientShape[\"handleReadTextFile\"];\n  readonly handleWriteTextFile: EffectAcpClient.AcpClientShape[\"handleWriteTextFile\"];\n  readonly handleCreateTerminal: EffectAcpClient.AcpClientShape[\"handleCreateTerminal\"];\n  readonly handleTerminalOutput: EffectAcpClient.AcpClientShape[\"handleTerminalOutput\"];\n  readonly handleTerminalWaitForExit: EffectAcpClient.AcpClientShape[\"handleTerminalWaitForExit\"];\n  readonly handleTerminalKill: EffectAcpClient.AcpClientShape[\"handleTerminalKill\"];\n  readonly handleTerminalRelease: EffectAcpClient.AcpClientShape[\"handleTerminalRelease\"];\n  readonly handleSessionUpdate: EffectAcpClient.AcpClientShape[\"handleSessionUpdate\"];\n  readonly handleElicitationComplete: EffectAcpClient.AcpClientShape[\"handleElicitationComplete\"];\n  readonly handleUnknownExtRequest: EffectAcpClient.AcpClientShape[\"handleUnknownExtRequest\"];\n  readonly handleUnknownExtNotification: EffectAcpClient.AcpClientShape[\"handleUnknownExtNotification\"];\n  readonly handleExtRequest: EffectAcpClient.AcpClientShape[\"handleExtRequest\"];\n  readonly handleExtNotification: EffectAcpClient.AcpClientShape[\"handleExtNotification\"];\n  readonly start: () => Effect.Effect<AcpSessionRuntimeStartResult, EffectAcpErrors.AcpError>;\n  readonly getEvents: () => Stream.Stream<AcpParsedSessionEvent, never>;\n  readonly getModeState: Effect.Effect<AcpSessionModeState | undefined>;\n  readonly getConfigOptions: Effect.Effect<ReadonlyArray<EffectAcpSchema.SessionConfigOption>>;\n  readonly prompt: (\n    payload: Omit<EffectAcpSchema.PromptRequest, \"sessionId\">,\n  ) => Effect.Effect<EffectAcpSchema.PromptResponse, EffectAcpErrors.AcpError>;\n  readonly cancel: Effect.Effect<void, EffectAcpErrors.AcpError>;\n  readonly setMode: (\n    modeId: string,\n  ) => Effect.Effect<EffectAcpSchema.SetSessionModeResponse, EffectAcpErrors.AcpError>;\n  readonly setConfigOption: (\n    configId: string,\n    value: string | boolean,\n  ) => Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>;\n  readonly setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>;\n  readonly setSessionModel: (\n    modelId: string,\n  ) => Effect.Effect<EffectAcpSchema.SetSessionModelResponse, EffectAcpErrors.AcpError>;\n  readonly request: (\n    method: string,\n    payload: unknown,\n  ) => Effect.Effect<unknown, EffectAcpErrors.AcpError>;\n  readonly notify: (\n    method: string,\n    payload: unknown,\n  ) => Effect.Effect<void, EffectAcpErrors.AcpError>;\n}\n\ninterface AcpStartedState extends AcpSessionRuntimeStartResult {}\n\ntype AcpStartState =\n  | { readonly _tag: \"NotStarted\" }\n  | {\n      readonly _tag: \"Starting\";\n      readonly deferred: Deferred.Deferred<AcpSessionRuntimeStartResult, EffectAcpErrors.AcpError>;\n    }\n  | { readonly _tag: \"Started\"; readonly result: AcpStartedState };\n\ninterface AcpAssistantSegmentState {\n  readonly nextSegmentIndex: number;\n  readonly activeItemId?: string;\n}\n\ninterface EnsureActiveAssistantSegmentResult {\n  readonly itemId: string;\n  readonly startedEvent?: Extract<AcpParsedSessionEvent, { readonly _tag: \"AssistantItemStarted\" }>;\n}\n\nexport class AcpSessionRuntime extends Context.Service<AcpSessionRuntime, AcpSessionRuntimeShape>()(\n  \"salchi/provider/acp/AcpSessionRuntime\",\n) {\n  static layer(\n    options: AcpSessionRuntimeOptions,\n  ): Layer.Layer<\n    AcpSessionRuntime,\n    EffectAcpErrors.AcpError,\n    ChildProcessSpawner.ChildProcessSpawner\n  > {\n    return Layer.effect(AcpSessionRuntime, makeAcpSessionRuntime(options));\n  }\n}\n\nconst makeAcpSessionRuntime = (\n  options: AcpSessionRuntimeOptions,\n): Effect.Effect<\n  AcpSessionRuntimeShape,\n  EffectAcpErrors.AcpError,\n  ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n  Effect.gen(function* () {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const runtimeScope = yield* Scope.Scope;\n    const eventQueue = yield* Queue.unbounded<AcpParsedSessionEvent>();\n    const modeStateRef = yield* Ref.make<AcpSessionModeState | undefined>(undefined);\n    const toolCallsRef = yield* Ref.make(new Map<string, AcpToolCallState>());\n    const assistantSegmentRef = yield* Ref.make<AcpAssistantSegmentState>({ nextSegmentIndex: 0 });\n    const loadReplayRef = yield* Ref.make(false);\n    const configOptionsRef = yield* Ref.make(sessionConfigOptionsFromSetup(undefined));\n    const startStateRef = yield* Ref.make<AcpStartState>({ _tag: \"NotStarted\" });\n    const mcpServers = makeSalchiAcpMcpServers();\n    const runtimeEpoch = randomUUID().slice(0, 8);\n    const processScope = yield* Scope.make(\"sequential\");\n    let processScopeTransferred = false;\n    yield* Effect.addFinalizer(() =>\n      processScopeTransferred\n        ? Effect.void\n        : Scope.close(processScope, Exit.void).pipe(Effect.ignore),\n    );\n\n    const logRequest = (event: AcpSessionRequestLogEvent) =>\n      options.requestLogger ? options.requestLogger(event) : Effect.void;\n\n    const runLoggedRequest = <A>(\n      method: string,\n      payload: unknown,\n      effect: Effect.Effect<A, EffectAcpErrors.AcpError>,\n    ): Effect.Effect<A, EffectAcpErrors.AcpError> =>\n      logRequest({ method, payload, status: \"started\" }).pipe(\n        Effect.flatMap(() =>\n          effect.pipe(\n            Effect.tap((result) =>\n              logRequest({\n                method,\n                payload,\n                status: \"succeeded\",\n                result,\n              }),\n            ),\n            Effect.onError((cause) =>\n              logRequest({\n                method,\n                payload,\n                status: \"failed\",\n                cause,\n              }),\n            ),\n          ),\n        ),\n      );\n\n    const spawnEnv = options.spawn.env ? { ...process.env, ...options.spawn.env } : undefined;\n    const spawnCommand = resolveSpawnCommand(\n      options.spawn.command,\n      options.spawn.args,\n      spawnEnv ? { env: spawnEnv } : {},\n    );\n    const child = yield* spawner\n      .spawn(\n        ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n          ...(options.spawn.cwd ? { cwd: options.spawn.cwd } : {}),\n          ...(spawnEnv ? { env: spawnEnv } : {}),\n          detached: process.platform !== \"win32\",\n          shell: spawnCommand.shell,\n          killSignal: \"SIGTERM\",\n          forceKillAfter: ACP_PROCESS_TERMINATE_GRACE,\n        }),\n      )\n      .pipe(\n        Effect.provideService(Scope.Scope, processScope),\n        Effect.mapError(\n          (cause) =>\n            new EffectAcpErrors.AcpSpawnError({\n              command: options.spawn.command,\n              cause,\n            }),\n        ),\n      );\n    yield* Scope.addFinalizer(\n      runtimeScope,\n      terminateAcpProcessTree({ child, label: options.clientInfo.name }).pipe(\n        Effect.andThen(Scope.close(processScope, Exit.void)),\n        Effect.ignore,\n      ),\n    );\n    processScopeTransferred = true;\n\n    const acpContext = yield* Layer.build(\n      EffectAcpClient.layerChildProcess(child, {\n        ...(options.protocolLogging?.logIncoming !== undefined\n          ? { logIncoming: options.protocolLogging.logIncoming }\n          : {}),\n        ...(options.protocolLogging?.logOutgoing !== undefined\n          ? { logOutgoing: options.protocolLogging.logOutgoing }\n          : {}),\n        ...(options.protocolLogging?.logger ? { logger: options.protocolLogging.logger } : {}),\n      }),\n    ).pipe(Effect.provideService(Scope.Scope, processScope));\n\n    const acp = yield* Effect.service(EffectAcpClient.AcpClient).pipe(Effect.provide(acpContext));\n\n    yield* acp.handleSessionUpdate((notification) =>\n      handleSessionUpdate({\n        queue: eventQueue,\n        modeStateRef,\n        toolCallsRef,\n        assistantSegmentRef,\n        loadReplayRef,\n        runtimeEpoch,\n        params: notification,\n      }),\n    );\n\n    const initializeClientCapabilities = {\n      fs: {\n        readTextFile: false,\n        writeTextFile: false,\n        ...options.clientCapabilities?.fs,\n      },\n      terminal: options.clientCapabilities?.terminal ?? false,\n      ...(options.clientCapabilities?.auth ? { auth: options.clientCapabilities.auth } : {}),\n      ...(options.clientCapabilities?.elicitation\n        ? { elicitation: options.clientCapabilities.elicitation }\n        : {}),\n      ...(options.clientCapabilities?._meta ? { _meta: options.clientCapabilities._meta } : {}),\n    } satisfies NonNullable<EffectAcpSchema.InitializeRequest[\"clientCapabilities\"]>;\n\n    const getStartedState = Effect.gen(function* () {\n      const state = yield* Ref.get(startStateRef);\n      if (state._tag === \"Started\") {\n        return state.result;\n      }\n      return yield* new EffectAcpErrors.AcpTransportError({\n        detail: \"ACP session runtime has not been started\",\n        cause: \"ACP session runtime has not been started\",\n      });\n    });\n\n    const validateConfigOptionValue = (\n      configId: string,\n      value: string | boolean,\n    ): Effect.Effect<void, EffectAcpErrors.AcpError> =>\n      Effect.gen(function* () {\n        const configOption = findSessionConfigOption(yield* Ref.get(configOptionsRef), configId);\n        if (!configOption) {\n          return;\n        }\n        if (configOption.type === \"boolean\") {\n          if (typeof value === \"boolean\") {\n            return;\n          }\n          return yield* new EffectAcpErrors.AcpRequestError({\n            code: -32602,\n            errorMessage: `Invalid value ${formatConfigOptionValue(value)} for session config option \"${configOption.id}\": expected boolean`,\n            data: {\n              configId: configOption.id,\n              expectedType: \"boolean\",\n              receivedValue: value,\n            },\n          });\n        }\n        if (typeof value !== \"string\") {\n          return yield* new EffectAcpErrors.AcpRequestError({\n            code: -32602,\n            errorMessage: `Invalid value ${formatConfigOptionValue(value)} for session config option \"${configOption.id}\": expected string`,\n            data: {\n              configId: configOption.id,\n              expectedType: \"string\",\n              receivedValue: value,\n            },\n          });\n        }\n        const allowedValues = collectSessionConfigOptionValues(configOption);\n        if (allowedValues.includes(value)) {\n          return;\n        }\n        return yield* new EffectAcpErrors.AcpRequestError({\n          code: -32602,\n          errorMessage: `Invalid value ${formatConfigOptionValue(value)} for session config option \"${configOption.id}\": expected one of ${allowedValues.join(\", \")}`,\n          data: {\n            configId: configOption.id,\n            allowedValues,\n            receivedValue: value,\n          },\n        });\n      });\n\n    const updateConfigOptions = (\n      response:\n        | EffectAcpSchema.SetSessionConfigOptionResponse\n        | EffectAcpSchema.LoadSessionResponse\n        | EffectAcpSchema.NewSessionResponse\n        | EffectAcpSchema.ResumeSessionResponse,\n    ): Effect.Effect<void> => Ref.set(configOptionsRef, sessionConfigOptionsFromSetup(response));\n\n    const updateCurrentModeId = (modeId: string): Effect.Effect<void> =>\n      Ref.update(modeStateRef, (current) =>\n        current ? { ...current, currentModeId: modeId } : current,\n      );\n\n    const setConfigOption = (\n      configId: string,\n      value: string | boolean,\n    ): Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError> =>\n      validateConfigOptionValue(configId, value).pipe(\n        Effect.flatMap(() => getStartedState),\n        Effect.flatMap((started) =>\n          Ref.get(configOptionsRef).pipe(\n            Effect.flatMap((configOptions) => {\n              const existing = findSessionConfigOption(configOptions, configId);\n              if (existing && configOptionCurrentValueMatches(existing, value)) {\n                return Effect.succeed({\n                  configOptions,\n                } satisfies EffectAcpSchema.SetSessionConfigOptionResponse);\n              }\n              const requestPayload =\n                typeof value === \"boolean\"\n                  ? ({\n                      sessionId: started.sessionId,\n                      configId,\n                      type: \"boolean\",\n                      value,\n                    } satisfies EffectAcpSchema.SetSessionConfigOptionRequest)\n                  : ({\n                      sessionId: started.sessionId,\n                      configId,\n                      value: String(value),\n                    } satisfies EffectAcpSchema.SetSessionConfigOptionRequest);\n              return runLoggedRequest(\n                \"session/set_config_option\",\n                requestPayload,\n                acp.agent.setSessionConfigOption(requestPayload),\n              ).pipe(Effect.tap((response) => updateConfigOptions(response)));\n            }),\n          ),\n        ),\n      );\n\n    const startOnce = Effect.gen(function* () {\n      const initializePayload = {\n        protocolVersion: 1,\n        clientCapabilities: initializeClientCapabilities,\n        clientInfo: options.clientInfo,\n      } satisfies EffectAcpSchema.InitializeRequest;\n\n      const initializeResult = yield* runLoggedRequest(\n        \"initialize\",\n        initializePayload,\n        acp.agent.initialize(initializePayload),\n      );\n\n      const authenticatePayload = {\n        methodId: options.authMethodId,\n      } satisfies EffectAcpSchema.AuthenticateRequest;\n\n      yield* runLoggedRequest(\n        \"authenticate\",\n        authenticatePayload,\n        acp.agent.authenticate(authenticatePayload),\n      );\n\n      let sessionId: string;\n      let sessionSetupResult:\n        | EffectAcpSchema.LoadSessionResponse\n        | EffectAcpSchema.NewSessionResponse\n        | EffectAcpSchema.ResumeSessionResponse;\n      if (options.resumeSessionId) {\n        const loadPayload = {\n          sessionId: options.resumeSessionId,\n          cwd: options.cwd,\n          mcpServers,\n        } satisfies EffectAcpSchema.LoadSessionRequest;\n        const resumed = yield* Ref.set(loadReplayRef, true).pipe(\n          Effect.andThen(\n            runLoggedRequest(\"session/load\", loadPayload, acp.agent.loadSession(loadPayload)),\n          ),\n          Effect.ensuring(Ref.set(loadReplayRef, false)),\n          Effect.exit,\n        );\n        if (Exit.isSuccess(resumed)) {\n          sessionId = options.resumeSessionId;\n          sessionSetupResult = resumed.value;\n        } else {\n          const createPayload = {\n            cwd: options.cwd,\n            mcpServers,\n          } satisfies EffectAcpSchema.NewSessionRequest;\n          const created = yield* runLoggedRequest(\n            \"session/new\",\n            createPayload,\n            acp.agent.createSession(createPayload),\n          );\n          sessionId = created.sessionId;\n          sessionSetupResult = created;\n        }\n      } else {\n        const createPayload = {\n          cwd: options.cwd,\n          mcpServers,\n        } satisfies EffectAcpSchema.NewSessionRequest;\n        const created = yield* runLoggedRequest(\n          \"session/new\",\n          createPayload,\n          acp.agent.createSession(createPayload),\n        );\n        sessionId = created.sessionId;\n        sessionSetupResult = created;\n      }\n\n      yield* Ref.set(modeStateRef, parseSessionModeState(sessionSetupResult));\n      yield* Ref.set(configOptionsRef, sessionConfigOptionsFromSetup(sessionSetupResult));\n\n      const nextState = {\n        sessionId,\n        initializeResult,\n        sessionSetupResult,\n        modelConfigId: extractModelConfigId(sessionSetupResult),\n      } satisfies AcpStartedState;\n      return nextState;\n    });\n\n    const start = Effect.gen(function* () {\n      const deferred = yield* Deferred.make<\n        AcpSessionRuntimeStartResult,\n        EffectAcpErrors.AcpError\n      >();\n      const effect = yield* Ref.modify(startStateRef, (state) => {\n        switch (state._tag) {\n          case \"Started\":\n            return [Effect.succeed(state.result), state] as const;\n          case \"Starting\":\n            return [Deferred.await(state.deferred), state] as const;\n          case \"NotStarted\":\n            return [\n              startOnce.pipe(\n                Effect.tap((result) =>\n                  Ref.set(startStateRef, { _tag: \"Started\", result }).pipe(\n                    Effect.andThen(Deferred.succeed(deferred, result)),\n                  ),\n                ),\n                Effect.onError((cause) =>\n                  Deferred.failCause(deferred, cause).pipe(\n                    Effect.andThen(Ref.set(startStateRef, { _tag: \"NotStarted\" })),\n                  ),\n                ),\n              ),\n              { _tag: \"Starting\", deferred } satisfies AcpStartState,\n            ] as const;\n        }\n      });\n      return yield* effect;\n    });\n\n    return {\n      handleRequestPermission: acp.handleRequestPermission,\n      handleElicitation: acp.handleElicitation,\n      handleReadTextFile: acp.handleReadTextFile,\n      handleWriteTextFile: acp.handleWriteTextFile,\n      handleCreateTerminal: acp.handleCreateTerminal,\n      handleTerminalOutput: acp.handleTerminalOutput,\n      handleTerminalWaitForExit: acp.handleTerminalWaitForExit,\n      handleTerminalKill: acp.handleTerminalKill,\n      handleTerminalRelease: acp.handleTerminalRelease,\n      handleSessionUpdate: acp.handleSessionUpdate,\n      handleElicitationComplete: acp.handleElicitationComplete,\n      handleUnknownExtRequest: acp.handleUnknownExtRequest,\n      handleUnknownExtNotification: acp.handleUnknownExtNotification,\n      handleExtRequest: acp.handleExtRequest,\n      handleExtNotification: acp.handleExtNotification,\n      start: () => start,\n      getEvents: () => Stream.fromQueue(eventQueue),\n      getModeState: Ref.get(modeStateRef),\n      getConfigOptions: Ref.get(configOptionsRef),\n      prompt: (payload) =>\n        getStartedState.pipe(\n          Effect.flatMap((started) => {\n            const requestPayload = {\n              sessionId: started.sessionId,\n              ...payload,\n            } satisfies EffectAcpSchema.PromptRequest;\n            return closeActiveAssistantSegment({\n              queue: eventQueue,\n              assistantSegmentRef,\n            }).pipe(\n              Effect.andThen(\n                runLoggedRequest(\n                  \"session/prompt\",\n                  requestPayload,\n                  acp.agent.prompt(requestPayload),\n                ),\n              ),\n              Effect.tap(() =>\n                closeActiveAssistantSegment({\n                  queue: eventQueue,\n                  assistantSegmentRef,\n                }),\n              ),\n            );\n          }),\n        ),\n      cancel: getStartedState.pipe(\n        Effect.flatMap((started) => acp.agent.cancel({ sessionId: started.sessionId })),\n      ),\n      setMode: (modeId) =>\n        Ref.get(modeStateRef).pipe(\n          Effect.flatMap((modeState) => {\n            if (modeState?.currentModeId === modeId) {\n              return Effect.succeed({} satisfies EffectAcpSchema.SetSessionModeResponse);\n            }\n            return setConfigOption(\"mode\", modeId).pipe(\n              Effect.tap(() => updateCurrentModeId(modeId)),\n              Effect.as({} satisfies EffectAcpSchema.SetSessionModeResponse),\n            );\n          }),\n        ),\n      setConfigOption,\n      setModel: (model) =>\n        getStartedState.pipe(\n          Effect.flatMap((started) => setConfigOption(started.modelConfigId ?? \"model\", model)),\n          Effect.asVoid,\n        ),\n      setSessionModel: (modelId) =>\n        getStartedState.pipe(\n          Effect.flatMap((started) => {\n            const requestPayload = {\n              sessionId: started.sessionId,\n              modelId,\n            } satisfies EffectAcpSchema.SetSessionModelRequest;\n            return runLoggedRequest(\n              \"session/set_model\",\n              requestPayload,\n              acp.agent.setSessionModel(requestPayload),\n            );\n          }),\n        ),\n      request: (method, payload) =>\n        runLoggedRequest(method, payload, acp.raw.request(method, payload)),\n      notify: acp.raw.notify,\n    } satisfies AcpSessionRuntimeShape;\n  });\n\nfunction sessionConfigOptionsFromSetup(\n  response:\n    | {\n        readonly configOptions?: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null;\n      }\n    | undefined,\n): ReadonlyArray<EffectAcpSchema.SessionConfigOption> {\n  return response?.configOptions ?? [];\n}\n\nfunction configOptionCurrentValueMatches(\n  configOption: EffectAcpSchema.SessionConfigOption,\n  value: string | boolean,\n): boolean {\n  const currentValue = configOption.currentValue;\n  if (configOption.type === \"boolean\") {\n    return currentValue === value;\n  }\n  if (typeof currentValue !== \"string\") {\n    return false;\n  }\n  return currentValue.trim() === String(value).trim();\n}\n\nconst handleSessionUpdate = ({\n  queue,\n  modeStateRef,\n  toolCallsRef,\n  assistantSegmentRef,\n  loadReplayRef,\n  runtimeEpoch,\n  params,\n}: {\n  readonly queue: Queue.Queue<AcpParsedSessionEvent>;\n  readonly modeStateRef: Ref.Ref<AcpSessionModeState | undefined>;\n  readonly toolCallsRef: Ref.Ref<Map<string, AcpToolCallState>>;\n  readonly assistantSegmentRef: Ref.Ref<AcpAssistantSegmentState>;\n  readonly loadReplayRef: Ref.Ref<boolean>;\n  readonly runtimeEpoch: string;\n  readonly params: EffectAcpSchema.SessionNotification;\n}): Effect.Effect<void> =>\n  Effect.gen(function* () {\n    const parsed = parseSessionUpdateEvent(params);\n    if (parsed.modeId) {\n      yield* Ref.update(modeStateRef, (current) =>\n        current === undefined ? current : updateModeState(current, parsed.modeId!),\n      );\n    }\n    if (yield* Ref.get(loadReplayRef)) {\n      return;\n    }\n    for (const event of parsed.events) {\n      if (event._tag === \"ToolCallUpdated\") {\n        yield* closeActiveAssistantSegment({\n          queue,\n          assistantSegmentRef,\n        });\n        const { previous, merged } = yield* Ref.modify(toolCallsRef, (current) => {\n          const previous = current.get(event.toolCall.toolCallId);\n          const nextToolCall = mergeToolCallState(previous, event.toolCall);\n          const next = new Map(current);\n          if (nextToolCall.status === \"completed\" || nextToolCall.status === \"failed\") {\n            next.delete(nextToolCall.toolCallId);\n          } else {\n            next.set(nextToolCall.toolCallId, nextToolCall);\n          }\n          return [{ previous, merged: nextToolCall }, next] as const;\n        });\n        if (!shouldEmitToolCallUpdate(previous, merged)) {\n          continue;\n        }\n        yield* Queue.offer(queue, {\n          _tag: \"ToolCallUpdated\",\n          toolCall: merged,\n          rawPayload: event.rawPayload,\n        });\n        continue;\n      }\n      if (event._tag === \"ContentDelta\") {\n        if (event.text.trim().length === 0) {\n          const assistantSegmentState = yield* Ref.get(assistantSegmentRef);\n          if (!assistantSegmentState.activeItemId) {\n            continue;\n          }\n        }\n        const itemId = yield* ensureActiveAssistantSegment({\n          queue,\n          assistantSegmentRef,\n          sessionId: params.sessionId,\n          runtimeEpoch,\n        });\n        yield* Queue.offer(queue, {\n          ...event,\n          itemId,\n        });\n        continue;\n      }\n      yield* Queue.offer(queue, event);\n    }\n  });\n\nfunction updateModeState(modeState: AcpSessionModeState, nextModeId: string): AcpSessionModeState {\n  const normalized = nextModeId.trim();\n  if (!normalized) {\n    return modeState;\n  }\n  return modeState.availableModes.some((mode) => mode.id === normalized)\n    ? {\n        ...modeState,\n        currentModeId: normalized,\n      }\n    : modeState;\n}\n\nfunction shouldEmitToolCallUpdate(\n  previous: AcpToolCallState | undefined,\n  next: AcpToolCallState,\n): boolean {\n  if (next.status === \"completed\" || next.status === \"failed\") {\n    return true;\n  }\n  if (!next.detail) {\n    return false;\n  }\n  return previous === undefined || previous.title !== next.title || previous.detail !== next.detail;\n}\n\nconst assistantItemId = (sessionId: string, runtimeEpoch: string, segmentIndex: number) =>\n  `assistant:${sessionId}:run:${runtimeEpoch}:segment:${segmentIndex}`;\n\nconst ensureActiveAssistantSegment = ({\n  queue,\n  assistantSegmentRef,\n  sessionId,\n  runtimeEpoch,\n}: {\n  readonly queue: Queue.Queue<AcpParsedSessionEvent>;\n  readonly assistantSegmentRef: Ref.Ref<AcpAssistantSegmentState>;\n  readonly sessionId: string;\n  readonly runtimeEpoch: string;\n}) =>\n  Ref.modify<AcpAssistantSegmentState, EnsureActiveAssistantSegmentResult>(\n    assistantSegmentRef,\n    (current) => {\n      if (current.activeItemId) {\n        return [{ itemId: current.activeItemId }, current] as const;\n      }\n      const itemId = assistantItemId(sessionId, runtimeEpoch, current.nextSegmentIndex);\n      return [\n        {\n          itemId,\n          startedEvent: {\n            _tag: \"AssistantItemStarted\",\n            itemId,\n          } satisfies Extract<AcpParsedSessionEvent, { readonly _tag: \"AssistantItemStarted\" }>,\n        },\n        {\n          nextSegmentIndex: current.nextSegmentIndex + 1,\n          activeItemId: itemId,\n        } satisfies AcpAssistantSegmentState,\n      ] as const;\n    },\n  ).pipe(\n    Effect.flatMap((result) =>\n      result.startedEvent\n        ? Queue.offer(queue, result.startedEvent).pipe(Effect.as(result.itemId))\n        : Effect.succeed(result.itemId),\n    ),\n  );\n\nconst closeActiveAssistantSegment = ({\n  queue,\n  assistantSegmentRef,\n}: {\n  readonly queue: Queue.Queue<AcpParsedSessionEvent>;\n  readonly assistantSegmentRef: Ref.Ref<AcpAssistantSegmentState>;\n}) =>\n  Ref.modify(assistantSegmentRef, (current) => {\n    if (!current.activeItemId) {\n      return [undefined, current] as const;\n    }\n    return [\n      {\n        _tag: \"AssistantItemCompleted\",\n        itemId: current.activeItemId,\n      } satisfies AcpParsedSessionEvent,\n      {\n        nextSegmentIndex: current.nextSegmentIndex,\n      } satisfies AcpAssistantSegmentState,\n    ] as const;\n  }).pipe(Effect.flatMap((event) => (event ? Queue.offer(queue, event) : Effect.void)));\n","import * as NodeOs from \"node:os\";\nimport type {\n  CursorSettings,\n  ModelCapabilities,\n  ProviderOptionSelection,\n  ServerProvider,\n  ServerProviderAuth,\n  ServerProviderModel,\n  ServerProviderState,\n} from \"@salchi/contracts\";\nimport { ProviderDriverKind } from \"@salchi/contracts\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\nimport * as Cause from \"effect/Cause\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\nimport {\n  createModelCapabilities,\n  getProviderOptionBooleanSelectionValue,\n  getProviderOptionStringSelectionValue,\n} from \"@salchi/shared/model\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport {\n  buildBooleanOptionDescriptor,\n  buildSelectOptionDescriptor,\n  buildServerProvider,\n  collectStreamAsString,\n  isCommandMissingCause,\n  providerModelsFromSettings,\n  type CommandResult,\n  type ServerProviderDraft,\n} from \"../providerSnapshot.ts\";\nimport {\n  enrichProviderSnapshotWithVersionAdvisory,\n  type ProviderMaintenanceCapabilities,\n} from \"../providerMaintenance.ts\";\nimport { CursorListAvailableModelsResponse } from \"../acp/CursorAcpExtension.ts\";\nimport { AcpSessionRuntime } from \"../acp/AcpSessionRuntime.ts\";\n\nconst PROVIDER = ProviderDriverKind.make(\"cursor\");\nconst CURSOR_PRESENTATION = {\n  displayName: \"Cursor\",\n  badgeLabel: \"Early Access\",\n  showInteractionModeToggle: true,\n} as const;\nconst EMPTY_CAPABILITIES: ModelCapabilities = createModelCapabilities({\n  optionDescriptors: [],\n});\nconst decodeCursorListAvailableModelsResponse = Schema.decodeUnknownEffect(\n  CursorListAvailableModelsResponse,\n);\n\nconst CURSOR_ACP_MODEL_DISCOVERY_TIMEOUT_MS = 15_000;\nconst CURSOR_PARAMETERIZED_MODEL_PICKER_MIN_VERSION_DATE = 2026_04_08;\nexport const CURSOR_PARAMETERIZED_MODEL_PICKER_CAPABILITIES = {\n  _meta: {\n    parameterizedModelPicker: true,\n  },\n} satisfies NonNullable<EffectAcpSchema.InitializeRequest[\"clientCapabilities\"]>;\n\nconst logCursorAcpProbeCause = (\n  message: string,\n  cause: Cause.Cause<unknown>,\n  fields: Record<string, unknown> = {},\n): Effect.Effect<void> => {\n  const prettyCause = Cause.pretty(cause);\n  if (Cause.hasInterruptsOnly(cause)) {\n    return Effect.logDebug(message, {\n      ...fields,\n      cursor_probe_interrupted: true,\n      cause: prettyCause,\n    });\n  }\n  return Effect.logWarning(message, {\n    ...fields,\n    cursor_probe_interrupted: false,\n    cursor_probe_timeout: prettyCause.toLowerCase().includes(\"timeout\"),\n    cause: prettyCause,\n  });\n};\n\nexport function buildInitialCursorProviderSnapshot(\n  cursorSettings: CursorSettings,\n): Effect.Effect<ServerProviderDraft> {\n  return Effect.gen(function* () {\n    const checkedAt = yield* Effect.map(DateTime.now, DateTime.formatIso);\n    const models = getCursorFallbackModels(cursorSettings);\n\n    if (!cursorSettings.enabled) {\n      return buildServerProvider({\n        presentation: CURSOR_PRESENTATION,\n        enabled: false,\n        checkedAt,\n        models,\n        probe: {\n          installed: false,\n          version: null,\n          status: \"warning\",\n          auth: { status: \"unknown\" },\n          message: \"Cursor is disabled in Salchi settings.\",\n        },\n      });\n    }\n\n    return buildServerProvider({\n      presentation: CURSOR_PRESENTATION,\n      enabled: true,\n      checkedAt,\n      models,\n      probe: {\n        installed: true,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Checking Cursor Agent availability...\",\n      },\n    });\n  });\n}\n\ninterface CursorSessionSelectOption {\n  readonly value: string;\n  readonly name: string;\n}\n\ninterface CursorAcpDiscoveredModel {\n  readonly slug: string;\n  readonly name: string;\n  readonly capabilities: ModelCapabilities;\n}\n\nfunction flattenSessionConfigSelectOptions(\n  configOption: EffectAcpSchema.SessionConfigOption | undefined,\n): ReadonlyArray<CursorSessionSelectOption> {\n  if (!configOption || configOption.type !== \"select\") {\n    return [];\n  }\n  return configOption.options.flatMap((entry) =>\n    \"value\" in entry\n      ? [\n          {\n            value: entry.value.trim(),\n            name: entry.name.trim(),\n          } satisfies CursorSessionSelectOption,\n        ]\n      : entry.options.map(\n          (option) =>\n            ({\n              value: option.value.trim(),\n              name: option.name.trim(),\n            }) satisfies CursorSessionSelectOption,\n        ),\n  );\n}\n\nfunction normalizeCursorReasoningValue(value: string | null | undefined): string | undefined {\n  const normalized = value?.trim().toLowerCase();\n  switch (normalized) {\n    case \"low\":\n    case \"medium\":\n    case \"high\":\n    case \"max\":\n      return normalized;\n    case \"xhigh\":\n    case \"extra-high\":\n    case \"extra high\":\n      return \"xhigh\";\n    default:\n      return undefined;\n  }\n}\n\nfunction getCursorConfigOptionCategory(option: EffectAcpSchema.SessionConfigOption): string {\n  return option.category?.trim().toLowerCase() ?? \"\";\n}\n\nfunction isCursorEffortConfigOption(option: EffectAcpSchema.SessionConfigOption): boolean {\n  const id = option.id.trim().toLowerCase();\n  const name = option.name.trim().toLowerCase();\n  return (\n    id === \"effort\" ||\n    id === \"reasoning\" ||\n    name === \"effort\" ||\n    name === \"reasoning\" ||\n    name.includes(\"effort\") ||\n    name.includes(\"reasoning\")\n  );\n}\n\nfunction findCursorEffortConfigOption(\n  configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption>,\n): EffectAcpSchema.SessionConfigOption | undefined {\n  const candidates = configOptions.filter(\n    (option) => option.type === \"select\" && isCursorEffortConfigOption(option),\n  );\n  return (\n    candidates.find((option) => getCursorConfigOptionCategory(option) === \"model_option\") ??\n    candidates.find((option) => option.id.trim().toLowerCase() === \"effort\") ??\n    candidates.find((option) => getCursorConfigOptionCategory(option) === \"thought_level\") ??\n    candidates[0]\n  );\n}\n\nfunction isCursorContextConfigOption(option: EffectAcpSchema.SessionConfigOption): boolean {\n  const id = option.id.trim().toLowerCase();\n  const name = option.name.trim().toLowerCase();\n  return id === \"context\" || id === \"context_size\" || name.includes(\"context\");\n}\n\nfunction isCursorFastConfigOption(option: EffectAcpSchema.SessionConfigOption): boolean {\n  const id = option.id.trim().toLowerCase();\n  const name = option.name.trim().toLowerCase();\n  return id === \"fast\" || name === \"fast\" || name.includes(\"fast mode\");\n}\n\nfunction isCursorThinkingConfigOption(option: EffectAcpSchema.SessionConfigOption): boolean {\n  const id = option.id.trim().toLowerCase();\n  const name = option.name.trim().toLowerCase();\n  return id === \"thinking\" || name.includes(\"thinking\");\n}\n\nfunction isBooleanLikeConfigOption(option: EffectAcpSchema.SessionConfigOption): boolean {\n  if (option.type === \"boolean\") {\n    return true;\n  }\n  if (option.type !== \"select\") {\n    return false;\n  }\n  const values = new Set(\n    flattenSessionConfigSelectOptions(option).map((entry) => entry.value.trim().toLowerCase()),\n  );\n  return values.has(\"true\") && values.has(\"false\");\n}\n\nfunction getBooleanCurrentValue(\n  option: EffectAcpSchema.SessionConfigOption | undefined,\n): boolean | undefined {\n  if (!option) {\n    return undefined;\n  }\n  if (option.type === \"boolean\") {\n    return option.currentValue;\n  }\n  if (option.type !== \"select\") {\n    return undefined;\n  }\n  const normalized = option.currentValue?.trim().toLowerCase();\n  if (normalized === \"true\") {\n    return true;\n  }\n  if (normalized === \"false\") {\n    return false;\n  }\n  return undefined;\n}\n\nexport function buildCursorCapabilitiesFromConfigOptions(\n  configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null | undefined,\n): ModelCapabilities {\n  if (!configOptions || configOptions.length === 0) {\n    return EMPTY_CAPABILITIES;\n  }\n\n  const reasoningConfig = findCursorEffortConfigOption(configOptions);\n  const reasoningEffortLevels =\n    reasoningConfig?.type === \"select\"\n      ? flattenSessionConfigSelectOptions(reasoningConfig).flatMap((entry) => {\n          const normalizedValue = normalizeCursorReasoningValue(entry.value);\n          if (!normalizedValue) {\n            return [];\n          }\n          return [\n            {\n              value: normalizedValue,\n              label: entry.name,\n              ...(normalizeCursorReasoningValue(reasoningConfig.currentValue) === normalizedValue\n                ? { isDefault: true }\n                : {}),\n            },\n          ];\n        })\n      : [];\n\n  const contextOption = configOptions.find(\n    (option) => option.category === \"model_config\" && isCursorContextConfigOption(option),\n  );\n  const contextWindowOptions =\n    contextOption?.type === \"select\"\n      ? flattenSessionConfigSelectOptions(contextOption).map((entry) => {\n          if (contextOption.currentValue === entry.value) {\n            return {\n              value: entry.value,\n              label: entry.name,\n              isDefault: true,\n            };\n          }\n          return {\n            value: entry.value,\n            label: entry.name,\n          };\n        })\n      : [];\n\n  const fastOption = configOptions.find(\n    (option) => option.category === \"model_config\" && isCursorFastConfigOption(option),\n  );\n  const thinkingOption = configOptions.find(\n    (option) => option.category === \"model_config\" && isCursorThinkingConfigOption(option),\n  );\n  const fastCurrentValue = getBooleanCurrentValue(fastOption);\n  const thinkingCurrentValue = getBooleanCurrentValue(thinkingOption);\n  const optionDescriptors = [\n    ...(reasoningEffortLevels.length > 0\n      ? [\n          buildSelectOptionDescriptor({\n            id: \"reasoning\",\n            label: reasoningConfig?.name?.trim() || \"Reasoning\",\n            options: reasoningEffortLevels,\n          }),\n        ]\n      : []),\n    ...(contextWindowOptions.length > 0\n      ? [\n          buildSelectOptionDescriptor({\n            id: \"contextWindow\",\n            label: contextOption?.name?.trim() || \"Context Window\",\n            options: contextWindowOptions,\n          }),\n        ]\n      : []),\n    ...(fastOption && isBooleanLikeConfigOption(fastOption)\n      ? [\n          typeof fastCurrentValue === \"boolean\"\n            ? buildBooleanOptionDescriptor({\n                id: \"fastMode\",\n                label: fastOption.name?.trim() || \"Fast Mode\",\n                currentValue: fastCurrentValue,\n              })\n            : buildBooleanOptionDescriptor({\n                id: \"fastMode\",\n                label: fastOption.name?.trim() || \"Fast Mode\",\n              }),\n        ]\n      : []),\n    ...(thinkingOption && isBooleanLikeConfigOption(thinkingOption)\n      ? [\n          typeof thinkingCurrentValue === \"boolean\"\n            ? buildBooleanOptionDescriptor({\n                id: \"thinking\",\n                label: thinkingOption.name?.trim() || \"Thinking\",\n                currentValue: thinkingCurrentValue,\n              })\n            : buildBooleanOptionDescriptor({\n                id: \"thinking\",\n                label: thinkingOption.name?.trim() || \"Thinking\",\n              }),\n        ]\n      : []),\n  ];\n\n  return createModelCapabilities({\n    optionDescriptors,\n  });\n}\n\nfunction buildCursorDiscoveredModels(\n  discoveredModels: ReadonlyArray<CursorAcpDiscoveredModel>,\n): ReadonlyArray<ServerProviderModel> {\n  const seen = new Set<string>();\n  return discoveredModels.flatMap((model) => {\n    if (!model.slug || seen.has(model.slug)) {\n      return [];\n    }\n    seen.add(model.slug);\n    return [\n      {\n        slug: model.slug,\n        name: model.name,\n        isCustom: false,\n        capabilities: model.capabilities,\n      } satisfies ServerProviderModel,\n    ];\n  });\n}\n\nexport function buildCursorDiscoveredModelsFromAvailableModelsResponse(\n  response: typeof CursorListAvailableModelsResponse.Type,\n): ReadonlyArray<ServerProviderModel> {\n  return buildCursorDiscoveredModels(\n    response.models.map((model) => ({\n      slug: model.value.trim(),\n      name: model.name.trim(),\n      capabilities: buildCursorCapabilitiesFromConfigOptions(model.configOptions ?? []),\n    })),\n  );\n}\n\nexport function buildCursorDiscoveredModelsFromSessionModelState(\n  modelState: EffectAcpSchema.SessionModelState | null | undefined,\n  configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null | undefined,\n): ReadonlyArray<ServerProviderModel> {\n  const availableModels = modelState?.availableModels ?? [];\n  if (availableModels.length === 0) {\n    return [];\n  }\n\n  const currentModelId = modelState?.currentModelId.trim() ?? \"\";\n  const currentModelCapabilities = buildCursorCapabilitiesFromConfigOptions(configOptions ?? []);\n  return buildCursorDiscoveredModels(\n    availableModels.map((model) => {\n      const slug = model.modelId.trim();\n      return {\n        slug,\n        name: model.name.trim(),\n        capabilities:\n          currentModelId && slug === currentModelId ? currentModelCapabilities : EMPTY_CAPABILITIES,\n      };\n    }),\n  );\n}\n\nexport function buildCursorDiscoveredModelsFromConfigOptions(\n  configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null | undefined,\n): ReadonlyArray<ServerProviderModel> {\n  if (!configOptions || configOptions.length === 0) {\n    return [];\n  }\n\n  const modelOption = configOptions.find((option) => option.category === \"model\");\n  const modelChoices = flattenSessionConfigSelectOptions(modelOption);\n  if (!modelOption || modelChoices.length === 0) {\n    return [];\n  }\n\n  const currentModelValue =\n    modelOption.type === \"select\" ? modelOption.currentValue?.trim() || undefined : undefined;\n  const currentModelCapabilities = buildCursorCapabilitiesFromConfigOptions(configOptions);\n  return buildCursorDiscoveredModels(\n    modelChoices.map((modelChoice) => {\n      const slug = modelChoice.value.trim();\n      return {\n        slug,\n        name: modelChoice.name.trim(),\n        capabilities:\n          currentModelValue && slug === currentModelValue\n            ? currentModelCapabilities\n            : EMPTY_CAPABILITIES,\n      };\n    }),\n  );\n}\n\nconst makeCursorAcpProbeRuntime = (\n  cursorSettings: CursorSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) =>\n  Effect.gen(function* () {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const probeScope = yield* Scope.Scope;\n    const acpContext = yield* Layer.buildWithScope(\n      AcpSessionRuntime.layer({\n        spawn: {\n          command: cursorSettings.binaryPath,\n          args: [\n            ...(cursorSettings.apiEndpoint ? ([\"-e\", cursorSettings.apiEndpoint] as const) : []),\n            \"acp\",\n          ],\n          cwd: process.cwd(),\n          env: environment,\n        },\n        cwd: process.cwd(),\n        clientInfo: { name: \"salchi-provider-probe\", version: \"0.0.0\" },\n        authMethodId: \"cursor_login\",\n        clientCapabilities: CURSOR_PARAMETERIZED_MODEL_PICKER_CAPABILITIES,\n      }).pipe(Layer.provide(Layer.succeed(ChildProcessSpawner.ChildProcessSpawner, spawner))),\n      probeScope,\n    );\n    return yield* Effect.service(AcpSessionRuntime).pipe(Effect.provide(acpContext));\n  });\n\nconst withCursorAcpProbeRuntime = <A, E, R>(\n  cursorSettings: CursorSettings,\n  useRuntime: (acp: AcpSessionRuntime[\"Service\"]) => Effect.Effect<A, E, R>,\n  environment: NodeJS.ProcessEnv = process.env,\n) =>\n  makeCursorAcpProbeRuntime(cursorSettings, environment).pipe(\n    Effect.flatMap(useRuntime),\n    Effect.scoped,\n  );\n\nfunction normalizeCursorConfigOptionToken(value: string | null | undefined): string {\n  return (\n    value\n      ?.trim()\n      .toLowerCase()\n      .replace(/[\\s_-]+/g, \"-\") ?? \"\"\n  );\n}\n\nfunction findCursorSelectOptionValue(\n  configOption: EffectAcpSchema.SessionConfigOption | undefined,\n  matcher: (option: CursorSessionSelectOption) => boolean,\n): string | undefined {\n  return flattenSessionConfigSelectOptions(configOption).find(matcher)?.value;\n}\n\nfunction findCursorBooleanConfigValue(\n  configOption: EffectAcpSchema.SessionConfigOption | undefined,\n  requested: boolean,\n): string | boolean | undefined {\n  if (!configOption) {\n    return undefined;\n  }\n  if (configOption.type === \"boolean\") {\n    return requested;\n  }\n  return findCursorSelectOptionValue(\n    configOption,\n    (option) => normalizeCursorConfigOptionToken(option.value) === String(requested),\n  );\n}\n\nexport function resolveCursorAcpBaseModelId(model: string | null | undefined): string {\n  const trimmed = model?.trim();\n  const base = trimmed && trimmed.length > 0 ? trimmed : \"default\";\n  return base.includes(\"[\") ? base.slice(0, base.indexOf(\"[\")) : base;\n}\n\nexport function resolveCursorAcpConfigUpdates(\n  configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null | undefined,\n  selections: ReadonlyArray<ProviderOptionSelection> | null | undefined,\n): ReadonlyArray<{\n  readonly configId: string;\n  readonly value: string | boolean;\n}> {\n  if (!configOptions || configOptions.length === 0) {\n    return [];\n  }\n\n  const updates: Array<{\n    readonly configId: string;\n    readonly value: string | boolean;\n  }> = [];\n\n  const reasoningOption = findCursorEffortConfigOption(configOptions);\n  const requestedReasoning = normalizeCursorReasoningValue(\n    getProviderOptionStringSelectionValue(selections, \"reasoning\"),\n  );\n  if (reasoningOption && requestedReasoning) {\n    const value = findCursorSelectOptionValue(reasoningOption, (option) => {\n      const normalizedValue = normalizeCursorReasoningValue(option.value);\n      const normalizedName = normalizeCursorReasoningValue(option.name);\n      return normalizedValue === requestedReasoning || normalizedName === requestedReasoning;\n    });\n    if (value) {\n      updates.push({ configId: reasoningOption.id, value });\n    }\n  }\n\n  const contextOption = configOptions.find(\n    (option) => option.category === \"model_config\" && isCursorContextConfigOption(option),\n  );\n  const requestedContextWindow = getProviderOptionStringSelectionValue(selections, \"contextWindow\");\n  if (contextOption && requestedContextWindow) {\n    const value = findCursorSelectOptionValue(\n      contextOption,\n      (option) =>\n        normalizeCursorConfigOptionToken(option.value) ===\n          normalizeCursorConfigOptionToken(requestedContextWindow) ||\n        normalizeCursorConfigOptionToken(option.name) ===\n          normalizeCursorConfigOptionToken(requestedContextWindow),\n    );\n    if (value) {\n      updates.push({ configId: contextOption.id, value });\n    }\n  }\n\n  const fastOption = configOptions.find(\n    (option) => option.category === \"model_config\" && isCursorFastConfigOption(option),\n  );\n  const requestedFastMode = getProviderOptionBooleanSelectionValue(selections, \"fastMode\");\n  if (fastOption && typeof requestedFastMode === \"boolean\") {\n    const value = findCursorBooleanConfigValue(fastOption, requestedFastMode);\n    if (value !== undefined) {\n      updates.push({ configId: fastOption.id, value });\n    }\n  }\n\n  const thinkingOption = configOptions.find(\n    (option) => option.category === \"model_config\" && isCursorThinkingConfigOption(option),\n  );\n  const requestedThinking = getProviderOptionBooleanSelectionValue(selections, \"thinking\");\n  if (thinkingOption && typeof requestedThinking === \"boolean\") {\n    const value = findCursorBooleanConfigValue(thinkingOption, requestedThinking);\n    if (value !== undefined) {\n      updates.push({ configId: thinkingOption.id, value });\n    }\n  }\n\n  return updates;\n}\n\nexport const discoverCursorModelsViaAcp = (\n  cursorSettings: CursorSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) =>\n  withCursorAcpProbeRuntime(\n    cursorSettings,\n    (acp) =>\n      Effect.gen(function* () {\n        const started = yield* acp.start();\n        const discoveredFromExtension = yield* acp\n          .request(\"cursor/list_available_models\", {})\n          .pipe(\n            Effect.flatMap(decodeCursorListAvailableModelsResponse),\n            Effect.map(buildCursorDiscoveredModelsFromAvailableModelsResponse),\n            Effect.exit,\n          );\n        if (Exit.isSuccess(discoveredFromExtension)) {\n          return discoveredFromExtension.value;\n        }\n\n        yield* Effect.logDebug(\n          \"Cursor ACP list_available_models failed; falling back to session model state\",\n          { cause: Cause.pretty(discoveredFromExtension.cause) },\n        );\n\n        const discoveredFromModelState = buildCursorDiscoveredModelsFromSessionModelState(\n          started.sessionSetupResult.models,\n          started.sessionSetupResult.configOptions ?? [],\n        );\n        if (discoveredFromModelState.length > 0) {\n          return discoveredFromModelState;\n        }\n\n        const discoveredFromConfigOptions = buildCursorDiscoveredModelsFromConfigOptions(\n          started.sessionSetupResult.configOptions ?? [],\n        );\n        if (discoveredFromConfigOptions.length > 0) {\n          return discoveredFromConfigOptions;\n        }\n\n        return yield* Effect.failCause(discoveredFromExtension.cause);\n      }),\n    environment,\n  );\n\nexport function getCursorFallbackModels(\n  cursorSettings: Pick<CursorSettings, \"customModels\">,\n): ReadonlyArray<ServerProviderModel> {\n  return providerModelsFromSettings([], PROVIDER, cursorSettings.customModels, EMPTY_CAPABILITIES);\n}\n\n/** Timeout for `agent about` — it's slower than a simple `--version` probe. */\nconst ABOUT_TIMEOUT_MS = 8_000;\n\n/** Strip ANSI escape sequences so we can parse plain key-value lines. */\nfunction stripAnsi(text: string): string {\n  // eslint-disable-next-line no-control-regex\n  return text.replace(/\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g, \"\");\n}\n\n/**\n * Extract a value from `agent about` key-value output.\n * Lines look like: `CLI Version         2026.03.20-44cb435`\n */\nfunction extractAboutField(plain: string, key: string): string | undefined {\n  const regex = new RegExp(`^${key}\\\\s{2,}(.+)$`, \"mi\");\n  const match = regex.exec(plain);\n  return match?.[1]?.trim();\n}\n\nexport interface CursorAboutResult {\n  readonly version: string | null;\n  readonly status: Exclude<ServerProviderState, \"disabled\">;\n  readonly auth: ServerProviderAuth;\n  readonly message?: string;\n}\n\nfunction joinProviderMessages(...messages: ReadonlyArray<string | undefined>): string | undefined {\n  const parts: Array<string> = [];\n  for (const message of messages) {\n    const trimmed = message?.trim();\n    if (trimmed) {\n      parts.push(trimmed);\n    }\n  }\n  return parts.length > 0 ? parts.join(\" \") : undefined;\n}\n\nexport function buildCursorProviderSnapshot(input: {\n  readonly checkedAt: string;\n  readonly cursorSettings: CursorSettings;\n  readonly parsed: CursorAboutResult;\n  readonly discoveredModels?: ReadonlyArray<ServerProviderModel>;\n  readonly discoveryWarning?: string;\n}): ServerProviderDraft {\n  const message = joinProviderMessages(input.parsed.message, input.discoveryWarning);\n  return buildServerProvider({\n    presentation: CURSOR_PRESENTATION,\n    enabled: input.cursorSettings.enabled,\n    checkedAt: input.checkedAt,\n    models: providerModelsFromSettings(\n      input.discoveredModels ?? [],\n      PROVIDER,\n      input.cursorSettings.customModels,\n      EMPTY_CAPABILITIES,\n    ),\n    probe: {\n      installed: true,\n      version: input.parsed.version,\n      status:\n        input.discoveryWarning && input.parsed.status === \"ready\" ? \"warning\" : input.parsed.status,\n      auth: input.parsed.auth,\n      ...(message ? { message } : {}),\n    },\n  });\n}\n\ninterface CursorAboutJsonPayload {\n  readonly cliVersion?: unknown;\n  readonly subscriptionTier?: unknown;\n  readonly userEmail?: unknown;\n}\n\nexport function parseCursorVersionDate(version: string | null | undefined): number | undefined {\n  const match = version?.trim().match(/^(\\d{4})\\.(\\d{2})\\.(\\d{2})(?:\\b|-|$)/);\n  if (!match) {\n    return undefined;\n  }\n  const [, year, month, day] = match;\n  return Number(`${year}${month}${day}`);\n}\n\nexport function parseCursorCliConfigChannel(raw: string): string | undefined {\n  try {\n    const parsed = JSON.parse(raw) as unknown;\n    if (\n      typeof parsed === \"object\" &&\n      parsed !== null &&\n      \"channel\" in parsed &&\n      typeof parsed.channel === \"string\"\n    ) {\n      const channel = parsed.channel.trim().toLowerCase();\n      return channel.length > 0 ? channel : undefined;\n    }\n  } catch {\n    return undefined;\n  }\n  return undefined;\n}\n\nfunction toTitleCaseWords(value: string): string {\n  const parts: Array<string> = [];\n  for (const part of value.split(/[\\s_-]+/g)) {\n    if (part.length > 0) {\n      parts.push(part.charAt(0).toUpperCase() + part.slice(1).toLowerCase());\n    }\n  }\n  return parts.join(\" \");\n}\n\nfunction cursorSubscriptionLabel(subscriptionType: string | undefined): string | undefined {\n  const normalized = subscriptionType?.toLowerCase().replace(/[\\s_-]+/g, \"\");\n  if (!normalized) return undefined;\n\n  switch (normalized) {\n    case \"team\":\n      return \"Team\";\n    case \"pro\":\n      return \"Pro\";\n    case \"free\":\n      return \"Free\";\n    case \"business\":\n      return \"Business\";\n    case \"enterprise\":\n      return \"Enterprise\";\n    default:\n      return toTitleCaseWords(subscriptionType!);\n  }\n}\n\nfunction cursorAuthMetadata(\n  subscriptionType: string | undefined,\n): Pick<ServerProviderAuth, \"label\" | \"type\"> | undefined {\n  if (!subscriptionType) {\n    return undefined;\n  }\n  const subscriptionLabel = cursorSubscriptionLabel(subscriptionType);\n  return {\n    type: subscriptionType,\n    label: `Cursor ${subscriptionLabel ?? toTitleCaseWords(subscriptionType)} Subscription`,\n  };\n}\n\nfunction parseCursorAboutJsonPayload(raw: string): CursorAboutJsonPayload | undefined {\n  const trimmed = raw.trim();\n  if (!trimmed.startsWith(\"{\")) {\n    return undefined;\n  }\n  try {\n    const parsed = JSON.parse(trimmed) as unknown;\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n      return undefined;\n    }\n    return parsed as CursorAboutJsonPayload;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction hasOwn(record: object, key: string): boolean {\n  return Object.prototype.hasOwnProperty.call(record, key);\n}\n\nfunction isCursorAboutJsonFormatUnsupported(result: CommandResult): boolean {\n  const lowerOutput = `${result.stdout}\\n${result.stderr}`.toLowerCase();\n  return (\n    lowerOutput.includes(\"unknown option '--format'\") ||\n    lowerOutput.includes(\"unexpected argument '--format'\") ||\n    lowerOutput.includes(\"unrecognized option '--format'\") ||\n    lowerOutput.includes(\"unknown argument '--format'\")\n  );\n}\n\nconst readCursorCliConfigChannel = Effect.fn(\"readCursorCliConfigChannel\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const configPath = path.join(NodeOs.homedir(), \".cursor\", \"cli-config.json\");\n  const raw = yield* fileSystem.readFileString(configPath).pipe(Effect.orElseSucceed(() => \"\"));\n  return parseCursorCliConfigChannel(raw);\n});\n\nexport function getCursorParameterizedModelPickerUnsupportedMessage(input: {\n  readonly version: string | null | undefined;\n  readonly channel: string | null | undefined;\n}): string | undefined {\n  const reasons: Array<string> = [];\n  const versionDate = parseCursorVersionDate(input.version);\n  if (\n    versionDate !== undefined &&\n    versionDate < CURSOR_PARAMETERIZED_MODEL_PICKER_MIN_VERSION_DATE\n  ) {\n    reasons.push(\n      `Cursor Agent CLI version ${input.version} is too old for Cursor ACP parameterized model picker`,\n    );\n  }\n\n  const normalizedChannel = input.channel?.trim().toLowerCase();\n  if (\n    normalizedChannel !== undefined &&\n    normalizedChannel.length > 0 &&\n    normalizedChannel !== \"lab\"\n  ) {\n    reasons.push(\n      `Cursor Agent CLI channel is ${JSON.stringify(input.channel)}, but parameterized model picker is only available on the lab channel`,\n    );\n  }\n\n  if (reasons.length === 0) {\n    return undefined;\n  }\n\n  return `${reasons.join(\". \")}. Run \\`agent set-channel lab && agent update\\` and use Cursor Agent CLI 2026.04.08 or newer.`;\n}\n\n/**\n * Parse the output of `agent about` to extract version and authentication\n * status in a single probe.\n *\n * Example output (logged in):\n * ```\n * About Cursor CLI\n *\n * CLI Version         2026.03.20-44cb435\n * User Email          user@example.com\n * ```\n *\n * Example output (logged out):\n * ```\n * About Cursor CLI\n *\n * CLI Version         2026.03.20-44cb435\n * User Email          Not logged in\n * ```\n */\nexport function parseCursorAboutOutput(result: CommandResult): CursorAboutResult {\n  const jsonPayload = parseCursorAboutJsonPayload(result.stdout);\n  if (jsonPayload) {\n    const version =\n      typeof jsonPayload.cliVersion === \"string\" ? jsonPayload.cliVersion.trim() : null;\n    const hasUserEmailField = hasOwn(jsonPayload, \"userEmail\");\n    const userEmail =\n      typeof jsonPayload.userEmail === \"string\" ? jsonPayload.userEmail.trim() : undefined;\n    const subscriptionType =\n      typeof jsonPayload.subscriptionTier === \"string\"\n        ? jsonPayload.subscriptionTier.trim()\n        : undefined;\n    const authMetadata = cursorAuthMetadata(subscriptionType);\n\n    if (hasUserEmailField && jsonPayload.userEmail == null) {\n      return {\n        version,\n        status: \"error\",\n        auth: { status: \"unauthenticated\" },\n        message: \"Cursor Agent is not authenticated. Run `agent login` and try again.\",\n      };\n    }\n\n    if (!userEmail) {\n      if (result.code === 0) {\n        return {\n          version,\n          status: \"ready\",\n          auth: {\n            status: \"unknown\",\n            ...authMetadata,\n          },\n        };\n      }\n      return {\n        version,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Could not verify Cursor Agent authentication status.\",\n      };\n    }\n\n    const lowerEmail = userEmail.toLowerCase();\n    if (\n      lowerEmail === \"not logged in\" ||\n      lowerEmail.includes(\"login required\") ||\n      lowerEmail.includes(\"authentication required\")\n    ) {\n      return {\n        version,\n        status: \"error\",\n        auth: { status: \"unauthenticated\" },\n        message: \"Cursor Agent is not authenticated. Run `agent login` and try again.\",\n      };\n    }\n\n    return {\n      version,\n      status: \"ready\",\n      auth: {\n        status: \"authenticated\",\n        email: userEmail,\n        ...authMetadata,\n      },\n    };\n  }\n\n  const combined = `${result.stdout}\\n${result.stderr}`;\n  const lowerOutput = combined.toLowerCase();\n\n  // If the command itself isn't recognised, we're on an old CLI version.\n  if (\n    lowerOutput.includes(\"unknown command\") ||\n    lowerOutput.includes(\"unrecognized command\") ||\n    lowerOutput.includes(\"unexpected argument\")\n  ) {\n    return {\n      version: null,\n      status: \"warning\",\n      auth: { status: \"unknown\" },\n      message: \"The `agent about` command is unavailable in this version of the Cursor Agent CLI.\",\n    };\n  }\n\n  const plain = stripAnsi(combined);\n  const version = extractAboutField(plain, \"CLI Version\") ?? null;\n  const userEmail = extractAboutField(plain, \"User Email\");\n\n  // Determine auth from the User Email field.\n  if (userEmail === undefined) {\n    // Field missing entirely — can't determine auth.\n    if (result.code === 0) {\n      return { version, status: \"ready\", auth: { status: \"unknown\" } };\n    }\n    return {\n      version,\n      status: \"warning\",\n      auth: { status: \"unknown\" },\n      message: \"Could not verify Cursor Agent authentication status.\",\n    };\n  }\n\n  const lowerEmail = userEmail.toLowerCase();\n  if (\n    lowerEmail === \"not logged in\" ||\n    lowerEmail.includes(\"login required\") ||\n    lowerEmail.includes(\"authentication required\")\n  ) {\n    return {\n      version,\n      status: \"error\",\n      auth: { status: \"unauthenticated\" },\n      message: \"Cursor Agent is not authenticated. Run `agent login` and try again.\",\n    };\n  }\n\n  // Any non-empty email value means authenticated.\n  return {\n    version,\n    status: \"ready\",\n    auth: { status: \"authenticated\", email: userEmail },\n  };\n}\n\nconst runCursorCommand = (\n  cursorSettings: CursorSettings,\n  args: ReadonlyArray<string>,\n  environment: NodeJS.ProcessEnv = process.env,\n) =>\n  Effect.gen(function* () {\n    const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const spawnCommand = resolveSpawnCommand(cursorSettings.binaryPath, args, {\n      env: environment,\n    });\n    const command = ChildProcess.make(spawnCommand.command, spawnCommand.args, {\n      env: environment,\n      shell: spawnCommand.shell,\n    });\n\n    const child = yield* spawner.spawn(command);\n    const [stdout, stderr, exitCode] = yield* Effect.all(\n      [\n        collectStreamAsString(child.stdout),\n        collectStreamAsString(child.stderr),\n        child.exitCode.pipe(Effect.map(Number)),\n      ],\n      { concurrency: \"unbounded\" },\n    );\n\n    return { stdout, stderr, code: exitCode } satisfies CommandResult;\n  }).pipe(Effect.scoped);\n\nconst runCursorAboutCommand = (\n  cursorSettings: CursorSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) =>\n  Effect.gen(function* () {\n    const jsonResult = yield* runCursorCommand(\n      cursorSettings,\n      [\"about\", \"--format\", \"json\"],\n      environment,\n    );\n    if (!isCursorAboutJsonFormatUnsupported(jsonResult)) {\n      return jsonResult;\n    }\n    return yield* runCursorCommand(cursorSettings, [\"about\"], environment);\n  });\n\nexport const checkCursorProviderStatus = Effect.fn(\"checkCursorProviderStatus\")(function* (\n  cursorSettings: CursorSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<\n  ServerProviderDraft,\n  never,\n  ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | Path.Path\n> {\n  const checkedAt = DateTime.formatIso(yield* DateTime.now);\n  const fallbackModels = getCursorFallbackModels(cursorSettings);\n\n  if (!cursorSettings.enabled) {\n    yield* Effect.logDebug(\"Cursor provider status skipped because provider is disabled\", {\n      cursor_disabled_by_instance_enabled: true,\n    });\n    return buildServerProvider({\n      presentation: CURSOR_PRESENTATION,\n      enabled: false,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Cursor is disabled in Salchi settings.\",\n      },\n    });\n  }\n\n  // Single `agent about` probe: returns version + auth status in one call.\n  const aboutProbe = yield* runCursorAboutCommand(cursorSettings, environment).pipe(\n    Effect.timeoutOption(ABOUT_TIMEOUT_MS),\n    Effect.result,\n  );\n\n  if (Result.isFailure(aboutProbe)) {\n    const error = aboutProbe.failure;\n    return buildServerProvider({\n      presentation: CURSOR_PRESENTATION,\n      enabled: cursorSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: !isCommandMissingCause(error),\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: isCommandMissingCause(error)\n          ? \"Cursor Agent CLI (`agent`) is not installed or not on PATH.\"\n          : `Failed to execute Cursor Agent CLI health check: ${error instanceof Error ? error.message : String(error)}.`,\n      },\n    });\n  }\n\n  if (Option.isNone(aboutProbe.success)) {\n    return buildServerProvider({\n      presentation: CURSOR_PRESENTATION,\n      enabled: cursorSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: true,\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: \"Cursor Agent CLI is installed but timed out while running `agent about`.\",\n      },\n    });\n  }\n\n  const parsed = parseCursorAboutOutput(aboutProbe.success.value);\n  const cursorCliConfigChannel = yield* readCursorCliConfigChannel();\n  const parameterizedModelPickerUnsupportedMessage =\n    getCursorParameterizedModelPickerUnsupportedMessage({\n      version: parsed.version,\n      channel: cursorCliConfigChannel,\n    });\n  if (parameterizedModelPickerUnsupportedMessage) {\n    return buildServerProvider({\n      presentation: CURSOR_PRESENTATION,\n      enabled: cursorSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: true,\n        version: parsed.version,\n        status: \"error\",\n        auth: parsed.auth,\n        message:\n          parsed.auth.status === \"unauthenticated\" && parsed.message\n            ? `${parameterizedModelPickerUnsupportedMessage} ${parsed.message}`\n            : parameterizedModelPickerUnsupportedMessage,\n      },\n    });\n  }\n  let discoveredModels = Option.none<ReadonlyArray<ServerProviderModel>>();\n  let discoveryWarning: string | undefined;\n  if (parsed.auth.status !== \"unauthenticated\") {\n    const discoveryExit = yield* Effect.exit(\n      discoverCursorModelsViaAcp(cursorSettings, environment).pipe(\n        Effect.timeoutOption(CURSOR_ACP_MODEL_DISCOVERY_TIMEOUT_MS),\n      ),\n    );\n    if (Exit.isFailure(discoveryExit)) {\n      yield* logCursorAcpProbeCause(\"Cursor ACP model discovery failed\", discoveryExit.cause);\n      if (!Cause.hasInterruptsOnly(discoveryExit.cause)) {\n        discoveryWarning = \"Cursor ACP model discovery failed. Check server logs for details.\";\n      }\n    } else if (Option.isNone(discoveryExit.value)) {\n      yield* Effect.logWarning(\"Cursor ACP model discovery timed out\", {\n        cursor_probe_timeout: true,\n        timeoutMs: CURSOR_ACP_MODEL_DISCOVERY_TIMEOUT_MS,\n      });\n      discoveryWarning = `Cursor ACP model discovery timed out after ${CURSOR_ACP_MODEL_DISCOVERY_TIMEOUT_MS}ms.`;\n    } else if (discoveryExit.value.value.length === 0) {\n      discoveryWarning = \"Cursor ACP model discovery returned no built-in models.\";\n    } else {\n      discoveredModels = discoveryExit.value;\n    }\n  }\n  return buildCursorProviderSnapshot({\n    checkedAt,\n    cursorSettings,\n    parsed,\n    discoveredModels: Option.getOrElse(\n      Option.filter(discoveredModels, (models) => models.length > 0),\n      () => [] as const,\n    ),\n    ...(discoveryWarning ? { discoveryWarning } : {}),\n  });\n});\n\n/**\n * Background maintenance enrichment for a Cursor snapshot.\n *\n * Used by `CursorDriver` as the `makeManagedServerProvider.enrichSnapshot`\n * hook: republishes update/version advisory metadata without performing any\n * model or capability discovery. Cursor model data comes exclusively from\n * `cursor/list_available_models` during provider status checks.\n */\nexport const enrichCursorSnapshot = (input: {\n  readonly settings: CursorSettings;\n  readonly snapshot: ServerProvider;\n  readonly maintenanceCapabilities: ProviderMaintenanceCapabilities;\n  readonly publishSnapshot: (snapshot: ServerProvider) => Effect.Effect<void>;\n  readonly stampIdentity?: (snapshot: ServerProvider) => ServerProvider;\n  readonly httpClient: HttpClient.HttpClient;\n}): Effect.Effect<void> => {\n  const { settings, snapshot, publishSnapshot } = input;\n  const stampIdentity = input.stampIdentity ?? ((value) => value);\n\n  if (!settings.enabled || snapshot.auth.status === \"unauthenticated\") {\n    return Effect.void;\n  }\n\n  return enrichProviderSnapshotWithVersionAdvisory(snapshot, input.maintenanceCapabilities).pipe(\n    Effect.provideService(HttpClient.HttpClient, input.httpClient),\n    Effect.flatMap((enrichedSnapshot) =>\n      publishSnapshot(stampIdentity(enrichedSnapshot)).pipe(Effect.as(enrichedSnapshot)),\n    ),\n    Effect.catchCause((cause) =>\n      Effect.logWarning(\"Cursor version advisory enrichment failed\", {\n        cause: Cause.pretty(cause),\n      }).pipe(Effect.asVoid),\n    ),\n  );\n};\n","import { type CursorSettings, type ProviderOptionSelection } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Scope from \"effect/Scope\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport type * as EffectAcpErrors from \"effect-acp/errors\";\n\nimport {\n  CURSOR_PARAMETERIZED_MODEL_PICKER_CAPABILITIES,\n  resolveCursorAcpBaseModelId,\n  resolveCursorAcpConfigUpdates,\n} from \"../Layers/CursorProvider.ts\";\nimport {\n  AcpSessionRuntime,\n  type AcpSessionRuntimeOptions,\n  type AcpSessionRuntimeShape,\n  type AcpSpawnInput,\n} from \"./AcpSessionRuntime.ts\";\n\ntype CursorAcpRuntimeCursorSettings = Pick<CursorSettings, \"apiEndpoint\" | \"binaryPath\">;\n\nexport interface CursorAcpRuntimeInput extends Omit<\n  AcpSessionRuntimeOptions,\n  \"authMethodId\" | \"clientCapabilities\" | \"spawn\"\n> {\n  readonly childProcessSpawner: ChildProcessSpawner.ChildProcessSpawner[\"Service\"];\n  readonly cursorSettings: CursorAcpRuntimeCursorSettings | null | undefined;\n  readonly environment?: NodeJS.ProcessEnv;\n}\n\nexport interface CursorAcpModelSelectionErrorContext {\n  readonly cause: EffectAcpErrors.AcpError;\n  readonly step: \"set-config-option\" | \"set-model\";\n  readonly configId?: string;\n}\n\nexport function buildCursorAcpSpawnInput(\n  cursorSettings: CursorAcpRuntimeCursorSettings | null | undefined,\n  cwd: string,\n  environment?: NodeJS.ProcessEnv,\n): AcpSpawnInput {\n  return {\n    command: cursorSettings?.binaryPath || \"agent\",\n    args: [\n      ...(cursorSettings?.apiEndpoint ? ([\"-e\", cursorSettings.apiEndpoint] as const) : []),\n      \"acp\",\n    ],\n    cwd,\n    ...(environment ? { env: environment } : {}),\n  };\n}\n\nexport const makeCursorAcpRuntime = (\n  input: CursorAcpRuntimeInput,\n): Effect.Effect<AcpSessionRuntimeShape, EffectAcpErrors.AcpError, Scope.Scope> =>\n  Effect.gen(function* () {\n    const acpContext = yield* Layer.build(\n      AcpSessionRuntime.layer({\n        ...input,\n        spawn: buildCursorAcpSpawnInput(input.cursorSettings, input.cwd, input.environment),\n        authMethodId: \"cursor_login\",\n        clientCapabilities: CURSOR_PARAMETERIZED_MODEL_PICKER_CAPABILITIES,\n      }).pipe(\n        Layer.provide(\n          Layer.succeed(ChildProcessSpawner.ChildProcessSpawner, input.childProcessSpawner),\n        ),\n      ),\n    );\n    return yield* Effect.service(AcpSessionRuntime).pipe(Effect.provide(acpContext));\n  });\n\ninterface CursorAcpModelSelectionRuntime {\n  readonly getConfigOptions: AcpSessionRuntimeShape[\"getConfigOptions\"];\n  readonly setConfigOption: (\n    configId: string,\n    value: string | boolean,\n  ) => Effect.Effect<unknown, EffectAcpErrors.AcpError>;\n  readonly setModel: (model: string) => Effect.Effect<unknown, EffectAcpErrors.AcpError>;\n}\n\nexport function applyCursorAcpModelSelection<E>(input: {\n  readonly runtime: CursorAcpModelSelectionRuntime;\n  readonly model: string | null | undefined;\n  readonly selections: ReadonlyArray<ProviderOptionSelection> | null | undefined;\n  readonly mapError: (context: CursorAcpModelSelectionErrorContext) => E;\n}): Effect.Effect<void, E> {\n  return Effect.gen(function* () {\n    yield* input.runtime.setModel(resolveCursorAcpBaseModelId(input.model)).pipe(\n      Effect.mapError((cause) =>\n        input.mapError({\n          cause,\n          step: \"set-model\",\n        }),\n      ),\n    );\n\n    const configUpdates = resolveCursorAcpConfigUpdates(\n      yield* input.runtime.getConfigOptions,\n      input.selections,\n    );\n    for (const update of configUpdates) {\n      yield* input.runtime.setConfigOption(update.configId, update.value).pipe(\n        Effect.mapError((cause) =>\n          input.mapError({\n            cause,\n            step: \"set-config-option\",\n            configId: update.configId,\n          }),\n        ),\n      );\n    }\n  });\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { type CursorSettings, type ModelSelection } from \"@salchi/contracts\";\nimport { sanitizeBranchFragment, sanitizeFeatureBranchName } from \"@salchi/shared/git\";\nimport { extractJsonObject } from \"@salchi/shared/schemaJson\";\n\nimport { TextGenerationError } from \"@salchi/contracts\";\nimport { type ThreadTitleGenerationResult, type TextGenerationShape } from \"./TextGeneration.ts\";\nimport {\n  buildBranchNamePrompt,\n  buildCommitMessagePrompt,\n  buildPrContentPrompt,\n  buildThreadTitlePrompt,\n} from \"./TextGenerationPrompts.ts\";\nimport {\n  sanitizeCommitSubject,\n  sanitizePrTitle,\n  sanitizeThreadTitle,\n} from \"./TextGenerationUtils.ts\";\nimport {\n  applyCursorAcpModelSelection,\n  makeCursorAcpRuntime,\n} from \"../provider/acp/CursorAcpSupport.ts\";\n\nconst CURSOR_TIMEOUT_MS = 180_000;\n\nfunction mapCursorAcpError(\n  operation:\n    | \"generateCommitMessage\"\n    | \"generatePrContent\"\n    | \"generateBranchName\"\n    | \"generateThreadTitle\",\n  detail: string,\n  cause: unknown,\n): TextGenerationError {\n  return new TextGenerationError({\n    operation,\n    detail,\n    ...(cause !== undefined ? { cause } : {}),\n  });\n}\n\nfunction isTextGenerationError(error: unknown): error is TextGenerationError {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"_tag\" in error &&\n    error._tag === \"TextGenerationError\"\n  );\n}\n\n/**\n * Build a Cursor text-generation closure bound to a specific `CursorSettings`\n * payload. See `makeCodexAdapter` for the overall per-instance rationale.\n */\nexport const makeCursorTextGeneration = Effect.fn(\"makeCursorTextGeneration\")(function* (\n  cursorSettings: CursorSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) {\n  const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\n  const runCursorJson = <S extends Schema.Top>({\n    operation,\n    cwd,\n    prompt,\n    outputSchemaJson,\n    modelSelection,\n  }: {\n    operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\";\n    cwd: string;\n    prompt: string;\n    outputSchemaJson: S;\n    modelSelection: ModelSelection;\n  }): Effect.Effect<S[\"Type\"], TextGenerationError, S[\"DecodingServices\"]> =>\n    Effect.gen(function* () {\n      const outputRef = yield* Ref.make(\"\");\n      const runtime = yield* makeCursorAcpRuntime({\n        cursorSettings,\n        environment,\n        childProcessSpawner: commandSpawner,\n        cwd,\n        clientInfo: { name: \"salchi-git-text\", version: \"0.0.0\" },\n      });\n\n      yield* runtime.handleSessionUpdate((notification) => {\n        const update = notification.update;\n        if (update.sessionUpdate !== \"agent_message_chunk\") {\n          return Effect.void;\n        }\n        const content = update.content;\n        if (content.type !== \"text\") {\n          return Effect.void;\n        }\n        return Ref.update(outputRef, (current) => current + content.text);\n      });\n\n      const promptResult = yield* Effect.gen(function* () {\n        yield* runtime.start();\n        yield* Effect.ignore(runtime.setMode(\"ask\"));\n        yield* applyCursorAcpModelSelection({\n          runtime,\n          model: modelSelection.model,\n          selections: modelSelection.options,\n          mapError: ({ cause, configId, step }) =>\n            mapCursorAcpError(\n              operation,\n              step === \"set-config-option\"\n                ? `Failed to set Cursor ACP config option \"${configId}\" for text generation.`\n                : \"Failed to set Cursor ACP base model for text generation.\",\n              cause,\n            ),\n        });\n\n        return yield* runtime.prompt({\n          prompt: [{ type: \"text\", text: prompt }],\n        });\n      }).pipe(\n        Effect.timeoutOption(CURSOR_TIMEOUT_MS),\n        Effect.flatMap(\n          Option.match({\n            onNone: () =>\n              Effect.fail(\n                new TextGenerationError({\n                  operation,\n                  detail: \"Cursor Agent request timed out.\",\n                }),\n              ),\n            onSome: (value) => Effect.succeed(value),\n          }),\n        ),\n        Effect.mapError((cause) =>\n          isTextGenerationError(cause)\n            ? cause\n            : mapCursorAcpError(operation, \"Cursor ACP request failed.\", cause),\n        ),\n      );\n\n      const rawResult = (yield* Ref.get(outputRef)).trim();\n      if (!rawResult) {\n        return yield* new TextGenerationError({\n          operation,\n          detail:\n            promptResult.stopReason === \"cancelled\"\n              ? \"Cursor ACP request was cancelled.\"\n              : \"Cursor Agent returned empty output.\",\n        });\n      }\n\n      const decodeOutput = Schema.decodeEffect(Schema.fromJsonString(outputSchemaJson));\n      return yield* decodeOutput(extractJsonObject(rawResult)).pipe(\n        Effect.catchTag(\"SchemaError\", (cause) =>\n          Effect.fail(\n            new TextGenerationError({\n              operation,\n              detail: \"Cursor Agent returned invalid structured output.\",\n              cause,\n            }),\n          ),\n        ),\n      );\n    }).pipe(\n      Effect.mapError((cause) =>\n        isTextGenerationError(cause)\n          ? cause\n          : mapCursorAcpError(operation, \"Cursor ACP text generation failed.\", cause),\n      ),\n      Effect.scoped,\n    );\n\n  const generateCommitMessage: TextGenerationShape[\"generateCommitMessage\"] = Effect.fn(\n    \"CursorTextGeneration.generateCommitMessage\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildCommitMessagePrompt({\n      branch: input.branch,\n      stagedSummary: input.stagedSummary,\n      stagedPatch: input.stagedPatch,\n      includeBranch: input.includeBranch === true,\n    });\n\n    const generated = yield* runCursorJson({\n      operation: \"generateCommitMessage\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      subject: sanitizeCommitSubject(generated.subject),\n      body: generated.body.trim(),\n      ...(\"branch\" in generated && typeof generated.branch === \"string\"\n        ? { branch: sanitizeFeatureBranchName(generated.branch) }\n        : {}),\n    };\n  });\n\n  const generatePrContent: TextGenerationShape[\"generatePrContent\"] = Effect.fn(\n    \"CursorTextGeneration.generatePrContent\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildPrContentPrompt({\n      baseBranch: input.baseBranch,\n      headBranch: input.headBranch,\n      commitSummary: input.commitSummary,\n      diffSummary: input.diffSummary,\n      diffPatch: input.diffPatch,\n    });\n\n    const generated = yield* runCursorJson({\n      operation: \"generatePrContent\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizePrTitle(generated.title),\n      body: generated.body.trim(),\n    };\n  });\n\n  const generateBranchName: TextGenerationShape[\"generateBranchName\"] = Effect.fn(\n    \"CursorTextGeneration.generateBranchName\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildBranchNamePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runCursorJson({\n      operation: \"generateBranchName\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      branch: sanitizeBranchFragment(generated.branch),\n    };\n  });\n\n  const generateThreadTitle: TextGenerationShape[\"generateThreadTitle\"] = Effect.fn(\n    \"CursorTextGeneration.generateThreadTitle\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildThreadTitlePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runCursorJson({\n      operation: \"generateThreadTitle\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizeThreadTitle(generated.title),\n    } satisfies ThreadTitleGenerationResult;\n  });\n\n  return {\n    generateCommitMessage,\n    generatePrContent,\n    generateBranchName,\n    generateThreadTitle,\n  } satisfies TextGenerationShape;\n});\n","import {\n  type ProviderApprovalDecision,\n  type ProviderDriverKind,\n  type ThreadId,\n} from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\nimport * as EffectAcpErrors from \"effect-acp/errors\";\n\nimport {\n  ProviderAdapterRequestError,\n  ProviderAdapterSessionClosedError,\n  type ProviderAdapterError,\n} from \"../Errors.ts\";\nconst isAcpProcessExitedError = Schema.is(EffectAcpErrors.AcpProcessExitedError);\nconst isAcpRequestError = Schema.is(EffectAcpErrors.AcpRequestError);\n\nexport function mapAcpToAdapterError(\n  provider: ProviderDriverKind,\n  threadId: ThreadId,\n  method: string,\n  error: EffectAcpErrors.AcpError,\n): ProviderAdapterError {\n  if (isAcpProcessExitedError(error)) {\n    return new ProviderAdapterSessionClosedError({\n      provider,\n      threadId,\n      cause: error,\n    });\n  }\n  if (isAcpRequestError(error)) {\n    return new ProviderAdapterRequestError({\n      provider,\n      method,\n      detail: error.message,\n      cause: error,\n    });\n  }\n  return new ProviderAdapterRequestError({\n    provider,\n    method,\n    detail: error.message,\n    cause: error,\n  });\n}\n\nexport function acpPermissionOutcome(decision: ProviderApprovalDecision): string {\n  switch (decision) {\n    case \"acceptForSession\":\n      return \"allow-always\";\n    case \"accept\":\n      return \"allow-once\";\n    case \"decline\":\n    default:\n      return \"reject-once\";\n  }\n}\n","import {\n  type RuntimeEventRawSource,\n  RuntimeItemId,\n  type CanonicalRequestType,\n  type EventId,\n  type ProviderApprovalDecision,\n  type ProviderDriverKind,\n  type ProviderRuntimeEvent,\n  type RuntimeRequestId,\n  type ThreadId,\n  type ToolLifecycleItemType,\n  type TurnId,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { AcpPermissionRequest, AcpPlanUpdate, AcpToolCallState } from \"./AcpRuntimeModel.ts\";\nimport {\n  INDEPENDENT_THREAD_TOOL_RESULT_MARKER,\n  makeIndependentThreadCreatedRuntimeEvent,\n} from \"../IndependentThreadTool.ts\";\n\ntype AcpAdapterRawSource = Extract<\n  RuntimeEventRawSource,\n  \"acp.jsonrpc\" | `acp.${string}.extension`\n>;\n\ninterface AcpEventStamp {\n  readonly eventId: EventId;\n  readonly createdAt: string;\n}\n\ntype AcpCanonicalRequestType = Extract<\n  CanonicalRequestType,\n  \"exec_command_approval\" | \"file_read_approval\" | \"file_change_approval\" | \"dynamic_tool_call\"\n>;\n\nfunction canonicalRequestTypeFromAcpKind(kind: string | \"unknown\"): AcpCanonicalRequestType {\n  switch (kind) {\n    case \"execute\":\n      return \"exec_command_approval\";\n    case \"read\":\n      return \"file_read_approval\";\n    case \"edit\":\n    case \"delete\":\n    case \"move\":\n      return \"file_change_approval\";\n    default:\n      return \"dynamic_tool_call\";\n  }\n}\n\nfunction canonicalItemTypeFromAcpToolKind(kind: string | undefined): ToolLifecycleItemType {\n  switch (kind) {\n    case \"execute\":\n      return \"command_execution\";\n    case \"edit\":\n    case \"delete\":\n    case \"move\":\n      return \"file_change\";\n    case \"search\":\n    case \"fetch\":\n      return \"web_search\";\n    default:\n      return \"dynamic_tool_call\";\n  }\n}\n\nfunction runtimeItemStatusFromAcpToolStatus(\n  status: AcpToolCallState[\"status\"],\n): \"inProgress\" | \"completed\" | \"failed\" | undefined {\n  switch (status) {\n    case \"pending\":\n    case \"inProgress\":\n      return \"inProgress\";\n    case \"completed\":\n      return \"completed\";\n    case \"failed\":\n      return \"failed\";\n    default:\n      return undefined;\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseMarkedJsonText(value: string): unknown | undefined {\n  const markerIndex = value.indexOf(INDEPENDENT_THREAD_TOOL_RESULT_MARKER);\n  if (markerIndex < 0) {\n    return undefined;\n  }\n  const jsonStart = value.indexOf(\"{\", markerIndex + INDEPENDENT_THREAD_TOOL_RESULT_MARKER.length);\n  if (jsonStart < 0) {\n    return undefined;\n  }\n  try {\n    return JSON.parse(value.slice(jsonStart));\n  } catch {\n    return undefined;\n  }\n}\n\nfunction extractIndependentThreadArguments(value: unknown, depth = 0): unknown | undefined {\n  if (depth > 8) {\n    return undefined;\n  }\n\n  if (typeof value === \"string\") {\n    const markedJson = parseMarkedJsonText(value);\n    if (markedJson !== undefined) {\n      return extractIndependentThreadArguments(markedJson, depth + 1);\n    }\n    const trimmed = value.trim();\n    if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n      try {\n        return extractIndependentThreadArguments(JSON.parse(trimmed), depth + 1);\n      } catch {\n        return undefined;\n      }\n    }\n    return undefined;\n  }\n\n  if (Array.isArray(value)) {\n    for (const item of value) {\n      const found = extractIndependentThreadArguments(item, depth + 1);\n      if (found !== undefined) {\n        return found;\n      }\n    }\n    return undefined;\n  }\n\n  if (!isRecord(value)) {\n    return undefined;\n  }\n\n  if (value.type === INDEPENDENT_THREAD_TOOL_RESULT_MARKER) {\n    if (Object.hasOwn(value, \"arguments\")) {\n      return value.arguments;\n    }\n    if (Object.hasOwn(value, \"args\")) {\n      return value.args;\n    }\n    if (Object.hasOwn(value, \"input\")) {\n      return value.input;\n    }\n    if (Object.hasOwn(value, \"payload\")) {\n      return value.payload;\n    }\n  }\n\n  const priorityFields = [\n    \"structuredContent\",\n    \"rawOutput\",\n    \"output\",\n    \"content\",\n    \"result\",\n    \"data\",\n  ] as const;\n  for (const field of priorityFields) {\n    if (!Object.hasOwn(value, field)) {\n      continue;\n    }\n    const found = extractIndependentThreadArguments(value[field], depth + 1);\n    if (found !== undefined) {\n      return found;\n    }\n  }\n\n  for (const nested of Object.values(value)) {\n    const found = extractIndependentThreadArguments(nested, depth + 1);\n    if (found !== undefined) {\n      return found;\n    }\n  }\n\n  return undefined;\n}\n\nexport function makeAcpRequestOpenedEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly requestId: RuntimeRequestId;\n  readonly permissionRequest: AcpPermissionRequest;\n  readonly detail: string;\n  readonly args: unknown;\n  readonly source: AcpAdapterRawSource;\n  readonly method: string;\n  readonly rawPayload: unknown;\n}): ProviderRuntimeEvent {\n  return {\n    type: \"request.opened\",\n    ...input.stamp,\n    provider: input.provider,\n    threadId: input.threadId,\n    turnId: input.turnId,\n    requestId: input.requestId,\n    payload: {\n      requestType: canonicalRequestTypeFromAcpKind(input.permissionRequest.kind),\n      detail: input.detail,\n      args: input.args,\n    },\n    raw: {\n      source: input.source,\n      method: input.method,\n      payload: input.rawPayload,\n    },\n  };\n}\n\nexport function makeAcpRequestResolvedEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly requestId: RuntimeRequestId;\n  readonly permissionRequest: AcpPermissionRequest;\n  readonly decision: ProviderApprovalDecision;\n}): ProviderRuntimeEvent {\n  return {\n    type: \"request.resolved\",\n    ...input.stamp,\n    provider: input.provider,\n    threadId: input.threadId,\n    turnId: input.turnId,\n    requestId: input.requestId,\n    payload: {\n      requestType: canonicalRequestTypeFromAcpKind(input.permissionRequest.kind),\n      decision: input.decision,\n    },\n  };\n}\n\nexport function makeAcpPlanUpdatedEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly payload: AcpPlanUpdate;\n  readonly source: AcpAdapterRawSource;\n  readonly method: string;\n  readonly rawPayload: unknown;\n}): ProviderRuntimeEvent {\n  return {\n    type: \"turn.plan.updated\",\n    ...input.stamp,\n    provider: input.provider,\n    threadId: input.threadId,\n    turnId: input.turnId,\n    payload: input.payload,\n    raw: {\n      source: input.source,\n      method: input.method,\n      payload: input.rawPayload,\n    },\n  };\n}\n\nexport function makeAcpToolCallEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly toolCall: AcpToolCallState;\n  readonly rawPayload: unknown;\n}): ProviderRuntimeEvent {\n  const runtimeStatus = runtimeItemStatusFromAcpToolStatus(input.toolCall.status);\n  return {\n    type:\n      input.toolCall.status === \"completed\" || input.toolCall.status === \"failed\"\n        ? \"item.completed\"\n        : \"item.updated\",\n    ...input.stamp,\n    provider: input.provider,\n    threadId: input.threadId,\n    turnId: input.turnId,\n    itemId: RuntimeItemId.make(input.toolCall.toolCallId),\n    payload: {\n      itemType: canonicalItemTypeFromAcpToolKind(input.toolCall.kind),\n      ...(runtimeStatus ? { status: runtimeStatus } : {}),\n      ...(input.toolCall.title ? { title: input.toolCall.title } : {}),\n      ...(input.toolCall.detail ? { detail: input.toolCall.detail } : {}),\n      ...(Object.keys(input.toolCall.data).length > 0 ? { data: input.toolCall.data } : {}),\n    },\n    raw: {\n      source: \"acp.jsonrpc\",\n      method: \"session/update\",\n      payload: input.rawPayload,\n    },\n  };\n}\n\nexport function makeAcpIndependentThreadCreatedEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly toolCall: AcpToolCallState;\n  readonly rawPayload: unknown;\n}): ProviderRuntimeEvent | undefined {\n  if (input.toolCall.status !== \"completed\") {\n    return undefined;\n  }\n  const argumentsValue = extractIndependentThreadArguments(input.toolCall.data);\n  if (argumentsValue === undefined) {\n    return undefined;\n  }\n  return makeIndependentThreadCreatedRuntimeEvent({\n    provider: input.provider,\n    eventId: input.stamp.eventId,\n    createdAt: input.stamp.createdAt,\n    sourceThreadId: input.threadId,\n    ...(input.turnId ? { turnId: input.turnId } : {}),\n    idPrefix: `acp-tool:${input.toolCall.toolCallId}`,\n    argumentsValue,\n    sourceItemId: RuntimeItemId.make(input.toolCall.toolCallId),\n    raw: {\n      source: \"acp.jsonrpc\",\n      method: \"session/update\",\n      payload: input.rawPayload,\n    },\n  });\n}\n\nexport function offerAcpIndependentThreadCreatedEvent<A, E, R>(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly toolCall: AcpToolCallState;\n  readonly rawPayload: unknown;\n  readonly offerRuntimeEvent: (event: ProviderRuntimeEvent) => Effect.Effect<A, E, R>;\n}): Effect.Effect<void, E, R> {\n  const event = makeAcpIndependentThreadCreatedEvent(input);\n  return event ? input.offerRuntimeEvent(event).pipe(Effect.asVoid) : Effect.void;\n}\n\nexport function makeAcpAssistantItemEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly itemId: string;\n  readonly lifecycle: \"item.started\" | \"item.completed\";\n}): ProviderRuntimeEvent {\n  return {\n    type: input.lifecycle,\n    ...input.stamp,\n    provider: input.provider,\n    threadId: input.threadId,\n    turnId: input.turnId,\n    itemId: RuntimeItemId.make(input.itemId),\n    payload: {\n      itemType: \"assistant_message\",\n      status: input.lifecycle === \"item.completed\" ? \"completed\" : \"inProgress\",\n    },\n  };\n}\n\nexport function makeAcpContentDeltaEvent(input: {\n  readonly stamp: AcpEventStamp;\n  readonly provider: ProviderDriverKind;\n  readonly threadId: ThreadId;\n  readonly turnId: TurnId | undefined;\n  readonly itemId?: string;\n  readonly text: string;\n  readonly rawPayload: unknown;\n}): ProviderRuntimeEvent {\n  return {\n    type: \"content.delta\",\n    ...input.stamp,\n    provider: input.provider,\n    threadId: input.threadId,\n    turnId: input.turnId,\n    ...(input.itemId ? { itemId: RuntimeItemId.make(input.itemId) } : {}),\n    payload: {\n      streamKind: \"assistant_text\",\n      delta: input.text,\n    },\n    raw: {\n      source: \"acp.jsonrpc\",\n      method: \"session/update\",\n      payload: input.rawPayload,\n    },\n  };\n}\n","import type { ProviderDriverKind, ThreadId } from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport type * as EffectAcpProtocol from \"effect-acp/protocol\";\n\nimport type { EventNdjsonLogger } from \"../Layers/EventNdjsonLogger.ts\";\nimport type { AcpSessionRequestLogEvent, AcpSessionRuntimeOptions } from \"./AcpSessionRuntime.ts\";\n\nfunction formatRequestLogPayload(event: AcpSessionRequestLogEvent) {\n  return {\n    method: event.method,\n    status: event.status,\n    request: event.payload,\n    ...(event.result !== undefined ? { result: event.result } : {}),\n    ...(event.cause !== undefined ? { cause: Cause.pretty(event.cause) } : {}),\n  };\n}\n\nexport const makeAcpNativeLoggerFactory = Effect.fn(\"makeAcpNativeLoggerFactory\")(function* () {\n  const crypto = yield* Crypto.Crypto;\n  return (input: {\n    readonly nativeEventLogger: EventNdjsonLogger | undefined;\n    readonly provider: ProviderDriverKind;\n    readonly threadId: ThreadId;\n  }): Pick<AcpSessionRuntimeOptions, \"requestLogger\" | \"protocolLogging\"> => {\n    const writeNativeAcpLog = (logInput: {\n      readonly kind: \"request\" | \"protocol\";\n      readonly payload: unknown;\n    }) =>\n      Effect.gen(function* () {\n        if (!input.nativeEventLogger) return;\n        const observedAt = DateTime.formatIso(yield* DateTime.now);\n        yield* input.nativeEventLogger.write(\n          {\n            observedAt,\n            event: {\n              id: yield* crypto.randomUUIDv4,\n              kind: logInput.kind,\n              provider: input.provider,\n              createdAt: observedAt,\n              threadId: input.threadId,\n              payload: logInput.payload,\n            },\n          },\n          input.threadId,\n        );\n      }).pipe(\n        Effect.catch((cause) =>\n          Effect.logWarning(\"Failed to write native ACP event log.\", {\n            cause,\n            provider: input.provider,\n            threadId: input.threadId,\n          }),\n        ),\n      );\n\n    return {\n      requestLogger: (event: AcpSessionRequestLogEvent) =>\n        writeNativeAcpLog({\n          kind: \"request\",\n          payload: formatRequestLogPayload(event),\n        }),\n      ...(input.nativeEventLogger\n        ? {\n            protocolLogging: {\n              logIncoming: true,\n              logOutgoing: true,\n              logger: (event: EffectAcpProtocol.AcpProtocolLogEvent) =>\n                writeNativeAcpLog({\n                  kind: \"protocol\",\n                  payload: event,\n                }),\n            } satisfies NonNullable<AcpSessionRuntimeOptions[\"protocolLogging\"]>,\n          }\n        : {}),\n    };\n  };\n});\n","/**\n * CursorAdapterLive — Cursor CLI (`agent acp`) via ACP.\n *\n * @module CursorAdapterLive\n */\n\nimport {\n  ApprovalRequestId,\n  type CursorSettings,\n  type ProviderOptionSelection,\n  EventId,\n  type ProviderApprovalDecision,\n  type ProviderInteractionMode,\n  type ProviderRuntimeEvent,\n  type ProviderSession,\n  type ProviderUserInputAnswers,\n  ProviderDriverKind,\n  ProviderInstanceId,\n  RuntimeRequestId,\n  type RuntimeMode,\n  type ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport * as Stream from \"effect/Stream\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as EffectAcpErrors from \"effect-acp/errors\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { buildAcpAttachmentPromptParts } from \"../attachmentInputs.ts\";\nimport {\n  ProviderAdapterProcessError,\n  ProviderAdapterRequestError,\n  ProviderAdapterSessionNotFoundError,\n  ProviderAdapterValidationError,\n} from \"../Errors.ts\";\nimport { acpPermissionOutcome, mapAcpToAdapterError } from \"../acp/AcpAdapterSupport.ts\";\nimport { type AcpSessionRuntimeShape } from \"../acp/AcpSessionRuntime.ts\";\nimport {\n  makeAcpAssistantItemEvent,\n  makeAcpContentDeltaEvent,\n  makeAcpPlanUpdatedEvent,\n  makeAcpRequestOpenedEvent,\n  makeAcpRequestResolvedEvent,\n  makeAcpToolCallEvent,\n  offerAcpIndependentThreadCreatedEvent,\n} from \"../acp/AcpCoreRuntimeEvents.ts\";\nimport {\n  type AcpSessionMode,\n  type AcpSessionModeState,\n  parsePermissionRequest,\n} from \"../acp/AcpRuntimeModel.ts\";\nimport { makeAcpNativeLoggerFactory } from \"../acp/AcpNativeLogging.ts\";\nimport { applyCursorAcpModelSelection, makeCursorAcpRuntime } from \"../acp/CursorAcpSupport.ts\";\nimport {\n  CursorAskQuestionRequest,\n  CursorCreatePlanRequest,\n  CursorUpdateTodosRequest,\n  extractAskQuestions,\n  extractPlanMarkdown,\n  extractTodosAsPlan,\n} from \"../acp/CursorAcpExtension.ts\";\nimport { type CursorAdapterShape } from \"../Services/CursorAdapter.ts\";\nimport { resolveCursorAcpBaseModelId } from \"./CursorProvider.ts\";\nimport { type EventNdjsonLogger, makeEventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\nconst encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);\n\nconst PROVIDER = ProviderDriverKind.make(\"cursor\");\nconst CURSOR_RESUME_VERSION = 1 as const;\nconst DEFAULT_CURSOR_INTERRUPT_GRACE_MS = 3000;\nconst CURSOR_INTERRUPT_COMPLETION_WAIT_MS = 500;\nconst CURSOR_LOCAL_INTERRUPT_STOP_REASON = \"local_interrupt_timeout\";\nconst ACP_PLAN_MODE_ALIASES = [\"plan\", \"architect\"];\nconst ACP_IMPLEMENT_MODE_ALIASES = [\"code\", \"agent\", \"default\", \"chat\", \"implement\"];\nconst ACP_APPROVAL_MODE_ALIASES = [\"ask\"];\n\nfunction encodeJsonStringForDiagnostics(input: unknown): string | undefined {\n  const result = encodeUnknownJsonStringExit(input);\n  return Exit.isSuccess(result) ? result.value : undefined;\n}\n\nexport interface CursorAdapterLiveOptions {\n  readonly environment?: NodeJS.ProcessEnv;\n  readonly nativeEventLogPath?: string;\n  readonly nativeEventLogger?: EventNdjsonLogger;\n  /**\n   * Selections are honored when `modelSelection.instanceId` matches this value.\n   * Defaults to the legacy built-in instance id (`cursor`).\n   */\n  readonly instanceId?: ProviderInstanceId;\n  /**\n   * Optional per-session settings resolver. When provided the adapter yields\n   * this effect at the start of every session and uses the result instead of\n   * the `cursorSettings` captured at construction.\n   *\n   * Production instances bind settings to the instance scope (the hydration\n   * layer rebuilds the adapter on config change) and leave this undefined.\n   * Test suites that mutate `ServerSettingsService` mid-flight — e.g. to\n   * swap `binaryPath` to a mock ACP wrapper — pass a resolver that reads\n   * the latest snapshot so the closure isn't stale.\n   */\n  readonly resolveSettings?: Effect.Effect<CursorSettings>;\n  readonly interruptGraceMs?: number;\n}\n\ninterface PendingApproval {\n  readonly decision: Deferred.Deferred<ProviderApprovalDecision>;\n  readonly kind: string | \"unknown\";\n}\n\ninterface PendingUserInput {\n  readonly answers: Deferred.Deferred<ProviderUserInputAnswers>;\n}\n\ninterface ActiveCursorTurn {\n  readonly id: TurnId;\n  readonly forceInterrupted: Deferred.Deferred<void>;\n  readonly completed: Deferred.Deferred<void>;\n  cancelRequestedAt: string | undefined;\n  fallbackFiber: Fiber.Fiber<void, never> | undefined;\n}\n\ninterface CursorSessionContext {\n  readonly threadId: ThreadId;\n  session: ProviderSession;\n  readonly scope: Scope.Closeable;\n  readonly acp: AcpSessionRuntimeShape;\n  notificationFiber: Fiber.Fiber<void, never> | undefined;\n  readonly pendingApprovals: Map<ApprovalRequestId, PendingApproval>;\n  readonly pendingUserInputs: Map<ApprovalRequestId, PendingUserInput>;\n  readonly turns: Array<{ id: TurnId; items: Array<unknown> }>;\n  lastPlanFingerprint: string | undefined;\n  activeTurn: ActiveCursorTurn | undefined;\n  activeTurnId: TurnId | undefined;\n  /** Number of sendTurn prompts currently in flight or being prepared.\n   * >0 means a turn is actively running, so a new sendTurn is a steer that\n   * continues it, and only the last remaining prompt settles the turn. */\n  promptsInFlight: number;\n  stopped: boolean;\n}\n\nfunction settlePendingApprovalsAsCancelled(\n  pendingApprovals: ReadonlyMap<ApprovalRequestId, PendingApproval>,\n): Effect.Effect<void> {\n  const pendingEntries = Array.from(pendingApprovals.values());\n  return Effect.forEach(\n    pendingEntries,\n    (pending) => Deferred.succeed(pending.decision, \"cancel\").pipe(Effect.ignore),\n    {\n      discard: true,\n    },\n  );\n}\n\nfunction settlePendingUserInputsAsEmptyAnswers(\n  pendingUserInputs: ReadonlyMap<ApprovalRequestId, PendingUserInput>,\n): Effect.Effect<void> {\n  const pendingEntries = Array.from(pendingUserInputs.values());\n  return Effect.forEach(\n    pendingEntries,\n    (pending) => Deferred.succeed(pending.answers, {}).pipe(Effect.ignore),\n    {\n      discard: true,\n    },\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseCursorResume(raw: unknown): { sessionId: string } | undefined {\n  if (!isRecord(raw)) return undefined;\n  if (raw.schemaVersion !== CURSOR_RESUME_VERSION) return undefined;\n  if (typeof raw.sessionId !== \"string\" || !raw.sessionId.trim()) return undefined;\n  return { sessionId: raw.sessionId.trim() };\n}\n\nfunction normalizeModeSearchText(mode: AcpSessionMode): string {\n  return [mode.id, mode.name, mode.description]\n    .filter((value): value is string => typeof value === \"string\" && value.length > 0)\n    .join(\" \")\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \" \")\n    .trim();\n}\n\nfunction findModeByAliases(\n  modes: ReadonlyArray<AcpSessionMode>,\n  aliases: ReadonlyArray<string>,\n): AcpSessionMode | undefined {\n  const normalizedAliases = aliases.map((alias) => alias.toLowerCase());\n  for (const alias of normalizedAliases) {\n    const exact = modes.find((mode) => {\n      const id = mode.id.toLowerCase();\n      const name = mode.name.toLowerCase();\n      return id === alias || name === alias;\n    });\n    if (exact) {\n      return exact;\n    }\n  }\n  for (const alias of normalizedAliases) {\n    const partial = modes.find((mode) => normalizeModeSearchText(mode).includes(alias));\n    if (partial) {\n      return partial;\n    }\n  }\n  return undefined;\n}\n\nfunction isPlanMode(mode: AcpSessionMode): boolean {\n  return findModeByAliases([mode], ACP_PLAN_MODE_ALIASES) !== undefined;\n}\n\nfunction resolveRequestedModeId(input: {\n  readonly interactionMode: ProviderInteractionMode | undefined;\n  readonly runtimeMode: RuntimeMode;\n  readonly modeState: AcpSessionModeState | undefined;\n}): string | undefined {\n  const modeState = input.modeState;\n  if (!modeState) {\n    return undefined;\n  }\n\n  if (input.interactionMode === \"plan\") {\n    return findModeByAliases(modeState.availableModes, ACP_PLAN_MODE_ALIASES)?.id;\n  }\n\n  if (input.runtimeMode === \"approval-required\") {\n    return (\n      findModeByAliases(modeState.availableModes, ACP_APPROVAL_MODE_ALIASES)?.id ??\n      findModeByAliases(modeState.availableModes, ACP_IMPLEMENT_MODE_ALIASES)?.id ??\n      modeState.availableModes.find((mode) => !isPlanMode(mode))?.id ??\n      modeState.currentModeId\n    );\n  }\n\n  return (\n    findModeByAliases(modeState.availableModes, ACP_IMPLEMENT_MODE_ALIASES)?.id ??\n    findModeByAliases(modeState.availableModes, ACP_APPROVAL_MODE_ALIASES)?.id ??\n    modeState.availableModes.find((mode) => !isPlanMode(mode))?.id ??\n    modeState.currentModeId\n  );\n}\n\nfunction applyRequestedSessionConfiguration<E>(input: {\n  readonly runtime: AcpSessionRuntimeShape;\n  readonly runtimeMode: RuntimeMode;\n  readonly interactionMode: ProviderInteractionMode | undefined;\n  readonly modelSelection:\n    | {\n        readonly model: string;\n        readonly options?: ReadonlyArray<ProviderOptionSelection> | null | undefined;\n      }\n    | undefined;\n  readonly mapError: (context: {\n    readonly cause: import(\"effect-acp/errors\").AcpError;\n    readonly method: \"session/set_config_option\" | \"session/set_mode\";\n  }) => E;\n}): Effect.Effect<void, E> {\n  return Effect.gen(function* () {\n    if (input.modelSelection) {\n      yield* applyCursorAcpModelSelection({\n        runtime: input.runtime,\n        model: input.modelSelection.model,\n        selections: input.modelSelection.options,\n        mapError: ({ cause }) =>\n          input.mapError({\n            cause,\n            method: \"session/set_config_option\",\n          }),\n      });\n    }\n\n    const requestedModeId = resolveRequestedModeId({\n      interactionMode: input.interactionMode,\n      runtimeMode: input.runtimeMode,\n      modeState: yield* input.runtime.getModeState,\n    });\n    if (!requestedModeId) {\n      return;\n    }\n\n    yield* input.runtime.setMode(requestedModeId).pipe(\n      Effect.mapError((cause) =>\n        input.mapError({\n          cause,\n          method: \"session/set_mode\",\n        }),\n      ),\n    );\n  });\n}\n\nfunction selectAutoApprovedPermissionOption(\n  request: EffectAcpSchema.RequestPermissionRequest,\n): string | undefined {\n  const allowAlwaysOption = request.options.find((option) => option.kind === \"allow_always\");\n  if (typeof allowAlwaysOption?.optionId === \"string\" && allowAlwaysOption.optionId.trim()) {\n    return allowAlwaysOption.optionId.trim();\n  }\n\n  const allowOnceOption = request.options.find((option) => option.kind === \"allow_once\");\n  if (typeof allowOnceOption?.optionId === \"string\" && allowOnceOption.optionId.trim()) {\n    return allowOnceOption.optionId.trim();\n  }\n\n  return undefined;\n}\n\nexport function makeCursorAdapter(\n  cursorSettings: CursorSettings,\n  options?: CursorAdapterLiveOptions,\n) {\n  return Effect.gen(function* () {\n    const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(\"cursor\");\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const serverConfig = yield* Effect.service(ServerConfig);\n    const crypto = yield* Crypto.Crypto;\n    const nativeEventLogger =\n      options?.nativeEventLogger ??\n      (options?.nativeEventLogPath !== undefined\n        ? yield* makeEventNdjsonLogger(options.nativeEventLogPath, {\n            stream: \"native\",\n          })\n        : undefined);\n    const managedNativeEventLogger =\n      options?.nativeEventLogger === undefined ? nativeEventLogger : undefined;\n    const makeAcpNativeLoggers = yield* makeAcpNativeLoggerFactory();\n\n    const sessions = new Map<ThreadId, CursorSessionContext>();\n    const interruptGraceMs = options?.interruptGraceMs ?? DEFAULT_CURSOR_INTERRUPT_GRACE_MS;\n    const workerScope = yield* Scope.make(\"sequential\");\n    yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void));\n    const threadLocksRef = yield* SynchronizedRef.make(new Map<string, Semaphore.Semaphore>());\n    const runtimeEventPubSub = yield* PubSub.unbounded<ProviderRuntimeEvent>();\n\n    const nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n    const randomUUIDv4 = crypto.randomUUIDv4.pipe(\n      Effect.mapError(\n        (cause) =>\n          new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"crypto/randomUUIDv4\",\n            detail: \"Failed to generate Cursor runtime identifier.\",\n            cause,\n          }),\n      ),\n    );\n    const nextEventId = Effect.map(randomUUIDv4, (id) => EventId.make(id));\n    const makeEventStamp = () => Effect.all({ eventId: nextEventId, createdAt: nowIso });\n    const mapExtensionFailure = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n      effect.pipe(\n        Effect.mapError(\n          (cause) =>\n            new EffectAcpErrors.AcpTransportError({\n              detail: \"Failed to process Cursor ACP extension event.\",\n              cause,\n            }),\n        ),\n      );\n\n    const offerRuntimeEvent = (event: ProviderRuntimeEvent) =>\n      PubSub.publish(runtimeEventPubSub, event).pipe(Effect.asVoid);\n\n    const getThreadSemaphore = (threadId: string) =>\n      SynchronizedRef.modifyEffect(threadLocksRef, (current) => {\n        const existing: Option.Option<Semaphore.Semaphore> = Option.fromNullishOr(\n          current.get(threadId),\n        );\n        return Option.match(existing, {\n          onNone: () =>\n            Semaphore.make(1).pipe(\n              Effect.map((semaphore) => {\n                const next = new Map(current);\n                next.set(threadId, semaphore);\n                return [semaphore, next] as const;\n              }),\n            ),\n          onSome: (semaphore) => Effect.succeed([semaphore, current] as const),\n        });\n      });\n\n    const withThreadLock = <A, E, R>(threadId: string, effect: Effect.Effect<A, E, R>) =>\n      Effect.flatMap(getThreadSemaphore(threadId), (semaphore) => semaphore.withPermit(effect));\n\n    const logNative = (\n      threadId: ThreadId,\n      method: string,\n      payload: unknown,\n      _source: \"acp.jsonrpc\" | \"acp.cursor.extension\",\n    ) =>\n      Effect.gen(function* () {\n        if (!nativeEventLogger) return;\n        const observedAt = yield* nowIso;\n        yield* nativeEventLogger.write(\n          {\n            observedAt,\n            event: {\n              id: yield* randomUUIDv4,\n              kind: \"notification\",\n              provider: PROVIDER,\n              createdAt: observedAt,\n              method,\n              threadId,\n              payload,\n            },\n          },\n          threadId,\n        );\n      });\n\n    const emitPlanUpdate = (\n      ctx: CursorSessionContext,\n      payload: {\n        readonly explanation?: string | null;\n        readonly plan: ReadonlyArray<{\n          readonly step: string;\n          readonly status: \"pending\" | \"inProgress\" | \"completed\";\n        }>;\n      },\n      rawPayload: unknown,\n      source: \"acp.jsonrpc\" | \"acp.cursor.extension\",\n      method: string,\n    ) =>\n      Effect.gen(function* () {\n        const fingerprint = `${ctx.activeTurnId ?? \"no-turn\"}:${encodeJsonStringForDiagnostics(payload) ?? \"[unserializable payload]\"}`;\n        if (ctx.lastPlanFingerprint === fingerprint) {\n          return;\n        }\n        ctx.lastPlanFingerprint = fingerprint;\n        yield* offerRuntimeEvent(\n          makeAcpPlanUpdatedEvent({\n            stamp: yield* makeEventStamp(),\n            provider: PROVIDER,\n            threadId: ctx.threadId,\n            turnId: ctx.activeTurnId,\n            payload,\n            source,\n            method,\n            rawPayload,\n          }),\n        );\n      });\n\n    const requireSession = (\n      threadId: ThreadId,\n    ): Effect.Effect<CursorSessionContext, ProviderAdapterSessionNotFoundError> => {\n      const ctx = sessions.get(threadId);\n      if (!ctx || ctx.stopped) {\n        return Effect.fail(\n          new ProviderAdapterSessionNotFoundError({ provider: PROVIDER, threadId }),\n        );\n      }\n      return Effect.succeed(ctx);\n    };\n\n    const stopSessionInternal = (ctx: CursorSessionContext) =>\n      Effect.gen(function* () {\n        if (ctx.stopped) return;\n        ctx.stopped = true;\n        yield* settlePendingApprovalsAsCancelled(ctx.pendingApprovals);\n        yield* settlePendingUserInputsAsEmptyAnswers(ctx.pendingUserInputs);\n        if (ctx.notificationFiber) {\n          yield* Effect.sync(() => {\n            ctx.notificationFiber?.interruptUnsafe();\n          });\n        }\n        yield* Effect.ignore(Scope.close(ctx.scope, Exit.void));\n        sessions.delete(ctx.threadId);\n        yield* offerRuntimeEvent({\n          type: \"session.exited\",\n          ...(yield* makeEventStamp()),\n          provider: PROVIDER,\n          threadId: ctx.threadId,\n          payload: { exitKind: \"graceful\" },\n        });\n      });\n\n    const clearActiveTurnAfterPrompt = (\n      ctx: CursorSessionContext,\n      activeTurn: ActiveCursorTurn,\n      options: { readonly interruptFallback: boolean },\n    ) =>\n      Effect.gen(function* () {\n        if (ctx.activeTurn === activeTurn) {\n          const { activeTurnId: _activeTurnId, ...sessionWithoutActiveTurn } = ctx.session;\n          ctx.activeTurn = undefined;\n          ctx.activeTurnId = undefined;\n          ctx.session = {\n            ...sessionWithoutActiveTurn,\n            status: \"ready\",\n            updatedAt: yield* nowIso,\n          };\n        }\n        yield* Deferred.succeed(activeTurn.completed, undefined).pipe(Effect.ignore);\n        if (options.interruptFallback && activeTurn.fallbackFiber) {\n          yield* Fiber.interrupt(activeTurn.fallbackFiber).pipe(Effect.ignore);\n          activeTurn.fallbackFiber = undefined;\n        }\n      });\n\n    const startInterruptFallback = (ctx: CursorSessionContext, activeTurn: ActiveCursorTurn) =>\n      Effect.gen(function* () {\n        if (activeTurn.fallbackFiber) {\n          return;\n        }\n\n        const fallback = Effect.gen(function* () {\n          yield* Effect.sleep(interruptGraceMs);\n          if (\n            ctx.stopped ||\n            ctx.activeTurn !== activeTurn ||\n            activeTurn.cancelRequestedAt === undefined\n          ) {\n            return;\n          }\n\n          yield* Deferred.succeed(activeTurn.forceInterrupted, undefined).pipe(Effect.ignore);\n          yield* Deferred.await(activeTurn.completed).pipe(\n            Effect.timeoutOption(CURSOR_INTERRUPT_COMPLETION_WAIT_MS),\n            Effect.ignore,\n          );\n\n          if (!ctx.stopped) {\n            yield* stopSessionInternal(ctx);\n          }\n        }).pipe(\n          Effect.catchCause((cause) =>\n            Effect.logWarning(\"cursor interrupt fallback failed\", {\n              threadId: ctx.threadId,\n              turnId: activeTurn.id,\n              cause,\n            }),\n          ),\n        );\n\n        activeTurn.fallbackFiber = yield* fallback.pipe(\n          Effect.forkIn(workerScope, { startImmediately: true }),\n        );\n      });\n\n    const startSession: CursorAdapterShape[\"startSession\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          if (input.provider !== undefined && input.provider !== PROVIDER) {\n            return yield* new ProviderAdapterValidationError({\n              provider: PROVIDER,\n              operation: \"startSession\",\n              issue: `Expected provider '${PROVIDER}' but received '${input.provider}'.`,\n            });\n          }\n          if (!input.cwd?.trim()) {\n            return yield* new ProviderAdapterValidationError({\n              provider: PROVIDER,\n              operation: \"startSession\",\n              issue: \"cwd is required and must be non-empty.\",\n            });\n          }\n\n          const cwd = path.resolve(input.cwd.trim());\n          const cursorModelSelection =\n            input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection : undefined;\n          const existing = sessions.get(input.threadId);\n          if (existing && !existing.stopped) {\n            yield* stopSessionInternal(existing);\n          }\n\n          const pendingApprovals = new Map<ApprovalRequestId, PendingApproval>();\n          const pendingUserInputs = new Map<ApprovalRequestId, PendingUserInput>();\n          const sessionScope = yield* Scope.make(\"sequential\");\n          let sessionScopeTransferred = false;\n          yield* Effect.addFinalizer(() =>\n            sessionScopeTransferred ? Effect.void : Scope.close(sessionScope, Exit.void),\n          );\n          let ctx!: CursorSessionContext;\n\n          const resumeSessionId = parseCursorResume(input.resumeCursor)?.sessionId;\n          const acpNativeLoggers = makeAcpNativeLoggers({\n            nativeEventLogger,\n            provider: PROVIDER,\n            threadId: input.threadId,\n          });\n\n          // Resolve the CursorSettings used to spawn the ACP child. Production\n          // leaves `options.resolveSettings` undefined so we use the value\n          // captured at adapter construction — per-instance isolation is\n          // enforced by the hydration layer rebuilding this adapter whenever\n          // its config changes. Tests set `resolveSettings` to pull the latest\n          // snapshot from `ServerSettingsService` so that mid-suite\n          // `updateSettings({ providers: { cursor: { binaryPath } } })` calls\n          // actually take effect when the next session spawns.\n          const effectiveCursorSettings = options?.resolveSettings\n            ? yield* options.resolveSettings\n            : cursorSettings;\n\n          const acp = yield* makeCursorAcpRuntime({\n            cursorSettings: effectiveCursorSettings,\n            ...(options?.environment ? { environment: options.environment } : {}),\n            childProcessSpawner,\n            cwd,\n            ...(resumeSessionId ? { resumeSessionId } : {}),\n            clientInfo: { name: \"salchi\", version: \"0.0.0\" },\n            ...acpNativeLoggers,\n          }).pipe(\n            Effect.provideService(Scope.Scope, sessionScope),\n            Effect.mapError(\n              (cause) =>\n                new ProviderAdapterProcessError({\n                  provider: PROVIDER,\n                  threadId: input.threadId,\n                  detail: cause.message,\n                  cause,\n                }),\n            ),\n          );\n          const started = yield* Effect.gen(function* () {\n            yield* acp.handleExtRequest(\"cursor/ask_question\", CursorAskQuestionRequest, (params) =>\n              mapExtensionFailure(\n                Effect.gen(function* () {\n                  yield* logNative(\n                    input.threadId,\n                    \"cursor/ask_question\",\n                    params,\n                    \"acp.cursor.extension\",\n                  );\n                  const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n                  const runtimeRequestId = RuntimeRequestId.make(requestId);\n                  const answers = yield* Deferred.make<ProviderUserInputAnswers>();\n                  pendingUserInputs.set(requestId, { answers });\n                  yield* offerRuntimeEvent({\n                    type: \"user-input.requested\",\n                    ...(yield* makeEventStamp()),\n                    provider: PROVIDER,\n                    threadId: input.threadId,\n                    turnId: ctx?.activeTurnId,\n                    requestId: runtimeRequestId,\n                    payload: { questions: extractAskQuestions(params) },\n                    raw: {\n                      source: \"acp.cursor.extension\",\n                      method: \"cursor/ask_question\",\n                      payload: params,\n                    },\n                  });\n                  const resolved = yield* Deferred.await(answers);\n                  pendingUserInputs.delete(requestId);\n                  yield* offerRuntimeEvent({\n                    type: \"user-input.resolved\",\n                    ...(yield* makeEventStamp()),\n                    provider: PROVIDER,\n                    threadId: input.threadId,\n                    turnId: ctx?.activeTurnId,\n                    requestId: runtimeRequestId,\n                    payload: { answers: resolved },\n                  });\n                  return { answers: resolved };\n                }),\n              ),\n            );\n            yield* acp.handleExtRequest(\"cursor/create_plan\", CursorCreatePlanRequest, (params) =>\n              mapExtensionFailure(\n                Effect.gen(function* () {\n                  yield* logNative(\n                    input.threadId,\n                    \"cursor/create_plan\",\n                    params,\n                    \"acp.cursor.extension\",\n                  );\n                  yield* offerRuntimeEvent({\n                    type: \"turn.proposed.completed\",\n                    ...(yield* makeEventStamp()),\n                    provider: PROVIDER,\n                    threadId: input.threadId,\n                    turnId: ctx?.activeTurnId,\n                    payload: { planMarkdown: extractPlanMarkdown(params) },\n                    raw: {\n                      source: \"acp.cursor.extension\",\n                      method: \"cursor/create_plan\",\n                      payload: params,\n                    },\n                  });\n                  return { accepted: true } as const;\n                }),\n              ),\n            );\n            yield* acp.handleExtNotification(\n              \"cursor/update_todos\",\n              CursorUpdateTodosRequest,\n              (params) =>\n                mapExtensionFailure(\n                  Effect.gen(function* () {\n                    yield* logNative(\n                      input.threadId,\n                      \"cursor/update_todos\",\n                      params,\n                      \"acp.cursor.extension\",\n                    );\n                    if (ctx) {\n                      yield* emitPlanUpdate(\n                        ctx,\n                        extractTodosAsPlan(params),\n                        params,\n                        \"acp.cursor.extension\",\n                        \"cursor/update_todos\",\n                      );\n                    }\n                  }),\n                ),\n            );\n            yield* acp.handleRequestPermission((params) =>\n              mapExtensionFailure(\n                Effect.gen(function* () {\n                  yield* logNative(\n                    input.threadId,\n                    \"session/request_permission\",\n                    params,\n                    \"acp.jsonrpc\",\n                  );\n                  if (input.runtimeMode === \"full-access\") {\n                    const autoApprovedOptionId = selectAutoApprovedPermissionOption(params);\n                    if (autoApprovedOptionId !== undefined) {\n                      return {\n                        outcome: {\n                          outcome: \"selected\" as const,\n                          optionId: autoApprovedOptionId,\n                        },\n                      };\n                    }\n                  }\n                  const permissionRequest = parsePermissionRequest(params);\n                  const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n                  const runtimeRequestId = RuntimeRequestId.make(requestId);\n                  const decision = yield* Deferred.make<ProviderApprovalDecision>();\n                  pendingApprovals.set(requestId, {\n                    decision,\n                    kind: permissionRequest.kind,\n                  });\n                  yield* offerRuntimeEvent(\n                    makeAcpRequestOpenedEvent({\n                      stamp: yield* makeEventStamp(),\n                      provider: PROVIDER,\n                      threadId: input.threadId,\n                      turnId: ctx?.activeTurnId,\n                      requestId: runtimeRequestId,\n                      permissionRequest,\n                      detail:\n                        permissionRequest.detail ??\n                        encodeJsonStringForDiagnostics(params)?.slice(0, 2000) ??\n                        \"[unserializable params]\",\n                      args: params,\n                      source: \"acp.jsonrpc\",\n                      method: \"session/request_permission\",\n                      rawPayload: params,\n                    }),\n                  );\n                  const resolved = yield* Deferred.await(decision);\n                  pendingApprovals.delete(requestId);\n                  yield* offerRuntimeEvent(\n                    makeAcpRequestResolvedEvent({\n                      stamp: yield* makeEventStamp(),\n                      provider: PROVIDER,\n                      threadId: input.threadId,\n                      turnId: ctx?.activeTurnId,\n                      requestId: runtimeRequestId,\n                      permissionRequest,\n                      decision: resolved,\n                    }),\n                  );\n                  return {\n                    outcome:\n                      resolved === \"cancel\"\n                        ? ({ outcome: \"cancelled\" } as const)\n                        : {\n                            outcome: \"selected\" as const,\n                            optionId: acpPermissionOutcome(resolved),\n                          },\n                  };\n                }),\n              ),\n            );\n            return yield* acp.start();\n          }).pipe(\n            Effect.mapError((error) =>\n              mapAcpToAdapterError(PROVIDER, input.threadId, \"session/start\", error),\n            ),\n          );\n\n          yield* applyRequestedSessionConfiguration({\n            runtime: acp,\n            runtimeMode: input.runtimeMode,\n            interactionMode: undefined,\n            modelSelection: cursorModelSelection,\n            mapError: ({ cause, method }) =>\n              mapAcpToAdapterError(PROVIDER, input.threadId, method, cause),\n          });\n\n          const now = yield* nowIso;\n          const session: ProviderSession = {\n            provider: PROVIDER,\n            providerInstanceId: boundInstanceId,\n            status: \"ready\",\n            runtimeMode: input.runtimeMode,\n            cwd,\n            model: cursorModelSelection?.model,\n            threadId: input.threadId,\n            resumeCursor: {\n              schemaVersion: CURSOR_RESUME_VERSION,\n              sessionId: started.sessionId,\n            },\n            createdAt: now,\n            updatedAt: now,\n          };\n\n          ctx = {\n            threadId: input.threadId,\n            session,\n            scope: sessionScope,\n            acp,\n            notificationFiber: undefined,\n            pendingApprovals,\n            pendingUserInputs,\n            turns: [],\n            lastPlanFingerprint: undefined,\n            activeTurn: undefined,\n            activeTurnId: undefined,\n            promptsInFlight: 0,\n            stopped: false,\n          };\n\n          const nf = yield* Stream.runDrain(\n            Stream.mapEffect(acp.getEvents(), (event) =>\n              Effect.gen(function* () {\n                switch (event._tag) {\n                  case \"ModeChanged\":\n                    return;\n                  case \"AssistantItemStarted\":\n                    yield* offerRuntimeEvent(\n                      makeAcpAssistantItemEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        itemId: event.itemId,\n                        lifecycle: \"item.started\",\n                      }),\n                    );\n                    return;\n                  case \"AssistantItemCompleted\":\n                    yield* offerRuntimeEvent(\n                      makeAcpAssistantItemEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        itemId: event.itemId,\n                        lifecycle: \"item.completed\",\n                      }),\n                    );\n                    return;\n                  case \"PlanUpdated\":\n                    yield* logNative(\n                      ctx.threadId,\n                      \"session/update\",\n                      event.rawPayload,\n                      \"acp.jsonrpc\",\n                    );\n                    yield* emitPlanUpdate(\n                      ctx,\n                      event.payload,\n                      event.rawPayload,\n                      \"acp.jsonrpc\",\n                      \"session/update\",\n                    );\n                    return;\n                  case \"ToolCallUpdated\":\n                    yield* logNative(\n                      ctx.threadId,\n                      \"session/update\",\n                      event.rawPayload,\n                      \"acp.jsonrpc\",\n                    );\n                    yield* offerRuntimeEvent(\n                      makeAcpToolCallEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        toolCall: event.toolCall,\n                        rawPayload: event.rawPayload,\n                      }),\n                    );\n                    yield* offerAcpIndependentThreadCreatedEvent({\n                      stamp: yield* makeEventStamp(),\n                      provider: PROVIDER,\n                      threadId: ctx.threadId,\n                      turnId: ctx.activeTurnId,\n                      toolCall: event.toolCall,\n                      rawPayload: event.rawPayload,\n                      offerRuntimeEvent,\n                    });\n                    return;\n                  case \"ContentDelta\":\n                    yield* logNative(\n                      ctx.threadId,\n                      \"session/update\",\n                      event.rawPayload,\n                      \"acp.jsonrpc\",\n                    );\n                    yield* offerRuntimeEvent(\n                      makeAcpContentDeltaEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        ...(event.itemId ? { itemId: event.itemId } : {}),\n                        text: event.text,\n                        rawPayload: event.rawPayload,\n                      }),\n                    );\n                    return;\n                }\n              }),\n            ),\n          ).pipe(\n            Effect.catch((cause) =>\n              Effect.logError(\"Failed to process Cursor runtime notification.\", { cause }),\n            ),\n            Effect.forkChild,\n          );\n\n          ctx.notificationFiber = nf;\n          sessions.set(input.threadId, ctx);\n          sessionScopeTransferred = true;\n\n          yield* offerRuntimeEvent({\n            type: \"session.started\",\n            ...(yield* makeEventStamp()),\n            provider: PROVIDER,\n            threadId: input.threadId,\n            payload: { resume: started.initializeResult },\n          });\n          yield* offerRuntimeEvent({\n            type: \"session.state.changed\",\n            ...(yield* makeEventStamp()),\n            provider: PROVIDER,\n            threadId: input.threadId,\n            payload: { state: \"ready\", reason: \"Cursor ACP session ready\" },\n          });\n          yield* offerRuntimeEvent({\n            type: \"thread.started\",\n            ...(yield* makeEventStamp()),\n            provider: PROVIDER,\n            threadId: input.threadId,\n            payload: { providerThreadId: started.sessionId },\n          });\n\n          return session;\n        }).pipe(Effect.scoped),\n      );\n\n    const sendTurn: CursorAdapterShape[\"sendTurn\"] = (input) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(input.threadId);\n        // A sendTurn while a prompt is in flight is a steer: the agent folds\n        // the new prompt into the ongoing work, so the active turn id is\n        // reused instead of opening a new turn.\n        const steeringTurnId = ctx.promptsInFlight > 0 ? ctx.activeTurnId : undefined;\n        const turnId = steeringTurnId ?? TurnId.make(yield* randomUUIDv4);\n        // Count this prompt immediately so a superseded in-flight prompt\n        // resolving from here on does not settle the turn; the matching\n        // decrement is the `ensuring` below.\n        ctx.promptsInFlight += 1;\n\n        return yield* Effect.gen(function* () {\n          const turnModelSelection =\n            input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection : undefined;\n          const model = turnModelSelection?.model ?? ctx.session.model;\n          const resolvedModel = resolveCursorAcpBaseModelId(model);\n          yield* applyRequestedSessionConfiguration({\n            runtime: ctx.acp,\n            runtimeMode: ctx.session.runtimeMode,\n            interactionMode: input.interactionMode,\n            modelSelection:\n              model === undefined\n                ? undefined\n                : {\n                    model,\n                    options: turnModelSelection?.options,\n                  },\n            mapError: ({ cause, method }) =>\n              mapAcpToAdapterError(PROVIDER, input.threadId, method, cause),\n          });\n\n          const promptParts: Array<EffectAcpSchema.ContentBlock> = [];\n          if (input.input?.trim()) {\n            promptParts.push({ type: \"text\", text: input.input.trim() });\n          }\n          promptParts.push(\n            ...(yield* buildAcpAttachmentPromptParts({\n              attachments: input.attachments,\n              attachmentsDir: serverConfig.attachmentsDir,\n              fileSystem,\n              provider: PROVIDER,\n              method: \"session/prompt\",\n            })),\n          );\n\n          if (promptParts.length === 0) {\n            return yield* new ProviderAdapterValidationError({\n              provider: PROVIDER,\n              operation: \"sendTurn\",\n              issue: \"Turn requires non-empty text or attachments.\",\n            });\n          }\n\n          const activeTurn: ActiveCursorTurn =\n            steeringTurnId !== undefined && ctx.activeTurn?.id === turnId\n              ? ctx.activeTurn\n              : {\n                  id: turnId,\n                  forceInterrupted: yield* Deferred.make<void>(),\n                  completed: yield* Deferred.make<void>(),\n                  cancelRequestedAt: undefined,\n                  fallbackFiber: undefined,\n                };\n          ctx.activeTurn = activeTurn;\n          ctx.activeTurnId = turnId;\n          if (steeringTurnId === undefined) {\n            ctx.lastPlanFingerprint = undefined;\n          }\n          ctx.session = {\n            ...ctx.session,\n            status: \"running\",\n            activeTurnId: turnId,\n            updatedAt: yield* nowIso,\n          };\n\n          if (steeringTurnId === undefined) {\n            yield* offerRuntimeEvent({\n              type: \"turn.started\",\n              ...(yield* makeEventStamp()),\n              provider: PROVIDER,\n              threadId: input.threadId,\n              turnId,\n              payload: { model: resolvedModel },\n            });\n          }\n\n          const promptEffect = ctx.acp\n            .prompt({\n              prompt: promptParts,\n            })\n            .pipe(\n              Effect.map((result) => ({ _tag: \"provider\" as const, result })),\n              Effect.mapError((error) =>\n                mapAcpToAdapterError(PROVIDER, input.threadId, \"session/prompt\", error),\n              ),\n            );\n          const promptResult =\n            yield* Deferred.make<\n              Exit.Exit<Effect.Success<typeof promptEffect>, Effect.Error<typeof promptEffect>>\n            >();\n          yield* promptEffect.pipe(\n            Effect.exit,\n            Effect.flatMap((exit) => Deferred.succeed(promptResult, exit)),\n            Effect.forkDetach({ startImmediately: true }),\n          );\n\n          type PromptProviderOutcome = Effect.Success<typeof promptEffect>;\n          type PromptRaceOutcome = PromptProviderOutcome | { readonly _tag: \"forced\" };\n          type PromptError = Effect.Error<typeof promptEffect>;\n          const promptOutcome = yield* Effect.raceFirst(\n            Deferred.await(promptResult).pipe(\n              Effect.map((exit): Exit.Exit<PromptRaceOutcome, PromptError> => exit),\n            ),\n            Deferred.await(activeTurn.forceInterrupted).pipe(\n              Effect.as(Exit.succeed<PromptRaceOutcome>({ _tag: \"forced\" })),\n            ),\n          );\n\n          if (Exit.isFailure(promptOutcome)) {\n            if (ctx.promptsInFlight === 1) {\n              yield* clearActiveTurnAfterPrompt(ctx, activeTurn, { interruptFallback: true });\n            }\n            return yield* Effect.failCause(promptOutcome.cause);\n          }\n\n          const completion = (() => {\n            const outcome = promptOutcome.value;\n            if (outcome._tag === \"forced\") {\n              return {\n                state: \"interrupted\" as const,\n                stopReason: CURSOR_LOCAL_INTERRUPT_STOP_REASON,\n              };\n            }\n            if (outcome.result.stopReason === \"cancelled\") {\n              return {\n                state: \"cancelled\" as const,\n                stopReason: \"cancelled\",\n              };\n            }\n            return {\n              state:\n                activeTurn.cancelRequestedAt === undefined\n                  ? (\"completed\" as const)\n                  : (\"interrupted\" as const),\n              stopReason: outcome.result.stopReason ?? null,\n            };\n          })();\n\n          const turnRecord = ctx.turns.find((turn) => turn.id === turnId);\n          const turnItem = {\n            prompt: promptParts,\n            result:\n              promptOutcome.value._tag === \"provider\" ? promptOutcome.value.result : completion,\n          };\n          if (turnRecord) {\n            turnRecord.items.push(turnItem);\n          } else {\n            ctx.turns.push({ id: turnId, items: [turnItem] });\n          }\n          ctx.session = {\n            ...ctx.session,\n            activeTurnId: turnId,\n            updatedAt: yield* nowIso,\n            model: resolvedModel,\n          };\n\n          // Only the last remaining prompt settles the turn. A steer-\n          // superseded prompt resolving while another is in flight must leave\n          // the merged turn running.\n          if (ctx.promptsInFlight === 1) {\n            yield* offerRuntimeEvent({\n              type: \"turn.completed\",\n              ...(yield* makeEventStamp()),\n              provider: PROVIDER,\n              threadId: input.threadId,\n              turnId,\n              payload: {\n                state: completion.state,\n                stopReason: completion.stopReason,\n              },\n            });\n\n            yield* clearActiveTurnAfterPrompt(ctx, activeTurn, {\n              interruptFallback: promptOutcome.value._tag !== \"forced\",\n            });\n          }\n\n          return {\n            threadId: input.threadId,\n            turnId,\n            resumeCursor: ctx.session.resumeCursor,\n          };\n        }).pipe(\n          Effect.ensuring(\n            Effect.sync(() => {\n              ctx.promptsInFlight = Math.max(0, ctx.promptsInFlight - 1);\n            }),\n          ),\n        );\n      });\n\n    const interruptTurn: CursorAdapterShape[\"interruptTurn\"] = (threadId, turnId) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        yield* settlePendingApprovalsAsCancelled(ctx.pendingApprovals);\n        yield* settlePendingUserInputsAsEmptyAnswers(ctx.pendingUserInputs);\n        const activeTurn = ctx.activeTurn;\n        if (!activeTurn) {\n          return;\n        }\n        if (turnId !== undefined && activeTurn.id !== turnId) {\n          return;\n        }\n        if (activeTurn.cancelRequestedAt !== undefined) {\n          return;\n        }\n\n        activeTurn.cancelRequestedAt = yield* nowIso;\n        yield* startInterruptFallback(ctx, activeTurn);\n        yield* ctx.acp.cancel.pipe(\n          Effect.mapError((error) =>\n            mapAcpToAdapterError(PROVIDER, threadId, \"session/cancel\", error),\n          ),\n        );\n      });\n\n    const steerTurn: CursorAdapterShape[\"steerTurn\"] = (input) =>\n      Effect.fail(\n        new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"turn/steer\",\n          detail: `Cursor ACP does not guarantee active-turn steering for turn '${input.expectedTurnId}'.`,\n        }),\n      );\n\n    const respondToRequest: CursorAdapterShape[\"respondToRequest\"] = (\n      threadId,\n      requestId,\n      decision,\n    ) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        const pending = ctx.pendingApprovals.get(requestId);\n        if (!pending) {\n          return yield* new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"session/request_permission\",\n            detail: `Unknown pending approval request: ${requestId}`,\n          });\n        }\n        yield* Deferred.succeed(pending.decision, decision);\n      });\n\n    const respondToUserInput: CursorAdapterShape[\"respondToUserInput\"] = (\n      threadId,\n      requestId,\n      answers,\n    ) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        const pending = ctx.pendingUserInputs.get(requestId);\n        if (!pending) {\n          return yield* new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"cursor/ask_question\",\n            detail: `Unknown pending user-input request: ${requestId}`,\n          });\n        }\n        yield* Deferred.succeed(pending.answers, answers);\n      });\n\n    const readThread: CursorAdapterShape[\"readThread\"] = (threadId) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        return { threadId, turns: ctx.turns };\n      });\n\n    const rollbackThread: CursorAdapterShape[\"rollbackThread\"] = (threadId, numTurns) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        if (!Number.isInteger(numTurns) || numTurns < 1) {\n          return yield* new ProviderAdapterValidationError({\n            provider: PROVIDER,\n            operation: \"rollbackThread\",\n            issue: \"numTurns must be an integer >= 1.\",\n          });\n        }\n        const nextLength = Math.max(0, ctx.turns.length - numTurns);\n        ctx.turns.splice(nextLength);\n        return { threadId, turns: ctx.turns };\n      });\n\n    const stopSession: CursorAdapterShape[\"stopSession\"] = (threadId) =>\n      withThreadLock(\n        threadId,\n        Effect.gen(function* () {\n          const ctx = yield* requireSession(threadId);\n          yield* stopSessionInternal(ctx);\n        }),\n      );\n\n    const listSessions: CursorAdapterShape[\"listSessions\"] = () =>\n      Effect.sync(() => Array.from(sessions.values(), (c) => ({ ...c.session })));\n\n    const hasSession: CursorAdapterShape[\"hasSession\"] = (threadId) =>\n      Effect.sync(() => {\n        const c = sessions.get(threadId);\n        return c !== undefined && !c.stopped;\n      });\n\n    const stopAll: CursorAdapterShape[\"stopAll\"] = () =>\n      Effect.forEach(sessions.values(), stopSessionInternal, { discard: true });\n\n    yield* Effect.addFinalizer(() =>\n      Effect.forEach(sessions.values(), stopSessionInternal, { discard: true }).pipe(\n        Effect.catch((cause) =>\n          Effect.logError(\"Failed to emit Cursor session shutdown event.\", { cause }),\n        ),\n        Effect.tap(() => PubSub.shutdown(runtimeEventPubSub)),\n        Effect.tap(() => managedNativeEventLogger?.close() ?? Effect.void),\n      ),\n    );\n\n    const streamEvents = Stream.fromPubSub(runtimeEventPubSub);\n\n    return {\n      provider: PROVIDER,\n      capabilities: {\n        sessionModelSwitch: \"in-session\",\n        childThreadMode: \"none\",\n        activeTurnSteering: \"unsupported\",\n      },\n      startSession,\n      sendTurn,\n      steerTurn,\n      interruptTurn,\n      readThread,\n      rollbackThread,\n      respondToRequest,\n      respondToUserInput,\n      stopSession,\n      listSessions,\n      hasSession,\n      stopAll,\n      streamEvents,\n    } satisfies CursorAdapterShape;\n  });\n}\n","/**\n * CursorDriver — `ProviderDriver` for the Cursor Agent (`agent`) runtime.\n *\n * Cursor exposes an ACP-based CLI. The driver is still a plain value, but\n * its snapshot uses `makeManagedServerProvider`'s optional `enrichSnapshot`\n * hook to republish maintenance metadata without blocking the initial\n * `ready`-state publish.\n *\n * Text generation is supported via the ACP runtime — `makeCursorTextGeneration`\n * drives `runtime.prompt` with a structured-output schema and collects the\n * agent's `agent_message_chunk` stream into a single JSON blob.\n *\n * @module provider/Drivers/CursorDriver\n */\nimport { CursorSettings, ProviderDriverKind, type ServerProvider } from \"@salchi/contracts\";\nimport * as Duration from \"effect/Duration\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { makeCursorTextGeneration } from \"../../textGeneration/CursorTextGeneration.ts\";\nimport { ProviderDriverError } from \"../Errors.ts\";\nimport { makeCursorAdapter } from \"../Layers/CursorAdapter.ts\";\nimport {\n  buildInitialCursorProviderSnapshot,\n  checkCursorProviderStatus,\n  enrichCursorSnapshot,\n} from \"../Layers/CursorProvider.ts\";\nimport { ProviderEventLoggers } from \"../Layers/ProviderEventLoggers.ts\";\nimport { makeManagedServerProvider } from \"../makeManagedServerProvider.ts\";\nimport {\n  defaultProviderContinuationIdentity,\n  type ProviderDriver,\n  type ProviderInstance,\n} from \"../ProviderDriver.ts\";\nimport type { ServerProviderDraft } from \"../providerSnapshot.ts\";\nimport { mergeProviderInstanceEnvironment } from \"../ProviderInstanceEnvironment.ts\";\nimport {\n  makeProviderMaintenanceCapabilities,\n  makeStaticProviderMaintenanceResolver,\n  resolveProviderMaintenanceCapabilitiesEffect,\n} from \"../providerMaintenance.ts\";\nconst decodeCursorSettings = Schema.decodeSync(CursorSettings);\n\nconst DRIVER_KIND = ProviderDriverKind.make(\"cursor\");\nconst SNAPSHOT_REFRESH_INTERVAL = Duration.minutes(5);\nconst UPDATE = makeStaticProviderMaintenanceResolver(\n  makeProviderMaintenanceCapabilities({\n    provider: DRIVER_KIND,\n    packageName: null,\n    updateExecutable: \"agent\",\n    updateArgs: [\"update\"],\n    updateLockKey: \"cursor-agent\",\n  }),\n);\n\nexport type CursorDriverEnv =\n  | ChildProcessSpawner.ChildProcessSpawner\n  | Crypto.Crypto\n  | FileSystem.FileSystem\n  | HttpClient.HttpClient\n  | Path.Path\n  | ProviderEventLoggers\n  | ServerConfig;\n\nconst withInstanceIdentity =\n  (input: {\n    readonly instanceId: ProviderInstance[\"instanceId\"];\n    readonly displayName: string | undefined;\n    readonly accentColor: string | undefined;\n    readonly continuationGroupKey: string;\n  }) =>\n  (snapshot: ServerProviderDraft): ServerProvider => ({\n    ...snapshot,\n    instanceId: input.instanceId,\n    driver: DRIVER_KIND,\n    ...(input.displayName ? { displayName: input.displayName } : {}),\n    ...(input.accentColor ? { accentColor: input.accentColor } : {}),\n    continuation: { groupKey: input.continuationGroupKey },\n  });\n\nexport const CursorDriver: ProviderDriver<CursorSettings, CursorDriverEnv> = {\n  driverKind: DRIVER_KIND,\n  metadata: {\n    displayName: \"Cursor\",\n    supportsMultipleInstances: true,\n  },\n  configSchema: CursorSettings,\n  defaultConfig: (): CursorSettings => decodeCursorSettings({}),\n  create: ({ instanceId, displayName, accentColor, environment, enabled, config }) =>\n    Effect.gen(function* () {\n      const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n      const fileSystem = yield* FileSystem.FileSystem;\n      const path = yield* Path.Path;\n      const httpClient = yield* HttpClient.HttpClient;\n      const eventLoggers = yield* ProviderEventLoggers;\n      const processEnv = mergeProviderInstanceEnvironment(environment);\n      const continuationIdentity = defaultProviderContinuationIdentity({\n        driverKind: DRIVER_KIND,\n        instanceId,\n      });\n      const stampIdentity = withInstanceIdentity({\n        instanceId,\n        displayName,\n        accentColor,\n        continuationGroupKey: continuationIdentity.continuationKey,\n      });\n      const effectiveConfig = { ...config, enabled } satisfies CursorSettings;\n      const maintenanceCapabilities = yield* resolveProviderMaintenanceCapabilitiesEffect(UPDATE, {\n        binaryPath: effectiveConfig.binaryPath,\n        env: processEnv,\n      });\n\n      const adapter = yield* makeCursorAdapter(effectiveConfig, {\n        environment: processEnv,\n        ...(eventLoggers.native ? { nativeEventLogger: eventLoggers.native } : {}),\n        instanceId,\n      });\n      const textGeneration = yield* makeCursorTextGeneration(effectiveConfig, processEnv);\n\n      const checkProvider = checkCursorProviderStatus(effectiveConfig, processEnv).pipe(\n        Effect.map(stampIdentity),\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n        Effect.provideService(FileSystem.FileSystem, fileSystem),\n        Effect.provideService(Path.Path, path),\n      );\n\n      const snapshot = yield* makeManagedServerProvider<CursorSettings>({\n        maintenanceCapabilities,\n        getSettings: Effect.succeed(effectiveConfig),\n        streamSettings: Stream.never,\n        haveSettingsChanged: () => false,\n        initialSnapshot: (settings) =>\n          buildInitialCursorProviderSnapshot(settings).pipe(Effect.map(stampIdentity)),\n        checkProvider,\n        // Cursor model discovery runs during provider checks. Enrichment only\n        // republishes maintenance metadata such as version advisories.\n        enrichSnapshot: ({ settings, snapshot: currentSnapshot, publishSnapshot }) =>\n          enrichCursorSnapshot({\n            settings,\n            snapshot: currentSnapshot,\n            maintenanceCapabilities,\n            publishSnapshot,\n            stampIdentity,\n            httpClient,\n          }),\n        refreshInterval: SNAPSHOT_REFRESH_INTERVAL,\n      }).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderDriverError({\n              driver: DRIVER_KIND,\n              instanceId,\n              detail: `Failed to build Cursor snapshot: ${cause.message ?? String(cause)}`,\n              cause,\n            }),\n        ),\n      );\n\n      return {\n        instanceId,\n        driverKind: DRIVER_KIND,\n        continuationIdentity,\n        displayName,\n        accentColor,\n        enabled,\n        snapshot,\n        adapter,\n        textGeneration,\n      } satisfies ProviderInstance;\n    }),\n};\n","import { type GrokSettings, ProviderDriverKind } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Scope from \"effect/Scope\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as EffectAcpErrors from \"effect-acp/errors\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\nimport { normalizeModelSlug } from \"@salchi/shared/model\";\n\nimport {\n  AcpSessionRuntime,\n  type AcpSessionRuntimeOptions,\n  type AcpSessionRuntimeShape,\n  type AcpSpawnInput,\n} from \"./AcpSessionRuntime.ts\";\n\nconst GROK_API_KEY_ENV = \"XAI_API_KEY\";\nconst GROK_OAUTH2_REFERRER_ENV = \"GROK_OAUTH2_REFERRER\";\nconst SALCHI_OAUTH_REFERRER = \"salchi\";\nconst GROK_AUTH_METHOD_API_KEY = \"xai.api_key\";\nconst GROK_AUTH_METHOD_CACHED_TOKEN = \"cached_token\";\nconst GROK_DRIVER_KIND = ProviderDriverKind.make(\"grok\");\n\ntype GrokAcpRuntimeGrokSettings = Pick<GrokSettings, \"binaryPath\">;\n\ninterface GrokAcpRuntimeInput extends Omit<\n  AcpSessionRuntimeOptions,\n  \"authMethodId\" | \"clientCapabilities\" | \"spawn\"\n> {\n  readonly childProcessSpawner: ChildProcessSpawner.ChildProcessSpawner[\"Service\"];\n  readonly grokSettings: GrokAcpRuntimeGrokSettings | null | undefined;\n  readonly environment?: NodeJS.ProcessEnv;\n}\n\nexport function buildGrokAcpSpawnInput(\n  grokSettings: GrokAcpRuntimeGrokSettings | null | undefined,\n  cwd: string,\n  environment?: NodeJS.ProcessEnv,\n): AcpSpawnInput {\n  return {\n    command: grokSettings?.binaryPath || \"grok\",\n    args: [\"agent\", \"stdio\"],\n    cwd,\n    env: {\n      ...environment,\n      [GROK_OAUTH2_REFERRER_ENV]: SALCHI_OAUTH_REFERRER,\n    },\n  };\n}\n\nfunction resolveGrokAuthMethodId(environment: NodeJS.ProcessEnv | undefined): string {\n  const effectiveEnv = { ...process.env, ...environment };\n  return effectiveEnv[GROK_API_KEY_ENV]?.trim()\n    ? GROK_AUTH_METHOD_API_KEY\n    : GROK_AUTH_METHOD_CACHED_TOKEN;\n}\n\nexport const makeGrokAcpRuntime = (\n  input: GrokAcpRuntimeInput,\n): Effect.Effect<AcpSessionRuntimeShape, EffectAcpErrors.AcpError, Scope.Scope> =>\n  Effect.gen(function* () {\n    const acpContext = yield* Layer.build(\n      AcpSessionRuntime.layer({\n        ...input,\n        spawn: buildGrokAcpSpawnInput(input.grokSettings, input.cwd, input.environment),\n        authMethodId: resolveGrokAuthMethodId(input.environment),\n      }).pipe(\n        Layer.provide(\n          Layer.succeed(ChildProcessSpawner.ChildProcessSpawner, input.childProcessSpawner),\n        ),\n      ),\n    );\n    return yield* Effect.service(AcpSessionRuntime).pipe(Effect.provide(acpContext));\n  });\n\nexport function resolveGrokAcpBaseModelId(model: string | null | undefined): string {\n  const trimmed = model?.trim();\n  const base = trimmed && trimmed.length > 0 ? trimmed : \"grok-build\";\n  return normalizeModelSlug(base, GROK_DRIVER_KIND) ?? \"grok-build\";\n}\n\nexport function currentGrokModelIdFromSessionSetup(\n  sessionSetupResult:\n    | EffectAcpSchema.LoadSessionResponse\n    | EffectAcpSchema.NewSessionResponse\n    | EffectAcpSchema.ResumeSessionResponse,\n): string | undefined {\n  return sessionSetupResult.models?.currentModelId?.trim() || undefined;\n}\n\nexport function applyGrokAcpModelSelection<E>(input: {\n  readonly runtime: Pick<AcpSessionRuntimeShape, \"setSessionModel\">;\n  readonly currentModelId: string | undefined;\n  readonly requestedModelId: string | undefined;\n  readonly mapError: (cause: EffectAcpErrors.AcpError) => E;\n}): Effect.Effect<string | undefined, E> {\n  const shouldSwitchModel =\n    input.requestedModelId !== undefined && input.requestedModelId !== input.currentModelId;\n  if (!shouldSwitchModel) {\n    return Effect.succeed(input.currentModelId);\n  }\n  return input.runtime\n    .setSessionModel(input.requestedModelId)\n    .pipe(Effect.mapError(input.mapError), Effect.as(input.requestedModelId));\n}\n","import * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport type * as EffectAcpErrors from \"effect-acp/errors\";\n\nimport { type GrokSettings, type ModelSelection } from \"@salchi/contracts\";\nimport { sanitizeBranchFragment, sanitizeFeatureBranchName } from \"@salchi/shared/git\";\nimport { extractJsonObject } from \"@salchi/shared/schemaJson\";\n\nimport { TextGenerationError } from \"@salchi/contracts\";\nimport { type ThreadTitleGenerationResult, type TextGenerationShape } from \"./TextGeneration.ts\";\nimport {\n  buildBranchNamePrompt,\n  buildCommitMessagePrompt,\n  buildPrContentPrompt,\n  buildThreadTitlePrompt,\n} from \"./TextGenerationPrompts.ts\";\nimport {\n  sanitizeCommitSubject,\n  sanitizePrTitle,\n  sanitizeThreadTitle,\n} from \"./TextGenerationUtils.ts\";\nimport {\n  applyGrokAcpModelSelection,\n  currentGrokModelIdFromSessionSetup,\n  makeGrokAcpRuntime,\n  resolveGrokAcpBaseModelId,\n} from \"../provider/acp/GrokAcpSupport.ts\";\n\nconst GROK_TIMEOUT_MS = 180_000;\n\nfunction mapGrokAcpError(\n  operation:\n    | \"generateCommitMessage\"\n    | \"generatePrContent\"\n    | \"generateBranchName\"\n    | \"generateThreadTitle\",\n  detail: string,\n  cause: unknown,\n): TextGenerationError {\n  return new TextGenerationError({\n    operation,\n    detail,\n    ...(cause !== undefined ? { cause } : {}),\n  });\n}\n\nfunction isTextGenerationError(error: unknown): error is TextGenerationError {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"_tag\" in error &&\n    error._tag === \"TextGenerationError\"\n  );\n}\n\nexport const makeGrokTextGeneration = Effect.fn(\"makeGrokTextGeneration\")(function* (\n  grokSettings: GrokSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) {\n  const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n\n  const runGrokJson = <S extends Schema.Top>({\n    operation,\n    cwd,\n    prompt,\n    outputSchemaJson,\n    modelSelection,\n  }: {\n    operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\";\n    cwd: string;\n    prompt: string;\n    outputSchemaJson: S;\n    modelSelection: ModelSelection;\n  }): Effect.Effect<S[\"Type\"], TextGenerationError, S[\"DecodingServices\"]> =>\n    Effect.gen(function* () {\n      const resolvedModel = resolveGrokAcpBaseModelId(modelSelection.model);\n      const outputRef = yield* Ref.make(\"\");\n      const runtime = yield* makeGrokAcpRuntime({\n        grokSettings,\n        environment,\n        childProcessSpawner: commandSpawner,\n        cwd,\n        clientInfo: { name: \"salchi-git-text\", version: \"0.0.0\" },\n      });\n\n      yield* runtime.handleSessionUpdate((notification) => {\n        const update = notification.update;\n        if (update.sessionUpdate !== \"agent_message_chunk\") {\n          return Effect.void;\n        }\n        const content = update.content;\n        if (content.type !== \"text\") {\n          return Effect.void;\n        }\n        return Ref.update(outputRef, (current) => current + content.text);\n      });\n\n      const promptResult = yield* Effect.gen(function* () {\n        const started = yield* runtime.start();\n        yield* applyGrokAcpModelSelection({\n          runtime,\n          currentModelId: currentGrokModelIdFromSessionSetup(started.sessionSetupResult),\n          requestedModelId: resolvedModel,\n          mapError: (cause) =>\n            mapGrokAcpError(\n              operation,\n              \"Failed to set Grok ACP base model for text generation.\",\n              cause,\n            ),\n        });\n\n        return yield* runtime.prompt({\n          prompt: [{ type: \"text\", text: prompt }],\n        });\n      }).pipe(\n        Effect.timeoutOption(GROK_TIMEOUT_MS),\n        Effect.flatMap(\n          Option.match({\n            onNone: () =>\n              Effect.fail(\n                new TextGenerationError({ operation, detail: \"Grok ACP request timed out.\" }),\n              ),\n            onSome: (value) => Effect.succeed(value),\n          }),\n        ),\n        Effect.mapError((cause: EffectAcpErrors.AcpError | TextGenerationError) =>\n          isTextGenerationError(cause)\n            ? cause\n            : mapGrokAcpError(operation, \"Grok ACP request failed.\", cause),\n        ),\n      );\n\n      const trimmed = (yield* Ref.get(outputRef)).trim();\n      if (!trimmed) {\n        return yield* new TextGenerationError({\n          operation,\n          detail:\n            promptResult.stopReason === \"cancelled\"\n              ? \"Grok ACP request was cancelled.\"\n              : \"Grok Agent returned empty output.\",\n        });\n      }\n\n      const decodeOutput = Schema.decodeEffect(Schema.fromJsonString(outputSchemaJson));\n      return yield* decodeOutput(extractJsonObject(trimmed)).pipe(\n        Effect.catchTag(\"SchemaError\", (cause) =>\n          Effect.fail(\n            new TextGenerationError({\n              operation,\n              detail: \"Grok Agent returned invalid structured output.\",\n              cause,\n            }),\n          ),\n        ),\n      );\n    }).pipe(\n      Effect.mapError((cause) =>\n        isTextGenerationError(cause)\n          ? cause\n          : mapGrokAcpError(operation, \"Grok ACP text generation failed.\", cause),\n      ),\n      Effect.scoped,\n    );\n\n  const generateCommitMessage: TextGenerationShape[\"generateCommitMessage\"] = Effect.fn(\n    \"GrokTextGeneration.generateCommitMessage\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildCommitMessagePrompt({\n      branch: input.branch,\n      stagedSummary: input.stagedSummary,\n      stagedPatch: input.stagedPatch,\n      includeBranch: input.includeBranch === true,\n    });\n\n    const generated = yield* runGrokJson({\n      operation: \"generateCommitMessage\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      subject: sanitizeCommitSubject(generated.subject),\n      body: generated.body.trim(),\n      ...(\"branch\" in generated && typeof generated.branch === \"string\"\n        ? { branch: sanitizeFeatureBranchName(generated.branch) }\n        : {}),\n    };\n  });\n\n  const generatePrContent: TextGenerationShape[\"generatePrContent\"] = Effect.fn(\n    \"GrokTextGeneration.generatePrContent\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildPrContentPrompt({\n      baseBranch: input.baseBranch,\n      headBranch: input.headBranch,\n      commitSummary: input.commitSummary,\n      diffSummary: input.diffSummary,\n      diffPatch: input.diffPatch,\n    });\n\n    const generated = yield* runGrokJson({\n      operation: \"generatePrContent\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizePrTitle(generated.title),\n      body: generated.body.trim(),\n    };\n  });\n\n  const generateBranchName: TextGenerationShape[\"generateBranchName\"] = Effect.fn(\n    \"GrokTextGeneration.generateBranchName\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildBranchNamePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runGrokJson({\n      operation: \"generateBranchName\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      branch: sanitizeBranchFragment(generated.branch),\n    };\n  });\n\n  const generateThreadTitle: TextGenerationShape[\"generateThreadTitle\"] = Effect.fn(\n    \"GrokTextGeneration.generateThreadTitle\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildThreadTitlePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n\n    const generated = yield* runGrokJson({\n      operation: \"generateThreadTitle\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizeThreadTitle(generated.title),\n    } satisfies ThreadTitleGenerationResult;\n  });\n\n  return {\n    generateCommitMessage,\n    generatePrContent,\n    generateBranchName,\n    generateThreadTitle,\n  } satisfies TextGenerationShape;\n});\n","import type { ProviderUserInputAnswers, UserInputQuestion } from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\n\nconst XAiAskUserQuestionOption = Schema.Struct({\n  label: Schema.String,\n  description: Schema.optional(Schema.String),\n  preview: Schema.optional(Schema.String),\n  id: Schema.optional(Schema.String),\n});\n\nconst XAiAskUserQuestion = Schema.Struct({\n  id: Schema.optional(Schema.String),\n  question: Schema.String,\n  options: Schema.Array(XAiAskUserQuestionOption),\n  multiSelect: Schema.optional(Schema.NullOr(Schema.Boolean)),\n});\n\nconst XAiAskUserQuestionParams = Schema.Struct({\n  sessionId: Schema.String,\n  toolCallId: Schema.String,\n  questions: Schema.Array(XAiAskUserQuestion),\n  mode: Schema.Literals([\"default\", \"plan\"]),\n});\n\nconst XAiWrappedAskUserQuestionParams = Schema.Struct({\n  method: Schema.Literals([\"x.ai/ask_user_question\", \"_x.ai/ask_user_question\"]),\n  params: XAiAskUserQuestionParams,\n});\n\nexport const XAiAskUserQuestionRequest = Schema.Union([\n  XAiAskUserQuestionParams,\n  XAiWrappedAskUserQuestionParams,\n]);\n\ntype XAiAskUserQuestionRequestParams = typeof XAiAskUserQuestionParams.Type;\ntype XAiAskUserQuestionRequest = typeof XAiAskUserQuestionRequest.Type;\n\nfunction trimmed(value: string | undefined): string | undefined {\n  const text = value?.trim();\n  return text && text.length > 0 ? text : undefined;\n}\n\nfunction unwrapAskUserQuestionParams(\n  params: XAiAskUserQuestionRequest,\n): XAiAskUserQuestionRequestParams {\n  return \"params\" in params ? params.params : params;\n}\n\nexport function extractXAiAskUserQuestions(\n  params: XAiAskUserQuestionRequest,\n): ReadonlyArray<UserInputQuestion> {\n  return unwrapAskUserQuestionParams(params).questions.map((question) => ({\n    id: question.id ?? question.question,\n    header: \"Question\",\n    question: question.question,\n    multiSelect: question.multiSelect === true,\n    options:\n      question.options.length > 0\n        ? question.options.map((option) => ({\n            label: option.label,\n            description: option.description ?? option.label,\n          }))\n        : [{ label: \"OK\", description: \"Continue\" }],\n  }));\n}\n\ninterface XAiAskUserQuestionAnnotation {\n  readonly preview?: string;\n  readonly notes?: string;\n}\n\ninterface XAiAskUserQuestionAcceptedResponse {\n  readonly outcome: \"accepted\";\n  readonly answers: Record<string, ReadonlyArray<string>>;\n  readonly annotations?: Record<string, XAiAskUserQuestionAnnotation>;\n}\n\ninterface XAiAskUserQuestionCancelledResponse {\n  readonly outcome: \"cancelled\";\n}\n\nexport type XAiAskUserQuestionResponse =\n  | XAiAskUserQuestionAcceptedResponse\n  | XAiAskUserQuestionCancelledResponse;\n\ninterface NormalizedXAiAnswer {\n  readonly questionText: string;\n  readonly selectedLabels: ReadonlyArray<string>;\n  readonly annotation?: XAiAskUserQuestionAnnotation;\n}\n\nfunction answerValues(answer: unknown): ReadonlyArray<string> {\n  if (Array.isArray(answer)) {\n    return answer.flatMap((entry) => {\n      const text = typeof entry === \"string\" ? trimmed(entry) : undefined;\n      return text ? [text] : [];\n    });\n  }\n  const text = typeof answer === \"string\" ? trimmed(answer) : undefined;\n  return text ? [text] : [];\n}\n\nfunction normalizeAnswerForXAi(\n  question: XAiAskUserQuestionRequestParams[\"questions\"][number],\n  answer: unknown,\n): NormalizedXAiAnswer | undefined {\n  const values = answerValues(answer);\n  if (values.length === 0) {\n    return undefined;\n  }\n\n  const optionByLabel = new Map(question.options.map((option) => [option.label, option]));\n  const resolvedValues = values.map((value) => ({\n    value,\n    option: optionByLabel.get(value),\n  }));\n  const selectedLabels = resolvedValues.flatMap(({ option }) => (option ? [option.label] : []));\n  const notes = resolvedValues.flatMap(({ option, value }) => (option ? [] : [value]));\n  const preview =\n    question.multiSelect === true\n      ? undefined\n      : resolvedValues.map(({ option }) => trimmed(option?.preview)).find((value) => value);\n\n  const annotation =\n    preview || notes.length > 0\n      ? {\n          ...(preview ? { preview } : {}),\n          ...(notes.length > 0 ? { notes: notes.join(\"\\n\") } : {}),\n        }\n      : undefined;\n\n  return {\n    questionText: question.question,\n    selectedLabels: selectedLabels.length > 0 ? selectedLabels : [\"Other\"],\n    ...(annotation ? { annotation } : {}),\n  };\n}\n\nfunction findQuestionAnswer(\n  answers: ProviderUserInputAnswers,\n  question: XAiAskUserQuestionRequestParams[\"questions\"][number],\n): unknown {\n  const key = question.id ?? question.question;\n  return answers[key] ?? answers[question.question];\n}\n\nexport function makeXAiAskUserQuestionResponse(\n  params: XAiAskUserQuestionRequest,\n  answers: ProviderUserInputAnswers,\n): XAiAskUserQuestionAcceptedResponse {\n  const questions = unwrapAskUserQuestionParams(params).questions;\n  const normalized = questions.flatMap((question) => {\n    const entry = normalizeAnswerForXAi(question, findQuestionAnswer(answers, question));\n    return entry ? [entry] : [];\n  });\n  const annotations = Object.fromEntries(\n    normalized.flatMap((entry) =>\n      entry.annotation ? [[entry.questionText, entry.annotation] as const] : [],\n    ),\n  );\n\n  return {\n    outcome: \"accepted\",\n    answers: Object.fromEntries(\n      normalized.map((entry) => [entry.questionText, entry.selectedLabels]),\n    ),\n    ...(Object.keys(annotations).length > 0 ? { annotations } : {}),\n  };\n}\n\nexport function makeXAiAskUserQuestionCancelledResponse(): XAiAskUserQuestionCancelledResponse {\n  return { outcome: \"cancelled\" };\n}\n","import {\n  ApprovalRequestId,\n  type GrokSettings,\n  EventId,\n  type ProviderApprovalDecision,\n  type ProviderRuntimeEvent,\n  type ProviderSession,\n  type ProviderUserInputAnswers,\n  ProviderDriverKind,\n  ProviderInstanceId,\n  RuntimeRequestId,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport * as Stream from \"effect/Stream\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport * as EffectAcpErrors from \"effect-acp/errors\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { buildAcpAttachmentPromptParts } from \"../attachmentInputs.ts\";\nimport {\n  ProviderAdapterProcessError,\n  ProviderAdapterRequestError,\n  ProviderAdapterSessionNotFoundError,\n  ProviderAdapterValidationError,\n} from \"../Errors.ts\";\nimport { mapAcpToAdapterError } from \"../acp/AcpAdapterSupport.ts\";\nimport { type AcpSessionRuntimeShape } from \"../acp/AcpSessionRuntime.ts\";\nimport {\n  makeAcpAssistantItemEvent,\n  makeAcpContentDeltaEvent,\n  makeAcpPlanUpdatedEvent,\n  makeAcpRequestOpenedEvent,\n  makeAcpRequestResolvedEvent,\n  makeAcpToolCallEvent,\n  offerAcpIndependentThreadCreatedEvent,\n} from \"../acp/AcpCoreRuntimeEvents.ts\";\nimport { parsePermissionRequest } from \"../acp/AcpRuntimeModel.ts\";\nimport { makeAcpNativeLoggerFactory } from \"../acp/AcpNativeLogging.ts\";\nimport {\n  applyGrokAcpModelSelection,\n  currentGrokModelIdFromSessionSetup,\n  makeGrokAcpRuntime,\n  resolveGrokAcpBaseModelId,\n} from \"../acp/GrokAcpSupport.ts\";\nimport {\n  extractXAiAskUserQuestions,\n  makeXAiAskUserQuestionCancelledResponse,\n  makeXAiAskUserQuestionResponse,\n  XAiAskUserQuestionRequest,\n} from \"../acp/XAiAcpExtension.ts\";\nimport { type GrokAdapterShape } from \"../Services/GrokAdapter.ts\";\nimport { type EventNdjsonLogger, makeEventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\n\nconst encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);\n\nconst PROVIDER = ProviderDriverKind.make(\"grok\");\nconst GROK_RESUME_VERSION = 1 as const;\n\nfunction encodeJsonStringForDiagnostics(input: unknown): string | undefined {\n  const result = encodeUnknownJsonStringExit(input);\n  return Exit.isSuccess(result) ? result.value : undefined;\n}\n\nexport interface GrokAdapterLiveOptions {\n  readonly environment?: NodeJS.ProcessEnv;\n  readonly nativeEventLogPath?: string;\n  readonly nativeEventLogger?: EventNdjsonLogger;\n  readonly instanceId?: ProviderInstanceId;\n}\n\ninterface PendingApproval {\n  readonly decision: Deferred.Deferred<ProviderApprovalDecision>;\n}\n\ntype PendingUserInputResolution =\n  | { readonly _tag: \"answered\"; readonly answers: ProviderUserInputAnswers }\n  | { readonly _tag: \"cancelled\" };\n\ninterface PendingUserInput {\n  readonly resolution: Deferred.Deferred<PendingUserInputResolution>;\n}\n\ninterface GrokSessionContext {\n  readonly threadId: ThreadId;\n  readonly acpSessionId: string;\n  session: ProviderSession;\n  readonly scope: Scope.Closeable;\n  readonly acp: AcpSessionRuntimeShape;\n  notificationFiber: Fiber.Fiber<void, never> | undefined;\n  readonly pendingApprovals: Map<ApprovalRequestId, PendingApproval>;\n  readonly pendingUserInputs: Map<ApprovalRequestId, PendingUserInput>;\n  turns: Array<{ id: TurnId; items: Array<unknown> }>;\n  lastPlanFingerprint: string | undefined;\n  activeTurnId: TurnId | undefined;\n  /** Number of sendTurn prompts currently in flight or being prepared. */\n  promptsInFlight: number;\n  currentModelId: string | undefined;\n  stopped: boolean;\n}\n\ninterface ThreadLockEntry {\n  readonly semaphore: Semaphore.Semaphore;\n  readonly users: number;\n}\n\nfunction settlePendingApprovalsAsCancelled(\n  pendingApprovals: ReadonlyMap<ApprovalRequestId, PendingApproval>,\n): Effect.Effect<void> {\n  return Effect.forEach(\n    Array.from(pendingApprovals.values()),\n    (pending) => Deferred.succeed(pending.decision, \"cancel\").pipe(Effect.ignore),\n    { discard: true },\n  );\n}\n\nfunction settlePendingUserInputsAsCancelled(\n  pendingUserInputs: ReadonlyMap<ApprovalRequestId, PendingUserInput>,\n): Effect.Effect<void> {\n  return Effect.forEach(\n    Array.from(pendingUserInputs.values()),\n    (pending) => Deferred.succeed(pending.resolution, { _tag: \"cancelled\" }).pipe(Effect.ignore),\n    { discard: true },\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseGrokResume(raw: unknown): { sessionId: string } | undefined {\n  if (!isRecord(raw)) return undefined;\n  if (raw.schemaVersion !== GROK_RESUME_VERSION) return undefined;\n  if (typeof raw.sessionId !== \"string\" || !raw.sessionId.trim()) return undefined;\n  return { sessionId: raw.sessionId.trim() };\n}\n\nfunction selectPermissionOptionId(\n  request: EffectAcpSchema.RequestPermissionRequest,\n  decision: Exclude<ProviderApprovalDecision, \"cancel\">,\n): string | undefined {\n  const kind =\n    decision === \"acceptForSession\"\n      ? \"allow_always\"\n      : decision === \"accept\"\n        ? \"allow_once\"\n        : \"reject_once\";\n  const option = request.options.find((entry) => entry.kind === kind);\n  return option?.optionId.trim() || undefined;\n}\n\nfunction selectAutoApprovedPermissionOption(\n  request: EffectAcpSchema.RequestPermissionRequest,\n): string | undefined {\n  return (\n    selectPermissionOptionId(request, \"acceptForSession\") ??\n    selectPermissionOptionId(request, \"accept\")\n  );\n}\n\nexport function makeGrokAdapter(grokSettings: GrokSettings, options?: GrokAdapterLiveOptions) {\n  return Effect.gen(function* () {\n    const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(\"grok\");\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const serverConfig = yield* Effect.service(ServerConfig);\n    const crypto = yield* Crypto.Crypto;\n    const nativeEventLogger =\n      options?.nativeEventLogger ??\n      (options?.nativeEventLogPath !== undefined\n        ? yield* makeEventNdjsonLogger(options.nativeEventLogPath, { stream: \"native\" })\n        : undefined);\n    const managedNativeEventLogger =\n      options?.nativeEventLogger === undefined ? nativeEventLogger : undefined;\n    const makeAcpNativeLoggers = yield* makeAcpNativeLoggerFactory();\n\n    const sessions = new Map<ThreadId, GrokSessionContext>();\n    const threadLocksRef = yield* SynchronizedRef.make(new Map<string, ThreadLockEntry>());\n    const runtimeEventPubSub = yield* PubSub.unbounded<ProviderRuntimeEvent>();\n\n    const nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n    const randomUUIDv4 = crypto.randomUUIDv4.pipe(\n      Effect.mapError(\n        (cause) =>\n          new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"crypto/randomUUIDv4\",\n            detail: \"Failed to generate Grok runtime identifier.\",\n            cause,\n          }),\n      ),\n    );\n    const nextEventId = Effect.map(randomUUIDv4, (id) => EventId.make(id));\n    const makeEventStamp = () => Effect.all({ eventId: nextEventId, createdAt: nowIso });\n    const mapAcpCallbackFailure = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n      effect.pipe(\n        Effect.mapError(\n          (cause) =>\n            new EffectAcpErrors.AcpTransportError({\n              detail: \"Failed to process Grok ACP callback.\",\n              cause,\n            }),\n        ),\n      );\n\n    const offerRuntimeEvent = (event: ProviderRuntimeEvent) =>\n      PubSub.publish(runtimeEventPubSub, event).pipe(Effect.asVoid);\n\n    const removeThreadLockIfIdle = (threadId: string) =>\n      SynchronizedRef.update(threadLocksRef, (current) => {\n        const entry = current.get(threadId);\n        if (!entry || entry.users > 0 || sessions.has(ThreadId.make(threadId))) {\n          return current;\n        }\n        const next = new Map(current);\n        next.delete(threadId);\n        return next;\n      });\n\n    const releaseThreadSemaphore = (threadId: string, semaphore: Semaphore.Semaphore) =>\n      SynchronizedRef.update(threadLocksRef, (current) => {\n        const entry = current.get(threadId);\n        if (!entry || entry.semaphore !== semaphore) {\n          return current;\n        }\n        const nextUsers = Math.max(0, entry.users - 1);\n        const next = new Map(current);\n        if (nextUsers === 0 && !sessions.has(ThreadId.make(threadId))) {\n          next.delete(threadId);\n        } else {\n          next.set(threadId, { ...entry, users: nextUsers });\n        }\n        return next;\n      });\n\n    const getThreadSemaphore = (threadId: string) =>\n      SynchronizedRef.modifyEffect(threadLocksRef, (current) => {\n        const existing = current.get(threadId);\n        if (existing) {\n          const next = new Map(current);\n          next.set(threadId, { ...existing, users: existing.users + 1 });\n          return Effect.succeed([existing.semaphore, next] as const);\n        }\n        return Semaphore.make(1).pipe(\n          Effect.map((semaphore) => {\n            const next = new Map(current);\n            next.set(threadId, { semaphore, users: 1 });\n            return [semaphore, next] as const;\n          }),\n        );\n      });\n\n    const withThreadLock = <A, E, R>(threadId: string, effect: Effect.Effect<A, E, R>) =>\n      Effect.flatMap(getThreadSemaphore(threadId), (semaphore) =>\n        semaphore\n          .withPermit(effect)\n          .pipe(Effect.ensuring(releaseThreadSemaphore(threadId, semaphore))),\n      );\n\n    const logNative = (threadId: ThreadId, method: string, payload: unknown) =>\n      Effect.gen(function* () {\n        if (!nativeEventLogger) return;\n        const observedAt = yield* nowIso;\n        yield* nativeEventLogger.write(\n          {\n            observedAt,\n            event: {\n              id: yield* randomUUIDv4,\n              kind: \"notification\",\n              provider: PROVIDER,\n              createdAt: observedAt,\n              method,\n              threadId,\n              payload,\n            },\n          },\n          threadId,\n        );\n      }).pipe(\n        Effect.catchCause((cause) =>\n          Effect.logWarning(\"Failed to write native Grok notification log.\", {\n            cause,\n            threadId,\n            method,\n          }),\n        ),\n      );\n\n    const emitPlanUpdate = (\n      ctx: GrokSessionContext,\n      payload: {\n        readonly explanation?: string | null;\n        readonly plan: ReadonlyArray<{\n          readonly step: string;\n          readonly status: \"pending\" | \"inProgress\" | \"completed\";\n        }>;\n      },\n      rawPayload: unknown,\n      method: string,\n    ) =>\n      Effect.gen(function* () {\n        const fingerprint = `${ctx.activeTurnId ?? \"no-turn\"}:${encodeJsonStringForDiagnostics(payload) ?? \"[unserializable payload]\"}`;\n        if (ctx.lastPlanFingerprint === fingerprint) {\n          return;\n        }\n        ctx.lastPlanFingerprint = fingerprint;\n        yield* offerRuntimeEvent(\n          makeAcpPlanUpdatedEvent({\n            stamp: yield* makeEventStamp(),\n            provider: PROVIDER,\n            threadId: ctx.threadId,\n            turnId: ctx.activeTurnId,\n            payload,\n            source: \"acp.jsonrpc\",\n            method,\n            rawPayload,\n          }),\n        );\n      });\n\n    const requireSession = (\n      threadId: ThreadId,\n    ): Effect.Effect<GrokSessionContext, ProviderAdapterSessionNotFoundError> => {\n      const ctx = sessions.get(threadId);\n      if (!ctx || ctx.stopped) {\n        return Effect.fail(\n          new ProviderAdapterSessionNotFoundError({ provider: PROVIDER, threadId }),\n        );\n      }\n      return Effect.succeed(ctx);\n    };\n\n    const stopSessionInternal = (\n      ctx: GrokSessionContext,\n      options?: { readonly interruptNotificationFiber?: boolean },\n    ) =>\n      Effect.gen(function* () {\n        if (ctx.stopped) return;\n        ctx.stopped = true;\n        yield* settlePendingApprovalsAsCancelled(ctx.pendingApprovals);\n        yield* settlePendingUserInputsAsCancelled(ctx.pendingUserInputs);\n        if ((options?.interruptNotificationFiber ?? true) && ctx.notificationFiber) {\n          yield* Fiber.interrupt(ctx.notificationFiber);\n        }\n        yield* Effect.ignore(Scope.close(ctx.scope, Exit.void));\n        sessions.delete(ctx.threadId);\n        yield* removeThreadLockIfIdle(ctx.threadId);\n        yield* offerRuntimeEvent({\n          type: \"session.exited\",\n          ...(yield* makeEventStamp()),\n          provider: PROVIDER,\n          threadId: ctx.threadId,\n          payload: { exitKind: \"graceful\" },\n        });\n      });\n\n    const startSession: GrokAdapterShape[\"startSession\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          if (input.provider !== undefined && input.provider !== PROVIDER) {\n            return yield* new ProviderAdapterValidationError({\n              provider: PROVIDER,\n              operation: \"startSession\",\n              issue: `Expected provider '${PROVIDER}' but received '${input.provider}'.`,\n            });\n          }\n          if (!input.cwd?.trim()) {\n            return yield* new ProviderAdapterValidationError({\n              provider: PROVIDER,\n              operation: \"startSession\",\n              issue: \"cwd is required and must be non-empty.\",\n            });\n          }\n\n          const cwd = path.resolve(input.cwd.trim());\n          const grokModelSelection =\n            input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection : undefined;\n          const existing = sessions.get(input.threadId);\n          if (existing && !existing.stopped) {\n            yield* stopSessionInternal(existing);\n          }\n\n          const pendingApprovals = new Map<ApprovalRequestId, PendingApproval>();\n          const pendingUserInputs = new Map<ApprovalRequestId, PendingUserInput>();\n          const sessionScope = yield* Scope.make(\"sequential\");\n          let sessionScopeTransferred = false;\n          yield* Effect.addFinalizer(() =>\n            sessionScopeTransferred ? Effect.void : Scope.close(sessionScope, Exit.void),\n          );\n\n          const resumeSessionId = parseGrokResume(input.resumeCursor)?.sessionId;\n          const acpNativeLoggers = makeAcpNativeLoggers({\n            nativeEventLogger,\n            provider: PROVIDER,\n            threadId: input.threadId,\n          });\n\n          const acp = yield* makeGrokAcpRuntime({\n            grokSettings,\n            ...(options?.environment ? { environment: options.environment } : {}),\n            childProcessSpawner,\n            cwd,\n            ...(resumeSessionId ? { resumeSessionId } : {}),\n            clientInfo: { name: \"salchi\", version: \"0.0.0\" },\n            ...acpNativeLoggers,\n          }).pipe(\n            Effect.provideService(Scope.Scope, sessionScope),\n            Effect.mapError(\n              (cause) =>\n                new ProviderAdapterProcessError({\n                  provider: PROVIDER,\n                  threadId: input.threadId,\n                  detail: cause.message,\n                  cause,\n                }),\n            ),\n          );\n          const started = yield* Effect.gen(function* () {\n            yield* Effect.forEach(\n              [\"x.ai/ask_user_question\", \"_x.ai/ask_user_question\"] as const,\n              (method) =>\n                acp.handleExtRequest(method, XAiAskUserQuestionRequest, (params) =>\n                  mapAcpCallbackFailure(\n                    Effect.gen(function* () {\n                      yield* logNative(input.threadId, method, params);\n                      const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n                      const runtimeRequestId = RuntimeRequestId.make(requestId);\n                      const resolution = yield* Deferred.make<PendingUserInputResolution>();\n                      pendingUserInputs.set(requestId, { resolution });\n                      yield* offerRuntimeEvent({\n                        type: \"user-input.requested\",\n                        ...(yield* makeEventStamp()),\n                        provider: PROVIDER,\n                        threadId: input.threadId,\n                        turnId: sessions.get(input.threadId)?.activeTurnId,\n                        requestId: runtimeRequestId,\n                        payload: { questions: extractXAiAskUserQuestions(params) },\n                        raw: {\n                          source: \"acp.grok.extension\",\n                          method,\n                          payload: params,\n                        },\n                      });\n                      const resolved = yield* Deferred.await(resolution);\n                      pendingUserInputs.delete(requestId);\n                      const resolvedAnswers = resolved._tag === \"answered\" ? resolved.answers : {};\n                      yield* offerRuntimeEvent({\n                        type: \"user-input.resolved\",\n                        ...(yield* makeEventStamp()),\n                        provider: PROVIDER,\n                        threadId: input.threadId,\n                        turnId: sessions.get(input.threadId)?.activeTurnId,\n                        requestId: runtimeRequestId,\n                        payload: { answers: resolvedAnswers },\n                        raw: {\n                          source: \"acp.grok.extension\",\n                          method,\n                          payload: params,\n                        },\n                      });\n                      switch (resolved._tag) {\n                        case \"answered\":\n                          return makeXAiAskUserQuestionResponse(params, resolved.answers);\n                        case \"cancelled\":\n                          return makeXAiAskUserQuestionCancelledResponse();\n                      }\n                    }),\n                  ),\n                ),\n              { discard: true },\n            );\n            yield* acp.handleRequestPermission((params) =>\n              mapAcpCallbackFailure(\n                Effect.gen(function* () {\n                  yield* logNative(input.threadId, \"session/request_permission\", params);\n                  if (input.runtimeMode === \"full-access\") {\n                    const autoApprovedOptionId = selectAutoApprovedPermissionOption(params);\n                    if (autoApprovedOptionId !== undefined) {\n                      return {\n                        outcome: {\n                          outcome: \"selected\" as const,\n                          optionId: autoApprovedOptionId,\n                        },\n                      };\n                    }\n                  }\n                  const permissionRequest = parsePermissionRequest(params);\n                  const requestId = ApprovalRequestId.make(yield* randomUUIDv4);\n                  const runtimeRequestId = RuntimeRequestId.make(requestId);\n                  const decision = yield* Deferred.make<ProviderApprovalDecision>();\n                  pendingApprovals.set(requestId, { decision });\n                  yield* offerRuntimeEvent(\n                    makeAcpRequestOpenedEvent({\n                      stamp: yield* makeEventStamp(),\n                      provider: PROVIDER,\n                      threadId: input.threadId,\n                      turnId: sessions.get(input.threadId)?.activeTurnId,\n                      requestId: runtimeRequestId,\n                      permissionRequest,\n                      detail:\n                        permissionRequest.detail ??\n                        encodeJsonStringForDiagnostics(params)?.slice(0, 2000) ??\n                        \"[unserializable params]\",\n                      args: params,\n                      source: \"acp.jsonrpc\",\n                      method: \"session/request_permission\",\n                      rawPayload: params,\n                    }),\n                  );\n                  const resolved = yield* Deferred.await(decision);\n                  pendingApprovals.delete(requestId);\n                  yield* offerRuntimeEvent(\n                    makeAcpRequestResolvedEvent({\n                      stamp: yield* makeEventStamp(),\n                      provider: PROVIDER,\n                      threadId: input.threadId,\n                      turnId: sessions.get(input.threadId)?.activeTurnId,\n                      requestId: runtimeRequestId,\n                      permissionRequest,\n                      decision: resolved,\n                    }),\n                  );\n                  const selectedOptionId =\n                    resolved === \"cancel\" ? undefined : selectPermissionOptionId(params, resolved);\n                  return {\n                    outcome: selectedOptionId\n                      ? {\n                          outcome: \"selected\" as const,\n                          optionId: selectedOptionId,\n                        }\n                      : ({ outcome: \"cancelled\" } as const),\n                  };\n                }),\n              ),\n            );\n            return yield* acp.start();\n          }).pipe(\n            Effect.mapError((error) =>\n              mapAcpToAdapterError(PROVIDER, input.threadId, \"session/start\", error),\n            ),\n          );\n\n          const requestedStartModelId = grokModelSelection?.model\n            ? resolveGrokAcpBaseModelId(grokModelSelection.model)\n            : undefined;\n          const boundModelId = yield* applyGrokAcpModelSelection({\n            runtime: acp,\n            currentModelId: currentGrokModelIdFromSessionSetup(started.sessionSetupResult),\n            requestedModelId: requestedStartModelId,\n            mapError: (cause) =>\n              mapAcpToAdapterError(PROVIDER, input.threadId, \"session/set_model\", cause),\n          });\n\n          const now = yield* nowIso;\n          const session: ProviderSession = {\n            provider: PROVIDER,\n            providerInstanceId: boundInstanceId,\n            status: \"ready\",\n            runtimeMode: input.runtimeMode,\n            cwd,\n            ...(boundModelId ? { model: resolveGrokAcpBaseModelId(boundModelId) } : {}),\n            threadId: input.threadId,\n            resumeCursor: {\n              schemaVersion: GROK_RESUME_VERSION,\n              sessionId: started.sessionId,\n            },\n            createdAt: now,\n            updatedAt: now,\n          };\n\n          const ctx: GrokSessionContext = {\n            threadId: input.threadId,\n            acpSessionId: started.sessionId,\n            session,\n            scope: sessionScope,\n            acp,\n            notificationFiber: undefined,\n            pendingApprovals,\n            pendingUserInputs,\n            turns: [],\n            lastPlanFingerprint: undefined,\n            activeTurnId: undefined,\n            promptsInFlight: 0,\n            currentModelId: boundModelId,\n            stopped: false,\n          };\n\n          const nf = yield* Stream.runDrain(\n            Stream.mapEffect(acp.getEvents(), (event) =>\n              Effect.gen(function* () {\n                switch (event._tag) {\n                  case \"AssistantItemStarted\":\n                    yield* offerRuntimeEvent(\n                      makeAcpAssistantItemEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        itemId: event.itemId,\n                        lifecycle: \"item.started\",\n                      }),\n                    );\n                    return;\n                  case \"AssistantItemCompleted\":\n                    yield* offerRuntimeEvent(\n                      makeAcpAssistantItemEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        itemId: event.itemId,\n                        lifecycle: \"item.completed\",\n                      }),\n                    );\n                    return;\n                  case \"PlanUpdated\":\n                    yield* logNative(ctx.threadId, \"session/update\", event.rawPayload);\n                    yield* emitPlanUpdate(ctx, event.payload, event.rawPayload, \"session/update\");\n                    return;\n                  case \"ToolCallUpdated\":\n                    yield* logNative(ctx.threadId, \"session/update\", event.rawPayload);\n                    yield* offerRuntimeEvent(\n                      makeAcpToolCallEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        toolCall: event.toolCall,\n                        rawPayload: event.rawPayload,\n                      }),\n                    );\n                    yield* offerAcpIndependentThreadCreatedEvent({\n                      stamp: yield* makeEventStamp(),\n                      provider: PROVIDER,\n                      threadId: ctx.threadId,\n                      turnId: ctx.activeTurnId,\n                      toolCall: event.toolCall,\n                      rawPayload: event.rawPayload,\n                      offerRuntimeEvent,\n                    });\n                    return;\n                  case \"ContentDelta\":\n                    yield* logNative(ctx.threadId, \"session/update\", event.rawPayload);\n                    yield* offerRuntimeEvent(\n                      makeAcpContentDeltaEvent({\n                        stamp: yield* makeEventStamp(),\n                        provider: PROVIDER,\n                        threadId: ctx.threadId,\n                        turnId: ctx.activeTurnId,\n                        ...(event.itemId ? { itemId: event.itemId } : {}),\n                        text: event.text,\n                        rawPayload: event.rawPayload,\n                      }),\n                    );\n                    return;\n                }\n              }),\n            ),\n          ).pipe(\n            Effect.catch((cause) =>\n              Effect.logError(\"Failed to process Grok runtime notification.\", { cause }).pipe(\n                Effect.andThen(\n                  stopSessionInternal(ctx, { interruptNotificationFiber: false }).pipe(\n                    Effect.catchCause((cleanupCause) =>\n                      Effect.logError(\"Failed to clean up Grok session after notification error.\", {\n                        cause: cleanupCause,\n                      }),\n                    ),\n                  ),\n                ),\n              ),\n            ),\n            Effect.forkChild,\n          );\n\n          ctx.notificationFiber = nf;\n          sessions.set(input.threadId, ctx);\n          sessionScopeTransferred = true;\n\n          yield* offerRuntimeEvent({\n            type: \"session.started\",\n            ...(yield* makeEventStamp()),\n            provider: PROVIDER,\n            threadId: input.threadId,\n            payload: { resume: started.initializeResult },\n          });\n          yield* offerRuntimeEvent({\n            type: \"session.state.changed\",\n            ...(yield* makeEventStamp()),\n            provider: PROVIDER,\n            threadId: input.threadId,\n            payload: { state: \"ready\", reason: \"Grok ACP session ready\" },\n          });\n          yield* offerRuntimeEvent({\n            type: \"thread.started\",\n            ...(yield* makeEventStamp()),\n            provider: PROVIDER,\n            threadId: input.threadId,\n            payload: { providerThreadId: started.sessionId },\n          });\n\n          return session;\n        }).pipe(Effect.scoped),\n      );\n\n    const sendTurn: GrokAdapterShape[\"sendTurn\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          const ctx = yield* requireSession(input.threadId);\n          const turnId = TurnId.make(yield* randomUUIDv4);\n          ctx.promptsInFlight += 1;\n\n          return yield* Effect.gen(function* () {\n            const turnModelSelection =\n              input.modelSelection?.instanceId === boundInstanceId\n                ? input.modelSelection\n                : undefined;\n            const requestedTurnModelId = turnModelSelection?.model\n              ? resolveGrokAcpBaseModelId(turnModelSelection.model)\n              : undefined;\n            const currentModelId = yield* applyGrokAcpModelSelection({\n              runtime: ctx.acp,\n              currentModelId: ctx.currentModelId,\n              requestedModelId: requestedTurnModelId,\n              mapError: (cause) =>\n                mapAcpToAdapterError(PROVIDER, input.threadId, \"session/set_model\", cause),\n            });\n\n            const text = input.input?.trim();\n            const attachmentPromptParts = yield* buildAcpAttachmentPromptParts({\n              attachments: input.attachments,\n              attachmentsDir: serverConfig.attachmentsDir,\n              fileSystem,\n              provider: PROVIDER,\n              method: \"session/prompt\",\n            });\n            const promptParts: Array<EffectAcpSchema.ContentBlock> = [\n              ...(text ? [{ type: \"text\" as const, text }] : []),\n              ...attachmentPromptParts,\n            ];\n\n            if (promptParts.length === 0) {\n              return yield* new ProviderAdapterValidationError({\n                provider: PROVIDER,\n                operation: \"sendTurn\",\n                issue: \"Turn requires non-empty text or attachments.\",\n              });\n            }\n\n            ctx.currentModelId = currentModelId;\n            const displayModel = currentModelId\n              ? resolveGrokAcpBaseModelId(currentModelId)\n              : undefined;\n            ctx.activeTurnId = turnId;\n            ctx.lastPlanFingerprint = undefined;\n            ctx.session = {\n              ...ctx.session,\n              activeTurnId: turnId,\n              updatedAt: yield* nowIso,\n              ...(displayModel ? { model: displayModel } : {}),\n            };\n\n            yield* offerRuntimeEvent({\n              type: \"turn.started\",\n              ...(yield* makeEventStamp()),\n              provider: PROVIDER,\n              threadId: input.threadId,\n              turnId,\n              payload: displayModel ? { model: displayModel } : {},\n            });\n\n            const result = yield* ctx.acp\n              .prompt({\n                prompt: promptParts,\n              })\n              .pipe(\n                Effect.mapError((error) =>\n                  mapAcpToAdapterError(PROVIDER, input.threadId, \"session/prompt\", error),\n                ),\n              );\n\n            const liveCtx = yield* requireSession(input.threadId);\n            if (liveCtx.acpSessionId !== ctx.acpSessionId) {\n              return yield* new ProviderAdapterRequestError({\n                provider: PROVIDER,\n                method: \"session/prompt\",\n                detail: \"Grok session changed before the turn completed.\",\n              });\n            }\n\n            const existingTurnRecord = ctx.turns.find((turn) => turn.id === turnId);\n            ctx.turns = existingTurnRecord\n              ? ctx.turns.map((turn) =>\n                  turn.id === turnId\n                    ? {\n                        ...turn,\n                        items: [...turn.items, { prompt: promptParts, result }],\n                      }\n                    : turn,\n                )\n              : [...ctx.turns, { id: turnId, items: [{ prompt: promptParts, result }] }];\n            ctx.session = {\n              ...ctx.session,\n              activeTurnId: turnId,\n              updatedAt: yield* nowIso,\n              ...(displayModel ? { model: displayModel } : {}),\n            };\n\n            yield* offerRuntimeEvent({\n              type: \"turn.completed\",\n              ...(yield* makeEventStamp()),\n              provider: PROVIDER,\n              threadId: input.threadId,\n              turnId,\n              payload: {\n                state: result.stopReason === \"cancelled\" ? \"cancelled\" : \"completed\",\n                stopReason: result.stopReason ?? null,\n              },\n            });\n\n            return {\n              threadId: input.threadId,\n              turnId,\n              resumeCursor: ctx.session.resumeCursor,\n            };\n          }).pipe(\n            Effect.ensuring(\n              Effect.sync(() => {\n                ctx.promptsInFlight = Math.max(0, ctx.promptsInFlight - 1);\n              }),\n            ),\n          );\n        }),\n      );\n\n    const interruptTurn: GrokAdapterShape[\"interruptTurn\"] = (threadId) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        yield* settlePendingApprovalsAsCancelled(ctx.pendingApprovals);\n        yield* settlePendingUserInputsAsCancelled(ctx.pendingUserInputs);\n        yield* Effect.ignore(\n          ctx.acp.cancel.pipe(\n            Effect.mapError((error) =>\n              mapAcpToAdapterError(PROVIDER, threadId, \"session/cancel\", error),\n            ),\n          ),\n        );\n      });\n\n    const steerTurn: GrokAdapterShape[\"steerTurn\"] = (input) =>\n      Effect.fail(\n        new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"turn/steer\",\n          detail: `Grok ACP does not expose active-turn steering for turn '${input.expectedTurnId}'.`,\n        }),\n      );\n\n    const respondToRequest: GrokAdapterShape[\"respondToRequest\"] = (\n      threadId,\n      requestId,\n      decision,\n    ) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        const pending = ctx.pendingApprovals.get(requestId);\n        if (!pending) {\n          return yield* new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"session/request_permission\",\n            detail: `Unknown pending approval request: ${requestId}`,\n          });\n        }\n        yield* Deferred.succeed(pending.decision, decision);\n      });\n\n    const respondToUserInput: GrokAdapterShape[\"respondToUserInput\"] = (\n      threadId,\n      requestId,\n      answers,\n    ) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        const pending = ctx.pendingUserInputs.get(requestId);\n        if (!pending) {\n          return yield* new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"_x.ai/ask_user_question\",\n            detail: `Unknown pending user-input request: ${requestId}`,\n          });\n        }\n        yield* Deferred.succeed(pending.resolution, { _tag: \"answered\", answers });\n      });\n\n    const readThread: GrokAdapterShape[\"readThread\"] = (threadId) =>\n      Effect.gen(function* () {\n        const ctx = yield* requireSession(threadId);\n        return { threadId, turns: ctx.turns };\n      });\n\n    const rollbackThread: GrokAdapterShape[\"rollbackThread\"] = (threadId, numTurns) =>\n      Effect.gen(function* () {\n        yield* requireSession(threadId);\n        if (!Number.isInteger(numTurns) || numTurns < 1) {\n          return yield* new ProviderAdapterValidationError({\n            provider: PROVIDER,\n            operation: \"rollbackThread\",\n            issue: \"numTurns must be an integer >= 1.\",\n          });\n        }\n        return yield* new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"thread/rollback\",\n          detail: \"Grok ACP sessions do not support provider-side rollback yet.\",\n        });\n      });\n\n    const stopSession: GrokAdapterShape[\"stopSession\"] = (threadId) =>\n      withThreadLock(\n        threadId,\n        Effect.gen(function* () {\n          const ctx = yield* requireSession(threadId);\n          yield* stopSessionInternal(ctx);\n        }),\n      );\n\n    const listSessions: GrokAdapterShape[\"listSessions\"] = () =>\n      Effect.sync(() => Array.from(sessions.values(), (c) => ({ ...c.session })));\n\n    const hasSession: GrokAdapterShape[\"hasSession\"] = (threadId) =>\n      Effect.sync(() => {\n        const c = sessions.get(threadId);\n        return c !== undefined && !c.stopped;\n      });\n\n    const stopAll: GrokAdapterShape[\"stopAll\"] = () =>\n      Effect.forEach(Array.from(sessions.values()), (ctx) => stopSessionInternal(ctx), {\n        discard: true,\n      });\n\n    yield* Effect.addFinalizer(() =>\n      Effect.ignore(stopAll()).pipe(\n        Effect.tap(() => PubSub.shutdown(runtimeEventPubSub)),\n        Effect.tap(() => managedNativeEventLogger?.close() ?? Effect.void),\n      ),\n    );\n\n    const streamEvents = Stream.fromPubSub(runtimeEventPubSub);\n\n    return {\n      provider: PROVIDER,\n      capabilities: {\n        sessionModelSwitch: \"in-session\",\n        childThreadMode: \"none\",\n        activeTurnSteering: \"unsupported\",\n      },\n      startSession,\n      sendTurn,\n      steerTurn,\n      interruptTurn,\n      readThread,\n      rollbackThread,\n      respondToRequest,\n      respondToUserInput,\n      stopSession,\n      listSessions,\n      hasSession,\n      stopAll,\n      streamEvents,\n    } satisfies GrokAdapterShape;\n  });\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport {\n  spawn as spawnChildProcess,\n  type ChildProcessWithoutNullStreams,\n} from \"node:child_process\";\nimport {\n  type GrokSettings,\n  type ModelCapabilities,\n  ProviderDriverKind,\n  type ServerProvider,\n  type ServerProviderModel,\n} from \"@salchi/contracts\";\nimport type * as EffectAcpSchema from \"effect-acp/schema\";\nimport * as Cause from \"effect/Cause\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport { createModelCapabilities } from \"@salchi/shared/model\";\nimport { resolveSpawnCommand } from \"@salchi/shared/shell\";\n\nimport {\n  buildServerProvider,\n  type CommandResult,\n  detailFromResult,\n  isCommandMissingCause,\n  parseGenericCliVersion,\n  ProviderCommandExecutionError,\n  providerModelsFromSettings,\n  type ServerProviderDraft,\n} from \"../providerSnapshot.ts\";\nimport {\n  enrichProviderSnapshotWithVersionAdvisory,\n  type ProviderMaintenanceCapabilities,\n} from \"../providerMaintenance.ts\";\nimport { makeGrokAcpRuntime, resolveGrokAcpBaseModelId } from \"../acp/GrokAcpSupport.ts\";\nimport { isWindowsCommandNotFound } from \"../../processRunner.ts\";\n\nconst GROK_PRESENTATION = {\n  displayName: \"Grok\",\n  badgeLabel: \"Early Access\",\n  showInteractionModeToggle: false,\n  requiresNewThreadForModelChange: true,\n} as const;\nconst PROVIDER = ProviderDriverKind.make(\"grok\");\nconst EMPTY_CAPABILITIES: ModelCapabilities = createModelCapabilities({\n  optionDescriptors: [],\n});\n\nconst VERSION_PROBE_TIMEOUT_MS = 4_000;\nconst GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS = 15_000;\n\nconst GROK_BUILT_IN_MODELS: ReadonlyArray<ServerProviderModel> = [\n  {\n    slug: \"grok-build\",\n    name: \"Grok Build\",\n    isCustom: false,\n    capabilities: EMPTY_CAPABILITIES,\n  },\n];\n\nexport function buildInitialGrokProviderSnapshot(\n  grokSettings: GrokSettings,\n): Effect.Effect<ServerProviderDraft> {\n  return Effect.gen(function* () {\n    const checkedAt = yield* Effect.map(DateTime.now, DateTime.formatIso);\n    const models = grokModelsFromSettings(grokSettings.customModels);\n\n    if (!grokSettings.enabled) {\n      return buildServerProvider({\n        presentation: GROK_PRESENTATION,\n        enabled: false,\n        checkedAt,\n        models,\n        probe: {\n          installed: false,\n          version: null,\n          status: \"warning\",\n          auth: { status: \"unknown\" },\n          message: \"Grok is disabled in Salchi settings.\",\n        },\n      });\n    }\n\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: true,\n      checkedAt,\n      models,\n      probe: {\n        installed: true,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Checking Grok CLI availability...\",\n      },\n    });\n  });\n}\n\nfunction grokModelsFromSettings(\n  customModels: ReadonlyArray<string> | undefined,\n  builtInModels: ReadonlyArray<ServerProviderModel> = GROK_BUILT_IN_MODELS,\n): ReadonlyArray<ServerProviderModel> {\n  return providerModelsFromSettings(\n    builtInModels,\n    PROVIDER,\n    customModels ?? [],\n    EMPTY_CAPABILITIES,\n  );\n}\n\nfunction buildGrokDiscoveredModelsFromSessionModelState(\n  modelState: EffectAcpSchema.SessionModelState | null | undefined,\n): ReadonlyArray<ServerProviderModel> {\n  if (!modelState || modelState.availableModels.length === 0) {\n    return [];\n  }\n  const seen = new Set<string>();\n  return modelState.availableModels\n    .map((model): ServerProviderModel | undefined => {\n      const slug = resolveGrokAcpBaseModelId(model.modelId);\n      if (!slug || seen.has(slug)) {\n        return undefined;\n      }\n      seen.add(slug);\n      return {\n        slug,\n        name: model.name.trim() || slug,\n        isCustom: false,\n        capabilities: EMPTY_CAPABILITIES,\n      };\n    })\n    .filter((model): model is ServerProviderModel => model !== undefined);\n}\n\nconst discoverGrokModelsViaAcp = (\n  grokSettings: GrokSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) =>\n  Effect.gen(function* () {\n    const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n    const acp = yield* makeGrokAcpRuntime({\n      grokSettings,\n      environment,\n      childProcessSpawner,\n      cwd: process.cwd(),\n      clientInfo: { name: \"salchi-provider-probe\", version: \"0.0.0\" },\n    });\n    const started = yield* acp.start();\n    return buildGrokDiscoveredModelsFromSessionModelState(started.sessionSetupResult.models);\n  }).pipe(Effect.scoped);\n\nconst runGrokVersionCommand = (\n  grokSettings: GrokSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) => {\n  const command = grokSettings.binaryPath || \"grok\";\n  const spawnCommand = resolveSpawnCommand(command, [\"--version\"], {\n    env: environment,\n  });\n  return Effect.callback<CommandResult, ProviderCommandExecutionError>((resume, signal) => {\n    let child: ChildProcessWithoutNullStreams;\n    try {\n      child = spawnChildProcess(spawnCommand.command, [...spawnCommand.args], {\n        env: environment,\n        shell: spawnCommand.shell,\n        detached: process.platform !== \"win32\",\n      });\n    } catch (error) {\n      resume(\n        Effect.fail(\n          new ProviderCommandExecutionError({\n            message: error instanceof Error ? error.message : String(error),\n          }),\n        ),\n      );\n      return;\n    }\n\n    let stdout = \"\";\n    let stderr = \"\";\n    let settled = false;\n\n    const terminate = (killSignal: NodeJS.Signals) => {\n      if (process.platform !== \"win32\" && child.pid !== undefined) {\n        try {\n          process.kill(-child.pid, killSignal);\n        } catch {\n          // The process group may already be gone.\n        }\n      }\n      try {\n        child.kill(killSignal);\n      } catch {\n        // The process may already have exited.\n      }\n    };\n\n    const removeListeners = () => {\n      signal.removeEventListener(\"abort\", onAbort);\n      child.stdout.removeAllListeners();\n      child.stderr.removeAllListeners();\n      child.removeListener(\"error\", onError);\n      child.removeListener(\"close\", onClose);\n    };\n\n    const finish = (effect: Effect.Effect<CommandResult, ProviderCommandExecutionError>) => {\n      if (settled) return;\n      settled = true;\n      removeListeners();\n      resume(effect);\n    };\n\n    const interrupt = () => {\n      if (settled) return;\n      settled = true;\n      removeListeners();\n      terminate(\"SIGTERM\");\n      terminate(\"SIGKILL\");\n    };\n\n    const onAbort = () => interrupt();\n    const onError = (error: Error) =>\n      finish(\n        Effect.fail(\n          new ProviderCommandExecutionError({\n            message: error.message,\n          }),\n        ),\n      );\n    const onClose = (code: number | null) => {\n      const exitCode = typeof code === \"number\" ? code : 1;\n      if (isWindowsCommandNotFound(exitCode, stderr)) {\n        finish(\n          Effect.fail(new ProviderCommandExecutionError({ message: `spawn ${command} ENOENT` })),\n        );\n        return;\n      }\n      finish(Effect.succeed({ stdout, stderr, code: exitCode }));\n    };\n\n    child.stdout.setEncoding(\"utf8\");\n    child.stderr.setEncoding(\"utf8\");\n    child.stdout.on(\"data\", (chunk: string | Buffer) => {\n      stdout += String(chunk);\n    });\n    child.stderr.on(\"data\", (chunk: string | Buffer) => {\n      stderr += String(chunk);\n    });\n    child.on(\"error\", onError);\n    child.on(\"close\", onClose);\n    signal.addEventListener(\"abort\", onAbort, { once: true });\n\n    if (signal.aborted) {\n      interrupt();\n    }\n\n    return Effect.sync(interrupt);\n  });\n};\n\nexport const checkGrokProviderStatus = Effect.fn(\"checkGrokProviderStatus\")(function* (\n  grokSettings: GrokSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<ServerProviderDraft, never, ChildProcessSpawner.ChildProcessSpawner> {\n  const checkedAt = DateTime.formatIso(yield* DateTime.now);\n  const fallbackModels = grokModelsFromSettings(grokSettings.customModels);\n\n  if (!grokSettings.enabled) {\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: false,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"Grok is disabled in Salchi settings.\",\n      },\n    });\n  }\n\n  const versionResult = yield* runGrokVersionCommand(grokSettings, environment).pipe(\n    Effect.timeoutOption(VERSION_PROBE_TIMEOUT_MS),\n    Effect.result,\n  );\n\n  if (Result.isFailure(versionResult)) {\n    const error = versionResult.failure;\n    const detail = error instanceof Error ? error.message : \"Unknown Grok CLI health check error\";\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: grokSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: !isCommandMissingCause(error),\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: isCommandMissingCause(error)\n          ? \"Grok CLI (`grok`) is not installed or not on PATH.\"\n          : `Failed to execute Grok CLI health check: ${detail}.`,\n      },\n    });\n  }\n\n  if (Option.isNone(versionResult.success)) {\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: grokSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: true,\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: \"Grok CLI is installed but timed out while running `grok --version`.\",\n      },\n    });\n  }\n\n  const versionOutput = versionResult.success.value;\n  const version = parseGenericCliVersion(`${versionOutput.stdout}\\n${versionOutput.stderr}`);\n  if (versionOutput.code !== 0) {\n    const detail = detailFromResult(versionOutput);\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: grokSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: true,\n        version,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: detail\n          ? `Grok CLI is installed but failed to run. ${detail}`\n          : \"Grok CLI is installed but failed to run.\",\n      },\n    });\n  }\n\n  const discoveryExit = yield* discoverGrokModelsViaAcp(grokSettings, environment).pipe(\n    Effect.timeoutOption(GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS),\n    Effect.exit,\n  );\n  if (Exit.isFailure(discoveryExit)) {\n    const detail = Cause.pretty(discoveryExit.cause);\n    yield* Effect.logWarning(\"Grok ACP model discovery failed\", { cause: detail });\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: grokSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: true,\n        version,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: `Grok CLI is installed but ACP startup failed. ${detail}`,\n      },\n    });\n  }\n  if (Option.isNone(discoveryExit.value)) {\n    yield* Effect.logWarning(\n      `Grok ACP model discovery timed out after ${GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS}ms.`,\n    );\n    return buildServerProvider({\n      presentation: GROK_PRESENTATION,\n      enabled: grokSettings.enabled,\n      checkedAt,\n      models: fallbackModels,\n      probe: {\n        installed: true,\n        version,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: `Grok CLI is installed but ACP startup timed out after ${GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS}ms.`,\n      },\n    });\n  }\n  const discoveredModels = discoveryExit.value.value;\n  const models =\n    discoveredModels.length > 0\n      ? grokModelsFromSettings(grokSettings.customModels, discoveredModels)\n      : fallbackModels;\n\n  return buildServerProvider({\n    presentation: GROK_PRESENTATION,\n    enabled: grokSettings.enabled,\n    checkedAt,\n    models,\n    probe: {\n      installed: true,\n      version,\n      status: \"ready\",\n      auth: { status: \"unknown\" },\n    },\n  });\n});\n\nexport const enrichGrokSnapshot = (input: {\n  readonly snapshot: ServerProvider;\n  readonly maintenanceCapabilities: ProviderMaintenanceCapabilities;\n  readonly publishSnapshot: (snapshot: ServerProvider) => Effect.Effect<void>;\n  readonly httpClient: HttpClient.HttpClient;\n}): Effect.Effect<void> => {\n  const { snapshot, publishSnapshot } = input;\n\n  return enrichProviderSnapshotWithVersionAdvisory(snapshot, input.maintenanceCapabilities).pipe(\n    Effect.provideService(HttpClient.HttpClient, input.httpClient),\n    Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot)),\n    Effect.catchCause((cause) =>\n      Effect.logWarning(\"Grok version advisory enrichment failed\", {\n        cause: Cause.pretty(cause),\n      }),\n    ),\n    Effect.asVoid,\n  );\n};\n","import { GrokSettings, ProviderDriverKind, type ServerProvider } from \"@salchi/contracts\";\nimport * as Duration from \"effect/Duration\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { makeGrokTextGeneration } from \"../../textGeneration/GrokTextGeneration.ts\";\nimport { ProviderDriverError } from \"../Errors.ts\";\nimport { makeGrokAdapter } from \"../Layers/GrokAdapter.ts\";\nimport {\n  buildInitialGrokProviderSnapshot,\n  checkGrokProviderStatus,\n  enrichGrokSnapshot,\n} from \"../Layers/GrokProvider.ts\";\nimport { ProviderEventLoggers } from \"../Layers/ProviderEventLoggers.ts\";\nimport { makeManagedServerProvider } from \"../makeManagedServerProvider.ts\";\nimport {\n  defaultProviderContinuationIdentity,\n  type ProviderDriver,\n  type ProviderInstance,\n} from \"../ProviderDriver.ts\";\nimport type { ServerProviderDraft } from \"../providerSnapshot.ts\";\nimport { mergeProviderInstanceEnvironment } from \"../ProviderInstanceEnvironment.ts\";\nimport {\n  makeManualOnlyProviderMaintenanceCapabilities,\n  makeStaticProviderMaintenanceResolver,\n  resolveProviderMaintenanceCapabilitiesEffect,\n} from \"../providerMaintenance.ts\";\nconst decodeGrokSettings = Schema.decodeSync(GrokSettings);\n\nconst DRIVER_KIND = ProviderDriverKind.make(\"grok\");\nconst SNAPSHOT_REFRESH_INTERVAL = Duration.minutes(5);\nconst UPDATE = makeStaticProviderMaintenanceResolver(\n  makeManualOnlyProviderMaintenanceCapabilities({\n    provider: DRIVER_KIND,\n    packageName: null,\n  }),\n);\n\nexport type GrokDriverEnv =\n  | ChildProcessSpawner.ChildProcessSpawner\n  | Crypto.Crypto\n  | FileSystem.FileSystem\n  | HttpClient.HttpClient\n  | Path.Path\n  | ProviderEventLoggers\n  | ServerConfig;\n\nconst withInstanceIdentity =\n  (input: {\n    readonly instanceId: ProviderInstance[\"instanceId\"];\n    readonly displayName: string | undefined;\n    readonly accentColor: string | undefined;\n    readonly continuationGroupKey: string;\n  }) =>\n  (snapshot: ServerProviderDraft): ServerProvider => ({\n    ...snapshot,\n    instanceId: input.instanceId,\n    driver: DRIVER_KIND,\n    ...(input.displayName ? { displayName: input.displayName } : {}),\n    ...(input.accentColor ? { accentColor: input.accentColor } : {}),\n    continuation: { groupKey: input.continuationGroupKey },\n  });\n\nexport const GrokDriver: ProviderDriver<GrokSettings, GrokDriverEnv> = {\n  driverKind: DRIVER_KIND,\n  metadata: {\n    displayName: \"Grok\",\n    supportsMultipleInstances: true,\n  },\n  configSchema: GrokSettings,\n  defaultConfig: (): GrokSettings => decodeGrokSettings({}),\n  create: ({ instanceId, displayName, accentColor, environment, enabled, config }) =>\n    Effect.gen(function* () {\n      const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n      const httpClient = yield* HttpClient.HttpClient;\n      const eventLoggers = yield* ProviderEventLoggers;\n      const processEnv = mergeProviderInstanceEnvironment(environment);\n      const continuationIdentity = defaultProviderContinuationIdentity({\n        driverKind: DRIVER_KIND,\n        instanceId,\n      });\n      const stampIdentity = withInstanceIdentity({\n        instanceId,\n        displayName,\n        accentColor,\n        continuationGroupKey: continuationIdentity.continuationKey,\n      });\n      const effectiveConfig = { ...config, enabled } satisfies GrokSettings;\n      const maintenanceCapabilities = yield* resolveProviderMaintenanceCapabilitiesEffect(UPDATE, {\n        binaryPath: effectiveConfig.binaryPath,\n        env: processEnv,\n      });\n\n      const adapter = yield* makeGrokAdapter(effectiveConfig, {\n        environment: processEnv,\n        ...(eventLoggers.native ? { nativeEventLogger: eventLoggers.native } : {}),\n        instanceId,\n      });\n      const textGeneration = yield* makeGrokTextGeneration(effectiveConfig, processEnv);\n\n      const checkProvider = checkGrokProviderStatus(effectiveConfig, processEnv).pipe(\n        Effect.map(stampIdentity),\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner),\n      );\n\n      const snapshot = yield* makeManagedServerProvider<GrokSettings>({\n        maintenanceCapabilities,\n        getSettings: Effect.succeed(effectiveConfig),\n        streamSettings: Stream.never,\n        haveSettingsChanged: () => false,\n        initialSnapshot: (settings) =>\n          buildInitialGrokProviderSnapshot(settings).pipe(Effect.map(stampIdentity)),\n        checkProvider,\n        enrichSnapshot: ({ snapshot: currentSnapshot, publishSnapshot }) =>\n          enrichGrokSnapshot({\n            snapshot: currentSnapshot,\n            maintenanceCapabilities,\n            publishSnapshot,\n            httpClient,\n          }),\n        refreshInterval: SNAPSHOT_REFRESH_INTERVAL,\n      }).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderDriverError({\n              driver: DRIVER_KIND,\n              instanceId,\n              detail: `Failed to build Grok snapshot: ${cause.message ?? String(cause)}`,\n              cause,\n            }),\n        ),\n      );\n\n      return {\n        instanceId,\n        driverKind: DRIVER_KIND,\n        continuationIdentity,\n        displayName,\n        accentColor,\n        enabled,\n        snapshot,\n        adapter,\n        textGeneration,\n      } satisfies ProviderInstance;\n    }),\n};\n","import * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Semaphore from \"effect/Semaphore\";\n\nimport {\n  TextGenerationError,\n  type ChatAttachment,\n  type ModelSelection,\n  type OpenCodeSettings,\n} from \"@salchi/contracts\";\nimport { sanitizeBranchFragment, sanitizeFeatureBranchName } from \"@salchi/shared/git\";\nimport { getModelSelectionStringOptionValue } from \"@salchi/shared/model\";\nimport { extractJsonObject } from \"@salchi/shared/schemaJson\";\n\nimport { ServerConfig } from \"../config.ts\";\nimport { resolveAttachmentPath } from \"../attachmentStore.ts\";\nimport {\n  buildBranchNamePrompt,\n  buildCommitMessagePrompt,\n  buildPrContentPrompt,\n  buildThreadTitlePrompt,\n} from \"./TextGenerationPrompts.ts\";\nimport { type TextGenerationShape } from \"./TextGeneration.ts\";\nimport {\n  sanitizeCommitSubject,\n  sanitizePrTitle,\n  sanitizeThreadTitle,\n} from \"./TextGenerationUtils.ts\";\nimport {\n  OpenCodeRuntime,\n  type OpenCodeServerConnection,\n  type OpenCodeServerProcess,\n  openCodeRuntimeErrorDetail,\n  parseOpenCodeModelSlug,\n  toOpenCodeFileParts,\n} from \"../provider/opencodeRuntime.ts\";\n\nconst OPENCODE_TEXT_GENERATION_IDLE_TTL = \"30 seconds\";\n\nfunction getOpenCodePromptErrorMessage(error: unknown): string | null {\n  if (!error || typeof error !== \"object\") {\n    return null;\n  }\n\n  const message =\n    \"data\" in error &&\n    error.data &&\n    typeof error.data === \"object\" &&\n    \"message\" in error.data &&\n    typeof error.data.message === \"string\"\n      ? error.data.message.trim()\n      : \"\";\n  if (message.length > 0) {\n    return message;\n  }\n\n  if (\"name\" in error && typeof error.name === \"string\") {\n    const name = error.name.trim();\n    return name.length > 0 ? name : null;\n  }\n\n  return null;\n}\n\nfunction getOpenCodeTextResponse(parts: ReadonlyArray<unknown> | undefined): string {\n  return (parts ?? [])\n    .flatMap((part) => {\n      if (!part || typeof part !== \"object\") {\n        return [];\n      }\n      if (!(\"type\" in part) || part.type !== \"text\") {\n        return [];\n      }\n      if (!(\"text\" in part) || typeof part.text !== \"string\") {\n        return [];\n      }\n      return [part.text];\n    })\n    .join(\"\")\n    .trim();\n}\n\ninterface SharedOpenCodeTextGenerationServerState {\n  server: OpenCodeServerProcess | null;\n  /**\n   * The scope that owns the shared server's lifetime. Closing this scope\n   * terminates the OpenCode child process and interrupts any fibers the\n   * runtime forked during startup. We don't hold a `close()` function on\n   * the server handle anymore — the scope is the only lifecycle handle.\n   */\n  serverScope: Scope.Closeable | null;\n  binaryPath: string | null;\n  activeRequests: number;\n  idleCloseFiber: Fiber.Fiber<void, never> | null;\n}\n\nexport const makeOpenCodeTextGeneration = Effect.fn(\"makeOpenCodeTextGeneration\")(function* (\n  openCodeSettings: OpenCodeSettings,\n  environment: NodeJS.ProcessEnv = process.env,\n) {\n  const serverConfig = yield* ServerConfig;\n  const openCodeRuntime = yield* OpenCodeRuntime;\n  const idleFiberScope = yield* Effect.acquireRelease(Scope.make(), (scope) =>\n    Scope.close(scope, Exit.void),\n  );\n  const sharedServerMutex = yield* Semaphore.make(1);\n  const sharedServerState: SharedOpenCodeTextGenerationServerState = {\n    server: null,\n    serverScope: null,\n    binaryPath: null,\n    activeRequests: 0,\n    idleCloseFiber: null,\n  };\n\n  const closeSharedServer = Effect.fn(\"closeSharedServer\")(function* () {\n    const scope = sharedServerState.serverScope;\n    sharedServerState.server = null;\n    sharedServerState.serverScope = null;\n    sharedServerState.binaryPath = null;\n    if (scope !== null) {\n      yield* Scope.close(scope, Exit.void).pipe(Effect.ignore);\n    }\n  });\n\n  const cancelIdleCloseFiber = Effect.fn(\"cancelIdleCloseFiber\")(function* () {\n    const idleCloseFiber = sharedServerState.idleCloseFiber;\n    sharedServerState.idleCloseFiber = null;\n    if (idleCloseFiber !== null) {\n      yield* Fiber.interrupt(idleCloseFiber).pipe(Effect.ignore);\n    }\n  });\n\n  const scheduleIdleClose = Effect.fn(\"scheduleIdleClose\")(function* (\n    server: OpenCodeServerProcess,\n  ) {\n    yield* cancelIdleCloseFiber();\n    const fiber = yield* Effect.sleep(OPENCODE_TEXT_GENERATION_IDLE_TTL).pipe(\n      Effect.andThen(\n        sharedServerMutex.withPermit(\n          Effect.gen(function* () {\n            if (sharedServerState.server !== server || sharedServerState.activeRequests > 0) {\n              return;\n            }\n            sharedServerState.idleCloseFiber = null;\n            yield* closeSharedServer();\n          }),\n        ),\n      ),\n      Effect.forkIn(idleFiberScope),\n    );\n    sharedServerState.idleCloseFiber = fiber;\n  });\n\n  const acquireSharedServer = (input: {\n    readonly binaryPath: string;\n    readonly operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\";\n  }) =>\n    sharedServerMutex.withPermit(\n      Effect.gen(function* () {\n        yield* cancelIdleCloseFiber();\n\n        const existingServer = sharedServerState.server;\n        if (existingServer !== null) {\n          if (\n            sharedServerState.binaryPath !== input.binaryPath &&\n            sharedServerState.activeRequests === 0\n          ) {\n            yield* closeSharedServer();\n          } else {\n            if (sharedServerState.binaryPath !== input.binaryPath) {\n              yield* Effect.logWarning(\n                \"OpenCode shared server binary path mismatch: requested \" +\n                  input.binaryPath +\n                  \" but active server uses \" +\n                  sharedServerState.binaryPath +\n                  \"; reusing existing server because there are active requests\",\n              );\n            }\n            sharedServerState.activeRequests += 1;\n            return existingServer;\n          }\n        }\n\n        // Create a fresh scope that owns this shared server. The runtime\n        // will attach its child-process and fiber finalizers to this scope;\n        // closing it kills the server and interrupts those fibers.\n        //\n        // The `Scope.make` / spawn / record-or-close transitions run inside\n        // `uninterruptibleMask` so an interrupt arriving between any two\n        // steps can't orphan the scope (and the child process attached to\n        // it) before we either close it on failure or hand ownership to\n        // `sharedServerState`. `restore` keeps the actual spawn\n        // interruptible; an interrupt during the spawn is captured by\n        // `Effect.exit` and drives us through the failure branch that\n        // closes the fresh scope.\n        return yield* Effect.uninterruptibleMask((restore) =>\n          Effect.gen(function* () {\n            const serverScope = yield* Scope.make();\n            const startedExit = yield* Effect.exit(\n              restore(\n                openCodeRuntime\n                  .startOpenCodeServerProcess({\n                    binaryPath: input.binaryPath,\n                    environment,\n                  })\n                  .pipe(\n                    Effect.provideService(Scope.Scope, serverScope),\n                    Effect.mapError(\n                      (cause) =>\n                        new TextGenerationError({\n                          operation: input.operation,\n                          detail: openCodeRuntimeErrorDetail(cause),\n                          cause,\n                        }),\n                    ),\n                  ),\n              ),\n            );\n            if (startedExit._tag === \"Failure\") {\n              yield* Scope.close(serverScope, Exit.void).pipe(Effect.ignore);\n              return yield* Effect.failCause(startedExit.cause);\n            }\n\n            const server = startedExit.value;\n            sharedServerState.server = server;\n            sharedServerState.serverScope = serverScope;\n            sharedServerState.binaryPath = input.binaryPath;\n            sharedServerState.activeRequests = 1;\n            return server;\n          }),\n        );\n      }),\n    );\n\n  const releaseSharedServer = (server: OpenCodeServerProcess) =>\n    sharedServerMutex.withPermit(\n      Effect.gen(function* () {\n        if (sharedServerState.server !== server) {\n          return;\n        }\n        sharedServerState.activeRequests = Math.max(0, sharedServerState.activeRequests - 1);\n        if (sharedServerState.activeRequests === 0) {\n          yield* scheduleIdleClose(server);\n        }\n      }),\n    );\n\n  // Module-level finalizer: on layer shutdown, cancel the idle close fiber\n  // and close the shared server scope. Consumers therefore cannot leak\n  // the shared OpenCode server by forgetting to call anything.\n  yield* Effect.addFinalizer(() =>\n    sharedServerMutex.withPermit(\n      Effect.gen(function* () {\n        yield* cancelIdleCloseFiber();\n        sharedServerState.activeRequests = 0;\n        yield* closeSharedServer();\n      }),\n    ),\n  );\n\n  const runOpenCodeJson = Effect.fn(\"runOpenCodeJson\")(function* <S extends Schema.Top>(input: {\n    readonly operation:\n      | \"generateCommitMessage\"\n      | \"generatePrContent\"\n      | \"generateBranchName\"\n      | \"generateThreadTitle\";\n    readonly cwd: string;\n    readonly prompt: string;\n    readonly outputSchemaJson: S;\n    readonly modelSelection: ModelSelection;\n    readonly attachments?: ReadonlyArray<ChatAttachment> | undefined;\n  }) {\n    const parsedModel = parseOpenCodeModelSlug(input.modelSelection.model);\n    if (!parsedModel) {\n      return yield* new TextGenerationError({\n        operation: input.operation,\n        detail: \"OpenCode model selection must use the 'provider/model' format.\",\n      });\n    }\n\n    const fileParts = toOpenCodeFileParts({\n      attachments: input.attachments,\n      resolveAttachmentPath: (attachment) =>\n        resolveAttachmentPath({ attachmentsDir: serverConfig.attachmentsDir, attachment }),\n    });\n\n    const runAgainstServer = (server: Pick<OpenCodeServerConnection, \"url\">) =>\n      Effect.tryPromise({\n        try: async () => {\n          const client = openCodeRuntime.createOpenCodeSdkClient({\n            baseUrl: server.url,\n            directory: input.cwd,\n            ...(openCodeSettings.serverUrl.length > 0 && openCodeSettings.serverPassword\n              ? { serverPassword: openCodeSettings.serverPassword }\n              : {}),\n          });\n          const session = await client.session.create({\n            title: `Salchi ${input.operation}`,\n            permission: [{ permission: \"*\", pattern: \"*\", action: \"deny\" }],\n          });\n          if (!session.data) {\n            throw new Error(\"OpenCode session.create returned no session payload.\");\n          }\n          const selectedAgent = getModelSelectionStringOptionValue(input.modelSelection, \"agent\");\n          const selectedVariant = getModelSelectionStringOptionValue(\n            input.modelSelection,\n            \"variant\",\n          );\n\n          const result = await client.session.prompt({\n            sessionID: session.data.id,\n            model: parsedModel,\n            ...(selectedAgent ? { agent: selectedAgent } : {}),\n            ...(selectedVariant ? { variant: selectedVariant } : {}),\n            parts: [{ type: \"text\", text: input.prompt }, ...fileParts],\n          });\n          const info = result.data?.info;\n          const errorMessage = getOpenCodePromptErrorMessage(info?.error);\n          if (errorMessage) {\n            throw new Error(errorMessage);\n          }\n          const rawText = getOpenCodeTextResponse(result.data?.parts);\n          if (rawText.length === 0) {\n            throw new Error(\"OpenCode returned empty output.\");\n          }\n          return rawText;\n        },\n        catch: (cause) =>\n          new TextGenerationError({\n            operation: input.operation,\n            detail: openCodeRuntimeErrorDetail(cause),\n            cause,\n          }),\n      });\n\n    const rawOutput =\n      openCodeSettings.serverUrl.length > 0\n        ? yield* runAgainstServer({ url: openCodeSettings.serverUrl })\n        : yield* Effect.acquireUseRelease(\n            acquireSharedServer({\n              binaryPath: openCodeSettings.binaryPath,\n              operation: input.operation,\n            }),\n            runAgainstServer,\n            releaseSharedServer,\n          );\n\n    const decodeOutput = Schema.decodeEffect(Schema.fromJsonString(input.outputSchemaJson));\n    return yield* decodeOutput(extractJsonObject(rawOutput)).pipe(\n      Effect.catchTag(\"SchemaError\", (cause) =>\n        Effect.fail(\n          new TextGenerationError({\n            operation: input.operation,\n            detail: \"OpenCode returned invalid structured output.\",\n            cause,\n          }),\n        ),\n      ),\n    );\n  });\n\n  const generateCommitMessage: TextGenerationShape[\"generateCommitMessage\"] = Effect.fn(\n    \"OpenCodeTextGeneration.generateCommitMessage\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildCommitMessagePrompt({\n      branch: input.branch,\n      stagedSummary: input.stagedSummary,\n      stagedPatch: input.stagedPatch,\n      includeBranch: input.includeBranch === true,\n    });\n    const generated = yield* runOpenCodeJson({\n      operation: \"generateCommitMessage\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      subject: sanitizeCommitSubject(generated.subject),\n      body: generated.body.trim(),\n      ...(\"branch\" in generated && typeof generated.branch === \"string\"\n        ? { branch: sanitizeFeatureBranchName(generated.branch) }\n        : {}),\n    };\n  });\n\n  const generatePrContent: TextGenerationShape[\"generatePrContent\"] = Effect.fn(\n    \"OpenCodeTextGeneration.generatePrContent\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildPrContentPrompt({\n      baseBranch: input.baseBranch,\n      headBranch: input.headBranch,\n      commitSummary: input.commitSummary,\n      diffSummary: input.diffSummary,\n      diffPatch: input.diffPatch,\n    });\n    const generated = yield* runOpenCodeJson({\n      operation: \"generatePrContent\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n    });\n\n    return {\n      title: sanitizePrTitle(generated.title),\n      body: generated.body.trim(),\n    };\n  });\n\n  const generateBranchName: TextGenerationShape[\"generateBranchName\"] = Effect.fn(\n    \"OpenCodeTextGeneration.generateBranchName\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildBranchNamePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n    const generated = yield* runOpenCodeJson({\n      operation: \"generateBranchName\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n      attachments: input.attachments,\n    });\n\n    return {\n      branch: sanitizeBranchFragment(generated.branch),\n    };\n  });\n\n  const generateThreadTitle: TextGenerationShape[\"generateThreadTitle\"] = Effect.fn(\n    \"OpenCodeTextGeneration.generateThreadTitle\",\n  )(function* (input) {\n    const { prompt, outputSchema } = buildThreadTitlePrompt({\n      message: input.message,\n      attachments: input.attachments,\n    });\n    const generated = yield* runOpenCodeJson({\n      operation: \"generateThreadTitle\",\n      cwd: input.cwd,\n      prompt,\n      outputSchemaJson: outputSchema,\n      modelSelection: input.modelSelection,\n      attachments: input.attachments,\n    });\n\n    return {\n      title: sanitizeThreadTitle(generated.title),\n    };\n  });\n\n  return {\n    generateCommitMessage,\n    generatePrContent,\n    generateBranchName,\n    generateThreadTitle,\n  } satisfies TextGenerationShape;\n});\n","import {\n  EventId,\n  type OpenCodeSettings,\n  ProviderDriverKind,\n  ProviderInstanceId,\n  type ProviderRuntimeEvent,\n  type ProviderSendTurnInput,\n  type ProviderSession,\n  RuntimeItemId,\n  RuntimeRequestId,\n  ThreadId,\n  type ToolLifecycleItemType,\n  TurnId,\n  type UserInputQuestion,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Queue from \"effect/Queue\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\nimport type { OpencodeClient, Part, PermissionRequest, QuestionRequest } from \"@opencode-ai/sdk/v2\";\nimport { getModelSelectionStringOptionValue } from \"@salchi/shared/model\";\n\nimport { resolveAttachmentPath } from \"../../attachmentStore.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport { type EventNdjsonLogger, makeEventNdjsonLogger } from \"./EventNdjsonLogger.ts\";\nimport {\n  ProviderAdapterProcessError,\n  ProviderAdapterRequestError,\n  ProviderAdapterSessionClosedError,\n  ProviderAdapterSessionNotFoundError,\n  ProviderAdapterValidationError,\n} from \"../Errors.ts\";\nimport { type OpenCodeAdapterShape } from \"../Services/OpenCodeAdapter.ts\";\nimport {\n  buildOpenCodePermissionRules,\n  OpenCodeRuntime,\n  OpenCodeRuntimeError,\n  openCodeQuestionId,\n  openCodeRuntimeErrorDetail,\n  parseOpenCodeModelSlug,\n  runOpenCodeSdk,\n  toOpenCodeFileParts,\n  toOpenCodePermissionReply,\n  toOpenCodeQuestionAnswers,\n  type OpenCodeServerConnection,\n} from \"../opencodeRuntime.ts\";\nimport * as Option from \"effect/Option\";\n\nconst PROVIDER = ProviderDriverKind.make(\"opencode\");\n\ninterface OpenCodeTurnSnapshot {\n  readonly id: TurnId;\n  readonly items: Array<unknown>;\n}\n\ntype OpenCodeSubscribedEvent =\n  Awaited<ReturnType<OpencodeClient[\"event\"][\"subscribe\"]>> extends {\n    readonly stream: AsyncIterable<infer TEvent>;\n  }\n    ? TEvent\n    : never;\n\ninterface OpenCodeSessionContext {\n  session: ProviderSession;\n  readonly client: OpencodeClient;\n  readonly server: OpenCodeServerConnection;\n  readonly directory: string;\n  readonly openCodeSessionId: string;\n  readonly pendingPermissions: Map<string, PermissionRequest>;\n  readonly pendingQuestions: Map<string, QuestionRequest>;\n  readonly messageRoleById: Map<string, \"user\" | \"assistant\">;\n  readonly partById: Map<string, Part>;\n  readonly emittedTextByPartId: Map<string, string>;\n  readonly completedAssistantPartIds: Set<string>;\n  readonly turns: Array<OpenCodeTurnSnapshot>;\n  activeTurnId: TurnId | undefined;\n  activeAgent: string | undefined;\n  activeVariant: string | undefined;\n  /**\n   * One-shot guard flipped by `stopOpenCodeContext` / `emitUnexpectedExit`.\n   * The session lifecycle is owned by `sessionScope`; this Ref exists only\n   * so concurrent callers can race the transition safely via `getAndSet`.\n   */\n  readonly stopped: Ref.Ref<boolean>;\n  /**\n   * Sole lifecycle handle for the session. Closing this scope:\n   *   - aborts the `AbortController` registered as a finalizer\n   *     (cancels the in-flight `event.subscribe` fetch),\n   *   - interrupts the event-pump and server-exit fibers forked\n   *     via `Effect.forkIn(sessionScope)`,\n   *   - tears down the OpenCode server process for scope-owned servers.\n   */\n  readonly sessionScope: Scope.Closeable;\n}\n\nexport interface OpenCodeAdapterLiveOptions {\n  readonly instanceId?: ProviderInstanceId;\n  readonly environment?: NodeJS.ProcessEnv;\n  readonly nativeEventLogPath?: string;\n  readonly nativeEventLogger?: EventNdjsonLogger;\n}\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\n/**\n * Map a tagged OpenCodeRuntimeError produced by {@link runOpenCodeSdk} into\n * the adapter-boundary `ProviderAdapterRequestError`. SDK-method-level call\n * sites pipe through this in `Effect.mapError` so they never build the error\n * shape by hand.\n */\nconst toRequestError = (cause: OpenCodeRuntimeError): ProviderAdapterRequestError =>\n  new ProviderAdapterRequestError({\n    provider: PROVIDER,\n    method: cause.operation,\n    detail: cause.detail,\n    cause: cause.cause,\n  });\n\n/**\n * Map a `Cause.squash`-ed failure into a `ProviderAdapterProcessError`. The\n * typed cause is usually an `OpenCodeRuntimeError` (from {@link runOpenCodeSdk}),\n * in which case we preserve its `detail`; otherwise we fall back to\n * {@link openCodeRuntimeErrorDetail} for unknown causes (defects, etc.).\n */\nconst toProcessError = (threadId: ThreadId, cause: unknown): ProviderAdapterProcessError =>\n  new ProviderAdapterProcessError({\n    provider: PROVIDER,\n    threadId,\n    detail: OpenCodeRuntimeError.is(cause) ? cause.detail : openCodeRuntimeErrorDetail(cause),\n    cause,\n  });\n\ntype EventBaseInput = {\n  readonly threadId: ThreadId;\n  readonly turnId?: TurnId | undefined;\n  readonly itemId?: string | undefined;\n  readonly requestId?: string | undefined;\n  readonly createdAt?: string | undefined;\n  readonly raw?: unknown;\n};\n\nfunction toToolLifecycleItemType(toolName: string): ToolLifecycleItemType {\n  const normalized = toolName.toLowerCase();\n  if (normalized.includes(\"bash\") || normalized.includes(\"command\")) {\n    return \"command_execution\";\n  }\n  if (\n    normalized.includes(\"edit\") ||\n    normalized.includes(\"write\") ||\n    normalized.includes(\"patch\") ||\n    normalized.includes(\"multiedit\")\n  ) {\n    return \"file_change\";\n  }\n  if (normalized.includes(\"web\")) {\n    return \"web_search\";\n  }\n  if (normalized.includes(\"mcp\")) {\n    return \"mcp_tool_call\";\n  }\n  if (normalized.includes(\"image\")) {\n    return \"image_view\";\n  }\n  if (\n    normalized.includes(\"task\") ||\n    normalized.includes(\"agent\") ||\n    normalized.includes(\"subtask\")\n  ) {\n    return \"collab_agent_tool_call\";\n  }\n  return \"dynamic_tool_call\";\n}\n\nfunction mapPermissionToRequestType(\n  permission: string,\n): \"command_execution_approval\" | \"file_read_approval\" | \"file_change_approval\" | \"unknown\" {\n  switch (permission) {\n    case \"bash\":\n      return \"command_execution_approval\";\n    case \"read\":\n      return \"file_read_approval\";\n    case \"edit\":\n      return \"file_change_approval\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction mapPermissionDecision(reply: \"once\" | \"always\" | \"reject\"): string {\n  switch (reply) {\n    case \"once\":\n      return \"accept\";\n    case \"always\":\n      return \"acceptForSession\";\n    case \"reject\":\n    default:\n      return \"decline\";\n  }\n}\n\nfunction resolveTurnSnapshot(\n  context: OpenCodeSessionContext,\n  turnId: TurnId,\n): OpenCodeTurnSnapshot {\n  const existing = context.turns.find((turn) => turn.id === turnId);\n  if (existing) {\n    return existing;\n  }\n\n  const created: OpenCodeTurnSnapshot = { id: turnId, items: [] };\n  context.turns.push(created);\n  return created;\n}\n\nfunction appendTurnItem(\n  context: OpenCodeSessionContext,\n  turnId: TurnId | undefined,\n  item: unknown,\n): void {\n  if (!turnId) {\n    return;\n  }\n  resolveTurnSnapshot(context, turnId).items.push(item);\n}\n\nfunction ensureSessionContext(\n  sessions: ReadonlyMap<ThreadId, OpenCodeSessionContext>,\n  threadId: ThreadId,\n): OpenCodeSessionContext {\n  const session = sessions.get(threadId);\n  if (!session) {\n    throw new ProviderAdapterSessionNotFoundError({\n      provider: PROVIDER,\n      threadId,\n    });\n  }\n  // `ensureSessionContext` is a sync gate used from both sync helpers and\n  // Effect bodies. `Ref.getUnsafe` is an atomic read of the backing cell —\n  // no fiber suspension required, which keeps this callable everywhere.\n  if (Ref.getUnsafe(session.stopped)) {\n    throw new ProviderAdapterSessionClosedError({\n      provider: PROVIDER,\n      threadId,\n    });\n  }\n  return session;\n}\n\nfunction normalizeQuestionRequest(request: QuestionRequest): ReadonlyArray<UserInputQuestion> {\n  return request.questions.map((question, index) => ({\n    id: openCodeQuestionId(index, question),\n    header: question.header,\n    question: question.question,\n    options: question.options.map((option) => ({\n      label: option.label,\n      description: option.description,\n    })),\n    ...(question.multiple ? { multiSelect: true } : {}),\n  }));\n}\n\nfunction resolveTextStreamKind(part: Part | undefined): \"assistant_text\" | \"reasoning_text\" {\n  return part?.type === \"reasoning\" ? \"reasoning_text\" : \"assistant_text\";\n}\n\nfunction textFromPart(part: Part): string | undefined {\n  switch (part.type) {\n    case \"text\":\n    case \"reasoning\":\n      return part.text;\n    default:\n      return undefined;\n  }\n}\n\nfunction commonPrefixLength(left: string, right: string): number {\n  let index = 0;\n  while (index < left.length && index < right.length && left[index] === right[index]) {\n    index += 1;\n  }\n  return index;\n}\n\nfunction resolveLatestAssistantText(previousText: string | undefined, nextText: string): string {\n  if (previousText && previousText.length > nextText.length && previousText.startsWith(nextText)) {\n    return previousText;\n  }\n  return nextText;\n}\n\nexport function mergeOpenCodeAssistantText(\n  previousText: string | undefined,\n  nextText: string,\n): {\n  readonly latestText: string;\n  readonly deltaToEmit: string;\n} {\n  const latestText = resolveLatestAssistantText(previousText, nextText);\n  return {\n    latestText,\n    deltaToEmit: latestText.slice(commonPrefixLength(previousText ?? \"\", latestText)),\n  };\n}\n\nexport function appendOpenCodeAssistantTextDelta(\n  previousText: string,\n  delta: string,\n): {\n  readonly nextText: string;\n  readonly deltaToEmit: string;\n} {\n  return {\n    nextText: previousText + delta,\n    deltaToEmit: delta,\n  };\n}\n\nconst isoFromEpochMs = (value: number) =>\n  DateTime.make(value).pipe(\n    Option.match({\n      onNone: () => undefined,\n      onSome: DateTime.formatIso,\n    }),\n  );\n\nfunction messageRoleForPart(\n  context: OpenCodeSessionContext,\n  part: Pick<Part, \"messageID\" | \"type\">,\n): \"assistant\" | \"user\" | undefined {\n  const known = context.messageRoleById.get(part.messageID);\n  if (known) {\n    return known;\n  }\n  return part.type === \"tool\" ? \"assistant\" : undefined;\n}\n\nfunction detailFromToolPart(part: Extract<Part, { type: \"tool\" }>): string | undefined {\n  switch (part.state.status) {\n    case \"completed\":\n      return part.state.output;\n    case \"error\":\n      return part.state.error;\n    case \"running\":\n      return part.state.title;\n    default:\n      return undefined;\n  }\n}\n\nfunction toolStateCreatedAt(part: Extract<Part, { type: \"tool\" }>): string | undefined {\n  switch (part.state.status) {\n    case \"running\":\n      return isoFromEpochMs(part.state.time.start);\n    case \"completed\":\n    case \"error\":\n      return isoFromEpochMs(part.state.time.end);\n    default:\n      return undefined;\n  }\n}\n\nfunction sessionErrorMessage(error: unknown): string {\n  if (!error || typeof error !== \"object\") {\n    return \"OpenCode session failed.\";\n  }\n  const data = \"data\" in error && error.data && typeof error.data === \"object\" ? error.data : null;\n  const message = data && \"message\" in data ? data.message : null;\n  return typeof message === \"string\" && message.trim().length > 0\n    ? message\n    : \"OpenCode session failed.\";\n}\n\nfunction updateProviderSession(\n  context: OpenCodeSessionContext,\n  patch: Partial<ProviderSession>,\n  options?: {\n    readonly clearActiveTurnId?: boolean;\n    readonly clearLastError?: boolean;\n  },\n): Effect.Effect<ProviderSession> {\n  return Effect.gen(function* () {\n    const updatedAt = yield* nowIso;\n    const nextSession = {\n      ...context.session,\n      ...patch,\n      updatedAt,\n    } as ProviderSession & Record<string, unknown>;\n    const mutableSession = nextSession as Record<string, unknown>;\n    if (options?.clearActiveTurnId) {\n      delete mutableSession.activeTurnId;\n    }\n    if (options?.clearLastError) {\n      delete mutableSession.lastError;\n    }\n    context.session = nextSession;\n    return nextSession;\n  });\n}\n\nconst stopOpenCodeContext = Effect.fn(\"stopOpenCodeContext\")(function* (\n  context: OpenCodeSessionContext,\n) {\n  // Race-safe one-shot: first caller flips the flag, everyone else no-ops.\n  if (yield* Ref.getAndSet(context.stopped, true)) {\n    return false;\n  }\n\n  // Best-effort remote abort. The scope close below tears down the local\n  // handles (event-pump fiber, server-exit fiber, event-subscribe fetch),\n  // but we still want to tell OpenCode that this session is done.\n  yield* runOpenCodeSdk(\"session.abort\", () =>\n    context.client.session.abort({ sessionID: context.openCodeSessionId }),\n  ).pipe(Effect.ignore({ log: true }));\n\n  // Closing the session scope interrupts every fiber forked into it and\n  // runs each finalizer we registered — the `AbortController.abort()` call,\n  // the child-process termination, etc.\n  yield* Scope.close(context.sessionScope, Exit.void);\n  return true;\n});\n\nexport function makeOpenCodeAdapter(\n  openCodeSettings: OpenCodeSettings,\n  options?: OpenCodeAdapterLiveOptions,\n) {\n  return Effect.gen(function* () {\n    const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(\"opencode\");\n    const serverConfig = yield* ServerConfig;\n    const openCodeRuntime = yield* OpenCodeRuntime;\n    const crypto = yield* Crypto.Crypto;\n    const nativeEventLogger =\n      options?.nativeEventLogger ??\n      (options?.nativeEventLogPath !== undefined\n        ? yield* makeEventNdjsonLogger(options.nativeEventLogPath, {\n            stream: \"native\",\n          })\n        : undefined);\n    // Only close loggers we created. If the caller passed one in via\n    // `options.nativeEventLogger`, they own its lifecycle.\n    const managedNativeEventLogger =\n      options?.nativeEventLogger === undefined ? nativeEventLogger : undefined;\n    const runtimeEvents = yield* Queue.unbounded<ProviderRuntimeEvent>();\n    const sessions = new Map<ThreadId, OpenCodeSessionContext>();\n    const randomUUIDv4 = crypto.randomUUIDv4.pipe(\n      Effect.mapError(\n        (cause) =>\n          new ProviderAdapterRequestError({\n            provider: PROVIDER,\n            method: \"crypto/randomUUIDv4\",\n            detail: \"Failed to generate OpenCode runtime identifier.\",\n            cause,\n          }),\n      ),\n    );\n    const buildEventBase = (input: EventBaseInput) =>\n      Effect.all({\n        eventId: randomUUIDv4.pipe(Effect.map(EventId.make)),\n        createdAt: input.createdAt === undefined ? nowIso : Effect.succeed(input.createdAt),\n      }).pipe(\n        Effect.map(({ eventId, createdAt }) => ({\n          eventId,\n          provider: PROVIDER,\n          threadId: input.threadId,\n          createdAt,\n          ...(input.turnId ? { turnId: input.turnId } : {}),\n          ...(input.itemId ? { itemId: RuntimeItemId.make(input.itemId) } : {}),\n          ...(input.requestId ? { requestId: RuntimeRequestId.make(input.requestId) } : {}),\n          ...(input.raw !== undefined\n            ? {\n                raw: {\n                  source: \"opencode.sdk.event\" as const,\n                  payload: input.raw,\n                },\n              }\n            : {}),\n        })),\n      );\n\n    // Layer-level finalizer: when the adapter layer shuts down, stop every\n    // session. Each session's `Scope.close` tears down its spawned OpenCode\n    // server (via the `ChildProcessSpawner` finalizer installed in\n    // `startOpenCodeServerProcess`) and interrupts the forked event/exit\n    // fibers. Consumers that can't reason about Effect scopes therefore\n    // cannot leak OpenCode child processes by forgetting to call `stopAll`.\n    yield* Effect.addFinalizer(() =>\n      Effect.gen(function* () {\n        const contexts = [...sessions.values()];\n        sessions.clear();\n        // `ignoreCause` swallows both typed failures (none here) and defects\n        // from throwing scope finalizers so a sibling's death can't interrupt\n        // the remaining cleanups.\n        yield* Effect.forEach(\n          contexts,\n          (context) => Effect.ignoreCause(stopOpenCodeContext(context)),\n          { concurrency: \"unbounded\", discard: true },\n        );\n        // Close the logger AFTER session teardown so any final lifecycle\n        // events emitted during shutdown still get written. `close` flushes\n        // the `Logger.batched` window and closes each per-thread\n        // `RotatingFileSink` handle owned by the logger's internal scope.\n        if (managedNativeEventLogger !== undefined) {\n          yield* managedNativeEventLogger.close();\n        }\n      }).pipe(Effect.ensuring(Queue.shutdown(runtimeEvents))),\n    );\n\n    const emit = (event: ProviderRuntimeEvent) =>\n      Queue.offer(runtimeEvents, event).pipe(Effect.asVoid);\n    const writeNativeEvent = (\n      threadId: ThreadId,\n      event: {\n        readonly observedAt: string;\n        readonly event: Record<string, unknown>;\n      },\n    ) => (nativeEventLogger ? nativeEventLogger.write(event, threadId) : Effect.void);\n    const writeNativeEventBestEffort = (\n      threadId: ThreadId,\n      event: {\n        readonly observedAt: string;\n        readonly event: Record<string, unknown>;\n      },\n    ) => writeNativeEvent(threadId, event).pipe(Effect.catchCause(() => Effect.void));\n\n    const emitUnexpectedExit = Effect.fn(\"emitUnexpectedExit\")(function* (\n      context: OpenCodeSessionContext,\n      message: string,\n    ) {\n      // Atomic one-shot: two fibers can race here (the event-pump on stream\n      // failure and the server-exit watcher). `getAndSet` flips the flag in\n      // a single step so the loser observes `true` and returns; a plain\n      // `Ref.get` would let both racers slip past and emit duplicates.\n      if (yield* Ref.getAndSet(context.stopped, true)) {\n        return;\n      }\n      const turnId = context.activeTurnId;\n      sessions.delete(context.session.threadId);\n      // Emit lifecycle events BEFORE tearing down the scope. Both call sites\n      // run this inside a fiber forked via `Effect.forkIn(context.sessionScope)`;\n      // closing that scope triggers the fiber-interrupt finalizer, so any\n      // subsequent yield point would unwind and silently drop these emits.\n      yield* emit({\n        ...(yield* buildEventBase({\n          threadId: context.session.threadId,\n          turnId,\n        })),\n        type: \"runtime.error\",\n        payload: {\n          message,\n          class: \"transport_error\",\n        },\n      }).pipe(Effect.ignore);\n      yield* emit({\n        ...(yield* buildEventBase({\n          threadId: context.session.threadId,\n          turnId,\n        })),\n        type: \"session.exited\",\n        payload: {\n          reason: message,\n          recoverable: false,\n          exitKind: \"error\",\n        },\n      }).pipe(Effect.ignore);\n      // Inline the teardown that `stopOpenCodeContext` would do; we can't\n      // delegate to it because our `getAndSet` above already flipped the\n      // one-shot guard, so the call would no-op.\n      yield* runOpenCodeSdk(\"session.abort\", () =>\n        context.client.session.abort({ sessionID: context.openCodeSessionId }),\n      ).pipe(Effect.ignore({ log: true }));\n      yield* Scope.close(context.sessionScope, Exit.void);\n    });\n\n    /** Emit content.delta and item.completed events for an assistant text part. */\n    const emitAssistantTextDelta = Effect.fn(\"emitAssistantTextDelta\")(function* (\n      context: OpenCodeSessionContext,\n      part: Part,\n      turnId: TurnId | undefined,\n      raw: unknown,\n    ) {\n      const text = textFromPart(part);\n      if (text === undefined) {\n        return;\n      }\n      const previousText = context.emittedTextByPartId.get(part.id);\n      const { latestText, deltaToEmit } = mergeOpenCodeAssistantText(previousText, text);\n      context.emittedTextByPartId.set(part.id, latestText);\n      if (latestText !== text) {\n        context.partById.set(\n          part.id,\n          (part.type === \"text\" || part.type === \"reasoning\"\n            ? { ...part, text: latestText }\n            : part) satisfies Part,\n        );\n      }\n      if (deltaToEmit.length > 0) {\n        yield* emit({\n          ...(yield* buildEventBase({\n            threadId: context.session.threadId,\n            turnId,\n            itemId: part.id,\n            createdAt:\n              (part.type === \"text\" || part.type === \"reasoning\") && part.time !== undefined\n                ? isoFromEpochMs(part.time.start)\n                : undefined,\n            raw,\n          })),\n          type: \"content.delta\",\n          payload: {\n            streamKind: resolveTextStreamKind(part),\n            delta: deltaToEmit,\n          },\n        });\n      }\n\n      if (\n        part.type === \"text\" &&\n        part.time?.end !== undefined &&\n        !context.completedAssistantPartIds.has(part.id)\n      ) {\n        context.completedAssistantPartIds.add(part.id);\n        yield* emit({\n          ...(yield* buildEventBase({\n            threadId: context.session.threadId,\n            turnId,\n            itemId: part.id,\n            createdAt: isoFromEpochMs(part.time.end),\n            raw,\n          })),\n          type: \"item.completed\",\n          payload: {\n            itemType: \"assistant_message\",\n            status: \"completed\",\n            title: \"Assistant message\",\n            ...(latestText.length > 0 ? { detail: latestText } : {}),\n          },\n        });\n      }\n    });\n\n    const handleSubscribedEvent = Effect.fn(\"handleSubscribedEvent\")(function* (\n      context: OpenCodeSessionContext,\n      event: OpenCodeSubscribedEvent,\n    ) {\n      const payloadSessionId =\n        \"properties\" in event ? (event.properties as { sessionID?: unknown }).sessionID : undefined;\n      if (payloadSessionId !== context.openCodeSessionId) {\n        return;\n      }\n\n      const turnId = context.activeTurnId;\n      yield* writeNativeEventBestEffort(context.session.threadId, {\n        observedAt: yield* nowIso,\n        event: {\n          provider: PROVIDER,\n          threadId: context.session.threadId,\n          providerThreadId: context.openCodeSessionId,\n          type: event.type,\n          ...(turnId ? { turnId } : {}),\n          payload: event,\n        },\n      });\n\n      switch (event.type) {\n        case \"message.updated\": {\n          context.messageRoleById.set(event.properties.info.id, event.properties.info.role);\n          if (event.properties.info.role === \"assistant\") {\n            for (const part of context.partById.values()) {\n              if (part.messageID !== event.properties.info.id) {\n                continue;\n              }\n              yield* emitAssistantTextDelta(context, part, turnId, event);\n            }\n          }\n          break;\n        }\n\n        case \"message.removed\": {\n          context.messageRoleById.delete(event.properties.messageID);\n          break;\n        }\n\n        case \"message.part.delta\": {\n          const existingPart = context.partById.get(event.properties.partID);\n          if (!existingPart) {\n            break;\n          }\n          const role = messageRoleForPart(context, existingPart);\n          if (role !== \"assistant\") {\n            break;\n          }\n          const streamKind = resolveTextStreamKind(existingPart);\n          const delta = event.properties.delta;\n          if (delta.length === 0) {\n            break;\n          }\n          const previousText =\n            context.emittedTextByPartId.get(event.properties.partID) ??\n            textFromPart(existingPart) ??\n            \"\";\n          const { nextText, deltaToEmit } = appendOpenCodeAssistantTextDelta(previousText, delta);\n          if (deltaToEmit.length === 0) {\n            break;\n          }\n          context.emittedTextByPartId.set(event.properties.partID, nextText);\n          if (existingPart.type === \"text\" || existingPart.type === \"reasoning\") {\n            context.partById.set(event.properties.partID, {\n              ...existingPart,\n              text: nextText,\n            });\n          }\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              turnId,\n              itemId: event.properties.partID,\n              raw: event,\n            })),\n            type: \"content.delta\",\n            payload: {\n              streamKind,\n              delta: deltaToEmit,\n            },\n          });\n          break;\n        }\n\n        case \"message.part.updated\": {\n          const part = event.properties.part;\n          context.partById.set(part.id, part);\n          const messageRole = messageRoleForPart(context, part);\n\n          if (messageRole === \"assistant\") {\n            yield* emitAssistantTextDelta(context, part, turnId, event);\n          }\n\n          if (part.type === \"tool\") {\n            const itemType = toToolLifecycleItemType(part.tool);\n            const title =\n              part.state.status === \"running\" ? (part.state.title ?? part.tool) : part.tool;\n            const detail = detailFromToolPart(part);\n            const payload = {\n              itemType,\n              ...(part.state.status === \"error\"\n                ? { status: \"failed\" as const }\n                : part.state.status === \"completed\"\n                  ? { status: \"completed\" as const }\n                  : { status: \"inProgress\" as const }),\n              ...(title ? { title } : {}),\n              ...(detail ? { detail } : {}),\n              data: {\n                tool: part.tool,\n                state: part.state,\n              },\n            };\n            const runtimeEvent: ProviderRuntimeEvent = {\n              ...(yield* buildEventBase({\n                threadId: context.session.threadId,\n                turnId,\n                itemId: part.callID,\n                createdAt: toolStateCreatedAt(part),\n                raw: event,\n              })),\n              type:\n                part.state.status === \"pending\"\n                  ? \"item.started\"\n                  : part.state.status === \"completed\" || part.state.status === \"error\"\n                    ? \"item.completed\"\n                    : \"item.updated\",\n              payload,\n            };\n            appendTurnItem(context, turnId, part);\n            yield* emit(runtimeEvent);\n          }\n          break;\n        }\n\n        case \"permission.asked\": {\n          context.pendingPermissions.set(event.properties.id, event.properties);\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              turnId,\n              requestId: event.properties.id,\n              raw: event,\n            })),\n            type: \"request.opened\",\n            payload: {\n              requestType: mapPermissionToRequestType(event.properties.permission),\n              detail:\n                event.properties.patterns.length > 0\n                  ? event.properties.patterns.join(\"\\n\")\n                  : event.properties.permission,\n              args: event.properties.metadata,\n            },\n          });\n          break;\n        }\n\n        case \"permission.replied\": {\n          context.pendingPermissions.delete(event.properties.requestID);\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              turnId,\n              requestId: event.properties.requestID,\n              raw: event,\n            })),\n            type: \"request.resolved\",\n            payload: {\n              requestType: \"unknown\",\n              decision: mapPermissionDecision(event.properties.reply),\n            },\n          });\n          break;\n        }\n\n        case \"question.asked\": {\n          context.pendingQuestions.set(event.properties.id, event.properties);\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              turnId,\n              requestId: event.properties.id,\n              raw: event,\n            })),\n            type: \"user-input.requested\",\n            payload: {\n              questions: normalizeQuestionRequest(event.properties),\n            },\n          });\n          break;\n        }\n\n        case \"question.replied\": {\n          const request = context.pendingQuestions.get(event.properties.requestID);\n          context.pendingQuestions.delete(event.properties.requestID);\n          const answers = Object.fromEntries(\n            (request?.questions ?? []).map((question, index) => [\n              openCodeQuestionId(index, question),\n              event.properties.answers[index]?.join(\", \") ?? \"\",\n            ]),\n          );\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              turnId,\n              requestId: event.properties.requestID,\n              raw: event,\n            })),\n            type: \"user-input.resolved\",\n            payload: { answers },\n          });\n          break;\n        }\n\n        case \"question.rejected\": {\n          context.pendingQuestions.delete(event.properties.requestID);\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              turnId,\n              requestId: event.properties.requestID,\n              raw: event,\n            })),\n            type: \"user-input.resolved\",\n            payload: { answers: {} },\n          });\n          break;\n        }\n\n        case \"session.status\": {\n          if (event.properties.status.type === \"busy\") {\n            yield* updateProviderSession(context, {\n              status: \"running\",\n              activeTurnId: turnId,\n            });\n          }\n\n          if (event.properties.status.type === \"retry\") {\n            yield* emit({\n              ...(yield* buildEventBase({\n                threadId: context.session.threadId,\n                turnId,\n                raw: event,\n              })),\n              type: \"runtime.warning\",\n              payload: {\n                message: event.properties.status.message,\n                detail: event.properties.status,\n              },\n            });\n            break;\n          }\n\n          if (event.properties.status.type === \"idle\" && turnId) {\n            context.activeTurnId = undefined;\n            yield* updateProviderSession(context, { status: \"ready\" }, { clearActiveTurnId: true });\n            yield* emit({\n              ...(yield* buildEventBase({\n                threadId: context.session.threadId,\n                turnId,\n                raw: event,\n              })),\n              type: \"turn.completed\",\n              payload: {\n                state: \"completed\",\n              },\n            });\n          }\n          break;\n        }\n\n        case \"session.error\": {\n          const message = sessionErrorMessage(event.properties.error);\n          const activeTurnId = context.activeTurnId;\n          context.activeTurnId = undefined;\n          yield* updateProviderSession(\n            context,\n            {\n              status: \"error\",\n              lastError: message,\n            },\n            { clearActiveTurnId: true },\n          );\n          if (activeTurnId) {\n            yield* emit({\n              ...(yield* buildEventBase({\n                threadId: context.session.threadId,\n                turnId: activeTurnId,\n                raw: event,\n              })),\n              type: \"turn.completed\",\n              payload: {\n                state: \"failed\",\n                errorMessage: message,\n              },\n            });\n          }\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId: context.session.threadId,\n              raw: event,\n            })),\n            type: \"runtime.error\",\n            payload: {\n              message,\n              class: \"provider_error\",\n              detail: event.properties.error,\n            },\n          });\n          break;\n        }\n\n        default:\n          break;\n      }\n    });\n\n    const startEventPump = Effect.fn(\"startEventPump\")(function* (context: OpenCodeSessionContext) {\n      // One AbortController per session scope. The finalizer fires when\n      // the scope closes (explicit stop, unexpected exit, or layer\n      // shutdown) and cancels the in-flight `event.subscribe` fetch so\n      // the async iterable unwinds cleanly.\n      const eventsAbortController = new AbortController();\n      yield* Scope.addFinalizer(\n        context.sessionScope,\n        Effect.sync(() => eventsAbortController.abort()),\n      );\n\n      // Fibers forked into `context.sessionScope` are interrupted\n      // automatically when the scope closes — no bookkeeping required.\n      yield* Effect.flatMap(\n        runOpenCodeSdk(\"event.subscribe\", () =>\n          context.client.event.subscribe(undefined, {\n            signal: eventsAbortController.signal,\n          }),\n        ),\n        (subscription) =>\n          Stream.fromAsyncIterable(\n            subscription.stream,\n            (cause) =>\n              new OpenCodeRuntimeError({\n                operation: \"event.subscribe\",\n                detail: openCodeRuntimeErrorDetail(cause),\n                cause,\n              }),\n          ).pipe(Stream.runForEach((event) => handleSubscribedEvent(context, event))),\n      ).pipe(\n        Effect.exit,\n        Effect.flatMap((exit) =>\n          Effect.gen(function* () {\n            // Expected paths: caller aborted the fetch or the session\n            // has already been marked stopped. Treat as a clean exit.\n            if (eventsAbortController.signal.aborted || (yield* Ref.get(context.stopped))) {\n              return;\n            }\n            if (Exit.isFailure(exit)) {\n              yield* emitUnexpectedExit(\n                context,\n                openCodeRuntimeErrorDetail(Cause.squash(exit.cause)),\n              );\n            }\n          }),\n        ),\n        Effect.forkIn(context.sessionScope),\n      );\n\n      if (!context.server.external && context.server.exitCode !== null) {\n        yield* context.server.exitCode.pipe(\n          Effect.flatMap((code) =>\n            Effect.gen(function* () {\n              if (yield* Ref.get(context.stopped)) {\n                return;\n              }\n              yield* emitUnexpectedExit(context, `OpenCode server exited unexpectedly (${code}).`);\n            }),\n          ),\n          Effect.forkIn(context.sessionScope),\n        );\n      }\n    });\n\n    const startSession: OpenCodeAdapterShape[\"startSession\"] = Effect.fn(\"startSession\")(\n      function* (input) {\n        const binaryPath = openCodeSettings.binaryPath;\n        const serverUrl = openCodeSettings.serverUrl;\n        const serverPassword = openCodeSettings.serverPassword;\n        const directory = input.cwd ?? serverConfig.cwd;\n        const existing = sessions.get(input.threadId);\n        if (existing) {\n          yield* stopOpenCodeContext(existing);\n          sessions.delete(input.threadId);\n        }\n\n        const started = yield* Effect.gen(function* () {\n          const sessionScope = yield* Scope.make();\n          const startedExit = yield* Effect.exit(\n            Effect.gen(function* () {\n              // The runtime binds the server's lifetime to the Scope.Scope\n              // we provide below — closing `sessionScope` kills the child\n              // process automatically. No manual `server.close()` needed.\n              const server = yield* openCodeRuntime.connectToOpenCodeServer({\n                binaryPath,\n                serverUrl,\n                ...(options?.environment ? { environment: options.environment } : {}),\n              });\n              const client = openCodeRuntime.createOpenCodeSdkClient({\n                baseUrl: server.url,\n                directory,\n                ...(server.external && serverPassword ? { serverPassword } : {}),\n              });\n              const openCodeSession = yield* runOpenCodeSdk(\"session.create\", () =>\n                client.session.create({\n                  title: `Salchi ${input.threadId}`,\n                  permission: buildOpenCodePermissionRules(input.runtimeMode),\n                }),\n              );\n              if (!openCodeSession.data) {\n                return yield* new OpenCodeRuntimeError({\n                  operation: \"session.create\",\n                  detail: \"OpenCode session.create returned no session payload.\",\n                });\n              }\n              return {\n                sessionScope,\n                server,\n                client,\n                openCodeSession: openCodeSession.data,\n              };\n            }).pipe(Effect.provideService(Scope.Scope, sessionScope)),\n          );\n          if (Exit.isFailure(startedExit)) {\n            yield* Scope.close(sessionScope, Exit.void).pipe(Effect.ignore);\n            return yield* toProcessError(input.threadId, Cause.squash(startedExit.cause));\n          }\n          return startedExit.value;\n        });\n\n        // Guard against a concurrent startSession call that may have raced\n        // and already inserted a session while we were awaiting async work.\n        const raceWinner = sessions.get(input.threadId);\n        if (raceWinner) {\n          // Another call won the race – clean up the session we just created\n          // (including the remote SDK session) and return the existing one.\n          yield* runOpenCodeSdk(\"session.abort\", () =>\n            started.client.session.abort({\n              sessionID: started.openCodeSession.id,\n            }),\n          ).pipe(Effect.ignore);\n          yield* Scope.close(started.sessionScope, Exit.void).pipe(Effect.ignore);\n          return raceWinner.session;\n        }\n\n        const createdAt = yield* nowIso;\n        const session: ProviderSession = {\n          provider: PROVIDER,\n          providerInstanceId: boundInstanceId,\n          status: \"ready\",\n          runtimeMode: input.runtimeMode,\n          cwd: directory,\n          ...(input.modelSelection ? { model: input.modelSelection.model } : {}),\n          threadId: input.threadId,\n          createdAt,\n          updatedAt: createdAt,\n        };\n\n        const context: OpenCodeSessionContext = {\n          session,\n          client: started.client,\n          server: started.server,\n          directory,\n          openCodeSessionId: started.openCodeSession.id,\n          pendingPermissions: new Map(),\n          pendingQuestions: new Map(),\n          partById: new Map(),\n          emittedTextByPartId: new Map(),\n          messageRoleById: new Map(),\n          completedAssistantPartIds: new Set(),\n          turns: [],\n          activeTurnId: undefined,\n          activeAgent: undefined,\n          activeVariant: undefined,\n          stopped: yield* Ref.make(false),\n          sessionScope: started.sessionScope,\n        };\n        sessions.set(input.threadId, context);\n        yield* startEventPump(context);\n\n        yield* emit({\n          ...(yield* buildEventBase({ threadId: input.threadId })),\n          type: \"session.started\",\n          payload: {\n            message: \"OpenCode session started\",\n          },\n        });\n        yield* emit({\n          ...(yield* buildEventBase({ threadId: input.threadId })),\n          type: \"thread.started\",\n          payload: {\n            providerThreadId: started.openCodeSession.id,\n          },\n        });\n\n        return session;\n      },\n    );\n\n    const sendTurnInternal = Effect.fn(\"sendTurnInternal\")(function* (\n      input: ProviderSendTurnInput,\n      expectedTurnId?: TurnId,\n    ) {\n      const context = ensureSessionContext(sessions, input.threadId);\n      // A sendTurn while a turn is active is a steer: OpenCode queues the\n      // prompt into the busy session and the work continues as one turn, so\n      // the active turn id is reused instead of opening a new turn.\n      const steeringTurnId = context.activeTurnId;\n      if (expectedTurnId !== undefined && steeringTurnId !== expectedTurnId) {\n        return yield* new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"turn/steer\",\n          detail: `Expected active turn '${expectedTurnId}', received '${steeringTurnId ?? \"none\"}'.`,\n        });\n      }\n      const turnId = steeringTurnId ?? TurnId.make(`opencode-turn-${yield* randomUUIDv4}`);\n      const modelSelection =\n        input.modelSelection ??\n        (context.session.model\n          ? { instanceId: boundInstanceId, model: context.session.model }\n          : undefined);\n      if (modelSelection !== undefined && modelSelection.instanceId !== boundInstanceId) {\n        return yield* new ProviderAdapterValidationError({\n          provider: PROVIDER,\n          operation: \"sendTurn\",\n          issue: `OpenCode model selection is bound to instance '${modelSelection?.instanceId}', expected '${boundInstanceId}'.`,\n        });\n      }\n      const parsedModel = parseOpenCodeModelSlug(modelSelection?.model);\n      if (!parsedModel) {\n        return yield* new ProviderAdapterValidationError({\n          provider: PROVIDER,\n          operation: \"sendTurn\",\n          issue: \"OpenCode model selection must use the 'provider/model' format.\",\n        });\n      }\n\n      const text = input.input?.trim();\n      const fileParts = toOpenCodeFileParts({\n        attachments: input.attachments,\n        resolveAttachmentPath: (attachment) =>\n          resolveAttachmentPath({\n            attachmentsDir: serverConfig.attachmentsDir,\n            attachment,\n          }),\n      });\n      if ((!text || text.length === 0) && fileParts.length === 0) {\n        return yield* new ProviderAdapterValidationError({\n          provider: PROVIDER,\n          operation: \"sendTurn\",\n          issue: \"OpenCode turns require text input or at least one attachment.\",\n        });\n      }\n\n      const agent = getModelSelectionStringOptionValue(modelSelection, \"agent\");\n      const variant = getModelSelectionStringOptionValue(modelSelection, \"variant\");\n\n      context.activeTurnId = turnId;\n      context.activeAgent = agent ?? (input.interactionMode === \"plan\" ? \"plan\" : undefined);\n      context.activeVariant = variant;\n      yield* updateProviderSession(\n        context,\n        {\n          status: \"running\",\n          activeTurnId: turnId,\n          model: modelSelection?.model ?? context.session.model,\n        },\n        { clearLastError: true },\n      );\n\n      if (steeringTurnId === undefined) {\n        yield* emit({\n          ...(yield* buildEventBase({ threadId: input.threadId, turnId })),\n          type: \"turn.started\",\n          payload: {\n            model: modelSelection?.model ?? context.session.model,\n            ...(variant ? { effort: variant } : {}),\n          },\n        });\n      }\n\n      yield* runOpenCodeSdk(\"session.promptAsync\", () =>\n        context.client.session.promptAsync({\n          sessionID: context.openCodeSessionId,\n          model: parsedModel,\n          ...(context.activeAgent ? { agent: context.activeAgent } : {}),\n          ...(context.activeVariant ? { variant: context.activeVariant } : {}),\n          parts: [...(text ? [{ type: \"text\" as const, text }] : []), ...fileParts],\n        }),\n      ).pipe(\n        Effect.mapError(toRequestError),\n        // On failure of a fresh turn: clear active-turn state, flip the\n        // session back to ready with lastError set, emit turn.aborted, then\n        // let the typed error propagate. We don't need to rebuild the error\n        // here — `toRequestError` already produced the right shape. A failed\n        // steer leaves the still-running original turn untouched.\n        Effect.tapError((requestError) =>\n          steeringTurnId !== undefined\n            ? Effect.void\n            : Effect.gen(function* () {\n                context.activeTurnId = undefined;\n                context.activeAgent = undefined;\n                context.activeVariant = undefined;\n                yield* updateProviderSession(\n                  context,\n                  {\n                    status: \"ready\",\n                    model: modelSelection?.model ?? context.session.model,\n                    lastError: requestError.detail,\n                  },\n                  { clearActiveTurnId: true },\n                );\n                yield* emit({\n                  ...(yield* buildEventBase({\n                    threadId: input.threadId,\n                    turnId,\n                  })),\n                  type: \"turn.aborted\",\n                  payload: {\n                    reason: requestError.detail,\n                  },\n                });\n              }),\n        ),\n      );\n\n      return {\n        threadId: input.threadId,\n        turnId,\n      };\n    });\n\n    const sendTurn: OpenCodeAdapterShape[\"sendTurn\"] = (input) => sendTurnInternal(input);\n    const steerTurn: OpenCodeAdapterShape[\"steerTurn\"] = (input) =>\n      sendTurnInternal(\n        {\n          threadId: input.threadId,\n          ...(input.input !== undefined ? { input: input.input } : {}),\n          ...(input.attachments !== undefined ? { attachments: input.attachments } : {}),\n        },\n        input.expectedTurnId,\n      );\n\n    const interruptTurn: OpenCodeAdapterShape[\"interruptTurn\"] = Effect.fn(\"interruptTurn\")(\n      function* (threadId, turnId) {\n        const context = ensureSessionContext(sessions, threadId);\n        yield* runOpenCodeSdk(\"session.abort\", () =>\n          context.client.session.abort({ sessionID: context.openCodeSessionId }),\n        ).pipe(Effect.mapError(toRequestError));\n        if (turnId ?? context.activeTurnId) {\n          yield* emit({\n            ...(yield* buildEventBase({\n              threadId,\n              turnId: turnId ?? context.activeTurnId,\n            })),\n            type: \"turn.aborted\",\n            payload: {\n              reason: \"Interrupted by user.\",\n            },\n          });\n        }\n      },\n    );\n\n    const respondToRequest: OpenCodeAdapterShape[\"respondToRequest\"] = Effect.fn(\n      \"respondToRequest\",\n    )(function* (threadId, requestId, decision) {\n      const context = ensureSessionContext(sessions, threadId);\n      if (!context.pendingPermissions.has(requestId)) {\n        return yield* new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"permission.reply\",\n          detail: `Unknown pending permission request: ${requestId}`,\n        });\n      }\n\n      yield* runOpenCodeSdk(\"permission.reply\", () =>\n        context.client.permission.reply({\n          requestID: requestId,\n          reply: toOpenCodePermissionReply(decision),\n        }),\n      ).pipe(Effect.mapError(toRequestError));\n    });\n\n    const respondToUserInput: OpenCodeAdapterShape[\"respondToUserInput\"] = Effect.fn(\n      \"respondToUserInput\",\n    )(function* (threadId, requestId, answers) {\n      const context = ensureSessionContext(sessions, threadId);\n      const request = context.pendingQuestions.get(requestId);\n      if (!request) {\n        return yield* new ProviderAdapterRequestError({\n          provider: PROVIDER,\n          method: \"question.reply\",\n          detail: `Unknown pending user-input request: ${requestId}`,\n        });\n      }\n\n      yield* runOpenCodeSdk(\"question.reply\", () =>\n        context.client.question.reply({\n          requestID: requestId,\n          answers: toOpenCodeQuestionAnswers(request, answers),\n        }),\n      ).pipe(Effect.mapError(toRequestError));\n    });\n\n    const stopSession: OpenCodeAdapterShape[\"stopSession\"] = Effect.fn(\"stopSession\")(\n      function* (threadId) {\n        const context = sessions.get(threadId);\n        if (!context) {\n          throw new ProviderAdapterSessionNotFoundError({\n            provider: PROVIDER,\n            threadId,\n          });\n        }\n        const stopped = yield* stopOpenCodeContext(context);\n        sessions.delete(threadId);\n        if (!stopped) {\n          return;\n        }\n        yield* emit({\n          ...(yield* buildEventBase({ threadId })),\n          type: \"session.exited\",\n          payload: {\n            reason: \"Session stopped.\",\n            recoverable: false,\n            exitKind: \"graceful\",\n          },\n        });\n      },\n    );\n\n    const listSessions: OpenCodeAdapterShape[\"listSessions\"] = () =>\n      Effect.sync(() => [...sessions.values()].map((context) => context.session));\n\n    const hasSession: OpenCodeAdapterShape[\"hasSession\"] = (threadId) =>\n      Effect.sync(() => sessions.has(threadId));\n\n    const readThread: OpenCodeAdapterShape[\"readThread\"] = Effect.fn(\"readThread\")(\n      function* (threadId) {\n        const context = ensureSessionContext(sessions, threadId);\n        const messages = yield* runOpenCodeSdk(\"session.messages\", () =>\n          context.client.session.messages({\n            sessionID: context.openCodeSessionId,\n          }),\n        ).pipe(Effect.mapError(toRequestError));\n\n        const turns: Array<OpenCodeTurnSnapshot> = [];\n        for (const entry of messages.data ?? []) {\n          if (entry.info.role === \"assistant\") {\n            turns.push({\n              id: TurnId.make(entry.info.id),\n              items: [entry.info, ...entry.parts],\n            });\n          }\n        }\n\n        return {\n          threadId,\n          turns,\n        };\n      },\n    );\n\n    const rollbackThread: OpenCodeAdapterShape[\"rollbackThread\"] = Effect.fn(\"rollbackThread\")(\n      function* (threadId, numTurns) {\n        const context = ensureSessionContext(sessions, threadId);\n        const messages = yield* runOpenCodeSdk(\"session.messages\", () =>\n          context.client.session.messages({\n            sessionID: context.openCodeSessionId,\n          }),\n        ).pipe(Effect.mapError(toRequestError));\n\n        const assistantMessages = (messages.data ?? []).filter(\n          (entry) => entry.info.role === \"assistant\",\n        );\n        const targetIndex = assistantMessages.length - numTurns - 1;\n        const target = targetIndex >= 0 ? assistantMessages[targetIndex] : null;\n        yield* runOpenCodeSdk(\"session.revert\", () =>\n          context.client.session.revert({\n            sessionID: context.openCodeSessionId,\n            ...(target ? { messageID: target.info.id } : {}),\n          }),\n        ).pipe(Effect.mapError(toRequestError));\n\n        return yield* readThread(threadId);\n      },\n    );\n\n    const stopAll: OpenCodeAdapterShape[\"stopAll\"] = () =>\n      Effect.gen(function* () {\n        const contexts = [...sessions.values()];\n        sessions.clear();\n        // `stopOpenCodeContext` is typed as never-failing — SDK aborts are\n        // already `Effect.ignore`'d inside it. `ignoreCause` here also\n        // swallows defects from throwing finalizers so one bad close can't\n        // interrupt the sibling fibers. Same pattern as the layer finalizer.\n        yield* Effect.forEach(\n          contexts,\n          (context) => Effect.ignoreCause(stopOpenCodeContext(context)),\n          { concurrency: \"unbounded\", discard: true },\n        );\n      });\n\n    return {\n      provider: PROVIDER,\n      capabilities: {\n        sessionModelSwitch: \"in-session\",\n        childThreadMode: \"none\",\n        activeTurnSteering: \"async-prompt\",\n      },\n      startSession,\n      sendTurn,\n      steerTurn,\n      interruptTurn,\n      respondToRequest,\n      respondToUserInput,\n      stopSession,\n      listSessions,\n      hasSession,\n      readThread,\n      rollbackThread,\n      stopAll,\n      get streamEvents() {\n        return Stream.fromQueue(runtimeEvents);\n      },\n    } satisfies OpenCodeAdapterShape;\n  });\n}\n","import {\n  ProviderDriverKind,\n  type ModelCapabilities,\n  type OpenCodeSettings,\n  type ServerProviderModel,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Data from \"effect/Data\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\n\nimport { createModelCapabilities } from \"@salchi/shared/model\";\nimport { compareSemverVersions } from \"@salchi/shared/semver\";\nimport {\n  buildServerProvider,\n  nonEmptyTrimmed,\n  parseGenericCliVersion,\n  providerModelsFromSettings,\n  type ServerProviderDraft,\n} from \"../providerSnapshot.ts\";\nimport {\n  OpenCodeRuntime,\n  openCodeRuntimeErrorDetail,\n  type OpenCodeInventory,\n} from \"../opencodeRuntime.ts\";\nimport type { Agent, ProviderListResponse } from \"@opencode-ai/sdk/v2\";\n\nconst PROVIDER = ProviderDriverKind.make(\"opencode\");\nconst OPENCODE_PRESENTATION = {\n  displayName: \"OpenCode\",\n  showInteractionModeToggle: false,\n} as const;\nconst MINIMUM_OPENCODE_VERSION = \"1.14.19\";\n\nclass OpenCodeProbeError extends Data.TaggedError(\"OpenCodeProbeError\")<{\n  readonly cause: unknown;\n  readonly detail: string;\n}> {}\n\nfunction normalizeProbeMessage(message: string): string | undefined {\n  const trimmed = message.trim();\n  if (trimmed.length === 0) {\n    return undefined;\n  }\n  if (\n    trimmed === \"An error occurred in Effect.tryPromise\" ||\n    trimmed === \"An error occurred in Effect.try\"\n  ) {\n    return undefined;\n  }\n  return trimmed;\n}\n\nfunction normalizedErrorMessage(cause: unknown): string | undefined {\n  if (cause instanceof OpenCodeProbeError) {\n    return normalizeProbeMessage(cause.detail);\n  }\n\n  if (!(cause instanceof Error)) {\n    return undefined;\n  }\n\n  return normalizeProbeMessage(cause.message);\n}\n\nfunction formatOpenCodeProbeError(input: {\n  readonly cause: unknown;\n  readonly isExternalServer: boolean;\n  readonly serverUrl: string;\n}): { readonly installed: boolean; readonly message: string } {\n  const detail = normalizedErrorMessage(input.cause);\n  const lower = detail?.toLowerCase() ?? \"\";\n\n  if (input.isExternalServer) {\n    if (\n      lower.includes(\"401\") ||\n      lower.includes(\"403\") ||\n      lower.includes(\"unauthorized\") ||\n      lower.includes(\"forbidden\")\n    ) {\n      return {\n        installed: true,\n        message: \"OpenCode server rejected authentication. Check the server URL and password.\",\n      };\n    }\n\n    if (\n      lower.includes(\"econnrefused\") ||\n      lower.includes(\"enotfound\") ||\n      lower.includes(\"fetch failed\") ||\n      lower.includes(\"networkerror\") ||\n      lower.includes(\"timed out\") ||\n      lower.includes(\"timeout\") ||\n      lower.includes(\"socket hang up\")\n    ) {\n      return {\n        installed: true,\n        message: `Couldn't reach the configured OpenCode server at ${input.serverUrl}. Check that the server is running and the URL is correct.`,\n      };\n    }\n\n    return {\n      installed: true,\n      message: detail ?? \"Failed to connect to the configured OpenCode server.\",\n    };\n  }\n\n  if (lower.includes(\"enoent\") || lower.includes(\"notfound\")) {\n    return {\n      installed: false,\n      message: \"OpenCode CLI (`opencode`) is not installed or not on PATH.\",\n    };\n  }\n\n  if (lower.includes(\"quarantine\")) {\n    return {\n      installed: true,\n      message:\n        \"macOS is blocking the OpenCode binary (quarantine). Run `xattr -d com.apple.quarantine $(which opencode)` to fix this.\",\n    };\n  }\n\n  if (lower.includes(\"invalid code signature\") || lower.includes(\"corrupted\")) {\n    return {\n      installed: true,\n      message:\n        \"macOS killed the OpenCode process due to an invalid code signature. The binary may be corrupted — try reinstalling OpenCode.\",\n    };\n  }\n\n  return {\n    installed: true,\n    message: detail\n      ? `Failed to execute OpenCode CLI health check: ${detail}`\n      : \"Failed to execute OpenCode CLI health check.\",\n  };\n}\n\nfunction titleCaseSlug(value: string): string {\n  return value\n    .split(/[-_/]+/)\n    .filter((segment) => segment.length > 0)\n    .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n    .join(\" \");\n}\n\nfunction inferDefaultVariant(\n  providerID: string,\n  variants: ReadonlyArray<string>,\n): string | undefined {\n  if (variants.length === 1) {\n    return variants[0];\n  }\n  if (providerID === \"anthropic\" || providerID.startsWith(\"google\")) {\n    return variants.includes(\"high\") ? \"high\" : undefined;\n  }\n  if (providerID === \"openai\" || providerID === \"opencode\") {\n    return variants.includes(\"medium\") ? \"medium\" : variants.includes(\"high\") ? \"high\" : undefined;\n  }\n  return undefined;\n}\n\nfunction inferDefaultAgent(agents: ReadonlyArray<Agent>): string | undefined {\n  return agents.find((agent) => agent.name === \"build\")?.name ?? agents[0]?.name ?? undefined;\n}\n\nconst DEFAULT_OPENCODE_MODEL_CAPABILITIES: ModelCapabilities = createModelCapabilities({\n  optionDescriptors: [],\n});\n\nfunction openCodeCapabilitiesForModel(input: {\n  readonly providerID: string;\n  readonly model: ProviderListResponse[\"all\"][number][\"models\"][string];\n  readonly agents: ReadonlyArray<Agent>;\n}): ModelCapabilities {\n  const variantValues = Object.keys(input.model.variants ?? {});\n  const defaultVariant = inferDefaultVariant(input.providerID, variantValues);\n  const variantOptions = variantValues.map((value) =>\n    defaultVariant === value\n      ? { id: value, label: titleCaseSlug(value), isDefault: true as const }\n      : { id: value, label: titleCaseSlug(value) },\n  );\n  const primaryAgents = input.agents.filter(\n    (agent) => !agent.hidden && (agent.mode === \"primary\" || agent.mode === \"all\"),\n  );\n  const defaultAgent = inferDefaultAgent(primaryAgents);\n  const agentOptions = primaryAgents.map((agent) =>\n    defaultAgent === agent.name\n      ? { id: agent.name, label: titleCaseSlug(agent.name), isDefault: true as const }\n      : { id: agent.name, label: titleCaseSlug(agent.name) },\n  );\n  return createModelCapabilities({\n    optionDescriptors: [\n      ...(variantOptions.length > 0\n        ? [\n            {\n              id: \"variant\",\n              label: \"Variant\",\n              type: \"select\" as const,\n              options: variantOptions,\n              ...(defaultVariant ? { currentValue: defaultVariant } : {}),\n            },\n          ]\n        : []),\n      ...(agentOptions.length > 0\n        ? [\n            {\n              id: \"agent\",\n              label: \"Agent\",\n              type: \"select\" as const,\n              options: agentOptions,\n              ...(defaultAgent ? { currentValue: defaultAgent } : {}),\n            },\n          ]\n        : []),\n    ],\n  });\n}\n\nfunction flattenOpenCodeModels(input: OpenCodeInventory): ReadonlyArray<ServerProviderModel> {\n  const connected = new Set(input.providerList.connected);\n  const models: Array<ServerProviderModel> = [];\n\n  for (const provider of input.providerList.all) {\n    if (!connected.has(provider.id)) {\n      continue;\n    }\n\n    for (const model of Object.values(provider.models)) {\n      const name = nonEmptyTrimmed(model.name);\n      if (!name) {\n        continue;\n      }\n\n      const subProvider = nonEmptyTrimmed(provider.name);\n      models.push({\n        slug: `${provider.id}/${model.id}`,\n        name,\n        ...(subProvider ? { subProvider } : {}),\n        isCustom: false,\n        capabilities: openCodeCapabilitiesForModel({\n          providerID: provider.id,\n          model,\n          agents: input.agents,\n        }),\n      });\n    }\n  }\n\n  return models.toSorted((left, right) => left.name.localeCompare(right.name));\n}\n\nexport const makePendingOpenCodeProvider = (\n  openCodeSettings: OpenCodeSettings,\n): Effect.Effect<ServerProviderDraft> =>\n  Effect.gen(function* () {\n    const checkedAt = yield* Effect.map(DateTime.now, DateTime.formatIso);\n    const models = providerModelsFromSettings(\n      [],\n      PROVIDER,\n      openCodeSettings.customModels,\n      DEFAULT_OPENCODE_MODEL_CAPABILITIES,\n    );\n\n    if (!openCodeSettings.enabled) {\n      return buildServerProvider({\n        presentation: OPENCODE_PRESENTATION,\n        enabled: false,\n        checkedAt,\n        models,\n        probe: {\n          installed: false,\n          version: null,\n          status: \"warning\",\n          auth: { status: \"unknown\" },\n          message:\n            openCodeSettings.serverUrl.trim().length > 0\n              ? \"OpenCode is disabled in Salchi settings. A server URL is configured.\"\n              : \"OpenCode is disabled in Salchi settings.\",\n        },\n      });\n    }\n\n    return buildServerProvider({\n      presentation: OPENCODE_PRESENTATION,\n      enabled: true,\n      checkedAt,\n      models,\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: \"OpenCode provider status has not been checked in this session yet.\",\n      },\n    });\n  });\n\nexport const checkOpenCodeProviderStatus = Effect.fn(\"checkOpenCodeProviderStatus\")(function* (\n  openCodeSettings: OpenCodeSettings,\n  cwd: string,\n  environment: NodeJS.ProcessEnv = process.env,\n): Effect.fn.Return<ServerProviderDraft, never, OpenCodeRuntime> {\n  const openCodeRuntime = yield* OpenCodeRuntime;\n  const checkedAt = DateTime.formatIso(yield* DateTime.now);\n  const customModels = openCodeSettings.customModels;\n  const isExternalServer = openCodeSettings.serverUrl.trim().length > 0;\n\n  const fallback = (cause: unknown, version: string | null = null) => {\n    const failure = formatOpenCodeProbeError({\n      cause,\n      isExternalServer,\n      serverUrl: openCodeSettings.serverUrl,\n    });\n    return buildServerProvider({\n      presentation: OPENCODE_PRESENTATION,\n      enabled: openCodeSettings.enabled,\n      checkedAt,\n      models: providerModelsFromSettings(\n        [],\n        PROVIDER,\n        customModels,\n        DEFAULT_OPENCODE_MODEL_CAPABILITIES,\n      ),\n      probe: {\n        installed: failure.installed,\n        version,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: failure.message,\n      },\n    });\n  };\n\n  if (!openCodeSettings.enabled) {\n    return buildServerProvider({\n      presentation: OPENCODE_PRESENTATION,\n      enabled: false,\n      checkedAt,\n      models: providerModelsFromSettings(\n        [],\n        PROVIDER,\n        customModels,\n        DEFAULT_OPENCODE_MODEL_CAPABILITIES,\n      ),\n      probe: {\n        installed: false,\n        version: null,\n        status: \"warning\",\n        auth: { status: \"unknown\" },\n        message: isExternalServer\n          ? \"OpenCode is disabled in Salchi settings. A server URL is configured.\"\n          : \"OpenCode is disabled in Salchi settings.\",\n      },\n    });\n  }\n\n  let version: string | null = null;\n  if (!isExternalServer) {\n    const versionExit = yield* Effect.exit(\n      openCodeRuntime\n        .runOpenCodeCommand({\n          binaryPath: openCodeSettings.binaryPath,\n          args: [\"--version\"],\n          environment,\n        })\n        .pipe(\n          Effect.mapError(\n            (cause) => new OpenCodeProbeError({ cause, detail: openCodeRuntimeErrorDetail(cause) }),\n          ),\n        ),\n    );\n    if (versionExit._tag === \"Failure\") {\n      return fallback(Cause.squash(versionExit.cause));\n    }\n    version = parseGenericCliVersion(versionExit.value.stdout) ?? null;\n\n    if (!version) {\n      return fallback(\n        new Error(\n          `Unable to determine OpenCode version from \\`opencode --version\\` output. Salchi requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,\n        ),\n        null,\n      );\n    }\n    if (compareSemverVersions(version, MINIMUM_OPENCODE_VERSION) < 0) {\n      return buildServerProvider({\n        presentation: OPENCODE_PRESENTATION,\n        enabled: openCodeSettings.enabled,\n        checkedAt,\n        models: providerModelsFromSettings(\n          [],\n          PROVIDER,\n          customModels,\n          DEFAULT_OPENCODE_MODEL_CAPABILITIES,\n        ),\n        probe: {\n          installed: true,\n          version,\n          status: \"error\",\n          auth: { status: \"unknown\" },\n          message: `OpenCode v${version} is too old. Upgrade to v${MINIMUM_OPENCODE_VERSION} or newer.`,\n        },\n      });\n    }\n  }\n\n  const inventoryExit = yield* Effect.exit(\n    Effect.scoped(\n      Effect.gen(function* () {\n        const server = yield* openCodeRuntime.connectToOpenCodeServer({\n          binaryPath: openCodeSettings.binaryPath,\n          serverUrl: openCodeSettings.serverUrl,\n          environment,\n        });\n        return yield* openCodeRuntime.loadOpenCodeInventory(\n          openCodeRuntime.createOpenCodeSdkClient({\n            baseUrl: server.url,\n            directory: cwd,\n            ...(isExternalServer && openCodeSettings.serverPassword\n              ? { serverPassword: openCodeSettings.serverPassword }\n              : {}),\n          }),\n        );\n      }).pipe(\n        Effect.mapError(\n          (cause) => new OpenCodeProbeError({ cause, detail: openCodeRuntimeErrorDetail(cause) }),\n        ),\n      ),\n    ),\n  );\n  if (inventoryExit._tag === \"Failure\") {\n    return fallback(Cause.squash(inventoryExit.cause), version);\n  }\n\n  const models = providerModelsFromSettings(\n    flattenOpenCodeModels(inventoryExit.value),\n    PROVIDER,\n    customModels,\n    DEFAULT_OPENCODE_MODEL_CAPABILITIES,\n  );\n  const connectedCount = inventoryExit.value.providerList.connected.length;\n  return buildServerProvider({\n    presentation: OPENCODE_PRESENTATION,\n    enabled: true,\n    checkedAt,\n    models,\n    probe: {\n      installed: true,\n      version,\n      status: connectedCount > 0 ? \"ready\" : \"warning\",\n      auth: {\n        status: connectedCount > 0 ? \"authenticated\" : \"unknown\",\n        type: \"opencode\",\n      },\n      message:\n        connectedCount > 0\n          ? `${connectedCount} upstream provider${connectedCount === 1 ? \"\" : \"s\"} connected through ${isExternalServer ? \"the configured OpenCode server\" : \"OpenCode\"}.`\n          : isExternalServer\n            ? \"Connected to the configured OpenCode server, but it did not report any connected upstream providers.\"\n            : \"OpenCode is available, but it did not report any connected upstream providers.\",\n    },\n  });\n});\n","/**\n * OpenCodeDriver — `ProviderDriver` for the OpenCode runtime.\n *\n * Mirrors the Codex / Claude drivers: a plain value whose `create()`\n * bundles `snapshot` / `adapter` / `textGeneration` closures over the\n * per-instance `OpenCodeSettings`.\n *\n * Two instances with different `serverUrl`s therefore talk to independent\n * OpenCode servers; when no `serverUrl` is set, the adapter + text-generation\n * shares spin up their own scoped child processes, and those child\n * processes are released when the registry scope closes.\n *\n * @module provider/Drivers/OpenCodeDriver\n */\nimport { OpenCodeSettings, ProviderDriverKind, type ServerProvider } from \"@salchi/contracts\";\nimport * as Duration from \"effect/Duration\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient } from \"effect/unstable/http\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { makeOpenCodeTextGeneration } from \"../../textGeneration/OpenCodeTextGeneration.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport { ProviderDriverError } from \"../Errors.ts\";\nimport { makeOpenCodeAdapter } from \"../Layers/OpenCodeAdapter.ts\";\nimport {\n  checkOpenCodeProviderStatus,\n  makePendingOpenCodeProvider,\n} from \"../Layers/OpenCodeProvider.ts\";\nimport { ProviderEventLoggers } from \"../Layers/ProviderEventLoggers.ts\";\nimport { makeManagedServerProvider } from \"../makeManagedServerProvider.ts\";\nimport { OpenCodeRuntime } from \"../opencodeRuntime.ts\";\nimport {\n  defaultProviderContinuationIdentity,\n  type ProviderDriver,\n  type ProviderInstance,\n} from \"../ProviderDriver.ts\";\nimport type { ServerProviderDraft } from \"../providerSnapshot.ts\";\nimport { mergeProviderInstanceEnvironment } from \"../ProviderInstanceEnvironment.ts\";\nimport {\n  enrichProviderSnapshotWithVersionAdvisory,\n  makePackageManagedProviderMaintenanceResolver,\n  normalizeCommandPath,\n  resolveProviderMaintenanceCapabilitiesEffect,\n} from \"../providerMaintenance.ts\";\nconst decodeOpenCodeSettings = Schema.decodeSync(OpenCodeSettings);\n\nconst DRIVER_KIND = ProviderDriverKind.make(\"opencode\");\nconst SNAPSHOT_REFRESH_INTERVAL = Duration.minutes(5);\n\nfunction isOpenCodeNativeCommandPath(commandPath: string): boolean {\n  const normalized = normalizeCommandPath(commandPath);\n  return (\n    normalized.endsWith(\"/.opencode/bin/opencode\") ||\n    normalized.endsWith(\"/.opencode/bin/opencode.exe\")\n  );\n}\n\nconst UPDATE = makePackageManagedProviderMaintenanceResolver({\n  provider: DRIVER_KIND,\n  npmPackageName: \"opencode-ai\",\n  homebrewFormula: \"anomalyco/tap/opencode\",\n  nativeUpdate: {\n    executable: \"opencode\",\n    args: [\"upgrade\"],\n    lockKey: \"opencode-native\",\n    isCommandPath: isOpenCodeNativeCommandPath,\n  },\n});\n\nexport type OpenCodeDriverEnv =\n  | ChildProcessSpawner.ChildProcessSpawner\n  | Crypto.Crypto\n  | FileSystem.FileSystem\n  | HttpClient.HttpClient\n  | OpenCodeRuntime\n  | Path.Path\n  | ProviderEventLoggers\n  | ServerConfig;\n\nconst withInstanceIdentity =\n  (input: {\n    readonly instanceId: ProviderInstance[\"instanceId\"];\n    readonly displayName: string | undefined;\n    readonly accentColor: string | undefined;\n    readonly continuationGroupKey: string;\n  }) =>\n  (snapshot: ServerProviderDraft): ServerProvider => ({\n    ...snapshot,\n    instanceId: input.instanceId,\n    driver: DRIVER_KIND,\n    ...(input.displayName ? { displayName: input.displayName } : {}),\n    ...(input.accentColor ? { accentColor: input.accentColor } : {}),\n    continuation: { groupKey: input.continuationGroupKey },\n  });\n\nexport const OpenCodeDriver: ProviderDriver<OpenCodeSettings, OpenCodeDriverEnv> = {\n  driverKind: DRIVER_KIND,\n  metadata: {\n    displayName: \"OpenCode\",\n    supportsMultipleInstances: true,\n  },\n  configSchema: OpenCodeSettings,\n  defaultConfig: (): OpenCodeSettings => decodeOpenCodeSettings({}),\n  create: ({ instanceId, displayName, accentColor, environment, enabled, config }) =>\n    Effect.gen(function* () {\n      const openCodeRuntime = yield* OpenCodeRuntime;\n      const serverConfig = yield* ServerConfig;\n      const httpClient = yield* HttpClient.HttpClient;\n      const eventLoggers = yield* ProviderEventLoggers;\n      const processEnv = mergeProviderInstanceEnvironment(environment);\n      const continuationIdentity = defaultProviderContinuationIdentity({\n        driverKind: DRIVER_KIND,\n        instanceId,\n      });\n      const stampIdentity = withInstanceIdentity({\n        instanceId,\n        displayName,\n        accentColor,\n        continuationGroupKey: continuationIdentity.continuationKey,\n      });\n      const effectiveConfig = { ...config, enabled } satisfies OpenCodeSettings;\n      const maintenanceCapabilities = yield* resolveProviderMaintenanceCapabilitiesEffect(UPDATE, {\n        binaryPath: effectiveConfig.binaryPath,\n        env: processEnv,\n      });\n\n      const adapter = yield* makeOpenCodeAdapter(effectiveConfig, {\n        instanceId,\n        environment: processEnv,\n        ...(eventLoggers.native ? { nativeEventLogger: eventLoggers.native } : {}),\n      });\n      const textGeneration = yield* makeOpenCodeTextGeneration(effectiveConfig, processEnv);\n\n      const checkProvider = checkOpenCodeProviderStatus(\n        effectiveConfig,\n        serverConfig.cwd,\n        processEnv,\n      ).pipe(Effect.map(stampIdentity), Effect.provideService(OpenCodeRuntime, openCodeRuntime));\n\n      const snapshot = yield* makeManagedServerProvider<OpenCodeSettings>({\n        maintenanceCapabilities,\n        getSettings: Effect.succeed(effectiveConfig),\n        streamSettings: Stream.never,\n        haveSettingsChanged: () => false,\n        initialSnapshot: (settings) =>\n          makePendingOpenCodeProvider(settings).pipe(Effect.map(stampIdentity)),\n        checkProvider,\n        enrichSnapshot: ({ snapshot, publishSnapshot }) =>\n          enrichProviderSnapshotWithVersionAdvisory(snapshot, maintenanceCapabilities).pipe(\n            Effect.provideService(HttpClient.HttpClient, httpClient),\n            Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot)),\n          ),\n        refreshInterval: SNAPSHOT_REFRESH_INTERVAL,\n      }).pipe(\n        Effect.mapError(\n          (cause) =>\n            new ProviderDriverError({\n              driver: DRIVER_KIND,\n              instanceId,\n              detail: `Failed to build OpenCode snapshot: ${cause.message ?? String(cause)}`,\n              cause,\n            }),\n        ),\n      );\n\n      return {\n        instanceId,\n        driverKind: DRIVER_KIND,\n        continuationIdentity,\n        displayName,\n        accentColor,\n        enabled,\n        snapshot,\n        adapter,\n        textGeneration,\n      } satisfies ProviderInstance;\n    }),\n};\n","/**\n * BUILT_IN_DRIVERS — the static set of `ProviderDriver`s this build ships\n * with.\n *\n * Every driver that the server knows how to instantiate from settings is\n * listed here. The `ProviderInstanceRegistry` iterates this array when\n * resolving `providerInstances` entries; anything not in the array surfaces\n * as an `\"unavailable\"` shadow snapshot at runtime (see\n * `buildUnavailableProviderSnapshot`).\n *\n * Adding a new first-party driver means:\n *   1. implement `ProviderDriver` in a sibling `Drivers/<Name>Driver.ts`,\n *   2. add it to this array,\n *   3. ensure the runtime layer satisfies its declared `R`.\n *\n * The aggregated `BuiltInDriversEnv` type is the union of every driver's\n * env requirement — the registry layer's `R` is this type, and the runtime\n * layer (ChildProcessSpawner, FileSystem, Path, ServerConfig,\n * OpenCodeRuntime, …) must satisfy it.\n *\n * @module provider/builtInDrivers\n */\nimport { ClaudeDriver, type ClaudeDriverEnv } from \"./Drivers/ClaudeDriver.ts\";\nimport { CodexDriver, type CodexDriverEnv } from \"./Drivers/CodexDriver.ts\";\nimport { CursorDriver, type CursorDriverEnv } from \"./Drivers/CursorDriver.ts\";\nimport { GrokDriver, type GrokDriverEnv } from \"./Drivers/GrokDriver.ts\";\nimport { OpenCodeDriver, type OpenCodeDriverEnv } from \"./Drivers/OpenCodeDriver.ts\";\nimport type { AnyProviderDriver } from \"./ProviderDriver.ts\";\n\n/**\n * Union of infrastructure services required to construct any built-in\n * driver. The registry layer declares `R = BuiltInDriversEnv`; the runtime\n * layer must provide every service in this union.\n */\nexport type BuiltInDriversEnv =\n  | ClaudeDriverEnv\n  | CodexDriverEnv\n  | CursorDriverEnv\n  | GrokDriverEnv\n  | OpenCodeDriverEnv;\n\n/**\n * Ordered list of built-in drivers. Order matters only for tie-breaking in\n * UI presentation — the registry itself is keyed by `driverKind`, so\n * iteration order has no functional effect on instance lookup.\n */\nexport const BUILT_IN_DRIVERS: ReadonlyArray<AnyProviderDriver<BuiltInDriversEnv>> = [\n  CodexDriver,\n  ClaudeDriver,\n  CursorDriver,\n  GrokDriver,\n  OpenCodeDriver,\n];\n","/**\n * ProviderInstanceRegistryMutator — internal handle used by the hydration\n * layer to reconcile the live registry with a fresh\n * `ProviderInstanceConfigMap`.\n *\n * Kept separate from the public `ProviderInstanceRegistry` service tag so\n * downstream consumers (drivers, reactors, `ProviderService`) can only read\n * from the registry. Only the hydration layer — which watches\n * `ServerSettingsService.streamChanges` and applies diffs — imports this\n * tag.\n *\n * The mutator exposes a single entry point, `reconcile(configMap)`, which:\n *\n *   1. Diffs the incoming map against the live one keyed by instance id.\n *   2. Closes the per-instance `Scope` of every removed or replaced entry\n *      (tearing down adapter processes, refresh fibres, temp files) BEFORE\n *      creating the replacement — `reconcile` guarantees \"at most one live\n *      instance per id\" at all times.\n *   3. Opens a fresh child `Scope` for every added or replaced entry, runs\n *      the driver's `create`, and stores the resulting `ProviderInstance`\n *      plus its scope.\n *   4. Publishes one `void` tick on the registry's `streamChanges` PubSub at\n *      the end of the batch — consumers re-pull `listInstances` /\n *      `listUnavailable`.\n *\n * `reconcile` is idempotent: calling it with an unchanged config map is a\n * no-op (no scope churn, no pubsub emission).\n *\n * @module provider/Services/ProviderInstanceRegistryMutator\n */\nimport type { ProviderInstanceConfigMap } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport interface ProviderInstanceRegistryMutatorShape {\n  /**\n   * Bring the live registry in line with the supplied config map. See\n   * module docs for the add / remove / replace semantics.\n   *\n   * The effect never fails: individual driver `create` failures are\n   * captured as \"unavailable\" shadow snapshots inside the registry, the\n   * same way boot-time failures are handled by\n   * `makeProviderInstanceRegistry`. This keeps settings-watcher loops from\n   * erroring out on a single bad entry.\n   */\n  readonly reconcile: (configMap: ProviderInstanceConfigMap) => Effect.Effect<void>;\n}\n\nexport class ProviderInstanceRegistryMutator extends Context.Service<\n  ProviderInstanceRegistryMutator,\n  ProviderInstanceRegistryMutatorShape\n>()(\"salchi/provider/Services/ProviderInstanceRegistryMutator\") {}\n","/**\n * Helpers for synthesizing \"unavailable\" `ServerProvider` snapshots.\n *\n * When `ServerSettings.providerInstances` (or persisted thread/session\n * state) references a driver this build does not ship — typical after a\n * downgrade from a fork or a feature-branch test session — the runtime\n * needs to surface the entry to the UI without crashing. This module\n * produces shadow snapshots that satisfy `ServerProvider`'s wire shape\n * while signalling unavailability.\n *\n * @module unavailableProviderSnapshot\n */\nimport {\n  ProviderDriverKind,\n  type ProviderInstanceId,\n  type ServerProvider,\n} from \"@salchi/contracts\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\n\nimport { buildServerProvider } from \"./providerSnapshot.ts\";\n\nexport interface UnavailableProviderSnapshotInput {\n  readonly driverKind: ProviderDriverKind | string;\n  readonly instanceId: ProviderInstanceId;\n  readonly displayName?: string | undefined;\n  readonly accentColor?: string | undefined;\n  readonly reason: string;\n  /**\n   * Optional override for `checkedAt`. Defaulted to the current Effect\n   * `DateTime` so callers\n   * (notably tests) don't have to pass it.\n   */\n  readonly checkedAt?: string;\n}\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\n/**\n * Produce a `ServerProvider` snapshot representing a configured instance\n * whose driver the running build does not implement. The result is safe\n * to broadcast over the wire and is structured so the web UI can render\n * a \"missing driver\" affordance without special-casing.\n */\nexport function buildUnavailableProviderSnapshot(\n  input: UnavailableProviderSnapshotInput,\n): Effect.Effect<ServerProvider> {\n  return Effect.gen(function* () {\n    const checkedAt = input.checkedAt ?? (yield* nowIso);\n    const displayName = input.displayName?.trim() || (input.driverKind as string);\n\n    const base = buildServerProvider({\n      presentation: { displayName },\n      enabled: false,\n      checkedAt,\n      models: [],\n      skills: [],\n      probe: {\n        installed: false,\n        version: null,\n        status: \"error\",\n        auth: { status: \"unknown\" },\n        message: input.reason,\n      },\n    });\n\n    return {\n      ...base,\n      instanceId: input.instanceId,\n      ...(input.accentColor ? { accentColor: input.accentColor } : {}),\n      driver:\n        typeof input.driverKind === \"string\"\n          ? ProviderDriverKind.make(input.driverKind)\n          : input.driverKind,\n      availability: \"unavailable\",\n      unavailableReason: input.reason,\n    };\n  });\n}\n","/**\n * ProviderInstanceRegistryLive — runtime implementation of\n * `ProviderInstanceRegistry` plus its sibling mutator.\n *\n * Materializes every entry in a `ProviderInstanceConfigMap`:\n *\n *   - When the entry's `driver` matches a registered driver, the registry\n *     decodes the opaque `config` envelope through `driver.configSchema`\n *     and calls `driver.create()` inside a fresh child scope. The\n *     resulting `ProviderInstance` is stored keyed by instance id,\n *     alongside its scope so the entry can be torn down independently.\n *   - When the entry's `driver` is unknown to this build (fork, rollback,\n *     in-flight PR branch), the registry emits an `\"unavailable\"` shadow\n *     `ServerProvider` snapshot instead of failing. This is what makes\n *     downgrades and fork-hopping safe per the\n *     `forward/backward compatibility invariant` in\n *     `packages/contracts/src/providerInstance.ts`.\n *   - When the entry's config fails schema decode, the registry logs and\n *     emits a shadow snapshot with the schema detail — same bucket as an\n *     unknown driver.\n *\n * Unlike the pre-Slice-D layer, the registry now holds mutable state\n * (`Ref`s + `PubSub`) and exposes an internal mutator\n * (`ProviderInstanceRegistryMutator`) whose `reconcile` method diffs a\n * fresh config map against the live state, tearing down removed instances\n * and building new ones without disturbing unaffected instances.\n *\n * Every live instance runs inside its own child `Scope`. The registry's\n * own scope owns all child scopes via finalizers, so closing the registry\n * tears every instance down in reverse order; closing a single instance\n * (via `reconcile` removing it) leaves the rest untouched.\n *\n * @module provider/Layers/ProviderInstanceRegistryLive\n */\nimport {\n  defaultInstanceIdForDriver,\n  ProviderInstanceId,\n  type ProviderInstanceConfig,\n  type ProviderInstanceConfigMap,\n  type ProviderDriverKind,\n  type ServerProvider,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Equal from \"effect/Equal\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Stream from \"effect/Stream\";\n\nimport { buildUnavailableProviderSnapshot } from \"../unavailableProviderSnapshot.ts\";\nimport {\n  ProviderInstanceRegistry,\n  type ProviderInstanceRegistryShape,\n} from \"../Services/ProviderInstanceRegistry.ts\";\nimport {\n  ProviderInstanceRegistryMutator,\n  type ProviderInstanceRegistryMutatorShape,\n} from \"../Services/ProviderInstanceRegistryMutator.ts\";\nimport type { AnyProviderDriver, ProviderInstance } from \"../ProviderDriver.ts\";\n\n/**\n * Live registry entry: the materialized `ProviderInstance` + the fresh\n * child scope its `create` effect ran in + the original `entry` envelope\n * so `reconcile` can cheaply detect \"no-op\" updates.\n */\ninterface LiveEntry {\n  readonly instance: ProviderInstance;\n  readonly scope: Scope.Closeable;\n  readonly entry: ProviderInstanceConfig;\n}\n\n/**\n * Internal state shared between the public registry service and the\n * mutator service. Both services are thin shells around these refs.\n */\ninterface RegistryState {\n  readonly entries: Ref.Ref<ReadonlyMap<ProviderInstanceId, LiveEntry>>;\n  readonly unavailable: Ref.Ref<ReadonlyMap<ProviderInstanceId, ServerProvider>>;\n  readonly changes: PubSub.PubSub<void>;\n}\n\n/**\n * Structural equality on `ProviderInstanceConfig` envelopes. Used by\n * `reconcile` to skip rebuilds when settings arrive unchanged. Config\n * payloads are opaque `unknown` at the envelope layer; `Equal.equals`\n * falls back to structural equality for plain records, which matches how\n * the schema decode output is constructed.\n */\nconst entryEqual = (a: ProviderInstanceConfig, b: ProviderInstanceConfig): boolean =>\n  Equal.equals(a, b);\n\nconst decodedConfigEnabled = (config: unknown): boolean | undefined => {\n  if (!config || typeof config !== \"object\" || globalThis.Array.isArray(config)) {\n    return undefined;\n  }\n  const enabled = (config as { readonly enabled?: unknown }).enabled;\n  return typeof enabled === \"boolean\" ? enabled : undefined;\n};\n\n/**\n * Build one live entry from a raw config envelope. Returns either a\n * `LiveEntry` plus undefined unavailable shadow, or a shadow snapshot and\n * undefined entry — callers dispatch to the appropriate Ref bucket.\n */\nconst buildEntry = <R>(input: {\n  readonly driversById: ReadonlyMap<ProviderDriverKind, AnyProviderDriver<R>>;\n  readonly parentScope: Scope.Scope;\n  readonly instanceId: ProviderInstanceId;\n  readonly rawInstanceId: string;\n  readonly entry: ProviderInstanceConfig;\n}): Effect.Effect<\n  | { readonly kind: \"live\"; readonly live: LiveEntry }\n  | { readonly kind: \"unavailable\"; readonly snapshot: ServerProvider },\n  never,\n  R\n> =>\n  Effect.gen(function* () {\n    const { driversById, parentScope, instanceId, rawInstanceId, entry } = input;\n    const driver = driversById.get(entry.driver);\n    if (!driver) {\n      return {\n        kind: \"unavailable\" as const,\n        snapshot: yield* buildUnavailableProviderSnapshot({\n          driverKind: entry.driver,\n          instanceId,\n          displayName: entry.displayName,\n          accentColor: entry.accentColor,\n          reason: `Driver '${entry.driver}' is not registered in this build.`,\n        }),\n      };\n    }\n\n    const decoder = Schema.decodeUnknownEffect(driver.configSchema);\n    const decodeResult = yield* decoder(entry.config ?? driver.defaultConfig()).pipe(Effect.result);\n    if (decodeResult._tag === \"Failure\") {\n      const issue = decodeResult.failure;\n      const detail = issue.message ?? String(issue);\n      yield* Effect.logError(\"Failed to decode provider instance config\", {\n        instanceId: rawInstanceId,\n        driver: entry.driver,\n        detail,\n      });\n      return {\n        kind: \"unavailable\" as const,\n        snapshot: yield* buildUnavailableProviderSnapshot({\n          driverKind: entry.driver,\n          instanceId,\n          displayName: entry.displayName,\n          accentColor: entry.accentColor,\n          reason: `Invalid config for instance '${rawInstanceId}': ${detail}`,\n        }),\n      };\n    }\n\n    const typedConfig = decodeResult.success;\n    const childScope = yield* Scope.make();\n    // Attach the child scope to the registry's parent scope: if the\n    // registry scope closes, each surviving instance's child scope is\n    // closed through this finalizer. `reconcile` manually closes the\n    // child scope on remove/replace; subsequent close via the parent's\n    // finalizer is a no-op because `Scope.close` is idempotent.\n    yield* Scope.addFinalizer(parentScope, Scope.close(childScope, Exit.void).pipe(Effect.ignore));\n\n    const createResult = yield* driver\n      .create({\n        instanceId,\n        displayName: entry.displayName,\n        accentColor: entry.accentColor,\n        environment: entry.environment ?? [],\n        enabled: entry.enabled ?? decodedConfigEnabled(typedConfig) ?? true,\n        config: typedConfig,\n      })\n      .pipe(Effect.provideService(Scope.Scope, childScope), Effect.result);\n    if (createResult._tag === \"Failure\") {\n      yield* Effect.logError(\"Failed to create provider instance\", {\n        instanceId: rawInstanceId,\n        driver: entry.driver,\n        detail: createResult.failure.detail,\n      });\n      yield* Scope.close(childScope, Exit.void).pipe(Effect.ignore);\n      return {\n        kind: \"unavailable\" as const,\n        snapshot: yield* buildUnavailableProviderSnapshot({\n          driverKind: entry.driver,\n          instanceId,\n          displayName: entry.displayName,\n          accentColor: entry.accentColor,\n          reason: `Driver '${entry.driver}' failed to create instance: ${createResult.failure.detail}`,\n        }),\n      };\n    }\n\n    return {\n      kind: \"live\" as const,\n      live: {\n        instance: createResult.success,\n        scope: childScope,\n        entry,\n      },\n    };\n  });\n\n/**\n * Reconcile-only implementation of the mutator. Exposed to the hydration\n * layer; never called directly by the rest of the server.\n */\nconst makeReconcile = <R>(input: {\n  readonly state: RegistryState;\n  readonly driversById: ReadonlyMap<ProviderDriverKind, AnyProviderDriver<R>>;\n  readonly parentScope: Scope.Scope;\n}): ((configMap: ProviderInstanceConfigMap) => Effect.Effect<void, never, R>) => {\n  const { state, driversById, parentScope } = input;\n  return (configMap: ProviderInstanceConfigMap) =>\n    Effect.gen(function* () {\n      const previousEntries = yield* Ref.get(state.entries);\n      const previousUnavailable = yield* Ref.get(state.unavailable);\n      const nextRaw = Object.entries(configMap);\n      const nextKeys = new Set<ProviderInstanceId>(\n        nextRaw.map(([raw]) => ProviderInstanceId.make(raw)),\n      );\n\n      // 1. Close scopes for instances that disappeared or whose config\n      //    changed. Do this BEFORE creating replacements so ids map 1-to-1\n      //    to live scopes at all times.\n      const removedIds: Array<ProviderInstanceId> = [];\n      const replacedIds = new Set<ProviderInstanceId>();\n      for (const [instanceId, live] of previousEntries) {\n        if (!nextKeys.has(instanceId)) {\n          removedIds.push(instanceId);\n          continue;\n        }\n        const nextEntry = configMap[instanceId];\n        if (nextEntry !== undefined && !entryEqual(live.entry, nextEntry)) {\n          replacedIds.add(instanceId);\n        }\n      }\n      for (const id of [...removedIds, ...replacedIds]) {\n        const live = previousEntries.get(id);\n        if (live) {\n          yield* Scope.close(live.scope, Exit.void).pipe(Effect.ignore);\n        }\n      }\n\n      // 2. Build additions and replacements. Walk `nextRaw` so the final\n      //    entry order follows settings-author order.\n      const builtEntries = new Map<ProviderInstanceId, LiveEntry>();\n      const builtUnavailable = new Map<ProviderInstanceId, ServerProvider>();\n      let orderChanged = false;\n      const previousOrder = [...previousEntries.keys()];\n      const nextOrder: Array<ProviderInstanceId> = [];\n\n      for (const [rawInstanceId, entry] of nextRaw) {\n        const instanceId = ProviderInstanceId.make(rawInstanceId);\n        nextOrder.push(instanceId);\n\n        const existing = previousEntries.get(instanceId);\n        if (existing !== undefined && !replacedIds.has(instanceId)) {\n          // No-op update: keep the existing live entry and scope.\n          builtEntries.set(instanceId, existing);\n          continue;\n        }\n\n        const result = yield* buildEntry({\n          driversById,\n          parentScope,\n          instanceId,\n          rawInstanceId,\n          entry,\n        });\n        if (result.kind === \"live\") {\n          builtEntries.set(instanceId, result.live);\n        } else {\n          builtUnavailable.set(instanceId, result.snapshot);\n        }\n      }\n\n      if (previousOrder.length === nextOrder.length) {\n        for (let i = 0; i < previousOrder.length; i++) {\n          if (previousOrder[i] !== nextOrder[i]) {\n            orderChanged = true;\n            break;\n          }\n        }\n      } else {\n        orderChanged = true;\n      }\n\n      const entriesChanged =\n        orderChanged ||\n        removedIds.length > 0 ||\n        replacedIds.size > 0 ||\n        builtEntries.size !== previousEntries.size;\n      const unavailableChanged =\n        builtUnavailable.size !== previousUnavailable.size ||\n        [...builtUnavailable].some(([id, snapshot]) => {\n          const prev = previousUnavailable.get(id);\n          return prev === undefined || !Equal.equals(prev, snapshot);\n        }) ||\n        [...previousUnavailable].some(([id]) => !builtUnavailable.has(id));\n\n      yield* Ref.set(state.entries, builtEntries);\n      yield* Ref.set(state.unavailable, builtUnavailable);\n\n      if (entriesChanged || unavailableChanged) {\n        yield* PubSub.publish(state.changes, undefined);\n      }\n    });\n};\n\n/**\n * Build the registry's runtime state from a concrete configMap. Returns a\n * record containing:\n *\n *   - `registry`: the read-only `ProviderInstanceRegistryShape` to expose\n *     under `ProviderInstanceRegistry`.\n *   - `mutator`: the `ProviderInstanceRegistryMutatorShape` to expose\n *     under `ProviderInstanceRegistryMutator`.\n *   - `reconcile`: the raw reconcile function, provided for convenience so\n *     boot-time layers can hydrate an initial map before publishing the\n *     services.\n *\n * The scope that this effect runs in owns every per-instance child scope\n * created during `reconcile`. Closing that scope closes every live\n * instance.\n */\nexport const makeProviderInstanceRegistry = <R>(input: {\n  readonly drivers: ReadonlyArray<AnyProviderDriver<R>>;\n  readonly configMap: ProviderInstanceConfigMap;\n}): Effect.Effect<\n  {\n    readonly registry: ProviderInstanceRegistryShape;\n    readonly mutator: ProviderInstanceRegistryMutatorShape;\n  },\n  never,\n  R | Scope.Scope\n> =>\n  Effect.gen(function* () {\n    const driversById = new Map<ProviderDriverKind, AnyProviderDriver<R>>(\n      input.drivers.map((driver) => [driver.driverKind, driver]),\n    );\n\n    // Capture the enclosing scope so per-instance child scopes can be\n    // attached to it at `reconcile` time. Without this, `reconcile`\n    // called later (e.g. from the hydration layer) would attach child\n    // scopes to the *caller's* scope instead of the registry's.\n    const parentScope = yield* Scope.Scope;\n\n    // Capture the driver R context at construction time so `reconcile`\n    // can be invoked later without re-providing driver dependencies.\n    // The service tag's declared `reconcile: Effect<void>` hides R from\n    // consumers — we materialize that here.\n    const driverContext = yield* Effect.context<R>();\n\n    const entries = yield* Ref.make<ReadonlyMap<ProviderInstanceId, LiveEntry>>(new Map());\n    const unavailable = yield* Ref.make<ReadonlyMap<ProviderInstanceId, ServerProvider>>(new Map());\n    const changes = yield* PubSub.unbounded<void>();\n    yield* Effect.addFinalizer(() => PubSub.shutdown(changes));\n\n    const state: RegistryState = { entries, unavailable, changes };\n    const reconcileWithR = makeReconcile({ state, driversById, parentScope });\n    const reconcile: ProviderInstanceRegistryMutatorShape[\"reconcile\"] = (configMap) =>\n      reconcileWithR(configMap).pipe(Effect.provideContext(driverContext));\n\n    // Hydrate the initial configMap synchronously so callers can read\n    // `listInstances` immediately after this effect completes.\n    yield* reconcile(input.configMap);\n\n    const registry: ProviderInstanceRegistryShape = {\n      getInstance: (id) => Ref.get(entries).pipe(Effect.map((map) => map.get(id)?.instance)),\n      listInstances: Ref.get(entries).pipe(\n        Effect.map(\n          (map) =>\n            Array.from(map.values(), (live) => live.instance) as ReadonlyArray<ProviderInstance>,\n        ),\n      ),\n      listUnavailable: Ref.get(unavailable).pipe(\n        Effect.map((map) => Array.from(map.values()) as ReadonlyArray<ServerProvider>),\n      ),\n      // Getters: each read constructs a fresh Stream / Effect descriptor\n      // so multiple consumers don't share a single already-started\n      // Channel or subscription. Matches the pattern `ProviderRegistry`\n      // uses for its own `streamChanges`.\n      get streamChanges() {\n        return Stream.fromPubSub(changes);\n      },\n      // Synchronous subscribe — callers that need to consume changes\n      // from a forked fibre must acquire the subscription in their own\n      // fibre first (via `yield* registry.subscribeChanges`) and only\n      // then fork a consumer loop on `Stream.fromSubscription(...)` /\n      // `PubSub.take(...)`. See the shape docs for the race this avoids.\n      get subscribeChanges() {\n        return PubSub.subscribe(changes);\n      },\n    };\n\n    const mutator: ProviderInstanceRegistryMutatorShape = { reconcile };\n\n    return { registry, mutator };\n  });\n\n/**\n * Assemble a `ProviderInstanceRegistry` Layer bound to a fixed set of\n * drivers and a pre-resolved `ProviderInstanceConfigMap`. Used by tests\n * that want explicit control over the registry's source-of-truth without\n * wiring up the settings watcher.\n *\n * Only exposes the public registry tag — hot-reload consumers should use\n * `ProviderInstanceRegistryMutableLayer` (below) or the hydration layer.\n */\nexport const ProviderInstanceRegistryLayer = <R>(input: {\n  readonly drivers: ReadonlyArray<AnyProviderDriver<R>>;\n  readonly configMap: ProviderInstanceConfigMap;\n}): Layer.Layer<ProviderInstanceRegistry, never, R> =>\n  Layer.effect(\n    ProviderInstanceRegistry,\n    makeProviderInstanceRegistry(input).pipe(Effect.map((built) => built.registry)),\n  ) as Layer.Layer<ProviderInstanceRegistry, never, R>;\n\n/**\n * Layer variant that also exposes the mutator tag. Consumed by\n * `ProviderInstanceRegistryHydrationLive` to reconcile on settings\n * changes. Tests that exercise the mutator directly can pair this Layer\n * with a test-local `ServerSettingsService`.\n */\nexport const ProviderInstanceRegistryMutableLayer = <R>(input: {\n  readonly drivers: ReadonlyArray<AnyProviderDriver<R>>;\n  readonly configMap: ProviderInstanceConfigMap;\n}): Layer.Layer<ProviderInstanceRegistry | ProviderInstanceRegistryMutator, never, R> =>\n  Layer.effectContext(\n    makeProviderInstanceRegistry(input).pipe(\n      Effect.map(({ registry, mutator }) =>\n        Context.make(ProviderInstanceRegistry, registry).pipe(\n          Context.add(ProviderInstanceRegistryMutator, mutator),\n        ),\n      ),\n    ),\n  ) as Layer.Layer<ProviderInstanceRegistry | ProviderInstanceRegistryMutator, never, R>;\n\nexport { defaultInstanceIdForDriver };\n","/**\n * ProviderInstanceRegistryHydration — derive a `ProviderInstanceConfigMap`\n * from `ServerSettings` and keep `ProviderInstanceRegistry` in sync with it.\n *\n * The server still reads two shapes:\n *\n *   1. `settings.providerInstances` — the new driver-agnostic map the\n *      registry expects. Keyed by `ProviderInstanceId`, values are\n *      `ProviderInstanceConfig` envelopes.\n *   2. `settings.providers.<kind>` — the legacy single-instance-per-driver\n *      fields (`providers.codex`, `providers.claudeAgent`, …). These are\n *      the source of truth for every deployment that hasn't been migrated\n *      yet to an explicit `providerInstances` entry.\n *\n * This module bridges (2) into (1) and wires the resulting map into a\n * mutable registry. For every built-in driver whose id is not already\n * present in `providerInstances` (keyed on\n * `defaultInstanceIdForDriver(driverKind)` — literally the driver kind as a\n * routing slug), we synthesize an envelope from the legacy field. The\n * registry decodes both flavours through the same `configSchema` and ends\n * up with one uniform `ProviderInstance` per entry.\n *\n * Explicit `providerInstances` entries always win — users can already\n * override the legacy `providers.<kind>` blob by authoring a\n * `providerInstances.codex` entry with a matching driver, and we don't\n * want the synthesized envelope to silently stomp their config.\n *\n * Hot-reload\n * ----------\n * On layer build we:\n *   1. Read the current `ServerSettings` once and use it to seed the\n *      registry's initial state via `ProviderInstanceRegistryMutableLayer`.\n *   2. Fork a daemon fiber (lifetime tied to the layer's scope) that\n *      subscribes to `ServerSettingsService.streamChanges` and calls\n *      `ProviderInstanceRegistryMutator.reconcile` on every emission.\n *\n * Failures inside the watcher are logged and swallowed so a single bad\n * settings emission cannot kill the registry. Unknown drivers and invalid\n * configs already round-trip through the registry's own \"unavailable\"\n * shadow bucket.\n *\n * @module provider/Layers/ProviderInstanceRegistryHydration\n */\nimport {\n  defaultInstanceIdForDriver,\n  type ProviderInstanceConfig,\n  type ProviderInstanceConfigMap,\n  ServerSettings,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Stream from \"effect/Stream\";\n\nimport { ServerSettingsService } from \"../../serverSettings.ts\";\nimport { BUILT_IN_DRIVERS, type BuiltInDriversEnv } from \"../builtInDrivers.ts\";\nimport { ProviderInstanceRegistry } from \"../Services/ProviderInstanceRegistry.ts\";\nimport { ProviderInstanceRegistryMutator } from \"../Services/ProviderInstanceRegistryMutator.ts\";\nimport { ProviderInstanceRegistryMutableLayer } from \"./ProviderInstanceRegistryLive.ts\";\n\n/**\n * Synthesize a `ProviderInstanceConfigMap` from a `ServerSettings` snapshot.\n *\n * Strategy:\n *   1. Copy all explicit `settings.providerInstances` entries verbatim.\n *   2. For each built-in driver whose `defaultInstanceIdForDriver(id)` key\n *      is *not* already in the explicit map, synthesize an entry from the\n *      matching legacy `settings.providers.<kind>` blob.\n *\n * The returned map is the input the registry consumes; pure & exported\n * separately so the hydration logic can be exercised by unit tests\n * without layering.\n */\nexport const deriveProviderInstanceConfigMap = (\n  settings: ServerSettings,\n): ProviderInstanceConfigMap => {\n  const merged: Record<string, ProviderInstanceConfig> = { ...settings.providerInstances };\n\n  for (const driver of BUILT_IN_DRIVERS) {\n    const instanceId = defaultInstanceIdForDriver(driver.driverKind);\n    if (instanceId in merged) {\n      // Explicit `providerInstances` entry for this slot — user-authored\n      // config always wins over the legacy mirror.\n      continue;\n    }\n\n    // Only built-in drivers have a legacy mirror; the registry's\n    // `providers` struct is keyed on the same literal slug as\n    // `driverKind`. Access is dynamic (the driver kind is a branded string),\n    // but it's constrained to `keyof settings.providers` by the union of\n    // built-in driver kinds.\n    const legacyKey = driver.driverKind as keyof ServerSettings[\"providers\"];\n    const legacyConfig = settings.providers[legacyKey];\n    if (legacyConfig === undefined) {\n      continue;\n    }\n\n    merged[instanceId] = {\n      driver: driver.driverKind,\n      config: legacyConfig,\n    };\n  }\n\n  return merged as ProviderInstanceConfigMap;\n};\n\n/**\n * Layer that consumes `ProviderInstanceRegistryMutator` and forks a\n * settings-watcher fiber. The fiber's lifetime is tied to the enclosing\n * layer scope (process lifetime in production), so it is interrupted on\n * shutdown without leaking.\n *\n * Errors inside the watcher are logged and swallowed — the registry's own\n * \"unavailable\" bucket already absorbs unknown drivers and invalid\n * configs, so the only way the watcher could fail is a settings stream\n * tear-down, which logs and exits cleanly.\n */\nconst SettingsWatcherLive: Layer.Layer<\n  never,\n  never,\n  ProviderInstanceRegistryMutator | ServerSettingsService\n> = Layer.effectDiscard(\n  Effect.gen(function* () {\n    const mutator = yield* ProviderInstanceRegistryMutator;\n    const serverSettings = yield* ServerSettingsService;\n    yield* serverSettings.streamChanges.pipe(\n      Stream.runForEach((next) =>\n        mutator\n          .reconcile(deriveProviderInstanceConfigMap(next))\n          .pipe(\n            Effect.catchCause((cause) =>\n              Effect.logError(\"ProviderInstanceRegistry reconcile failed\", cause),\n            ),\n          ),\n      ),\n      Effect.forkScoped,\n    );\n  }),\n);\n\n/**\n * Hydrate `ProviderInstanceRegistry` from `ServerSettings` and keep it in\n * sync with subsequent `streamChanges` emissions.\n *\n * The Layer's two halves:\n *   - `ProviderInstanceRegistryMutableLayer` produces the registry +\n *     mutator from the initial config map. Its scope owns every\n *     per-instance child scope created during reconcile.\n *   - `SettingsWatcherLive` consumes the mutator and runs a daemon fiber\n *     in the same scope.\n *\n * Composing via `Layer.provideMerge` makes the watcher's deps available\n * from the mutable layer while still surfacing the registry as an output.\n * The mutator tag is technically also exposed; only this module imports\n * it, so the visibility leak is harmless in practice.\n */\nexport const ProviderInstanceRegistryHydrationLive: Layer.Layer<\n  ProviderInstanceRegistry,\n  never,\n  BuiltInDriversEnv | ServerSettingsService\n> = Layer.unwrap(\n  Effect.gen(function* () {\n    const serverSettings = yield* ServerSettingsService;\n    const initialSettings: ServerSettings | undefined = yield* serverSettings.getSettings.pipe(\n      Effect.orElseSucceed(() => undefined),\n    );\n    const initialConfigMap =\n      initialSettings === undefined\n        ? ({} as ProviderInstanceConfigMap)\n        : deriveProviderInstanceConfigMap(initialSettings);\n\n    const mutableLayer = ProviderInstanceRegistryMutableLayer({\n      drivers: BUILT_IN_DRIVERS,\n      configMap: initialConfigMap,\n    });\n\n    return SettingsWatcherLive.pipe(Layer.provideMerge(mutableLayer));\n  }),\n) as Layer.Layer<ProviderInstanceRegistry, never, BuiltInDriversEnv | ServerSettingsService>;\n","/**\n * PtyAdapter - Terminal PTY adapter service contract.\n *\n * Defines the process primitives required by terminal session management\n * without binding to a specific PTY implementation.\n *\n * @module PtyAdapter\n */\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\n\n/**\n * PtyError - Error type for PTY adapter operations.\n */\nexport class PtySpawnError extends Schema.TaggedErrorClass<PtySpawnError>()(\"PtySpawnError\", {\n  adapter: Schema.String,\n  message: Schema.String,\n  cause: Schema.optional(Schema.Defect()),\n}) {}\n\nexport interface PtyExitEvent {\n  exitCode: number;\n  signal: number | null;\n}\n\nexport interface PtyProcess {\n  readonly pid: number;\n  write(data: string): void;\n  resize(cols: number, rows: number): void;\n  kill(signal?: string): void;\n  onData(callback: (data: string) => void): () => void;\n  onExit(callback: (event: PtyExitEvent) => void): () => void;\n}\n\nexport interface PtySpawnInput {\n  shell: string;\n  args?: string[];\n  cwd: string;\n  cols: number;\n  rows: number;\n  env: NodeJS.ProcessEnv;\n}\n\n/**\n * PtyAdapterShape - Service API for spawning and controlling PTY processes.\n */\nexport interface PtyAdapterShape {\n  /**\n   * Spawn a PTY process for a terminal session.\n   */\n  spawn(input: PtySpawnInput): Effect.Effect<PtyProcess, PtySpawnError>;\n}\n\n/**\n * PtyAdapter - Service tag for PTY process integration.\n */\nexport class PtyAdapter extends Context.Service<PtyAdapter, PtyAdapterShape>()(\n  \"salchi/terminal/Services/PTY/PtyAdapter\",\n) {}\n","import {\n  DEFAULT_TERMINAL_ID,\n  type TerminalEvent,\n  type TerminalSessionSnapshot,\n  type TerminalSessionStatus,\n} from \"@salchi/contracts\";\nimport { makeKeyedCoalescingWorker } from \"@salchi/shared/KeyedCoalescingWorker\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Encoding from \"effect/Encoding\";\nimport * as Equal from \"effect/Equal\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport {\n  increment,\n  terminalRestartsTotal,\n  terminalSessionsTotal,\n} from \"../../observability/Metrics.ts\";\nimport * as ProcessRunner from \"../../processRunner.ts\";\nimport {\n  TerminalCwdError,\n  TerminalHistoryError,\n  TerminalManager,\n  TerminalNotRunningError,\n  TerminalSessionLookupError,\n  type TerminalManagerShape,\n} from \"../Services/Manager.ts\";\nimport {\n  PtyAdapter,\n  PtySpawnError,\n  type PtyAdapterShape,\n  type PtyExitEvent,\n  type PtyProcess,\n} from \"../Services/PTY.ts\";\n\nconst DEFAULT_HISTORY_LINE_LIMIT = 5_000;\nconst DEFAULT_PERSIST_DEBOUNCE_MS = 40;\nconst DEFAULT_SUBPROCESS_POLL_INTERVAL_MS = 1_000;\nconst DEFAULT_PROCESS_KILL_GRACE_MS = 1_000;\nconst DEFAULT_MAX_RETAINED_INACTIVE_SESSIONS = 128;\nconst DEFAULT_OPEN_COLS = 120;\nconst DEFAULT_OPEN_ROWS = 30;\nconst TERMINAL_ENV_BLOCKLIST = new Set([\"PORT\", \"ELECTRON_RENDERER_PORT\", \"ELECTRON_RUN_AS_NODE\"]);\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\nclass TerminalSubprocessCheckError extends Schema.TaggedErrorClass<TerminalSubprocessCheckError>()(\n  \"TerminalSubprocessCheckError\",\n  {\n    message: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n    terminalPid: Schema.Number,\n    command: Schema.Literals([\"powershell\", \"pgrep\", \"ps\"]),\n  },\n) {}\n\nclass TerminalProcessSignalError extends Schema.TaggedErrorClass<TerminalProcessSignalError>()(\n  \"TerminalProcessSignalError\",\n  {\n    message: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n    signal: Schema.Literals([\"SIGTERM\", \"SIGKILL\"]),\n  },\n) {}\n\ninterface TerminalSubprocessChecker {\n  (\n    terminalPid: number,\n  ): Effect.Effect<boolean, TerminalSubprocessCheckError, ProcessRunner.ProcessRunner>;\n}\n\ninterface ShellCandidate {\n  shell: string;\n  args?: string[];\n}\n\ninterface TerminalStartInput {\n  threadId: string;\n  terminalId: string;\n  cwd: string;\n  worktreePath?: string | null;\n  cols: number;\n  rows: number;\n  env?: Record<string, string>;\n}\n\ninterface TerminalSessionState {\n  threadId: string;\n  terminalId: string;\n  cwd: string;\n  worktreePath: string | null;\n  status: TerminalSessionStatus;\n  pid: number | null;\n  history: string;\n  pendingHistoryControlSequence: string;\n  pendingProcessEvents: Array<PendingProcessEvent>;\n  pendingProcessEventIndex: number;\n  processEventDrainRunning: boolean;\n  exitCode: number | null;\n  exitSignal: number | null;\n  updatedAt: string;\n  cols: number;\n  rows: number;\n  process: PtyProcess | null;\n  unsubscribeData: (() => void) | null;\n  unsubscribeExit: (() => void) | null;\n  hasRunningSubprocess: boolean;\n  runtimeEnv: Record<string, string> | null;\n}\n\ninterface PersistHistoryRequest {\n  history: string;\n  immediate: boolean;\n}\n\ntype PendingProcessEvent = { type: \"output\"; data: string } | { type: \"exit\"; event: PtyExitEvent };\n\ntype DrainProcessEventAction =\n  | { type: \"idle\" }\n  | {\n      type: \"output\";\n      threadId: string;\n      terminalId: string;\n      history: string | null;\n      data: string;\n    }\n  | {\n      type: \"exit\";\n      process: PtyProcess | null;\n      threadId: string;\n      terminalId: string;\n      exitCode: number | null;\n      exitSignal: number | null;\n    };\n\ninterface TerminalManagerState {\n  sessions: Map<string, TerminalSessionState>;\n  killFibers: Map<PtyProcess, Fiber.Fiber<void, never>>;\n}\n\nfunction snapshot(session: TerminalSessionState): TerminalSessionSnapshot {\n  return {\n    threadId: session.threadId,\n    terminalId: session.terminalId,\n    cwd: session.cwd,\n    worktreePath: session.worktreePath,\n    status: session.status,\n    pid: session.pid,\n    history: session.history,\n    exitCode: session.exitCode,\n    exitSignal: session.exitSignal,\n    updatedAt: session.updatedAt,\n  };\n}\n\nfunction cleanupProcessHandles(session: TerminalSessionState): void {\n  session.unsubscribeData?.();\n  session.unsubscribeData = null;\n  session.unsubscribeExit?.();\n  session.unsubscribeExit = null;\n}\n\nfunction enqueueProcessEvent(\n  session: TerminalSessionState,\n  expectedPid: number,\n  event: PendingProcessEvent,\n): boolean {\n  if (!session.process || session.status !== \"running\" || session.pid !== expectedPid) {\n    return false;\n  }\n\n  session.pendingProcessEvents.push(event);\n  if (session.processEventDrainRunning) {\n    return false;\n  }\n\n  session.processEventDrainRunning = true;\n  return true;\n}\n\nfunction defaultShellResolver(\n  platform: NodeJS.Platform = process.platform,\n  env: NodeJS.ProcessEnv = process.env,\n): string {\n  if (platform === \"win32\") {\n    return \"pwsh.exe\";\n  }\n  return env.SHELL ?? \"bash\";\n}\n\nfunction normalizeShellCommand(\n  value: string | undefined,\n  platform: NodeJS.Platform = process.platform,\n): string | null {\n  if (!value) return null;\n  const trimmed = value.trim();\n  if (trimmed.length === 0) return null;\n\n  if (platform === \"win32\") {\n    return trimmed;\n  }\n\n  const firstToken = trimmed.split(/\\s+/g)[0]?.trim();\n  if (!firstToken) return null;\n  return firstToken.replace(/^['\"]|['\"]$/g, \"\");\n}\n\nfunction basenameForPlatform(command: string, platform: NodeJS.Platform): string {\n  const normalized =\n    platform === \"win32\" ? command.replaceAll(\"/\", \"\\\\\") : command.replaceAll(\"\\\\\", \"/\");\n  const parts = normalized\n    .split(platform === \"win32\" ? /\\\\+/ : /\\/+/)\n    .filter((part) => part.length > 0);\n  return parts.at(-1) ?? normalized;\n}\n\nfunction joinWindowsPath(...parts: ReadonlyArray<string>): string {\n  return parts\n    .map((part, index) => {\n      if (index === 0) return part.replace(/[\\\\/]+$/g, \"\");\n      return part.replace(/^[\\\\/]+|[\\\\/]+$/g, \"\");\n    })\n    .filter((part) => part.length > 0)\n    .join(\"\\\\\");\n}\n\nfunction shellCandidateFromCommand(\n  command: string | null,\n  platform: NodeJS.Platform = process.platform,\n): ShellCandidate | null {\n  if (!command || command.length === 0) return null;\n  const shellName = basenameForPlatform(command, platform).toLowerCase();\n  if (platform === \"win32\" && (shellName === \"pwsh.exe\" || shellName === \"powershell.exe\")) {\n    return { shell: command, args: [\"-NoLogo\"] };\n  }\n  if (platform !== \"win32\" && shellName === \"zsh\") {\n    return { shell: command, args: [\"-o\", \"nopromptsp\"] };\n  }\n  return { shell: command };\n}\n\nfunction windowsSystemRoot(env: NodeJS.ProcessEnv): string {\n  return env.SystemRoot?.trim() || env.windir?.trim() || \"C:\\\\Windows\";\n}\n\nfunction windowsPowerShellPath(env: NodeJS.ProcessEnv): string {\n  return joinWindowsPath(\n    windowsSystemRoot(env),\n    \"System32\",\n    \"WindowsPowerShell\",\n    \"v1.0\",\n    \"powershell.exe\",\n  );\n}\n\nfunction windowsCmdPath(env: NodeJS.ProcessEnv): string {\n  return joinWindowsPath(windowsSystemRoot(env), \"System32\", \"cmd.exe\");\n}\n\nfunction formatShellCandidate(candidate: ShellCandidate): string {\n  if (!candidate.args || candidate.args.length === 0) return candidate.shell;\n  return `${candidate.shell} ${candidate.args.join(\" \")}`;\n}\n\nfunction uniqueShellCandidates(candidates: Array<ShellCandidate | null>): ShellCandidate[] {\n  const seen = new Set<string>();\n  const ordered: ShellCandidate[] = [];\n  for (const candidate of candidates) {\n    if (!candidate) continue;\n    const key = formatShellCandidate(candidate);\n    if (seen.has(key)) continue;\n    seen.add(key);\n    ordered.push(candidate);\n  }\n  return ordered;\n}\n\nfunction resolveShellCandidates(\n  shellResolver: () => string,\n  platform: NodeJS.Platform = process.platform,\n  env: NodeJS.ProcessEnv = process.env,\n): ShellCandidate[] {\n  const requested = shellCandidateFromCommand(\n    normalizeShellCommand(shellResolver(), platform),\n    platform,\n  );\n\n  if (platform === \"win32\") {\n    return uniqueShellCandidates([\n      requested,\n      shellCandidateFromCommand(\"pwsh.exe\", platform),\n      shellCandidateFromCommand(windowsPowerShellPath(env), platform),\n      shellCandidateFromCommand(\"powershell.exe\", platform),\n      shellCandidateFromCommand(env.ComSpec ?? null, platform),\n      shellCandidateFromCommand(windowsCmdPath(env), platform),\n      shellCandidateFromCommand(\"cmd.exe\", platform),\n    ]);\n  }\n\n  return uniqueShellCandidates([\n    requested,\n    shellCandidateFromCommand(normalizeShellCommand(env.SHELL, platform), platform),\n    shellCandidateFromCommand(\"/bin/zsh\", platform),\n    shellCandidateFromCommand(\"/bin/bash\", platform),\n    shellCandidateFromCommand(\"/bin/sh\", platform),\n    shellCandidateFromCommand(\"zsh\", platform),\n    shellCandidateFromCommand(\"bash\", platform),\n    shellCandidateFromCommand(\"sh\", platform),\n  ]);\n}\n\nfunction isRetryableShellSpawnError(error: PtySpawnError): boolean {\n  const queue: unknown[] = [error];\n  const seen = new Set<unknown>();\n  const messages: string[] = [];\n\n  while (queue.length > 0) {\n    const current = queue.shift();\n    if (!current || seen.has(current)) {\n      continue;\n    }\n    seen.add(current);\n\n    if (typeof current === \"string\") {\n      messages.push(current);\n      continue;\n    }\n\n    if (current instanceof Error) {\n      messages.push(current.message);\n      if (current.cause) {\n        queue.push(current.cause);\n      }\n      continue;\n    }\n\n    if (typeof current === \"object\") {\n      const value = current as { message?: unknown; cause?: unknown };\n      if (typeof value.message === \"string\") {\n        messages.push(value.message);\n      }\n      if (value.cause) {\n        queue.push(value.cause);\n      }\n    }\n  }\n\n  const message = messages.join(\" \").toLowerCase();\n  return (\n    message.includes(\"posix_spawnp failed\") ||\n    message.includes(\"enoent\") ||\n    message.includes(\"not found\") ||\n    message.includes(\"file not found\") ||\n    message.includes(\"no such file\")\n  );\n}\n\nfunction checkWindowsSubprocessActivity(\n  terminalPid: number,\n): Effect.Effect<boolean, TerminalSubprocessCheckError, ProcessRunner.ProcessRunner> {\n  const command = [\n    `$children = Get-CimInstance Win32_Process -Filter \"ParentProcessId = ${terminalPid}\" -ErrorAction SilentlyContinue`,\n    \"if ($children) { exit 0 }\",\n    \"exit 1\",\n  ].join(\"; \");\n  return Effect.gen(function* () {\n    const processRunner = yield* ProcessRunner.ProcessRunner;\n    return yield* processRunner.run({\n      command: \"powershell.exe\",\n      args: [\"-NoProfile\", \"-NonInteractive\", \"-Command\", command],\n      timeout: \"1500 millis\",\n      maxOutputBytes: 32_768,\n      outputMode: \"truncate\",\n      timeoutBehavior: \"timedOutResult\",\n    });\n  }).pipe(\n    Effect.map((result) => result.code === 0),\n    Effect.mapError(\n      (cause) =>\n        new TerminalSubprocessCheckError({\n          message: \"Failed to check Windows terminal subprocess activity.\",\n          cause,\n          terminalPid,\n          command: \"powershell\",\n        }),\n    ),\n  );\n}\n\nconst checkPosixSubprocessActivity = Effect.fn(\"terminal.checkPosixSubprocessActivity\")(function* (\n  terminalPid: number,\n): Effect.fn.Return<boolean, TerminalSubprocessCheckError, ProcessRunner.ProcessRunner> {\n  const processRunner = yield* ProcessRunner.ProcessRunner;\n  const runPgrep = processRunner\n    .run({\n      command: \"pgrep\",\n      args: [\"-P\", String(terminalPid)],\n      timeout: \"1 second\",\n      maxOutputBytes: 32_768,\n      outputMode: \"truncate\",\n      timeoutBehavior: \"timedOutResult\",\n    })\n    .pipe(\n      Effect.mapError(\n        (cause) =>\n          new TerminalSubprocessCheckError({\n            message: \"Failed to inspect terminal subprocesses with pgrep.\",\n            cause,\n            terminalPid,\n            command: \"pgrep\",\n          }),\n      ),\n    );\n\n  const runPs = processRunner\n    .run({\n      command: \"ps\",\n      args: [\"-eo\", \"pid=,ppid=\"],\n      timeout: \"1 second\",\n      maxOutputBytes: 262_144,\n      outputMode: \"truncate\",\n      timeoutBehavior: \"timedOutResult\",\n    })\n    .pipe(\n      Effect.mapError(\n        (cause) =>\n          new TerminalSubprocessCheckError({\n            message: \"Failed to inspect terminal subprocesses with ps.\",\n            cause,\n            terminalPid,\n            command: \"ps\",\n          }),\n      ),\n    );\n\n  const pgrepResult = yield* Effect.exit(runPgrep);\n  if (pgrepResult._tag === \"Success\") {\n    if (pgrepResult.value.code === 0) {\n      return pgrepResult.value.stdout.trim().length > 0;\n    }\n    if (pgrepResult.value.code === 1) {\n      return false;\n    }\n  }\n\n  const psResult = yield* Effect.exit(runPs);\n  if (psResult._tag === \"Failure\" || psResult.value.code !== 0) {\n    return false;\n  }\n\n  for (const line of psResult.value.stdout.split(/\\r?\\n/g)) {\n    const [pidRaw, ppidRaw] = line.trim().split(/\\s+/g);\n    const pid = Number(pidRaw);\n    const ppid = Number(ppidRaw);\n    if (!Number.isInteger(pid) || !Number.isInteger(ppid)) continue;\n    if (ppid === terminalPid) {\n      return true;\n    }\n  }\n  return false;\n});\n\nconst defaultSubprocessChecker = Effect.fn(\"terminal.defaultSubprocessChecker\")(function* (\n  terminalPid: number,\n): Effect.fn.Return<boolean, TerminalSubprocessCheckError, ProcessRunner.ProcessRunner> {\n  if (!Number.isInteger(terminalPid) || terminalPid <= 0) {\n    return false;\n  }\n  if (process.platform === \"win32\") {\n    return yield* checkWindowsSubprocessActivity(terminalPid);\n  }\n  return yield* checkPosixSubprocessActivity(terminalPid);\n});\n\nfunction capHistory(history: string, maxLines: number): string {\n  if (history.length === 0) return history;\n  const hasTrailingNewline = history.endsWith(\"\\n\");\n  const lines = history.split(\"\\n\");\n  if (hasTrailingNewline) {\n    lines.pop();\n  }\n  if (lines.length <= maxLines) return history;\n  const capped = lines.slice(lines.length - maxLines).join(\"\\n\");\n  return hasTrailingNewline ? `${capped}\\n` : capped;\n}\n\nfunction isCsiFinalByte(codePoint: number): boolean {\n  return codePoint >= 0x40 && codePoint <= 0x7e;\n}\n\nfunction shouldStripCsiSequence(body: string, finalByte: string): boolean {\n  if (finalByte === \"n\") {\n    return true;\n  }\n  if (finalByte === \"R\" && /^[0-9;?]*$/.test(body)) {\n    return true;\n  }\n  if (finalByte === \"c\" && /^[>0-9;?]*$/.test(body)) {\n    return true;\n  }\n  if ((finalByte === \"p\" || finalByte === \"y\") && /^[0-9;?]*\\$$/.test(body)) {\n    return true;\n  }\n  if (finalByte === \"q\" && /^>[0-9;]*$/.test(body)) {\n    return true;\n  }\n  if (finalByte === \"u\" && body.startsWith(\"?\")) {\n    return true;\n  }\n  return false;\n}\n\n// DECRQSS and XTGETTCAP requests/replies are pure terminal protocol traffic.\nfunction shouldStripDcsSequence(content: string): boolean {\n  return /^[01]?[$+][qr]/.test(content);\n}\n\nfunction shouldStripOscSequence(content: string): boolean {\n  return /^(10|11|12);(?:\\?|rgb:)/.test(content);\n}\n\nfunction stripStringTerminator(value: string): string {\n  if (value.endsWith(\"\\u001b\\\\\")) {\n    return value.slice(0, -2);\n  }\n  const lastCharacter = value.at(-1);\n  if (lastCharacter === \"\\u0007\" || lastCharacter === \"\\u009c\") {\n    return value.slice(0, -1);\n  }\n  return value;\n}\n\nfunction findStringTerminatorIndex(input: string, start: number): number | null {\n  for (let index = start; index < input.length; index += 1) {\n    const codePoint = input.charCodeAt(index);\n    if (codePoint === 0x07 || codePoint === 0x9c) {\n      return index + 1;\n    }\n    if (codePoint === 0x1b && input.charCodeAt(index + 1) === 0x5c) {\n      return index + 2;\n    }\n  }\n  return null;\n}\n\nfunction isEscapeIntermediateByte(codePoint: number): boolean {\n  return codePoint >= 0x20 && codePoint <= 0x2f;\n}\n\nfunction isEscapeFinalByte(codePoint: number): boolean {\n  return codePoint >= 0x30 && codePoint <= 0x7e;\n}\n\nfunction findEscapeSequenceEndIndex(input: string, start: number): number | null {\n  let cursor = start;\n  while (cursor < input.length && isEscapeIntermediateByte(input.charCodeAt(cursor))) {\n    cursor += 1;\n  }\n  if (cursor >= input.length) {\n    return null;\n  }\n  return isEscapeFinalByte(input.charCodeAt(cursor)) ? cursor + 1 : start + 1;\n}\n\nfunction sanitizeTerminalHistoryChunk(\n  pendingControlSequence: string,\n  data: string,\n): { visibleText: string; pendingControlSequence: string } {\n  const input = `${pendingControlSequence}${data}`;\n  let visibleText = \"\";\n  let index = 0;\n\n  const append = (value: string) => {\n    visibleText += value;\n  };\n\n  while (index < input.length) {\n    const codePoint = input.charCodeAt(index);\n\n    if (codePoint === 0x1b) {\n      const nextCodePoint = input.charCodeAt(index + 1);\n      if (Number.isNaN(nextCodePoint)) {\n        return { visibleText, pendingControlSequence: input.slice(index) };\n      }\n\n      if (nextCodePoint === 0x5b) {\n        let cursor = index + 2;\n        while (cursor < input.length) {\n          if (isCsiFinalByte(input.charCodeAt(cursor))) {\n            const sequence = input.slice(index, cursor + 1);\n            const body = input.slice(index + 2, cursor);\n            if (!shouldStripCsiSequence(body, input[cursor] ?? \"\")) {\n              append(sequence);\n            }\n            index = cursor + 1;\n            break;\n          }\n          cursor += 1;\n        }\n        if (cursor >= input.length) {\n          return { visibleText, pendingControlSequence: input.slice(index) };\n        }\n        continue;\n      }\n\n      if (\n        nextCodePoint === 0x5d ||\n        nextCodePoint === 0x50 ||\n        nextCodePoint === 0x5e ||\n        nextCodePoint === 0x5f\n      ) {\n        const terminatorIndex = findStringTerminatorIndex(input, index + 2);\n        if (terminatorIndex === null) {\n          return { visibleText, pendingControlSequence: input.slice(index) };\n        }\n        const sequence = input.slice(index, terminatorIndex);\n        const content = stripStringTerminator(input.slice(index + 2, terminatorIndex));\n        const strip =\n          (nextCodePoint === 0x5d && shouldStripOscSequence(content)) ||\n          (nextCodePoint === 0x50 && shouldStripDcsSequence(content));\n        if (!strip) {\n          append(sequence);\n        }\n        index = terminatorIndex;\n        continue;\n      }\n\n      const escapeSequenceEndIndex = findEscapeSequenceEndIndex(input, index + 1);\n      if (escapeSequenceEndIndex === null) {\n        return { visibleText, pendingControlSequence: input.slice(index) };\n      }\n      append(input.slice(index, escapeSequenceEndIndex));\n      index = escapeSequenceEndIndex;\n      continue;\n    }\n\n    if (codePoint === 0x9b) {\n      let cursor = index + 1;\n      while (cursor < input.length) {\n        if (isCsiFinalByte(input.charCodeAt(cursor))) {\n          const sequence = input.slice(index, cursor + 1);\n          const body = input.slice(index + 1, cursor);\n          if (!shouldStripCsiSequence(body, input[cursor] ?? \"\")) {\n            append(sequence);\n          }\n          index = cursor + 1;\n          break;\n        }\n        cursor += 1;\n      }\n      if (cursor >= input.length) {\n        return { visibleText, pendingControlSequence: input.slice(index) };\n      }\n      continue;\n    }\n\n    if (codePoint === 0x9d || codePoint === 0x90 || codePoint === 0x9e || codePoint === 0x9f) {\n      const terminatorIndex = findStringTerminatorIndex(input, index + 1);\n      if (terminatorIndex === null) {\n        return { visibleText, pendingControlSequence: input.slice(index) };\n      }\n      const sequence = input.slice(index, terminatorIndex);\n      const content = stripStringTerminator(input.slice(index + 1, terminatorIndex));\n      const strip =\n        (codePoint === 0x9d && shouldStripOscSequence(content)) ||\n        (codePoint === 0x90 && shouldStripDcsSequence(content));\n      if (!strip) {\n        append(sequence);\n      }\n      index = terminatorIndex;\n      continue;\n    }\n\n    append(input[index] ?? \"\");\n    index += 1;\n  }\n\n  return { visibleText, pendingControlSequence: \"\" };\n}\n\nfunction legacySafeThreadId(threadId: string): string {\n  return threadId.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n}\n\nfunction toSafeThreadId(threadId: string): string {\n  return `terminal_${Encoding.encodeBase64Url(threadId)}`;\n}\n\nfunction toSafeTerminalId(terminalId: string): string {\n  return Encoding.encodeBase64Url(terminalId);\n}\n\nfunction toSessionKey(threadId: string, terminalId: string): string {\n  return `${threadId}\\u0000${terminalId}`;\n}\n\nfunction shouldExcludeTerminalEnvKey(key: string): boolean {\n  const normalizedKey = key.toUpperCase();\n  if (normalizedKey.startsWith(\"SALCHI_\")) {\n    return true;\n  }\n  if (normalizedKey.startsWith(\"VITE_\")) {\n    return true;\n  }\n  return TERMINAL_ENV_BLOCKLIST.has(normalizedKey);\n}\n\nfunction createTerminalSpawnEnv(\n  baseEnv: NodeJS.ProcessEnv,\n  runtimeEnv?: Record<string, string> | null,\n): NodeJS.ProcessEnv {\n  const spawnEnv: NodeJS.ProcessEnv = {};\n  for (const [key, value] of Object.entries(baseEnv)) {\n    if (value === undefined) continue;\n    if (shouldExcludeTerminalEnvKey(key)) continue;\n    spawnEnv[key] = value;\n  }\n  if (runtimeEnv) {\n    for (const [key, value] of Object.entries(runtimeEnv)) {\n      spawnEnv[key] = value;\n    }\n  }\n  return spawnEnv;\n}\n\nfunction normalizedRuntimeEnv(\n  env: Record<string, string> | undefined,\n): Record<string, string> | null {\n  if (!env) return null;\n  const entries = Object.entries(env);\n  if (entries.length === 0) return null;\n  return Object.fromEntries(entries.toSorted(([left], [right]) => left.localeCompare(right)));\n}\n\ninterface TerminalManagerOptions {\n  logsDir: string;\n  historyLineLimit?: number;\n  ptyAdapter: PtyAdapterShape;\n  shellResolver?: () => string;\n  platform?: NodeJS.Platform;\n  env?: NodeJS.ProcessEnv;\n  subprocessChecker?: TerminalSubprocessChecker;\n  subprocessPollIntervalMs?: number;\n  processKillGraceMs?: number;\n  maxRetainedInactiveSessions?: number;\n}\n\nconst makeTerminalManager = Effect.fn(\"makeTerminalManager\")(function* () {\n  const { terminalLogsDir } = yield* ServerConfig;\n  const ptyAdapter = yield* PtyAdapter;\n  return yield* makeTerminalManagerWithOptions({\n    logsDir: terminalLogsDir,\n    ptyAdapter,\n  });\n});\n\nexport const makeTerminalManagerWithOptions = Effect.fn(\"makeTerminalManagerWithOptions\")(\n  function* (options: TerminalManagerOptions) {\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n    const context = yield* Effect.context<never>();\n    const runFork = Effect.runForkWith(context);\n\n    const logsDir = options.logsDir;\n    const historyLineLimit = options.historyLineLimit ?? DEFAULT_HISTORY_LINE_LIMIT;\n    const platform = options.platform ?? process.platform;\n    const baseEnv = options.env ?? process.env;\n    const shellResolver = options.shellResolver ?? (() => defaultShellResolver(platform, baseEnv));\n    const processRunner = yield* ProcessRunner.ProcessRunner;\n    const subprocessChecker =\n      options.subprocessChecker ??\n      ((terminalPid) =>\n        defaultSubprocessChecker(terminalPid).pipe(\n          Effect.provideService(ProcessRunner.ProcessRunner, processRunner),\n        ));\n    const subprocessPollIntervalMs =\n      options.subprocessPollIntervalMs ?? DEFAULT_SUBPROCESS_POLL_INTERVAL_MS;\n    const processKillGraceMs = options.processKillGraceMs ?? DEFAULT_PROCESS_KILL_GRACE_MS;\n    const maxRetainedInactiveSessions =\n      options.maxRetainedInactiveSessions ?? DEFAULT_MAX_RETAINED_INACTIVE_SESSIONS;\n\n    yield* fileSystem.makeDirectory(logsDir, { recursive: true }).pipe(Effect.orDie);\n\n    const managerStateRef = yield* SynchronizedRef.make<TerminalManagerState>({\n      sessions: new Map(),\n      killFibers: new Map(),\n    });\n    const threadLocksRef = yield* SynchronizedRef.make(new Map<string, Semaphore.Semaphore>());\n    const terminalEventListeners = new Set<(event: TerminalEvent) => Effect.Effect<void>>();\n    const workerScope = yield* Scope.make(\"sequential\");\n    yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void));\n\n    const publishEvent = (event: TerminalEvent) =>\n      Effect.gen(function* () {\n        for (const listener of terminalEventListeners) {\n          yield* listener(event).pipe(Effect.ignoreCause({ log: true }));\n        }\n      });\n\n    const historyPath = (threadId: string, terminalId: string) => {\n      const threadPart = toSafeThreadId(threadId);\n      if (terminalId === DEFAULT_TERMINAL_ID) {\n        return path.join(logsDir, `${threadPart}.log`);\n      }\n      return path.join(logsDir, `${threadPart}_${toSafeTerminalId(terminalId)}.log`);\n    };\n\n    const legacyHistoryPath = (threadId: string) =>\n      path.join(logsDir, `${legacySafeThreadId(threadId)}.log`);\n\n    const toTerminalHistoryError =\n      (operation: \"read\" | \"truncate\" | \"migrate\", threadId: string, terminalId: string) =>\n      (cause: unknown) =>\n        new TerminalHistoryError({\n          operation,\n          threadId,\n          terminalId,\n          cause,\n        });\n\n    const readManagerState = SynchronizedRef.get(managerStateRef);\n\n    const modifyManagerState = <A>(\n      f: (state: TerminalManagerState) => readonly [A, TerminalManagerState],\n    ) => SynchronizedRef.modify(managerStateRef, f);\n\n    const getThreadSemaphore = (threadId: string) =>\n      SynchronizedRef.modifyEffect(threadLocksRef, (current) => {\n        const existing: Option.Option<Semaphore.Semaphore> = Option.fromNullishOr(\n          current.get(threadId),\n        );\n        return Option.match(existing, {\n          onNone: () =>\n            Semaphore.make(1).pipe(\n              Effect.map((semaphore) => {\n                const next = new Map(current);\n                next.set(threadId, semaphore);\n                return [semaphore, next] as const;\n              }),\n            ),\n          onSome: (semaphore) => Effect.succeed([semaphore, current] as const),\n        });\n      });\n\n    const withThreadLock = <A, E, R>(\n      threadId: string,\n      effect: Effect.Effect<A, E, R>,\n    ): Effect.Effect<A, E, R> =>\n      Effect.flatMap(getThreadSemaphore(threadId), (semaphore) => semaphore.withPermit(effect));\n\n    const clearKillFiber = Effect.fn(\"terminal.clearKillFiber\")(function* (\n      process: PtyProcess | null,\n    ) {\n      if (!process) return;\n      const fiber: Option.Option<Fiber.Fiber<void, never>> = yield* modifyManagerState<\n        Option.Option<Fiber.Fiber<void, never>>\n      >((state) => {\n        const existing: Option.Option<Fiber.Fiber<void, never>> = Option.fromNullishOr(\n          state.killFibers.get(process),\n        );\n        if (Option.isNone(existing)) {\n          return [Option.none<Fiber.Fiber<void, never>>(), state] as const;\n        }\n        const killFibers = new Map(state.killFibers);\n        killFibers.delete(process);\n        return [existing, { ...state, killFibers }] as const;\n      });\n      if (Option.isSome(fiber)) {\n        yield* Fiber.interrupt(fiber.value).pipe(Effect.ignore);\n      }\n    });\n\n    const registerKillFiber = Effect.fn(\"terminal.registerKillFiber\")(function* (\n      process: PtyProcess,\n      fiber: Fiber.Fiber<void, never>,\n    ) {\n      yield* modifyManagerState((state) => {\n        const killFibers = new Map(state.killFibers);\n        killFibers.set(process, fiber);\n        return [undefined, { ...state, killFibers }] as const;\n      });\n    });\n\n    const runKillEscalation = Effect.fn(\"terminal.runKillEscalation\")(function* (\n      process: PtyProcess,\n      threadId: string,\n      terminalId: string,\n    ) {\n      const exited = yield* Deferred.make<void>();\n      const unsubscribeExit = process.onExit(() => {\n        Deferred.doneUnsafe(exited, Effect.void);\n      });\n      yield* Effect.gen(function* () {\n        const terminated = yield* Effect.try({\n          try: () => process.kill(\"SIGTERM\"),\n          catch: (cause) =>\n            new TerminalProcessSignalError({\n              message: \"Failed to send SIGTERM to terminal process.\",\n              cause,\n              signal: \"SIGTERM\",\n            }),\n        }).pipe(\n          Effect.as(true),\n          Effect.catch((error) =>\n            Effect.logWarning(\"failed to kill terminal process\", {\n              threadId,\n              terminalId,\n              signal: \"SIGTERM\",\n              error: error.message,\n            }).pipe(Effect.as(false)),\n          ),\n        );\n        if (!terminated) return;\n\n        const exitedBeforeGrace = yield* Effect.raceFirst(\n          Deferred.await(exited).pipe(Effect.as(true)),\n          Effect.sleep(processKillGraceMs).pipe(Effect.as(false)),\n        );\n        if (exitedBeforeGrace) return;\n\n        yield* Effect.try({\n          try: () => process.kill(\"SIGKILL\"),\n          catch: (cause) =>\n            new TerminalProcessSignalError({\n              message: \"Failed to send SIGKILL to terminal process.\",\n              cause,\n              signal: \"SIGKILL\",\n            }),\n        }).pipe(\n          Effect.catch((error) =>\n            Effect.logWarning(\"failed to force-kill terminal process\", {\n              threadId,\n              terminalId,\n              signal: \"SIGKILL\",\n              error: error.message,\n            }),\n          ),\n        );\n      }).pipe(Effect.ensuring(Effect.sync(unsubscribeExit)));\n    });\n\n    const startKillEscalation = Effect.fn(\"terminal.startKillEscalation\")(function* (\n      process: PtyProcess,\n      threadId: string,\n      terminalId: string,\n    ) {\n      const fiber = yield* runKillEscalation(process, threadId, terminalId).pipe(\n        Effect.ensuring(\n          modifyManagerState((state) => {\n            if (!state.killFibers.has(process)) {\n              return [undefined, state] as const;\n            }\n            const killFibers = new Map(state.killFibers);\n            killFibers.delete(process);\n            return [undefined, { ...state, killFibers }] as const;\n          }),\n        ),\n        Effect.forkIn(workerScope),\n      );\n\n      yield* registerKillFiber(process, fiber);\n    });\n\n    const persistWorker = yield* makeKeyedCoalescingWorker<\n      string,\n      PersistHistoryRequest,\n      never,\n      never\n    >({\n      merge: (current, next) => ({\n        history: next.history,\n        immediate: current.immediate || next.immediate,\n      }),\n      process: Effect.fn(\"terminal.persistHistoryWorker\")(function* (sessionKey, request) {\n        if (!request.immediate) {\n          yield* Effect.sleep(DEFAULT_PERSIST_DEBOUNCE_MS);\n        }\n\n        const [threadId, terminalId] = sessionKey.split(\"\\u0000\");\n        if (!threadId || !terminalId) {\n          return;\n        }\n\n        yield* fileSystem.writeFileString(historyPath(threadId, terminalId), request.history).pipe(\n          Effect.catch((error) =>\n            Effect.logWarning(\"failed to persist terminal history\", {\n              threadId,\n              terminalId,\n              error,\n            }),\n          ),\n        );\n      }),\n    });\n\n    const queuePersist = Effect.fn(\"terminal.queuePersist\")(function* (\n      threadId: string,\n      terminalId: string,\n      history: string,\n    ) {\n      yield* persistWorker.enqueue(toSessionKey(threadId, terminalId), {\n        history,\n        immediate: false,\n      });\n    });\n\n    const flushPersist = Effect.fn(\"terminal.flushPersist\")(function* (\n      threadId: string,\n      terminalId: string,\n    ) {\n      yield* persistWorker.drainKey(toSessionKey(threadId, terminalId));\n    });\n\n    const persistHistory = Effect.fn(\"terminal.persistHistory\")(function* (\n      threadId: string,\n      terminalId: string,\n      history: string,\n    ) {\n      yield* persistWorker.enqueue(toSessionKey(threadId, terminalId), {\n        history,\n        immediate: true,\n      });\n      yield* flushPersist(threadId, terminalId);\n    });\n\n    const readHistory = Effect.fn(\"terminal.readHistory\")(function* (\n      threadId: string,\n      terminalId: string,\n    ) {\n      const nextPath = historyPath(threadId, terminalId);\n      if (\n        yield* fileSystem\n          .exists(nextPath)\n          .pipe(Effect.mapError(toTerminalHistoryError(\"read\", threadId, terminalId)))\n      ) {\n        const raw = yield* fileSystem\n          .readFileString(nextPath)\n          .pipe(Effect.mapError(toTerminalHistoryError(\"read\", threadId, terminalId)));\n        const capped = capHistory(raw, historyLineLimit);\n        if (capped !== raw) {\n          yield* fileSystem\n            .writeFileString(nextPath, capped)\n            .pipe(Effect.mapError(toTerminalHistoryError(\"truncate\", threadId, terminalId)));\n        }\n        return capped;\n      }\n\n      if (terminalId !== DEFAULT_TERMINAL_ID) {\n        return \"\";\n      }\n\n      const legacyPath = legacyHistoryPath(threadId);\n      if (\n        !(yield* fileSystem\n          .exists(legacyPath)\n          .pipe(Effect.mapError(toTerminalHistoryError(\"migrate\", threadId, terminalId))))\n      ) {\n        return \"\";\n      }\n\n      const raw = yield* fileSystem\n        .readFileString(legacyPath)\n        .pipe(Effect.mapError(toTerminalHistoryError(\"migrate\", threadId, terminalId)));\n      const capped = capHistory(raw, historyLineLimit);\n      yield* fileSystem\n        .writeFileString(nextPath, capped)\n        .pipe(Effect.mapError(toTerminalHistoryError(\"migrate\", threadId, terminalId)));\n      yield* fileSystem.remove(legacyPath, { force: true }).pipe(\n        Effect.catch((cleanupError) =>\n          Effect.logWarning(\"failed to remove legacy terminal history\", {\n            threadId,\n            error: cleanupError,\n          }),\n        ),\n      );\n      return capped;\n    });\n\n    const deleteHistory = Effect.fn(\"terminal.deleteHistory\")(function* (\n      threadId: string,\n      terminalId: string,\n    ) {\n      yield* fileSystem.remove(historyPath(threadId, terminalId), { force: true }).pipe(\n        Effect.catch((error) =>\n          Effect.logWarning(\"failed to delete terminal history\", {\n            threadId,\n            terminalId,\n            error,\n          }),\n        ),\n      );\n      if (terminalId === DEFAULT_TERMINAL_ID) {\n        yield* fileSystem.remove(legacyHistoryPath(threadId), { force: true }).pipe(\n          Effect.catch((error) =>\n            Effect.logWarning(\"failed to delete terminal history\", {\n              threadId,\n              terminalId,\n              error,\n            }),\n          ),\n        );\n      }\n    });\n\n    const deleteAllHistoryForThread = Effect.fn(\"terminal.deleteAllHistoryForThread\")(function* (\n      threadId: string,\n    ) {\n      const threadPrefix = `${toSafeThreadId(threadId)}_`;\n      const entries = yield* fileSystem\n        .readDirectory(logsDir, { recursive: false })\n        .pipe(Effect.catch(() => Effect.succeed([] as Array<string>)));\n      yield* Effect.forEach(\n        entries.filter(\n          (name) =>\n            name === `${toSafeThreadId(threadId)}.log` ||\n            name === `${legacySafeThreadId(threadId)}.log` ||\n            name.startsWith(threadPrefix),\n        ),\n        (name) =>\n          fileSystem.remove(path.join(logsDir, name), { force: true }).pipe(\n            Effect.catch((error) =>\n              Effect.logWarning(\"failed to delete terminal histories for thread\", {\n                threadId,\n                error,\n              }),\n            ),\n          ),\n        { discard: true },\n      );\n    });\n\n    const assertValidCwd = Effect.fn(\"terminal.assertValidCwd\")(function* (cwd: string) {\n      const stats = yield* fileSystem.stat(cwd).pipe(\n        Effect.mapError(\n          (cause) =>\n            new TerminalCwdError({\n              cwd,\n              reason: cause.reason._tag === \"NotFound\" ? \"notFound\" : \"statFailed\",\n              cause,\n            }),\n        ),\n      );\n      if (stats.type !== \"Directory\") {\n        return yield* new TerminalCwdError({\n          cwd,\n          reason: \"notDirectory\",\n        });\n      }\n    });\n\n    const getSession = Effect.fn(\"terminal.getSession\")(function* (\n      threadId: string,\n      terminalId: string,\n    ): Effect.fn.Return<Option.Option<TerminalSessionState>> {\n      return yield* Effect.map(readManagerState, (state) =>\n        Option.fromNullishOr(state.sessions.get(toSessionKey(threadId, terminalId))),\n      );\n    });\n\n    const requireSession = Effect.fn(\"terminal.requireSession\")(function* (\n      threadId: string,\n      terminalId: string,\n    ): Effect.fn.Return<TerminalSessionState, TerminalSessionLookupError> {\n      return yield* Effect.flatMap(getSession(threadId, terminalId), (session) =>\n        Option.match(session, {\n          onNone: () =>\n            Effect.fail(\n              new TerminalSessionLookupError({\n                threadId,\n                terminalId,\n              }),\n            ),\n          onSome: Effect.succeed,\n        }),\n      );\n    });\n\n    const sessionsForThread = Effect.fn(\"terminal.sessionsForThread\")(function* (threadId: string) {\n      return yield* readManagerState.pipe(\n        Effect.map((state) =>\n          [...state.sessions.values()].filter((session) => session.threadId === threadId),\n        ),\n      );\n    });\n\n    const evictInactiveSessionsIfNeeded = Effect.fn(\"terminal.evictInactiveSessionsIfNeeded\")(\n      function* () {\n        yield* modifyManagerState((state) => {\n          const inactiveSessions = [...state.sessions.values()].filter(\n            (session) => session.status !== \"running\",\n          );\n          if (inactiveSessions.length <= maxRetainedInactiveSessions) {\n            return [undefined, state] as const;\n          }\n\n          inactiveSessions.sort(\n            (left, right) =>\n              left.updatedAt.localeCompare(right.updatedAt) ||\n              left.threadId.localeCompare(right.threadId) ||\n              left.terminalId.localeCompare(right.terminalId),\n          );\n\n          const sessions = new Map(state.sessions);\n\n          const toEvict = inactiveSessions.length - maxRetainedInactiveSessions;\n          for (const session of inactiveSessions.slice(0, toEvict)) {\n            const key = toSessionKey(session.threadId, session.terminalId);\n            sessions.delete(key);\n          }\n\n          return [undefined, { ...state, sessions }] as const;\n        });\n      },\n    );\n\n    const drainProcessEvents = Effect.fn(\"terminal.drainProcessEvents\")(function* (\n      session: TerminalSessionState,\n      expectedPid: number,\n    ) {\n      while (true) {\n        const updatedAt = yield* nowIso;\n        const action: DrainProcessEventAction = yield* Effect.sync(() => {\n          if (session.pid !== expectedPid || !session.process || session.status !== \"running\") {\n            session.pendingProcessEvents = [];\n            session.pendingProcessEventIndex = 0;\n            session.processEventDrainRunning = false;\n            return { type: \"idle\" } as const;\n          }\n\n          const nextEvent = session.pendingProcessEvents[session.pendingProcessEventIndex];\n          if (!nextEvent) {\n            session.pendingProcessEvents = [];\n            session.pendingProcessEventIndex = 0;\n            session.processEventDrainRunning = false;\n            return { type: \"idle\" } as const;\n          }\n\n          session.pendingProcessEventIndex += 1;\n          if (session.pendingProcessEventIndex >= session.pendingProcessEvents.length) {\n            session.pendingProcessEvents = [];\n            session.pendingProcessEventIndex = 0;\n          }\n\n          if (nextEvent.type === \"output\") {\n            const sanitized = sanitizeTerminalHistoryChunk(\n              session.pendingHistoryControlSequence,\n              nextEvent.data,\n            );\n            session.pendingHistoryControlSequence = sanitized.pendingControlSequence;\n            if (sanitized.visibleText.length > 0) {\n              session.history = capHistory(\n                `${session.history}${sanitized.visibleText}`,\n                historyLineLimit,\n              );\n            }\n            session.updatedAt = updatedAt;\n\n            return {\n              type: \"output\",\n              threadId: session.threadId,\n              terminalId: session.terminalId,\n              history: sanitized.visibleText.length > 0 ? session.history : null,\n              data: nextEvent.data,\n            } as const;\n          }\n\n          const process = session.process;\n          cleanupProcessHandles(session);\n          session.process = null;\n          session.pid = null;\n          session.hasRunningSubprocess = false;\n          session.status = \"exited\";\n          session.pendingHistoryControlSequence = \"\";\n          session.pendingProcessEvents = [];\n          session.pendingProcessEventIndex = 0;\n          session.processEventDrainRunning = false;\n          session.exitCode = Number.isInteger(nextEvent.event.exitCode)\n            ? nextEvent.event.exitCode\n            : null;\n          session.exitSignal = Number.isInteger(nextEvent.event.signal)\n            ? nextEvent.event.signal\n            : null;\n          session.updatedAt = updatedAt;\n\n          return {\n            type: \"exit\",\n            process,\n            threadId: session.threadId,\n            terminalId: session.terminalId,\n            exitCode: session.exitCode,\n            exitSignal: session.exitSignal,\n          } as const;\n        });\n\n        if (action.type === \"idle\") {\n          return;\n        }\n\n        if (action.type === \"output\") {\n          if (action.history !== null) {\n            yield* queuePersist(action.threadId, action.terminalId, action.history);\n          }\n\n          const createdAt = yield* nowIso;\n          yield* publishEvent({\n            type: \"output\",\n            threadId: action.threadId,\n            terminalId: action.terminalId,\n            createdAt,\n            data: action.data,\n          });\n          continue;\n        }\n\n        yield* clearKillFiber(action.process);\n        const createdAt = yield* nowIso;\n        yield* publishEvent({\n          type: \"exited\",\n          threadId: action.threadId,\n          terminalId: action.terminalId,\n          createdAt,\n          exitCode: action.exitCode,\n          exitSignal: action.exitSignal,\n        });\n        yield* evictInactiveSessionsIfNeeded();\n        return;\n      }\n    });\n\n    const stopProcess = Effect.fn(\"terminal.stopProcess\")(function* (\n      session: TerminalSessionState,\n    ) {\n      const process = session.process;\n      if (!process) return;\n\n      const updatedAt = yield* nowIso;\n      yield* modifyManagerState((state) => {\n        cleanupProcessHandles(session);\n        session.process = null;\n        session.pid = null;\n        session.hasRunningSubprocess = false;\n        session.status = \"exited\";\n        session.pendingHistoryControlSequence = \"\";\n        session.pendingProcessEvents = [];\n        session.pendingProcessEventIndex = 0;\n        session.processEventDrainRunning = false;\n        session.updatedAt = updatedAt;\n        return [undefined, state] as const;\n      });\n\n      yield* clearKillFiber(process);\n      yield* startKillEscalation(process, session.threadId, session.terminalId);\n      yield* evictInactiveSessionsIfNeeded();\n    });\n\n    const trySpawn = Effect.fn(\"terminal.trySpawn\")(function* (\n      shellCandidates: ReadonlyArray<ShellCandidate>,\n      spawnEnv: NodeJS.ProcessEnv,\n      session: TerminalSessionState,\n      index = 0,\n      lastError: PtySpawnError | null = null,\n    ): Effect.fn.Return<{ process: PtyProcess; shellLabel: string }, PtySpawnError> {\n      if (index >= shellCandidates.length) {\n        const detail = lastError?.message ?? \"Failed to spawn PTY process\";\n        const tried =\n          shellCandidates.length > 0\n            ? ` Tried shells: ${shellCandidates.map((candidate) => formatShellCandidate(candidate)).join(\", \")}.`\n            : \"\";\n        return yield* new PtySpawnError({\n          adapter: \"terminal-manager\",\n          message: `${detail}.${tried}`.trim(),\n          ...(lastError ? { cause: lastError } : {}),\n        });\n      }\n\n      const candidate = shellCandidates[index];\n      if (!candidate) {\n        return yield* (\n          lastError ??\n            new PtySpawnError({\n              adapter: \"terminal-manager\",\n              message: \"No shell candidate available for PTY spawn.\",\n            })\n        );\n      }\n\n      const attempt = yield* Effect.result(\n        options.ptyAdapter.spawn({\n          shell: candidate.shell,\n          ...(candidate.args ? { args: candidate.args } : {}),\n          cwd: session.cwd,\n          cols: session.cols,\n          rows: session.rows,\n          env: spawnEnv,\n        }),\n      );\n\n      if (attempt._tag === \"Success\") {\n        return {\n          process: attempt.success,\n          shellLabel: formatShellCandidate(candidate),\n        };\n      }\n\n      const spawnError = attempt.failure;\n      if (!isRetryableShellSpawnError(spawnError)) {\n        return yield* spawnError;\n      }\n\n      return yield* trySpawn(shellCandidates, spawnEnv, session, index + 1, spawnError);\n    });\n\n    const startSession = Effect.fn(\"terminal.startSession\")(function* (\n      session: TerminalSessionState,\n      input: TerminalStartInput,\n      eventType: \"started\" | \"restarted\",\n    ) {\n      yield* stopProcess(session);\n      yield* Effect.annotateCurrentSpan({\n        \"terminal.thread_id\": session.threadId,\n        \"terminal.id\": session.terminalId,\n        \"terminal.event_type\": eventType,\n        \"terminal.cwd\": input.cwd,\n      });\n\n      const startingAt = yield* nowIso;\n      yield* modifyManagerState((state) => {\n        session.status = \"starting\";\n        session.cwd = input.cwd;\n        session.worktreePath = input.worktreePath ?? null;\n        session.cols = input.cols;\n        session.rows = input.rows;\n        session.exitCode = null;\n        session.exitSignal = null;\n        session.hasRunningSubprocess = false;\n        session.pendingProcessEvents = [];\n        session.pendingProcessEventIndex = 0;\n        session.processEventDrainRunning = false;\n        session.updatedAt = startingAt;\n        return [undefined, state] as const;\n      });\n\n      let ptyProcess: PtyProcess | null = null;\n      let startedShell: string | null = null;\n\n      const startResult = yield* Effect.result(\n        increment(terminalSessionsTotal, { lifecycle: eventType }).pipe(\n          Effect.andThen(\n            Effect.gen(function* () {\n              const shellCandidates = resolveShellCandidates(shellResolver, platform, baseEnv);\n              const terminalEnv = createTerminalSpawnEnv(baseEnv, session.runtimeEnv);\n              const spawnResult = yield* trySpawn(shellCandidates, terminalEnv, session);\n              ptyProcess = spawnResult.process;\n              startedShell = spawnResult.shellLabel;\n\n              const processPid = ptyProcess.pid;\n              const startupEvents: PendingProcessEvent[] = [];\n              let terminalIsReadyForEvents = false;\n              const handleProcessEvent = (event: PendingProcessEvent) => {\n                if (!terminalIsReadyForEvents) {\n                  startupEvents.push(event);\n                  return;\n                }\n                if (!enqueueProcessEvent(session, processPid, event)) {\n                  return;\n                }\n                runFork(drainProcessEvents(session, processPid));\n              };\n              const unsubscribeData = ptyProcess.onData((data) => {\n                handleProcessEvent({ type: \"output\", data });\n              });\n              const unsubscribeExit = ptyProcess.onExit((event) => {\n                handleProcessEvent({ type: \"exit\", event });\n              });\n\n              const runningAt = yield* nowIso;\n              yield* modifyManagerState((state) => {\n                session.process = ptyProcess;\n                session.pid = processPid;\n                session.status = \"running\";\n                session.updatedAt = runningAt;\n                session.unsubscribeData = unsubscribeData;\n                session.unsubscribeExit = unsubscribeExit;\n                return [undefined, state] as const;\n              });\n\n              terminalIsReadyForEvents = true;\n              let shouldDrainStartupEvents = false;\n              for (const event of startupEvents) {\n                shouldDrainStartupEvents =\n                  enqueueProcessEvent(session, processPid, event) || shouldDrainStartupEvents;\n              }\n              startupEvents.length = 0;\n              if (shouldDrainStartupEvents) {\n                runFork(drainProcessEvents(session, processPid));\n              }\n\n              const createdAt = yield* nowIso;\n              yield* publishEvent({\n                type: eventType,\n                threadId: session.threadId,\n                terminalId: session.terminalId,\n                createdAt,\n                snapshot: snapshot(session),\n              });\n            }),\n          ),\n        ),\n      );\n\n      if (startResult._tag === \"Success\") {\n        return;\n      }\n\n      {\n        const error = startResult.failure;\n        if (ptyProcess) {\n          yield* startKillEscalation(ptyProcess, session.threadId, session.terminalId);\n        }\n        const erroredAt = yield* nowIso;\n\n        yield* modifyManagerState((state) => {\n          session.status = \"error\";\n          session.pid = null;\n          session.process = null;\n          session.unsubscribeData = null;\n          session.unsubscribeExit = null;\n          session.hasRunningSubprocess = false;\n          session.pendingProcessEvents = [];\n          session.pendingProcessEventIndex = 0;\n          session.processEventDrainRunning = false;\n          session.updatedAt = erroredAt;\n          return [undefined, state] as const;\n        });\n\n        yield* evictInactiveSessionsIfNeeded();\n\n        const message = error.message;\n        const createdAt = yield* nowIso;\n        yield* publishEvent({\n          type: \"error\",\n          threadId: session.threadId,\n          terminalId: session.terminalId,\n          createdAt,\n          message,\n        });\n        yield* Effect.logError(\"failed to start terminal\", {\n          threadId: session.threadId,\n          terminalId: session.terminalId,\n          error: message,\n          ...(startedShell ? { shell: startedShell } : {}),\n        });\n      }\n    });\n\n    const closeSession = Effect.fn(\"terminal.closeSession\")(function* (\n      threadId: string,\n      terminalId: string,\n      deleteHistoryOnClose: boolean,\n    ) {\n      const key = toSessionKey(threadId, terminalId);\n      const session = yield* getSession(threadId, terminalId);\n\n      if (Option.isSome(session)) {\n        yield* stopProcess(session.value);\n        yield* persistHistory(threadId, terminalId, session.value.history);\n      }\n\n      yield* flushPersist(threadId, terminalId);\n\n      yield* modifyManagerState((state) => {\n        if (!state.sessions.has(key)) {\n          return [undefined, state] as const;\n        }\n        const sessions = new Map(state.sessions);\n        sessions.delete(key);\n        return [undefined, { ...state, sessions }] as const;\n      });\n\n      if (deleteHistoryOnClose) {\n        yield* deleteHistory(threadId, terminalId);\n      }\n    });\n\n    const pollSubprocessActivity = Effect.fn(\"terminal.pollSubprocessActivity\")(function* () {\n      const state = yield* readManagerState;\n      const runningSessions = [...state.sessions.values()].filter(\n        (session): session is TerminalSessionState & { pid: number } =>\n          session.status === \"running\" && Number.isInteger(session.pid),\n      );\n\n      if (runningSessions.length === 0) {\n        return;\n      }\n\n      const checkSubprocessActivity = Effect.fn(\"terminal.checkSubprocessActivity\")(function* (\n        session: TerminalSessionState & { pid: number },\n      ) {\n        const terminalPid = session.pid;\n        const hasRunningSubprocess = yield* subprocessChecker(terminalPid).pipe(\n          Effect.map(Option.some),\n          Effect.catch((reason) =>\n            Effect.logWarning(\"failed to check terminal subprocess activity\", {\n              threadId: session.threadId,\n              terminalId: session.terminalId,\n              terminalPid,\n              reason,\n            }).pipe(Effect.as(Option.none<boolean>())),\n          ),\n        );\n\n        if (Option.isNone(hasRunningSubprocess)) {\n          return;\n        }\n\n        const updatedAt = yield* nowIso;\n        const createdAt = yield* nowIso;\n        const event = yield* modifyManagerState((state) => {\n          const liveSession: Option.Option<TerminalSessionState> = Option.fromNullishOr(\n            state.sessions.get(toSessionKey(session.threadId, session.terminalId)),\n          );\n          if (\n            Option.isNone(liveSession) ||\n            liveSession.value.status !== \"running\" ||\n            liveSession.value.pid !== terminalPid ||\n            liveSession.value.hasRunningSubprocess === hasRunningSubprocess.value\n          ) {\n            return [Option.none(), state] as const;\n          }\n\n          liveSession.value.hasRunningSubprocess = hasRunningSubprocess.value;\n          liveSession.value.updatedAt = updatedAt;\n\n          return [\n            Option.some({\n              type: \"activity\" as const,\n              threadId: liveSession.value.threadId,\n              terminalId: liveSession.value.terminalId,\n              createdAt,\n              hasRunningSubprocess: hasRunningSubprocess.value,\n            }),\n            state,\n          ] as const;\n        });\n\n        if (Option.isSome(event)) {\n          yield* publishEvent(event.value);\n        }\n      });\n\n      yield* Effect.forEach(runningSessions, checkSubprocessActivity, {\n        concurrency: \"unbounded\",\n        discard: true,\n      });\n    });\n\n    const hasRunningSessions = readManagerState.pipe(\n      Effect.map((state) =>\n        [...state.sessions.values()].some((session) => session.status === \"running\"),\n      ),\n    );\n\n    yield* Effect.forever(\n      hasRunningSessions.pipe(\n        Effect.flatMap((active) =>\n          active\n            ? pollSubprocessActivity().pipe(\n                Effect.flatMap(() => Effect.sleep(subprocessPollIntervalMs)),\n              )\n            : Effect.sleep(subprocessPollIntervalMs),\n        ),\n      ),\n    ).pipe(Effect.forkIn(workerScope));\n\n    yield* Effect.addFinalizer(() =>\n      Effect.gen(function* () {\n        const sessions = yield* modifyManagerState(\n          (state) =>\n            [\n              [...state.sessions.values()],\n              {\n                ...state,\n                sessions: new Map(),\n              },\n            ] as const,\n        );\n\n        const cleanupSession = Effect.fn(\"terminal.cleanupSession\")(function* (\n          session: TerminalSessionState,\n        ) {\n          cleanupProcessHandles(session);\n          if (!session.process) return;\n          yield* clearKillFiber(session.process);\n          yield* runKillEscalation(session.process, session.threadId, session.terminalId);\n        });\n\n        yield* Effect.forEach(sessions, cleanupSession, {\n          concurrency: \"unbounded\",\n          discard: true,\n        });\n      }).pipe(Effect.ignoreCause({ log: true })),\n    );\n\n    const open: TerminalManagerShape[\"open\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          const terminalId = input.terminalId ?? DEFAULT_TERMINAL_ID;\n          yield* assertValidCwd(input.cwd);\n\n          const sessionKey = toSessionKey(input.threadId, terminalId);\n          const existing = yield* getSession(input.threadId, terminalId);\n          if (Option.isNone(existing)) {\n            yield* flushPersist(input.threadId, terminalId);\n            const history = yield* readHistory(input.threadId, terminalId);\n            const cols = input.cols ?? DEFAULT_OPEN_COLS;\n            const rows = input.rows ?? DEFAULT_OPEN_ROWS;\n            const createdAt = yield* nowIso;\n            const session: TerminalSessionState = {\n              threadId: input.threadId,\n              terminalId,\n              cwd: input.cwd,\n              worktreePath: input.worktreePath ?? null,\n              status: \"starting\",\n              pid: null,\n              history,\n              pendingHistoryControlSequence: \"\",\n              pendingProcessEvents: [],\n              pendingProcessEventIndex: 0,\n              processEventDrainRunning: false,\n              exitCode: null,\n              exitSignal: null,\n              updatedAt: createdAt,\n              cols,\n              rows,\n              process: null,\n              unsubscribeData: null,\n              unsubscribeExit: null,\n              hasRunningSubprocess: false,\n              runtimeEnv: normalizedRuntimeEnv(input.env),\n            };\n\n            const createdSession = session;\n            yield* modifyManagerState((state) => {\n              const sessions = new Map(state.sessions);\n              sessions.set(sessionKey, createdSession);\n              return [undefined, { ...state, sessions }] as const;\n            });\n\n            yield* evictInactiveSessionsIfNeeded();\n            yield* startSession(\n              session,\n              {\n                threadId: input.threadId,\n                terminalId,\n                cwd: input.cwd,\n                ...(input.worktreePath !== undefined ? { worktreePath: input.worktreePath } : {}),\n                cols,\n                rows,\n                ...(input.env ? { env: input.env } : {}),\n              },\n              \"started\",\n            );\n            return snapshot(session);\n          }\n\n          const liveSession = existing.value;\n          const nextRuntimeEnv = normalizedRuntimeEnv(input.env);\n          const currentRuntimeEnv = liveSession.runtimeEnv;\n          const targetCols = input.cols ?? liveSession.cols;\n          const targetRows = input.rows ?? liveSession.rows;\n          const runtimeEnvChanged = !Equal.equals(currentRuntimeEnv, nextRuntimeEnv);\n\n          if (liveSession.cwd !== input.cwd || runtimeEnvChanged) {\n            yield* stopProcess(liveSession);\n            liveSession.cwd = input.cwd;\n            liveSession.worktreePath = input.worktreePath ?? null;\n            liveSession.runtimeEnv = nextRuntimeEnv;\n            liveSession.history = \"\";\n            liveSession.pendingHistoryControlSequence = \"\";\n            liveSession.pendingProcessEvents = [];\n            liveSession.pendingProcessEventIndex = 0;\n            liveSession.processEventDrainRunning = false;\n            yield* persistHistory(\n              liveSession.threadId,\n              liveSession.terminalId,\n              liveSession.history,\n            );\n          } else if (liveSession.status === \"exited\" || liveSession.status === \"error\") {\n            liveSession.runtimeEnv = nextRuntimeEnv;\n            liveSession.worktreePath = input.worktreePath ?? null;\n            liveSession.history = \"\";\n            liveSession.pendingHistoryControlSequence = \"\";\n            liveSession.pendingProcessEvents = [];\n            liveSession.pendingProcessEventIndex = 0;\n            liveSession.processEventDrainRunning = false;\n            yield* persistHistory(\n              liveSession.threadId,\n              liveSession.terminalId,\n              liveSession.history,\n            );\n          }\n\n          if (!liveSession.process) {\n            yield* startSession(\n              liveSession,\n              {\n                threadId: input.threadId,\n                terminalId,\n                cwd: input.cwd,\n                worktreePath: liveSession.worktreePath,\n                cols: targetCols,\n                rows: targetRows,\n                ...(input.env ? { env: input.env } : {}),\n              },\n              \"started\",\n            );\n            return snapshot(liveSession);\n          }\n\n          if (liveSession.cols !== targetCols || liveSession.rows !== targetRows) {\n            liveSession.cols = targetCols;\n            liveSession.rows = targetRows;\n            liveSession.updatedAt = yield* nowIso;\n            liveSession.process.resize(targetCols, targetRows);\n          }\n\n          return snapshot(liveSession);\n        }),\n      );\n\n    const write: TerminalManagerShape[\"write\"] = Effect.fn(\"terminal.write\")(function* (input) {\n      const terminalId = input.terminalId ?? DEFAULT_TERMINAL_ID;\n      const session = yield* requireSession(input.threadId, terminalId);\n      const process = session.process;\n      if (!process || session.status !== \"running\") {\n        if (session.status === \"exited\") return;\n        return yield* new TerminalNotRunningError({\n          threadId: input.threadId,\n          terminalId,\n        });\n      }\n      yield* Effect.sync(() => process.write(input.data));\n    });\n\n    const resize: TerminalManagerShape[\"resize\"] = Effect.fn(\"terminal.resize\")(function* (input) {\n      const terminalId = input.terminalId ?? DEFAULT_TERMINAL_ID;\n      const session = yield* requireSession(input.threadId, terminalId);\n      const process = session.process;\n      if (!process || session.status !== \"running\") {\n        return yield* new TerminalNotRunningError({\n          threadId: input.threadId,\n          terminalId,\n        });\n      }\n      session.cols = input.cols;\n      session.rows = input.rows;\n      session.updatedAt = yield* nowIso;\n      yield* Effect.sync(() => process.resize(input.cols, input.rows));\n    });\n\n    const clear: TerminalManagerShape[\"clear\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          const terminalId = input.terminalId ?? DEFAULT_TERMINAL_ID;\n          const session = yield* requireSession(input.threadId, terminalId);\n          const updatedAt = yield* nowIso;\n          session.history = \"\";\n          session.pendingHistoryControlSequence = \"\";\n          session.pendingProcessEvents = [];\n          session.pendingProcessEventIndex = 0;\n          session.processEventDrainRunning = false;\n          session.updatedAt = updatedAt;\n          yield* persistHistory(input.threadId, terminalId, session.history);\n          const createdAt = yield* nowIso;\n          yield* publishEvent({\n            type: \"cleared\",\n            threadId: input.threadId,\n            terminalId,\n            createdAt,\n          });\n        }),\n      );\n\n    const readSnapshot: TerminalManagerShape[\"snapshot\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          const terminalId = input.terminalId ?? DEFAULT_TERMINAL_ID;\n          const session = yield* requireSession(input.threadId, terminalId);\n          return snapshot(session);\n        }),\n      );\n\n    const restart: TerminalManagerShape[\"restart\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          yield* increment(terminalRestartsTotal, { scope: \"thread\" });\n          const terminalId = input.terminalId ?? DEFAULT_TERMINAL_ID;\n          yield* assertValidCwd(input.cwd);\n\n          const sessionKey = toSessionKey(input.threadId, terminalId);\n          const existingSession = yield* getSession(input.threadId, terminalId);\n          let session: TerminalSessionState;\n          if (Option.isNone(existingSession)) {\n            const cols = input.cols ?? DEFAULT_OPEN_COLS;\n            const rows = input.rows ?? DEFAULT_OPEN_ROWS;\n            const createdAt = yield* nowIso;\n            session = {\n              threadId: input.threadId,\n              terminalId,\n              cwd: input.cwd,\n              worktreePath: input.worktreePath ?? null,\n              status: \"starting\",\n              pid: null,\n              history: \"\",\n              pendingHistoryControlSequence: \"\",\n              pendingProcessEvents: [],\n              pendingProcessEventIndex: 0,\n              processEventDrainRunning: false,\n              exitCode: null,\n              exitSignal: null,\n              updatedAt: createdAt,\n              cols,\n              rows,\n              process: null,\n              unsubscribeData: null,\n              unsubscribeExit: null,\n              hasRunningSubprocess: false,\n              runtimeEnv: normalizedRuntimeEnv(input.env),\n            };\n            const createdSession = session;\n            yield* modifyManagerState((state) => {\n              const sessions = new Map(state.sessions);\n              sessions.set(sessionKey, createdSession);\n              return [undefined, { ...state, sessions }] as const;\n            });\n            yield* evictInactiveSessionsIfNeeded();\n          } else {\n            session = existingSession.value;\n            yield* stopProcess(session);\n            session.cwd = input.cwd;\n            session.worktreePath = input.worktreePath ?? null;\n            session.runtimeEnv = normalizedRuntimeEnv(input.env);\n          }\n\n          const cols = input.cols ?? session.cols;\n          const rows = input.rows ?? session.rows;\n\n          session.history = \"\";\n          session.pendingHistoryControlSequence = \"\";\n          session.pendingProcessEvents = [];\n          session.pendingProcessEventIndex = 0;\n          session.processEventDrainRunning = false;\n          yield* persistHistory(input.threadId, terminalId, session.history);\n          yield* startSession(\n            session,\n            {\n              threadId: input.threadId,\n              terminalId,\n              cwd: input.cwd,\n              ...(input.worktreePath !== undefined ? { worktreePath: input.worktreePath } : {}),\n              cols,\n              rows,\n              ...(input.env ? { env: input.env } : {}),\n            },\n            \"restarted\",\n          );\n          return snapshot(session);\n        }),\n      );\n\n    const close: TerminalManagerShape[\"close\"] = (input) =>\n      withThreadLock(\n        input.threadId,\n        Effect.gen(function* () {\n          if (input.terminalId) {\n            yield* closeSession(input.threadId, input.terminalId, input.deleteHistory === true);\n            return;\n          }\n\n          const threadSessions = yield* sessionsForThread(input.threadId);\n          yield* Effect.forEach(\n            threadSessions,\n            (session) => closeSession(input.threadId, session.terminalId, false),\n            { discard: true },\n          );\n\n          if (input.deleteHistory) {\n            yield* deleteAllHistoryForThread(input.threadId);\n          }\n        }),\n      );\n\n    return {\n      open,\n      write,\n      resize,\n      clear,\n      snapshot: readSnapshot,\n      restart,\n      close,\n      subscribe: (listener) =>\n        Effect.sync(() => {\n          terminalEventListeners.add(listener);\n          return () => {\n            terminalEventListeners.delete(listener);\n          };\n        }),\n    } satisfies TerminalManagerShape;\n  },\n);\n\nexport const TerminalManagerLive = Layer.effect(TerminalManager, makeTerminalManager()).pipe(\n  Layer.provide(ProcessRunner.layer),\n);\n","/**\n * CheckpointReactor - Checkpoint reaction service interface.\n *\n * Owns background workers that react to orchestration checkpoint lifecycle\n * events and apply checkpoint side effects.\n *\n * @module CheckpointReactor\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\n/**\n * CheckpointReactorShape - Service API for checkpoint reactor lifecycle.\n */\nexport interface CheckpointReactorShape {\n  /**\n   * Start the checkpoint reactor.\n   *\n   * The returned effect must be run in a scope so all worker fibers can be\n   * finalized on shutdown.\n   *\n   * Consumes both orchestration-domain and provider-runtime events via an\n   * internal queue.\n   */\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n\n  /**\n   * Resolves when the internal processing queue is empty and idle.\n   * Intended for test use to replace timing-sensitive sleeps.\n   */\n  readonly drain: Effect.Effect<void>;\n}\n\n/**\n * CheckpointReactor - Service tag for checkpoint reactor workers.\n */\nexport class CheckpointReactor extends Context.Service<CheckpointReactor, CheckpointReactorShape>()(\n  \"salchi/orchestration/Services/CheckpointReactor\",\n) {}\n","/**\n * ProviderCommandReactor - Provider command reaction service interface.\n *\n * Owns background workers that react to orchestration intent events and\n * dispatch provider-side command execution.\n *\n * @module ProviderCommandReactor\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\n/**\n * ProviderCommandReactorShape - Service API for provider command reactors.\n */\nexport interface ProviderCommandReactorShape {\n  /**\n   * Start reacting to provider-intent orchestration domain events.\n   *\n   * The returned effect must be run in a scope so all worker fibers can be\n   * finalized on shutdown.\n   *\n   * Filters orchestration domain events to provider-intent types before\n   * processing.\n   */\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n\n  /**\n   * Resolves when the internal processing queue is empty and idle.\n   * Intended for test use to replace timing-sensitive sleeps.\n   */\n  readonly drain: Effect.Effect<void>;\n}\n\n/**\n * ProviderCommandReactor - Service tag for provider command reaction workers.\n */\nexport class ProviderCommandReactor extends Context.Service<\n  ProviderCommandReactor,\n  ProviderCommandReactorShape\n>()(\"salchi/orchestration/Services/ProviderCommandReactor\") {}\n","/**\n * ProviderRuntimeIngestionService - Provider runtime ingestion service interface.\n *\n * Owns background workers that consume provider runtime streams and emit\n * orchestration commands/events.\n *\n * @module ProviderRuntimeIngestionService\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\n/**\n * ProviderRuntimeIngestionShape - Service API for runtime ingestion lifecycle.\n */\nexport interface ProviderRuntimeIngestionShape {\n  /**\n   * Start ingesting provider runtime events into orchestration commands.\n   *\n   * The returned effect must be run in a scope so all worker fibers can be\n   * finalized on shutdown.\n   *\n   * Uses an internal queue and continues after non-interrupt failures by\n   * logging warnings.\n   */\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n\n  /**\n   * Resolves when the internal processing queue is empty and idle.\n   * Intended for test use to replace timing-sensitive sleeps.\n   */\n  readonly drain: Effect.Effect<void>;\n}\n\n/**\n * ProviderRuntimeIngestionService - Service tag for runtime ingestion workers.\n */\nexport class ProviderRuntimeIngestionService extends Context.Service<\n  ProviderRuntimeIngestionService,\n  ProviderRuntimeIngestionShape\n>()(\"salchi/orchestration/Services/ProviderRuntimeIngestion/ProviderRuntimeIngestionService\") {}\n","/**\n * ThreadDeletionReactor - Thread deletion cleanup reactor service interface.\n *\n * Owns background workers that react to thread deletion domain events and\n * perform best-effort runtime cleanup for provider sessions and terminals.\n *\n * @module ThreadDeletionReactor\n */\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\n/**\n * ThreadDeletionReactorShape - Service API for thread deletion cleanup.\n */\nexport interface ThreadDeletionReactorShape {\n  /**\n   * Start reacting to thread.deleted orchestration domain events.\n   *\n   * The returned effect must be run in a scope so all worker fibers can be\n   * finalized on shutdown.\n   */\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n\n  /**\n   * Resolves when the internal processing queue is empty and idle.\n   * Intended for test use to replace timing-sensitive sleeps.\n   */\n  readonly drain: Effect.Effect<void>;\n}\n\n/**\n * ThreadDeletionReactor - Service tag for thread deletion cleanup workers.\n */\nexport class ThreadDeletionReactor extends Context.Service<\n  ThreadDeletionReactor,\n  ThreadDeletionReactorShape\n>()(\"salchi/orchestration/Services/ThreadDeletionReactor\") {}\n","import * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Scope from \"effect/Scope\";\n\nexport interface WebPushNotificationReactorShape {\n  readonly start: () => Effect.Effect<void, never, Scope.Scope>;\n\n  /**\n   * Resolves when all notification work already accepted by the reactor has\n   * finished. Intended for deterministic tests and orderly diagnostics.\n   */\n  readonly drain: Effect.Effect<void>;\n}\n\nexport class WebPushNotificationReactor extends Context.Service<\n  WebPushNotificationReactor,\n  WebPushNotificationReactorShape\n>()(\"salchi/push/Services/WebPushNotificationReactor\") {}\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  OrchestrationReactor,\n  type OrchestrationReactorShape,\n} from \"../Services/OrchestrationReactor.ts\";\nimport { CheckpointReactor } from \"../Services/CheckpointReactor.ts\";\nimport { ProviderCommandReactor } from \"../Services/ProviderCommandReactor.ts\";\nimport { ProviderRuntimeIngestionService } from \"../Services/ProviderRuntimeIngestion.ts\";\nimport { ThreadDeletionReactor } from \"../Services/ThreadDeletionReactor.ts\";\nimport { WebPushNotificationReactor } from \"../../push/Services/WebPushNotificationReactor.ts\";\n\nexport const makeOrchestrationReactor = Effect.gen(function* () {\n  const providerRuntimeIngestion = yield* ProviderRuntimeIngestionService;\n  const providerCommandReactor = yield* ProviderCommandReactor;\n  const checkpointReactor = yield* CheckpointReactor;\n  const threadDeletionReactor = yield* ThreadDeletionReactor;\n  const webPushNotificationReactor = yield* WebPushNotificationReactor;\n\n  const start: OrchestrationReactorShape[\"start\"] = Effect.fn(\"start\")(function* () {\n    yield* providerRuntimeIngestion.start();\n    yield* providerCommandReactor.start();\n    yield* checkpointReactor.start();\n    yield* threadDeletionReactor.start();\n    yield* webPushNotificationReactor.start();\n  });\n\n  return {\n    start,\n  } satisfies OrchestrationReactorShape;\n});\n\nexport const OrchestrationReactorLive = Layer.effect(\n  OrchestrationReactor,\n  makeOrchestrationReactor,\n);\n","/**\n * RuntimeReceiptBus - Internal checkpoint-reactor synchronization receipts.\n *\n * This service exists to expose short-lived orchestration milestones that are\n * useful in tests and harnesses but are not part of the production runtime\n * event model. `CheckpointReactor` publishes receipts such as baseline capture,\n * diff finalization, and turn-processing quiescence so integration tests can\n * wait for those exact points without inferring them indirectly from persisted\n * state.\n *\n * Production code should only call `publish`. Test code may subscribe via\n * `streamEventsForTest`, which is intentionally named to make the intended\n * usage explicit.\n *\n * @module RuntimeReceiptBus\n */\nimport { CheckpointRef, IsoDateTime, NonNegativeInt, ThreadId, TurnId } from \"@salchi/contracts\";\nimport * as Schema from \"effect/Schema\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport type * as Stream from \"effect/Stream\";\n\nexport const CheckpointBaselineCapturedReceipt = Schema.Struct({\n  type: Schema.Literal(\"checkpoint.baseline.captured\"),\n  threadId: ThreadId,\n  checkpointTurnCount: NonNegativeInt,\n  checkpointRef: CheckpointRef,\n  createdAt: IsoDateTime,\n});\nexport type CheckpointBaselineCapturedReceipt = typeof CheckpointBaselineCapturedReceipt.Type;\n\nexport const CheckpointDiffFinalizedReceipt = Schema.Struct({\n  type: Schema.Literal(\"checkpoint.diff.finalized\"),\n  threadId: ThreadId,\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n  checkpointRef: CheckpointRef,\n  status: Schema.Literals([\"ready\", \"missing\", \"error\"]),\n  createdAt: IsoDateTime,\n});\nexport type CheckpointDiffFinalizedReceipt = typeof CheckpointDiffFinalizedReceipt.Type;\n\nexport const TurnProcessingQuiescedReceipt = Schema.Struct({\n  type: Schema.Literal(\"turn.processing.quiesced\"),\n  threadId: ThreadId,\n  turnId: TurnId,\n  checkpointTurnCount: NonNegativeInt,\n  createdAt: IsoDateTime,\n});\nexport type TurnProcessingQuiescedReceipt = typeof TurnProcessingQuiescedReceipt.Type;\n\nexport const OrchestrationRuntimeReceipt = Schema.Union([\n  CheckpointBaselineCapturedReceipt,\n  CheckpointDiffFinalizedReceipt,\n  TurnProcessingQuiescedReceipt,\n]);\nexport type OrchestrationRuntimeReceipt = typeof OrchestrationRuntimeReceipt.Type;\n\nexport interface RuntimeReceiptBusShape {\n  readonly publish: (receipt: OrchestrationRuntimeReceipt) => Effect.Effect<void>;\n  readonly streamEventsForTest: Stream.Stream<OrchestrationRuntimeReceipt>;\n}\n\nexport class RuntimeReceiptBus extends Context.Service<RuntimeReceiptBus, RuntimeReceiptBusShape>()(\n  \"salchi/orchestration/Services/RuntimeReceiptBus\",\n) {}\n","/**\n * RuntimeReceiptBus layers.\n *\n * `RuntimeReceiptBusLive` is the production default and intentionally does not\n * retain or broadcast receipts. `RuntimeReceiptBusTest` installs the in-memory\n * PubSub-backed implementation used by integration tests that need to await\n * checkpoint-reactor milestones precisely.\n *\n * @module RuntimeReceiptBus\n */\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Stream from \"effect/Stream\";\n\nimport {\n  RuntimeReceiptBus,\n  type RuntimeReceiptBusShape,\n  type OrchestrationRuntimeReceipt,\n} from \"../Services/RuntimeReceiptBus.ts\";\n\nconst makeRuntimeReceiptBus = Effect.succeed({\n  publish: () => Effect.void,\n  streamEventsForTest: Stream.empty,\n} satisfies RuntimeReceiptBusShape);\n\nconst makeRuntimeReceiptBusTest = Effect.gen(function* () {\n  const pubSub = yield* PubSub.unbounded<OrchestrationRuntimeReceipt>();\n\n  return {\n    publish: (receipt) => PubSub.publish(pubSub, receipt).pipe(Effect.asVoid),\n    get streamEventsForTest() {\n      return Stream.fromPubSub(pubSub);\n    },\n  } satisfies RuntimeReceiptBusShape;\n});\n\nexport const RuntimeReceiptBusLive = Layer.effect(RuntimeReceiptBus, makeRuntimeReceiptBus);\nexport const RuntimeReceiptBusTest = Layer.effect(RuntimeReceiptBus, makeRuntimeReceiptBusTest);\n","/**\n * DrainableWorker - A queue-based worker that exposes a `drain()` effect.\n *\n * Wraps the common `Queue.unbounded` + `Effect.forever` pattern and adds\n * a signal that resolves when the queue is empty **and** the current item\n * has finished processing. This lets tests replace timing-sensitive\n * `Effect.sleep` calls with deterministic `drain()`.\n *\n * @module DrainableWorker\n */\nimport * as Scope from \"effect/Scope\";\nimport * as Effect from \"effect/Effect\";\nimport * as TxQueue from \"effect/TxQueue\";\nimport * as TxRef from \"effect/TxRef\";\n\nexport interface DrainableWorker<A> {\n  /**\n   * Enqueue a work item and track it for `drain()`.\n   *\n   * This wraps `Queue.offer` so drain state is updated atomically with the\n   * enqueue path instead of inferring it from queue internals.\n   */\n  readonly enqueue: (item: A) => Effect.Effect<void>;\n\n  /**\n   * Resolves when the queue is empty and the worker is idle (not processing).\n   */\n  readonly drain: Effect.Effect<void>;\n}\n\n/**\n * Create a drainable worker that processes items from an unbounded queue.\n *\n * The worker is forked into the current scope and will be interrupted when\n * the scope closes. A finalizer shuts down the queue.\n *\n * @param process - The effect to run for each queued item.\n * @returns A `DrainableWorker` with `queue` and `drain`.\n */\nexport const makeDrainableWorker = <A, E, R>(\n  process: (item: A) => Effect.Effect<void, E, R>,\n): Effect.Effect<DrainableWorker<A>, never, Scope.Scope | R> =>\n  Effect.gen(function* () {\n    const queue = yield* Effect.acquireRelease(TxQueue.unbounded<A>(), TxQueue.shutdown);\n    const outstanding = yield* TxRef.make(0);\n\n    yield* TxQueue.take(queue).pipe(\n      Effect.tap((a) =>\n        Effect.ensuring(\n          process(a),\n          TxRef.update(outstanding, (n) => n - 1),\n        ),\n      ),\n      Effect.forever,\n      Effect.forkScoped,\n    );\n\n    const drain: DrainableWorker<A>[\"drain\"] = TxRef.get(outstanding).pipe(\n      Effect.tap((n) => (n > 0 ? Effect.txRetry : Effect.void)),\n      Effect.tx,\n    );\n\n    const enqueue = (element: A): Effect.Effect<boolean, never, never> =>\n      TxQueue.offer(queue, element).pipe(\n        Effect.tap(() => TxRef.update(outstanding, (n) => n + 1)),\n        Effect.tx,\n      );\n\n    return { enqueue, drain } satisfies DrainableWorker<A>;\n  });\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function isGitRepository(cwd: string): boolean {\n  return existsSync(join(cwd, \".git\"));\n}\n","//#region src/constants.ts\nconst DIFFS_TAG_NAME = \"diffs-container\";\nconst DIFFS_DEVELOPMENT_BUILD = (() => {\n\ttry {\n\t\treturn process.env.NODE_ENV === \"development\";\n\t} catch {\n\t\treturn false;\n\t}\n})();\nconst COMMIT_METADATA_SPLIT = /(?=^From [a-f0-9]+ .+$)/m;\nconst GIT_DIFF_FILE_BREAK_REGEX = /(?=^diff --git)/gm;\nconst UNIFIED_DIFF_FILE_BREAK_REGEX = /(?=^---\\s+\\S)/gm;\nconst FILE_CONTEXT_BLOB = /(?=^@@ )/gm;\nconst HUNK_HEADER = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@(?: (.*))?/m;\nconst SPLIT_WITH_NEWLINES = /(?<=\\n)/;\nconst FILENAME_HEADER_REGEX = /^(---|\\+\\+\\+)\\s+([^\\t\\r\\n]+)/;\nconst FILENAME_HEADER_REGEX_GIT = /^(---|\\+\\+\\+)\\s+[ab]\\/([^\\t\\r\\n]+)/;\nconst ALTERNATE_FILE_NAMES_GIT = /^diff --git (?:\"a\\/(.+?)\"|a\\/(.+?)) (?:\"b\\/(.+?)\"|b\\/(.+?))$/;\nconst INDEX_LINE_METADATA = /^index ([0-9a-f]+)\\.\\.([0-9a-f]+)(?: (\\d+))?$/i;\nconst MERGE_CONFLICT_START_MARKER_REGEX = /^<{7,}(?:\\s.*)?$/;\nconst MERGE_CONFLICT_BASE_MARKER_REGEX = /^\\|{7,}(?:\\s.*)?$/;\nconst MERGE_CONFLICT_SEPARATOR_MARKER_REGEX = /^={7,}$/;\nconst MERGE_CONFLICT_END_MARKER_REGEX = /^>{7,}(?:\\s.*)?$/;\nconst HEADER_PREFIX_SLOT_ID = \"header-prefix\";\nconst HEADER_METADATA_SLOT_ID = \"header-metadata\";\nconst CUSTOM_HEADER_SLOT_ID = \"header-custom\";\nconst DEFAULT_THEMES = {\n\tdark: \"pierre-dark\",\n\tlight: \"pierre-light\"\n};\nconst THEME_CSS_ATTRIBUTE = \"data-theme-css\";\nconst UNSAFE_CSS_ATTRIBUTE = \"data-unsafe-css\";\nconst CORE_CSS_ATTRIBUTE = \"data-core-css\";\nconst DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE = \"data-diffs-scrollbar-measure\";\nconst DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY = \"--diffs-scrollbar-gutter-measured\";\nconst DEFAULT_COLLAPSED_CONTEXT_THRESHOLD = 1;\nconst DEFAULT_TOKENIZE_MAX_LENGTH = 1e5;\nconst DEFAULT_VIRTUAL_FILE_METRICS = {\n\thunkLineCount: 50,\n\tlineHeight: 20,\n\tdiffHeaderHeight: 44,\n\tspacing: 8\n};\nconst DEFAULT_CODE_VIEW_FILE_METRICS = {\n\t...DEFAULT_VIRTUAL_FILE_METRICS,\n\thunkLineCount: 1\n};\nconst DEFAULT_CODE_VIEW_LAYOUT = {\n\tpaddingTop: 8,\n\tpaddingBottom: 8,\n\tgap: 8\n};\nconst DEFAULT_SMOOTH_SCROLL_SETTINGS = {\n\tomega: .015,\n\tpositionEpsilon: .5,\n\tvelocityEpsilon: .05\n};\nconst DEFAULT_EXPANDED_REGION = Object.freeze({\n\tfromStart: 0,\n\tfromEnd: 0\n});\nconst DEFAULT_RENDER_RANGE = {\n\tstartingLine: 0,\n\ttotalLines: Infinity,\n\tbufferBefore: 0,\n\tbufferAfter: 0\n};\nconst EMPTY_RENDER_RANGE = {\n\tstartingLine: 0,\n\ttotalLines: 0,\n\tbufferBefore: 0,\n\tbufferAfter: 0\n};\n\n//#endregion\nexport { ALTERNATE_FILE_NAMES_GIT, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, CUSTOM_HEADER_SLOT_ID, DEFAULT_CODE_VIEW_FILE_METRICS, DEFAULT_CODE_VIEW_LAYOUT, DEFAULT_COLLAPSED_CONTEXT_THRESHOLD, DEFAULT_EXPANDED_REGION, DEFAULT_RENDER_RANGE, DEFAULT_SMOOTH_SCROLL_SETTINGS, DEFAULT_THEMES, DEFAULT_TOKENIZE_MAX_LENGTH, DEFAULT_VIRTUAL_FILE_METRICS, DIFFS_DEVELOPMENT_BUILD, DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY, DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE, DIFFS_TAG_NAME, EMPTY_RENDER_RANGE, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID, HUNK_HEADER, INDEX_LINE_METADATA, MERGE_CONFLICT_BASE_MARKER_REGEX, MERGE_CONFLICT_END_MARKER_REGEX, MERGE_CONFLICT_SEPARATOR_MARKER_REGEX, MERGE_CONFLICT_START_MARKER_REGEX, SPLIT_WITH_NEWLINES, THEME_CSS_ATTRIBUTE, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE };\n//# sourceMappingURL=constants.js.map","//#region src/utils/cleanLastNewline.ts\nfunction cleanLastNewline(contents) {\n\tlet end = contents.length;\n\tif (contents.charCodeAt(end - 1) === 10) {\n\t\tend--;\n\t\tif (contents.charCodeAt(end - 1) === 13) end--;\n\t}\n\treturn contents.slice(0, end);\n}\n\n//#endregion\nexport { cleanLastNewline };\n//# sourceMappingURL=cleanLastNewline.js.map","//#region src/utils/detachString.ts\nconst stringDetachEncoder = new TextEncoder();\nconst stringDetachDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\nconst SURROGATE_CODE_UNIT_PATTERN = /[\\uD800-\\uDFFF]/;\nconst STRING_DETACH_INITIAL_BUFFER_SIZE = 1024;\nlet stringDetachBuffer = new Uint8Array(STRING_DETACH_INITIAL_BUFFER_SIZE);\nfunction releaseStringDetachBuffer() {\n\tif (stringDetachBuffer.length !== STRING_DETACH_INITIAL_BUFFER_SIZE) stringDetachBuffer = new Uint8Array(STRING_DETACH_INITIAL_BUFFER_SIZE);\n}\nfunction detachString(value) {\n\tif (value.length === 0) return value;\n\tif (SURROGATE_CODE_UNIT_PATTERN.test(value)) return JSON.parse(JSON.stringify(value));\n\tconst requiredByteLength = value.length * 3;\n\tif (stringDetachBuffer.length < requiredByteLength) stringDetachBuffer = new Uint8Array(requiredByteLength);\n\tconst { written } = stringDetachEncoder.encodeInto(value, stringDetachBuffer);\n\treturn stringDetachDecoder.decode(stringDetachBuffer.subarray(0, written));\n}\n\n//#endregion\nexport { detachString, releaseStringDetachBuffer };\n//# sourceMappingURL=detachString.js.map","import { ALTERNATE_FILE_NAMES_GIT, COMMIT_METADATA_SPLIT, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, GIT_DIFF_FILE_BREAK_REGEX, INDEX_LINE_METADATA } from \"../constants.js\";\nimport { cleanLastNewline } from \"./cleanLastNewline.js\";\nimport { detachString, releaseStringDetachBuffer } from \"./detachString.js\";\n\n//#region src/utils/parsePatchFiles.ts\nfunction processPatch(data, cacheKeyPrefix, throwOnError) {\n\ttry {\n\t\treturn _processPatch(data, cacheKeyPrefix, throwOnError);\n\t} finally {\n\t\treleaseStringDetachBuffer();\n\t}\n}\nfunction _processPatch(data, cacheKeyPrefix, throwOnError = false) {\n\tconst isGitDiff = isGitDiffPatch(data);\n\tconst rawFiles = isGitDiff ? splitGitDiffFiles(data) : splitUnifiedDiffFiles(data);\n\tlet patchMetadata;\n\tconst files = [];\n\tfor (const fileOrPatchMetadata of rawFiles) {\n\t\tif (isGitDiff && !GIT_DIFF_FILE_BREAK_REGEX.test(fileOrPatchMetadata)) {\n\t\t\tif (patchMetadata == null) patchMetadata = detachString(fileOrPatchMetadata);\n\t\t\telse if (throwOnError) throw Error(\"parsePatchContent: unknown file blob\");\n\t\t\telse console.error(\"parsePatchContent: unknown file blob:\", fileOrPatchMetadata);\n\t\t\tcontinue;\n\t\t} else if (!isGitDiff && !startsWithUnifiedDiffFileHeader(fileOrPatchMetadata)) {\n\t\t\tif (patchMetadata == null) patchMetadata = detachString(fileOrPatchMetadata);\n\t\t\telse if (throwOnError) throw Error(\"parsePatchContent: unknown file blob\");\n\t\t\telse console.error(\"parsePatchContent: unknown file blob:\", fileOrPatchMetadata);\n\t\t\tcontinue;\n\t\t}\n\t\tconst currentFile = _processFile(fileOrPatchMetadata, {\n\t\t\tcacheKey: cacheKeyPrefix != null ? `${cacheKeyPrefix}-${files.length}` : void 0,\n\t\t\tisGitDiff,\n\t\t\tthrowOnError\n\t\t});\n\t\tif (currentFile != null) files.push(currentFile);\n\t}\n\treturn {\n\t\tpatchMetadata,\n\t\tfiles\n\t};\n}\nfunction processFile(fileDiffString, options) {\n\ttry {\n\t\treturn _processFile(fileDiffString, options);\n\t} finally {\n\t\treleaseStringDetachBuffer();\n\t}\n}\nfunction _processFile(fileDiffString, { cacheKey, isGitDiff = GIT_DIFF_FILE_BREAK_REGEX.test(fileDiffString), oldFile, newFile, throwOnError = false } = {}) {\n\tlet lastHunkEnd = 0;\n\tconst hunks = splitAtLinePrefix(fileDiffString, \"@@ \");\n\tlet currentFile;\n\tconst isPartial = oldFile == null || newFile == null;\n\tlet deletionLineIndex = 0;\n\tlet additionLineIndex = 0;\n\tfor (const hunk of hunks) {\n\t\tconst lines = splitWithNewlines(hunk);\n\t\tconst firstLine = lines[0];\n\t\tif (firstLine == null) {\n\t\t\tif (throwOnError) throw Error(\"parsePatchContent: invalid hunk\");\n\t\t\telse console.error(\"parsePatchContent: invalid hunk\", hunk);\n\t\t\tcontinue;\n\t\t}\n\t\tconst fileHeader = parseHunkHeader(firstLine);\n\t\tlet additionLines = 0;\n\t\tlet deletionLines = 0;\n\t\tif (fileHeader == null || currentFile == null) {\n\t\t\tif (currentFile != null) {\n\t\t\t\tif (throwOnError) throw Error(\"parsePatchContent: Invalid hunk\");\n\t\t\t\telse console.error(\"parsePatchContent: Invalid hunk\", hunk);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcurrentFile = {\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"change\",\n\t\t\t\thunks: [],\n\t\t\t\tsplitLineCount: 0,\n\t\t\t\tunifiedLineCount: 0,\n\t\t\t\tisPartial,\n\t\t\t\tadditionLines: !isPartial && oldFile != null && newFile != null ? splitFileContents(newFile.contents) : [],\n\t\t\t\tdeletionLines: !isPartial && oldFile != null && newFile != null ? splitFileContents(oldFile.contents) : [],\n\t\t\t\tcacheKey: maybeDetachOptionalString(cacheKey)\n\t\t\t};\n\t\t\tif (currentFile.additionLines.length === 1 && newFile?.contents === \"\") currentFile.additionLines.length = 0;\n\t\t\tif (currentFile.deletionLines.length === 1 && oldFile?.contents === \"\") currentFile.deletionLines.length = 0;\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (line.startsWith(\"diff --git\")) {\n\t\t\t\t\tconst filenameMatch$1 = line.trim().match(ALTERNATE_FILE_NAMES_GIT);\n\t\t\t\t\tconst prevName = filenameMatch$1?.[1] ?? filenameMatch$1?.[2];\n\t\t\t\t\tconst name = filenameMatch$1?.[3] ?? filenameMatch$1?.[4];\n\t\t\t\t\tif (prevName == null || name == null) {\n\t\t\t\t\t\tif (throwOnError) throw Error(\"parsePatchContent: invalid git diff header\");\n\t\t\t\t\t\telse console.error(\"parsePatchContent: invalid git diff header\", line);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentFile.name = detachString(name.trim());\n\t\t\t\t\tif (prevName !== name) currentFile.prevName = detachString(prevName.trim());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst filenameMatch = line.startsWith(\"---\") || line.startsWith(\"+++\") ? line.match(isGitDiff ? FILENAME_HEADER_REGEX_GIT : FILENAME_HEADER_REGEX) : null;\n\t\t\t\tif (filenameMatch != null) {\n\t\t\t\t\tconst [, type, fileName] = filenameMatch;\n\t\t\t\t\tif (type === \"---\" && fileName !== \"/dev/null\") {\n\t\t\t\t\t\tconst detachedFileName = detachString(fileName.trim());\n\t\t\t\t\t\tcurrentFile.prevName = detachedFileName;\n\t\t\t\t\t\tcurrentFile.name = detachedFileName;\n\t\t\t\t\t} else if (type === \"+++\" && fileName !== \"/dev/null\") currentFile.name = detachString(fileName.trim());\n\t\t\t\t} else if (isGitDiff) {\n\t\t\t\t\tif (line.startsWith(\"new mode \")) currentFile.mode = detachString(line.slice(8).trim());\n\t\t\t\t\tif (line.startsWith(\"old mode \")) currentFile.prevMode = detachString(line.slice(8).trim());\n\t\t\t\t\tif (line.startsWith(\"new file mode\")) {\n\t\t\t\t\t\tcurrentFile.type = \"new\";\n\t\t\t\t\t\tcurrentFile.mode = detachString(line.slice(13).trim());\n\t\t\t\t\t}\n\t\t\t\t\tif (line.startsWith(\"deleted file mode\")) {\n\t\t\t\t\t\tcurrentFile.type = \"deleted\";\n\t\t\t\t\t\tcurrentFile.mode = detachString(line.slice(17).trim());\n\t\t\t\t\t}\n\t\t\t\t\tif (line.startsWith(\"similarity index\")) if (line.startsWith(\"similarity index 100%\")) currentFile.type = \"rename-pure\";\n\t\t\t\t\telse currentFile.type = \"rename-changed\";\n\t\t\t\t\tif (line.startsWith(\"index \")) {\n\t\t\t\t\t\tconst [, prevObjectId, newObjectId, mode] = line.trim().match(INDEX_LINE_METADATA) ?? [];\n\t\t\t\t\t\tif (prevObjectId != null) currentFile.prevObjectId = detachString(prevObjectId);\n\t\t\t\t\t\tif (newObjectId != null) currentFile.newObjectId = detachString(newObjectId);\n\t\t\t\t\t\tif (mode != null) currentFile.mode = detachString(mode);\n\t\t\t\t\t}\n\t\t\t\t\tif (line.startsWith(\"rename from \")) currentFile.prevName = detachString(line.slice(12).trim());\n\t\t\t\t\tif (line.startsWith(\"rename to \")) currentFile.name = detachString(line.slice(10).trim());\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tlet currentContent;\n\t\tlet lastLineType;\n\t\twhile (lines.length > 0 && (lines[lines.length - 1] === \"\\n\" || lines[lines.length - 1] === \"\\r\" || lines[lines.length - 1] === \"\\r\\n\" || lines[lines.length - 1] === \"\")) lines.pop();\n\t\tconst { additionStart, deletionStart } = fileHeader;\n\t\tdeletionLineIndex = isPartial ? deletionLineIndex : deletionStart - 1;\n\t\tadditionLineIndex = isPartial ? additionLineIndex : additionStart - 1;\n\t\tconst hunkData = {\n\t\t\tcollapsedBefore: 0,\n\t\t\tsplitLineCount: 0,\n\t\t\tsplitLineStart: 0,\n\t\t\tunifiedLineCount: 0,\n\t\t\tunifiedLineStart: 0,\n\t\t\tadditionCount: fileHeader.additionCount,\n\t\t\tadditionStart,\n\t\t\tadditionLines,\n\t\t\tdeletionCount: fileHeader.deletionCount,\n\t\t\tdeletionStart,\n\t\t\tdeletionLines,\n\t\t\tdeletionLineIndex,\n\t\t\tadditionLineIndex,\n\t\t\thunkContent: [],\n\t\t\thunkContext: maybeDetachOptionalString(fileHeader.hunkContext),\n\t\t\thunkSpecs: detachString(firstLine),\n\t\t\tnoEOFCRAdditions: false,\n\t\t\tnoEOFCRDeletions: false\n\t\t};\n\t\tlet parsedAdditionLines = 0;\n\t\tlet parsedDeletionLines = 0;\n\t\tfor (let lineIndex = 1; lineIndex < lines.length; lineIndex++) {\n\t\t\tconst rawLine = lines[lineIndex];\n\t\t\tif (parsedAdditionLines >= hunkData.additionCount && parsedDeletionLines >= hunkData.deletionCount && !rawLine.startsWith(\"\\\\\")) {\n\t\t\t\tif (throwOnError && isHunkBodyLine(rawLine) && !isFormatPatchVersionSeparator(rawLine)) throw Error(\"parsePatchContent: hunk has more lines than expected\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst firstChar = rawLine[0];\n\t\t\tif (firstChar !== \"+\" && firstChar !== \"-\" && firstChar !== \" \" && firstChar !== \"\\\\\") {\n\t\t\t\tif (throwOnError) throw Error(\"parsePatchContent: invalid hunk line\");\n\t\t\t\tconsole.error(`parseLineType: Invalid firstChar: \"${firstChar}\", full line: \"${rawLine}\"`);\n\t\t\t\tconsole.error(\"processFile: invalid rawLine:\", rawLine);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst type = parseRawLineType(firstChar);\n\t\t\tif (type === \"addition\") {\n\t\t\t\tif (throwOnError && parsedAdditionLines >= hunkData.additionCount) throw Error(\"parsePatchContent: hunk has too many addition lines\");\n\t\t\t\tconst line = getParsedLineContent(rawLine);\n\t\t\t\tif (currentContent == null || currentContent.type !== \"change\") {\n\t\t\t\t\tcurrentContent = createContentGroup(\"change\", deletionLineIndex, additionLineIndex);\n\t\t\t\t\thunkData.hunkContent.push(currentContent);\n\t\t\t\t}\n\t\t\t\tadditionLineIndex++;\n\t\t\t\tparsedAdditionLines++;\n\t\t\t\tif (isPartial) currentFile.additionLines.push(line);\n\t\t\t\tcurrentContent.additions++;\n\t\t\t\tadditionLines++;\n\t\t\t\tlastLineType = \"addition\";\n\t\t\t} else if (type === \"deletion\") {\n\t\t\t\tif (throwOnError && parsedDeletionLines >= hunkData.deletionCount) throw Error(\"parsePatchContent: hunk has too many deletion lines\");\n\t\t\t\tconst line = getParsedLineContent(rawLine);\n\t\t\t\tif (currentContent == null || currentContent.type !== \"change\") {\n\t\t\t\t\tcurrentContent = createContentGroup(\"change\", deletionLineIndex, additionLineIndex);\n\t\t\t\t\thunkData.hunkContent.push(currentContent);\n\t\t\t\t}\n\t\t\t\tdeletionLineIndex++;\n\t\t\t\tparsedDeletionLines++;\n\t\t\t\tif (isPartial) currentFile.deletionLines.push(line);\n\t\t\t\tcurrentContent.deletions++;\n\t\t\t\tdeletionLines++;\n\t\t\t\tlastLineType = \"deletion\";\n\t\t\t} else if (type === \"context\") {\n\t\t\t\tif (throwOnError && (parsedDeletionLines >= hunkData.deletionCount || parsedAdditionLines >= hunkData.additionCount)) throw Error(\"parsePatchContent: hunk has too many context lines\");\n\t\t\t\tconst line = getParsedLineContent(rawLine);\n\t\t\t\tif (currentContent == null || currentContent.type !== \"context\") {\n\t\t\t\t\tcurrentContent = createContentGroup(\"context\", deletionLineIndex, additionLineIndex);\n\t\t\t\t\thunkData.hunkContent.push(currentContent);\n\t\t\t\t}\n\t\t\t\tadditionLineIndex++;\n\t\t\t\tdeletionLineIndex++;\n\t\t\t\tparsedAdditionLines++;\n\t\t\t\tparsedDeletionLines++;\n\t\t\t\tif (isPartial) {\n\t\t\t\t\tcurrentFile.deletionLines.push(line);\n\t\t\t\t\tcurrentFile.additionLines.push(line);\n\t\t\t\t}\n\t\t\t\tcurrentContent.lines++;\n\t\t\t\tlastLineType = \"context\";\n\t\t\t} else if (type === \"metadata\" && currentContent != null) {\n\t\t\t\tif (currentContent.type === \"context\") {\n\t\t\t\t\thunkData.noEOFCRAdditions = true;\n\t\t\t\t\thunkData.noEOFCRDeletions = true;\n\t\t\t\t} else if (lastLineType === \"deletion\") hunkData.noEOFCRDeletions = true;\n\t\t\t\telse if (lastLineType === \"addition\") hunkData.noEOFCRAdditions = true;\n\t\t\t\tif (isPartial && (lastLineType === \"addition\" || lastLineType === \"context\")) {\n\t\t\t\t\tconst lastIndex = currentFile.additionLines.length - 1;\n\t\t\t\t\tif (lastIndex >= 0) currentFile.additionLines[lastIndex] = cleanLastNewline(currentFile.additionLines[lastIndex]);\n\t\t\t\t}\n\t\t\t\tif (isPartial && (lastLineType === \"deletion\" || lastLineType === \"context\")) {\n\t\t\t\t\tconst lastIndex = currentFile.deletionLines.length - 1;\n\t\t\t\t\tif (lastIndex >= 0) currentFile.deletionLines[lastIndex] = cleanLastNewline(currentFile.deletionLines[lastIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (throwOnError && (parsedAdditionLines !== hunkData.additionCount || parsedDeletionLines !== hunkData.deletionCount)) throw Error(\"parsePatchContent: hunk line count mismatch\");\n\t\thunkData.additionLines = additionLines;\n\t\thunkData.deletionLines = deletionLines;\n\t\thunkData.collapsedBefore = Math.max(hunkData.additionStart - 1 - lastHunkEnd, 0);\n\t\tcurrentFile.hunks.push(hunkData);\n\t\tlastHunkEnd = hunkData.additionStart + hunkData.additionCount - 1;\n\t\tfor (const content of hunkData.hunkContent) if (content.type === \"context\") {\n\t\t\thunkData.splitLineCount += content.lines;\n\t\t\thunkData.unifiedLineCount += content.lines;\n\t\t} else {\n\t\t\thunkData.splitLineCount += Math.max(content.additions, content.deletions);\n\t\t\thunkData.unifiedLineCount += content.deletions + content.additions;\n\t\t}\n\t\thunkData.splitLineStart = currentFile.splitLineCount + hunkData.collapsedBefore;\n\t\thunkData.unifiedLineStart = currentFile.unifiedLineCount + hunkData.collapsedBefore;\n\t\tcurrentFile.splitLineCount += hunkData.collapsedBefore + hunkData.splitLineCount;\n\t\tcurrentFile.unifiedLineCount += hunkData.collapsedBefore + hunkData.unifiedLineCount;\n\t}\n\tif (currentFile == null) return;\n\tif (throwOnError && isPartial && !isGitDiff && currentFile.hunks.length === 0) throw Error(\"parsePatchContent: unified file has no hunks\");\n\tif (currentFile.hunks.length > 0 && !isPartial && currentFile.additionLines.length > 0 && currentFile.deletionLines.length > 0) {\n\t\tconst lastHunk = currentFile.hunks[currentFile.hunks.length - 1];\n\t\tconst lastHunkEnd$1 = lastHunk.additionStart + lastHunk.additionCount - 1;\n\t\tconst totalFileLines = currentFile.additionLines.length;\n\t\tconst collapsedAfter = Math.max(totalFileLines - lastHunkEnd$1, 0);\n\t\tcurrentFile.splitLineCount += collapsedAfter;\n\t\tcurrentFile.unifiedLineCount += collapsedAfter;\n\t}\n\tif (!isGitDiff) {\n\t\tif (currentFile.prevName != null && currentFile.name !== currentFile.prevName) if (currentFile.hunks.length > 0) currentFile.type = \"rename-changed\";\n\t\telse currentFile.type = \"rename-pure\";\n\t\telse if ((oldFile == null || oldFile.contents === \"\") && newFile != null && newFile.contents !== \"\") currentFile.type = \"new\";\n\t\telse if (oldFile != null && oldFile.contents !== \"\" && (newFile == null || newFile.contents === \"\")) currentFile.type = \"deleted\";\n\t}\n\tif (currentFile.type !== \"rename-pure\" && currentFile.type !== \"rename-changed\") currentFile.prevName = void 0;\n\treturn currentFile;\n}\n/**\n* Parses a patch file string into an array of parsed patches.\n*\n* @param data - The raw patch file content (supports multi-commit patches)\n* @param cacheKeyPrefix - Optional prefix for generating cache keys. When provided,\n*   each file in the patch will get a cache key in the format `prefix-patchIndex-fileIndex`.\n*   This enables caching of rendered diff results in the worker pool.\n*/\nfunction parsePatchFiles(data, cacheKeyPrefix, throwOnError = false) {\n\tconst patches = [];\n\tconst rawPatches = hasCommitMetadataBoundary(data) ? data.split(COMMIT_METADATA_SPLIT) : [data];\n\tfor (const patch of rawPatches) try {\n\t\tpatches.push(processPatch(patch, cacheKeyPrefix != null ? `${cacheKeyPrefix}-${patches.length}` : void 0, throwOnError));\n\t} catch (error) {\n\t\tif (throwOnError) throw error;\n\t\telse console.error(error);\n\t}\n\treturn patches;\n}\nfunction hasCommitMetadataBoundary(data) {\n\treturn data.startsWith(\"From \") || data.includes(\"\\nFrom \");\n}\nfunction splitFileContents(contents) {\n\tconst lines = splitWithNewlines(contents);\n\tfor (let index = 0; index < lines.length; index++) lines[index] = detachString(lines[index]);\n\treturn lines;\n}\nfunction splitWithNewlines(contents) {\n\tif (contents.length === 0) return [\"\"];\n\tconst lines = [];\n\tlet startIndex = 0;\n\tfor (;;) {\n\t\tconst newlineIndex = contents.indexOf(\"\\n\", startIndex);\n\t\tif (newlineIndex === -1) break;\n\t\tlines.push(contents.slice(startIndex, newlineIndex + 1));\n\t\tstartIndex = newlineIndex + 1;\n\t}\n\tif (startIndex < contents.length) lines.push(contents.slice(startIndex));\n\treturn lines;\n}\nfunction splitGitDiffFiles(contents) {\n\treturn splitAtLinePrefix(contents, \"diff --git\");\n}\nfunction splitUnifiedDiffFiles(contents) {\n\tif (contents.length === 0) return [\"\"];\n\tconst parts = [];\n\tlet partStartIndex = 0;\n\tlet lineStartIndex = 0;\n\tlet remainingDeletionLines = 0;\n\tlet remainingAdditionLines = 0;\n\tlet hasOpenedUnifiedFile = false;\n\twhile (lineStartIndex < contents.length) {\n\t\tconst nextLineStartIndex = getNextLineStartIndex(contents, lineStartIndex);\n\t\tif (remainingDeletionLines <= 0 && remainingAdditionLines <= 0) {\n\t\t\tif (isUnifiedDiffFileHeaderAt(contents, lineStartIndex)) {\n\t\t\t\tif (lineStartIndex > partStartIndex) parts.push(contents.slice(partStartIndex, lineStartIndex));\n\t\t\t\tpartStartIndex = lineStartIndex;\n\t\t\t\thasOpenedUnifiedFile = true;\n\t\t\t\tlineStartIndex = getNextLineStartIndex(contents, nextLineStartIndex);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (hasOpenedUnifiedFile && contents.startsWith(\"@@ -\", lineStartIndex)) {\n\t\t\t\tconst fileHeader = parseHunkHeader(contents.slice(lineStartIndex, nextLineStartIndex));\n\t\t\t\tif (fileHeader != null) {\n\t\t\t\t\tremainingDeletionLines = fileHeader.deletionCount;\n\t\t\t\t\tremainingAdditionLines = fileHeader.additionCount;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlineStartIndex = nextLineStartIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tconst firstChar = contents[lineStartIndex];\n\t\tif (firstChar === \"\\\\\") {\n\t\t\tlineStartIndex = nextLineStartIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tif (firstChar === \" \") {\n\t\t\tremainingDeletionLines = Math.max(remainingDeletionLines - 1, 0);\n\t\t\tremainingAdditionLines = Math.max(remainingAdditionLines - 1, 0);\n\t\t} else if (firstChar === \"-\") remainingDeletionLines = Math.max(remainingDeletionLines - 1, 0);\n\t\telse if (firstChar === \"+\") remainingAdditionLines = Math.max(remainingAdditionLines - 1, 0);\n\t\tlineStartIndex = nextLineStartIndex;\n\t}\n\tparts.push(contents.slice(partStartIndex));\n\treturn parts;\n}\nfunction startsWithUnifiedDiffFileHeader(contents) {\n\treturn isUnifiedDiffFileHeaderAt(contents, 0);\n}\nfunction isUnifiedDiffFileHeaderAt(contents, lineStartIndex) {\n\tconst nextLineStartIndex = getNextLineStartIndex(contents, lineStartIndex);\n\treturn isUnifiedDiffHeaderLineAt(contents, lineStartIndex, \"---\") && isUnifiedDiffHeaderLineAt(contents, nextLineStartIndex, \"+++\");\n}\nfunction isUnifiedDiffHeaderLineAt(contents, lineStartIndex, prefix) {\n\tif (!contents.startsWith(prefix, lineStartIndex)) return false;\n\tconst separator = contents[lineStartIndex + prefix.length];\n\tif (separator !== \" \" && separator !== \"\t\") return false;\n\tfor (let index = lineStartIndex + prefix.length + 1; index < contents.length; index++) {\n\t\tconst char = contents[index];\n\t\tif (char === \"\\n\" || char === \"\\r\") break;\n\t\tif (char !== \" \" && char !== \"\t\") return true;\n\t}\n\treturn false;\n}\nfunction getNextLineStartIndex(contents, lineStartIndex) {\n\tconst newlineIndex = contents.indexOf(\"\\n\", lineStartIndex);\n\treturn newlineIndex === -1 ? contents.length : newlineIndex + 1;\n}\nfunction isHunkBodyLine(line) {\n\tconst firstChar = line[0];\n\treturn firstChar === \"+\" || firstChar === \"-\" || firstChar === \" \";\n}\nfunction isFormatPatchVersionSeparator(line) {\n\tif (!line.startsWith(\"--\")) return false;\n\tfor (let index = 2; index < line.length; index++) {\n\t\tconst char = line[index];\n\t\tif (char !== \" \" && char !== \"\t\" && char !== \"\\n\" && char !== \"\\r\") return false;\n\t}\n\treturn true;\n}\nfunction parseHunkHeader(line) {\n\tif (!line.startsWith(\"@@ -\")) return;\n\tlet index = 4;\n\tconst deletionStartResult = readPositiveInteger(line, index);\n\tif (deletionStartResult == null) return;\n\tconst deletionStart = deletionStartResult.value;\n\tindex = deletionStartResult.endIndex;\n\tlet deletionCount = 1;\n\tif (line[index] === \",\") {\n\t\tconst deletionCountResult = readPositiveInteger(line, index + 1);\n\t\tif (deletionCountResult == null) return;\n\t\tdeletionCount = deletionCountResult.value;\n\t\tindex = deletionCountResult.endIndex;\n\t}\n\tif (line[index] !== \" \" || line[index + 1] !== \"+\") return;\n\tindex += 2;\n\tconst additionStartResult = readPositiveInteger(line, index);\n\tif (additionStartResult == null) return;\n\tconst additionStart = additionStartResult.value;\n\tindex = additionStartResult.endIndex;\n\tlet additionCount = 1;\n\tif (line[index] === \",\") {\n\t\tconst additionCountResult = readPositiveInteger(line, index + 1);\n\t\tif (additionCountResult == null) return;\n\t\tadditionCount = additionCountResult.value;\n\t\tindex = additionCountResult.endIndex;\n\t}\n\tif (line[index] !== \" \" || line[index + 1] !== \"@\" || line[index + 2] !== \"@\") return;\n\tlet hunkContext;\n\tconst contextStartIndex = index + 3;\n\tif (line[contextStartIndex] === \" \") hunkContext = trimLineEnd(line.slice(contextStartIndex + 1));\n\treturn {\n\t\tadditionCount,\n\t\tadditionStart,\n\t\tdeletionCount,\n\t\tdeletionStart,\n\t\thunkContext\n\t};\n}\nfunction readPositiveInteger(value, startIndex) {\n\tlet index = startIndex;\n\tlet parsedValue = 0;\n\tfor (; index < value.length; index++) {\n\t\tconst digit = value.charCodeAt(index) - 48;\n\t\tif (digit < 0 || digit > 9) break;\n\t\tparsedValue = parsedValue * 10 + digit;\n\t}\n\tif (index === startIndex) return;\n\treturn {\n\t\tvalue: parsedValue,\n\t\tendIndex: index\n\t};\n}\nfunction trimLineEnd(value) {\n\tif (value.endsWith(\"\\r\\n\")) return value.slice(0, -2);\n\tif (value.endsWith(\"\\n\")) return value.slice(0, -1);\n\treturn value;\n}\nfunction isGitDiffPatch(data) {\n\treturn data.startsWith(\"diff --git\") || data.includes(\"\\ndiff --git\");\n}\nfunction splitAtLinePrefix(contents, prefix) {\n\tif (contents.length === 0) return [\"\"];\n\tconst newlinePrefix = `\\n${prefix}`;\n\tconst firstBoundaryIndex = contents.startsWith(prefix) ? 0 : findLinePrefixIndex(contents, newlinePrefix, 0);\n\tif (firstBoundaryIndex === -1) return [contents];\n\tconst parts = [];\n\tif (firstBoundaryIndex > 0) parts.push(contents.slice(0, firstBoundaryIndex));\n\tlet startIndex = firstBoundaryIndex;\n\tfor (;;) {\n\t\tconst nextBoundaryIndex = findLinePrefixIndex(contents, newlinePrefix, startIndex + 1);\n\t\tif (nextBoundaryIndex === -1) break;\n\t\tparts.push(contents.slice(startIndex, nextBoundaryIndex));\n\t\tstartIndex = nextBoundaryIndex;\n\t}\n\tparts.push(contents.slice(startIndex));\n\treturn parts;\n}\nfunction findLinePrefixIndex(contents, newlinePrefix, fromIndex) {\n\tconst index = contents.indexOf(newlinePrefix, fromIndex);\n\treturn index === -1 ? -1 : index + 1;\n}\nfunction maybeDetachOptionalString(value) {\n\treturn value == null ? value : detachString(value);\n}\nfunction parseRawLineType(firstChar) {\n\treturn firstChar === \" \" ? \"context\" : firstChar === \"\\\\\" ? \"metadata\" : firstChar === \"+\" ? \"addition\" : \"deletion\";\n}\nfunction getParsedLineContent(rawLine) {\n\tconst processedLine = rawLine.slice(1);\n\treturn detachString(processedLine === \"\" ? \"\\n\" : processedLine);\n}\nfunction createContentGroup(type, deletionLineIndex, additionLineIndex) {\n\tif (type === \"change\") return {\n\t\ttype: \"change\",\n\t\tadditions: 0,\n\t\tdeletions: 0,\n\t\tadditionLineIndex,\n\t\tdeletionLineIndex\n\t};\n\treturn {\n\t\ttype: \"context\",\n\t\tlines: 0,\n\t\tadditionLineIndex,\n\t\tdeletionLineIndex\n\t};\n}\n\n//#endregion\nexport { parsePatchFiles, processFile, processPatch };\n//# sourceMappingURL=parsePatchFiles.js.map","import { parsePatchFiles } from \"@pierre/diffs\";\n\nexport interface TurnDiffFileSummary {\n  readonly path: string;\n  readonly additions: number;\n  readonly deletions: number;\n}\n\nexport function parseTurnDiffFilesFromUnifiedDiff(\n  diff: string,\n): ReadonlyArray<TurnDiffFileSummary> {\n  const normalized = diff.replace(/\\r\\n/g, \"\\n\").trim();\n  if (normalized.length === 0) {\n    return [];\n  }\n\n  const parsedPatches = parsePatchFiles(normalized);\n  const files = parsedPatches.flatMap((patch) =>\n    patch.files.map((file) => ({\n      path: file.name,\n      additions: file.hunks.reduce((total, hunk) => total + hunk.additionLines, 0),\n      deletions: file.hunks.reduce((total, hunk) => total + hunk.deletionLines, 0),\n    })),\n  );\n\n  return files.toSorted((left, right) => left.path.localeCompare(right.path));\n}\n","import type { ProviderRuntimeEvent } from \"@salchi/contracts\";\n\nimport { parseTurnDiffFilesFromUnifiedDiff } from \"./Diffs.ts\";\n\nexport const MAX_TOUCHED_PATHS_PER_EVENT = 50;\n\nexport type TouchedPathSnapshotKind = \"edit-snapshot\" | \"path-only\";\n\nexport interface ExtractedTouchedPath {\n  readonly path: string;\n  readonly snapshotKind: TouchedPathSnapshotKind;\n}\n\nconst PATH_KEYS = [\n  \"path\",\n  \"filePath\",\n  \"file_path\",\n  \"notebook_path\",\n  \"relativePath\",\n  \"filename\",\n  \"newPath\",\n  \"oldPath\",\n] as const;\n\nconst NESTED_KEYS = [\n  \"item\",\n  \"result\",\n  \"input\",\n  \"data\",\n  \"changes\",\n  \"files\",\n  \"edits\",\n  \"patch\",\n  \"patches\",\n  \"operations\",\n  \"locations\",\n] as const;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : null;\n}\n\nfunction asTrimmedString(value: unknown): string | null {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction pushPath(target: string[], seen: Set<string>, value: unknown) {\n  const normalized = asTrimmedString(value);\n  if (!normalized || seen.has(normalized) || target.length >= MAX_TOUCHED_PATHS_PER_EVENT) {\n    return;\n  }\n  seen.add(normalized);\n  target.push(normalized);\n}\n\nfunction collectTouchedPaths(value: unknown, target: string[], seen: Set<string>, depth: number) {\n  if (depth > 4 || target.length >= MAX_TOUCHED_PATHS_PER_EVENT) {\n    return;\n  }\n\n  if (Array.isArray(value)) {\n    for (const entry of value) {\n      collectTouchedPaths(entry, target, seen, depth + 1);\n      if (target.length >= MAX_TOUCHED_PATHS_PER_EVENT) {\n        return;\n      }\n    }\n    return;\n  }\n\n  const record = asRecord(value);\n  if (!record) {\n    return;\n  }\n\n  for (const key of PATH_KEYS) {\n    pushPath(target, seen, record[key]);\n  }\n\n  for (const key of NESTED_KEYS) {\n    if (!(key in record)) {\n      continue;\n    }\n    collectTouchedPaths(record[key], target, seen, depth + 1);\n    if (target.length >= MAX_TOUCHED_PATHS_PER_EVENT) {\n      return;\n    }\n  }\n}\n\nfunction extractPathsFromValues(values: ReadonlyArray<unknown>): ReadonlyArray<string> {\n  const paths: string[] = [];\n  const seen = new Set<string>();\n  for (const value of values) {\n    collectTouchedPaths(value, paths, seen, 0);\n    if (paths.length >= MAX_TOUCHED_PATHS_PER_EVENT) {\n      break;\n    }\n  }\n  return paths;\n}\n\nfunction isFileChangeApprovalRequest(requestType: string): boolean {\n  return requestType === \"file_change_approval\" || requestType === \"apply_patch_approval\";\n}\n\nexport function extractTouchedPathsFromRuntimeEvent(\n  event: ProviderRuntimeEvent,\n): ReadonlyArray<ExtractedTouchedPath> {\n  if (\n    (event.type === \"item.started\" ||\n      event.type === \"item.updated\" ||\n      event.type === \"item.completed\") &&\n    event.payload.itemType === \"file_change\"\n  ) {\n    return extractPathsFromValues([event.payload.data, event.payload]).map((pathValue) => ({\n      path: pathValue,\n      snapshotKind: \"edit-snapshot\" as const,\n    }));\n  }\n\n  if (\n    (event.type === \"request.opened\" || event.type === \"request.resolved\") &&\n    isFileChangeApprovalRequest(event.payload.requestType)\n  ) {\n    const values =\n      event.type === \"request.opened\"\n        ? [event.payload.args, event.payload]\n        : [event.payload.resolution, event.payload];\n    return extractPathsFromValues(values).map((pathValue) => ({\n      path: pathValue,\n      snapshotKind: \"edit-snapshot\" as const,\n    }));\n  }\n\n  if (event.type === \"turn.diff.updated\") {\n    return parseTurnDiffFilesFromUnifiedDiff(event.payload.unifiedDiff)\n      .slice(0, MAX_TOUCHED_PATHS_PER_EVENT)\n      .map((file) => ({\n        path: file.path,\n        snapshotKind: \"path-only\" as const,\n      }));\n  }\n\n  return [];\n}\n\nfunction normalizeSlashes(value: string): string {\n  return value.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction isAbsolutePath(value: string): boolean {\n  return value.startsWith(\"/\");\n}\n\nfunction relativeToWorkspace(absolutePath: string, cwd: string): string | null {\n  const normalizedPath = normalizeSlashes(absolutePath);\n  const normalizedCwd = normalizeSlashes(cwd).replace(/\\/+$/, \"\");\n  if (normalizedPath === normalizedCwd) {\n    return \"\";\n  }\n  const cwdPrefix = `${normalizedCwd}/`;\n  return normalizedPath.startsWith(cwdPrefix) ? normalizedPath.slice(cwdPrefix.length) : null;\n}\n\nfunction normalizePosixRelativePath(value: string): string {\n  const parts: string[] = [];\n  for (const part of value.split(\"/\")) {\n    if (part.length === 0 || part === \".\") {\n      continue;\n    }\n    if (part === \"..\") {\n      if (parts.length > 0 && parts[parts.length - 1] !== \"..\") {\n        parts.pop();\n      } else {\n        parts.push(part);\n      }\n      continue;\n    }\n    parts.push(part);\n  }\n  return parts.join(\"/\");\n}\n\nexport function normalizeTouchedPath(pathValue: string, cwd: string): string | null {\n  const trimmed = pathValue.trim();\n  if (trimmed.length === 0 || trimmed.includes(\"\\n\") || trimmed.includes(\"\\0\")) {\n    return null;\n  }\n\n  const relativePath = isAbsolutePath(trimmed) ? relativeToWorkspace(trimmed, cwd) : trimmed;\n  if (relativePath === null) {\n    return null;\n  }\n  const slashPath = normalizeSlashes(relativePath).replace(/^\\.\\/+/, \"\");\n  const normalized = normalizePosixRelativePath(slashPath);\n  if (\n    normalized.length === 0 ||\n    normalized === \"..\" ||\n    normalized.startsWith(\"../\") ||\n    normalized.startsWith(\"/\")\n  ) {\n    return null;\n  }\n  return normalized;\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { createHash } from \"node:crypto\";\n\nimport {\n  ApprovalRequestId,\n  type AssistantDeliveryMode,\n  CHAT_IMAGE_ATTACHMENT_MAX_BYTES,\n  type ChatAttachment,\n  CommandId,\n  EventId,\n  MessageId,\n  type OrchestrationEvent,\n  type OrchestrationMessage,\n  type OrchestrationProposedPlanId,\n  CheckpointRef,\n  isToolLifecycleItemType,\n  ThreadId,\n  type ToolLifecycleItemType,\n  type ThreadTokenUsageSnapshot,\n  TurnId,\n  type OrchestrationCheckpointSummary,\n  type OrchestrationProposedPlan,\n  type OrchestrationThread,\n  type OrchestrationThreadActivity,\n  type OrchestrationThreadShell,\n  type ProviderRuntimeEvent,\n  ProjectId,\n} from \"@salchi/contracts\";\nimport * as Cache from \"effect/Cache\";\nimport * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Stream from \"effect/Stream\";\nimport { makeDrainableWorker } from \"@salchi/shared/DrainableWorker\";\nimport { isRecord } from \"@salchi/shared/Record\";\n\nimport { ProviderService } from \"../../provider/Services/ProviderService.ts\";\nimport { ProjectionTurnRepository } from \"../../persistence/Services/ProjectionTurns.ts\";\nimport { ProjectionTurnRepositoryLive } from \"../../persistence/Layers/ProjectionTurns.ts\";\nimport { TurnFileSnapshots } from \"../../persistence/Services/TurnFileSnapshots.ts\";\nimport { TurnFileSnapshotsLive } from \"../../persistence/Layers/TurnFileSnapshots.ts\";\nimport { isGitRepository } from \"../../git/Utils.ts\";\nimport { CheckpointStore } from \"../../checkpointing/Services/CheckpointStore.ts\";\nimport {\n  extractTouchedPathsFromRuntimeEvent,\n  normalizeTouchedPath,\n} from \"../../checkpointing/TouchedPaths.ts\";\nimport { OrchestrationEngineService } from \"../Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"../Services/ProjectionSnapshotQuery.ts\";\nimport {\n  ProviderRuntimeIngestionService,\n  type ProviderRuntimeIngestionShape,\n} from \"../Services/ProviderRuntimeIngestion.ts\";\nimport { ServerSettingsService } from \"../../serverSettings.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport {\n  createAttachmentId,\n  createStableAttachmentId,\n  resolveAttachmentPath,\n} from \"../../attachmentStore.ts\";\nimport {\n  imageMimeTypeFromFileName,\n  inferImageExtension,\n  parseBase64DataUrl,\n} from \"../../imageMime.ts\";\nimport { WorkspacePaths } from \"../../workspace/Services/WorkspacePaths.ts\";\n\nconst providerTurnKey = (threadId: ThreadId, turnId: TurnId) => `${threadId}:${turnId}`;\n\ninterface AssistantSegmentState {\n  baseKey: string;\n  nextSegmentIndex: number;\n  activeMessageId: MessageId | null;\n}\n\nconst TURN_MESSAGE_IDS_BY_TURN_CACHE_CAPACITY = 10_000;\nconst TURN_MESSAGE_IDS_BY_TURN_TTL = Duration.minutes(120);\nconst BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_CACHE_CAPACITY = 20_000;\nconst BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_TTL = Duration.minutes(120);\nconst BUFFERED_PROPOSED_PLAN_BY_ID_CACHE_CAPACITY = 10_000;\nconst BUFFERED_PROPOSED_PLAN_BY_ID_TTL = Duration.minutes(120);\nconst MAX_BUFFERED_ASSISTANT_CHARS = 24_000;\nconst STRICT_PROVIDER_LIFECYCLE_GUARD = process.env.SALCHI_STRICT_PROVIDER_LIFECYCLE_GUARD !== \"0\";\n\ntype TurnStartRequestedDomainEvent = Extract<\n  OrchestrationEvent,\n  { type: \"thread.turn-start-requested\" }\n>;\n\ntype RuntimeIngestionInput =\n  | {\n      source: \"runtime\";\n      event: ProviderRuntimeEvent;\n    }\n  | {\n      source: \"domain\";\n      event: TurnStartRequestedDomainEvent;\n    };\n\nfunction toTurnId(value: TurnId | string | undefined): TurnId | undefined {\n  return value === undefined ? undefined : TurnId.make(String(value));\n}\n\nfunction toApprovalRequestId(value: string | undefined): ApprovalRequestId | undefined {\n  return value === undefined ? undefined : ApprovalRequestId.make(value);\n}\n\nfunction sameId(left: string | null | undefined, right: string | null | undefined): boolean {\n  if (left === null || left === undefined || right === null || right === undefined) {\n    return false;\n  }\n  return left === right;\n}\n\nfunction subagentDisplayName(value: string | null | undefined): string | undefined {\n  const trimmed = value?.trim();\n  if (!trimmed) {\n    return undefined;\n  }\n\n  const withoutPrefix = trimmed.replace(/^subagent:\\s*/i, \"\").trim();\n  const rawCandidate = withoutPrefix || trimmed;\n  const basename =\n    rawCandidate\n      .split(/[\\\\/]/)\n      .map((segment) => segment.trim())\n      .findLast((segment) => segment.length > 0) ?? rawCandidate;\n  const candidate = basename.replace(/\\.[^.]+$/, \"\").trim() || basename;\n  return /^(default|sub-?agent)$/i.test(candidate) ? undefined : candidate;\n}\n\nfunction materializedSubagentTitle(input: {\n  readonly role?: string | null | undefined;\n  readonly nickname?: string | null | undefined;\n  readonly path?: string | null | undefined;\n}): string | undefined {\n  return (\n    subagentDisplayName(input.nickname) ??\n    subagentDisplayName(input.role) ??\n    subagentDisplayName(input.path)\n  );\n}\n\nfunction isSubagentThreadSpawnedActivityFor(\n  activity: OrchestrationThreadActivity,\n  input: {\n    readonly threadId?: ThreadId | undefined;\n    readonly providerThreadId?: string | undefined;\n  },\n): boolean {\n  if (activity.kind !== \"subagent.thread.spawned\" || !isRecord(activity.payload)) {\n    return false;\n  }\n\n  const payloadProviderThreadId =\n    typeof activity.payload.providerThreadId === \"string\"\n      ? activity.payload.providerThreadId.trim()\n      : \"\";\n  const payloadThreadId =\n    typeof activity.payload.threadId === \"string\" ? activity.payload.threadId.trim() : \"\";\n  const threadId = input.threadId ? String(input.threadId).trim() : \"\";\n  const providerThreadId = input.providerThreadId?.trim() ?? \"\";\n\n  return (\n    (threadId.length > 0 && payloadThreadId === threadId) ||\n    (providerThreadId.length > 0 && payloadProviderThreadId === providerThreadId) ||\n    (providerThreadId.length > 0 && payloadThreadId === providerThreadId)\n  );\n}\n\nfunction isIndependentThreadCreatedActivityFor(\n  activity: OrchestrationThreadActivity,\n  input: {\n    readonly threadId: ThreadId;\n    readonly providerThreadId?: string | undefined;\n  },\n): boolean {\n  if (activity.kind !== \"thread.created\" || !isRecord(activity.payload)) {\n    return false;\n  }\n\n  const payloadThreadId =\n    typeof activity.payload.threadId === \"string\" ? activity.payload.threadId.trim() : \"\";\n  const payloadProviderThreadId =\n    typeof activity.payload.providerThreadId === \"string\"\n      ? activity.payload.providerThreadId.trim()\n      : \"\";\n  const threadId = String(input.threadId).trim();\n  const providerThreadId = input.providerThreadId?.trim() ?? \"\";\n\n  return (\n    payloadThreadId === threadId ||\n    (providerThreadId.length > 0 && payloadProviderThreadId === providerThreadId)\n  );\n}\n\nfunction providerThreadIdFromRuntimeEvent(event: ProviderRuntimeEvent): string | undefined {\n  const payload = isRecord(event.raw?.payload) ? event.raw.payload : null;\n  const rawThreadId = payload && typeof payload.threadId === \"string\" ? payload.threadId : null;\n  const trimmed = rawThreadId?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction hasAssistantMessageForTurn(\n  messages: ReadonlyArray<OrchestrationMessage>,\n  turnId: TurnId,\n  options?: { readonly streamingOnly?: boolean },\n): boolean {\n  for (let index = 0; index < messages.length; index += 1) {\n    const message = messages[index];\n    if (!message) {\n      continue;\n    }\n    if (message.role !== \"assistant\" || message.turnId !== turnId) {\n      continue;\n    }\n    if (options?.streamingOnly === true && !message.streaming) {\n      continue;\n    }\n    return true;\n  }\n  return false;\n}\n\nfunction findMessageById(\n  messages: ReadonlyArray<OrchestrationMessage>,\n  messageId: MessageId,\n): OrchestrationMessage | undefined {\n  for (let index = 0; index < messages.length; index += 1) {\n    const message = messages[index];\n    if (message?.id === messageId) {\n      return message;\n    }\n  }\n  return undefined;\n}\n\nfunction findProposedPlanById(\n  proposedPlans: ReadonlyArray<\n    Pick<OrchestrationProposedPlan, \"id\" | \"createdAt\" | \"implementedAt\" | \"implementationThreadId\">\n  >,\n  planId: string,\n):\n  | Pick<OrchestrationProposedPlan, \"id\" | \"createdAt\" | \"implementedAt\" | \"implementationThreadId\">\n  | undefined {\n  for (let index = 0; index < proposedPlans.length; index += 1) {\n    const proposedPlan = proposedPlans[index];\n    if (proposedPlan?.id === planId) {\n      return proposedPlan;\n    }\n  }\n  return undefined;\n}\n\nfunction hasCheckpointForTurn(\n  checkpoints: ReadonlyArray<OrchestrationCheckpointSummary>,\n  turnId: TurnId,\n): boolean {\n  for (let index = 0; index < checkpoints.length; index += 1) {\n    if (checkpoints[index]?.turnId === turnId) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction maxCheckpointTurnCount(\n  checkpoints: ReadonlyArray<OrchestrationCheckpointSummary>,\n): number {\n  let maxTurnCount = 0;\n  for (let index = 0; index < checkpoints.length; index += 1) {\n    const checkpoint = checkpoints[index];\n    if (checkpoint && checkpoint.checkpointTurnCount > maxTurnCount) {\n      maxTurnCount = checkpoint.checkpointTurnCount;\n    }\n  }\n  return maxTurnCount;\n}\n\nfunction truncateDetail(value: string, limit = 180): string {\n  return value.length > limit ? `${value.slice(0, limit - 3)}...` : value;\n}\n\nfunction normalizeProposedPlanMarkdown(planMarkdown: string | undefined): string | undefined {\n  const trimmed = planMarkdown?.trim();\n  if (!trimmed) {\n    return undefined;\n  }\n  return trimmed;\n}\n\nfunction hasRenderableAssistantText(text: string | undefined): boolean {\n  return (text?.trim().length ?? 0) > 0;\n}\n\nfunction proposedPlanIdForTurn(threadId: ThreadId, turnId: TurnId): string {\n  return `plan:${threadId}:turn:${turnId}`;\n}\n\nfunction proposedPlanIdFromEvent(\n  event: ProviderRuntimeEvent,\n  threadId: ThreadId,\n  packedTurnId?: TurnId,\n): string {\n  const turnId = packedTurnId ?? toTurnId(event.turnId);\n  if (turnId) {\n    return proposedPlanIdForTurn(threadId, turnId);\n  }\n  if (event.itemId) {\n    return `plan:${threadId}:item:${event.itemId}`;\n  }\n  return `plan:${threadId}:event:${event.eventId}`;\n}\n\nfunction assistantSegmentBaseKeyFromEvent(event: ProviderRuntimeEvent): string {\n  return String(event.itemId ?? event.turnId ?? event.eventId);\n}\n\nfunction assistantSegmentMessageId(baseKey: string, segmentIndex: number): MessageId {\n  return MessageId.make(\n    segmentIndex === 0 ? `assistant:${baseKey}` : `assistant:${baseKey}:segment:${segmentIndex}`,\n  );\n}\nfunction buildContextWindowActivityPayload(\n  event: ProviderRuntimeEvent,\n): ThreadTokenUsageSnapshot | undefined {\n  if (event.type !== \"thread.token-usage.updated\" || event.payload.usage.usedTokens <= 0) {\n    return undefined;\n  }\n  return event.payload.usage;\n}\n\nfunction normalizeRuntimeTurnState(\n  value: string | undefined,\n): \"completed\" | \"failed\" | \"interrupted\" | \"cancelled\" {\n  switch (value) {\n    case \"failed\":\n    case \"interrupted\":\n    case \"cancelled\":\n    case \"completed\":\n      return value;\n    default:\n      return \"completed\";\n  }\n}\n\nfunction orchestrationSessionStatusFromRuntimeState(\n  state: \"starting\" | \"running\" | \"waiting\" | \"ready\" | \"interrupted\" | \"stopped\" | \"error\",\n): \"starting\" | \"running\" | \"ready\" | \"interrupted\" | \"stopped\" | \"error\" {\n  switch (state) {\n    case \"starting\":\n      return \"starting\";\n    case \"running\":\n    case \"waiting\":\n      return \"running\";\n    case \"ready\":\n      return \"ready\";\n    case \"interrupted\":\n      return \"interrupted\";\n    case \"stopped\":\n      return \"stopped\";\n    case \"error\":\n      return \"error\";\n  }\n}\n\nfunction requestKindFromCanonicalRequestType(\n  requestType: string | undefined,\n): \"command\" | \"file-read\" | \"file-change\" | undefined {\n  switch (requestType) {\n    case \"command_execution_approval\":\n    case \"exec_command_approval\":\n      return \"command\";\n    case \"file_read_approval\":\n      return \"file-read\";\n    case \"file_change_approval\":\n    case \"apply_patch_approval\":\n      return \"file-change\";\n    default:\n      return undefined;\n  }\n}\n\nfunction asPlainRecord(value: unknown): Record<string, unknown> | null {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : null;\n}\n\nfunction omitStringResult(record: Record<string, unknown>): Record<string, unknown> {\n  if (typeof record.result !== \"string\") {\n    return record;\n  }\n  const { result: _result, ...rest } = record;\n  return rest;\n}\n\nfunction sanitizeImageViewToolData(data: unknown): unknown {\n  const record = asPlainRecord(data);\n  if (!record) {\n    return data;\n  }\n\n  const sanitizedRecord = omitStringResult(record);\n  const item = asPlainRecord(sanitizedRecord.item);\n  if (!item) {\n    return sanitizedRecord;\n  }\n\n  const sanitizedItem = omitStringResult(item);\n  if (sanitizedItem === item && sanitizedRecord === record) {\n    return data;\n  }\n\n  return {\n    ...sanitizedRecord,\n    item: sanitizedItem,\n  };\n}\n\nfunction toolActivityDataPayload(\n  itemType: ToolLifecycleItemType,\n  data: unknown,\n): { readonly data?: unknown } {\n  if (data === undefined) {\n    return {};\n  }\n  return {\n    data: itemType === \"image_view\" ? sanitizeImageViewToolData(data) : data,\n  };\n}\n\nfunction runtimeEventToActivities(\n  event: ProviderRuntimeEvent,\n  packedTurnId: TurnId | undefined,\n): ReadonlyArray<OrchestrationThreadActivity> {\n  const maybeSequence = (() => {\n    const eventWithSequence = event as ProviderRuntimeEvent & { sessionSequence?: number };\n    return eventWithSequence.sessionSequence !== undefined\n      ? { sequence: eventWithSequence.sessionSequence }\n      : {};\n  })();\n  switch (event.type) {\n    case \"request.opened\": {\n      if (event.payload.requestType === \"tool_user_input\") {\n        return [];\n      }\n      const requestKind = requestKindFromCanonicalRequestType(event.payload.requestType);\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"approval\",\n          kind: \"approval.requested\",\n          summary:\n            requestKind === \"command\"\n              ? \"Command approval requested\"\n              : requestKind === \"file-read\"\n                ? \"File-read approval requested\"\n                : requestKind === \"file-change\"\n                  ? \"File-change approval requested\"\n                  : \"Approval requested\",\n          payload: {\n            requestId: toApprovalRequestId(event.requestId),\n            ...(requestKind ? { requestKind } : {}),\n            requestType: event.payload.requestType,\n            ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"request.resolved\": {\n      if (event.payload.requestType === \"tool_user_input\") {\n        return [];\n      }\n      const requestKind = requestKindFromCanonicalRequestType(event.payload.requestType);\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"approval\",\n          kind: \"approval.resolved\",\n          summary: \"Approval resolved\",\n          payload: {\n            requestId: toApprovalRequestId(event.requestId),\n            ...(requestKind ? { requestKind } : {}),\n            requestType: event.payload.requestType,\n            ...(event.payload.decision ? { decision: event.payload.decision } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"runtime.error\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"error\",\n          kind: \"runtime.error\",\n          summary: \"Runtime error\",\n          payload: {\n            message: truncateDetail(event.payload.message),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"tool.denied\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"error\",\n          kind: \"tool.denied\",\n          summary: `Tool denied: ${event.payload.toolName}`,\n          payload: {\n            toolName: event.payload.toolName,\n            ...(event.payload.toolUseId ? { toolUseId: event.payload.toolUseId } : {}),\n            ...(event.payload.reason ? { detail: truncateDetail(event.payload.reason) } : {}),\n            ...(event.payload.agentId ? { agentId: event.payload.agentId } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"runtime.warning\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"runtime.warning\",\n          summary: \"Runtime warning\",\n          payload: {\n            message: truncateDetail(event.payload.message),\n            ...(event.payload.detail !== undefined ? { detail: event.payload.detail } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"turn.plan.updated\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"turn.plan.updated\",\n          summary: \"Plan updated\",\n          payload: {\n            plan: event.payload.plan,\n            ...(event.payload.explanation !== undefined\n              ? { explanation: event.payload.explanation }\n              : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"user-input.requested\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"user-input.requested\",\n          summary: \"User input requested\",\n          payload: {\n            ...(event.requestId ? { requestId: event.requestId } : {}),\n            questions: event.payload.questions,\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"user-input.resolved\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"user-input.resolved\",\n          summary: \"User input submitted\",\n          payload: {\n            ...(event.requestId ? { requestId: event.requestId } : {}),\n            answers: event.payload.answers,\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"task.started\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"task.started\",\n          summary:\n            event.payload.taskType === \"plan\"\n              ? \"Plan task started\"\n              : event.payload.taskType\n                ? `${event.payload.taskType} task started`\n                : \"Task started\",\n          payload: {\n            taskId: event.payload.taskId,\n            ...(event.payload.taskType ? { taskType: event.payload.taskType } : {}),\n            ...(event.payload.description\n              ? { detail: truncateDetail(event.payload.description) }\n              : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"task.progress\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"task.progress\",\n          summary: \"Reasoning update\",\n          payload: {\n            taskId: event.payload.taskId,\n            detail: truncateDetail(event.payload.summary ?? event.payload.description),\n            ...(event.payload.summary ? { summary: truncateDetail(event.payload.summary) } : {}),\n            ...(event.payload.lastToolName ? { lastToolName: event.payload.lastToolName } : {}),\n            ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"task.completed\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: event.payload.status === \"failed\" ? \"error\" : \"info\",\n          kind: \"task.completed\",\n          summary:\n            event.payload.status === \"failed\"\n              ? \"Task failed\"\n              : event.payload.status === \"stopped\"\n                ? \"Task stopped\"\n                : \"Task completed\",\n          payload: {\n            taskId: event.payload.taskId,\n            status: event.payload.status,\n            ...(event.payload.summary ? { detail: truncateDetail(event.payload.summary) } : {}),\n            ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"subagent.started\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"subagent.started\",\n          summary: \"Subagent started\",\n          payload: {\n            subagentId: event.payload.subagentId,\n            status: event.payload.status ?? \"running\",\n            ...(event.payload.providerThreadId\n              ? { providerThreadId: event.payload.providerThreadId }\n              : {}),\n            ...(event.payload.parentTurnId ? { parentTurnId: event.payload.parentTurnId } : {}),\n            ...(event.payload.sourceItemId ? { sourceItemId: event.payload.sourceItemId } : {}),\n            ...(event.payload.role ? { role: event.payload.role } : {}),\n            ...(event.payload.nickname ? { nickname: event.payload.nickname } : {}),\n            ...(event.payload.model ? { model: event.payload.model } : {}),\n            ...(event.payload.prompt ? { prompt: truncateDetail(event.payload.prompt) } : {}),\n            ...(event.payload.summary\n              ? {\n                  summary: truncateDetail(event.payload.summary),\n                  detail: truncateDetail(event.payload.summary),\n                }\n              : {}),\n            ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"subagent.updated\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"subagent.updated\",\n          summary: \"Subagent update\",\n          payload: {\n            subagentId: event.payload.subagentId,\n            ...(event.payload.status ? { status: event.payload.status } : {}),\n            ...(event.payload.providerThreadId\n              ? { providerThreadId: event.payload.providerThreadId }\n              : {}),\n            ...(event.payload.parentTurnId ? { parentTurnId: event.payload.parentTurnId } : {}),\n            ...(event.payload.sourceItemId ? { sourceItemId: event.payload.sourceItemId } : {}),\n            ...(event.payload.role ? { role: event.payload.role } : {}),\n            ...(event.payload.nickname ? { nickname: event.payload.nickname } : {}),\n            ...(event.payload.model ? { model: event.payload.model } : {}),\n            ...(event.payload.prompt ? { prompt: truncateDetail(event.payload.prompt) } : {}),\n            ...(event.payload.summary ? { summary: truncateDetail(event.payload.summary) } : {}),\n            ...(event.payload.description\n              ? { detail: truncateDetail(event.payload.description) }\n              : event.payload.summary\n                ? { detail: truncateDetail(event.payload.summary) }\n                : {}),\n            ...(event.payload.lastToolName ? { lastToolName: event.payload.lastToolName } : {}),\n            ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"subagent.completed\": {\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: event.payload.status === \"failed\" ? \"error\" : \"info\",\n          kind: \"subagent.completed\",\n          summary:\n            event.payload.status === \"failed\"\n              ? \"Subagent failed\"\n              : event.payload.status === \"stopped\"\n                ? \"Subagent stopped\"\n                : event.payload.status === \"interrupted\"\n                  ? \"Subagent interrupted\"\n                  : \"Subagent completed\",\n          payload: {\n            subagentId: event.payload.subagentId,\n            status: event.payload.status,\n            ...(event.payload.providerThreadId\n              ? { providerThreadId: event.payload.providerThreadId }\n              : {}),\n            ...(event.payload.parentTurnId ? { parentTurnId: event.payload.parentTurnId } : {}),\n            ...(event.payload.sourceItemId ? { sourceItemId: event.payload.sourceItemId } : {}),\n            ...(event.payload.role ? { role: event.payload.role } : {}),\n            ...(event.payload.nickname ? { nickname: event.payload.nickname } : {}),\n            ...(event.payload.model ? { model: event.payload.model } : {}),\n            ...(event.payload.prompt ? { prompt: truncateDetail(event.payload.prompt) } : {}),\n            ...(event.payload.summary\n              ? {\n                  summary: truncateDetail(event.payload.summary),\n                  detail: truncateDetail(event.payload.summary),\n                }\n              : {}),\n            ...(event.payload.error ? { error: truncateDetail(event.payload.error) } : {}),\n            ...(event.payload.usage !== undefined ? { usage: event.payload.usage } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"thread.state.changed\": {\n      if (event.payload.state !== \"compacted\") {\n        return [];\n      }\n\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"context-compaction\",\n          summary: \"Context compacted\",\n          payload: {\n            state: event.payload.state,\n            ...(event.payload.detail !== undefined ? { detail: event.payload.detail } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"thread.token-usage.updated\": {\n      const payload = buildContextWindowActivityPayload(event);\n      if (!payload) {\n        return [];\n      }\n\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"context-window.updated\",\n          summary: \"Context window updated\",\n          payload,\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"account.rate-limits.updated\": {\n      return [];\n    }\n\n    case \"item.updated\": {\n      if (!isToolLifecycleItemType(event.payload.itemType)) {\n        return [];\n      }\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"tool\",\n          kind: \"tool.updated\",\n          summary: event.payload.title ?? \"Tool updated\",\n          payload: {\n            itemType: event.payload.itemType,\n            ...(event.payload.status ? { status: event.payload.status } : {}),\n            ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}),\n            ...toolActivityDataPayload(event.payload.itemType, event.payload.data),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"item.completed\": {\n      if (!isToolLifecycleItemType(event.payload.itemType)) {\n        return [];\n      }\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"tool\",\n          kind: \"tool.completed\",\n          summary: event.payload.title ?? \"Tool\",\n          payload: {\n            itemType: event.payload.itemType,\n            ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}),\n            ...toolActivityDataPayload(event.payload.itemType, event.payload.data),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    case \"item.started\": {\n      if (!isToolLifecycleItemType(event.payload.itemType)) {\n        return [];\n      }\n      return [\n        {\n          id: event.eventId,\n          createdAt: event.createdAt,\n          tone: \"tool\",\n          kind: \"tool.started\",\n          summary: `${event.payload.title ?? \"Tool\"} started`,\n          payload: {\n            itemType: event.payload.itemType,\n            ...(event.payload.detail ? { detail: truncateDetail(event.payload.detail) } : {}),\n          },\n          turnId: packedTurnId ?? null,\n          ...maybeSequence,\n        },\n      ];\n    }\n\n    default:\n      break;\n  }\n\n  return [];\n}\n\nconst make = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const orchestrationEngine = yield* OrchestrationEngineService;\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const providerService = yield* ProviderService;\n  const projectionTurnRepository = yield* ProjectionTurnRepository;\n  const turnFileSnapshots = yield* TurnFileSnapshots;\n  const checkpointStore = yield* CheckpointStore;\n  const serverSettingsService = yield* ServerSettingsService;\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const serverConfig = yield* ServerConfig;\n  const workspacePaths = yield* WorkspacePaths;\n  const providerCommandId = (event: ProviderRuntimeEvent, tag: string) =>\n    crypto.randomUUIDv4.pipe(\n      Effect.map((uuid) => CommandId.make(`provider:${event.eventId}:${tag}:${uuid}`)),\n    );\n\n  const resolveIndependentThreadTargetProject = Effect.fn(\"resolveIndependentThreadTargetProject\")(\n    function* (input: {\n      readonly event: Extract<\n        ProviderRuntimeEvent,\n        { readonly type: \"thread.independent.created\" }\n      >;\n      readonly sourceThread: OrchestrationThreadShell;\n      readonly createIfMissing: boolean;\n    }) {\n      const requestedWorkspaceRoot = input.event.payload.workspaceRoot;\n      if (\n        typeof requestedWorkspaceRoot !== \"string\" ||\n        requestedWorkspaceRoot.trim().length === 0\n      ) {\n        return { projectId: input.sourceThread.projectId };\n      }\n\n      const workspaceRoot = yield* workspacePaths\n        .normalizeWorkspaceRoot(requestedWorkspaceRoot)\n        .pipe(\n          Effect.catch((error) =>\n            Effect.gen(function* () {\n              yield* Effect.logWarning(\"provider runtime independent thread creation dropped\", {\n                eventId: input.event.eventId,\n                threadId: input.event.threadId,\n                createdThreadId: input.event.payload.threadId,\n                sourceThreadId: input.sourceThread.id,\n                workspaceRoot: requestedWorkspaceRoot,\n                reason: \"invalid-target-workspace-root\",\n                detail: error.message,\n              });\n              return null;\n            }),\n          ),\n        );\n      if (!workspaceRoot) {\n        return null;\n      }\n\n      const existingProject = yield* projectionSnapshotQuery\n        .getActiveProjectByWorkspaceRoot(workspaceRoot)\n        .pipe(Effect.map(Option.getOrUndefined));\n      if (existingProject) {\n        return { projectId: existingProject.id };\n      }\n      if (!input.createIfMissing) {\n        return null;\n      }\n\n      const projectId = ProjectId.make(`provider:${input.event.eventId}:project`);\n      const title = path.basename(workspaceRoot) || workspaceRoot;\n      yield* orchestrationEngine.dispatch({\n        type: \"project.create\",\n        commandId: yield* providerCommandId(input.event, \"independent-thread-project-create\"),\n        projectId,\n        title,\n        workspaceRoot,\n        defaultModelSelection: null,\n        createdAt: input.event.createdAt,\n      });\n\n      return { projectId };\n    },\n  );\n\n  const turnMessageIdsByTurnKey = yield* Cache.make<string, Set<MessageId>>({\n    capacity: TURN_MESSAGE_IDS_BY_TURN_CACHE_CAPACITY,\n    timeToLive: TURN_MESSAGE_IDS_BY_TURN_TTL,\n    lookup: () => Effect.succeed(new Set<MessageId>()),\n  });\n\n  const bufferedAssistantTextByMessageId = yield* Cache.make<MessageId, string>({\n    capacity: BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_CACHE_CAPACITY,\n    timeToLive: BUFFERED_MESSAGE_TEXT_BY_MESSAGE_ID_TTL,\n    lookup: () => Effect.succeed(\"\"),\n  });\n\n  const assistantSegmentStateByTurnKey = yield* Cache.make<string, AssistantSegmentState>({\n    capacity: TURN_MESSAGE_IDS_BY_TURN_CACHE_CAPACITY,\n    timeToLive: TURN_MESSAGE_IDS_BY_TURN_TTL,\n    lookup: () =>\n      Effect.die(\n        new Error(\"assistant segment state should be read through getOption before initialization\"),\n      ),\n  });\n\n  const bufferedProposedPlanById = yield* Cache.make<string, { text: string; createdAt: string }>({\n    capacity: BUFFERED_PROPOSED_PLAN_BY_ID_CACHE_CAPACITY,\n    timeToLive: BUFFERED_PROPOSED_PLAN_BY_ID_TTL,\n    lookup: () => Effect.succeed({ text: \"\", createdAt: \"\" }),\n  });\n\n  const resolveThreadDetail = Effect.fn(\"resolveThreadDetail\")(function* (threadId: ThreadId) {\n    return yield* projectionSnapshotQuery\n      .getThreadDetailById(threadId)\n      .pipe(Effect.map(Option.getOrUndefined));\n  });\n\n  const resolveThreadShell = Effect.fn(\"resolveThreadShell\")(function* (threadId: ThreadId) {\n    return yield* projectionSnapshotQuery\n      .getThreadShellById(threadId)\n      .pipe(Effect.map(Option.getOrUndefined));\n  });\n\n  const materializeIndependentThreadIfNeeded = Effect.fn(\"materializeIndependentThreadIfNeeded\")(\n    function* (event: ProviderRuntimeEvent) {\n      if (event.type !== \"thread.independent.created\") {\n        return;\n      }\n\n      const payload = event.payload;\n      const sourceThreadId = payload.createdByThreadId ?? payload.originThreadId ?? event.threadId;\n      const sourceThread = yield* resolveThreadShell(sourceThreadId);\n      if (!sourceThread) {\n        yield* Effect.logWarning(\"provider runtime independent thread creation dropped\", {\n          eventId: event.eventId,\n          threadId: event.threadId,\n          createdThreadId: payload.threadId,\n          sourceThreadId,\n          reason: \"missing-source-thread\",\n        });\n        return;\n      }\n\n      if (payload.threadId === sourceThread.id) {\n        yield* Effect.logWarning(\"provider runtime independent thread creation dropped\", {\n          eventId: event.eventId,\n          threadId: event.threadId,\n          createdThreadId: payload.threadId,\n          sourceThreadId: sourceThread.id,\n          reason: \"self-reference\",\n        });\n        return;\n      }\n\n      const existingThread = yield* resolveThreadShell(payload.threadId);\n      const targetProject = yield* resolveIndependentThreadTargetProject({\n        event,\n        sourceThread,\n        createIfMissing: !existingThread,\n      });\n      if (!targetProject) {\n        return;\n      }\n\n      if (existingThread) {\n        const conflictsWithExistingThread =\n          existingThread.projectId !== targetProject.projectId ||\n          existingThread.parentThreadId !== null ||\n          !sameId(existingThread.createdByThreadId, sourceThread.id);\n        if (conflictsWithExistingThread) {\n          yield* Effect.logWarning(\"provider runtime independent thread creation dropped\", {\n            eventId: event.eventId,\n            threadId: event.threadId,\n            createdThreadId: payload.threadId,\n            sourceThreadId: sourceThread.id,\n            existingProjectId: existingThread.projectId,\n            targetProjectId: targetProject.projectId,\n            existingParentThreadId: existingThread.parentThreadId,\n            existingCreatedByThreadId: existingThread.createdByThreadId,\n            reason: \"conflicting-existing-thread\",\n          });\n          return;\n        }\n      } else {\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.create\",\n          commandId: yield* providerCommandId(event, \"independent-thread-create\"),\n          threadId: payload.threadId,\n          projectId: targetProject.projectId,\n          title: payload.title,\n          modelSelection: payload.modelSelection ?? sourceThread.modelSelection,\n          runtimeMode: payload.runtimeMode ?? sourceThread.runtimeMode,\n          interactionMode: payload.interactionMode ?? sourceThread.interactionMode,\n          parentThreadId: null,\n          createdByThreadId: sourceThread.id,\n          subagentKind: null,\n          subagentNickname: null,\n          subagentRole: null,\n          hiddenFromThreadList: false,\n          branch: payload.branch !== undefined ? payload.branch : sourceThread.branch,\n          worktreePath:\n            payload.worktreePath !== undefined ? payload.worktreePath : sourceThread.worktreePath,\n          createdAt: event.createdAt,\n        });\n      }\n\n      const sourceThreadDetail = yield* resolveThreadDetail(sourceThread.id);\n      const hasSourceActivity =\n        sourceThreadDetail?.activities.some((activity) =>\n          isIndependentThreadCreatedActivityFor(activity, {\n            threadId: payload.threadId,\n            providerThreadId: payload.providerThreadId,\n          }),\n        ) ?? false;\n\n      if (!hasSourceActivity) {\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.activity.append\",\n          commandId: yield* providerCommandId(event, \"independent-thread-source-activity\"),\n          threadId: sourceThread.id,\n          activity: {\n            id: EventId.make(`${event.eventId}:independent-thread-created`),\n            createdAt: event.createdAt,\n            tone: \"info\",\n            kind: \"thread.created\",\n            summary: payload.title,\n            payload: {\n              threadId: payload.threadId,\n              title: payload.title,\n              createdByThreadId: sourceThread.id,\n              ...(payload.providerThreadId ? { providerThreadId: payload.providerThreadId } : {}),\n              ...(payload.sourceItemId ? { sourceItemId: payload.sourceItemId } : {}),\n              ...(event.providerRefs?.providerItemId\n                ? { providerItemId: event.providerRefs.providerItemId }\n                : {}),\n              ...(payload.initialPrompt\n                ? { initialPrompt: truncateDetail(payload.initialPrompt) }\n                : {}),\n            },\n            turnId: toTurnId(event.turnId) ?? null,\n          },\n          createdAt: event.createdAt,\n        });\n      }\n\n      const initialPrompt = payload.initialPrompt?.trim();\n      if (!initialPrompt) {\n        return;\n      }\n\n      const createdThreadDetail = yield* resolveThreadDetail(payload.threadId);\n      const messageId =\n        payload.initialMessageId ??\n        MessageId.make(`provider:${event.eventId}:independent-thread-message`);\n      const alreadyHasInitialPrompt =\n        createdThreadDetail?.messages.some((message) => message.id === messageId) === true ||\n        createdThreadDetail?.queuedTurns.some(\n          (queuedTurn) => queuedTurn.messageId === messageId,\n        ) === true;\n\n      if (alreadyHasInitialPrompt) {\n        return;\n      }\n\n      const targetThread = (yield* resolveThreadShell(payload.threadId)) ?? existingThread;\n      if (!targetThread) {\n        yield* Effect.logWarning(\"provider runtime independent thread prompt dropped\", {\n          eventId: event.eventId,\n          threadId: event.threadId,\n          createdThreadId: payload.threadId,\n          sourceThreadId: sourceThread.id,\n          reason: \"missing-created-thread\",\n        });\n        return;\n      }\n\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.turn.start\",\n        commandId: yield* providerCommandId(event, \"independent-thread-initial-turn\"),\n        threadId: payload.threadId,\n        message: {\n          messageId,\n          role: \"user\",\n          text: initialPrompt,\n          attachments: [],\n        },\n        modelSelection: targetThread.modelSelection,\n        titleSeed: payload.titleSeed ?? payload.title,\n        runtimeMode: targetThread.runtimeMode,\n        interactionMode: targetThread.interactionMode,\n        createdAt: event.createdAt,\n      });\n    },\n  );\n\n  const materializeChildThreadIfNeeded = Effect.fn(\"materializeChildThreadIfNeeded\")(function* (\n    event: ProviderRuntimeEvent,\n  ) {\n    if (event.type !== \"thread.started\") {\n      return;\n    }\n    const payload = event.payload;\n    if (!payload.parentThreadId || !payload.providerThreadId || !event.providerInstanceId) {\n      return;\n    }\n\n    const capabilities = yield* providerService.getCapabilities(event.providerInstanceId);\n    if (capabilities.childThreadMode !== \"materialized\") {\n      return;\n    }\n\n    const parentThread = yield* resolveThreadShell(payload.parentThreadId);\n    if (!parentThread) {\n      yield* Effect.logWarning(\"provider runtime child thread materialization dropped\", {\n        eventId: event.eventId,\n        threadId: event.threadId,\n        parentThreadId: payload.parentThreadId,\n        providerThreadId: payload.providerThreadId,\n        providerParentThreadId: payload.providerParentThreadId,\n        reason: \"missing-parent-thread\",\n      });\n      return;\n    }\n    const parentProject = yield* projectionSnapshotQuery\n      .getProjectShellById(parentThread.projectId)\n      .pipe(Effect.map(Option.getOrUndefined));\n    if (!parentProject) {\n      yield* Effect.logWarning(\"provider runtime child thread materialization dropped\", {\n        eventId: event.eventId,\n        threadId: event.threadId,\n        parentThreadId: payload.parentThreadId,\n        providerThreadId: payload.providerThreadId,\n        providerParentThreadId: payload.providerParentThreadId,\n        reason: \"missing-parent-project\",\n      });\n      return;\n    }\n\n    const existingChild = yield* resolveThreadShell(event.threadId);\n    const title =\n      materializedSubagentTitle({\n        role: payload.subagentRole,\n        nickname: payload.subagentNickname,\n        path: payload.subagentPath,\n      }) ?? \"Subagent\";\n\n    if (!existingChild) {\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.create\",\n        commandId: yield* providerCommandId(event, \"child-thread-create\"),\n        threadId: event.threadId,\n        projectId: parentThread.projectId,\n        title,\n        modelSelection: parentThread.modelSelection,\n        runtimeMode: parentThread.runtimeMode,\n        interactionMode: parentThread.interactionMode,\n        parentThreadId: parentThread.id,\n        subagentKind: payload.subagentKind ?? null,\n        subagentNickname: payload.subagentNickname ?? null,\n        subagentRole: payload.subagentRole ?? null,\n        hiddenFromThreadList: payload.hiddenFromThreadList ?? false,\n        branch: parentThread.branch,\n        worktreePath: parentThread.worktreePath,\n        createdAt: event.createdAt,\n      });\n    }\n\n    yield* providerService.registerMaterializedSessionBinding({\n      threadId: event.threadId,\n      provider: event.provider,\n      providerInstanceId: event.providerInstanceId,\n      runtimeMode: parentThread.runtimeMode,\n      resumeCursor: { threadId: payload.providerThreadId },\n      runtimePayload: {\n        parentThreadId: parentThread.id,\n        providerParentThreadId: payload.providerParentThreadId ?? null,\n        providerThreadId: payload.providerThreadId,\n        cwd: parentThread.worktreePath ?? parentProject.workspaceRoot,\n        modelSelection: parentThread.modelSelection,\n      },\n      status: \"running\",\n    });\n\n    const parentThreadDetail = yield* resolveThreadDetail(parentThread.id);\n    const hasParentSpawnActivity =\n      parentThreadDetail?.activities.some((activity) =>\n        isSubagentThreadSpawnedActivityFor(activity, {\n          threadId: event.threadId,\n          providerThreadId: payload.providerThreadId,\n        }),\n      ) ?? false;\n\n    if (!hasParentSpawnActivity) {\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.activity.append\",\n        commandId: yield* providerCommandId(event, \"child-thread-parent-activity\"),\n        threadId: parentThread.id,\n        activity: {\n          id: EventId.make(`${event.eventId}:parent-spawn`),\n          createdAt: event.createdAt,\n          tone: \"info\",\n          kind: \"subagent.thread.spawned\",\n          summary: title,\n          payload: {\n            threadId: event.threadId,\n            providerThreadId: payload.providerThreadId,\n            ...(payload.providerParentThreadId\n              ? { providerParentThreadId: payload.providerParentThreadId }\n              : {}),\n            ...(payload.subagentKind ? { subagentKind: payload.subagentKind } : {}),\n            ...(payload.subagentNickname ? { subagentNickname: payload.subagentNickname } : {}),\n            ...(payload.subagentRole ? { subagentRole: payload.subagentRole } : {}),\n            ...(payload.subagentPath ? { subagentPath: payload.subagentPath } : {}),\n            ...(event.providerRefs?.providerItemId\n              ? { sourceItemId: event.providerRefs.providerItemId }\n              : {}),\n          },\n          turnId: null,\n        },\n        createdAt: event.createdAt,\n      });\n    }\n  });\n\n  const materializedChildThreadIdFromActivity = (\n    activities: ReadonlyArray<OrchestrationThreadActivity>,\n    providerThreadId: string,\n  ): ThreadId | undefined => {\n    for (let index = activities.length - 1; index >= 0; index -= 1) {\n      const activity = activities[index];\n      if (activity?.kind !== \"subagent.thread.spawned\" || !isRecord(activity.payload)) {\n        continue;\n      }\n\n      const payloadProviderThreadId =\n        typeof activity.payload.providerThreadId === \"string\"\n          ? activity.payload.providerThreadId.trim()\n          : \"\";\n      const payloadThreadId =\n        typeof activity.payload.threadId === \"string\" ? activity.payload.threadId.trim() : \"\";\n      if (\n        payloadThreadId &&\n        (payloadProviderThreadId === providerThreadId || payloadThreadId === providerThreadId)\n      ) {\n        return ThreadId.make(payloadThreadId);\n      }\n    }\n    return undefined;\n  };\n\n  const shouldReplaceMaterializedSubagentTitle = (input: {\n    readonly existingTitle: string;\n    readonly existingRole?: string | null | undefined;\n    readonly existingNickname?: string | null | undefined;\n    readonly nextTitle: string;\n  }): boolean => {\n    const currentTitleName = subagentDisplayName(input.existingTitle);\n    if (!currentTitleName) {\n      return input.existingTitle.trim() !== input.nextTitle;\n    }\n    if (currentTitleName === input.nextTitle) {\n      return false;\n    }\n\n    const currentMetadataName = materializedSubagentTitle({\n      role: input.existingRole,\n      nickname: input.existingNickname,\n    });\n    return !currentMetadataName;\n  };\n\n  const refreshMaterializedChildThreadMetadataIfNeeded = Effect.fn(\n    \"refreshMaterializedChildThreadMetadataIfNeeded\",\n  )(function* (event: ProviderRuntimeEvent) {\n    if (event.type === \"thread.started\") {\n      const providerThreadId = event.payload.providerThreadId?.trim();\n      if (!event.payload.parentThreadId || !providerThreadId) {\n        return;\n      }\n\n      const nextTitle = materializedSubagentTitle({\n        role: event.payload.subagentRole,\n        nickname: event.payload.subagentNickname,\n        path: event.payload.subagentPath,\n      });\n      const childThread = yield* resolveThreadShell(event.threadId);\n      if (!childThread) {\n        return;\n      }\n\n      const titleChanged =\n        nextTitle !== undefined &&\n        shouldReplaceMaterializedSubagentTitle({\n          existingTitle: childThread.title,\n          existingRole: childThread.subagentRole,\n          existingNickname: childThread.subagentNickname,\n          nextTitle,\n        });\n      const shouldRefreshTimestamp = childThread.updatedAt.localeCompare(event.createdAt) < 0;\n      if (!titleChanged && !shouldRefreshTimestamp) {\n        return;\n      }\n\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.meta.update\",\n        commandId: yield* providerCommandId(event, \"materialized-child-meta-refresh\"),\n        threadId: event.threadId,\n        title: titleChanged && nextTitle ? nextTitle : childThread.title,\n      });\n      return;\n    }\n\n    if (\n      event.type !== \"subagent.started\" &&\n      event.type !== \"subagent.updated\" &&\n      event.type !== \"subagent.completed\"\n    ) {\n      return;\n    }\n\n    const providerThreadId = event.payload.providerThreadId?.trim();\n    if (!providerThreadId) {\n      return;\n    }\n\n    const nextTitle = materializedSubagentTitle({\n      role: event.payload.role,\n      nickname: event.payload.nickname,\n    });\n    const parentThread = yield* resolveThreadDetail(event.threadId);\n    if (!parentThread) {\n      return;\n    }\n\n    const childThreadId = materializedChildThreadIdFromActivity(\n      parentThread.activities,\n      providerThreadId,\n    );\n    if (!childThreadId) {\n      return;\n    }\n\n    const childThread = yield* resolveThreadShell(childThreadId);\n    if (!childThread) {\n      return;\n    }\n\n    const titleChanged =\n      nextTitle !== undefined &&\n      shouldReplaceMaterializedSubagentTitle({\n        existingTitle: childThread.title,\n        existingRole: childThread.subagentRole,\n        existingNickname: childThread.subagentNickname,\n        nextTitle,\n      });\n    const shouldRefreshTimestamp = childThread.updatedAt.localeCompare(event.createdAt) < 0;\n    if (!titleChanged && !shouldRefreshTimestamp) {\n      return;\n    }\n\n    yield* orchestrationEngine.dispatch({\n      type: \"thread.meta.update\",\n      commandId: yield* providerCommandId(event, \"materialized-child-meta-refresh\"),\n      threadId: childThreadId,\n      title: titleChanged && nextTitle ? nextTitle : childThread.title,\n    });\n  });\n\n  const appendMaterializedChildParentResultIfNeeded = Effect.fn(\n    \"appendMaterializedChildParentResultIfNeeded\",\n  )(function* (event: ProviderRuntimeEvent, thread: OrchestrationThreadShell) {\n    const parentThreadId = thread.parentThreadId;\n    if (\n      event.type !== \"item.completed\" ||\n      !parentThreadId ||\n      thread.subagentKind !== \"thread_spawn\" ||\n      event.payload.itemType !== \"assistant_message\" ||\n      event.payload.status !== \"completed\"\n    ) {\n      return;\n    }\n\n    const detail = typeof event.payload.detail === \"string\" ? event.payload.detail.trim() : \"\";\n    if (!detail) {\n      return;\n    }\n\n    const parentThread = yield* resolveThreadShell(parentThreadId);\n    if (!parentThread) {\n      return;\n    }\n\n    const providerThreadId = providerThreadIdFromRuntimeEvent(event);\n    const title =\n      materializedSubagentTitle({\n        role: thread.subagentRole,\n        nickname: thread.subagentNickname,\n      }) ??\n      subagentDisplayName(thread.title) ??\n      \"Subagent\";\n    const summary = `${title} completed`;\n\n    yield* orchestrationEngine.dispatch({\n      type: \"thread.activity.append\",\n      commandId: yield* providerCommandId(event, \"materialized-child-parent-result\"),\n      threadId: parentThread.id,\n      activity: {\n        id: EventId.make(`${event.eventId}:parent-child-result`),\n        createdAt: event.createdAt,\n        tone: \"info\",\n        kind: \"subagent.completed\",\n        summary,\n        payload: {\n          subagentId: providerThreadId ?? String(event.threadId),\n          ...(providerThreadId ? { providerThreadId } : {}),\n          threadId: event.threadId,\n          status: \"completed\",\n          summary,\n          detail,\n          ...(event.itemId ? { sourceItemId: event.itemId } : {}),\n        },\n        turnId: null,\n      },\n      createdAt: event.createdAt,\n    });\n  });\n\n  const relativePathForPersistedFile = (workspaceRoot: string, filename: string) => {\n    const trimmedFilename = filename.trim();\n    if (trimmedFilename.length === 0 || trimmedFilename.includes(\"\\0\")) {\n      return null;\n    }\n\n    if (!path.isAbsolute(trimmedFilename)) {\n      return trimmedFilename;\n    }\n\n    const root = path.resolve(workspaceRoot);\n    const absoluteFilePath = path.resolve(trimmedFilename);\n    const normalizedRoot = root.endsWith(path.sep) ? root : `${root}${path.sep}`;\n    if (!absoluteFilePath.startsWith(normalizedRoot)) {\n      return null;\n    }\n\n    const relativePath = path.relative(root, absoluteFilePath).replaceAll(\"\\\\\", \"/\");\n    return relativePath.length > 0 ? relativePath : null;\n  };\n\n  const materializePersistedImageFile = (input: {\n    threadId: ThreadId;\n    workspaceRoot: string;\n    filename: string;\n  }): Effect.Effect<ChatAttachment | null> =>\n    Effect.gen(function* () {\n      const relativePath = relativePathForPersistedFile(input.workspaceRoot, input.filename);\n      if (!relativePath) {\n        return null;\n      }\n\n      const mimeType = imageMimeTypeFromFileName(relativePath);\n      if (!mimeType) {\n        return null;\n      }\n\n      const target = yield* workspacePaths\n        .resolveRelativePathWithinRoot({\n          workspaceRoot: input.workspaceRoot,\n          relativePath,\n        })\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (!target) {\n        return null;\n      }\n\n      const fileInfo = yield* fileSystem\n        .stat(target.absolutePath)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (!fileInfo || fileInfo.type !== \"File\") {\n        return null;\n      }\n      const fileSize = Number(fileInfo.size);\n      if (fileSize <= 0 || fileSize > CHAT_IMAGE_ATTACHMENT_MAX_BYTES) {\n        return null;\n      }\n\n      const attachmentId = createAttachmentId(input.threadId);\n      if (!attachmentId) {\n        return null;\n      }\n\n      const attachment: ChatAttachment = {\n        type: \"image\",\n        id: attachmentId,\n        name: path.basename(target.relativePath),\n        mimeType,\n        sizeBytes: fileSize,\n      };\n      const attachmentPath = resolveAttachmentPath({\n        attachmentsDir: serverConfig.attachmentsDir,\n        attachment,\n      });\n      if (!attachmentPath) {\n        return null;\n      }\n\n      const bytes = yield* fileSystem\n        .readFile(target.absolutePath)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (!bytes || bytes.byteLength === 0) {\n        return null;\n      }\n\n      yield* fileSystem.makeDirectory(path.dirname(attachmentPath), { recursive: true });\n      yield* fileSystem.writeFile(attachmentPath, bytes);\n      return attachment;\n    }).pipe(Effect.catch(() => Effect.succeed(null)));\n\n  const generatedImageName = (input: { name: string | undefined; mimeType: string }) => {\n    const extension = inferImageExtension({\n      mimeType: input.mimeType,\n      ...(input.name ? { fileName: input.name } : {}),\n    });\n    const fallback = extension === \".bin\" ? \"generated-image.png\" : `generated-image${extension}`;\n    const baseName = input.name\n      ? path\n          .basename(input.name)\n          .replaceAll(\"\\0\", \" \")\n          .replaceAll(\"\\r\", \" \")\n          .replaceAll(\"\\n\", \" \")\n          .replaceAll(\"\\t\", \" \")\n          .trim()\n      : \"\";\n    const candidate = baseName.length > 0 ? baseName : fallback;\n    const withExtension = /\\.[a-z0-9]{1,8}$/i.test(candidate)\n      ? candidate\n      : `${candidate}${extension}`;\n    return withExtension.length <= 255\n      ? withExtension\n      : `${withExtension.slice(0, Math.max(1, 255 - extension.length))}${extension}`;\n  };\n\n  const materializeGeneratedImage = (input: {\n    threadId: ThreadId;\n    dataUrl: string;\n    name?: string;\n    stableKey?: string;\n  }): Effect.Effect<ChatAttachment | null> =>\n    Effect.gen(function* () {\n      const parsed = parseBase64DataUrl(input.dataUrl);\n      if (!parsed || !parsed.mimeType.startsWith(\"image/\")) {\n        return null;\n      }\n\n      const bytes = Buffer.from(parsed.base64, \"base64\");\n      if (bytes.byteLength <= 0 || bytes.byteLength > CHAT_IMAGE_ATTACHMENT_MAX_BYTES) {\n        return null;\n      }\n\n      const contentHash = createHash(\"sha256\").update(bytes).digest(\"hex\");\n      const attachmentId = input.stableKey\n        ? createStableAttachmentId(\n            input.threadId,\n            `${input.stableKey}:${parsed.mimeType}:${contentHash}`,\n          )\n        : createAttachmentId(input.threadId);\n      if (!attachmentId) {\n        return null;\n      }\n\n      const attachment: ChatAttachment = {\n        type: \"image\",\n        id: attachmentId,\n        name: generatedImageName({\n          name: input.name,\n          mimeType: parsed.mimeType,\n        }),\n        mimeType: parsed.mimeType,\n        sizeBytes: bytes.byteLength,\n      };\n      const attachmentPath = resolveAttachmentPath({\n        attachmentsDir: serverConfig.attachmentsDir,\n        attachment,\n      });\n      if (!attachmentPath) {\n        return null;\n      }\n\n      yield* fileSystem.makeDirectory(path.dirname(attachmentPath), { recursive: true });\n      yield* fileSystem.writeFile(attachmentPath, bytes);\n      return attachment;\n    }).pipe(Effect.catch(() => Effect.succeed(null)));\n\n  const rememberAssistantMessageId = (threadId: ThreadId, turnId: TurnId, messageId: MessageId) =>\n    Cache.getOption(turnMessageIdsByTurnKey, providerTurnKey(threadId, turnId)).pipe(\n      Effect.flatMap((existingIds) =>\n        Cache.set(\n          turnMessageIdsByTurnKey,\n          providerTurnKey(threadId, turnId),\n          Option.match(existingIds, {\n            onNone: () => new Set([messageId]),\n            onSome: (ids) => {\n              const nextIds = new Set(ids);\n              nextIds.add(messageId);\n              return nextIds;\n            },\n          }),\n        ),\n      ),\n    );\n\n  const forgetAssistantMessageId = (threadId: ThreadId, turnId: TurnId, messageId: MessageId) =>\n    Cache.getOption(turnMessageIdsByTurnKey, providerTurnKey(threadId, turnId)).pipe(\n      Effect.flatMap((existingIds) =>\n        Option.match(existingIds, {\n          onNone: () => Effect.void,\n          onSome: (ids) => {\n            const nextIds = new Set(ids);\n            nextIds.delete(messageId);\n            if (nextIds.size === 0) {\n              return Cache.invalidate(turnMessageIdsByTurnKey, providerTurnKey(threadId, turnId));\n            }\n            return Cache.set(turnMessageIdsByTurnKey, providerTurnKey(threadId, turnId), nextIds);\n          },\n        }),\n      ),\n    );\n\n  const getAssistantMessageIdsForTurn = (threadId: ThreadId, turnId: TurnId) =>\n    Cache.getOption(turnMessageIdsByTurnKey, providerTurnKey(threadId, turnId)).pipe(\n      Effect.map((existingIds) =>\n        Option.getOrElse(existingIds, (): Set<MessageId> => new Set<MessageId>()),\n      ),\n    );\n\n  const clearAssistantMessageIdsForTurn = (threadId: ThreadId, turnId: TurnId) =>\n    Cache.invalidate(turnMessageIdsByTurnKey, providerTurnKey(threadId, turnId));\n\n  const getAssistantSegmentStateForTurn = (threadId: ThreadId, turnId: TurnId) =>\n    Cache.getOption(assistantSegmentStateByTurnKey, providerTurnKey(threadId, turnId));\n\n  const setAssistantSegmentStateForTurn = (\n    threadId: ThreadId,\n    turnId: TurnId,\n    state: AssistantSegmentState,\n  ) => Cache.set(assistantSegmentStateByTurnKey, providerTurnKey(threadId, turnId), state);\n\n  const clearAssistantSegmentStateForTurn = (threadId: ThreadId, turnId: TurnId) =>\n    Cache.invalidate(assistantSegmentStateByTurnKey, providerTurnKey(threadId, turnId));\n\n  const getActiveAssistantMessageIdForTurn = (threadId: ThreadId, turnId: TurnId) =>\n    getAssistantSegmentStateForTurn(threadId, turnId).pipe(\n      Effect.map((state) =>\n        Option.flatMap(state, (entry) =>\n          entry.activeMessageId ? Option.some(entry.activeMessageId) : Option.none(),\n        ),\n      ),\n    );\n\n  const startAssistantSegmentForTurn = (input: {\n    threadId: ThreadId;\n    turnId: TurnId;\n    baseKey: string;\n  }) =>\n    getAssistantSegmentStateForTurn(input.threadId, input.turnId).pipe(\n      Effect.flatMap((existingState) =>\n        Effect.gen(function* () {\n          const nextState = Option.match(existingState, {\n            onNone: () => ({\n              baseKey: input.baseKey,\n              nextSegmentIndex: 1,\n              activeMessageId: assistantSegmentMessageId(input.baseKey, 0),\n            }),\n            onSome: (state) => {\n              const segmentIndex = state.baseKey === input.baseKey ? state.nextSegmentIndex : 0;\n              const messageId = assistantSegmentMessageId(input.baseKey, segmentIndex);\n              return {\n                baseKey: input.baseKey,\n                nextSegmentIndex: state.baseKey === input.baseKey ? state.nextSegmentIndex + 1 : 1,\n                activeMessageId: messageId,\n              } satisfies AssistantSegmentState;\n            },\n          });\n          yield* setAssistantSegmentStateForTurn(input.threadId, input.turnId, nextState);\n          return nextState.activeMessageId!;\n        }),\n      ),\n    );\n\n  const getOrCreateAssistantMessageId = (input: {\n    threadId: ThreadId;\n    event: ProviderRuntimeEvent;\n    turnId?: TurnId;\n  }) =>\n    Effect.gen(function* () {\n      if (!input.turnId) {\n        return assistantSegmentMessageId(assistantSegmentBaseKeyFromEvent(input.event), 0);\n      }\n\n      const activeMessageId = yield* getActiveAssistantMessageIdForTurn(\n        input.threadId,\n        input.turnId,\n      );\n      if (Option.isSome(activeMessageId)) {\n        return activeMessageId.value;\n      }\n\n      return yield* startAssistantSegmentForTurn({\n        threadId: input.threadId,\n        turnId: input.turnId,\n        baseKey: assistantSegmentBaseKeyFromEvent(input.event),\n      });\n    });\n\n  const appendBufferedAssistantText = (messageId: MessageId, delta: string) =>\n    Cache.getOption(bufferedAssistantTextByMessageId, messageId).pipe(\n      Effect.flatMap((existingText) =>\n        Effect.gen(function* () {\n          const nextText = Option.match(existingText, {\n            onNone: () => delta,\n            onSome: (text) => `${text}${delta}`,\n          });\n          if (nextText.length <= MAX_BUFFERED_ASSISTANT_CHARS) {\n            yield* Cache.set(bufferedAssistantTextByMessageId, messageId, nextText);\n            return \"\";\n          }\n\n          // Safety valve: flush full buffered text as an assistant delta to cap memory.\n          yield* Cache.invalidate(bufferedAssistantTextByMessageId, messageId);\n          return nextText;\n        }),\n      ),\n    );\n\n  const takeBufferedAssistantText = (messageId: MessageId) =>\n    Cache.getOption(bufferedAssistantTextByMessageId, messageId).pipe(\n      Effect.flatMap((existingText) =>\n        Cache.invalidate(bufferedAssistantTextByMessageId, messageId).pipe(\n          Effect.as(Option.getOrElse(existingText, () => \"\")),\n        ),\n      ),\n    );\n\n  const clearBufferedAssistantText = (messageId: MessageId) =>\n    Cache.invalidate(bufferedAssistantTextByMessageId, messageId);\n\n  const appendBufferedProposedPlan = (planId: string, delta: string, createdAt: string) =>\n    Cache.getOption(bufferedProposedPlanById, planId).pipe(\n      Effect.flatMap((existingEntry) => {\n        const existing = Option.getOrUndefined(existingEntry);\n        return Cache.set(bufferedProposedPlanById, planId, {\n          text: `${existing?.text ?? \"\"}${delta}`,\n          createdAt:\n            existing?.createdAt && existing.createdAt.length > 0 ? existing.createdAt : createdAt,\n        });\n      }),\n    );\n\n  const takeBufferedProposedPlan = (planId: string) =>\n    Cache.getOption(bufferedProposedPlanById, planId).pipe(\n      Effect.flatMap((existingEntry) =>\n        Cache.invalidate(bufferedProposedPlanById, planId).pipe(\n          Effect.as(Option.getOrUndefined(existingEntry)),\n        ),\n      ),\n    );\n\n  const clearBufferedProposedPlan = (planId: string) =>\n    Cache.invalidate(bufferedProposedPlanById, planId);\n\n  const clearAssistantMessageState = (messageId: MessageId) =>\n    clearBufferedAssistantText(messageId);\n\n  const flushBufferedAssistantMessage = (input: {\n    event: ProviderRuntimeEvent;\n    threadId: ThreadId;\n    messageId: MessageId;\n    turnId?: TurnId;\n    createdAt: string;\n    commandTag: string;\n  }) =>\n    Effect.gen(function* () {\n      const bufferedText = yield* takeBufferedAssistantText(input.messageId);\n      if (!hasRenderableAssistantText(bufferedText)) {\n        return false;\n      }\n\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.message.assistant.delta\",\n        commandId: yield* providerCommandId(input.event, input.commandTag),\n        threadId: input.threadId,\n        messageId: input.messageId,\n        delta: bufferedText,\n        ...(input.turnId ? { turnId: input.turnId } : {}),\n        createdAt: input.createdAt,\n      });\n      return true;\n    });\n\n  const flushBufferedAssistantMessagesForTurn = (input: {\n    event: ProviderRuntimeEvent;\n    threadId: ThreadId;\n    turnId: TurnId;\n    createdAt: string;\n    commandTag: string;\n  }) =>\n    Effect.gen(function* () {\n      const assistantMessageIds = yield* getAssistantMessageIdsForTurn(\n        input.threadId,\n        input.turnId,\n      );\n      const flushedMessageIds = new Set<MessageId>();\n      yield* Effect.forEach(\n        assistantMessageIds,\n        (messageId) =>\n          flushBufferedAssistantMessage({\n            event: input.event,\n            threadId: input.threadId,\n            messageId,\n            turnId: input.turnId,\n            createdAt: input.createdAt,\n            commandTag: input.commandTag,\n          }).pipe(\n            Effect.tap((flushed) =>\n              flushed ? Effect.sync(() => flushedMessageIds.add(messageId)) : Effect.void,\n            ),\n          ),\n        { concurrency: 1 },\n      ).pipe(Effect.asVoid);\n      return flushedMessageIds;\n    });\n\n  const finalizeAssistantMessage = (input: {\n    event: ProviderRuntimeEvent;\n    threadId: ThreadId;\n    messageId: MessageId;\n    turnId?: TurnId;\n    createdAt: string;\n    commandTag: string;\n    finalDeltaCommandTag: string;\n    fallbackText?: string;\n    hasProjectedMessage?: boolean;\n  }) =>\n    Effect.gen(function* () {\n      const bufferedText = yield* takeBufferedAssistantText(input.messageId);\n      const text =\n        bufferedText.length > 0\n          ? bufferedText\n          : (input.fallbackText?.trim().length ?? 0) > 0\n            ? input.fallbackText!\n            : \"\";\n      const hasRenderableText = hasRenderableAssistantText(text);\n\n      if (hasRenderableText) {\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.message.assistant.delta\",\n          commandId: yield* providerCommandId(input.event, input.finalDeltaCommandTag),\n          threadId: input.threadId,\n          messageId: input.messageId,\n          delta: text,\n          ...(input.turnId ? { turnId: input.turnId } : {}),\n          createdAt: input.createdAt,\n        });\n      }\n\n      if (input.hasProjectedMessage || hasRenderableText) {\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.message.assistant.complete\",\n          commandId: yield* providerCommandId(input.event, input.commandTag),\n          threadId: input.threadId,\n          messageId: input.messageId,\n          ...(input.turnId ? { turnId: input.turnId } : {}),\n          createdAt: input.createdAt,\n        });\n      }\n      yield* clearAssistantMessageState(input.messageId);\n    });\n\n  const finalizeActiveAssistantSegmentForTurn = (input: {\n    event: ProviderRuntimeEvent;\n    threadId: ThreadId;\n    turnId: TurnId;\n    createdAt: string;\n    commandTag: string;\n    finalDeltaCommandTag: string;\n    hasProjectedMessage: boolean;\n    flushedMessageIds?: ReadonlySet<MessageId>;\n  }) =>\n    Effect.gen(function* () {\n      const activeMessageId = yield* getActiveAssistantMessageIdForTurn(\n        input.threadId,\n        input.turnId,\n      );\n      if (Option.isNone(activeMessageId)) {\n        return;\n      }\n\n      yield* finalizeAssistantMessage({\n        event: input.event,\n        threadId: input.threadId,\n        messageId: activeMessageId.value,\n        turnId: input.turnId,\n        createdAt: input.createdAt,\n        commandTag: input.commandTag,\n        finalDeltaCommandTag: input.finalDeltaCommandTag,\n        hasProjectedMessage:\n          input.hasProjectedMessage ||\n          (input.flushedMessageIds?.has(activeMessageId.value) ?? false),\n      });\n      yield* forgetAssistantMessageId(input.threadId, input.turnId, activeMessageId.value);\n\n      const state = yield* getAssistantSegmentStateForTurn(input.threadId, input.turnId);\n      if (Option.isSome(state)) {\n        yield* setAssistantSegmentStateForTurn(input.threadId, input.turnId, {\n          ...state.value,\n          activeMessageId: null,\n        });\n      }\n    });\n\n  const upsertProposedPlan = (input: {\n    event: ProviderRuntimeEvent;\n    threadId: ThreadId;\n    threadProposedPlans: ReadonlyArray<{\n      id: string;\n      createdAt: string;\n      implementedAt: string | null;\n      implementationThreadId: ThreadId | null;\n    }>;\n    planId: string;\n    turnId?: TurnId;\n    planMarkdown: string | undefined;\n    createdAt: string;\n    updatedAt: string;\n  }) =>\n    Effect.gen(function* () {\n      const planMarkdown = normalizeProposedPlanMarkdown(input.planMarkdown);\n      if (!planMarkdown) {\n        return;\n      }\n\n      const existingPlan = findProposedPlanById(input.threadProposedPlans, input.planId);\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.proposed-plan.upsert\",\n        commandId: yield* providerCommandId(input.event, \"proposed-plan-upsert\"),\n        threadId: input.threadId,\n        proposedPlan: {\n          id: input.planId,\n          turnId: input.turnId ?? null,\n          planMarkdown,\n          implementedAt: existingPlan?.implementedAt ?? null,\n          implementationThreadId: existingPlan?.implementationThreadId ?? null,\n          createdAt: existingPlan?.createdAt ?? input.createdAt,\n          updatedAt: input.updatedAt,\n        },\n        createdAt: input.updatedAt,\n      });\n    });\n\n  const finalizeBufferedProposedPlan = (input: {\n    event: ProviderRuntimeEvent;\n    threadId: ThreadId;\n    threadProposedPlans: ReadonlyArray<{\n      id: string;\n      createdAt: string;\n      implementedAt: string | null;\n      implementationThreadId: ThreadId | null;\n    }>;\n    planId: string;\n    turnId?: TurnId;\n    fallbackMarkdown?: string;\n    updatedAt: string;\n  }) =>\n    Effect.gen(function* () {\n      const bufferedPlan = yield* takeBufferedProposedPlan(input.planId);\n      const bufferedMarkdown = normalizeProposedPlanMarkdown(bufferedPlan?.text);\n      const fallbackMarkdown = normalizeProposedPlanMarkdown(input.fallbackMarkdown);\n      const planMarkdown = bufferedMarkdown ?? fallbackMarkdown;\n      if (!planMarkdown) {\n        return;\n      }\n\n      yield* upsertProposedPlan({\n        event: input.event,\n        threadId: input.threadId,\n        threadProposedPlans: input.threadProposedPlans,\n        planId: input.planId,\n        ...(input.turnId ? { turnId: input.turnId } : {}),\n        planMarkdown,\n        createdAt:\n          bufferedPlan?.createdAt && bufferedPlan.createdAt.length > 0\n            ? bufferedPlan.createdAt\n            : input.updatedAt,\n        updatedAt: input.updatedAt,\n      });\n      yield* clearBufferedProposedPlan(input.planId);\n    });\n\n  const clearTurnStateForSession = (threadId: ThreadId) =>\n    Effect.gen(function* () {\n      const prefix = `${threadId}:`;\n      const proposedPlanPrefix = `plan:${threadId}:`;\n      const turnKeys = Array.from(yield* Cache.keys(turnMessageIdsByTurnKey));\n      const assistantSegmentKeys = Array.from(yield* Cache.keys(assistantSegmentStateByTurnKey));\n      const proposedPlanKeys = Array.from(yield* Cache.keys(bufferedProposedPlanById));\n      yield* Effect.forEach(\n        turnKeys,\n        (key) =>\n          Effect.gen(function* () {\n            if (!key.startsWith(prefix)) {\n              return;\n            }\n\n            const messageIds = yield* Cache.getOption(turnMessageIdsByTurnKey, key);\n            if (Option.isSome(messageIds)) {\n              yield* Effect.forEach(messageIds.value, clearAssistantMessageState, {\n                concurrency: 1,\n              }).pipe(Effect.asVoid);\n            }\n\n            yield* Cache.invalidate(turnMessageIdsByTurnKey, key);\n          }),\n        { concurrency: 1 },\n      ).pipe(Effect.asVoid);\n      yield* Effect.forEach(\n        assistantSegmentKeys,\n        (key) =>\n          key.startsWith(prefix)\n            ? Cache.invalidate(assistantSegmentStateByTurnKey, key)\n            : Effect.void,\n        { concurrency: 1 },\n      ).pipe(Effect.asVoid);\n      yield* Effect.forEach(\n        proposedPlanKeys,\n        (key) =>\n          key.startsWith(proposedPlanPrefix)\n            ? Cache.invalidate(bufferedProposedPlanById, key)\n            : Effect.void,\n        { concurrency: 1 },\n      ).pipe(Effect.asVoid);\n    });\n\n  const getSourceProposedPlanReferenceForPendingTurnStart = Effect.fn(\n    \"getSourceProposedPlanReferenceForPendingTurnStart\",\n  )(function* (threadId: ThreadId) {\n    const pendingTurnStart = yield* projectionTurnRepository.getPendingTurnStartByThreadId({\n      threadId,\n    });\n    if (Option.isNone(pendingTurnStart)) {\n      return null;\n    }\n\n    const sourceThreadId = pendingTurnStart.value.sourceProposedPlanThreadId;\n    const sourcePlanId = pendingTurnStart.value.sourceProposedPlanId;\n    if (sourceThreadId === null || sourcePlanId === null) {\n      return null;\n    }\n\n    return {\n      sourceThreadId,\n      sourcePlanId,\n    } as const;\n  });\n\n  const getExpectedProviderTurnIdForThread = Effect.fn(\"getExpectedProviderTurnIdForThread\")(\n    function* (threadId: ThreadId) {\n      const sessions = yield* providerService.listSessions();\n      const session = sessions.find((entry) => entry.threadId === threadId);\n      return session?.activeTurnId;\n    },\n  );\n\n  const getSourceProposedPlanReferenceForAcceptedTurnStart = Effect.fn(\n    \"getSourceProposedPlanReferenceForAcceptedTurnStart\",\n  )(function* (threadId: ThreadId, eventTurnId: TurnId | undefined) {\n    if (eventTurnId === undefined) {\n      return null;\n    }\n\n    const expectedTurnId = yield* getExpectedProviderTurnIdForThread(threadId);\n    if (!sameId(expectedTurnId, eventTurnId)) {\n      return null;\n    }\n\n    return yield* getSourceProposedPlanReferenceForPendingTurnStart(threadId);\n  });\n\n  const markSourceProposedPlanImplemented = Effect.fn(\"markSourceProposedPlanImplemented\")(\n    function* (\n      sourceThreadId: ThreadId,\n      sourcePlanId: OrchestrationProposedPlanId,\n      implementationThreadId: ThreadId,\n      implementedAt: string,\n    ) {\n      const sourceThread = yield* resolveThreadDetail(sourceThreadId);\n      const sourcePlan = sourceThread?.proposedPlans.find((entry) => entry.id === sourcePlanId);\n      if (!sourceThread || !sourcePlan || sourcePlan.implementedAt !== null) {\n        return;\n      }\n\n      const commandUuid = yield* crypto.randomUUIDv4;\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.proposed-plan.upsert\",\n        commandId: CommandId.make(\n          `provider:source-proposed-plan-implemented:${implementationThreadId}:${commandUuid}`,\n        ),\n        threadId: sourceThread.id,\n        proposedPlan: {\n          ...sourcePlan,\n          implementedAt,\n          implementationThreadId,\n          updatedAt: implementedAt,\n        },\n        createdAt: implementedAt,\n      });\n    },\n  );\n\n  const recordTouchedPathsForTurn = Effect.fn(\"recordTouchedPathsForTurn\")(function* (input: {\n    readonly event: ProviderRuntimeEvent;\n    readonly threadId: ThreadId;\n    readonly turnId: TurnId;\n  }) {\n    const extractedPaths = extractTouchedPathsFromRuntimeEvent(input.event);\n    if (extractedPaths.length === 0) {\n      return;\n    }\n\n    const checkpointContext = yield* projectionSnapshotQuery\n      .getThreadCheckpointContext(input.threadId)\n      .pipe(\n        Effect.map(Option.getOrUndefined),\n        Effect.catch(() => Effect.void),\n      );\n    const workspaceCwd =\n      checkpointContext?.worktreePath ?? checkpointContext?.workspaceRoot ?? undefined;\n    if (!workspaceCwd || !isGitRepository(workspaceCwd)) {\n      return;\n    }\n\n    const pathsBySnapshotKind = new Map<string, \"edit-snapshot\" | \"path-only\">();\n    for (const entry of extractedPaths) {\n      const normalizedPath = normalizeTouchedPath(entry.path, workspaceCwd);\n      if (!normalizedPath) {\n        continue;\n      }\n      const existing = pathsBySnapshotKind.get(normalizedPath);\n      if (existing !== \"edit-snapshot\") {\n        pathsBySnapshotKind.set(normalizedPath, entry.snapshotKind);\n      }\n    }\n\n    for (const [relativePath, snapshotKind] of pathsBySnapshotKind.entries()) {\n      if (snapshotKind === \"path-only\") {\n        yield* turnFileSnapshots.upsertSnapshot({\n          threadId: input.threadId,\n          turnId: input.turnId,\n          path: relativePath,\n          blobSha: null,\n          deleted: false,\n          preserveExistingSnapshot: true,\n          updatedAt: input.event.createdAt,\n        });\n        continue;\n      }\n\n      const blobShaResult = yield* checkpointStore\n        .hashFileBlob({\n          cwd: workspaceCwd,\n          path: relativePath,\n        })\n        .pipe(Effect.result);\n\n      if (blobShaResult._tag === \"Failure\") {\n        yield* Effect.logWarning(\"provider runtime ingestion failed to hash touched file\", {\n          eventId: input.event.eventId,\n          eventType: input.event.type,\n          threadId: input.threadId,\n          turnId: input.turnId,\n          path: relativePath,\n          detail: blobShaResult.failure.message,\n        });\n        yield* turnFileSnapshots.upsertSnapshot({\n          threadId: input.threadId,\n          turnId: input.turnId,\n          path: relativePath,\n          blobSha: null,\n          deleted: false,\n          preserveExistingSnapshot: true,\n          updatedAt: input.event.createdAt,\n        });\n        continue;\n      }\n\n      yield* turnFileSnapshots.upsertSnapshot({\n        threadId: input.threadId,\n        turnId: input.turnId,\n        path: relativePath,\n        blobSha: blobShaResult.success,\n        deleted: blobShaResult.success === null,\n        updatedAt: input.event.createdAt,\n      });\n    }\n  });\n\n  const processRuntimeEvent = (event: ProviderRuntimeEvent) =>\n    Effect.gen(function* () {\n      yield* materializeIndependentThreadIfNeeded(event);\n      yield* materializeChildThreadIfNeeded(event);\n      yield* refreshMaterializedChildThreadMetadataIfNeeded(event);\n      const thread = yield* resolveThreadShell(event.threadId);\n      if (!thread) return;\n      yield* appendMaterializedChildParentResultIfNeeded(event, thread);\n\n      let loadedThreadDetail: OrchestrationThread | null | undefined;\n      const getLoadedThreadDetail = () =>\n        Effect.gen(function* () {\n          if (loadedThreadDetail !== undefined) {\n            return loadedThreadDetail;\n          }\n          loadedThreadDetail = (yield* resolveThreadDetail(thread.id)) ?? null;\n          return loadedThreadDetail;\n        });\n\n      const now = event.createdAt;\n      const eventTurnId = toTurnId(event.turnId);\n      const activeTurnId = thread.session?.activeTurnId ?? null;\n      const packedEventTurnId = eventTurnId ?? activeTurnId ?? undefined;\n\n      if (packedEventTurnId) {\n        yield* recordTouchedPathsForTurn({\n          event,\n          threadId: thread.id,\n          turnId: packedEventTurnId,\n        }).pipe(\n          Effect.catchCause((cause) =>\n            Effect.logWarning(\"provider runtime ingestion failed to record touched paths\", {\n              eventId: event.eventId,\n              eventType: event.type,\n              cause: Cause.pretty(cause),\n            }),\n          ),\n        );\n      }\n\n      const conflictsWithActiveTurn =\n        activeTurnId !== null && eventTurnId !== undefined && !sameId(activeTurnId, eventTurnId);\n\n      // A turn.started that conflicts with the active turn is legitimate when\n      // the server itself has a turn start pending for this thread AND the\n      // provider session already tracks the event's turn as its active turn:\n      // steering a running turn makes some providers (e.g. opencode) open a\n      // new turn without ever completing the superseded one. A stale\n      // turn.started for some other turn id still gets rejected.\n      const conflictingTurnStartIsPendingTurnStart =\n        event.type === \"turn.started\" && conflictsWithActiveTurn\n          ? sameId(yield* getExpectedProviderTurnIdForThread(thread.id), eventTurnId) &&\n            Option.isSome(\n              yield* projectionTurnRepository.getPendingTurnStartByThreadId({\n                threadId: thread.id,\n              }),\n            )\n          : false;\n\n      const shouldApplyThreadLifecycle = (() => {\n        if (!STRICT_PROVIDER_LIFECYCLE_GUARD) {\n          return true;\n        }\n        switch (event.type) {\n          case \"session.exited\":\n            return true;\n          case \"session.started\":\n          case \"thread.started\":\n            return true;\n          case \"turn.started\":\n            return !conflictsWithActiveTurn || conflictingTurnStartIsPendingTurnStart;\n          case \"turn.completed\":\n            if (conflictsWithActiveTurn) {\n              return false;\n            }\n            // Only the active turn may close the lifecycle state.\n            if (activeTurnId !== null && packedEventTurnId !== undefined) {\n              return sameId(activeTurnId, packedEventTurnId);\n            }\n            // Without an active turn, an untargeted completion cannot prove\n            // that it belongs to a turn this thread actually ran. Resume\n            // handshakes and late provider results can otherwise overwrite a\n            // pending or ready lifecycle state.\n            return eventTurnId !== undefined;\n          default:\n            return true;\n        }\n      })();\n      const acceptedTurnStartedSourcePlan =\n        event.type === \"turn.started\" && shouldApplyThreadLifecycle\n          ? yield* getSourceProposedPlanReferenceForAcceptedTurnStart(thread.id, eventTurnId)\n          : null;\n\n      if (\n        event.type === \"session.started\" ||\n        event.type === \"session.state.changed\" ||\n        event.type === \"session.exited\" ||\n        event.type === \"thread.started\" ||\n        event.type === \"turn.started\" ||\n        event.type === \"turn.completed\"\n      ) {\n        const sessionStateStatus =\n          event.type === \"session.state.changed\"\n            ? orchestrationSessionStatusFromRuntimeState(event.payload.state)\n            : null;\n        const sessionStateReferencesCompletedLatestTurn =\n          sessionStateStatus === \"running\" &&\n          activeTurnId === null &&\n          packedEventTurnId !== undefined &&\n          sameId(thread.latestTurn?.turnId, packedEventTurnId) &&\n          thread.latestTurn?.completedAt != null;\n        const nextActiveTurnId =\n          event.type === \"turn.started\"\n            ? (packedEventTurnId ?? null)\n            : event.type === \"turn.completed\" || event.type === \"session.exited\"\n              ? null\n              : sessionStateStatus === \"running\"\n                ? (activeTurnId ??\n                  (sessionStateReferencesCompletedLatestTurn ? null : (packedEventTurnId ?? null)))\n                : activeTurnId;\n        const status = (() => {\n          switch (event.type) {\n            case \"session.state.changed\":\n              return (sessionStateStatus ?? \"ready\") === \"running\" && nextActiveTurnId === null\n                ? \"ready\"\n                : (sessionStateStatus ?? \"ready\");\n            case \"turn.started\":\n              return \"running\";\n            case \"session.exited\":\n              return \"stopped\";\n            case \"turn.completed\":\n              return normalizeRuntimeTurnState(event.payload.state) === \"failed\"\n                ? \"error\"\n                : \"ready\";\n            case \"session.started\":\n            case \"thread.started\":\n              // Provider thread/session start notifications can arrive during an\n              // active turn; preserve turn-running state in that case.\n              return activeTurnId !== null ? \"running\" : \"ready\";\n          }\n        })();\n        const lastError =\n          event.type === \"session.state.changed\" && event.payload.state === \"error\"\n            ? (event.payload.reason ?? thread.session?.lastError ?? \"Provider session error\")\n            : event.type === \"turn.completed\" &&\n                normalizeRuntimeTurnState(event.payload.state) === \"failed\"\n              ? (event.payload.errorMessage ?? thread.session?.lastError ?? \"Turn failed\")\n              : null;\n\n        if (shouldApplyThreadLifecycle) {\n          if (event.type === \"turn.started\" && acceptedTurnStartedSourcePlan !== null) {\n            yield* markSourceProposedPlanImplemented(\n              acceptedTurnStartedSourcePlan.sourceThreadId,\n              acceptedTurnStartedSourcePlan.sourcePlanId,\n              thread.id,\n              now,\n            ).pipe(\n              Effect.catchCause((cause) =>\n                Effect.logWarning(\n                  \"provider runtime ingestion failed to mark source proposed plan\",\n                  {\n                    eventId: event.eventId,\n                    eventType: event.type,\n                    cause: Cause.pretty(cause),\n                  },\n                ),\n              ),\n            );\n          }\n\n          yield* orchestrationEngine.dispatch({\n            type: \"thread.session.set\",\n            commandId: yield* providerCommandId(event, \"thread-session-set\"),\n            threadId: thread.id,\n            session: {\n              threadId: thread.id,\n              status,\n              providerName: event.provider,\n              ...(event.providerInstanceId !== undefined\n                ? { providerInstanceId: event.providerInstanceId }\n                : {}),\n              runtimeMode: thread.session?.runtimeMode ?? \"full-access\",\n              activeTurnId: nextActiveTurnId,\n              lastError,\n              updatedAt: now,\n            },\n            createdAt: now,\n          });\n        }\n      }\n\n      const assistantDelta =\n        event.type === \"content.delta\" && event.payload.streamKind === \"assistant_text\"\n          ? event.payload.delta\n          : undefined;\n      const proposedPlanDelta =\n        event.type === \"turn.proposed.delta\" ? event.payload.delta : undefined;\n\n      if (assistantDelta && assistantDelta.length > 0) {\n        const turnId = packedEventTurnId;\n        const assistantMessageId = yield* getOrCreateAssistantMessageId({\n          threadId: thread.id,\n          event,\n          ...(turnId ? { turnId } : {}),\n        });\n        if (turnId) {\n          yield* rememberAssistantMessageId(thread.id, turnId, assistantMessageId);\n        }\n\n        const assistantDeliveryMode: AssistantDeliveryMode = yield* Effect.map(\n          serverSettingsService.getSettings,\n          (settings) => (settings.enableAssistantStreaming ? \"streaming\" : \"buffered\"),\n        );\n        if (assistantDeliveryMode === \"buffered\") {\n          const spillChunk = yield* appendBufferedAssistantText(assistantMessageId, assistantDelta);\n          if (spillChunk.length > 0) {\n            yield* orchestrationEngine.dispatch({\n              type: \"thread.message.assistant.delta\",\n              commandId: yield* providerCommandId(event, \"assistant-delta-buffer-spill\"),\n              threadId: thread.id,\n              messageId: assistantMessageId,\n              delta: spillChunk,\n              ...(turnId ? { turnId } : {}),\n              createdAt: now,\n            });\n          }\n        } else {\n          yield* orchestrationEngine.dispatch({\n            type: \"thread.message.assistant.delta\",\n            commandId: yield* providerCommandId(event, \"assistant-delta\"),\n            threadId: thread.id,\n            messageId: assistantMessageId,\n            delta: assistantDelta,\n            ...(turnId ? { turnId } : {}),\n            createdAt: now,\n          });\n        }\n      }\n\n      if (event.type === \"files.persisted\" && event.payload.files.length > 0) {\n        const checkpointContextOption = yield* projectionSnapshotQuery\n          .getThreadCheckpointContext(thread.id)\n          .pipe(Effect.catch(() => Effect.succeed(Option.none())));\n        const checkpointContext = Option.getOrUndefined(checkpointContextOption);\n        const workspaceRoot = checkpointContext?.worktreePath ?? checkpointContext?.workspaceRoot;\n        if (workspaceRoot) {\n          const attachments = (yield* Effect.forEach(\n            event.payload.files,\n            (file) =>\n              materializePersistedImageFile({\n                threadId: thread.id,\n                workspaceRoot,\n                filename: file.filename,\n              }),\n            { concurrency: 1 },\n          )).filter((attachment): attachment is ChatAttachment => attachment !== null);\n\n          if (attachments.length > 0) {\n            const turnId = packedEventTurnId;\n            const assistantMessageId = yield* getOrCreateAssistantMessageId({\n              threadId: thread.id,\n              event,\n              ...(turnId ? { turnId } : {}),\n            });\n            if (turnId) {\n              yield* rememberAssistantMessageId(thread.id, turnId, assistantMessageId);\n            }\n\n            yield* orchestrationEngine.dispatch({\n              type: \"thread.message.attachments.add\",\n              commandId: yield* providerCommandId(event, \"assistant-attachments-add\"),\n              threadId: thread.id,\n              messageId: assistantMessageId,\n              role: \"assistant\",\n              attachments,\n              ...(turnId ? { turnId } : {}),\n              createdAt: now,\n            });\n          }\n        }\n      }\n\n      if (event.type === \"image.generated\") {\n        const attachment = yield* materializeGeneratedImage({\n          threadId: thread.id,\n          dataUrl: event.payload.dataUrl,\n          ...(event.payload.name ? { name: event.payload.name } : {}),\n          ...(event.itemId\n            ? {\n                stableKey: `provider-item:${event.itemId}:name:${event.payload.name ?? \"image\"}`,\n              }\n            : {}),\n        });\n\n        if (attachment) {\n          const turnId = packedEventTurnId;\n          const assistantMessageId = yield* getOrCreateAssistantMessageId({\n            threadId: thread.id,\n            event,\n            ...(turnId ? { turnId } : {}),\n          });\n          if (turnId) {\n            yield* rememberAssistantMessageId(thread.id, turnId, assistantMessageId);\n          }\n\n          yield* orchestrationEngine.dispatch({\n            type: \"thread.message.attachments.add\",\n            commandId: yield* providerCommandId(event, \"assistant-generated-image-add\"),\n            threadId: thread.id,\n            messageId: assistantMessageId,\n            role: \"assistant\",\n            attachments: [attachment],\n            ...(turnId ? { turnId } : {}),\n            createdAt: now,\n          });\n        }\n      }\n\n      const pauseForUserTurnId =\n        event.type === \"request.opened\" || event.type === \"user-input.requested\"\n          ? packedEventTurnId\n          : undefined;\n      if (pauseForUserTurnId) {\n        const detailedThread = yield* getLoadedThreadDetail();\n        const assistantDeliveryMode: AssistantDeliveryMode = yield* Effect.map(\n          serverSettingsService.getSettings,\n          (settings) => (settings.enableAssistantStreaming ? \"streaming\" : \"buffered\"),\n        );\n        const flushedMessageIds =\n          assistantDeliveryMode === \"buffered\"\n            ? yield* flushBufferedAssistantMessagesForTurn({\n                event,\n                threadId: thread.id,\n                turnId: pauseForUserTurnId,\n                createdAt: now,\n                commandTag:\n                  event.type === \"request.opened\"\n                    ? \"assistant-delta-flush-on-request-opened\"\n                    : \"assistant-delta-flush-on-user-input-requested\",\n              })\n            : new Set<MessageId>();\n        yield* finalizeActiveAssistantSegmentForTurn({\n          event,\n          threadId: thread.id,\n          turnId: pauseForUserTurnId,\n          createdAt: now,\n          commandTag:\n            event.type === \"request.opened\"\n              ? \"assistant-complete-on-request-opened\"\n              : \"assistant-complete-on-user-input-requested\",\n          finalDeltaCommandTag:\n            event.type === \"request.opened\"\n              ? \"assistant-delta-finalize-on-request-opened\"\n              : \"assistant-delta-finalize-on-user-input-requested\",\n          hasProjectedMessage:\n            detailedThread !== null &&\n            hasAssistantMessageForTurn(detailedThread.messages, pauseForUserTurnId, {\n              streamingOnly: true,\n            }),\n          flushedMessageIds,\n        });\n      }\n\n      if (proposedPlanDelta && proposedPlanDelta.length > 0) {\n        const planId = proposedPlanIdFromEvent(event, thread.id, packedEventTurnId);\n        yield* appendBufferedProposedPlan(planId, proposedPlanDelta, now);\n      }\n\n      const assistantCompletion =\n        event.type === \"item.completed\" && event.payload.itemType === \"assistant_message\"\n          ? {\n              messageId: MessageId.make(\n                `assistant:${event.itemId ?? event.turnId ?? event.eventId}`,\n              ),\n              fallbackText: event.payload.detail,\n            }\n          : undefined;\n      const proposedPlanCompletion =\n        event.type === \"turn.proposed.completed\"\n          ? {\n              planId: proposedPlanIdFromEvent(event, thread.id, packedEventTurnId),\n              turnId: packedEventTurnId,\n              planMarkdown: event.payload.planMarkdown,\n            }\n          : undefined;\n\n      if (assistantCompletion) {\n        const detailedThread = yield* getLoadedThreadDetail();\n        const messages = detailedThread?.messages ?? [];\n        const turnId = packedEventTurnId;\n        const activeAssistantMessageId = turnId\n          ? yield* getActiveAssistantMessageIdForTurn(thread.id, turnId)\n          : Option.none<MessageId>();\n        const hasAssistantMessagesForTurn =\n          turnId !== undefined ? hasAssistantMessageForTurn(messages, turnId) : false;\n        const assistantMessageId = Option.getOrElse(\n          activeAssistantMessageId,\n          () => assistantCompletion.messageId,\n        );\n        const existingAssistantMessage = findMessageById(messages, assistantMessageId);\n        const shouldApplyFallbackCompletionText =\n          !existingAssistantMessage || existingAssistantMessage.text.length === 0;\n\n        const shouldSkipRedundantCompletion =\n          Option.isNone(activeAssistantMessageId) &&\n          turnId !== undefined &&\n          hasAssistantMessagesForTurn &&\n          (assistantCompletion.fallbackText?.trim().length ?? 0) === 0;\n\n        if (!shouldSkipRedundantCompletion) {\n          if (turnId && Option.isNone(activeAssistantMessageId)) {\n            yield* rememberAssistantMessageId(thread.id, turnId, assistantMessageId);\n          }\n\n          yield* finalizeAssistantMessage({\n            event,\n            threadId: thread.id,\n            messageId: assistantMessageId,\n            ...(turnId ? { turnId } : {}),\n            createdAt: now,\n            commandTag: \"assistant-complete\",\n            finalDeltaCommandTag: \"assistant-delta-finalize\",\n            hasProjectedMessage: existingAssistantMessage !== undefined,\n            ...(assistantCompletion.fallbackText !== undefined && shouldApplyFallbackCompletionText\n              ? { fallbackText: assistantCompletion.fallbackText }\n              : {}),\n          });\n\n          if (turnId) {\n            yield* forgetAssistantMessageId(thread.id, turnId, assistantMessageId);\n          }\n        }\n\n        if (turnId) {\n          yield* clearAssistantSegmentStateForTurn(thread.id, turnId);\n        }\n      }\n\n      if (proposedPlanCompletion) {\n        const detailedThread = yield* getLoadedThreadDetail();\n        yield* finalizeBufferedProposedPlan({\n          event,\n          threadId: thread.id,\n          threadProposedPlans: detailedThread?.proposedPlans ?? [],\n          planId: proposedPlanCompletion.planId,\n          ...(proposedPlanCompletion.turnId ? { turnId: proposedPlanCompletion.turnId } : {}),\n          fallbackMarkdown: proposedPlanCompletion.planMarkdown,\n          updatedAt: now,\n        });\n      }\n\n      if (event.type === \"turn.completed\") {\n        const detailedThread = yield* getLoadedThreadDetail();\n        const messages = detailedThread?.messages ?? [];\n        const proposedPlans = detailedThread?.proposedPlans ?? [];\n        const turnId = packedEventTurnId;\n        if (turnId) {\n          const assistantMessageIds = yield* getAssistantMessageIdsForTurn(thread.id, turnId);\n          yield* Effect.forEach(\n            assistantMessageIds,\n            (assistantMessageId) =>\n              finalizeAssistantMessage({\n                event,\n                threadId: thread.id,\n                messageId: assistantMessageId,\n                turnId,\n                createdAt: now,\n                commandTag: \"assistant-complete-finalize\",\n                finalDeltaCommandTag: \"assistant-delta-finalize-fallback\",\n                hasProjectedMessage: findMessageById(messages, assistantMessageId) !== undefined,\n              }),\n            { concurrency: 1 },\n          ).pipe(Effect.asVoid);\n          yield* clearAssistantMessageIdsForTurn(thread.id, turnId);\n          yield* clearAssistantSegmentStateForTurn(thread.id, turnId);\n\n          yield* finalizeBufferedProposedPlan({\n            event,\n            threadId: thread.id,\n            threadProposedPlans: proposedPlans,\n            planId: proposedPlanIdForTurn(thread.id, turnId),\n            turnId,\n            updatedAt: now,\n          });\n        }\n      }\n\n      if (event.type === \"session.exited\") {\n        yield* clearTurnStateForSession(thread.id);\n      }\n\n      if (event.type === \"runtime.error\") {\n        const runtimeErrorMessage = event.payload.message;\n\n        const shouldApplyRuntimeError = !STRICT_PROVIDER_LIFECYCLE_GUARD\n          ? true\n          : activeTurnId === null ||\n            packedEventTurnId === undefined ||\n            sameId(activeTurnId, packedEventTurnId);\n\n        if (shouldApplyRuntimeError) {\n          yield* orchestrationEngine.dispatch({\n            type: \"thread.session.set\",\n            commandId: yield* providerCommandId(event, \"runtime-error-session-set\"),\n            threadId: thread.id,\n            session: {\n              threadId: thread.id,\n              status: \"error\",\n              providerName: event.provider,\n              ...(event.providerInstanceId !== undefined\n                ? { providerInstanceId: event.providerInstanceId }\n                : {}),\n              runtimeMode: thread.session?.runtimeMode ?? \"full-access\",\n              activeTurnId: packedEventTurnId ?? null,\n              lastError: runtimeErrorMessage,\n              updatedAt: now,\n            },\n            createdAt: now,\n          });\n        }\n      }\n\n      if (event.type === \"thread.metadata.updated\" && event.payload.name) {\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.meta.update\",\n          commandId: yield* providerCommandId(event, \"thread-meta-update\"),\n          threadId: thread.id,\n          title: event.payload.name,\n        });\n      }\n\n      if (event.type === \"turn.diff.updated\") {\n        const turnId = packedEventTurnId;\n        const checkpointContext = turnId\n          ? yield* projectionSnapshotQuery\n              .getThreadCheckpointContext(thread.id)\n              .pipe(Effect.map(Option.getOrUndefined))\n          : undefined;\n        const workspaceCwd =\n          checkpointContext?.worktreePath ?? checkpointContext?.workspaceRoot ?? undefined;\n        if (turnId && checkpointContext && workspaceCwd && isGitRepository(workspaceCwd)) {\n          // Skip if a checkpoint already exists for this turn. A real\n          // (non-placeholder) capture from CheckpointReactor should not\n          // be clobbered, and dispatching a duplicate placeholder for the\n          // same turnId would produce an unstable checkpointTurnCount.\n          if (hasCheckpointForTurn(checkpointContext.checkpoints, turnId)) {\n            // Already tracked; no-op.\n          } else {\n            const assistantMessageId = MessageId.make(\n              `assistant:${event.itemId ?? event.turnId ?? event.eventId}`,\n            );\n            yield* orchestrationEngine.dispatch({\n              type: \"thread.turn.diff.complete\",\n              commandId: yield* providerCommandId(event, \"thread-turn-diff-complete\"),\n              threadId: thread.id,\n              turnId,\n              completedAt: now,\n              checkpointRef: CheckpointRef.make(`provider-diff:${event.eventId}`),\n              status: \"missing\",\n              files: [],\n              attribution: \"unattributed\",\n              assistantMessageId,\n              checkpointTurnCount: maxCheckpointTurnCount(checkpointContext.checkpoints) + 1,\n              createdAt: now,\n            });\n          }\n        }\n      }\n\n      const activities = runtimeEventToActivities(event, packedEventTurnId);\n      yield* Effect.forEach(activities, (activity) =>\n        providerCommandId(event, \"thread-activity-append\").pipe(\n          Effect.flatMap((commandId) =>\n            orchestrationEngine.dispatch({\n              type: \"thread.activity.append\",\n              commandId,\n              threadId: thread.id,\n              activity,\n              createdAt: activity.createdAt,\n            }),\n          ),\n        ),\n      ).pipe(Effect.asVoid);\n    });\n\n  const processDomainEvent = (_event: TurnStartRequestedDomainEvent) => Effect.void;\n\n  const processInput = (input: RuntimeIngestionInput) =>\n    input.source === \"runtime\" ? processRuntimeEvent(input.event) : processDomainEvent(input.event);\n\n  const processInputSafely = (input: RuntimeIngestionInput) =>\n    processInput(input).pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.failCause(cause);\n        }\n        return Effect.logWarning(\"provider runtime ingestion failed to process event\", {\n          source: input.source,\n          eventId: input.event.eventId,\n          eventType: input.event.type,\n          cause: Cause.pretty(cause),\n        });\n      }),\n    );\n\n  const worker = yield* makeDrainableWorker(processInputSafely);\n\n  const start: ProviderRuntimeIngestionShape[\"start\"] = () =>\n    Effect.gen(function* () {\n      yield* Effect.forkScoped(\n        Stream.runForEach(providerService.streamEvents, (event) =>\n          worker.enqueue({ source: \"runtime\", event }),\n        ),\n      );\n      yield* Effect.forkScoped(\n        Stream.runForEach(orchestrationEngine.streamDomainEvents, (event) => {\n          if (event.type !== \"thread.turn-start-requested\") {\n            return Effect.void;\n          }\n          return worker.enqueue({ source: \"domain\", event });\n        }),\n      );\n    });\n\n  return {\n    start,\n    drain: worker.drain,\n  } satisfies ProviderRuntimeIngestionShape;\n});\n\nexport const ProviderRuntimeIngestionLive = Layer.effect(\n  ProviderRuntimeIngestionService,\n  make,\n).pipe(Layer.provide(Layer.mergeAll(ProjectionTurnRepositoryLive, TurnFileSnapshotsLive)));\n","import {\n  type ChatAttachment,\n  CommandId,\n  EventId,\n  type MessageId,\n  type ModelSelection,\n  type OrchestrationEvent,\n  ProviderDriverKind,\n  type ProjectId,\n  type OrchestrationSession,\n  ThreadId,\n  type ProviderSession,\n  type RuntimeMode,\n  type TurnId,\n} from \"@salchi/contracts\";\nimport { isTemporaryWorktreeBranch, WORKTREE_BRANCH_PREFIX } from \"@salchi/shared/git\";\nimport * as Cache from \"effect/Cache\";\nimport * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Equal from \"effect/Equal\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { makeDrainableWorker } from \"@salchi/shared/DrainableWorker\";\n\nimport { resolveThreadWorkspaceCwd } from \"../../checkpointing/Utils.ts\";\nimport { increment, orchestrationEventsProcessedTotal } from \"../../observability/Metrics.ts\";\nimport { ProviderAdapterRequestError } from \"../../provider/Errors.ts\";\nimport type { ProviderServiceError } from \"../../provider/Errors.ts\";\nimport { TextGeneration } from \"../../textGeneration/TextGeneration.ts\";\nimport { ProviderService } from \"../../provider/Services/ProviderService.ts\";\nimport { ProjectionThreadQueuedTurnRepositoryLive } from \"../../persistence/Layers/ProjectionThreadQueuedTurns.ts\";\nimport { ProjectionThreadQueuedTurnRepository } from \"../../persistence/Services/ProjectionThreadQueuedTurns.ts\";\nimport { ProjectionThreadMessageRepositoryLive } from \"../../persistence/Layers/ProjectionThreadMessages.ts\";\nimport { ProjectionThreadMessageRepository } from \"../../persistence/Services/ProjectionThreadMessages.ts\";\nimport { ProjectionTurnRepositoryLive } from \"../../persistence/Layers/ProjectionTurns.ts\";\nimport { ProjectionTurnRepository } from \"../../persistence/Services/ProjectionTurns.ts\";\nimport { ProviderRegistry } from \"../../provider/Services/ProviderRegistry.ts\";\nimport { OrchestrationEngineService } from \"../Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"../Services/ProjectionSnapshotQuery.ts\";\nimport {\n  ProviderCommandReactor,\n  type ProviderCommandReactorShape,\n} from \"../Services/ProviderCommandReactor.ts\";\nimport { ServerSettingsService } from \"../../serverSettings.ts\";\nimport { VcsStatusBroadcaster } from \"../../vcs/VcsStatusBroadcaster.ts\";\nimport { GitWorkflowService } from \"../../git/GitWorkflowService.ts\";\nconst isProviderAdapterRequestError = Schema.is(ProviderAdapterRequestError);\nconst isProviderDriverKind = Schema.is(ProviderDriverKind);\n\ntype ProviderIntentEvent = Extract<\n  OrchestrationEvent,\n  {\n    type:\n      | \"thread.runtime-mode-set\"\n      | \"thread.turn-queued\"\n      | \"thread.queued-turn-cancelled\"\n      | \"thread.queued-turn-steer-requested\"\n      | \"thread.queued-turn-steer-failed\"\n      | \"thread.turn-start-requested\"\n      | \"thread.turn-interrupt-requested\"\n      | \"thread.approval-response-requested\"\n      | \"thread.user-input-response-requested\"\n      | \"thread.session-stop-requested\";\n  }\n>;\n\ntype ProviderCommandReactorDomainEvent =\n  | ProviderIntentEvent\n  | Extract<OrchestrationEvent, { type: \"thread.activity-appended\" }>\n  | Extract<OrchestrationEvent, { type: \"thread.session-set\" }>;\n\nfunction toNonEmptyProviderInput(value: string | undefined): string | undefined {\n  const normalized = value?.trim();\n  return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\nfunction mapProviderSessionStatusToOrchestrationStatus(\n  status: \"connecting\" | \"ready\" | \"running\" | \"error\" | \"closed\",\n): OrchestrationSession[\"status\"] {\n  switch (status) {\n    case \"connecting\":\n      return \"starting\";\n    case \"running\":\n      return \"running\";\n    case \"error\":\n      return \"error\";\n    case \"closed\":\n      return \"stopped\";\n    case \"ready\":\n    default:\n      return \"ready\";\n  }\n}\n\nconst turnStartKeyForEvent = (\n  event: Extract<ProviderIntentEvent, { type: \"thread.turn-start-requested\" }>,\n): string => (event.commandId !== null ? `command:${event.commandId}` : `event:${event.eventId}`);\n\nconst HANDLED_TURN_START_KEY_MAX = 10_000;\nconst HANDLED_TURN_START_KEY_TTL = Duration.minutes(30);\nconst DEFAULT_RUNTIME_MODE: RuntimeMode = \"full-access\";\nconst DEFAULT_THREAD_TITLE = \"New thread\";\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\nexport function providerErrorLabel(value: string | undefined): string {\n  const normalized = value?.trim();\n  return normalized && normalized.length > 0 ? normalized : \"unknown\";\n}\n\nexport function providerErrorLabelFromInstanceHint(input: {\n  readonly instanceId?: string | undefined;\n  readonly modelSelectionInstanceId?: string | undefined;\n  readonly sessionProvider?: string | undefined;\n}): string {\n  return providerErrorLabel(\n    input.instanceId ?? input.modelSelectionInstanceId ?? input.sessionProvider,\n  );\n}\n\nfunction canReplaceThreadTitle(currentTitle: string, titleSeed?: string): boolean {\n  const trimmedCurrentTitle = currentTitle.trim();\n  if (trimmedCurrentTitle === DEFAULT_THREAD_TITLE) {\n    return true;\n  }\n\n  const trimmedTitleSeed = titleSeed?.trim();\n  return trimmedTitleSeed !== undefined && trimmedTitleSeed.length > 0\n    ? trimmedCurrentTitle === trimmedTitleSeed\n    : false;\n}\n\nfunction findProviderAdapterRequestError(\n  cause: Cause.Cause<ProviderServiceError>,\n): ProviderAdapterRequestError | undefined {\n  const failReason = cause.reasons.find(Cause.isFailReason);\n  return isProviderAdapterRequestError(failReason?.error) ? failReason.error : undefined;\n}\n\nfunction isUnknownPendingApprovalRequestError(cause: Cause.Cause<ProviderServiceError>): boolean {\n  const error = findProviderAdapterRequestError(cause);\n  if (error) {\n    const detail = error.detail.toLowerCase();\n    return (\n      detail.includes(\"unknown pending approval request\") ||\n      detail.includes(\"unknown pending permission request\")\n    );\n  }\n  const message = Cause.pretty(cause);\n  return (\n    message.includes(\"unknown pending approval request\") ||\n    message.includes(\"unknown pending permission request\")\n  );\n}\n\nfunction isUnknownPendingUserInputRequestError(cause: Cause.Cause<ProviderServiceError>): boolean {\n  const error = findProviderAdapterRequestError(cause);\n  if (error) {\n    const detail = error.detail.toLowerCase();\n    return (\n      detail.includes(\"unknown pending user-input request\") ||\n      detail.includes(\"unknown pending user input request\") ||\n      detail.includes(\"unknown pending codex user input request\")\n    );\n  }\n  const message = Cause.pretty(cause).toLowerCase();\n  return (\n    message.includes(\"unknown pending user-input request\") ||\n    message.includes(\"unknown pending user input request\") ||\n    message.includes(\"unknown pending codex user input request\")\n  );\n}\n\nfunction stalePendingRequestDetail(\n  requestKind: \"approval\" | \"user-input\",\n  requestId: string,\n): string {\n  return `Stale pending ${requestKind} request: ${requestId}. Provider callback state does not survive app restarts or recovered sessions. Restart the turn to continue.`;\n}\n\nfunction buildGeneratedWorktreeBranchName(raw: string): string {\n  const normalized = raw\n    .trim()\n    .toLowerCase()\n    .replace(/^refs\\/heads\\//, \"\")\n    .replace(/['\"`]/g, \"\");\n\n  const withoutPrefix = normalized.startsWith(`${WORKTREE_BRANCH_PREFIX}/`)\n    ? normalized.slice(`${WORKTREE_BRANCH_PREFIX}/`.length)\n    : normalized;\n\n  const branchFragment = withoutPrefix\n    .replace(/[^a-z0-9/_-]+/g, \"-\")\n    .replace(/\\/+/g, \"/\")\n    .replace(/-+/g, \"-\")\n    .replace(/^[./_-]+|[./_-]+$/g, \"\")\n    .slice(0, 64)\n    .replace(/[./_-]+$/g, \"\");\n\n  const safeFragment = branchFragment.length > 0 ? branchFragment : \"update\";\n  return `${WORKTREE_BRANCH_PREFIX}/${safeFragment}`;\n}\n\nconst make = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const orchestrationEngine = yield* OrchestrationEngineService;\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const projectionThreadQueuedTurnRepository = yield* ProjectionThreadQueuedTurnRepository;\n  const projectionThreadMessageRepository = yield* ProjectionThreadMessageRepository;\n  const projectionTurnRepository = yield* ProjectionTurnRepository;\n  const providerService = yield* ProviderService;\n  const providerRegistry = yield* ProviderRegistry;\n  const gitWorkflow = yield* GitWorkflowService;\n  const vcsStatusBroadcaster = yield* VcsStatusBroadcaster;\n  const textGeneration = yield* TextGeneration;\n  const serverSettingsService = yield* ServerSettingsService;\n  const serverCommandId = (tag: string) =>\n    crypto.randomUUIDv4.pipe(Effect.map((uuid) => CommandId.make(`server:${tag}:${uuid}`)));\n  const serverEventId = () => crypto.randomUUIDv4.pipe(Effect.map(EventId.make));\n  const handledTurnStartKeys = yield* Cache.make<string, true>({\n    capacity: HANDLED_TURN_START_KEY_MAX,\n    timeToLive: HANDLED_TURN_START_KEY_TTL,\n    lookup: () => Effect.succeed(true),\n  });\n\n  const hasHandledTurnStartRecently = (key: string) =>\n    Cache.getOption(handledTurnStartKeys, key).pipe(\n      Effect.flatMap((cached) =>\n        Cache.set(handledTurnStartKeys, key, true).pipe(Effect.as(Option.isSome(cached))),\n      ),\n    );\n\n  const threadModelSelections = new Map<string, ModelSelection>();\n  const queuedTurnStartsByThreadId = new Map<\n    string,\n    Array<Extract<ProviderIntentEvent, { type: \"thread.turn-start-requested\" }>>\n  >();\n  const activeTurnStartThreadIds = new Set<string>();\n  const observedRunningTurnThreadIds = new Set<string>();\n  const queuedTurnPromotionMessageIdByThreadId = new Map<string, MessageId>();\n  const startupRecoveryBlockedThreadIds = new Set<string>();\n  let startupRecoveryInventoryUnavailable = false;\n\n  const appendProviderFailureActivity = (input: {\n    readonly threadId: ThreadId;\n    readonly kind:\n      | \"provider.turn.start.failed\"\n      | \"provider.turn.steer.failed\"\n      | \"provider.turn.interrupt.failed\"\n      | \"provider.approval.respond.failed\"\n      | \"provider.user-input.respond.failed\"\n      | \"provider.session.stop.failed\";\n    readonly summary: string;\n    readonly detail: string;\n    readonly turnId: TurnId | null;\n    readonly createdAt: string;\n    readonly requestId?: string;\n    readonly messageId?: MessageId;\n  }) =>\n    Effect.all({\n      commandId: serverCommandId(\"provider-failure-activity\"),\n      eventId: serverEventId(),\n    }).pipe(\n      Effect.flatMap(({ commandId, eventId }) =>\n        orchestrationEngine.dispatch({\n          type: \"thread.activity.append\",\n          commandId,\n          threadId: input.threadId,\n          activity: {\n            id: eventId,\n            tone: \"error\",\n            kind: input.kind,\n            summary: input.summary,\n            payload: {\n              detail: input.detail,\n              ...(input.requestId ? { requestId: input.requestId } : {}),\n              ...(input.messageId ? { messageId: input.messageId } : {}),\n            },\n            turnId: input.turnId,\n            createdAt: input.createdAt,\n          },\n          createdAt: input.createdAt,\n        }),\n      ),\n    );\n\n  const formatFailureDetail = (cause: Cause.Cause<unknown>): string => {\n    const failReason = cause.reasons.find(Cause.isFailReason);\n    const providerError = isProviderAdapterRequestError(failReason?.error)\n      ? failReason.error\n      : undefined;\n    if (providerError) {\n      return providerError.detail;\n    }\n    return Cause.pretty(cause);\n  };\n\n  const setThreadSession = (input: {\n    readonly threadId: ThreadId;\n    readonly session: OrchestrationSession;\n    readonly createdAt: string;\n  }) =>\n    serverCommandId(\"provider-session-set\").pipe(\n      Effect.flatMap((commandId) =>\n        orchestrationEngine.dispatch({\n          type: \"thread.session.set\",\n          commandId,\n          threadId: input.threadId,\n          session: input.session,\n          createdAt: input.createdAt,\n        }),\n      ),\n    );\n\n  const setThreadSessionErrorOnTurnStartFailure = Effect.fnUntraced(function* (input: {\n    readonly threadId: ThreadId;\n    readonly detail: string;\n    readonly createdAt: string;\n  }) {\n    const thread = yield* resolveThread(input.threadId);\n    const session = thread?.session;\n    if (!session) {\n      return;\n    }\n    yield* setThreadSession({\n      threadId: input.threadId,\n      session: {\n        ...session,\n        status: session.status === \"stopped\" ? \"stopped\" : \"ready\",\n        activeTurnId: null,\n        lastError: input.detail,\n        updatedAt: input.createdAt,\n      },\n      createdAt: input.createdAt,\n    });\n  });\n\n  const resolveProject = Effect.fnUntraced(function* (projectId: ProjectId) {\n    return yield* projectionSnapshotQuery\n      .getProjectShellById(projectId)\n      .pipe(Effect.map(Option.getOrUndefined));\n  });\n\n  const resolveThread = Effect.fnUntraced(function* (threadId: ThreadId) {\n    return yield* projectionSnapshotQuery\n      .getThreadDetailById(threadId)\n      .pipe(Effect.map(Option.getOrUndefined));\n  });\n\n  const queueTurnStart = (\n    event: Extract<ProviderIntentEvent, { type: \"thread.turn-start-requested\" }>,\n  ) => {\n    const threadKey = String(event.payload.threadId);\n    const existing = queuedTurnStartsByThreadId.get(threadKey) ?? [];\n    existing.push(event);\n    queuedTurnStartsByThreadId.set(threadKey, existing);\n  };\n\n  const takeQueuedTurnStart = (threadId: ThreadId) => {\n    const threadKey = String(threadId);\n    const queue = queuedTurnStartsByThreadId.get(threadKey);\n    const next = queue?.shift();\n    if (!queue || queue.length === 0) {\n      queuedTurnStartsByThreadId.delete(threadKey);\n    }\n    return next;\n  };\n\n  const isThreadTurnBusy = Effect.fnUntraced(function* (threadId: ThreadId) {\n    const threadKey = String(threadId);\n    if (\n      activeTurnStartThreadIds.has(threadKey) ||\n      queuedTurnPromotionMessageIdByThreadId.has(threadKey)\n    ) {\n      return true;\n    }\n    const thread = yield* resolveThread(threadId);\n    if (thread?.session?.activeTurnId !== null && thread?.session?.activeTurnId !== undefined) {\n      return true;\n    }\n    const sessionStatus = thread?.session?.status;\n    return sessionStatus === \"starting\" || sessionStatus === \"running\";\n  });\n\n  const dispatchQueuedTurnForThread = Effect.fn(\"dispatchQueuedTurnForThread\")(function* (\n    threadId: ThreadId,\n  ) {\n    const threadKey = String(threadId);\n    // A failed startup recovery must keep the FIFO blocked. Reporting the\n    // queue as handled prevents later in-memory starts from overtaking it.\n    if (startupRecoveryInventoryUnavailable || startupRecoveryBlockedThreadIds.has(threadKey)) {\n      return true;\n    }\n    if (yield* isThreadTurnBusy(threadId)) {\n      return false;\n    }\n\n    const queuedTurn = yield* projectionThreadQueuedTurnRepository.getOldestByThreadId({\n      threadId,\n    });\n    if (Option.isNone(queuedTurn)) {\n      return false;\n    }\n    // A recovery-held turn owns the head of the FIFO until the user confirms\n    // or discards it, so later queued starts must remain blocked.\n    if (queuedTurn.value.recoveryConfirmationRequired) {\n      return true;\n    }\n\n    queuedTurnPromotionMessageIdByThreadId.set(threadKey, queuedTurn.value.messageId);\n    const createdAt = yield* nowIso;\n    const dispatched = yield* orchestrationEngine\n      .dispatch({\n        type: \"thread.queued-turn.dispatch\",\n        commandId: yield* serverCommandId(\"queued-turn-dispatch\"),\n        threadId,\n        messageId: queuedTurn.value.messageId,\n        createdAt,\n      })\n      .pipe(\n        Effect.as(true),\n        Effect.catchCause((cause) =>\n          Effect.sync(() => {\n            queuedTurnPromotionMessageIdByThreadId.delete(threadKey);\n          }).pipe(\n            Effect.andThen(\n              Effect.logWarning(\"provider command reactor failed to dispatch queued turn\", {\n                threadId,\n                messageId: queuedTurn.value.messageId,\n                cause: Cause.pretty(cause),\n              }),\n            ),\n            Effect.as(false),\n          ),\n        ),\n      );\n\n    return dispatched;\n  });\n\n  const rejectStartedThreadModelChangeIfRequired = Effect.fnUntraced(function* (input: {\n    readonly threadId: ThreadId;\n    readonly currentModelSelection: ModelSelection;\n    readonly requestedModelSelection: ModelSelection | undefined;\n  }) {\n    const requestedModelSelection = input.requestedModelSelection;\n    if (\n      requestedModelSelection === undefined ||\n      (input.currentModelSelection.instanceId === requestedModelSelection.instanceId &&\n        input.currentModelSelection.model === requestedModelSelection.model)\n    ) {\n      return;\n    }\n    const providers = yield* providerRegistry.getProviders;\n    const requiresNewThread =\n      providers.find((snapshot) => snapshot.instanceId === input.currentModelSelection.instanceId)\n        ?.requiresNewThreadForModelChange === true ||\n      providers.find((snapshot) => snapshot.instanceId === requestedModelSelection.instanceId)\n        ?.requiresNewThreadForModelChange === true;\n    if (!requiresNewThread) {\n      return;\n    }\n    return yield* new ProviderAdapterRequestError({\n      provider: providerErrorLabelFromInstanceHint({\n        instanceId: String(requestedModelSelection.instanceId),\n        modelSelectionInstanceId: String(input.currentModelSelection.instanceId),\n      }),\n      method: \"thread.turn.start\",\n      detail: `Thread '${input.threadId}' cannot switch models after the conversation has started. Start a new thread to use '${requestedModelSelection.model}'.`,\n    });\n  });\n\n  const ensureSessionForThread = Effect.fn(\"ensureSessionForThread\")(function* (\n    threadId: ThreadId,\n    createdAt: string,\n    options?: {\n      readonly modelSelection?: ModelSelection;\n    },\n  ) {\n    const thread = yield* resolveThread(threadId);\n    if (!thread) {\n      return yield* Effect.die(new Error(`Thread '${threadId}' was not found in read model.`));\n    }\n\n    const desiredRuntimeMode = thread.runtimeMode;\n    const requestedModelSelection = options?.modelSelection;\n    const resolveActiveSession = (threadId: ThreadId) =>\n      providerService\n        .listSessions()\n        .pipe(Effect.map((sessions) => sessions.find((session) => session.threadId === threadId)));\n\n    const activeSession = yield* resolveActiveSession(threadId);\n    const activeThreadSession =\n      thread.session !== null && thread.session.status !== \"stopped\" && activeSession\n        ? thread.session\n        : null;\n    if (\n      activeThreadSession !== null &&\n      activeSession !== undefined &&\n      (activeThreadSession.providerInstanceId === undefined ||\n        activeSession.providerInstanceId === undefined)\n    ) {\n      return yield* new ProviderAdapterRequestError({\n        provider: providerErrorLabel(activeThreadSession.providerName ?? undefined),\n        method: \"thread.turn.start\",\n        detail: `Thread '${threadId}' has an active provider session without a provider instance id.`,\n      });\n    }\n    const currentInstanceId =\n      activeThreadSession !== null &&\n      activeSession !== undefined &&\n      activeSession.providerInstanceId !== undefined\n        ? activeSession.providerInstanceId\n        : thread.modelSelection.instanceId;\n    const desiredModelSelection = requestedModelSelection ?? thread.modelSelection;\n    const desiredInstanceId = desiredModelSelection.instanceId;\n    const currentInfo = yield* providerService.getInstanceInfo(currentInstanceId).pipe(\n      Effect.mapError(\n        () =>\n          new ProviderAdapterRequestError({\n            provider: providerErrorLabelFromInstanceHint({\n              instanceId: String(currentInstanceId),\n              modelSelectionInstanceId: String(thread.modelSelection.instanceId),\n              sessionProvider: thread.session?.providerName ?? undefined,\n            }),\n            method: \"thread.turn.start\",\n            detail: `Thread '${threadId}' references unknown provider instance '${currentInstanceId}'. The instance is not configured in this build.`,\n          }),\n      ),\n    );\n    const desiredInfo = yield* providerService.getInstanceInfo(desiredInstanceId).pipe(\n      Effect.mapError(\n        () =>\n          new ProviderAdapterRequestError({\n            provider: providerErrorLabelFromInstanceHint({\n              instanceId: String(desiredModelSelection.instanceId),\n            }),\n            method: \"thread.turn.start\",\n            detail: `Requested provider instance '${desiredInstanceId}' is not configured in this build.`,\n          }),\n      ),\n    );\n    const desiredDriverKind = desiredInfo.driverKind;\n    if (!isProviderDriverKind(desiredDriverKind)) {\n      return yield* new ProviderAdapterRequestError({\n        provider: providerErrorLabel(String(desiredDriverKind)),\n        method: \"thread.turn.start\",\n        detail: `Requested provider instance '${desiredInstanceId}' uses unknown provider driver '${desiredDriverKind}'. The driver is not installed in this build.`,\n      });\n    }\n    const desiredProviderSnapshot = (yield* providerRegistry.getProviders).find(\n      (snapshot) => snapshot.instanceId === desiredInstanceId,\n    );\n    if (desiredProviderSnapshot?.auth.status === \"unauthenticated\") {\n      return yield* new ProviderAdapterRequestError({\n        provider: desiredDriverKind,\n        method: \"thread.turn.start\",\n        detail:\n          desiredProviderSnapshot.message ??\n          `${desiredProviderSnapshot.displayName ?? desiredDriverKind} is not authenticated. Sign in and try again.`,\n      });\n    }\n    const preferredProvider: ProviderDriverKind = desiredDriverKind;\n    if (thread.session !== null) {\n      yield* rejectStartedThreadModelChangeIfRequired({\n        threadId,\n        currentModelSelection:\n          activeSession?.model !== undefined\n            ? {\n                ...thread.modelSelection,\n                instanceId: currentInstanceId,\n                model: activeSession.model,\n              }\n            : thread.modelSelection,\n        requestedModelSelection,\n      });\n    }\n    if (\n      thread.session !== null &&\n      requestedModelSelection !== undefined &&\n      requestedModelSelection.instanceId !== currentInstanceId\n    ) {\n      if (currentInfo.driverKind !== desiredInfo.driverKind) {\n        return yield* new ProviderAdapterRequestError({\n          provider: preferredProvider,\n          method: \"thread.turn.start\",\n          detail: `Thread '${threadId}' is bound to driver '${currentInfo.driverKind}' and cannot switch to '${desiredInfo.driverKind}'.`,\n        });\n      }\n      if (\n        currentInfo.continuationIdentity.continuationKey !==\n        desiredInfo.continuationIdentity.continuationKey\n      ) {\n        return yield* new ProviderAdapterRequestError({\n          provider: preferredProvider,\n          method: \"thread.turn.start\",\n          detail: `Thread '${threadId}' cannot switch from instance '${currentInstanceId}' to '${desiredInstanceId}' because their provider resume state is incompatible.`,\n        });\n      }\n    }\n    const project = yield* resolveProject(thread.projectId);\n    const effectiveCwd = resolveThreadWorkspaceCwd({\n      thread,\n      projects: project ? [project] : [],\n    });\n\n    const startProviderSession = (input?: {\n      readonly resumeCursor?: unknown;\n      readonly provider?: ProviderDriverKind;\n    }) =>\n      providerService.startSession(threadId, {\n        threadId,\n        ...(preferredProvider ? { provider: preferredProvider } : {}),\n        providerInstanceId: desiredInstanceId,\n        ...(effectiveCwd ? { cwd: effectiveCwd } : {}),\n        modelSelection: desiredModelSelection,\n        ...(input?.resumeCursor !== undefined ? { resumeCursor: input.resumeCursor } : {}),\n        runtimeMode: desiredRuntimeMode,\n      });\n\n    const bindSessionToThread = (session: ProviderSession) =>\n      Effect.gen(function* () {\n        if (session.providerInstanceId === undefined) {\n          return yield* new ProviderAdapterRequestError({\n            provider: providerErrorLabel(session.provider),\n            method: \"thread.turn.start\",\n            detail: `Provider session '${session.threadId}' started without a provider instance id.`,\n          });\n        }\n        yield* setThreadSession({\n          threadId,\n          session: {\n            threadId,\n            status: mapProviderSessionStatusToOrchestrationStatus(session.status),\n            providerName: session.provider,\n            providerInstanceId: session.providerInstanceId,\n            runtimeMode: desiredRuntimeMode,\n            // Provider turn ids are not orchestration turn ids.\n            activeTurnId: null,\n            lastError: session.lastError ?? null,\n            updatedAt: session.updatedAt,\n          },\n          createdAt,\n        });\n      });\n\n    const existingSessionThreadId =\n      thread.session && thread.session.status !== \"stopped\" && activeSession ? thread.id : null;\n    if (existingSessionThreadId) {\n      const runtimeModeChanged = thread.runtimeMode !== thread.session?.runtimeMode;\n      const cwdChanged = effectiveCwd !== activeSession?.cwd;\n      const sessionModelSwitch = (yield* providerService.getCapabilities(desiredInstanceId))\n        .sessionModelSwitch;\n      const modelChanged =\n        requestedModelSelection !== undefined &&\n        requestedModelSelection.model !== activeSession?.model;\n      const instanceChanged =\n        requestedModelSelection !== undefined &&\n        activeSession?.providerInstanceId !== requestedModelSelection.instanceId;\n      const shouldRestartForModelChange = modelChanged && sessionModelSwitch === \"unsupported\";\n      const previousModelSelection = threadModelSelections.get(threadId);\n      const shouldRestartForModelSelectionChange =\n        preferredProvider === \"claudeAgent\" &&\n        requestedModelSelection !== undefined &&\n        !Equal.equals(previousModelSelection, requestedModelSelection);\n\n      if (\n        !runtimeModeChanged &&\n        !cwdChanged &&\n        !instanceChanged &&\n        !shouldRestartForModelChange &&\n        !shouldRestartForModelSelectionChange\n      ) {\n        return existingSessionThreadId;\n      }\n\n      const resumeCursor = shouldRestartForModelChange\n        ? undefined\n        : (activeSession?.resumeCursor ?? undefined);\n      yield* Effect.logInfo(\"provider command reactor restarting provider session\", {\n        threadId,\n        existingSessionThreadId,\n        currentProvider: activeSession?.provider,\n        currentInstanceId,\n        desiredInstanceId,\n        desiredProvider: desiredModelSelection.instanceId,\n        currentRuntimeMode: thread.session?.runtimeMode,\n        desiredRuntimeMode: thread.runtimeMode,\n        runtimeModeChanged,\n        previousCwd: activeSession?.cwd,\n        desiredCwd: effectiveCwd,\n        cwdChanged,\n        modelChanged,\n        instanceChanged,\n        shouldRestartForModelChange,\n        shouldRestartForModelSelectionChange,\n        hasResumeCursor: resumeCursor !== undefined,\n      });\n      const restartedSession = yield* startProviderSession(\n        resumeCursor !== undefined ? { resumeCursor } : undefined,\n      );\n      yield* Effect.logInfo(\"provider command reactor restarted provider session\", {\n        threadId,\n        previousSessionId: existingSessionThreadId,\n        restartedSessionThreadId: restartedSession.threadId,\n        provider: restartedSession.provider,\n        runtimeMode: restartedSession.runtimeMode,\n        cwd: restartedSession.cwd,\n      });\n      yield* bindSessionToThread(restartedSession);\n      return restartedSession.threadId;\n    }\n\n    const startedSession = yield* startProviderSession(undefined);\n    yield* bindSessionToThread(startedSession);\n    return startedSession.threadId;\n  });\n\n  const buildSendTurnRequestForThread = Effect.fnUntraced(function* (input: {\n    readonly threadId: ThreadId;\n    readonly messageText: string;\n    readonly attachments?: ReadonlyArray<ChatAttachment>;\n    readonly modelSelection?: ModelSelection;\n    readonly interactionMode?: \"default\" | \"plan\";\n    readonly createdAt: string;\n  }) {\n    const thread = yield* resolveThread(input.threadId);\n    if (!thread) {\n      return yield* Effect.die(\n        new Error(`Thread '${input.threadId}' was not found in read model.`),\n      );\n    }\n    yield* ensureSessionForThread(\n      input.threadId,\n      input.createdAt,\n      input.modelSelection !== undefined ? { modelSelection: input.modelSelection } : {},\n    );\n    if (input.modelSelection !== undefined) {\n      threadModelSelections.set(input.threadId, input.modelSelection);\n    }\n    const normalizedInput = toNonEmptyProviderInput(input.messageText);\n    const normalizedAttachments = input.attachments ?? [];\n    const activeSession = yield* providerService\n      .listSessions()\n      .pipe(\n        Effect.map((sessions) => sessions.find((session) => session.threadId === input.threadId)),\n      );\n    const sessionModelSwitch =\n      activeSession === undefined\n        ? \"in-session\"\n        : activeSession.providerInstanceId === undefined\n          ? yield* new ProviderAdapterRequestError({\n              provider: providerErrorLabel(activeSession.provider),\n              method: \"thread.turn.start\",\n              detail: `Active provider session '${activeSession.threadId}' is missing a provider instance id.`,\n            })\n          : (yield* providerService.getCapabilities(activeSession.providerInstanceId))\n              .sessionModelSwitch;\n    const requestedModelSelection =\n      input.modelSelection ?? threadModelSelections.get(input.threadId) ?? thread.modelSelection;\n    const modelForTurn =\n      sessionModelSwitch === \"unsupported\" && input.modelSelection === undefined\n        ? activeSession?.model !== undefined\n          ? {\n              ...requestedModelSelection,\n              model: activeSession.model,\n            }\n          : requestedModelSelection\n        : input.modelSelection;\n\n    return {\n      threadId: input.threadId,\n      ...(normalizedInput ? { input: normalizedInput } : {}),\n      ...(normalizedAttachments.length > 0 ? { attachments: normalizedAttachments } : {}),\n      ...(modelForTurn !== undefined ? { modelSelection: modelForTurn } : {}),\n      ...(input.interactionMode !== undefined ? { interactionMode: input.interactionMode } : {}),\n    };\n  });\n\n  const maybeGenerateAndRenameWorktreeBranchForFirstTurn = Effect.fn(\n    \"maybeGenerateAndRenameWorktreeBranchForFirstTurn\",\n  )(function* (input: {\n    readonly threadId: ThreadId;\n    readonly branch: string | null;\n    readonly worktreePath: string | null;\n    readonly messageText: string;\n    readonly attachments?: ReadonlyArray<ChatAttachment>;\n  }) {\n    if (!input.branch || !input.worktreePath) {\n      return;\n    }\n    if (!isTemporaryWorktreeBranch(input.branch)) {\n      return;\n    }\n\n    const oldBranch = input.branch;\n    const cwd = input.worktreePath;\n    const attachments = input.attachments ?? [];\n    yield* Effect.gen(function* () {\n      const { textGenerationModelSelection: modelSelection } =\n        yield* serverSettingsService.getSettings;\n\n      const generated = yield* textGeneration.generateBranchName({\n        cwd,\n        message: input.messageText,\n        ...(attachments.length > 0 ? { attachments } : {}),\n        modelSelection,\n      });\n      if (!generated) return;\n\n      const targetBranch = buildGeneratedWorktreeBranchName(generated.branch);\n      if (targetBranch === oldBranch) return;\n\n      const renamed = yield* gitWorkflow.renameBranch({ cwd, oldBranch, newBranch: targetBranch });\n      yield* orchestrationEngine.dispatch({\n        type: \"thread.meta.update\",\n        commandId: yield* serverCommandId(\"worktree-branch-rename\"),\n        threadId: input.threadId,\n        branch: renamed.branch,\n        worktreePath: cwd,\n      });\n      yield* vcsStatusBroadcaster.refreshStatus(cwd).pipe(Effect.ignoreCause({ log: true }));\n    }).pipe(\n      Effect.catchCause((cause) =>\n        Effect.logWarning(\"provider command reactor failed to generate or rename worktree branch\", {\n          threadId: input.threadId,\n          cwd,\n          oldBranch,\n          cause: Cause.pretty(cause),\n        }),\n      ),\n    );\n  });\n\n  const maybeGenerateThreadTitleForFirstTurn = Effect.fn(\"maybeGenerateThreadTitleForFirstTurn\")(\n    function* (input: {\n      readonly threadId: ThreadId;\n      readonly cwd: string;\n      readonly messageText: string;\n      readonly attachments?: ReadonlyArray<ChatAttachment>;\n      readonly titleSeed?: string;\n    }) {\n      const attachments = input.attachments ?? [];\n      yield* Effect.gen(function* () {\n        const { textGenerationModelSelection: modelSelection } =\n          yield* serverSettingsService.getSettings;\n\n        const generated = yield* textGeneration.generateThreadTitle({\n          cwd: input.cwd,\n          message: input.messageText,\n          ...(attachments.length > 0 ? { attachments } : {}),\n          modelSelection,\n        });\n        if (!generated) return;\n\n        const thread = yield* resolveThread(input.threadId);\n        if (!thread) return;\n        if (!canReplaceThreadTitle(thread.title, input.titleSeed)) {\n          return;\n        }\n\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.meta.update\",\n          commandId: yield* serverCommandId(\"thread-title-rename\"),\n          threadId: input.threadId,\n          title: generated.title,\n        });\n      }).pipe(\n        Effect.catchCause((cause) =>\n          Effect.logWarning(\"provider command reactor failed to generate or rename thread title\", {\n            threadId: input.threadId,\n            cwd: input.cwd,\n            cause: Cause.pretty(cause),\n          }),\n        ),\n      );\n    },\n  );\n\n  const startTurnFromEvent = Effect.fn(\"startTurnFromEvent\")(function* (\n    event: Extract<ProviderIntentEvent, { type: \"thread.turn-start-requested\" }>,\n  ) {\n    const thread = yield* resolveThread(event.payload.threadId);\n    if (!thread) {\n      return;\n    }\n\n    const message = thread.messages.find((entry) => entry.id === event.payload.messageId);\n    if (!message || message.role !== \"user\") {\n      yield* appendProviderFailureActivity({\n        threadId: event.payload.threadId,\n        kind: \"provider.turn.start.failed\",\n        summary: \"Provider turn start failed\",\n        detail: `User message '${event.payload.messageId}' was not found for turn start request.`,\n        turnId: null,\n        createdAt: event.payload.createdAt,\n      });\n      return;\n    }\n\n    const isFirstUserMessageTurn =\n      thread.messages.filter((entry) => entry.role === \"user\").length === 1;\n    if (isFirstUserMessageTurn) {\n      const project = yield* resolveProject(thread.projectId);\n      const generationCwd =\n        resolveThreadWorkspaceCwd({\n          thread,\n          projects: project ? [project] : [],\n        }) ?? process.cwd();\n      const generationInput = {\n        messageText: message.text,\n        ...(message.attachments !== undefined ? { attachments: message.attachments } : {}),\n        ...(event.payload.titleSeed !== undefined ? { titleSeed: event.payload.titleSeed } : {}),\n      };\n\n      yield* maybeGenerateAndRenameWorktreeBranchForFirstTurn({\n        threadId: event.payload.threadId,\n        branch: thread.branch,\n        worktreePath: thread.worktreePath,\n        ...generationInput,\n      }).pipe(Effect.forkScoped);\n\n      if (canReplaceThreadTitle(thread.title, event.payload.titleSeed)) {\n        yield* maybeGenerateThreadTitleForFirstTurn({\n          threadId: event.payload.threadId,\n          cwd: generationCwd,\n          ...generationInput,\n        }).pipe(Effect.forkScoped);\n      }\n    }\n\n    const handleTurnStartFailure = (cause: Cause.Cause<unknown>) => {\n      if (Cause.hasInterruptsOnly(cause)) {\n        return Effect.void;\n      }\n      const detail = formatFailureDetail(cause);\n      return setThreadSessionErrorOnTurnStartFailure({\n        threadId: event.payload.threadId,\n        detail,\n        createdAt: event.payload.createdAt,\n      }).pipe(\n        Effect.flatMap(() =>\n          appendProviderFailureActivity({\n            threadId: event.payload.threadId,\n            kind: \"provider.turn.start.failed\",\n            summary: \"Provider turn start failed\",\n            detail,\n            turnId: null,\n            createdAt: event.payload.createdAt,\n          }),\n        ),\n        Effect.asVoid,\n      );\n    };\n\n    const recoverTurnStartFailure = (cause: Cause.Cause<unknown>) =>\n      handleTurnStartFailure(cause).pipe(\n        Effect.catchCause((recoveryCause) =>\n          Effect.logWarning(\"provider command reactor failed to recover turn start failure\", {\n            eventType: event.type,\n            threadId: event.payload.threadId,\n            cause: Cause.pretty(recoveryCause),\n            originalCause: Cause.pretty(cause),\n          }),\n        ),\n      );\n\n    activeTurnStartThreadIds.add(String(event.payload.threadId));\n    const sendTurnRequest = yield* buildSendTurnRequestForThread({\n      threadId: event.payload.threadId,\n      messageText: message.text,\n      ...(message.attachments !== undefined ? { attachments: message.attachments } : {}),\n      ...(event.payload.modelSelection !== undefined\n        ? { modelSelection: event.payload.modelSelection }\n        : {}),\n      interactionMode: event.payload.interactionMode,\n      createdAt: event.payload.createdAt,\n    }).pipe(\n      Effect.map(Option.some),\n      Effect.catchCause((cause) => handleTurnStartFailure(cause).pipe(Effect.as(Option.none()))),\n    );\n\n    if (Option.isNone(sendTurnRequest)) {\n      activeTurnStartThreadIds.delete(String(event.payload.threadId));\n      observedRunningTurnThreadIds.delete(String(event.payload.threadId));\n      return;\n    }\n\n    yield* providerService.sendTurn(sendTurnRequest.value).pipe(\n      Effect.catchCause((cause) =>\n        Effect.sync(() => {\n          activeTurnStartThreadIds.delete(String(event.payload.threadId));\n          observedRunningTurnThreadIds.delete(String(event.payload.threadId));\n        }).pipe(Effect.andThen(recoverTurnStartFailure(cause))),\n      ),\n      Effect.forkScoped,\n    );\n  });\n\n  const startNextQueuedTurnForThread = Effect.fn(\"startNextQueuedTurnForThread\")(function* (\n    threadId: ThreadId,\n  ) {\n    if (yield* isThreadTurnBusy(threadId)) {\n      return;\n    }\n    const next = takeQueuedTurnStart(threadId);\n    if (!next) {\n      return;\n    }\n    yield* startTurnFromEvent(next);\n  });\n\n  const startNextAvailableTurnForThread = Effect.fn(\"startNextAvailableTurnForThread\")(function* (\n    threadId: ThreadId,\n  ) {\n    const queuedTurnHandledOrBlocked = yield* dispatchQueuedTurnForThread(threadId);\n    if (queuedTurnHandledOrBlocked) {\n      return;\n    }\n    yield* startNextQueuedTurnForThread(threadId);\n  });\n\n  const processTurnStartRequested = Effect.fn(\"processTurnStartRequested\")(function* (\n    event: Extract<ProviderIntentEvent, { type: \"thread.turn-start-requested\" }>,\n  ) {\n    const key = turnStartKeyForEvent(event);\n    if (yield* hasHandledTurnStartRecently(key)) {\n      return;\n    }\n    const threadKey = String(event.payload.threadId);\n    if (queuedTurnPromotionMessageIdByThreadId.get(threadKey) === event.payload.messageId) {\n      queuedTurnPromotionMessageIdByThreadId.delete(threadKey);\n    }\n    if (yield* isThreadTurnBusy(event.payload.threadId)) {\n      queueTurnStart(event);\n      return;\n    }\n    yield* startTurnFromEvent(event);\n  });\n\n  const processThreadSessionSet = Effect.fn(\"processThreadSessionSet\")(function* (\n    event: Extract<OrchestrationEvent, { type: \"thread.session-set\" }>,\n  ) {\n    const threadKey = String(event.payload.threadId);\n    const { session } = event.payload;\n    if (session.activeTurnId !== null) {\n      activeTurnStartThreadIds.add(threadKey);\n      if (session.status === \"running\") {\n        observedRunningTurnThreadIds.add(threadKey);\n      }\n      return;\n    }\n    if (session.status === \"starting\" && activeTurnStartThreadIds.has(threadKey)) {\n      return;\n    }\n    if (\n      session.status === \"stopped\" ||\n      session.status === \"error\" ||\n      session.status === \"interrupted\" ||\n      (session.status === \"ready\" && observedRunningTurnThreadIds.has(threadKey))\n    ) {\n      activeTurnStartThreadIds.delete(threadKey);\n      observedRunningTurnThreadIds.delete(threadKey);\n      yield* startNextAvailableTurnForThread(event.payload.threadId);\n    }\n  });\n\n  const processThreadActivityAppended = Effect.fn(\"processThreadActivityAppended\")(function* (\n    event: Extract<OrchestrationEvent, { type: \"thread.activity-appended\" }>,\n  ) {\n    if (event.payload.activity.kind !== \"provider.turn.start.failed\") {\n      return;\n    }\n    activeTurnStartThreadIds.delete(String(event.payload.threadId));\n    observedRunningTurnThreadIds.delete(String(event.payload.threadId));\n    yield* startNextAvailableTurnForThread(event.payload.threadId);\n  });\n\n  const processTurnQueued = Effect.fn(\"processTurnQueued\")(function* (\n    event: Extract<\n      ProviderIntentEvent,\n      { type: \"thread.turn-queued\" | \"thread.queued-turn-steer-failed\" }\n    >,\n  ) {\n    yield* startNextAvailableTurnForThread(event.payload.threadId);\n  });\n\n  const processRecoveryQueuedTurnCancelled = Effect.fn(\"processRecoveryQueuedTurnCancelled\")(\n    function* (event: Extract<ProviderIntentEvent, { type: \"thread.queued-turn-cancelled\" }>) {\n      if (!event.payload.recoveryConfirmationRequired) {\n        return;\n      }\n      yield* startNextAvailableTurnForThread(event.payload.threadId);\n    },\n  );\n\n  const processQueuedTurnSteerRequested = Effect.fn(\"processQueuedTurnSteerRequested\")(function* (\n    event: Extract<ProviderIntentEvent, { type: \"thread.queued-turn-steer-requested\" }>,\n  ) {\n    const failSteering = (detail: string) =>\n      Effect.gen(function* () {\n        const createdAt = yield* nowIso;\n        const commandId = yield* serverCommandId(\"queued-turn-steer-fail\");\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.queued-turn.steer.fail\",\n          commandId,\n          threadId: event.payload.threadId,\n          messageId: event.payload.messageId,\n          expectedTurnId: event.payload.expectedTurnId,\n          detail,\n          createdAt,\n        });\n      });\n\n    const queuedTurn = yield* projectionThreadQueuedTurnRepository.getByThreadAndMessageId({\n      threadId: event.payload.threadId,\n      messageId: event.payload.messageId,\n    });\n    if (Option.isNone(queuedTurn)) {\n      return yield* failSteering(`Queued message '${event.payload.messageId}' was not found.`);\n    }\n    const input = toNonEmptyProviderInput(queuedTurn.value.text);\n\n    const steerExit = yield* providerService\n      .steerTurn({\n        threadId: event.payload.threadId,\n        expectedTurnId: event.payload.expectedTurnId,\n        messageId: event.payload.messageId,\n        ...(input !== undefined ? { input } : {}),\n        ...(queuedTurn.value.attachments.length > 0\n          ? { attachments: queuedTurn.value.attachments }\n          : {}),\n      })\n      .pipe(Effect.exit);\n    if (Exit.isFailure(steerExit)) {\n      if (Cause.hasInterruptsOnly(steerExit.cause)) {\n        return yield* Effect.failCause(steerExit.cause);\n      }\n      yield* failSteering(formatFailureDetail(steerExit.cause));\n      return;\n    }\n\n    const createdAt = yield* nowIso;\n    const commandId = yield* serverCommandId(\"queued-turn-steer-complete\");\n    yield* orchestrationEngine.dispatch({\n      type: \"thread.queued-turn.steer.complete\",\n      commandId,\n      threadId: event.payload.threadId,\n      messageId: event.payload.messageId,\n      turnId: steerExit.value.turnId,\n      createdAt,\n    });\n  });\n\n  const processTurnInterruptRequested = Effect.fn(\"processTurnInterruptRequested\")(function* (\n    event: Extract<ProviderIntentEvent, { type: \"thread.turn-interrupt-requested\" }>,\n  ) {\n    const thread = yield* resolveThread(event.payload.threadId);\n    if (!thread) {\n      return;\n    }\n    const hasSession = thread.session && thread.session.status !== \"stopped\";\n    if (!hasSession) {\n      return yield* appendProviderFailureActivity({\n        threadId: event.payload.threadId,\n        kind: \"provider.turn.interrupt.failed\",\n        summary: \"Provider turn interrupt failed\",\n        detail: \"No active provider session is bound to this thread.\",\n        turnId: event.payload.turnId ?? null,\n        createdAt: event.payload.createdAt,\n      });\n    }\n\n    // Include the active turn id when known so adapters can ignore stale interrupts.\n    yield* providerService\n      .interruptTurn({\n        threadId: event.payload.threadId,\n        ...(event.payload.turnId !== undefined ? { turnId: event.payload.turnId } : {}),\n      })\n      .pipe(\n        Effect.catchCause((cause) =>\n          appendProviderFailureActivity({\n            threadId: event.payload.threadId,\n            kind: \"provider.turn.interrupt.failed\",\n            summary: \"Provider turn interrupt failed\",\n            detail: Cause.pretty(cause),\n            turnId: event.payload.turnId ?? null,\n            createdAt: event.payload.createdAt,\n          }),\n        ),\n      );\n  });\n\n  const processApprovalResponseRequested = Effect.fn(\"processApprovalResponseRequested\")(function* (\n    event: Extract<ProviderIntentEvent, { type: \"thread.approval-response-requested\" }>,\n  ) {\n    const thread = yield* resolveThread(event.payload.threadId);\n    if (!thread) {\n      return;\n    }\n    const hasSession = thread.session && thread.session.status !== \"stopped\";\n    if (!hasSession) {\n      return yield* appendProviderFailureActivity({\n        threadId: event.payload.threadId,\n        kind: \"provider.approval.respond.failed\",\n        summary: \"Provider approval response failed\",\n        detail: \"No active provider session is bound to this thread.\",\n        turnId: null,\n        createdAt: event.payload.createdAt,\n        requestId: event.payload.requestId,\n      });\n    }\n\n    yield* providerService\n      .respondToRequest({\n        threadId: event.payload.threadId,\n        requestId: event.payload.requestId,\n        decision: event.payload.decision,\n      })\n      .pipe(\n        Effect.catchCause((cause) =>\n          appendProviderFailureActivity({\n            threadId: event.payload.threadId,\n            kind: \"provider.approval.respond.failed\",\n            summary: \"Provider approval response failed\",\n            detail: isUnknownPendingApprovalRequestError(cause)\n              ? stalePendingRequestDetail(\"approval\", event.payload.requestId)\n              : Cause.pretty(cause),\n            turnId: null,\n            createdAt: event.payload.createdAt,\n            requestId: event.payload.requestId,\n          }),\n        ),\n      );\n  });\n\n  const processUserInputResponseRequested = Effect.fn(\"processUserInputResponseRequested\")(\n    function* (\n      event: Extract<ProviderIntentEvent, { type: \"thread.user-input-response-requested\" }>,\n    ) {\n      const thread = yield* resolveThread(event.payload.threadId);\n      if (!thread) {\n        return;\n      }\n      const hasSession = thread.session && thread.session.status !== \"stopped\";\n      if (!hasSession) {\n        return yield* appendProviderFailureActivity({\n          threadId: event.payload.threadId,\n          kind: \"provider.user-input.respond.failed\",\n          summary: \"Provider user input response failed\",\n          detail: \"No active provider session is bound to this thread.\",\n          turnId: null,\n          createdAt: event.payload.createdAt,\n          requestId: event.payload.requestId,\n        });\n      }\n\n      yield* providerService\n        .respondToUserInput({\n          threadId: event.payload.threadId,\n          requestId: event.payload.requestId,\n          answers: event.payload.answers,\n        })\n        .pipe(\n          Effect.catchCause((cause) =>\n            appendProviderFailureActivity({\n              threadId: event.payload.threadId,\n              kind: \"provider.user-input.respond.failed\",\n              summary: \"Provider user input response failed\",\n              detail: isUnknownPendingUserInputRequestError(cause)\n                ? stalePendingRequestDetail(\"user-input\", event.payload.requestId)\n                : Cause.pretty(cause),\n              turnId: null,\n              createdAt: event.payload.createdAt,\n              requestId: event.payload.requestId,\n            }),\n          ),\n        );\n    },\n  );\n\n  const processSessionStopRequested = Effect.fn(\"processSessionStopRequested\")(function* (\n    event: Extract<ProviderIntentEvent, { type: \"thread.session-stop-requested\" }>,\n  ) {\n    const thread = yield* resolveThread(event.payload.threadId);\n    if (!thread) {\n      return;\n    }\n\n    const now = event.payload.createdAt;\n    if (thread.session && thread.session.status !== \"stopped\") {\n      yield* providerService.stopSession({ threadId: thread.id });\n    }\n\n    yield* setThreadSession({\n      threadId: thread.id,\n      session: {\n        threadId: thread.id,\n        status: \"stopped\",\n        providerName: thread.session?.providerName ?? null,\n        ...(thread.session?.providerInstanceId !== undefined\n          ? { providerInstanceId: thread.session.providerInstanceId }\n          : {}),\n        runtimeMode: thread.session?.runtimeMode ?? DEFAULT_RUNTIME_MODE,\n        activeTurnId: null,\n        lastError: thread.session?.lastError ?? null,\n        updatedAt: now,\n      },\n      createdAt: now,\n    });\n  });\n\n  const processDomainEvent = Effect.fn(\"processDomainEvent\")(function* (\n    event: ProviderCommandReactorDomainEvent,\n  ) {\n    yield* Effect.annotateCurrentSpan({\n      \"orchestration.event_type\": event.type,\n      \"orchestration.thread_id\": event.payload.threadId,\n      ...(event.commandId ? { \"orchestration.command_id\": event.commandId } : {}),\n    });\n    yield* increment(orchestrationEventsProcessedTotal, {\n      eventType: event.type,\n    });\n    switch (event.type) {\n      case \"thread.runtime-mode-set\": {\n        const thread = yield* resolveThread(event.payload.threadId);\n        if (!thread?.session || thread.session.status === \"stopped\") {\n          return;\n        }\n        const cachedModelSelection = threadModelSelections.get(event.payload.threadId);\n        yield* ensureSessionForThread(\n          event.payload.threadId,\n          event.occurredAt,\n          cachedModelSelection !== undefined ? { modelSelection: cachedModelSelection } : {},\n        );\n        return;\n      }\n      case \"thread.turn-queued\":\n        yield* processTurnQueued(event);\n        return;\n      case \"thread.queued-turn-cancelled\":\n        yield* processRecoveryQueuedTurnCancelled(event);\n        return;\n      case \"thread.queued-turn-steer-failed\":\n        yield* processTurnQueued(event);\n        return;\n      case \"thread.queued-turn-steer-requested\":\n        yield* processQueuedTurnSteerRequested(event);\n        return;\n      case \"thread.turn-start-requested\":\n        yield* processTurnStartRequested(event);\n        return;\n      case \"thread.activity-appended\":\n        yield* processThreadActivityAppended(event);\n        return;\n      case \"thread.session-set\":\n        yield* processThreadSessionSet(event);\n        return;\n      case \"thread.turn-interrupt-requested\":\n        yield* processTurnInterruptRequested(event);\n        return;\n      case \"thread.approval-response-requested\":\n        yield* processApprovalResponseRequested(event);\n        return;\n      case \"thread.user-input-response-requested\":\n        yield* processUserInputResponseRequested(event);\n        return;\n      case \"thread.session-stop-requested\":\n        yield* processSessionStopRequested(event);\n        return;\n    }\n  });\n\n  const processDomainEventSafely = (event: ProviderCommandReactorDomainEvent) =>\n    processDomainEvent(event).pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.failCause(cause);\n        }\n        return Effect.logWarning(\"provider command reactor failed to process event\", {\n          eventType: event.type,\n          cause: Cause.pretty(cause),\n        });\n      }),\n    );\n\n  const worker = yield* makeDrainableWorker(processDomainEventSafely);\n\n  const recoverInterruptedThreadsAtStartup = Effect.fn(\n    \"providerCommandReactor.recoverInterruptedThreadsAtStartup\",\n  )(function* () {\n    const [readModel, liveProviderSessions, pendingTurnStarts] = yield* Effect.all([\n      projectionSnapshotQuery.getCommandReadModel(),\n      providerService.listSessions(),\n      projectionTurnRepository.listPendingTurnStarts(),\n    ]);\n    const liveSessionByThreadId = new Map(\n      liveProviderSessions.map((session) => [String(session.threadId), session]),\n    );\n    const pendingStartsByThreadId = new Map<string, typeof pendingTurnStarts>();\n    for (const pendingStart of pendingTurnStarts) {\n      const threadKey = String(pendingStart.threadId);\n      pendingStartsByThreadId.set(threadKey, [\n        ...(pendingStartsByThreadId.get(threadKey) ?? []),\n        pendingStart,\n      ]);\n    }\n    const hasProjectedActiveWork = (session: OrchestrationSession | null): boolean =>\n      session !== null &&\n      (session.activeTurnId !== null ||\n        session.status === \"starting\" ||\n        session.status === \"running\");\n    const recoveryThreads = readModel.threads.filter((thread) => {\n      if (thread.deletedAt !== null || thread.archivedAt !== null) {\n        return false;\n      }\n\n      const liveSession = liveSessionByThreadId.get(String(thread.id));\n      if (liveSession) {\n        return false;\n      }\n      return (\n        hasProjectedActiveWork(thread.session) ||\n        (pendingStartsByThreadId.get(String(thread.id))?.length ?? 0) > 0\n      );\n    });\n    if (recoveryThreads.length === 0) {\n      return;\n    }\n\n    const recoveredAt = yield* nowIso;\n    const recoverThreadAtStartup = Effect.fn(\"providerCommandReactor.recoverThreadAtStartup\")(\n      function* (thread: (typeof recoveryThreads)[number]) {\n        const queuedMessageIds = new Set(thread.queuedTurns.map((turn) => String(turn.messageId)));\n\n        for (const queuedTurn of thread.queuedTurns) {\n          yield* orchestrationEngine.dispatch({\n            type: \"thread.turn.hold-for-recovery\",\n            commandId: yield* serverCommandId(\"startup-recovery-hold-queued-turn\"),\n            threadId: thread.id,\n            message: {\n              messageId: queuedTurn.messageId,\n              role: \"user\",\n              text: queuedTurn.text,\n              attachments: queuedTurn.attachments,\n            },\n            ...(queuedTurn.modelSelection !== undefined\n              ? { modelSelection: queuedTurn.modelSelection }\n              : {}),\n            ...(queuedTurn.titleSeed !== undefined ? { titleSeed: queuedTurn.titleSeed } : {}),\n            runtimeMode: queuedTurn.runtimeMode,\n            interactionMode: queuedTurn.interactionMode,\n            ...(queuedTurn.sourceProposedPlan !== undefined\n              ? { sourceProposedPlan: queuedTurn.sourceProposedPlan }\n              : {}),\n            requestedAt: queuedTurn.createdAt,\n            createdAt: recoveredAt,\n          });\n        }\n\n        const pendingStarts = pendingStartsByThreadId.get(String(thread.id)) ?? [];\n        for (const pendingStart of pendingStarts) {\n          const messageId = pendingStart.messageId;\n          if (queuedMessageIds.has(String(messageId))) {\n            continue;\n          }\n          const projectedMessage = yield* projectionThreadMessageRepository.getByMessageId({\n            messageId,\n          });\n          if (Option.isNone(projectedMessage) || projectedMessage.value.role !== \"user\") {\n            yield* Effect.logWarning(\n              \"discarding orphaned pending turn start without a user message\",\n              {\n                threadId: thread.id,\n                messageId,\n              },\n            );\n            yield* projectionTurnRepository.deletePendingTurnStart({\n              threadId: thread.id,\n              messageId,\n            });\n            continue;\n          }\n\n          const message = projectedMessage.value;\n          yield* orchestrationEngine.dispatch({\n            type: \"thread.turn.hold-for-recovery\",\n            commandId: yield* serverCommandId(\"startup-recovery-hold-pending-turn\"),\n            threadId: thread.id,\n            message: {\n              messageId,\n              role: \"user\",\n              text: message.text,\n              attachments: message.attachments ?? [],\n            },\n            modelSelection: thread.modelSelection,\n            runtimeMode: thread.runtimeMode,\n            interactionMode: thread.interactionMode,\n            ...(pendingStart.sourceProposedPlanThreadId !== null &&\n            pendingStart.sourceProposedPlanId !== null\n              ? {\n                  sourceProposedPlan: {\n                    threadId: pendingStart.sourceProposedPlanThreadId,\n                    planId: pendingStart.sourceProposedPlanId,\n                  },\n                }\n              : {}),\n            requestedAt: pendingStart.requestedAt,\n            createdAt: recoveredAt,\n          });\n        }\n\n        const projectedSession = thread.session;\n        if (!projectedSession || !hasProjectedActiveWork(projectedSession)) {\n          return;\n        }\n        yield* orchestrationEngine.dispatch({\n          type: \"thread.session.set\",\n          commandId: yield* serverCommandId(\"startup-recovery-interrupt-session\"),\n          threadId: thread.id,\n          session: {\n            ...projectedSession,\n            status: \"interrupted\",\n            activeTurnId: null,\n            lastError: null,\n            updatedAt: recoveredAt,\n          },\n          createdAt: recoveredAt,\n        });\n      },\n    );\n\n    const recoveryResults = yield* Effect.forEach(\n      recoveryThreads,\n      (thread) =>\n        recoverThreadAtStartup(thread).pipe(\n          Effect.as(true),\n          Effect.catchCause((cause) => {\n            if (Cause.hasInterruptsOnly(cause)) {\n              return Effect.interrupt;\n            }\n            return Effect.sync(() => {\n              startupRecoveryBlockedThreadIds.add(String(thread.id));\n            }).pipe(\n              Effect.andThen(\n                Effect.logWarning(\"failed to recover provider thread during server startup\", {\n                  threadId: thread.id,\n                  cause: Cause.pretty(cause),\n                }),\n              ),\n              Effect.as(false),\n            );\n          }),\n        ),\n      { concurrency: 1 },\n    );\n    const recoveredThreads = recoveryThreads.filter((_, index) => recoveryResults[index] === true);\n\n    yield* Effect.logInfo(\"recovered orphaned provider work during server startup\", {\n      threadCount: recoveredThreads.length,\n      threadIds: recoveredThreads.map((thread) => thread.id),\n      blockedThreadIds: [...startupRecoveryBlockedThreadIds],\n    });\n  });\n\n  const start: ProviderCommandReactorShape[\"start\"] = Effect.fn(\"start\")(function* () {\n    const processEvent = Effect.fn(\"processEvent\")(function* (event: OrchestrationEvent) {\n      if (\n        event.type === \"thread.runtime-mode-set\" ||\n        event.type === \"thread.turn-queued\" ||\n        event.type === \"thread.queued-turn-cancelled\" ||\n        event.type === \"thread.queued-turn-steer-failed\" ||\n        event.type === \"thread.queued-turn-steer-requested\" ||\n        event.type === \"thread.turn-start-requested\" ||\n        event.type === \"thread.activity-appended\" ||\n        event.type === \"thread.session-set\" ||\n        event.type === \"thread.turn-interrupt-requested\" ||\n        event.type === \"thread.approval-response-requested\" ||\n        event.type === \"thread.user-input-response-requested\" ||\n        event.type === \"thread.session-stop-requested\"\n      ) {\n        return yield* worker.enqueue(event);\n      }\n    });\n\n    yield* Effect.forkScoped(\n      Stream.runForEach(orchestrationEngine.streamDomainEvents, processEvent),\n    );\n\n    const startupRecoveryAvailable = yield* recoverInterruptedThreadsAtStartup().pipe(\n      Effect.as(true),\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.interrupt;\n        }\n        return Effect.sync(() => {\n          startupRecoveryInventoryUnavailable = true;\n        }).pipe(\n          Effect.andThen(\n            Effect.logWarning(\"provider command reactor could not inspect startup recovery work\", {\n              cause: Cause.pretty(cause),\n            }),\n          ),\n          Effect.as(false),\n        );\n      }),\n    );\n    if (!startupRecoveryAvailable) {\n      return;\n    }\n\n    yield* Effect.gen(function* () {\n      const queuedThreadIds =\n        yield* projectionThreadQueuedTurnRepository.listThreadIdsWithQueuedTurns();\n      yield* Effect.forEach(queuedThreadIds, startNextAvailableTurnForThread, {\n        concurrency: 1,\n      });\n    }).pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.interrupt;\n        }\n        return Effect.logWarning(\"provider command reactor failed to scan queued turns\", {\n          cause: Cause.pretty(cause),\n        });\n      }),\n    );\n  });\n\n  return {\n    start,\n    drain: worker.drain,\n  } satisfies ProviderCommandReactorShape;\n});\n\nexport const ProviderCommandReactorLive = Layer.effect(ProviderCommandReactor, make).pipe(\n  Layer.provideMerge(\n    Layer.mergeAll(\n      ProjectionThreadQueuedTurnRepositoryLive,\n      ProjectionThreadMessageRepositoryLive,\n      ProjectionTurnRepositoryLive,\n    ),\n  ),\n);\n","import {\n  CommandId,\n  EventId,\n  MessageId,\n  type OrchestrationCheckpointAttribution,\n  type ProjectId,\n  ThreadId,\n  TurnId,\n  type OrchestrationEvent,\n  type ProviderRuntimeEvent,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport type * as PlatformError from \"effect/PlatformError\";\nimport * as Stream from \"effect/Stream\";\nimport { makeDrainableWorker } from \"@salchi/shared/DrainableWorker\";\n\nimport { parseTurnDiffFilesFromUnifiedDiff } from \"../../checkpointing/Diffs.ts\";\nimport {\n  checkpointRefForThreadTurn,\n  checkpointAttributedRefForThreadTurn,\n  checkpointStartRefForThreadTurn,\n  resolveThreadWorkspaceCwd,\n} from \"../../checkpointing/Utils.ts\";\nimport { normalizeTouchedPath } from \"../../checkpointing/TouchedPaths.ts\";\nimport {\n  CHECKPOINT_DIFF_PATHSPEC_LIMIT,\n  CheckpointStore,\n} from \"../../checkpointing/Services/CheckpointStore.ts\";\nimport { ProviderService } from \"../../provider/Services/ProviderService.ts\";\nimport { TurnFileSnapshots } from \"../../persistence/Services/TurnFileSnapshots.ts\";\nimport { TurnFileSnapshotsLive } from \"../../persistence/Layers/TurnFileSnapshots.ts\";\nimport { CheckpointReactor, type CheckpointReactorShape } from \"../Services/CheckpointReactor.ts\";\nimport { OrchestrationEngineService } from \"../Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"../Services/ProjectionSnapshotQuery.ts\";\nimport { RuntimeReceiptBus } from \"../Services/RuntimeReceiptBus.ts\";\nimport type { CheckpointStoreError } from \"../../checkpointing/Errors.ts\";\nimport type { OrchestrationDispatchError } from \"../Errors.ts\";\nimport { isGitRepository } from \"../../git/Utils.ts\";\nimport { VcsStatusBroadcaster } from \"../../vcs/VcsStatusBroadcaster.ts\";\nimport { WorkspaceEntries } from \"../../workspace/Services/WorkspaceEntries.ts\";\n\nconst nowIso = Effect.map(DateTime.now, DateTime.formatIso);\n\ntype ReactorInput =\n  | {\n      readonly source: \"runtime\";\n      readonly event: ProviderRuntimeEvent;\n    }\n  | {\n      readonly source: \"domain\";\n      readonly event: OrchestrationEvent;\n    };\n\nfunction toTurnId(value: string | undefined): TurnId | null {\n  return value === undefined ? null : TurnId.make(String(value));\n}\n\nfunction sameId(left: string | null | undefined, right: string | null | undefined): boolean {\n  if (left === null || left === undefined || right === null || right === undefined) {\n    return false;\n  }\n  return left === right;\n}\n\nfunction checkpointStatusFromRuntime(status: string | undefined): \"ready\" | \"missing\" | \"error\" {\n  switch (status) {\n    case \"failed\":\n      return \"error\";\n    case \"cancelled\":\n    case \"interrupted\":\n      return \"missing\";\n    case \"completed\":\n    default:\n      return \"ready\";\n  }\n}\n\nconst make = Effect.gen(function* () {\n  const crypto = yield* Crypto.Crypto;\n  const randomUUID = crypto.randomUUIDv4;\n  const serverEventId = randomUUID.pipe(Effect.map(EventId.make));\n  const serverCommandId = (tag: string) =>\n    randomUUID.pipe(Effect.map((uuid) => CommandId.make(`server:${tag}:${uuid}`)));\n  const orchestrationEngine = yield* OrchestrationEngineService;\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const providerService = yield* ProviderService;\n  const checkpointStore = yield* CheckpointStore;\n  const turnFileSnapshots = yield* TurnFileSnapshots;\n  const receiptBus = yield* RuntimeReceiptBus;\n  const workspaceEntries = yield* WorkspaceEntries;\n  const vcsStatusBroadcaster = yield* VcsStatusBroadcaster;\n\n  const appendRevertFailureActivity = (input: {\n    readonly threadId: ThreadId;\n    readonly turnCount: number;\n    readonly detail: string;\n    readonly createdAt: string;\n  }) =>\n    Effect.all({\n      commandId: serverCommandId(\"checkpoint-revert-failure\"),\n      activityId: serverEventId,\n    }).pipe(\n      Effect.flatMap(({ commandId, activityId }) =>\n        orchestrationEngine.dispatch({\n          type: \"thread.activity.append\",\n          commandId,\n          threadId: input.threadId,\n          activity: {\n            id: activityId,\n            tone: \"error\",\n            kind: \"checkpoint.revert.failed\",\n            summary: \"Checkpoint revert failed\",\n            payload: {\n              turnCount: input.turnCount,\n              detail: input.detail,\n            },\n            turnId: null,\n            createdAt: input.createdAt,\n          },\n          createdAt: input.createdAt,\n        }),\n      ),\n    );\n\n  const appendCaptureFailureActivity = (input: {\n    readonly threadId: ThreadId;\n    readonly turnId: TurnId | null;\n    readonly detail: string;\n    readonly createdAt: string;\n  }) =>\n    Effect.all({\n      commandId: serverCommandId(\"checkpoint-capture-failure\"),\n      activityId: serverEventId,\n    }).pipe(\n      Effect.flatMap(({ commandId, activityId }) =>\n        orchestrationEngine.dispatch({\n          type: \"thread.activity.append\",\n          commandId,\n          threadId: input.threadId,\n          activity: {\n            id: activityId,\n            tone: \"error\",\n            kind: \"checkpoint.capture.failed\",\n            summary: \"Checkpoint capture failed\",\n            payload: {\n              detail: input.detail,\n            },\n            turnId: input.turnId,\n            createdAt: input.createdAt,\n          },\n          createdAt: input.createdAt,\n        }),\n      ),\n    );\n\n  const resolveSessionRuntimeForThread = Effect.fn(\"resolveSessionRuntimeForThread\")(function* (\n    threadId: ThreadId,\n  ): Effect.fn.Return<Option.Option<{ readonly threadId: ThreadId; readonly cwd: string }>> {\n    const sessions = yield* providerService.listSessions();\n    const session = sessions.find((entry) => entry.threadId === threadId);\n    return session?.cwd\n      ? Option.some({ threadId: session.threadId, cwd: session.cwd })\n      : Option.none();\n  });\n\n  const resolveThreadDetail = Effect.fn(\"resolveThreadDetail\")(function* (threadId: ThreadId) {\n    return yield* projectionSnapshotQuery\n      .getThreadDetailById(threadId)\n      .pipe(Effect.map(Option.getOrUndefined));\n  });\n\n  const resolveThreadProjects = Effect.fn(\"resolveThreadProjects\")(function* (\n    projectId: ProjectId,\n  ) {\n    const project = yield* projectionSnapshotQuery\n      .getProjectShellById(projectId)\n      .pipe(Effect.map(Option.getOrUndefined));\n    return project ? [project] : [];\n  });\n\n  const isGitWorkspace = (cwd: string) => isGitRepository(cwd);\n\n  // Resolves the workspace CWD for checkpoint operations, preferring the\n  // active provider session CWD and falling back to the thread/project config.\n  // Returns undefined when no CWD can be determined or the workspace is not\n  // a git repository.\n  const resolveCheckpointCwd = Effect.fn(\"resolveCheckpointCwd\")(function* (input: {\n    readonly threadId: ThreadId;\n    readonly thread: { readonly projectId: ProjectId; readonly worktreePath: string | null };\n    readonly projects: ReadonlyArray<{ readonly id: ProjectId; readonly workspaceRoot: string }>;\n    readonly preferSessionRuntime: boolean;\n  }): Effect.fn.Return<string | undefined> {\n    const fromSession = yield* resolveSessionRuntimeForThread(input.threadId);\n    const fromThread = resolveThreadWorkspaceCwd({\n      thread: input.thread,\n      projects: input.projects,\n    });\n\n    const cwd = input.preferSessionRuntime\n      ? (Option.match(fromSession, {\n          onNone: () => undefined,\n          onSome: (runtime) => runtime.cwd,\n        }) ?? fromThread)\n      : (fromThread ??\n        Option.match(fromSession, {\n          onNone: () => undefined,\n          onSome: (runtime) => runtime.cwd,\n        }));\n\n    if (!cwd) {\n      return undefined;\n    }\n    if (!isGitWorkspace(cwd)) {\n      return undefined;\n    }\n    return cwd;\n  });\n\n  const checkpointFilesFromDiff = (diff: string) =>\n    parseTurnDiffFilesFromUnifiedDiff(diff).map((file) => ({\n      path: file.path,\n      kind: \"modified\" as const,\n      additions: file.additions,\n      deletions: file.deletions,\n    }));\n\n  const normalizeSnapshotRows = (\n    rows: ReadonlyArray<{\n      readonly path: string;\n      readonly blobSha: string | null;\n      readonly deleted: boolean;\n    }>,\n    cwd: string,\n  ) => {\n    const rowsByPath = new Map<\n      string,\n      {\n        readonly path: string;\n        readonly blobSha: string | null;\n        readonly deleted: boolean;\n      }\n    >();\n    for (const row of rows) {\n      const normalizedPath = normalizeTouchedPath(row.path, cwd);\n      if (!normalizedPath) {\n        continue;\n      }\n      rowsByPath.set(normalizedPath, {\n        path: normalizedPath,\n        blobSha: row.blobSha,\n        deleted: row.deleted,\n      });\n    }\n    return [...rowsByPath.values()].toSorted((left, right) => left.path.localeCompare(right.path));\n  };\n\n  const resolveOverlayEntries = Effect.fn(\"resolveOverlayEntries\")(function* (input: {\n    readonly cwd: string;\n    readonly endCheckpointRef: ReturnType<typeof checkpointRefForThreadTurn>;\n    readonly rows: ReturnType<typeof normalizeSnapshotRows>;\n    readonly threadId: ThreadId;\n    readonly turnId: TurnId;\n  }) {\n    const entries: Array<{ readonly path: string; readonly blobSha: string | null }> = [];\n    for (const row of input.rows) {\n      if (row.deleted || row.blobSha !== null) {\n        entries.push({\n          path: row.path,\n          blobSha: row.deleted ? null : row.blobSha,\n        });\n        continue;\n      }\n\n      const blobShaResult = yield* checkpointStore\n        .readCheckpointFileBlob({\n          cwd: input.cwd,\n          checkpointRef: input.endCheckpointRef,\n          path: row.path,\n        })\n        .pipe(Effect.result);\n      if (blobShaResult._tag === \"Failure\") {\n        yield* Effect.logWarning(\"checkpoint attribution path-only overlay lookup failed\", {\n          threadId: input.threadId,\n          turnId: input.turnId,\n          path: row.path,\n          detail: blobShaResult.failure.message,\n        });\n        return null;\n      }\n\n      entries.push({\n        path: row.path,\n        blobSha: blobShaResult.success,\n      });\n    }\n    return entries;\n  });\n\n  const buildAttributedTurnDiff = Effect.fn(\"buildAttributedTurnDiff\")(function* (input: {\n    readonly cwd: string;\n    readonly threadId: ThreadId;\n    readonly turnId: TurnId;\n    readonly turnCount: number;\n    readonly fromCheckpointRef: ReturnType<typeof checkpointRefForThreadTurn>;\n    readonly targetCheckpointRef: ReturnType<typeof checkpointRefForThreadTurn>;\n  }) {\n    const storedRows = yield* turnFileSnapshots.getByTurn({\n      threadId: input.threadId,\n      turnId: input.turnId,\n    });\n    const rows = normalizeSnapshotRows(storedRows, input.cwd);\n    const attributedCheckpointRef = checkpointAttributedRefForThreadTurn(\n      input.threadId,\n      input.turnCount,\n    );\n\n    let attribution: OrchestrationCheckpointAttribution = \"unattributed\";\n    let toCheckpointRef = input.targetCheckpointRef;\n    let paths: ReadonlyArray<string> | undefined;\n\n    if (rows.length > CHECKPOINT_DIFF_PATHSPEC_LIMIT) {\n      yield* Effect.logWarning(\"checkpoint attribution skipped: touched path count exceeds cap\", {\n        threadId: input.threadId,\n        turnId: input.turnId,\n        pathCount: rows.length,\n        pathLimit: CHECKPOINT_DIFF_PATHSPEC_LIMIT,\n      });\n    } else if (rows.length > 0) {\n      const hasEditSnapshotRows = rows.some((row) => row.deleted || row.blobSha !== null);\n      if (hasEditSnapshotRows) {\n        const overlayEntries = yield* resolveOverlayEntries({\n          cwd: input.cwd,\n          endCheckpointRef: input.targetCheckpointRef,\n          rows,\n          threadId: input.threadId,\n          turnId: input.turnId,\n        });\n\n        if (overlayEntries !== null) {\n          const overlayResult = yield* checkpointStore\n            .captureOverlayCheckpoint({\n              cwd: input.cwd,\n              baseCheckpointRef: input.fromCheckpointRef,\n              checkpointRef: attributedCheckpointRef,\n              entries: overlayEntries,\n            })\n            .pipe(Effect.result);\n\n          if (overlayResult._tag === \"Success\") {\n            attribution = \"edit-snapshots\";\n            toCheckpointRef = attributedCheckpointRef;\n          } else {\n            yield* Effect.logWarning(\"checkpoint attribution overlay capture failed\", {\n              threadId: input.threadId,\n              turnId: input.turnId,\n              detail: overlayResult.failure.message,\n            });\n          }\n        }\n      }\n\n      if (attribution !== \"edit-snapshots\") {\n        attribution = \"touched-paths\";\n        paths = rows.map((row) => row.path);\n      }\n    }\n\n    const diff = yield* checkpointStore.diffCheckpoints({\n      cwd: input.cwd,\n      fromCheckpointRef: input.fromCheckpointRef,\n      toCheckpointRef,\n      fallbackFromToHead: false,\n      ignoreWhitespace: false,\n      ...(paths !== undefined ? { paths } : {}),\n    });\n\n    return { diff, attribution };\n  });\n\n  const captureTurnStartCheckpoint = Effect.fn(\"captureTurnStartCheckpoint\")(function* (input: {\n    readonly threadId: ThreadId;\n    readonly cwd: string;\n    readonly currentTurnCount: number;\n    readonly createdAt: string;\n  }) {\n    const baselineCheckpointRef = checkpointRefForThreadTurn(\n      input.threadId,\n      input.currentTurnCount,\n    );\n    const baselineExists = yield* checkpointStore.hasCheckpointRef({\n      cwd: input.cwd,\n      checkpointRef: baselineCheckpointRef,\n    });\n    if (!baselineExists) {\n      yield* checkpointStore.captureCheckpoint({\n        cwd: input.cwd,\n        checkpointRef: baselineCheckpointRef,\n      });\n      yield* receiptBus.publish({\n        type: \"checkpoint.baseline.captured\",\n        threadId: input.threadId,\n        checkpointTurnCount: input.currentTurnCount,\n        checkpointRef: baselineCheckpointRef,\n        createdAt: input.createdAt,\n      });\n    }\n\n    const turnStartRef = checkpointStartRefForThreadTurn(\n      input.threadId,\n      input.currentTurnCount + 1,\n    );\n    yield* checkpointStore.captureCheckpoint({\n      cwd: input.cwd,\n      checkpointRef: turnStartRef,\n    });\n  });\n\n  // Shared tail for both capture paths: creates the git checkpoint ref, diffs\n  // it against the previous turn, then dispatches the domain events to update\n  // the orchestration read model.\n  const captureAndDispatchCheckpoint = Effect.fn(\"captureAndDispatchCheckpoint\")(function* (input: {\n    readonly threadId: ThreadId;\n    readonly turnId: TurnId;\n    readonly thread: {\n      readonly messages: ReadonlyArray<{\n        readonly id: MessageId;\n        readonly role: string;\n        readonly turnId: TurnId | null;\n      }>;\n    };\n    readonly cwd: string;\n    readonly turnCount: number;\n    readonly status: \"ready\" | \"missing\" | \"error\";\n    readonly assistantMessageId: MessageId | undefined;\n    readonly createdAt: string;\n  }) {\n    const fromTurnCount = Math.max(0, input.turnCount - 1);\n    const fallbackFromCheckpointRef = checkpointRefForThreadTurn(input.threadId, fromTurnCount);\n    const turnStartCheckpointRef = checkpointStartRefForThreadTurn(input.threadId, input.turnCount);\n    const targetCheckpointRef = checkpointRefForThreadTurn(input.threadId, input.turnCount);\n\n    const turnStartCheckpointExists = yield* checkpointStore.hasCheckpointRef({\n      cwd: input.cwd,\n      checkpointRef: turnStartCheckpointRef,\n    });\n    const fromCheckpointRef = turnStartCheckpointExists\n      ? turnStartCheckpointRef\n      : fallbackFromCheckpointRef;\n    const fromCheckpointExists = turnStartCheckpointExists\n      ? true\n      : yield* checkpointStore.hasCheckpointRef({\n          cwd: input.cwd,\n          checkpointRef: fallbackFromCheckpointRef,\n        });\n    if (!fromCheckpointExists) {\n      yield* Effect.logWarning(\"checkpoint capture missing pre-turn baseline\", {\n        threadId: input.threadId,\n        turnId: input.turnId,\n        fromTurnCount,\n      });\n    } else if (!turnStartCheckpointExists) {\n      yield* Effect.logWarning(\"checkpoint capture missing turn-start baseline; using fallback\", {\n        threadId: input.threadId,\n        turnId: input.turnId,\n        turnCount: input.turnCount,\n      });\n    }\n\n    yield* checkpointStore.captureCheckpoint({\n      cwd: input.cwd,\n      checkpointRef: targetCheckpointRef,\n    });\n\n    // Invalidate the workspace entry cache so the @-mention file picker\n    // reflects files created or deleted during this turn.\n    yield* workspaceEntries.invalidate(input.cwd);\n\n    const diffSummary = yield* buildAttributedTurnDiff({\n      cwd: input.cwd,\n      threadId: input.threadId,\n      turnId: input.turnId,\n      turnCount: input.turnCount,\n      fromCheckpointRef,\n      targetCheckpointRef,\n    }).pipe(\n      Effect.catch((error) =>\n        checkpointStore\n          .diffCheckpoints({\n            cwd: input.cwd,\n            fromCheckpointRef,\n            toCheckpointRef: targetCheckpointRef,\n            fallbackFromToHead: false,\n            ignoreWhitespace: false,\n          })\n          .pipe(\n            Effect.map((diff) => ({ diff, attribution: \"unattributed\" as const })),\n            Effect.tapError((fallbackError) =>\n              appendCaptureFailureActivity({\n                threadId: input.threadId,\n                turnId: input.turnId,\n                detail: `Checkpoint captured, but turn diff summary is unavailable: ${fallbackError.message}`,\n                createdAt: input.createdAt,\n              }),\n            ),\n            Effect.catch((fallbackError) =>\n              Effect.logWarning(\"failed to derive checkpoint file summary\", {\n                threadId: input.threadId,\n                turnId: input.turnId,\n                turnCount: input.turnCount,\n                detail: fallbackError.message,\n                attributionDetail: error.message,\n              }).pipe(Effect.as({ diff: \"\", attribution: \"unattributed\" as const })),\n            ),\n          ),\n      ),\n    );\n\n    const files = checkpointFilesFromDiff(diffSummary.diff);\n\n    const assistantMessageId =\n      input.assistantMessageId ??\n      input.thread.messages\n        .toReversed()\n        .find((entry) => entry.role === \"assistant\" && entry.turnId === input.turnId)?.id;\n\n    yield* orchestrationEngine.dispatch({\n      type: \"thread.turn.diff.complete\",\n      commandId: yield* serverCommandId(\"checkpoint-turn-diff-complete\"),\n      threadId: input.threadId,\n      turnId: input.turnId,\n      completedAt: input.createdAt,\n      checkpointRef: targetCheckpointRef,\n      status: input.status,\n      files,\n      attribution: diffSummary.attribution,\n      ...(assistantMessageId !== undefined ? { assistantMessageId } : {}),\n      checkpointTurnCount: input.turnCount,\n      createdAt: input.createdAt,\n    });\n    // Captures run only at turn completion or after the session has settled, so\n    // deleting consumed edit snapshots cannot erase mid-turn baselines.\n    yield* turnFileSnapshots.deleteByTurn({\n      threadId: input.threadId,\n      turnId: input.turnId,\n    });\n    yield* receiptBus.publish({\n      type: \"checkpoint.diff.finalized\",\n      threadId: input.threadId,\n      turnId: input.turnId,\n      checkpointTurnCount: input.turnCount,\n      checkpointRef: targetCheckpointRef,\n      status: input.status,\n      createdAt: input.createdAt,\n    });\n    yield* receiptBus.publish({\n      type: \"turn.processing.quiesced\",\n      threadId: input.threadId,\n      turnId: input.turnId,\n      checkpointTurnCount: input.turnCount,\n      createdAt: input.createdAt,\n    });\n\n    yield* orchestrationEngine.dispatch({\n      type: \"thread.activity.append\",\n      commandId: yield* serverCommandId(\"checkpoint-captured-activity\"),\n      threadId: input.threadId,\n      activity: {\n        id: EventId.make(yield* randomUUID),\n        tone: \"info\",\n        kind: \"checkpoint.captured\",\n        summary: \"Checkpoint captured\",\n        payload: {\n          turnCount: input.turnCount,\n          status: input.status,\n        },\n        turnId: input.turnId,\n        createdAt: input.createdAt,\n      },\n      createdAt: input.createdAt,\n    });\n  });\n\n  // Captures a real git checkpoint when a turn completes via a runtime event.\n  const captureCheckpointFromTurnCompletion = Effect.fn(\"captureCheckpointFromTurnCompletion\")(\n    function* (event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>) {\n      const turnId = toTurnId(event.turnId);\n      if (!turnId) {\n        return;\n      }\n\n      const thread = yield* resolveThreadDetail(event.threadId);\n      if (!thread) {\n        return;\n      }\n\n      // When a primary turn is active, only that turn may produce completion checkpoints.\n      if (thread.session?.activeTurnId && !sameId(thread.session.activeTurnId, turnId)) {\n        return;\n      }\n\n      const projects = yield* resolveThreadProjects(thread.projectId);\n      const checkpointCwd = yield* resolveCheckpointCwd({\n        threadId: thread.id,\n        thread,\n        projects,\n        preferSessionRuntime: true,\n      });\n      if (!checkpointCwd) {\n        return;\n      }\n\n      // Reuse any existing read-model checkpoint for this turn. Completion is\n      // authoritative, and the projector replaces checkpoints by turnId.\n      const existingCheckpoint = thread.checkpoints.find(\n        (checkpoint) => checkpoint.turnId === turnId,\n      );\n      const currentTurnCount = thread.checkpoints.reduce(\n        (maxTurnCount, checkpoint) => Math.max(maxTurnCount, checkpoint.checkpointTurnCount),\n        0,\n      );\n      const nextTurnCount = existingCheckpoint\n        ? existingCheckpoint.checkpointTurnCount\n        : currentTurnCount + 1;\n\n      yield* captureAndDispatchCheckpoint({\n        threadId: thread.id,\n        turnId,\n        thread,\n        cwd: checkpointCwd,\n        turnCount: nextTurnCount,\n        status: checkpointStatusFromRuntime(event.payload.state),\n        assistantMessageId: undefined,\n        createdAt: event.createdAt,\n      });\n    },\n  );\n\n  const finalizeMissingCheckpoint = Effect.fn(\"finalizeMissingCheckpoint\")(function* (input: {\n    readonly threadId: ThreadId;\n    readonly turnId: TurnId;\n    readonly thread: {\n      readonly id: ThreadId;\n      readonly projectId: ProjectId;\n      readonly worktreePath: string | null;\n      readonly messages: ReadonlyArray<{\n        readonly id: MessageId;\n        readonly role: string;\n        readonly turnId: TurnId | null;\n      }>;\n    };\n    readonly checkpointTurnCount: number;\n    readonly assistantMessageId: MessageId | null;\n    readonly completedAt: string;\n  }) {\n    const projects = yield* resolveThreadProjects(input.thread.projectId);\n    const checkpointCwd = yield* resolveCheckpointCwd({\n      threadId: input.threadId,\n      thread: input.thread,\n      projects,\n      preferSessionRuntime: true,\n    });\n    if (!checkpointCwd) {\n      return;\n    }\n\n    yield* captureAndDispatchCheckpoint({\n      threadId: input.threadId,\n      turnId: input.turnId,\n      thread: input.thread,\n      cwd: checkpointCwd,\n      turnCount: input.checkpointTurnCount,\n      status: \"ready\",\n      assistantMessageId: input.assistantMessageId ?? undefined,\n      createdAt: input.completedAt,\n    });\n  });\n\n  // ProviderRuntimeIngestion creates placeholder checkpoints on\n  // turn.diff.updated. Keep the placeholder while the turn is active; turn\n  // completion or the settled-session fallback will replace it with a real git\n  // checkpoint.\n  const captureCheckpointFromPlaceholder = Effect.fn(\"captureCheckpointFromPlaceholder\")(function* (\n    event: Extract<OrchestrationEvent, { type: \"thread.turn-diff-completed\" }>,\n  ) {\n    const { threadId, turnId, checkpointTurnCount, status } = event.payload;\n\n    // Only replace placeholders; skip events from our own real captures.\n    if (status !== \"missing\") {\n      return;\n    }\n\n    const thread = yield* resolveThreadDetail(threadId);\n    if (!thread) {\n      yield* Effect.logWarning(\"checkpoint capture from placeholder skipped: thread not found\", {\n        threadId,\n      });\n      return;\n    }\n\n    // If a real checkpoint already exists for this turn, skip.\n    if (\n      thread.checkpoints.some(\n        (checkpoint) => checkpoint.turnId === turnId && checkpoint.status !== \"missing\",\n      )\n    ) {\n      yield* Effect.logDebug(\n        \"checkpoint capture from placeholder skipped: real checkpoint already exists\",\n        { threadId, turnId },\n      );\n      return;\n    }\n\n    if (sameId(thread.session?.activeTurnId, turnId)) {\n      yield* Effect.logDebug(\"checkpoint capture from placeholder deferred until turn completion\", {\n        threadId,\n        turnId,\n      });\n      return;\n    }\n\n    yield* finalizeMissingCheckpoint({\n      threadId,\n      turnId,\n      thread,\n      checkpointTurnCount,\n      assistantMessageId: event.payload.assistantMessageId,\n      completedAt: event.payload.completedAt,\n    });\n  });\n\n  const finalizeMissingCheckpointsFromSettledSession = Effect.fn(\n    \"finalizeMissingCheckpointsFromSettledSession\",\n  )(function* (event: Extract<OrchestrationEvent, { type: \"thread.session-set\" }>) {\n    const { session, threadId } = event.payload;\n    if (\n      session.activeTurnId !== null ||\n      session.status === \"running\" ||\n      session.status === \"starting\"\n    ) {\n      return;\n    }\n\n    const thread = yield* resolveThreadDetail(threadId);\n    if (!thread) {\n      yield* Effect.logWarning(\"checkpoint settled-session fallback skipped: thread not found\", {\n        threadId,\n      });\n      return;\n    }\n\n    const missingCheckpoints = thread.checkpoints.filter(\n      (checkpoint) => checkpoint.status === \"missing\",\n    );\n    yield* Effect.forEach(\n      missingCheckpoints,\n      (checkpoint) =>\n        finalizeMissingCheckpoint({\n          threadId,\n          turnId: checkpoint.turnId,\n          thread,\n          checkpointTurnCount: checkpoint.checkpointTurnCount,\n          assistantMessageId: checkpoint.assistantMessageId,\n          completedAt: checkpoint.completedAt,\n        }),\n      { concurrency: 1 },\n    );\n  });\n\n  const ensurePreTurnBaselineFromTurnStart = Effect.fn(\"ensurePreTurnBaselineFromTurnStart\")(\n    function* (event: Extract<ProviderRuntimeEvent, { type: \"turn.started\" }>) {\n      const turnId = toTurnId(event.turnId);\n      if (!turnId) {\n        return;\n      }\n\n      const thread = yield* resolveThreadDetail(event.threadId);\n      if (!thread) {\n        return;\n      }\n\n      const projects = yield* resolveThreadProjects(thread.projectId);\n      const checkpointCwd = yield* resolveCheckpointCwd({\n        threadId: thread.id,\n        thread,\n        projects,\n        preferSessionRuntime: false,\n      });\n      if (!checkpointCwd) {\n        return;\n      }\n\n      const currentTurnCount = thread.checkpoints.reduce(\n        (maxTurnCount, checkpoint) => Math.max(maxTurnCount, checkpoint.checkpointTurnCount),\n        0,\n      );\n      yield* captureTurnStartCheckpoint({\n        threadId: thread.id,\n        cwd: checkpointCwd,\n        currentTurnCount,\n        createdAt: event.createdAt,\n      });\n    },\n  );\n\n  const refreshLocalGitStatusFromTurnCompletion = Effect.fn(\n    \"refreshLocalGitStatusFromTurnCompletion\",\n  )(function* (event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>) {\n    const sessionRuntime = yield* resolveSessionRuntimeForThread(event.threadId);\n    if (Option.isNone(sessionRuntime)) {\n      return;\n    }\n\n    yield* vcsStatusBroadcaster.refreshLocalStatus(sessionRuntime.value.cwd).pipe(\n      Effect.catch((error) =>\n        Effect.logWarning(\"failed to refresh local git status after turn completion\", {\n          threadId: event.threadId,\n          turnId: event.turnId ?? null,\n          cwd: sessionRuntime.value.cwd,\n          detail: error.message,\n        }),\n      ),\n    );\n  });\n\n  const ensurePreTurnBaselineFromDomainTurnStart = Effect.fn(\n    \"ensurePreTurnBaselineFromDomainTurnStart\",\n  )(function* (\n    event: Extract<\n      OrchestrationEvent,\n      { type: \"thread.turn-start-requested\" | \"thread.message-sent\" }\n    >,\n  ) {\n    if (event.type === \"thread.message-sent\") {\n      if (\n        event.payload.role !== \"user\" ||\n        event.payload.streaming ||\n        event.payload.turnId !== null\n      ) {\n        return;\n      }\n    }\n\n    const threadId = event.payload.threadId;\n    const thread = yield* resolveThreadDetail(threadId);\n    if (!thread) {\n      return;\n    }\n\n    const projects = yield* resolveThreadProjects(thread.projectId);\n    const checkpointCwd = yield* resolveCheckpointCwd({\n      threadId,\n      thread,\n      projects,\n      preferSessionRuntime: false,\n    });\n    if (!checkpointCwd) {\n      return;\n    }\n\n    const currentTurnCount = thread.checkpoints.reduce(\n      (maxTurnCount, checkpoint) => Math.max(maxTurnCount, checkpoint.checkpointTurnCount),\n      0,\n    );\n    yield* captureTurnStartCheckpoint({\n      threadId,\n      cwd: checkpointCwd,\n      currentTurnCount,\n      createdAt: event.occurredAt,\n    });\n  });\n\n  const handleRevertRequested = Effect.fn(\"handleRevertRequested\")(function* (\n    event: Extract<OrchestrationEvent, { type: \"thread.checkpoint-revert-requested\" }>,\n  ) {\n    const now = DateTime.formatIso(yield* DateTime.now);\n\n    const thread = yield* resolveThreadDetail(event.payload.threadId);\n    if (!thread) {\n      yield* appendRevertFailureActivity({\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        detail: \"Thread was not found in read model.\",\n        createdAt: now,\n      }).pipe(Effect.catch(() => Effect.void));\n      return;\n    }\n\n    const sessionRuntime = yield* resolveSessionRuntimeForThread(event.payload.threadId);\n    if (Option.isNone(sessionRuntime)) {\n      yield* appendRevertFailureActivity({\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        detail: \"No active provider session with workspace cwd is bound to this thread.\",\n        createdAt: now,\n      }).pipe(Effect.catch(() => Effect.void));\n      return;\n    }\n    if (!isGitWorkspace(sessionRuntime.value.cwd)) {\n      yield* appendRevertFailureActivity({\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        detail: \"Checkpoints are unavailable because this project is not a git repository.\",\n        createdAt: now,\n      }).pipe(Effect.catch(() => Effect.void));\n      return;\n    }\n\n    const currentTurnCount = thread.checkpoints.reduce(\n      (maxTurnCount, checkpoint) => Math.max(maxTurnCount, checkpoint.checkpointTurnCount),\n      0,\n    );\n\n    if (event.payload.turnCount > currentTurnCount) {\n      yield* appendRevertFailureActivity({\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        detail: `Checkpoint turn count ${event.payload.turnCount} exceeds current turn count ${currentTurnCount}.`,\n        createdAt: now,\n      }).pipe(Effect.catch(() => Effect.void));\n      return;\n    }\n\n    const targetCheckpointRef =\n      event.payload.turnCount === 0\n        ? checkpointRefForThreadTurn(event.payload.threadId, 0)\n        : thread.checkpoints.find(\n            (checkpoint) => checkpoint.checkpointTurnCount === event.payload.turnCount,\n          )?.checkpointRef;\n\n    if (!targetCheckpointRef) {\n      yield* appendRevertFailureActivity({\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        detail: `Checkpoint ref for turn ${event.payload.turnCount} is unavailable in read model.`,\n        createdAt: now,\n      }).pipe(Effect.catch(() => Effect.void));\n      return;\n    }\n\n    const restored = yield* checkpointStore.restoreCheckpoint({\n      cwd: sessionRuntime.value.cwd,\n      checkpointRef: targetCheckpointRef,\n      fallbackToHead: event.payload.turnCount === 0,\n    });\n    if (!restored) {\n      yield* appendRevertFailureActivity({\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        detail: `Filesystem checkpoint is unavailable for turn ${event.payload.turnCount}.`,\n        createdAt: now,\n      }).pipe(Effect.catch(() => Effect.void));\n      return;\n    }\n\n    // Invalidate the workspace entry cache so the @-mention file picker\n    // reflects the reverted filesystem state.\n    yield* workspaceEntries.invalidate(sessionRuntime.value.cwd);\n\n    const rolledBackTurns = Math.max(0, currentTurnCount - event.payload.turnCount);\n    if (rolledBackTurns > 0) {\n      yield* providerService.rollbackConversation({\n        threadId: sessionRuntime.value.threadId,\n        numTurns: rolledBackTurns,\n      });\n    }\n\n    const staleCheckpointRefs = thread.checkpoints\n      .filter((checkpoint) => checkpoint.checkpointTurnCount > event.payload.turnCount)\n      .map((checkpoint) => checkpoint.checkpointRef);\n    const staleAuxiliaryCheckpointRefs = Array.from(\n      { length: Math.max(0, currentTurnCount - event.payload.turnCount) },\n      (_, index) => event.payload.turnCount + index + 1,\n    ).flatMap((turnCount) => [\n      checkpointStartRefForThreadTurn(event.payload.threadId, turnCount),\n      checkpointAttributedRefForThreadTurn(event.payload.threadId, turnCount),\n    ]);\n\n    if (staleCheckpointRefs.length > 0 || staleAuxiliaryCheckpointRefs.length > 0) {\n      yield* checkpointStore.deleteCheckpointRefs({\n        cwd: sessionRuntime.value.cwd,\n        checkpointRefs: [...staleCheckpointRefs, ...staleAuxiliaryCheckpointRefs],\n      });\n    }\n\n    yield* orchestrationEngine\n      .dispatch({\n        type: \"thread.revert.complete\",\n        commandId: yield* serverCommandId(\"checkpoint-revert-complete\"),\n        threadId: event.payload.threadId,\n        turnCount: event.payload.turnCount,\n        createdAt: now,\n      })\n      .pipe(\n        Effect.catch((error) =>\n          appendRevertFailureActivity({\n            threadId: event.payload.threadId,\n            turnCount: event.payload.turnCount,\n            detail: error.message,\n            createdAt: now,\n          }),\n        ),\n        Effect.asVoid,\n      );\n  });\n\n  const processDomainEvent = Effect.fn(\"processDomainEvent\")(function* (event: OrchestrationEvent) {\n    if (event.type === \"thread.turn-start-requested\" || event.type === \"thread.message-sent\") {\n      yield* ensurePreTurnBaselineFromDomainTurnStart(event);\n      return;\n    }\n\n    if (event.type === \"thread.checkpoint-revert-requested\") {\n      yield* handleRevertRequested(event).pipe(\n        Effect.catch((error) =>\n          Effect.flatMap(nowIso, (createdAt) =>\n            appendRevertFailureActivity({\n              threadId: event.payload.threadId,\n              turnCount: event.payload.turnCount,\n              detail: error.message,\n              createdAt,\n            }),\n          ),\n        ),\n      );\n      return;\n    }\n\n    if (event.type === \"thread.turn-diff-completed\") {\n      yield* captureCheckpointFromPlaceholder(event).pipe(\n        Effect.catch((error) =>\n          Effect.flatMap(nowIso, (createdAt) =>\n            appendCaptureFailureActivity({\n              threadId: event.payload.threadId,\n              turnId: event.payload.turnId,\n              detail: error.message,\n              createdAt,\n            }).pipe(Effect.catch(() => Effect.void)),\n          ),\n        ),\n      );\n    }\n\n    // If a turn.completed runtime event is missed or the server restarts while\n    // a placeholder is pending, the next settled session snapshot is the\n    // authoritative signal that no turn is running and the placeholder can be\n    // finalized.\n    if (event.type === \"thread.session-set\") {\n      yield* finalizeMissingCheckpointsFromSettledSession(event).pipe(\n        Effect.catch((error) =>\n          Effect.flatMap(nowIso, (createdAt) =>\n            appendCaptureFailureActivity({\n              threadId: event.payload.threadId,\n              turnId: null,\n              detail: error.message,\n              createdAt,\n            }).pipe(Effect.catch(() => Effect.void)),\n          ),\n        ),\n      );\n    }\n  });\n\n  const processRuntimeEvent = Effect.fn(\"processRuntimeEvent\")(function* (\n    event: ProviderRuntimeEvent,\n  ) {\n    if (event.type === \"turn.started\") {\n      yield* ensurePreTurnBaselineFromTurnStart(event);\n      return;\n    }\n\n    if (event.type === \"turn.completed\") {\n      const turnId = toTurnId(event.turnId);\n      yield* refreshLocalGitStatusFromTurnCompletion(event);\n      yield* captureCheckpointFromTurnCompletion(event).pipe(\n        Effect.catch((error) =>\n          Effect.flatMap(nowIso, (createdAt) =>\n            appendCaptureFailureActivity({\n              threadId: event.threadId,\n              turnId,\n              detail: error.message,\n              createdAt,\n            }).pipe(Effect.catch(() => Effect.void)),\n          ),\n        ),\n      );\n      return;\n    }\n  });\n\n  const processInput = (\n    input: ReactorInput,\n  ): Effect.Effect<\n    void,\n    CheckpointStoreError | OrchestrationDispatchError | PlatformError.PlatformError,\n    never\n  > =>\n    input.source === \"domain\" ? processDomainEvent(input.event) : processRuntimeEvent(input.event);\n\n  const processInputSafely = (input: ReactorInput) =>\n    processInput(input).pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.failCause(cause);\n        }\n        return Effect.logWarning(\"checkpoint reactor failed to process input\", {\n          source: input.source,\n          eventType: input.event.type,\n          cause: Cause.pretty(cause),\n        });\n      }),\n    );\n\n  const worker = yield* makeDrainableWorker(processInputSafely);\n\n  const start: CheckpointReactorShape[\"start\"] = Effect.fn(\"start\")(function* () {\n    yield* Effect.forkScoped(\n      Stream.runForEach(orchestrationEngine.streamDomainEvents, (event) => {\n        if (\n          event.type !== \"thread.turn-start-requested\" &&\n          event.type !== \"thread.message-sent\" &&\n          event.type !== \"thread.checkpoint-revert-requested\" &&\n          event.type !== \"thread.turn-diff-completed\" &&\n          event.type !== \"thread.session-set\"\n        ) {\n          return Effect.void;\n        }\n        return worker.enqueue({ source: \"domain\", event });\n      }),\n    );\n\n    yield* Effect.forkScoped(\n      Stream.runForEach(providerService.streamEvents, (event) => {\n        if (event.type !== \"turn.started\" && event.type !== \"turn.completed\") {\n          return Effect.void;\n        }\n        return worker.enqueue({ source: \"runtime\", event });\n      }),\n    );\n  });\n\n  return {\n    start,\n    drain: worker.drain,\n  } satisfies CheckpointReactorShape;\n});\n\nexport const CheckpointReactorLive = Layer.effect(CheckpointReactor, make).pipe(\n  Layer.provide(TurnFileSnapshotsLive),\n);\n","import type { OrchestrationEvent } from \"@salchi/contracts\";\nimport { makeDrainableWorker } from \"@salchi/shared/DrainableWorker\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Stream from \"effect/Stream\";\n\nimport { ProviderService } from \"../../provider/Services/ProviderService.ts\";\nimport { TurnFileSnapshotsLive } from \"../../persistence/Layers/TurnFileSnapshots.ts\";\nimport { TurnFileSnapshots } from \"../../persistence/Services/TurnFileSnapshots.ts\";\nimport { TerminalManager } from \"../../terminal/Services/Manager.ts\";\nimport { OrchestrationEngineService } from \"../Services/OrchestrationEngine.ts\";\nimport {\n  ThreadDeletionReactor,\n  type ThreadDeletionReactorShape,\n} from \"../Services/ThreadDeletionReactor.ts\";\n\ntype ThreadDeletedEvent = Extract<OrchestrationEvent, { type: \"thread.deleted\" }>;\n\nexport const logCleanupCauseUnlessInterrupted = <R, E>({\n  effect,\n  message,\n  threadId,\n}: {\n  readonly effect: Effect.Effect<void, E, R>;\n  readonly message: string;\n  readonly threadId: ThreadDeletedEvent[\"payload\"][\"threadId\"];\n}): Effect.Effect<void, E, R> =>\n  effect.pipe(\n    Effect.catchCause((cause) => {\n      if (Cause.hasInterruptsOnly(cause)) {\n        return Effect.failCause(cause);\n      }\n      return Effect.logDebug(message, {\n        threadId,\n        cause: Cause.pretty(cause),\n      });\n    }),\n  );\n\nconst make = Effect.gen(function* () {\n  const orchestrationEngine = yield* OrchestrationEngineService;\n  const providerService = yield* ProviderService;\n  const terminalManager = yield* TerminalManager;\n  const turnFileSnapshots = yield* TurnFileSnapshots;\n\n  const stopProviderSession = (threadId: ThreadDeletedEvent[\"payload\"][\"threadId\"]) =>\n    logCleanupCauseUnlessInterrupted({\n      effect: providerService.stopSession({ threadId }),\n      message: \"thread deletion cleanup skipped provider session stop\",\n      threadId,\n    });\n\n  const closeThreadTerminals = (threadId: ThreadDeletedEvent[\"payload\"][\"threadId\"]) =>\n    logCleanupCauseUnlessInterrupted({\n      effect: terminalManager.close({ threadId, deleteHistory: true }),\n      message: \"thread deletion cleanup skipped terminal close\",\n      threadId,\n    });\n\n  const deleteTurnFileSnapshots = (threadId: ThreadDeletedEvent[\"payload\"][\"threadId\"]) =>\n    logCleanupCauseUnlessInterrupted({\n      effect: turnFileSnapshots.deleteByThread({ threadId }),\n      message: \"thread deletion cleanup skipped turn file snapshots\",\n      threadId,\n    });\n\n  const processThreadDeleted = Effect.fn(\"processThreadDeleted\")(function* (\n    event: ThreadDeletedEvent,\n  ) {\n    const { threadId } = event.payload;\n    yield* stopProviderSession(threadId);\n    yield* closeThreadTerminals(threadId);\n    yield* deleteTurnFileSnapshots(threadId);\n  });\n\n  const processThreadDeletedSafely = (event: ThreadDeletedEvent) =>\n    processThreadDeleted(event).pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.failCause(cause);\n        }\n        return Effect.logWarning(\"thread deletion reactor failed to process event\", {\n          eventType: event.type,\n          threadId: event.payload.threadId,\n          cause: Cause.pretty(cause),\n        });\n      }),\n    );\n\n  const worker = yield* makeDrainableWorker(processThreadDeletedSafely);\n\n  const start: ThreadDeletionReactorShape[\"start\"] = Effect.fn(\"start\")(function* () {\n    yield* Effect.forkScoped(\n      Stream.runForEach(orchestrationEngine.streamDomainEvents, (event) => {\n        if (event.type !== \"thread.deleted\") {\n          return Effect.void;\n        }\n        return worker.enqueue(event);\n      }),\n    );\n  });\n\n  return {\n    start,\n    drain: worker.drain,\n  } satisfies ThreadDeletionReactorShape;\n});\n\nexport const ThreadDeletionReactorLive = Layer.effect(ThreadDeletionReactor, make).pipe(\n  Layer.provide(TurnFileSnapshotsLive),\n);\n","import {\n  type ProviderDriverKind,\n  type ProviderInstanceId,\n  type ServerProvider,\n  ServerProvider as ServerProviderSchema,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\n\nimport { writeFileStringAtomically } from \"../atomicWrite.ts\";\n\nconst decodeProviderStatusCache = Schema.decodeUnknownEffect(\n  Schema.fromJsonString(ServerProviderSchema),\n);\n\nconst mergeProviderModels = (\n  fallbackModels: ReadonlyArray<ServerProvider[\"models\"][number]>,\n  cachedModels: ReadonlyArray<ServerProvider[\"models\"][number]>,\n): ReadonlyArray<ServerProvider[\"models\"][number]> => {\n  const fallbackSlugs = new Set(fallbackModels.map((model) => model.slug));\n  return [...fallbackModels, ...cachedModels.filter((model) => !fallbackSlugs.has(model.slug))];\n};\n\nexport const orderProviderSnapshots = (\n  providers: ReadonlyArray<ServerProvider>,\n): ReadonlyArray<ServerProvider> =>\n  [...providers].toSorted(\n    (left, right) =>\n      (left.displayName ?? \"\").localeCompare(right.displayName ?? \"\") ||\n      left.driver.localeCompare(right.driver) ||\n      left.instanceId.localeCompare(right.instanceId),\n  );\n\nexport const isCachedProviderCorrelated = (input: {\n  readonly cachedProvider: ServerProvider;\n  readonly fallbackProvider: ServerProvider;\n}): boolean =>\n  input.cachedProvider.instanceId === input.fallbackProvider.instanceId &&\n  input.cachedProvider.driver === input.fallbackProvider.driver;\n\nexport const hydrateCachedProvider = (input: {\n  readonly cachedProvider: ServerProvider;\n  readonly fallbackProvider: ServerProvider;\n}): ServerProvider => {\n  if (!isCachedProviderCorrelated(input)) {\n    return input.fallbackProvider;\n  }\n\n  if (\n    !input.fallbackProvider.enabled ||\n    input.cachedProvider.enabled !== input.fallbackProvider.enabled\n  ) {\n    return input.fallbackProvider;\n  }\n\n  const { message: _fallbackMessage, ...fallbackWithoutMessage } = input.fallbackProvider;\n  const hydratedProvider: ServerProvider = {\n    ...fallbackWithoutMessage,\n    models: mergeProviderModels(input.fallbackProvider.models, input.cachedProvider.models),\n    installed: input.cachedProvider.installed,\n    version: input.cachedProvider.version,\n    status: input.cachedProvider.status,\n    auth: input.cachedProvider.auth,\n    checkedAt: input.cachedProvider.checkedAt,\n    slashCommands: input.cachedProvider.slashCommands,\n    skills: input.cachedProvider.skills,\n  };\n\n  return input.cachedProvider.message\n    ? { ...hydratedProvider, message: input.cachedProvider.message }\n    : hydratedProvider;\n};\n\n/**\n * Resolve the on-disk cache path for a provider instance snapshot.\n *\n * File naming: `<cacheDir>/<instanceId>.json`. For the default instance of\n * a built-in kind this equals the legacy `<kind>.json` path (because\n * `defaultInstanceIdForDriver(kind).toString() === kind`), so existing\n * cached snapshots remain readable without any rename step.\n *\n * Non-default instances (e.g. `codex_personal`) land in their own files and\n * never collide with other instances.\n *\n * Cache contents must still carry matching `instanceId` + `driver` identity\n * before hydration. The filename alone is not trusted as a routing key.\n */\nexport const resolveProviderStatusCachePath = Effect.fn(\"resolveProviderStatusCachePath\")(\n  function* (input: {\n    readonly cacheDir: string;\n    readonly instanceId: ProviderInstanceId;\n  }): Effect.fn.Return<string, never, Path.Path> {\n    const path = yield* Path.Path;\n    return path.join(input.cacheDir, `${input.instanceId}.json`);\n  },\n);\n\n/**\n * Legacy kind-keyed path resolver retained for callers that still think in\n * terms of `ProviderDriverKind`. Prefer `resolveProviderStatusCachePath` with an\n * `instanceId`; new code should route through the instance registry.\n *\n * @deprecated use `resolveProviderStatusCachePath` with an instance id.\n */\nexport const resolveLegacyProviderStatusCachePath = Effect.fn(\n  \"resolveLegacyProviderStatusCachePath\",\n)(function* (input: {\n  readonly cacheDir: string;\n  readonly provider: ProviderDriverKind;\n}): Effect.fn.Return<string, never, Path.Path> {\n  const path = yield* Path.Path;\n  return path.join(input.cacheDir, `${input.provider}.json`);\n});\n\nexport const readProviderStatusCache = (filePath: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const exists = yield* fs.exists(filePath).pipe(Effect.orElseSucceed(() => false));\n    if (!exists) {\n      return undefined;\n    }\n\n    const raw = yield* fs.readFileString(filePath).pipe(Effect.orElseSucceed(() => \"\"));\n    const trimmed = raw.trim();\n    if (trimmed.length === 0) {\n      return undefined;\n    }\n\n    return yield* decodeProviderStatusCache(trimmed).pipe(\n      Effect.matchCauseEffect({\n        onFailure: (cause) =>\n          Effect.logWarning(\"failed to parse provider status cache, ignoring\", {\n            path: filePath,\n            issues: Cause.pretty(cause),\n          }).pipe(Effect.as(undefined)),\n        onSuccess: Effect.succeed,\n      }),\n    );\n  });\n\nexport const writeProviderStatusCache = (input: {\n  readonly filePath: string;\n  readonly provider: ServerProvider;\n}) => {\n  const { updateState: _updateState, ...cacheableProvider } = input.provider;\n  return writeFileStringAtomically({\n    filePath: input.filePath,\n    contents: `${JSON.stringify(cacheableProvider, null, 2)}\\n`,\n  });\n};\n","/**\n * ProviderRegistryLive — aggregates per-instance snapshot streams into a\n * single materialized list.\n *\n * Historically this Layer composed four per-kind Live Layers\n * (`CodexProviderLive`, `ClaudeProviderLive`, …) that each exposed a\n * `ServerProviderShape`. Those Lives were deleted during the driver /\n * instance refactor — every driver now carries its `snapshot: ServerProviderShape`\n * bundled onto the `ProviderInstance` the registry produces.\n *\n * Each configured instance (including multi-instance setups like\n * `codex_personal` + `codex_work`) contributes one `ProviderSnapshotSource`,\n * keyed by `instanceId`. Instances whose driver is unavailable or whose\n * config failed to decode are merged from `instanceRegistry.listUnavailable`\n * as shadow snapshots so the UI can render their exact unavailable reason.\n *\n * Cache paths on disk are now keyed by `instanceId`. Because\n * `defaultInstanceIdForDriver(kind) === kind` for built-in kinds, existing\n * `<kind>.json` files remain the on-disk location for that driver's default\n * instance. Identity-less legacy cache contents are ignored and replaced by\n * the first live refresh.\n *\n * @module ProviderRegistryLive\n */\nimport {\n  defaultInstanceIdForDriver,\n  ProviderDriverKind,\n  type ProviderInstanceId,\n  type ServerProvider,\n  type ServerProviderUpdateState,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Equal from \"effect/Equal\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\nimport * as PubSub from \"effect/PubSub\";\nimport * as Ref from \"effect/Ref\";\nimport * as Stream from \"effect/Stream\";\nimport * as Semaphore from \"effect/Semaphore\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { ProviderInstanceRegistry } from \"../Services/ProviderInstanceRegistry.ts\";\nimport { ProviderRegistry, type ProviderRegistryShape } from \"../Services/ProviderRegistry.ts\";\nimport {\n  hydrateCachedProvider,\n  isCachedProviderCorrelated,\n  orderProviderSnapshots,\n  readProviderStatusCache,\n  resolveProviderStatusCachePath,\n  writeProviderStatusCache,\n} from \"../providerStatusCache.ts\";\nimport type { ProviderInstance } from \"../ProviderDriver.ts\";\nimport { makeManualOnlyProviderMaintenanceCapabilities } from \"../providerMaintenance.ts\";\nimport type { ProviderSnapshotSource } from \"../builtInProviderCatalog.ts\";\n\nconst loadProviders = (\n  providerSources: ReadonlyArray<ProviderSnapshotSource>,\n): Effect.Effect<ReadonlyArray<ServerProvider>> =>\n  Effect.forEach(\n    providerSources,\n    (providerSource) =>\n      providerSource.getSnapshot.pipe(\n        Effect.flatMap((snapshot) => correlateSnapshotWithSource(providerSource, snapshot)),\n      ),\n    {\n      concurrency: \"unbounded\",\n    },\n  );\n\nconst makeManualProviderMaintenanceCapabilities = (provider: ProviderDriverKind) =>\n  makeManualOnlyProviderMaintenanceCapabilities({\n    provider,\n    packageName: null,\n  });\n\nconst hasModelCapabilities = (model: ServerProvider[\"models\"][number]): boolean =>\n  (model.capabilities?.optionDescriptors?.length ?? 0) > 0;\n\nconst mergeProviderModels = (\n  previousModels: ReadonlyArray<ServerProvider[\"models\"][number]>,\n  nextModels: ReadonlyArray<ServerProvider[\"models\"][number]>,\n): ReadonlyArray<ServerProvider[\"models\"][number]> => {\n  if (nextModels.length === 0 && previousModels.length > 0) {\n    return previousModels;\n  }\n\n  const previousBySlug = new Map(previousModels.map((model) => [model.slug, model] as const));\n  const mergedModels = nextModels.map((model) => {\n    const previousModel = previousBySlug.get(model.slug);\n    if (!previousModel || hasModelCapabilities(model) || !hasModelCapabilities(previousModel)) {\n      return model;\n    }\n    return {\n      ...model,\n      capabilities: previousModel.capabilities,\n    };\n  });\n  const nextSlugs = new Set(nextModels.map((model) => model.slug));\n  return [...mergedModels, ...previousModels.filter((model) => !nextSlugs.has(model.slug))];\n};\n\nexport const mergeProviderSnapshot = (\n  previousProvider: ServerProvider | undefined,\n  nextProvider: ServerProvider,\n): ServerProvider =>\n  !previousProvider\n    ? nextProvider\n    : {\n        ...nextProvider,\n        models: mergeProviderModels(previousProvider.models, nextProvider.models),\n      };\n\nexport const mergeProviderSnapshots = (\n  previousProviders: ReadonlyArray<ServerProvider>,\n  nextProviders: ReadonlyArray<ServerProvider>,\n): ReadonlyArray<ServerProvider> => {\n  const mergedProviders = new Map(\n    previousProviders.map((provider) => [snapshotInstanceKey(provider), provider] as const),\n  );\n\n  for (const provider of nextProviders) {\n    mergedProviders.set(\n      snapshotInstanceKey(provider),\n      mergeProviderSnapshot(mergedProviders.get(snapshotInstanceKey(provider)), provider),\n    );\n  }\n\n  return orderProviderSnapshots([...mergedProviders.values()]);\n};\n\nexport const selectProvidersByKind = (\n  providers: ReadonlyArray<ServerProvider>,\n  providerKinds: ReadonlySet<ProviderDriverKind>,\n): ReadonlyArray<ServerProvider> =>\n  providers.filter((provider) => providerKinds.has(provider.driver));\n\nexport const haveProvidersChanged = (\n  previousProviders: ReadonlyArray<ServerProvider>,\n  nextProviders: ReadonlyArray<ServerProvider>,\n): boolean => !Equal.equals(previousProviders, nextProviders);\n\nconst correlateSnapshotWithSource = (\n  source: ProviderSnapshotSource,\n  snapshot: ServerProvider,\n): Effect.Effect<ServerProvider> => {\n  if (snapshot.instanceId !== source.instanceId) {\n    return Effect.die(\n      new Error(\n        `Provider snapshot instance mismatch: source '${source.instanceId}' emitted '${snapshot.instanceId}'.`,\n      ),\n    );\n  }\n  if (snapshot.driver !== source.driverKind) {\n    return Effect.die(\n      new Error(\n        `Provider snapshot driver mismatch for instance '${source.instanceId}': source '${source.driverKind}' emitted '${snapshot.driver}'.`,\n      ),\n    );\n  }\n  return Effect.succeed(snapshot);\n};\n\n/**\n * Key a snapshot for aggregation and persistence. Snapshot sources\n * must be correlated by instance id before reaching this map; missing\n * identities are defects, not runtime routing fallbacks.\n */\nconst snapshotInstanceKey = (provider: ServerProvider): ProviderInstanceId => {\n  return provider.instanceId;\n};\n\n// Project a live `ProviderInstance` into the aggregator's consumption\n// shape. Each call re-captures the instance's `snapshot` closures, so\n// after `ProviderInstanceRegistry` rebuilds an instance (e.g. because\n// its settings changed), a fresh source rides the new PubSub instead\n// of a closed one.\nconst buildSnapshotSource = (instance: ProviderInstance): ProviderSnapshotSource => ({\n  instanceId: instance.instanceId,\n  driverKind: instance.driverKind,\n  getSnapshot: instance.snapshot.getSnapshot,\n  refresh: instance.snapshot.refresh,\n  streamChanges: instance.snapshot.streamChanges,\n  subscribeChanges: instance.snapshot.subscribeChanges,\n});\n\nexport const ProviderRegistryLive = Layer.effect(\n  ProviderRegistry,\n  Effect.gen(function* () {\n    const instanceRegistry = yield* ProviderInstanceRegistry;\n    const config = yield* ServerConfig;\n    const fileSystem = yield* FileSystem.FileSystem;\n    const path = yield* Path.Path;\n\n    // Aggregator PubSub — consumers (WS gateway, etc.) subscribe here for\n    // coalesced updates across every instance.\n    const changesPubSub = yield* Effect.acquireRelease(\n      PubSub.unbounded<ReadonlyArray<ServerProvider>>(),\n      PubSub.shutdown,\n    );\n\n    // Boot-only: hydrate `providersRef` from the on-disk per-instance\n    // cache so the UI has something to render during the first refresh.\n    // Instances added post-boot skip this path; their first entry in\n    // `providersRef` comes from the reactive `syncLiveSources` pass\n    // below.\n    const bootInstances = yield* instanceRegistry.listInstances;\n    const bootSources = bootInstances.map(buildSnapshotSource);\n    const fallbackProviders = yield* loadProviders(bootSources);\n    const fallbackByInstance = new Map<ProviderInstanceId, ServerProvider>();\n    for (let index = 0; index < fallbackProviders.length; index++) {\n      const provider = fallbackProviders[index];\n      const source = bootSources[index];\n      if (provider === undefined || source === undefined) {\n        continue;\n      }\n      fallbackByInstance.set(source.instanceId, provider);\n    }\n\n    const cachedProviders = yield* Effect.forEach(\n      bootSources,\n      (source) =>\n        Effect.gen(function* () {\n          // One cache file per configured instance. For the default\n          // instance of a built-in kind the path equals `<kind>.json` —\n          // identical to the legacy filename. We still require the cache\n          // payload to carry matching instance id + driver kind; old\n          // identity-less payloads are discarded and the awaited refresh\n          // below repopulates the cache.\n          const filePath = yield* resolveProviderStatusCachePath({\n            cacheDir: config.providerStatusCacheDir,\n            instanceId: source.instanceId,\n          }).pipe(Effect.provideService(Path.Path, path));\n          const fallbackProvider = fallbackByInstance.get(source.instanceId);\n          if (fallbackProvider === undefined) {\n            return undefined;\n          }\n          return yield* readProviderStatusCache(filePath).pipe(\n            Effect.provideService(FileSystem.FileSystem, fileSystem),\n            Effect.flatMap((cachedProvider) => {\n              if (cachedProvider === undefined) {\n                return Effect.void.pipe(Effect.as(undefined as ServerProvider | undefined));\n              }\n              const correlation = {\n                cachedProvider,\n                fallbackProvider,\n              } as const;\n              if (!isCachedProviderCorrelated(correlation)) {\n                return Effect.logWarning(\"provider status cache identity mismatch, ignoring\", {\n                  path: filePath,\n                  instanceId: source.instanceId,\n                  cachedInstanceId: cachedProvider.instanceId ?? null,\n                  driver: source.driverKind,\n                  cachedDriver: cachedProvider.driver ?? null,\n                }).pipe(Effect.as(undefined as ServerProvider | undefined));\n              }\n              return Effect.succeed(hydrateCachedProvider(correlation));\n            }),\n          );\n        }),\n      { concurrency: \"unbounded\" },\n    ).pipe(\n      Effect.map((providers) =>\n        orderProviderSnapshots(\n          providers.filter((provider): provider is ServerProvider => provider !== undefined),\n        ),\n      ),\n    );\n    const providersRef = yield* Ref.make<ReadonlyArray<ServerProvider>>(cachedProviders);\n    const maintenanceActionStatesRef = yield* Ref.make<\n      ReadonlyMap<ProviderInstanceId, { readonly update?: ServerProviderUpdateState | undefined }>\n    >(new Map());\n\n    // Live-source registry — the dynamic counterpart to the boot-time\n    // `bootSources`. Keyed by `instanceId`; the stored `ProviderInstance`\n    // reference is used for identity equality so \"no-op\" reconciles\n    // (settings unchanged) skip re-subscribing + re-probing.\n    const liveSubsRef = yield* Ref.make<ReadonlyMap<ProviderInstanceId, ProviderInstance>>(\n      new Map(),\n    );\n    // Serialize `syncLiveSources` so a rapid burst of reconciles doesn't\n    // interleave two passes clobbering each other's fiber bookkeeping.\n    const syncSemaphore = yield* Semaphore.make(1);\n\n    const getLiveSources: Effect.Effect<ReadonlyArray<ProviderSnapshotSource>> = Ref.get(\n      liveSubsRef,\n    ).pipe(Effect.map((map) => Array.from(map.values(), buildSnapshotSource)));\n\n    const persistProvider = (provider: ServerProvider) =>\n      Effect.gen(function* () {\n        // Persist every instance — the file name is the instance id, so\n        // multi-instance setups (e.g. `codex_personal`, `codex_work`) each\n        // get their own cache. We resolve the path fresh so snapshots\n        // produced by newly-added instances post-boot still land on disk\n        // without the aggregator holding a stale `cachePathByInstance`\n        // entry.\n        const key = snapshotInstanceKey(provider);\n        const filePath = yield* resolveProviderStatusCachePath({\n          cacheDir: config.providerStatusCacheDir,\n          instanceId: key,\n        }).pipe(Effect.provideService(Path.Path, path));\n        yield* writeProviderStatusCache({ filePath, provider }).pipe(\n          Effect.provideService(FileSystem.FileSystem, fileSystem),\n          Effect.provideService(Path.Path, path),\n          Effect.tapError(Effect.logError),\n          Effect.ignore,\n        );\n      });\n\n    const applyProviderUpdateState = Effect.fn(\"applyProviderUpdateState\")(function* (\n      provider: ServerProvider,\n    ) {\n      const maintenanceActionStates = yield* Ref.get(maintenanceActionStatesRef);\n      const updateState = maintenanceActionStates.get(provider.instanceId)?.update;\n      if (!updateState) {\n        const { updateState: _updateState, ...providerWithoutUpdateState } = provider;\n        return providerWithoutUpdateState;\n      }\n      return {\n        ...provider,\n        updateState,\n      };\n    });\n\n    const upsertProviders = Effect.fn(\"upsertProviders\")(function* (\n      nextProviders: ReadonlyArray<ServerProvider>,\n      options?: {\n        readonly publish?: boolean;\n        readonly persist?: boolean;\n        readonly replace?: boolean;\n      },\n    ) {\n      const nextProvidersWithUpdateState = yield* Effect.forEach(\n        nextProviders,\n        applyProviderUpdateState,\n        {\n          concurrency: \"unbounded\",\n        },\n      );\n      const [previousProviders, providers, providersToPersist] = yield* Ref.modify(\n        providersRef,\n        (previousProviders) => {\n          const mergedProviders = new Map(\n            previousProviders.map((provider) => [snapshotInstanceKey(provider), provider] as const),\n          );\n          const updatedKeys = new Set<ProviderInstanceId>();\n\n          for (const provider of nextProvidersWithUpdateState) {\n            const key = snapshotInstanceKey(provider);\n            updatedKeys.add(key);\n            mergedProviders.set(\n              key,\n              options?.replace === true\n                ? provider\n                : mergeProviderSnapshot(mergedProviders.get(key), provider),\n            );\n          }\n\n          const providers = orderProviderSnapshots([...mergedProviders.values()]);\n          const providersToPersist = providers.filter((provider) =>\n            updatedKeys.has(snapshotInstanceKey(provider)),\n          );\n          return [[previousProviders, providers, providersToPersist] as const, providers];\n        },\n      );\n\n      if (haveProvidersChanged(previousProviders, providers)) {\n        if (options?.persist !== false) {\n          yield* Effect.forEach(providersToPersist, persistProvider, {\n            concurrency: \"unbounded\",\n            discard: true,\n          });\n        }\n        if (options?.publish !== false) {\n          yield* PubSub.publish(changesPubSub, providers);\n        }\n      }\n\n      return providers;\n    });\n\n    const syncProvider = Effect.fn(\"syncProvider\")(function* (\n      provider: ServerProvider,\n      options?: {\n        readonly publish?: boolean;\n      },\n    ) {\n      return yield* upsertProviders([provider], options);\n    });\n\n    const setProviderMaintenanceActionState = Effect.fn(\"setProviderMaintenanceActionState\")(\n      function* (input: {\n        readonly instanceId: ProviderInstanceId;\n        readonly action: \"update\";\n        readonly state: ServerProviderUpdateState | null;\n      }) {\n        yield* Ref.update(maintenanceActionStatesRef, (previous) => {\n          const previousActions = previous.get(input.instanceId);\n          const nextActions = { ...previousActions };\n          if (input.state === null || input.state.status === \"idle\") {\n            delete nextActions[input.action];\n          } else {\n            nextActions[input.action] = input.state;\n          }\n\n          const next = new Map(previous);\n          if (Object.keys(nextActions).length === 0) {\n            next.delete(input.instanceId);\n          } else {\n            next.set(input.instanceId, nextActions);\n          }\n          return next;\n        });\n\n        const existingProviders = yield* Ref.get(providersRef);\n        const matchingProvider = existingProviders.find(\n          (candidate) => candidate.instanceId === input.instanceId,\n        );\n        if (!matchingProvider) {\n          return existingProviders;\n        }\n\n        const nextProvider = yield* applyProviderUpdateState(matchingProvider);\n        return yield* upsertProviders([nextProvider], {\n          persist: false,\n        });\n      },\n    );\n\n    const refreshOneSource = Effect.fn(\"refreshOneSource\")(function* (\n      providerSource: ProviderSnapshotSource,\n    ) {\n      return yield* providerSource.refresh.pipe(\n        Effect.flatMap((nextProvider) =>\n          correlateSnapshotWithSource(providerSource, nextProvider).pipe(\n            Effect.flatMap(syncProvider),\n          ),\n        ),\n      );\n    });\n\n    const refreshAll = Effect.fn(\"refreshAll\")(function* () {\n      const sources = yield* getLiveSources;\n      return yield* Effect.forEach(sources, (source) => refreshOneSource(source), {\n        concurrency: \"unbounded\",\n        discard: true,\n      }).pipe(Effect.andThen(Ref.get(providersRef)));\n    });\n\n    const refresh = Effect.fn(\"refresh\")(function* (provider?: ProviderDriverKind) {\n      if (provider === undefined) {\n        return yield* refreshAll();\n      }\n      // Kind-scoped refreshes target the default instance for that driver.\n      const defaultInstanceId = defaultInstanceIdForDriver(provider);\n      const sources = yield* getLiveSources;\n      const providerSource = sources.find(\n        (candidate) => candidate.instanceId === defaultInstanceId,\n      );\n      if (!providerSource) {\n        return yield* Ref.get(providersRef);\n      }\n      return yield* refreshOneSource(providerSource);\n    });\n\n    const refreshInstance = Effect.fn(\"refreshInstance\")(function* (\n      instanceId: ProviderInstanceId,\n    ) {\n      const sources = yield* getLiveSources;\n      const providerSource = sources.find((candidate) => candidate.instanceId === instanceId);\n      if (!providerSource) {\n        return yield* Ref.get(providersRef);\n      }\n      return yield* refreshOneSource(providerSource);\n    });\n\n    const getProviderMaintenanceCapabilitiesForInstance = Effect.fn(\n      \"getProviderMaintenanceCapabilitiesForInstance\",\n    )(function* (instanceId: ProviderInstanceId, provider: ProviderDriverKind) {\n      const instance = Array.from((yield* Ref.get(liveSubsRef)).values()).find(\n        (candidate) => candidate.instanceId === instanceId,\n      );\n      return (\n        instance?.snapshot.maintenanceCapabilities ??\n        makeManualProviderMaintenanceCapabilities(provider)\n      );\n    });\n\n    /**\n     * Diff the aggregator's live-source set against the current\n     * `ProviderInstanceRegistry` and:\n     *   - subscribe to each newly-added or rebuilt instance's\n     *     `streamChanges` (so periodic + enrichment refreshes land in\n     *     `providersRef`);\n     *   - read each newly-added/rebuilt instance's current snapshot after\n     *     subscribing, closing the race with its independently-running\n     *     background startup probe;\n     *   - prune `providersRef` of instances that no longer exist.\n     *\n     * Provider refreshes are owned by each managed provider and never run\n     * on this layer's construction path. Consumers see cached or pending\n     * snapshots immediately, then receive live probe results through the\n     * already-attached change stream.\n     *\n     * Per-instance subscription fibers are not tracked explicitly. When\n     * a rebuilt instance's old child scope closes, its PubSub shuts\n     * down and our `Stream.runForEach` fiber exits naturally.\n     */\n    const syncLiveSources = syncSemaphore.withPermits(1)(\n      Effect.gen(function* () {\n        const instances = yield* instanceRegistry.listInstances;\n        const unavailableProviders = yield* instanceRegistry.listUnavailable;\n        const nextByInstance = new Map<ProviderInstanceId, ProviderInstance>(\n          instances.map((instance) => [instance.instanceId, instance] as const),\n        );\n        const knownInstanceIds = new Set<ProviderInstanceId>(nextByInstance.keys());\n        for (const provider of unavailableProviders) {\n          knownInstanceIds.add(snapshotInstanceKey(provider));\n        }\n        const previousSubs = yield* Ref.get(liveSubsRef);\n\n        // Carry over subscriptions for instances whose identity is\n        // unchanged (reconcile treated them as no-op). Instances that\n        // disappeared, or were rebuilt with a different reference,\n        // fall through to the \"newly-added\" branch below.\n        const carriedOver = new Map<ProviderInstanceId, ProviderInstance>();\n        for (const [instanceId, previousInstance] of previousSubs) {\n          const nextInstance = nextByInstance.get(instanceId);\n          if (nextInstance !== undefined && nextInstance === previousInstance) {\n            carriedOver.set(instanceId, previousInstance);\n          }\n        }\n\n        // Collect new/rebuilt instances in `nextByInstance` insertion\n        // order (which preserves settings-author order).\n        const newlyAdded: Array<readonly [ProviderInstanceId, ProviderInstance]> = [];\n        for (const [instanceId, instance] of nextByInstance) {\n          if (carriedOver.has(instanceId)) {\n            continue;\n          }\n          newlyAdded.push([instanceId, instance] as const);\n        }\n\n        const newlyAddedSources = newlyAdded.map(\n          ([instanceId, instance]) => [instanceId, buildSnapshotSource(instance)] as const,\n        );\n\n        // Acquire each subscription before reading the current snapshot.\n        // Managed providers update their snapshot ref before publishing,\n        // so the read observes everything before subscription and the\n        // pre-acquired subscription observes everything after it.\n        for (const [, source] of newlyAddedSources) {\n          const changes = yield* source.subscribeChanges;\n          yield* Stream.runForEach(Stream.fromSubscription(changes), (provider) =>\n            correlateSnapshotWithSource(source, provider).pipe(Effect.flatMap(syncProvider)),\n          ).pipe(Effect.forkScoped);\n        }\n\n        // Snapshot current state without starting a probe. Managed providers\n        // launch their startup refresh independently, so this does not put\n        // external work on the registry or HTTP server construction path.\n        yield* Effect.forEach(\n          newlyAddedSources,\n          ([, source]) =>\n            Effect.gen(function* () {\n              const provider = yield* source.getSnapshot;\n              yield* correlateSnapshotWithSource(source, provider).pipe(\n                Effect.flatMap(syncProvider),\n              );\n            }).pipe(Effect.ignoreCause({ log: true })),\n          { concurrency: \"unbounded\", discard: true },\n        );\n        yield* upsertProviders(unavailableProviders, {\n          persist: false,\n          replace: true,\n        });\n\n        const nextSubs = new Map(carriedOver);\n        for (const [instanceId, instance] of newlyAdded) {\n          nextSubs.set(instanceId, instance);\n        }\n        yield* Ref.set(liveSubsRef, nextSubs);\n\n        // Drop aggregator state for instances that have disappeared —\n        // otherwise the UI would keep rendering ghosts.\n        const [previousProviders, providers] = yield* Ref.modify(\n          providersRef,\n          (previousProviders) => {\n            const providers = orderProviderSnapshots(\n              previousProviders.filter((provider) =>\n                knownInstanceIds.has(snapshotInstanceKey(provider)),\n              ),\n            );\n            return [[previousProviders, providers] as const, providers];\n          },\n        );\n        if (haveProvidersChanged(previousProviders, providers)) {\n          yield* PubSub.publish(changesPubSub, providers);\n        }\n        yield* Ref.update(maintenanceActionStatesRef, (previous) => {\n          const next = new Map(previous);\n          for (const instanceId of previous.keys()) {\n            if (!knownInstanceIds.has(instanceId)) {\n              next.delete(instanceId);\n            }\n          }\n          return next;\n        });\n      }),\n    );\n    const syncLiveSourcesAndContinue = syncLiveSources.pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.interrupt;\n        }\n        return Effect.logError(\n          \"provider registry instance sync failed; keeping subscription alive\",\n          {\n            cause: Cause.pretty(cause),\n          },\n        );\n      }),\n    );\n\n    // Seed `providersRef` with the boot-time fallback snapshots so\n    // consumers calling `getProviders` immediately after layer build see\n    // a populated list — even before the first `syncLiveSources` refresh\n    // resolves. Cached snapshots (already in `providersRef`) merge with\n    // these via `upsertProviders` so on-disk state wins where present\n    // and pending fallbacks fill the gaps.\n    yield* upsertProviders(fallbackProviders, { publish: false });\n    // Subscribe to registry mutations BEFORE running the initial sync.\n    // `subscribeChanges` acquires the `PubSub.Subscription` synchronously\n    // in this fibre; the subscription is registered with the PubSub the\n    // instant this `yield*` returns, so any subsequent publish is\n    // buffered in the subscription regardless of when the consumer\n    // fibre below actually starts running.\n    //\n    // (Contrast with the pre-fix code that did\n    // `Stream.runForEach(instanceRegistry.streamChanges, …).pipe(Effect.forkScoped)`.\n    // `instanceRegistry.streamChanges` is `Stream.fromPubSub(changes)`,\n    // which defers `PubSub.subscribe` to stream start. `forkScoped` only\n    // schedules the consumer fibre — so a reconcile that published\n    // between \"fibre scheduled\" and \"fibre starts running + subscribes\"\n    // was dropped, which made any settings change that replaced an\n    // instance never propagate to the aggregator's `providersRef`.)\n    const instanceChanges = yield* instanceRegistry.subscribeChanges;\n    // Initial sync attaches subscriptions and snapshots current state for\n    // every instance present at boot. Provider probes are already running in\n    // their managed background fibers and never block this layer.\n    yield* syncLiveSources;\n    // React to registry mutations — instance added / removed / rebuilt.\n    // `Stream.fromSubscription` builds a stream over the pre-acquired\n    // subscription rather than subscribing on stream start, which is\n    // what closes the race.\n    yield* Stream.runForEach(\n      Stream.fromSubscription(instanceChanges),\n      () => syncLiveSourcesAndContinue,\n    ).pipe(Effect.forkScoped);\n\n    const recoverRefreshFailure = Effect.fn(\"recoverRefreshFailure\")(function* (\n      cause: Cause.Cause<unknown>,\n    ) {\n      if (Cause.hasInterruptsOnly(cause)) {\n        return yield* Effect.interrupt;\n      }\n      yield* Effect.logError(\"provider registry refresh failed; preserving cached providers\", {\n        cause: Cause.pretty(cause),\n      });\n      return yield* Ref.get(providersRef);\n    });\n\n    return {\n      getProviders: Ref.get(providersRef),\n      refresh: (provider?: ProviderDriverKind) =>\n        refresh(provider).pipe(Effect.catchCause(recoverRefreshFailure)),\n      refreshInstance: (instanceId: ProviderInstanceId) =>\n        refreshInstance(instanceId).pipe(Effect.catchCause(recoverRefreshFailure)),\n      getProviderMaintenanceCapabilitiesForInstance,\n      setProviderMaintenanceActionState,\n      get streamChanges() {\n        return Stream.fromPubSub(changesPubSub);\n      },\n    } satisfies ProviderRegistryShape;\n  }),\n);\n","import * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\n\nimport {\n  ProjectFaviconResolver,\n  type ProjectFaviconResolverShape,\n} from \"../Services/ProjectFaviconResolver.ts\";\nimport { isSafeImageFileName } from \"../../imageMime.ts\";\n\n// Well-known favicon paths checked in order.\nconst FAVICON_CANDIDATES = [\n  \"favicon.svg\",\n  \"favicon.ico\",\n  \"favicon.png\",\n  \"public/favicon.svg\",\n  \"public/favicon.ico\",\n  \"public/favicon.png\",\n  \"app/favicon.ico\",\n  \"app/favicon.png\",\n  \"app/icon.svg\",\n  \"app/icon.png\",\n  \"app/icon.ico\",\n  \"src/favicon.ico\",\n  \"src/favicon.svg\",\n  \"src/app/favicon.ico\",\n  \"src/app/icon.svg\",\n  \"src/app/icon.png\",\n  \"assets/icon.svg\",\n  \"assets/icon.png\",\n  \"assets/logo.svg\",\n  \"assets/logo.png\",\n  \".idea/icon.svg\",\n] as const;\n\n// Files that may contain a <link rel=\"icon\"> or icon metadata declaration.\nconst ICON_SOURCE_FILES = [\n  \"index.html\",\n  \"public/index.html\",\n  \"app/routes/__root.tsx\",\n  \"src/routes/__root.tsx\",\n  \"app/root.tsx\",\n  \"src/root.tsx\",\n  \"src/index.html\",\n] as const;\n\n// Matches <link ...> tags or object-like icon metadata where rel/href can appear in any order.\nconst LINK_ICON_HTML_RE =\n  /<link\\b(?=[^>]*\\brel=[\"'](?:icon|shortcut icon)[\"'])(?=[^>]*\\bhref=[\"']([^\"'?]+))[^>]*>/i;\nconst LINK_ICON_OBJ_RE =\n  /(?=[^}]*\\brel\\s*:\\s*[\"'](?:icon|shortcut icon)[\"'])(?=[^}]*\\bhref\\s*:\\s*[\"']([^\"'?]+))[^}]*/i;\n\nfunction extractIconHref(source: string): string | null {\n  const htmlMatch = source.match(LINK_ICON_HTML_RE);\n  if (htmlMatch?.[1]) return htmlMatch[1];\n  const objMatch = source.match(LINK_ICON_OBJ_RE);\n  if (objMatch?.[1]) return objMatch[1];\n  return null;\n}\n\nexport const makeProjectFaviconResolver = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n\n  const resolveIconHref = (projectCwd: string, href: string): string[] => {\n    const clean = href.replace(/^\\//, \"\");\n    return [path.join(projectCwd, \"public\", clean), path.join(projectCwd, clean)];\n  };\n\n  const isPathWithinProject = (projectCwd: string, candidatePath: string): boolean => {\n    const relative = path.relative(path.resolve(projectCwd), path.resolve(candidatePath));\n    return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n  };\n\n  const findExistingFile = Effect.fn(\"ProjectFaviconResolver.findExistingFile\")(function* (\n    projectCwd: string,\n    candidates: ReadonlyArray<string>,\n  ): Effect.fn.Return<string | null> {\n    for (const candidate of candidates) {\n      if (!isPathWithinProject(projectCwd, candidate) || !isSafeImageFileName(candidate)) {\n        continue;\n      }\n      const stats = yield* fileSystem\n        .stat(candidate)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (stats?.type === \"File\") {\n        return candidate;\n      }\n    }\n    return null;\n  });\n\n  const resolvePath: ProjectFaviconResolverShape[\"resolvePath\"] = Effect.fn(\n    \"ProjectFaviconResolver.resolvePath\",\n  )(function* (cwd: string): Effect.fn.Return<string | null> {\n    for (const candidate of FAVICON_CANDIDATES) {\n      const resolved = path.join(cwd, candidate);\n      const existing = yield* findExistingFile(cwd, [resolved]);\n      if (existing) {\n        return existing;\n      }\n    }\n\n    for (const sourceFile of ICON_SOURCE_FILES) {\n      const sourcePath = path.join(cwd, sourceFile);\n      const source = yield* fileSystem\n        .readFileString(sourcePath)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n      if (!source) {\n        continue;\n      }\n      const href = extractIconHref(source);\n      if (!href) {\n        continue;\n      }\n      const existing = yield* findExistingFile(cwd, resolveIconHref(cwd, href));\n      if (existing) {\n        return existing;\n      }\n    }\n\n    return null;\n  });\n\n  return {\n    resolvePath,\n  } satisfies ProjectFaviconResolverShape;\n});\n\nexport const ProjectFaviconResolverLive = Layer.effect(\n  ProjectFaviconResolver,\n  makeProjectFaviconResolver,\n);\n","export function isWindowsDrivePath(value: string): boolean {\n  return /^[a-zA-Z]:([/\\\\]|$)/.test(value);\n}\n\nexport function isUncPath(value: string): boolean {\n  return value.startsWith(\"\\\\\\\\\");\n}\n\nexport function isWindowsAbsolutePath(value: string): boolean {\n  return isUncPath(value) || isWindowsDrivePath(value);\n}\n\nexport function isExplicitRelativePath(value: string): boolean {\n  return (\n    value === \".\" ||\n    value === \"..\" ||\n    value.startsWith(\"./\") ||\n    value.startsWith(\"../\") ||\n    value.startsWith(\".\\\\\") ||\n    value.startsWith(\"..\\\\\")\n  );\n}\n","export type RankedSearchResult<T> = {\n  item: T;\n  score: number;\n  tieBreaker: string;\n};\n\nexport function normalizeSearchQuery(\n  input: string,\n  options?: {\n    trimLeadingPattern?: RegExp;\n  },\n): string {\n  const trimmed = input.trim();\n  if (!trimmed) {\n    return \"\";\n  }\n  return options?.trimLeadingPattern\n    ? trimmed.replace(options.trimLeadingPattern, \"\").toLowerCase()\n    : trimmed.toLowerCase();\n}\n\nexport function scoreSubsequenceMatch(value: string, query: string): number | null {\n  if (!query) return 0;\n\n  let queryIndex = 0;\n  let firstMatchIndex = -1;\n  let previousMatchIndex = -1;\n  let gapPenalty = 0;\n\n  for (let valueIndex = 0; valueIndex < value.length; valueIndex += 1) {\n    if (value[valueIndex] !== query[queryIndex]) {\n      continue;\n    }\n\n    if (firstMatchIndex === -1) {\n      firstMatchIndex = valueIndex;\n    }\n    if (previousMatchIndex !== -1) {\n      gapPenalty += valueIndex - previousMatchIndex - 1;\n    }\n\n    previousMatchIndex = valueIndex;\n    queryIndex += 1;\n    if (queryIndex === query.length) {\n      const spanPenalty = valueIndex - firstMatchIndex + 1 - query.length;\n      const lengthPenalty = Math.min(64, value.length - query.length);\n      return firstMatchIndex * 2 + gapPenalty * 3 + spanPenalty + lengthPenalty;\n    }\n  }\n\n  return null;\n}\n\nfunction lengthPenalty(value: string, query: string): number {\n  return Math.min(64, Math.max(0, value.length - query.length));\n}\n\nfunction findBoundaryMatchIndex(\n  value: string,\n  query: string,\n  boundaryMarkers: readonly string[],\n): number | null {\n  let bestIndex: number | null = null;\n\n  for (const marker of boundaryMarkers) {\n    const index = value.indexOf(`${marker}${query}`);\n    if (index === -1) {\n      continue;\n    }\n\n    const matchIndex = index + marker.length;\n    if (bestIndex === null || matchIndex < bestIndex) {\n      bestIndex = matchIndex;\n    }\n  }\n\n  return bestIndex;\n}\n\n/**\n * Scores how well `value` matches `query` using tiered match strategies.\n *\n * **Expects pre-normalized inputs**: both `value` and `query` must already be\n * trimmed and lowercased (e.g. via {@link normalizeSearchQuery}).\n */\nexport function scoreQueryMatch(input: {\n  value: string;\n  query: string;\n  exactBase: number;\n  prefixBase?: number;\n  boundaryBase?: number;\n  includesBase?: number;\n  fuzzyBase?: number;\n  boundaryMarkers?: readonly string[];\n}): number | null {\n  const { value, query } = input;\n\n  if (!value || !query) {\n    return null;\n  }\n\n  if (value === query) {\n    return input.exactBase;\n  }\n\n  if (input.prefixBase !== undefined && value.startsWith(query)) {\n    return input.prefixBase + lengthPenalty(value, query);\n  }\n\n  if (input.boundaryBase !== undefined) {\n    const boundaryIndex = findBoundaryMatchIndex(\n      value,\n      query,\n      input.boundaryMarkers ?? [\" \", \"-\", \"_\", \"/\"],\n    );\n    if (boundaryIndex !== null) {\n      return input.boundaryBase + boundaryIndex * 2 + lengthPenalty(value, query);\n    }\n  }\n\n  if (input.includesBase !== undefined) {\n    const includesIndex = value.indexOf(query);\n    if (includesIndex !== -1) {\n      return input.includesBase + includesIndex * 2 + lengthPenalty(value, query);\n    }\n  }\n\n  if (input.fuzzyBase !== undefined) {\n    const fuzzyScore = scoreSubsequenceMatch(value, query);\n    if (fuzzyScore !== null) {\n      return input.fuzzyBase + fuzzyScore;\n    }\n  }\n\n  return null;\n}\n\nexport function compareRankedSearchResults<T>(\n  left: RankedSearchResult<T>,\n  right: RankedSearchResult<T>,\n): number {\n  const scoreDelta = left.score - right.score;\n  if (scoreDelta !== 0) return scoreDelta;\n  return left.tieBreaker.localeCompare(right.tieBreaker);\n}\n\nfunction findInsertionIndex<T>(\n  rankedEntries: RankedSearchResult<T>[],\n  candidate: RankedSearchResult<T>,\n): number {\n  let low = 0;\n  let high = rankedEntries.length;\n\n  while (low < high) {\n    const middle = low + Math.floor((high - low) / 2);\n    const current = rankedEntries[middle];\n    if (!current) {\n      break;\n    }\n\n    if (compareRankedSearchResults(candidate, current) < 0) {\n      high = middle;\n    } else {\n      low = middle + 1;\n    }\n  }\n\n  return low;\n}\n\nexport function insertRankedSearchResult<T>(\n  rankedEntries: RankedSearchResult<T>[],\n  candidate: RankedSearchResult<T>,\n  limit: number,\n): void {\n  if (limit <= 0) {\n    return;\n  }\n\n  const insertionIndex = findInsertionIndex(rankedEntries, candidate);\n  if (rankedEntries.length < limit) {\n    rankedEntries.splice(insertionIndex, 0, candidate);\n    return;\n  }\n\n  if (insertionIndex >= limit) {\n    return;\n  }\n\n  rankedEntries.splice(insertionIndex, 0, candidate);\n  rankedEntries.pop();\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport * as OS from \"node:os\";\nimport fsPromises from \"node:fs/promises\";\nimport type { Dirent } from \"node:fs\";\n\nimport * as Cache from \"effect/Cache\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\n\nimport {\n  type FilesystemBrowseInput,\n  type ProjectEntry,\n  type ProjectListDirectoryEntriesInput,\n  type ProjectListDirectoryEntriesResult,\n} from \"@salchi/contracts\";\nimport { isExplicitRelativePath, isWindowsAbsolutePath } from \"@salchi/shared/path\";\nimport {\n  insertRankedSearchResult,\n  normalizeSearchQuery,\n  scoreQueryMatch,\n  type RankedSearchResult,\n} from \"@salchi/shared/searchRanking\";\n\nimport { VcsDriverRegistry } from \"../../vcs/VcsDriverRegistry.ts\";\nimport {\n  WorkspaceEntries,\n  WorkspaceEntriesBrowseError,\n  WorkspaceEntriesError,\n  type WorkspaceEntriesShape,\n} from \"../Services/WorkspaceEntries.ts\";\nimport { WorkspacePaths } from \"../Services/WorkspacePaths.ts\";\n\nconst WORKSPACE_CACHE_TTL_MS = 15_000;\nconst WORKSPACE_CACHE_MAX_KEYS = 4;\nconst WORKSPACE_INDEX_MAX_ENTRIES = 25_000;\nconst WORKSPACE_SCAN_READDIR_CONCURRENCY = 32;\nconst IGNORED_DIRECTORY_NAMES = new Set([\n  \".git\",\n  \".convex\",\n  \"node_modules\",\n  \".next\",\n  \".turbo\",\n  \"dist\",\n  \"build\",\n  \"out\",\n  \".cache\",\n]);\n\ninterface WorkspaceIndex {\n  scannedAt: number;\n  entries: SearchableWorkspaceEntry[];\n  truncated: boolean;\n}\n\ninterface SearchableWorkspaceEntry extends ProjectEntry {\n  normalizedPath: string;\n  normalizedName: string;\n}\n\ntype RankedWorkspaceEntry = RankedSearchResult<SearchableWorkspaceEntry>;\n\nfunction toPosixPath(input: string): string {\n  return input.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction expandHomePath(input: string, path: Path.Path): string {\n  if (input === \"~\") {\n    return OS.homedir();\n  }\n  if (input.startsWith(\"~/\") || input.startsWith(\"~\\\\\")) {\n    return path.join(OS.homedir(), input.slice(2));\n  }\n  return input;\n}\n\nfunction parentPathOf(input: string): string | undefined {\n  const separatorIndex = input.lastIndexOf(\"/\");\n  if (separatorIndex === -1) {\n    return undefined;\n  }\n  return input.slice(0, separatorIndex);\n}\n\nfunction basenameOf(input: string): string {\n  const separatorIndex = input.lastIndexOf(\"/\");\n  if (separatorIndex === -1) {\n    return input;\n  }\n  return input.slice(separatorIndex + 1);\n}\n\nfunction compareWorkspaceEntries(left: ProjectEntry, right: ProjectEntry): number {\n  if (left.kind !== right.kind) {\n    return left.kind === \"directory\" ? -1 : 1;\n  }\n  return (\n    basenameOf(left.path).localeCompare(basenameOf(right.path)) ||\n    left.path.localeCompare(right.path)\n  );\n}\n\nfunction toSearchableWorkspaceEntry(entry: ProjectEntry): SearchableWorkspaceEntry {\n  const normalizedPath = entry.path.toLowerCase();\n  return {\n    ...entry,\n    normalizedPath,\n    normalizedName: basenameOf(normalizedPath),\n  };\n}\n\nfunction scoreEntry(entry: SearchableWorkspaceEntry, query: string): number | null {\n  if (!query) {\n    return entry.kind === \"directory\" ? 0 : 1;\n  }\n\n  const { normalizedPath, normalizedName } = entry;\n\n  const scores = [\n    scoreQueryMatch({\n      value: normalizedName,\n      query,\n      exactBase: 0,\n      prefixBase: 2,\n      includesBase: 5,\n      fuzzyBase: 100,\n    }),\n    scoreQueryMatch({\n      value: normalizedPath,\n      query,\n      exactBase: 1,\n      prefixBase: 3,\n      boundaryBase: 4,\n      includesBase: 6,\n      fuzzyBase: 200,\n      boundaryMarkers: [\"/\"],\n    }),\n  ].filter((score): score is number => score !== null);\n\n  if (scores.length === 0) {\n    return null;\n  }\n\n  return Math.min(...scores);\n}\n\nfunction isPathInIgnoredDirectory(relativePath: string): boolean {\n  const firstSegment = relativePath.split(\"/\")[0];\n  if (!firstSegment) return false;\n  return IGNORED_DIRECTORY_NAMES.has(firstSegment);\n}\n\nfunction makeProjectEntry(\n  relativePath: string,\n  kind: ProjectEntry[\"kind\"],\n  ignored: boolean,\n): ProjectEntry {\n  const parentPath = parentPathOf(relativePath);\n  return {\n    path: relativePath,\n    kind,\n    ...(parentPath ? { parentPath } : {}),\n    ...(ignored ? { ignored: true } : {}),\n  };\n}\n\nfunction projectEntryForOutput(entry: ProjectEntry): ProjectEntry {\n  if (entry.parentPath) {\n    return entry.ignored\n      ? { path: entry.path, kind: entry.kind, parentPath: entry.parentPath, ignored: true }\n      : { path: entry.path, kind: entry.kind, parentPath: entry.parentPath };\n  }\n\n  return entry.ignored\n    ? { path: entry.path, kind: entry.kind, ignored: true }\n    : { path: entry.path, kind: entry.kind };\n}\n\nfunction directoryAncestorsOf(relativePath: string): string[] {\n  const segments = relativePath.split(\"/\").filter((segment) => segment.length > 0);\n  if (segments.length <= 1) return [];\n\n  const directories: string[] = [];\n  for (let index = 1; index < segments.length; index += 1) {\n    directories.push(segments.slice(0, index).join(\"/\"));\n  }\n  return directories;\n}\n\nconst normalizeWorkspaceDirectoryPath = (\n  cwd: string,\n  directoryPath: ProjectListDirectoryEntriesInput[\"directoryPath\"],\n): Effect.Effect<string | undefined, WorkspaceEntriesError> =>\n  Effect.gen(function* () {\n    if (!directoryPath) {\n      return undefined;\n    }\n\n    if (directoryPath.startsWith(\"/\") || isWindowsAbsolutePath(directoryPath)) {\n      return yield* new WorkspaceEntriesError({\n        cwd,\n        operation: \"workspaceEntries.normalizeDirectoryPath\",\n        detail: \"Workspace directory path must be relative to the project root.\",\n      });\n    }\n\n    const normalized = toPosixPath(directoryPath)\n      .replace(/^\\.\\/+/, \"\")\n      .replace(/\\/+$/, \"\");\n    if (!normalized || normalized === \".\") {\n      return undefined;\n    }\n\n    const segments = normalized.split(\"/\").filter((segment) => segment.length > 0);\n    if (segments.some((segment) => segment === \".\" || segment === \"..\")) {\n      return yield* new WorkspaceEntriesError({\n        cwd,\n        operation: \"workspaceEntries.normalizeDirectoryPath\",\n        detail: \"Workspace directory path must not contain traversal segments.\",\n      });\n    }\n\n    return segments.join(\"/\");\n  });\n\nconst resolveBrowseTarget = (\n  input: FilesystemBrowseInput,\n  pathService: Path.Path,\n): Effect.Effect<string, WorkspaceEntriesBrowseError> =>\n  Effect.gen(function* () {\n    if (process.platform !== \"win32\" && isWindowsAbsolutePath(input.partialPath)) {\n      return yield* new WorkspaceEntriesBrowseError({\n        cwd: input.cwd,\n        partialPath: input.partialPath,\n        operation: \"workspaceEntries.resolveBrowseTarget\",\n        detail: \"Windows-style paths are only supported on Windows.\",\n      });\n    }\n\n    if (!isExplicitRelativePath(input.partialPath)) {\n      return pathService.resolve(expandHomePath(input.partialPath, pathService));\n    }\n\n    if (!input.cwd) {\n      return yield* new WorkspaceEntriesBrowseError({\n        cwd: input.cwd,\n        partialPath: input.partialPath,\n        operation: \"workspaceEntries.resolveBrowseTarget\",\n        detail: \"Relative filesystem browse paths require a current project.\",\n      });\n    }\n\n    return pathService.resolve(expandHomePath(input.cwd, pathService), input.partialPath);\n  });\n\nexport const makeWorkspaceEntries = Effect.gen(function* () {\n  const path = yield* Path.Path;\n  const vcsRegistry = yield* VcsDriverRegistry;\n  const workspacePaths = yield* WorkspacePaths;\n\n  const isInsideVcsWorkTree = (cwd: string): Effect.Effect<boolean> =>\n    vcsRegistry.detect({ cwd }).pipe(\n      Effect.map((handle) => handle !== null),\n      Effect.catch(() => Effect.succeed(false)),\n    );\n\n  const filterVcsIgnoredPaths = (\n    cwd: string,\n    relativePaths: string[],\n  ): Effect.Effect<string[], never> =>\n    vcsRegistry.detect({ cwd }).pipe(\n      Effect.flatMap((handle) =>\n        handle\n          ? handle.driver.filterIgnoredPaths(cwd, relativePaths).pipe(\n              Effect.map((paths) => [...paths]),\n              Effect.catch(() => Effect.succeed(relativePaths)),\n            )\n          : Effect.succeed(relativePaths),\n      ),\n      Effect.catch(() => Effect.succeed(relativePaths)),\n    );\n\n  const buildWorkspaceIndexFromVcs = Effect.fn(\"WorkspaceEntries.buildWorkspaceIndexFromVcs\")(\n    function* (cwd: string) {\n      const vcs = yield* vcsRegistry.detect({ cwd }).pipe(Effect.catch(() => Effect.succeed(null)));\n      if (!vcs) {\n        return null;\n      }\n\n      const listedFiles = yield* vcs.driver\n        .listWorkspaceFiles(cwd)\n        .pipe(Effect.catch(() => Effect.succeed(null)));\n\n      if (!listedFiles) {\n        return null;\n      }\n\n      const listedPaths: Array<string> = [];\n      for (const rawEntry of listedFiles.paths) {\n        const entry = toPosixPath(rawEntry);\n        if (entry.length > 0 && !isPathInIgnoredDirectory(entry)) {\n          listedPaths.push(entry);\n        }\n      }\n      const filePaths = yield* vcs.driver.filterIgnoredPaths(cwd, listedPaths).pipe(\n        Effect.map((paths) => [...paths]),\n        Effect.catch(() => filterVcsIgnoredPaths(cwd, listedPaths)),\n      );\n\n      const ignoredFilePaths = [...new Set(listedFiles.ignoredPaths ?? [])]\n        .map(toPosixPath)\n        .filter((entry) => entry.length > 0 && !isPathInIgnoredDirectory(entry));\n      const entryByPath = new Map<string, ProjectEntry>();\n      const addEntry = (entry: ProjectEntry) => {\n        const existing = entryByPath.get(entry.path);\n        if (existing && !existing.ignored) {\n          return;\n        }\n        if (existing && existing.ignored && entry.ignored) {\n          return;\n        }\n        entryByPath.set(entry.path, entry);\n      };\n      const addFilePath = (filePath: string, ignored: boolean) => {\n        for (const directoryPath of directoryAncestorsOf(filePath)) {\n          if (!isPathInIgnoredDirectory(directoryPath)) {\n            addEntry(makeProjectEntry(directoryPath, \"directory\", ignored));\n          }\n        }\n        addEntry(makeProjectEntry(filePath, \"file\", ignored));\n      };\n\n      for (const filePath of [...new Set(filePaths)].toSorted((left, right) =>\n        left.localeCompare(right),\n      )) {\n        addFilePath(filePath, false);\n      }\n      for (const filePath of ignoredFilePaths.toSorted((left, right) =>\n        left.localeCompare(right),\n      )) {\n        addFilePath(filePath, true);\n      }\n\n      const now = yield* DateTime.now;\n      const entries = [...entryByPath.values()].map(toSearchableWorkspaceEntry);\n      return {\n        scannedAt: now.epochMilliseconds,\n        entries: entries.slice(0, WORKSPACE_INDEX_MAX_ENTRIES),\n        truncated: listedFiles.truncated || entries.length > WORKSPACE_INDEX_MAX_ENTRIES,\n      };\n    },\n  );\n\n  const readDirectoryEntries = Effect.fn(\"WorkspaceEntries.readDirectoryEntries\")(function* (\n    cwd: string,\n    relativeDir: string,\n  ): Effect.fn.Return<\n    { readonly relativeDir: string; readonly dirents: Dirent[] | null },\n    WorkspaceEntriesError\n  > {\n    return yield* Effect.tryPromise({\n      try: async () => {\n        const absoluteDir = relativeDir ? path.join(cwd, relativeDir) : cwd;\n        const dirents = await fsPromises.readdir(absoluteDir, { withFileTypes: true });\n        return { relativeDir, dirents };\n      },\n      catch: (cause) =>\n        new WorkspaceEntriesError({\n          cwd,\n          operation: \"workspaceEntries.readDirectoryEntries\",\n          detail: cause instanceof Error ? cause.message : String(cause),\n          cause,\n        }),\n    }).pipe(\n      Effect.catchIf(\n        () => relativeDir.length > 0,\n        () => Effect.succeed({ relativeDir, dirents: null }),\n      ),\n    );\n  });\n\n  const buildWorkspaceIndexFromFilesystem = Effect.fn(\n    \"WorkspaceEntries.buildWorkspaceIndexFromFilesystem\",\n  )(function* (cwd: string): Effect.fn.Return<WorkspaceIndex, WorkspaceEntriesError> {\n    const shouldFilterWithGitIgnore = yield* isInsideVcsWorkTree(cwd);\n\n    let pendingDirectories: string[] = [\"\"];\n    const entries: SearchableWorkspaceEntry[] = [];\n    let truncated = false;\n\n    while (pendingDirectories.length > 0 && !truncated) {\n      const currentDirectories = pendingDirectories;\n      pendingDirectories = [];\n\n      const directoryEntries = yield* Effect.forEach(\n        currentDirectories,\n        (relativeDir) => readDirectoryEntries(cwd, relativeDir),\n        { concurrency: WORKSPACE_SCAN_READDIR_CONCURRENCY },\n      );\n\n      const candidateEntriesByDirectory = directoryEntries.map((directoryEntry) => {\n        const { relativeDir, dirents } = directoryEntry;\n        if (!dirents) return [] as Array<{ dirent: Dirent; relativePath: string }>;\n\n        dirents.sort((left, right) => left.name.localeCompare(right.name));\n        const candidates: Array<{ dirent: Dirent; relativePath: string }> = [];\n        for (const dirent of dirents) {\n          if (!dirent.name || dirent.name === \".\" || dirent.name === \"..\") {\n            continue;\n          }\n          if (dirent.isDirectory() && IGNORED_DIRECTORY_NAMES.has(dirent.name)) {\n            continue;\n          }\n          if (!dirent.isDirectory() && !dirent.isFile()) {\n            continue;\n          }\n\n          const relativePath = toPosixPath(\n            relativeDir ? path.join(relativeDir, dirent.name) : dirent.name,\n          );\n          if (isPathInIgnoredDirectory(relativePath)) {\n            continue;\n          }\n          candidates.push({ dirent, relativePath });\n        }\n        return candidates;\n      });\n\n      const candidatePaths = candidateEntriesByDirectory.flatMap((candidateEntries) =>\n        candidateEntries.map((entry) => entry.relativePath),\n      );\n      const allowedPathSet = shouldFilterWithGitIgnore\n        ? new Set(yield* filterVcsIgnoredPaths(cwd, candidatePaths))\n        : null;\n\n      for (const candidateEntries of candidateEntriesByDirectory) {\n        for (const candidate of candidateEntries) {\n          if (allowedPathSet && !allowedPathSet.has(candidate.relativePath)) {\n            continue;\n          }\n\n          const entry = toSearchableWorkspaceEntry({\n            path: candidate.relativePath,\n            kind: candidate.dirent.isDirectory() ? \"directory\" : \"file\",\n            parentPath: parentPathOf(candidate.relativePath),\n          });\n          entries.push(entry);\n\n          if (candidate.dirent.isDirectory()) {\n            pendingDirectories.push(candidate.relativePath);\n          }\n\n          if (entries.length >= WORKSPACE_INDEX_MAX_ENTRIES) {\n            truncated = true;\n            break;\n          }\n        }\n\n        if (truncated) {\n          break;\n        }\n      }\n    }\n\n    const now = yield* DateTime.now;\n    return {\n      scannedAt: now.epochMilliseconds,\n      entries,\n      truncated,\n    };\n  });\n\n  const listDirectoryFromFilesystem = Effect.fn(\"WorkspaceEntries.listDirectoryFromFilesystem\")(\n    function* (\n      cwd: string,\n      directoryPath: string | undefined,\n      limit: number,\n    ): Effect.fn.Return<ProjectListDirectoryEntriesResult, WorkspaceEntriesError> {\n      const { dirents } = yield* readDirectoryEntries(cwd, directoryPath ?? \"\");\n      const entries: ProjectEntry[] = [];\n\n      if (dirents) {\n        for (const dirent of dirents) {\n          if (!dirent.name || dirent.name === \".\" || dirent.name === \"..\") {\n            continue;\n          }\n          if (dirent.isDirectory() && IGNORED_DIRECTORY_NAMES.has(dirent.name)) {\n            continue;\n          }\n          if (!dirent.isDirectory() && !dirent.isFile()) {\n            continue;\n          }\n\n          const relativePath = toPosixPath(\n            directoryPath ? path.join(directoryPath, dirent.name) : dirent.name,\n          );\n          if (isPathInIgnoredDirectory(relativePath)) {\n            continue;\n          }\n\n          entries.push(\n            makeProjectEntry(relativePath, dirent.isDirectory() ? \"directory\" : \"file\", false),\n          );\n        }\n      }\n\n      const sortedEntries = entries.toSorted(compareWorkspaceEntries);\n      return {\n        entries: sortedEntries.slice(0, limit).map(projectEntryForOutput),\n        truncated: sortedEntries.length > limit,\n      };\n    },\n  );\n\n  const buildWorkspaceIndex = Effect.fn(\"WorkspaceEntries.buildWorkspaceIndex\")(function* (\n    cwd: string,\n  ): Effect.fn.Return<WorkspaceIndex, WorkspaceEntriesError> {\n    const vcsIndexed = yield* buildWorkspaceIndexFromVcs(cwd);\n    if (vcsIndexed) {\n      return vcsIndexed;\n    }\n    return yield* buildWorkspaceIndexFromFilesystem(cwd);\n  });\n\n  const workspaceIndexCache = yield* Cache.makeWith<string, WorkspaceIndex, WorkspaceEntriesError>(\n    buildWorkspaceIndex,\n    {\n      capacity: WORKSPACE_CACHE_MAX_KEYS,\n      timeToLive: (exit) =>\n        Exit.isSuccess(exit) ? Duration.millis(WORKSPACE_CACHE_TTL_MS) : Duration.zero,\n    },\n  );\n\n  const normalizeWorkspaceRoot = Effect.fn(\"WorkspaceEntries.normalizeWorkspaceRoot\")(function* (\n    cwd: string,\n  ): Effect.fn.Return<string, WorkspaceEntriesError> {\n    return yield* workspacePaths.normalizeWorkspaceRoot(cwd).pipe(\n      Effect.mapError(\n        (cause) =>\n          new WorkspaceEntriesError({\n            cwd,\n            operation: \"workspaceEntries.normalizeWorkspaceRoot\",\n            detail: cause.message,\n            cause,\n          }),\n      ),\n    );\n  });\n\n  const invalidate: WorkspaceEntriesShape[\"invalidate\"] = Effect.fn(\"WorkspaceEntries.invalidate\")(\n    function* (cwd) {\n      const normalizedCwd = yield* normalizeWorkspaceRoot(cwd).pipe(\n        Effect.catch(() => Effect.succeed(cwd)),\n      );\n      yield* Cache.invalidate(workspaceIndexCache, cwd);\n      if (normalizedCwd !== cwd) {\n        yield* Cache.invalidate(workspaceIndexCache, normalizedCwd);\n      }\n    },\n  );\n\n  const browse: WorkspaceEntriesShape[\"browse\"] = Effect.fn(\"WorkspaceEntries.browse\")(\n    function* (input) {\n      const resolvedInputPath = yield* resolveBrowseTarget(input, path);\n      const endsWithSeparator = /[\\\\/]$/.test(input.partialPath) || input.partialPath === \"~\";\n      const parentPath = endsWithSeparator ? resolvedInputPath : path.dirname(resolvedInputPath);\n      const prefix = endsWithSeparator ? \"\" : path.basename(resolvedInputPath);\n\n      const dirents = yield* Effect.tryPromise({\n        try: () => fsPromises.readdir(parentPath, { withFileTypes: true }),\n        catch: (cause) =>\n          new WorkspaceEntriesBrowseError({\n            cwd: input.cwd,\n            partialPath: input.partialPath,\n            operation: \"workspaceEntries.browse.readDirectory\",\n            detail: `Unable to browse '${parentPath}': ${cause instanceof Error ? cause.message : String(cause)}`,\n            cause,\n          }),\n      });\n\n      const showHidden = endsWithSeparator || prefix.startsWith(\".\");\n      const lowerPrefix = prefix.toLowerCase();\n      const entries: Array<{ readonly name: string; readonly fullPath: string }> = [];\n      for (const dirent of dirents) {\n        if (\n          dirent.isDirectory() &&\n          dirent.name.toLowerCase().startsWith(lowerPrefix) &&\n          (showHidden || !dirent.name.startsWith(\".\"))\n        ) {\n          entries.push({\n            name: dirent.name,\n            fullPath: path.join(parentPath, dirent.name),\n          });\n        }\n      }\n\n      return {\n        parentPath,\n        entries: entries.toSorted((left, right) => left.name.localeCompare(right.name)),\n      };\n    },\n  );\n\n  const listDirectory: WorkspaceEntriesShape[\"listDirectory\"] = Effect.fn(\n    \"WorkspaceEntries.listDirectory\",\n  )(function* (input) {\n    const normalizedCwd = yield* normalizeWorkspaceRoot(input.cwd);\n    const directoryPath = yield* normalizeWorkspaceDirectoryPath(\n      normalizedCwd,\n      input.directoryPath,\n    );\n    const limit = Math.max(1, Math.floor(input.limit));\n    return yield* listDirectoryFromFilesystem(normalizedCwd, directoryPath, limit);\n  });\n\n  const search: WorkspaceEntriesShape[\"search\"] = Effect.fn(\"WorkspaceEntries.search\")(\n    function* (input) {\n      const normalizedCwd = yield* normalizeWorkspaceRoot(input.cwd);\n      return yield* Cache.get(workspaceIndexCache, normalizedCwd).pipe(\n        Effect.map((index) => {\n          const normalizedQuery = normalizeSearchQuery(input.query, {\n            trimLeadingPattern: /^[@./]+/,\n          });\n          const limit = Math.max(0, Math.floor(input.limit));\n          const rankedEntries: RankedWorkspaceEntry[] = [];\n          let matchedEntryCount = 0;\n\n          for (const entry of index.entries) {\n            const score = scoreEntry(entry, normalizedQuery);\n            if (score === null) {\n              continue;\n            }\n\n            matchedEntryCount += 1;\n            insertRankedSearchResult(\n              rankedEntries,\n              { item: entry, score, tieBreaker: entry.path },\n              limit,\n            );\n          }\n\n          return {\n            entries: rankedEntries.map((candidate) => candidate.item),\n            truncated: index.truncated || matchedEntryCount > limit,\n          };\n        }),\n      );\n    },\n  );\n\n  return {\n    browse,\n    invalidate,\n    listDirectory,\n    search,\n  } satisfies WorkspaceEntriesShape;\n});\n\nexport const WorkspaceEntriesLive = Layer.effect(WorkspaceEntries, makeWorkspaceEntries);\n","// @effect-diagnostics nodeBuiltinImport:off\nimport fsPromises from \"node:fs/promises\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\n\nimport {\n  WorkspaceFileSystem,\n  WorkspaceFileSystemError,\n  type WorkspaceFileSystemShape,\n} from \"../Services/WorkspaceFileSystem.ts\";\nimport { WorkspaceEntries } from \"../Services/WorkspaceEntries.ts\";\nimport { WorkspacePaths } from \"../Services/WorkspacePaths.ts\";\n\nconst PROJECT_READ_FILE_MAX_BYTES = 512 * 1024;\n\nfunction hasBinaryNullByte(bytes: Uint8Array): boolean {\n  return bytes.includes(0);\n}\n\nfunction formatSymlinkTarget(value: string): string {\n  return `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"').replaceAll(\"\\n\", \"\\\\n\").replaceAll(\"\\r\", \"\\\\r\").replaceAll(\"\\t\", \"\\\\t\")}\"`;\n}\n\nfunction isPathOutsideRoot(path: Path.Path, workspaceRoot: string, absolutePath: string): boolean {\n  const relativeToRoot = path.relative(path.resolve(workspaceRoot), absolutePath);\n  return (\n    relativeToRoot.length === 0 ||\n    relativeToRoot === \".\" ||\n    relativeToRoot.startsWith(\"../\") ||\n    relativeToRoot === \"..\" ||\n    path.isAbsolute(relativeToRoot)\n  );\n}\n\nasync function nearestExistingAncestor(absolutePath: string, path: Path.Path): Promise<string> {\n  let currentPath = absolutePath;\n  for (;;) {\n    try {\n      await fsPromises.lstat(currentPath);\n      return currentPath;\n    } catch (cause) {\n      if ((cause as NodeJS.ErrnoException | undefined)?.code !== \"ENOENT\") {\n        throw cause;\n      }\n    }\n\n    const parentPath = path.dirname(currentPath);\n    if (parentPath === currentPath) {\n      throw new Error(`No existing ancestor for workspace path: ${absolutePath}`);\n    }\n    currentPath = parentPath;\n  }\n}\n\nexport const makeWorkspaceFileSystem = Effect.gen(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const workspacePaths = yield* WorkspacePaths;\n  const workspaceEntries = yield* WorkspaceEntries;\n\n  const readFile: WorkspaceFileSystemShape[\"readFile\"] = Effect.fn(\"WorkspaceFileSystem.readFile\")(\n    function* (input) {\n      const target = yield* workspacePaths.resolveRelativePathWithinRoot({\n        workspaceRoot: input.cwd,\n        relativePath: input.relativePath,\n      });\n\n      const initialStat = yield* Effect.tryPromise({\n        try: () => fsPromises.lstat(target.absolutePath),\n        catch: (cause) =>\n          new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.lstat\",\n            detail: `Workspace file does not exist: ${input.relativePath}`,\n            cause,\n          }),\n      });\n\n      let readAbsolutePath = target.absolutePath;\n      let stat = initialStat;\n\n      if (initialStat.isSymbolicLink()) {\n        const linkTarget = yield* Effect.tryPromise({\n          try: () => fsPromises.readlink(target.absolutePath),\n          catch: (cause) =>\n            new WorkspaceFileSystemError({\n              cwd: input.cwd,\n              relativePath: input.relativePath,\n              operation: \"workspaceFileSystem.readlink\",\n              detail: `Unable to read workspace symlink: ${input.relativePath}`,\n              cause,\n            }),\n        });\n        const resolvedLinkTarget = path.resolve(path.dirname(target.absolutePath), linkTarget);\n        if (isPathOutsideRoot(path, input.cwd, resolvedLinkTarget)) {\n          return yield* new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.stat\",\n            detail: `Workspace symlink target must stay within the project root: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n          });\n        }\n\n        stat = yield* Effect.tryPromise({\n          try: () => fsPromises.stat(resolvedLinkTarget),\n          catch: (cause) =>\n            new WorkspaceFileSystemError({\n              cwd: input.cwd,\n              relativePath: input.relativePath,\n              operation: \"workspaceFileSystem.stat\",\n              detail: `Workspace file is a broken symlink: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n              cause,\n            }),\n        });\n\n        if (!stat.isFile()) {\n          return yield* new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.readFile\",\n            detail: `Workspace symlink target is not a file: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n          });\n        }\n\n        readAbsolutePath = resolvedLinkTarget;\n      }\n\n      if (!stat.isFile()) {\n        return yield* new WorkspaceFileSystemError({\n          cwd: input.cwd,\n          relativePath: input.relativePath,\n          operation: \"workspaceFileSystem.readFile\",\n          detail: \"Workspace path is not a file.\",\n        });\n      }\n\n      const sizeBytes = Number(stat.size);\n      const readBytes = Math.min(sizeBytes, PROJECT_READ_FILE_MAX_BYTES);\n      const bytes = yield* Effect.tryPromise({\n        try: async () => {\n          const handle = await fsPromises.open(readAbsolutePath, \"r\");\n          try {\n            const buffer = Buffer.alloc(readBytes);\n            const { bytesRead } = await handle.read(buffer, 0, readBytes, 0);\n            return buffer.subarray(0, bytesRead);\n          } finally {\n            await handle.close();\n          }\n        },\n        catch: (cause) =>\n          new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.readFile\",\n            detail: cause instanceof Error ? cause.message : \"Failed to read workspace file.\",\n            cause,\n          }),\n      });\n\n      if (hasBinaryNullByte(bytes)) {\n        return yield* new WorkspaceFileSystemError({\n          cwd: input.cwd,\n          relativePath: input.relativePath,\n          operation: \"workspaceFileSystem.readFile\",\n          detail: \"Workspace file appears to be binary.\",\n        });\n      }\n\n      return {\n        relativePath: target.relativePath,\n        contents: new TextDecoder(\"utf-8\").decode(bytes),\n        truncated: sizeBytes > PROJECT_READ_FILE_MAX_BYTES,\n        sizeBytes,\n      };\n    },\n  );\n\n  const writeFile: WorkspaceFileSystemShape[\"writeFile\"] = Effect.fn(\n    \"WorkspaceFileSystem.writeFile\",\n  )(function* (input) {\n    const target = yield* workspacePaths.resolveRelativePathWithinRoot({\n      workspaceRoot: input.cwd,\n      relativePath: input.relativePath,\n    });\n    const targetDirectory = path.dirname(target.absolutePath);\n\n    yield* Effect.tryPromise({\n      try: async () => {\n        const realWorkspaceRoot = await fsPromises.realpath(input.cwd);\n        const existingAncestor = await nearestExistingAncestor(targetDirectory, path);\n        const realExistingAncestor = await fsPromises.realpath(existingAncestor);\n        if (\n          realExistingAncestor !== realWorkspaceRoot &&\n          isPathOutsideRoot(path, realWorkspaceRoot, realExistingAncestor)\n        ) {\n          throw new Error(\"Workspace file parent path resolves outside the project root.\");\n        }\n      },\n      catch: (cause) =>\n        new WorkspaceFileSystemError({\n          cwd: input.cwd,\n          relativePath: input.relativePath,\n          operation: \"workspaceFileSystem.validateWriteAncestor\",\n          detail: cause instanceof Error ? cause.message : String(cause),\n          cause,\n        }),\n    });\n\n    yield* fileSystem.makeDirectory(targetDirectory, { recursive: true }).pipe(\n      Effect.mapError(\n        (cause) =>\n          new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.makeDirectory\",\n            detail: cause.message,\n            cause,\n          }),\n      ),\n    );\n    yield* Effect.tryPromise({\n      try: async () => {\n        const realWorkspaceRoot = await fsPromises.realpath(input.cwd);\n        const realTargetDirectory = await fsPromises.realpath(targetDirectory);\n        if (\n          realTargetDirectory !== realWorkspaceRoot &&\n          isPathOutsideRoot(path, realWorkspaceRoot, realTargetDirectory)\n        ) {\n          throw new Error(\"Workspace file parent path resolves outside the project root.\");\n        }\n\n        const targetStat = await fsPromises.lstat(target.absolutePath).catch((cause) => {\n          if ((cause as NodeJS.ErrnoException | undefined)?.code === \"ENOENT\") {\n            return null;\n          }\n          throw cause;\n        });\n        if (!targetStat) {\n          return;\n        }\n\n        if (targetStat.isSymbolicLink()) {\n          const linkTarget = await fsPromises.readlink(target.absolutePath);\n          const resolvedLinkTarget = path.resolve(path.dirname(target.absolutePath), linkTarget);\n          if (isPathOutsideRoot(path, realWorkspaceRoot, resolvedLinkTarget)) {\n            throw new Error(\n              `Workspace symlink target must stay within the project root: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n            );\n          }\n          const realResolvedLinkTarget = await fsPromises\n            .realpath(resolvedLinkTarget)\n            .catch((cause) => {\n              throw new Error(\n                `Workspace file is a broken symlink: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n                { cause },\n              );\n            });\n          if (\n            realResolvedLinkTarget !== realWorkspaceRoot &&\n            isPathOutsideRoot(path, realWorkspaceRoot, realResolvedLinkTarget)\n          ) {\n            throw new Error(\n              `Workspace symlink target must stay within the project root: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n            );\n          }\n          const resolvedStat = await fsPromises.stat(resolvedLinkTarget).catch((cause) => {\n            throw new Error(\n              `Workspace file is a broken symlink: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n              { cause },\n            );\n          });\n          if (!resolvedStat.isFile()) {\n            throw new Error(\n              `Workspace symlink target is not a file: ${input.relativePath} -> ${formatSymlinkTarget(linkTarget)}`,\n            );\n          }\n          return;\n        }\n\n        if (!targetStat.isFile()) {\n          throw new Error(\"Workspace path is not a file.\");\n        }\n      },\n      catch: (cause) =>\n        new WorkspaceFileSystemError({\n          cwd: input.cwd,\n          relativePath: input.relativePath,\n          operation: \"workspaceFileSystem.validateWriteTarget\",\n          detail: cause instanceof Error ? cause.message : String(cause),\n          cause,\n        }),\n    });\n    yield* fileSystem.writeFileString(target.absolutePath, input.contents).pipe(\n      Effect.mapError(\n        (cause) =>\n          new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.writeFile\",\n            detail: cause.message,\n            cause,\n          }),\n      ),\n    );\n    yield* workspaceEntries.invalidate(input.cwd);\n    return { relativePath: target.relativePath };\n  });\n\n  const deleteEntry: WorkspaceFileSystemShape[\"deleteEntry\"] = Effect.fn(\n    \"WorkspaceFileSystem.deleteEntry\",\n  )(function* (input) {\n    const target = yield* workspacePaths.resolveRelativePathWithinRoot({\n      workspaceRoot: input.cwd,\n      relativePath: input.relativePath,\n    });\n\n    const stat = yield* Effect.tryPromise({\n      try: () => fsPromises.lstat(target.absolutePath),\n      catch: (cause) =>\n        new WorkspaceFileSystemError({\n          cwd: input.cwd,\n          relativePath: input.relativePath,\n          operation: \"workspaceFileSystem.lstat\",\n          detail: `Workspace file does not exist: ${input.relativePath}`,\n          cause,\n        }),\n    });\n\n    if (stat.isDirectory()) {\n      yield* Effect.tryPromise({\n        try: () => fsPromises.rmdir(target.absolutePath),\n        catch: (cause) =>\n          new WorkspaceFileSystemError({\n            cwd: input.cwd,\n            relativePath: input.relativePath,\n            operation: \"workspaceFileSystem.rmdir\",\n            detail:\n              cause instanceof Error ? cause.message : \"Failed to delete workspace directory.\",\n            cause,\n          }),\n      });\n      yield* workspaceEntries.invalidate(input.cwd);\n      return { relativePath: target.relativePath };\n    }\n\n    if (!stat.isFile() && !stat.isSymbolicLink()) {\n      return yield* new WorkspaceFileSystemError({\n        cwd: input.cwd,\n        relativePath: input.relativePath,\n        operation: \"workspaceFileSystem.deleteEntry\",\n        detail: \"Workspace path is not a file or directory.\",\n      });\n    }\n\n    yield* Effect.tryPromise({\n      try: () => fsPromises.unlink(target.absolutePath),\n      catch: (cause) =>\n        new WorkspaceFileSystemError({\n          cwd: input.cwd,\n          relativePath: input.relativePath,\n          operation: \"workspaceFileSystem.unlink\",\n          detail: cause instanceof Error ? cause.message : \"Failed to delete workspace file.\",\n          cause,\n        }),\n    });\n\n    yield* workspaceEntries.invalidate(input.cwd);\n    return { relativePath: target.relativePath };\n  });\n\n  return { readFile, writeFile, deleteEntry } satisfies WorkspaceFileSystemShape;\n});\n\nexport const WorkspaceFileSystemLive = Layer.effect(WorkspaceFileSystem, makeWorkspaceFileSystem);\n","import type { ProjectScript } from \"@salchi/contracts\";\n\ninterface ProjectScriptRuntimeEnvInput {\n  project: {\n    cwd: string;\n  };\n  worktreePath?: string | null;\n  extraEnv?: Record<string, string>;\n}\n\nexport function projectScriptCwd(input: {\n  project: {\n    cwd: string;\n  };\n  worktreePath?: string | null;\n}): string {\n  return input.worktreePath ?? input.project.cwd;\n}\n\nexport function projectScriptRuntimeEnv(\n  input: ProjectScriptRuntimeEnvInput,\n): Record<string, string> {\n  const env: Record<string, string> = {\n    SALCHI_PROJECT_ROOT: input.project.cwd,\n  };\n  if (input.worktreePath) {\n    env.SALCHI_WORKTREE_PATH = input.worktreePath;\n  }\n  if (input.extraEnv) {\n    return { ...env, ...input.extraEnv };\n  }\n  return env;\n}\n\nexport function setupProjectScript(scripts: readonly ProjectScript[]): ProjectScript | null {\n  return scripts.find((script) => script.runOnWorktreeCreate) ?? null;\n}\n","import { ProjectId } from \"@salchi/contracts\";\nimport { projectScriptRuntimeEnv, setupProjectScript } from \"@salchi/shared/projectScripts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\n\nimport { ProjectionSnapshotQuery } from \"../../orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport { TerminalManager } from \"../../terminal/Services/Manager.ts\";\nimport {\n  type ProjectSetupScriptRunnerShape,\n  ProjectSetupScriptRunner,\n  ProjectSetupScriptRunnerError,\n} from \"../Services/ProjectSetupScriptRunner.ts\";\n\nconst makeProjectSetupScriptRunner = Effect.gen(function* () {\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const terminalManager = yield* TerminalManager;\n\n  const runForThread: ProjectSetupScriptRunnerShape[\"runForThread\"] = (input) =>\n    Effect.gen(function* () {\n      const project =\n        (input.projectId\n          ? yield* projectionSnapshotQuery\n              .getProjectShellById(ProjectId.make(input.projectId))\n              .pipe(Effect.map(Option.getOrUndefined))\n          : null) ??\n        (input.projectCwd\n          ? yield* projectionSnapshotQuery\n              .getActiveProjectByWorkspaceRoot(input.projectCwd)\n              .pipe(Effect.map(Option.getOrUndefined))\n          : null) ??\n        null;\n\n      if (!project) {\n        return yield* new ProjectSetupScriptRunnerError({\n          message: \"Project was not found for setup script execution.\",\n        });\n      }\n\n      const script = setupProjectScript(project.scripts);\n      if (!script) {\n        return {\n          status: \"no-script\",\n        } as const;\n      }\n\n      const terminalId = input.preferredTerminalId ?? `setup-${script.id}`;\n      const cwd = input.worktreePath;\n      const env = projectScriptRuntimeEnv({\n        project: { cwd: project.workspaceRoot },\n        worktreePath: input.worktreePath,\n      });\n\n      yield* terminalManager.open({\n        threadId: input.threadId,\n        terminalId,\n        cwd,\n        worktreePath: input.worktreePath,\n        env,\n      });\n      yield* terminalManager.write({\n        threadId: input.threadId,\n        terminalId,\n        data: `${script.command}\\r`,\n      });\n\n      return {\n        status: \"started\",\n        scriptId: script.id,\n        scriptName: script.name,\n        terminalId,\n        cwd,\n      } as const;\n    }).pipe(\n      Effect.mapError((cause) => {\n        if (\n          typeof cause === \"object\" &&\n          cause !== null &&\n          \"_tag\" in cause &&\n          cause._tag === \"ProjectSetupScriptRunnerError\"\n        ) {\n          return cause as ProjectSetupScriptRunnerError;\n        }\n        const message =\n          typeof cause === \"object\" &&\n          cause !== null &&\n          \"message\" in cause &&\n          typeof cause.message === \"string\"\n            ? cause.message\n            : String(cause);\n        return new ProjectSetupScriptRunnerError({ message });\n      }),\n    );\n\n  return {\n    runForThread,\n  } satisfies ProjectSetupScriptRunnerShape;\n});\n\nexport const ProjectSetupScriptRunnerLive = Layer.effect(\n  ProjectSetupScriptRunner,\n  makeProjectSetupScriptRunner,\n);\n","import * as Effect from \"effect/Effect\";\nimport * as Logger from \"effect/Logger\";\nimport * as References from \"effect/References\";\nimport * as Layer from \"effect/Layer\";\n\nimport { ServerConfig } from \"./config.ts\";\n\nexport const ServerLoggerLive = Effect.gen(function* () {\n  const config = yield* ServerConfig;\n  const minimumLogLevelLayer = Layer.succeed(References.MinimumLogLevel, config.logLevel);\n  const loggerLayer = Logger.layer([Logger.consolePretty(), Logger.tracerLogger], {\n    mergeWithExisting: false,\n  });\n\n  return Layer.mergeAll(loggerLayer, minimumLogLevelLayer);\n}).pipe(Layer.unwrap);\n","import { makeLocalFileTracer, makeTraceSink } from \"@salchi/shared/observability\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as References from \"effect/References\";\nimport * as Tracer from \"effect/Tracer\";\nimport {\n  OtlpExporter,\n  OtlpMetrics,\n  OtlpSerialization,\n  OtlpTracer,\n} from \"effect/unstable/observability\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { ServerLoggerLive } from \"../../serverLogger.ts\";\nimport { BrowserTraceCollector } from \"../Services/BrowserTraceCollector.ts\";\n\nconst otlpSerializationLayer = OtlpSerialization.layerJson;\n\nexport const ObservabilityLive = Layer.unwrap(\n  Effect.gen(function* () {\n    const config = yield* ServerConfig;\n\n    const traceReferencesLayer = Layer.mergeAll(\n      Layer.succeed(Tracer.MinimumTraceLevel, config.traceMinLevel),\n      Layer.succeed(References.TracerTimingEnabled, config.traceTimingEnabled),\n    );\n\n    const tracerLayer = Layer.unwrap(\n      Effect.gen(function* () {\n        const sink = yield* makeTraceSink({\n          filePath: config.serverTracePath,\n          maxBytes: config.traceMaxBytes,\n          maxFiles: config.traceMaxFiles,\n          batchWindowMs: config.traceBatchWindowMs,\n        });\n        const delegate =\n          config.otlpTracesUrl === undefined\n            ? undefined\n            : yield* OtlpTracer.make({\n                url: config.otlpTracesUrl,\n                exportInterval: `${config.otlpExportIntervalMs} millis`,\n                resource: {\n                  serviceName: config.otlpServiceName,\n                  attributes: {\n                    \"service.runtime\": \"salchi-server\",\n                    \"service.mode\": config.mode,\n                  },\n                },\n              });\n\n        const tracer = yield* makeLocalFileTracer({\n          filePath: config.serverTracePath,\n          maxBytes: config.traceMaxBytes,\n          maxFiles: config.traceMaxFiles,\n          batchWindowMs: config.traceBatchWindowMs,\n          sink,\n          ...(delegate ? { delegate } : {}),\n        });\n\n        return Layer.mergeAll(\n          Layer.succeed(Tracer.Tracer, tracer),\n          Layer.succeed(BrowserTraceCollector, {\n            record: (records) =>\n              Effect.sync(() => {\n                for (const record of records) {\n                  sink.push(record);\n                }\n              }),\n          }),\n        );\n      }),\n    ).pipe(Layer.provideMerge(otlpSerializationLayer));\n\n    const metricsLayer =\n      config.otlpMetricsUrl === undefined\n        ? Layer.empty\n        : OtlpMetrics.layer({\n            url: config.otlpMetricsUrl,\n            exportInterval: `${config.otlpExportIntervalMs} millis`,\n            resource: {\n              serviceName: config.otlpServiceName,\n              attributes: {\n                \"service.runtime\": \"salchi-server\",\n                \"service.mode\": config.mode,\n              },\n            },\n          }).pipe(Layer.provideMerge(otlpSerializationLayer));\n\n    return Layer.mergeAll(ServerLoggerLive, traceReferencesLayer, tracerLayer, metricsLayer);\n  }),\n).pipe(Layer.provideMerge(OtlpExporter.layerFlusher));\n","import * as OS from \"node:os\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\n\nimport { ProcessRunner } from \"../../processRunner.ts\";\n\ninterface ResolveServerEnvironmentLabelInput {\n  readonly cwdBaseName: string;\n  readonly platform?: NodeJS.Platform;\n  readonly hostname?: string | null;\n}\n\nfunction normalizeLabel(value: string | null | undefined): string | null {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : null;\n}\n\nfunction parseMachineInfoValue(raw: string, key: string): string | null {\n  for (const line of raw.split(/\\r?\\n/g)) {\n    const trimmed = line.trim();\n    if (trimmed.length === 0 || trimmed.startsWith(\"#\") || !trimmed.startsWith(`${key}=`)) {\n      continue;\n    }\n    const value = trimmed.slice(key.length + 1).trim();\n    if (\n      (value.startsWith('\"') && value.endsWith('\"')) ||\n      (value.startsWith(\"'\") && value.endsWith(\"'\"))\n    ) {\n      return normalizeLabel(value.slice(1, -1));\n    }\n    return normalizeLabel(value);\n  }\n  return null;\n}\n\nconst readLinuxMachineInfo = Effect.fn(\"readLinuxMachineInfo\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const exists = yield* fileSystem\n    .exists(\"/etc/machine-info\")\n    .pipe(Effect.orElseSucceed(() => false));\n  if (!exists) {\n    return null;\n  }\n\n  return yield* fileSystem\n    .readFileString(\"/etc/machine-info\")\n    .pipe(Effect.orElseSucceed(() => null));\n});\n\nconst runFriendlyLabelCommand = Effect.fn(\"runFriendlyLabelCommand\")(function* (\n  command: string,\n  args: readonly string[],\n) {\n  const processRunner = yield* ProcessRunner;\n  const result = yield* processRunner\n    .run({\n      command,\n      args,\n      timeoutBehavior: \"timedOutResult\",\n    })\n    .pipe(Effect.option);\n\n  if (Option.isNone(result) || result.value.code !== 0) {\n    return null;\n  }\n\n  return normalizeLabel(result.value.stdout);\n});\n\nconst resolveFriendlyHostLabel = Effect.fn(\"resolveFriendlyHostLabel\")(function* (\n  platform: NodeJS.Platform,\n) {\n  if (platform === \"darwin\") {\n    return yield* runFriendlyLabelCommand(\"scutil\", [\"--get\", \"ComputerName\"]);\n  }\n\n  if (platform === \"linux\") {\n    const machineInfo = normalizeLabel(yield* readLinuxMachineInfo());\n    if (machineInfo) {\n      const prettyHostname = parseMachineInfoValue(machineInfo, \"PRETTY_HOSTNAME\");\n      if (prettyHostname) {\n        return prettyHostname;\n      }\n    }\n\n    return yield* runFriendlyLabelCommand(\"hostnamectl\", [\"--pretty\"]);\n  }\n\n  return null;\n});\n\nexport const resolveServerEnvironmentLabel = Effect.fn(\"resolveServerEnvironmentLabel\")(function* (\n  input: ResolveServerEnvironmentLabelInput,\n) {\n  const platform = input.platform ?? process.platform;\n  const friendlyHostLabel = yield* resolveFriendlyHostLabel(platform);\n  if (friendlyHostLabel) {\n    return friendlyHostLabel;\n  }\n\n  const hostname = normalizeLabel(input.hostname ?? OS.hostname());\n  if (hostname) {\n    return hostname;\n  }\n\n  return normalizeLabel(input.cwdBaseName) ?? \"Salchi environment\";\n});\n","import { EnvironmentId, type ExecutionEnvironmentDescriptor } from \"@salchi/contracts\";\nimport * as Crypto from \"effect/Crypto\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport * as Path from \"effect/Path\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { layer as ProcessRunnerLive } from \"../../processRunner.ts\";\nimport { ServerEnvironment, type ServerEnvironmentShape } from \"../Services/ServerEnvironment.ts\";\nimport packageJson from \"../../../package.json\" with { type: \"json\" };\nimport { resolveServerEnvironmentLabel } from \"./ServerEnvironmentLabel.ts\";\n\nfunction platformOs(): ExecutionEnvironmentDescriptor[\"platform\"][\"os\"] {\n  switch (process.platform) {\n    case \"darwin\":\n      return \"darwin\";\n    case \"linux\":\n      return \"linux\";\n    case \"win32\":\n      return \"windows\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction platformArch(): ExecutionEnvironmentDescriptor[\"platform\"][\"arch\"] {\n  switch (process.arch) {\n    case \"arm64\":\n      return \"arm64\";\n    case \"x64\":\n      return \"x64\";\n    default:\n      return \"other\";\n  }\n}\n\nexport const makeServerEnvironment = Effect.fn(\"makeServerEnvironment\")(function* () {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const serverConfig = yield* ServerConfig;\n  const crypto = yield* Crypto.Crypto;\n\n  const readPersistedEnvironmentId = Effect.gen(function* () {\n    const exists = yield* fileSystem\n      .exists(serverConfig.environmentIdPath)\n      .pipe(Effect.orElseSucceed(() => false));\n    if (!exists) {\n      return null;\n    }\n\n    const raw = yield* fileSystem\n      .readFileString(serverConfig.environmentIdPath)\n      .pipe(Effect.map((value) => value.trim()));\n\n    return raw.length > 0 ? raw : null;\n  });\n\n  const persistEnvironmentId = (value: string) =>\n    fileSystem.writeFileString(serverConfig.environmentIdPath, `${value}\\n`);\n\n  const environmentIdRaw = yield* Effect.gen(function* () {\n    const persisted = yield* readPersistedEnvironmentId;\n    if (persisted) {\n      return persisted;\n    }\n\n    const generated = yield* crypto.randomUUIDv4;\n    yield* persistEnvironmentId(generated);\n    return generated;\n  });\n\n  const environmentId = EnvironmentId.make(environmentIdRaw);\n  const cwdBaseName = path.basename(serverConfig.cwd).trim();\n  const label = yield* resolveServerEnvironmentLabel({\n    cwdBaseName,\n  });\n\n  const descriptor: ExecutionEnvironmentDescriptor = {\n    environmentId,\n    label,\n    platform: {\n      os: platformOs(),\n      arch: platformArch(),\n    },\n    serverVersion: packageJson.version,\n    capabilities: {\n      repositoryIdentity: true,\n    },\n  };\n\n  return {\n    getEnvironmentId: Effect.succeed(environmentId),\n    getDescriptor: Effect.succeed(descriptor),\n  } satisfies ServerEnvironmentShape;\n});\n\nexport const ServerEnvironmentLive = Layer.effect(ServerEnvironment, makeServerEnvironment()).pipe(\n  Layer.provide(ProcessRunnerLive),\n);\n","import type { ServerAuthDescriptor } from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nexport interface ServerAuthPolicyShape {\n  readonly getDescriptor: () => Effect.Effect<ServerAuthDescriptor>;\n}\n\nexport class ServerAuthPolicy extends Context.Service<ServerAuthPolicy, ServerAuthPolicyShape>()(\n  \"salchi/auth/Services/ServerAuthPolicy\",\n) {}\n","import type { ServerAuthDescriptor } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { ServerConfig } from \"../../config.ts\";\nimport { ServerAuthPolicy, type ServerAuthPolicyShape } from \"../Services/ServerAuthPolicy.ts\";\nimport { resolveSessionCookieName } from \"../utils.ts\";\nimport { isLoopbackHost, isWildcardHost } from \"../../startupAccess.ts\";\n\nexport const makeServerAuthPolicy = Effect.gen(function* () {\n  const config = yield* ServerConfig;\n  const isRemoteReachable = isWildcardHost(config.host) || !isLoopbackHost(config.host);\n\n  const policy =\n    config.mode === \"desktop\"\n      ? isRemoteReachable\n        ? \"remote-reachable\"\n        : \"desktop-managed-local\"\n      : isRemoteReachable\n        ? \"remote-reachable\"\n        : \"loopback-browser\";\n\n  const bootstrapMethods: ServerAuthDescriptor[\"bootstrapMethods\"] =\n    policy === \"desktop-managed-local\"\n      ? [\"desktop-bootstrap\"]\n      : config.mode === \"desktop\" && policy === \"remote-reachable\"\n        ? [\"desktop-bootstrap\", \"one-time-token\"]\n        : [\"one-time-token\"];\n\n  const descriptor: ServerAuthDescriptor = {\n    policy,\n    bootstrapMethods,\n    sessionMethods: [\"browser-session-cookie\", \"bearer-access-token\", \"bearer-session-token\"],\n    sessionCookieName: resolveSessionCookieName({\n      mode: config.mode,\n      port: config.port,\n    }),\n  };\n\n  return {\n    getDescriptor: () => Effect.succeed(descriptor),\n  } satisfies ServerAuthPolicyShape;\n});\n\nexport const ServerAuthPolicyLive = Layer.effect(ServerAuthPolicy, makeServerAuthPolicy);\n","import {\n  AuthAdministrativeScopes,\n  type AuthEnvironmentScope,\n  AuthStandardClientScopes,\n} from \"@salchi/contracts\";\n\nimport type { SessionRole } from \"./Services/SessionCredentialService.ts\";\n\nexport function scopesForSessionRole(role: SessionRole): ReadonlyArray<AuthEnvironmentScope> {\n  return role === \"owner\" ? AuthAdministrativeScopes : AuthStandardClientScopes;\n}\n\nexport function hasAuthScope(\n  scopes: ReadonlySet<AuthEnvironmentScope> | ReadonlyArray<AuthEnvironmentScope>,\n  requiredScope: AuthEnvironmentScope,\n): boolean {\n  return scopes instanceof Set\n    ? scopes.has(requiredScope)\n    : Array.from(scopes).includes(requiredScope);\n}\n","import {\n  AuthAccessTokenType,\n  AuthAccessTokenResult,\n  type AuthBearerBootstrapResult,\n  AuthBrowserSessionResult,\n  type AuthClientSession,\n  type AuthBootstrapResult,\n  type AuthEnvironmentScope,\n  type AuthPairingCredentialResult,\n  type AuthSessionState,\n  AuthWebSocketTicketResult,\n  type AuthWebSocketTokenResult,\n} from \"@salchi/contracts\";\nimport { encodeOAuthScope } from \"@salchi/shared/oauthScope\";\nimport * as Clock from \"effect/Clock\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as HttpServerRequest from \"effect/unstable/http/HttpServerRequest\";\n\nimport { AuthControlPlane } from \"../Services/AuthControlPlane.ts\";\nimport { ServerAuthPolicyLive } from \"./ServerAuthPolicy.ts\";\nimport { BootstrapCredentialService } from \"../Services/BootstrapCredentialService.ts\";\nimport { BootstrapCredentialError } from \"../Services/BootstrapCredentialService.ts\";\nimport { ServerAuthPolicy } from \"../Services/ServerAuthPolicy.ts\";\nimport {\n  ServerAuth,\n  type AuthenticatedSession,\n  AuthError,\n  type ServerAuthShape,\n} from \"../Services/ServerAuth.ts\";\nimport {\n  SessionCredentialError,\n  SessionCredentialService,\n} from \"../Services/SessionCredentialService.ts\";\nimport { AuthControlPlaneLive, AuthCoreLive } from \"./AuthControlPlane.ts\";\nimport { scopesForSessionRole } from \"../scopes.ts\";\n\ntype BootstrapExchangeResult = {\n  readonly response: AuthBootstrapResult;\n  readonly sessionToken: string;\n};\n\nconst AUTHORIZATION_PREFIX = \"Bearer \";\nconst WEBSOCKET_TOKEN_QUERY_PARAM = \"wsToken\";\nconst WEBSOCKET_TICKET_QUERY_PARAM = \"ticket\";\n\nfunction selectGrantedScopes(input: {\n  readonly role: \"owner\" | \"client\";\n  readonly requestedScopes?: ReadonlyArray<AuthEnvironmentScope>;\n}): ReadonlyArray<AuthEnvironmentScope> {\n  const grantedScopes = scopesForSessionRole(input.role);\n  if (!input.requestedScopes || input.requestedScopes.length === 0) {\n    return grantedScopes;\n  }\n  const grantedSet = new Set(grantedScopes);\n  return input.requestedScopes.filter((scope) => grantedSet.has(scope));\n}\n\nexport function toBootstrapExchangeAuthError(cause: BootstrapCredentialError): AuthError {\n  if (cause.status === 500) {\n    return new AuthError({\n      message: \"Failed to validate bootstrap credential.\",\n      status: 500,\n      cause,\n    });\n  }\n\n  return new AuthError({\n    message: \"Invalid bootstrap credential.\",\n    status: 401,\n    cause,\n  });\n}\n\nfunction parseBearerToken(request: HttpServerRequest.HttpServerRequest): string | null {\n  const header = request.headers[\"authorization\"];\n  if (typeof header !== \"string\" || !header.startsWith(AUTHORIZATION_PREFIX)) {\n    return null;\n  }\n  const token = header.slice(AUTHORIZATION_PREFIX.length).trim();\n  return token.length > 0 ? token : null;\n}\n\nexport const makeServerAuth = Effect.gen(function* () {\n  const policy = yield* ServerAuthPolicy;\n  const bootstrapCredentials = yield* BootstrapCredentialService;\n  const authControlPlane = yield* AuthControlPlane;\n  const sessions = yield* SessionCredentialService;\n  const descriptor = yield* policy.getDescriptor();\n\n  const authenticateToken = (token: string): Effect.Effect<AuthenticatedSession, AuthError> =>\n    sessions.verify(token).pipe(\n      Effect.tapError((cause: SessionCredentialError) =>\n        Effect.logWarning(\"Rejected authenticated session credential.\").pipe(\n          Effect.annotateLogs({\n            reason: cause.message,\n          }),\n        ),\n      ),\n      Effect.map((session) => ({\n        sessionId: session.sessionId,\n        subject: session.subject,\n        method: session.method,\n        role: session.role,\n        scopes: new Set(scopesForSessionRole(session.role)),\n        ...(session.expiresAt ? { expiresAt: session.expiresAt } : {}),\n      })),\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Unauthorized request.\",\n            status: 401,\n            cause,\n          }),\n      ),\n    );\n\n  const authenticateRequest = (request: HttpServerRequest.HttpServerRequest) => {\n    const cookieToken = request.cookies[sessions.cookieName];\n    const bearerToken = parseBearerToken(request);\n    const credential = cookieToken ?? bearerToken;\n    if (!credential) {\n      return Effect.fail(\n        new AuthError({\n          message: \"Authentication required.\",\n          status: 401,\n        }),\n      );\n    }\n    return authenticateToken(credential);\n  };\n\n  const getSessionState: ServerAuthShape[\"getSessionState\"] = (request) =>\n    authenticateRequest(request).pipe(\n      Effect.map(\n        (session) =>\n          ({\n            authenticated: true,\n            auth: descriptor,\n            role: session.role,\n            scopes: [...session.scopes],\n            sessionMethod: session.method,\n            ...(session.expiresAt ? { expiresAt: DateTime.toUtc(session.expiresAt) } : {}),\n          }) satisfies AuthSessionState,\n      ),\n      Effect.catchTag(\"AuthError\", () =>\n        Effect.succeed({\n          authenticated: false,\n          auth: descriptor,\n        } satisfies AuthSessionState),\n      ),\n    );\n\n  const exchangeBootstrapCredential: ServerAuthShape[\"exchangeBootstrapCredential\"] = (\n    credential,\n    requestMetadata,\n  ) =>\n    bootstrapCredentials.consume(credential).pipe(\n      Effect.mapError(toBootstrapExchangeAuthError),\n      Effect.flatMap((grant) =>\n        sessions\n          .issue({\n            method: \"browser-session-cookie\",\n            subject: grant.subject,\n            role: grant.role,\n            client: {\n              ...requestMetadata,\n              ...(grant.label ? { label: grant.label } : {}),\n            },\n          })\n          .pipe(\n            Effect.mapError(\n              (cause) =>\n                new AuthError({\n                  message: \"Failed to issue authenticated session.\",\n                  cause,\n                }),\n            ),\n          ),\n      ),\n      Effect.map(\n        (session) =>\n          ({\n            response: {\n              authenticated: true,\n              role: session.role,\n              scopes: scopesForSessionRole(session.role),\n              sessionMethod: session.method,\n              expiresAt: DateTime.toUtc(session.expiresAt),\n            } satisfies AuthBootstrapResult,\n            sessionToken: session.token,\n          }) satisfies BootstrapExchangeResult,\n      ),\n    );\n\n  const exchangeBootstrapCredentialForBrowserSession: ServerAuthShape[\"exchangeBootstrapCredentialForBrowserSession\"] =\n    (credential, requestMetadata) =>\n      exchangeBootstrapCredential(credential, requestMetadata).pipe(\n        Effect.map(\n          (result) =>\n            ({\n              response: {\n                authenticated: true,\n                role: result.response.role,\n                scopes: result.response.scopes ?? scopesForSessionRole(result.response.role),\n                sessionMethod: result.response.sessionMethod,\n                expiresAt: result.response.expiresAt,\n              } satisfies AuthBrowserSessionResult,\n              sessionToken: result.sessionToken,\n            }) satisfies {\n              readonly response: AuthBrowserSessionResult;\n              readonly sessionToken: string;\n            },\n        ),\n      );\n\n  const exchangeBootstrapCredentialForBearerSession: ServerAuthShape[\"exchangeBootstrapCredentialForBearerSession\"] =\n    (credential, requestMetadata) =>\n      bootstrapCredentials.consume(credential).pipe(\n        Effect.mapError(toBootstrapExchangeAuthError),\n        Effect.flatMap((grant) =>\n          sessions\n            .issue({\n              method: \"bearer-access-token\",\n              subject: grant.subject,\n              role: grant.role,\n              client: {\n                ...requestMetadata,\n                ...(grant.label ? { label: grant.label } : {}),\n              },\n            })\n            .pipe(\n              Effect.mapError(\n                (cause) =>\n                  new AuthError({\n                    message: \"Failed to issue authenticated session.\",\n                    cause,\n                  }),\n              ),\n            ),\n        ),\n        Effect.map(\n          (session) =>\n            ({\n              authenticated: true,\n              role: session.role,\n              scopes: scopesForSessionRole(session.role),\n              sessionMethod: \"bearer-access-token\",\n              expiresAt: DateTime.toUtc(session.expiresAt),\n              sessionToken: session.token,\n            }) satisfies AuthBearerBootstrapResult,\n        ),\n      );\n\n  const exchangeBootstrapCredentialForAccessToken: ServerAuthShape[\"exchangeBootstrapCredentialForAccessToken\"] =\n    (credential, requestMetadata, requestedScopes) =>\n      exchangeBootstrapCredentialForBearerSession(credential, requestMetadata).pipe(\n        Effect.flatMap((session) =>\n          Effect.map(Clock.currentTimeMillis, (now) => {\n            const scopeInput = {\n              role: session.role,\n              ...(requestedScopes ? { requestedScopes } : {}),\n            };\n            const scopes = selectGrantedScopes(scopeInput);\n            return {\n              access_token: session.sessionToken,\n              issued_token_type: AuthAccessTokenType,\n              token_type: \"Bearer\",\n              expires_in: Math.max(\n                0,\n                Math.floor((DateTime.toDate(session.expiresAt).getTime() - now) / 1000),\n              ),\n              scope: encodeOAuthScope(scopes),\n            } satisfies AuthAccessTokenResult;\n          }),\n        ),\n      );\n\n  const issuePairingCredential: ServerAuthShape[\"issuePairingCredential\"] = (input) =>\n    authControlPlane\n      .createPairingLink({\n        role: input?.role ?? \"client\",\n        subject: input?.role === \"owner\" ? \"owner-bootstrap\" : \"one-time-token\",\n        ...(input?.label ? { label: input.label } : {}),\n      })\n      .pipe(\n        Effect.mapError(\n          (cause) =>\n            new AuthError({\n              message: \"Failed to issue pairing credential.\",\n              cause,\n            }),\n        ),\n        Effect.map(\n          (issued) =>\n            ({\n              id: issued.id,\n              credential: issued.credential,\n              ...(issued.label ? { label: issued.label } : {}),\n              expiresAt: issued.expiresAt,\n            }) satisfies AuthPairingCredentialResult,\n        ),\n      );\n\n  const listPairingLinks: ServerAuthShape[\"listPairingLinks\"] = () =>\n    authControlPlane\n      .listPairingLinks({\n        role: \"client\",\n        excludeSubjects: [\"owner-bootstrap\"],\n      })\n      .pipe(\n        Effect.mapError(\n          (cause) =>\n            new AuthError({\n              message: \"Failed to load pairing links.\",\n              cause,\n            }),\n        ),\n        Effect.map((pairingLinks) =>\n          pairingLinks.map((pairingLink) => ({\n            ...pairingLink,\n            scopes: pairingLink.scopes ?? scopesForSessionRole(pairingLink.role),\n          })),\n        ),\n      );\n\n  const revokePairingLink: ServerAuthShape[\"revokePairingLink\"] = (id) =>\n    authControlPlane.revokePairingLink(id).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Failed to revoke pairing link.\",\n            cause,\n          }),\n      ),\n    );\n\n  const listClientSessions: ServerAuthShape[\"listClientSessions\"] = (currentSessionId) =>\n    authControlPlane.listSessions().pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Failed to load paired clients.\",\n            cause,\n          }),\n      ),\n      Effect.map((clientSessions) =>\n        clientSessions.map((clientSession): AuthClientSession => ({\n          ...clientSession,\n          scopes: clientSession.scopes ?? scopesForSessionRole(clientSession.role),\n          current: clientSession.sessionId === currentSessionId,\n        })),\n      ),\n    );\n\n  const revokeClientSession: ServerAuthShape[\"revokeClientSession\"] = (\n    currentSessionId,\n    targetSessionId,\n  ) =>\n    Effect.gen(function* () {\n      if (currentSessionId === targetSessionId) {\n        return yield* new AuthError({\n          message: \"Use revoke other clients to keep the current owner session active.\",\n          status: 403,\n        });\n      }\n      return yield* authControlPlane.revokeSession(targetSessionId).pipe(\n        Effect.mapError(\n          (cause) =>\n            new AuthError({\n              message: \"Failed to revoke client session.\",\n              cause,\n            }),\n        ),\n      );\n    });\n\n  const revokeOtherClientSessions: ServerAuthShape[\"revokeOtherClientSessions\"] = (\n    currentSessionId,\n  ) =>\n    authControlPlane.revokeOtherSessionsExcept(currentSessionId).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Failed to revoke other client sessions.\",\n            cause,\n          }),\n      ),\n    );\n\n  const issueStartupPairingUrl: ServerAuthShape[\"issueStartupPairingUrl\"] = (baseUrl) =>\n    issuePairingCredential({ role: \"owner\" }).pipe(\n      Effect.map((issued) => {\n        const url = new URL(baseUrl);\n        url.pathname = \"/pair\";\n        url.searchParams.delete(\"token\");\n        url.hash = new URLSearchParams([[\"token\", issued.credential]]).toString();\n        return url.toString();\n      }),\n    );\n\n  const issueWebSocketToken: ServerAuthShape[\"issueWebSocketToken\"] = (session) =>\n    sessions.issueWebSocketToken(session.sessionId).pipe(\n      Effect.mapError(\n        (cause) =>\n          new AuthError({\n            message: \"Failed to issue websocket token.\",\n            cause,\n          }),\n      ),\n      Effect.map(\n        (issued) =>\n          ({\n            token: issued.token,\n            expiresAt: DateTime.toUtc(issued.expiresAt),\n          }) satisfies AuthWebSocketTokenResult,\n      ),\n    );\n\n  const issueWebSocketTicket: ServerAuthShape[\"issueWebSocketTicket\"] = (session) =>\n    issueWebSocketToken(session).pipe(\n      Effect.map(\n        (issued) =>\n          ({\n            ticket: issued.token,\n            expiresAt: issued.expiresAt,\n          }) satisfies AuthWebSocketTicketResult,\n      ),\n    );\n\n  const authenticateWebSocketUpgrade: ServerAuthShape[\"authenticateWebSocketUpgrade\"] = (request) =>\n    Effect.gen(function* () {\n      const requestUrl = HttpServerRequest.toURL(request);\n      if (Option.isSome(requestUrl)) {\n        const websocketToken =\n          requestUrl.value.searchParams.get(WEBSOCKET_TICKET_QUERY_PARAM) ??\n          requestUrl.value.searchParams.get(WEBSOCKET_TOKEN_QUERY_PARAM);\n        if (websocketToken && websocketToken.trim().length > 0) {\n          return yield* sessions.verifyWebSocketToken(websocketToken).pipe(\n            Effect.map((session) => ({\n              sessionId: session.sessionId,\n              subject: session.subject,\n              method: session.method,\n              role: session.role,\n              scopes: new Set(scopesForSessionRole(session.role)),\n              ...(session.expiresAt ? { expiresAt: session.expiresAt } : {}),\n            })),\n            Effect.mapError(\n              (cause) =>\n                new AuthError({\n                  message: \"Unauthorized request.\",\n                  status: 401,\n                  cause,\n                }),\n            ),\n          );\n        }\n      }\n\n      return yield* authenticateRequest(request);\n    });\n\n  return {\n    getDescriptor: () => Effect.succeed(descriptor),\n    getSessionState,\n    exchangeBootstrapCredential,\n    exchangeBootstrapCredentialForBrowserSession,\n    exchangeBootstrapCredentialForBearerSession,\n    exchangeBootstrapCredentialForAccessToken,\n    issuePairingCredential,\n    listPairingLinks,\n    revokePairingLink,\n    listClientSessions,\n    revokeClientSession,\n    revokeOtherClientSessions,\n    authenticateHttpRequest: authenticateRequest,\n    authenticateWebSocketUpgrade,\n    issueWebSocketToken,\n    issueWebSocketTicket,\n    issueStartupPairingUrl,\n  } satisfies ServerAuthShape;\n});\n\nexport const ServerAuthLive = Layer.effect(ServerAuth, makeServerAuth).pipe(\n  Layer.provideMerge(AuthControlPlaneLive),\n  Layer.provideMerge(AuthCoreLive),\n  Layer.provideMerge(ServerAuthPolicyLive),\n);\n","// @effect-diagnostics nodeBuiltinImport:off\nimport path from \"node:path\";\n\nimport { RotatingFileSink } from \"@salchi/shared/logging\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { HttpRouter, HttpServerRequest, HttpServerResponse } from \"effect/unstable/http\";\n\nexport const WEB_RESUME_DIAGNOSTICS_ROUTE = \"/diagnostics/web-resume\";\nexport const WEB_RESUME_DIAGNOSTICS_LOG_PATH = path.join(\n  process.cwd(),\n  \".diagnostics\",\n  \"web-resume.log\",\n);\n\nconst WEB_RESUME_LOG_MAX_BYTES = 5 * 1024 * 1024;\nconst WEB_RESUME_LOG_MAX_FILES = 1;\nconst WEB_RESUME_LOG_MAX_BATCH_ENTRIES = 500;\nconst WEB_RESUME_LOG_MAX_DATA_BYTES = 8 * 1024;\n\ninterface WebResumeLogEntry {\n  readonly ts: number;\n  readonly kind: string;\n  readonly reason?: string;\n  readonly env?: string;\n  readonly data?: unknown;\n}\n\nclass WebResumeLogAppendError extends Schema.TaggedErrorClass<WebResumeLogAppendError>()(\n  \"WebResumeLogAppendError\",\n  {\n    message: Schema.String,\n    cause: Schema.optional(Schema.Defect()),\n  },\n) {}\n\nlet sink: RotatingFileSink | null = null;\n\nfunction getSink(): RotatingFileSink {\n  sink ??= new RotatingFileSink({\n    filePath: WEB_RESUME_DIAGNOSTICS_LOG_PATH,\n    maxBytes: WEB_RESUME_LOG_MAX_BYTES,\n    maxFiles: WEB_RESUME_LOG_MAX_FILES,\n  });\n  return sink;\n}\n\nfunction truncateString(value: string, maxLength: number): string {\n  return value.length <= maxLength ? value : value.slice(0, maxLength);\n}\n\nfunction sanitizeData(value: unknown): unknown {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  try {\n    const serialized = JSON.stringify(value);\n    if (serialized === undefined) {\n      return undefined;\n    }\n    if (Buffer.byteLength(serialized, \"utf8\") > WEB_RESUME_LOG_MAX_DATA_BYTES) {\n      return { truncated: true, bytes: Buffer.byteLength(serialized, \"utf8\") };\n    }\n    return JSON.parse(serialized);\n  } catch {\n    return { serializationError: true };\n  }\n}\n\nfunction normalizeEntry(value: unknown): WebResumeLogEntry | null {\n  if (typeof value !== \"object\" || value === null) {\n    return null;\n  }\n\n  const record = value as Record<string, unknown>;\n  const ts = record.ts;\n  if (\n    typeof ts !== \"number\" ||\n    !Number.isFinite(ts) ||\n    typeof record.kind !== \"string\" ||\n    record.kind.length === 0\n  ) {\n    return null;\n  }\n\n  return {\n    ts,\n    kind: truncateString(record.kind, 100),\n    ...(typeof record.reason === \"string\" ? { reason: truncateString(record.reason, 200) } : {}),\n    ...(typeof record.env === \"string\" ? { env: truncateString(record.env, 200) } : {}),\n    ...(record.data !== undefined ? { data: sanitizeData(record.data) } : {}),\n  };\n}\n\nexport function normalizeWebResumeLogEntries(value: unknown): ReadonlyArray<WebResumeLogEntry> {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n\n  return value\n    .slice(0, WEB_RESUME_LOG_MAX_BATCH_ENTRIES)\n    .map(normalizeEntry)\n    .filter((entry): entry is WebResumeLogEntry => entry !== null);\n}\n\nexport function appendWebResumeLogEntries(\n  entries: ReadonlyArray<WebResumeLogEntry>,\n): Effect.Effect<void, WebResumeLogAppendError> {\n  if (entries.length === 0) {\n    return Effect.void;\n  }\n\n  return Effect.try({\n    try: () => {\n      const lines = entries.map((entry) => `${JSON.stringify(entry)}\\n`).join(\"\");\n      getSink().write(lines);\n    },\n    catch: (cause) =>\n      new WebResumeLogAppendError({\n        message: \"Failed to append web resume diagnostics\",\n        cause,\n      }),\n  });\n}\n\nexport const webResumeDiagnosticsRouteLayer = HttpRouter.add(\n  \"POST\",\n  WEB_RESUME_DIAGNOSTICS_ROUTE,\n  Effect.gen(function* () {\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const body = yield* request.json.pipe(Effect.catch(() => Effect.succeed(null)));\n    const entries = normalizeWebResumeLogEntries(body);\n    yield* appendWebResumeLogEntries(entries).pipe(\n      Effect.catch((error) =>\n        Effect.logWarning(\"Failed to append web resume diagnostics\", {\n          error,\n          path: WEB_RESUME_DIAGNOSTICS_LOG_PATH,\n        }),\n      ),\n    );\n    return HttpServerResponse.empty({ status: 204 });\n  }),\n);\n","import {\n  AuthSessionId,\n  ServerPushSubscriptionRecord,\n  WebPushSubscriptionJson,\n} from \"@salchi/contracts\";\nimport * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { WebPushSubscriptionRepositoryError } from \"../Errors.ts\";\n\nexport const UpsertWebPushSubscriptionInput = Schema.Struct({\n  sessionId: AuthSessionId,\n  subscription: WebPushSubscriptionJson,\n  userAgent: Schema.NullOr(Schema.String),\n  now: Schema.DateTimeUtcFromString,\n});\nexport type UpsertWebPushSubscriptionInput = typeof UpsertWebPushSubscriptionInput.Type;\n\nexport const RemoveWebPushSubscriptionInput = Schema.Struct({\n  sessionId: AuthSessionId,\n  endpoint: Schema.String,\n});\nexport type RemoveWebPushSubscriptionInput = typeof RemoveWebPushSubscriptionInput.Type;\n\nexport const ListActiveWebPushSubscriptionsInput = Schema.Struct({\n  now: Schema.DateTimeUtcFromString,\n});\nexport type ListActiveWebPushSubscriptionsInput = typeof ListActiveWebPushSubscriptionsInput.Type;\n\nexport const MarkWebPushSubscriptionSuccessInput = Schema.Struct({\n  endpoint: Schema.String,\n  now: Schema.DateTimeUtcFromString,\n});\nexport type MarkWebPushSubscriptionSuccessInput = typeof MarkWebPushSubscriptionSuccessInput.Type;\n\nexport const MarkWebPushSubscriptionFailureInput = Schema.Struct({\n  endpoint: Schema.String,\n  now: Schema.DateTimeUtcFromString,\n});\nexport type MarkWebPushSubscriptionFailureInput = typeof MarkWebPushSubscriptionFailureInput.Type;\n\nexport const DisableWebPushSubscriptionInput = Schema.Struct({\n  endpoint: Schema.String,\n  now: Schema.DateTimeUtcFromString,\n});\nexport type DisableWebPushSubscriptionInput = typeof DisableWebPushSubscriptionInput.Type;\n\nexport interface WebPushSubscriptionRepositoryShape {\n  readonly upsert: (\n    input: UpsertWebPushSubscriptionInput,\n  ) => Effect.Effect<void, WebPushSubscriptionRepositoryError>;\n  readonly removeByEndpointForSession: (\n    input: RemoveWebPushSubscriptionInput,\n  ) => Effect.Effect<boolean, WebPushSubscriptionRepositoryError>;\n  readonly listActive: (\n    input: ListActiveWebPushSubscriptionsInput,\n  ) => Effect.Effect<\n    ReadonlyArray<ServerPushSubscriptionRecord>,\n    WebPushSubscriptionRepositoryError\n  >;\n  readonly markSuccess: (\n    input: MarkWebPushSubscriptionSuccessInput,\n  ) => Effect.Effect<void, WebPushSubscriptionRepositoryError>;\n  readonly markFailure: (\n    input: MarkWebPushSubscriptionFailureInput,\n  ) => Effect.Effect<void, WebPushSubscriptionRepositoryError>;\n  readonly disable: (\n    input: DisableWebPushSubscriptionInput,\n  ) => Effect.Effect<void, WebPushSubscriptionRepositoryError>;\n}\n\nexport class WebPushSubscriptionRepository extends Context.Service<\n  WebPushSubscriptionRepository,\n  WebPushSubscriptionRepositoryShape\n>()(\"salchi/persistence/Services/WebPushSubscriptions/WebPushSubscriptionRepository\") {}\n","import { AuthSessionId, NonNegativeInt, ServerPushSubscriptionRecord } from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport * as SqlSchema from \"effect/unstable/sql/SqlSchema\";\n\nimport {\n  toPersistenceDecodeError,\n  toPersistenceSqlError,\n  type WebPushSubscriptionRepositoryError,\n} from \"../Errors.ts\";\nimport {\n  DisableWebPushSubscriptionInput,\n  ListActiveWebPushSubscriptionsInput,\n  MarkWebPushSubscriptionFailureInput,\n  MarkWebPushSubscriptionSuccessInput,\n  RemoveWebPushSubscriptionInput,\n  UpsertWebPushSubscriptionInput,\n  WebPushSubscriptionRepository,\n  type WebPushSubscriptionRepositoryShape,\n} from \"../Services/WebPushSubscriptions.ts\";\n\nconst WebPushSubscriptionDbRow = Schema.Struct({\n  endpoint: Schema.String,\n  sessionId: AuthSessionId,\n  p256dh: Schema.String,\n  auth: Schema.String,\n  expirationTime: Schema.NullOr(NonNegativeInt),\n  userAgent: Schema.NullOr(Schema.String),\n  createdAt: Schema.DateTimeUtcFromString,\n  updatedAt: Schema.DateTimeUtcFromString,\n  lastSuccessfulPushAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n  lastFailedPushAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n  failureCount: NonNegativeInt,\n  disabledAt: Schema.NullOr(Schema.DateTimeUtcFromString),\n});\n\nfunction toRecord(row: typeof WebPushSubscriptionDbRow.Type): ServerPushSubscriptionRecord {\n  return row;\n}\n\nfunction toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {\n  return (cause: unknown): WebPushSubscriptionRepositoryError =>\n    Schema.isSchemaError(cause)\n      ? toPersistenceDecodeError(decodeOperation)(cause)\n      : toPersistenceSqlError(sqlOperation)(cause);\n}\n\nconst makeWebPushSubscriptionRepository = Effect.gen(function* () {\n  const sql = yield* SqlClient.SqlClient;\n\n  const upsertSubscriptionRow = SqlSchema.void({\n    Request: UpsertWebPushSubscriptionInput,\n    execute: ({ sessionId, subscription, userAgent, now }) =>\n      sql`\n        INSERT INTO web_push_subscriptions (\n          endpoint,\n          session_id,\n          p256dh,\n          auth,\n          expiration_time,\n          user_agent,\n          created_at,\n          updated_at,\n          failure_count,\n          disabled_at\n        )\n        VALUES (\n          ${subscription.endpoint},\n          ${sessionId},\n          ${subscription.keys.p256dh},\n          ${subscription.keys.auth},\n          ${subscription.expirationTime},\n          ${userAgent},\n          ${now},\n          ${now},\n          0,\n          NULL\n        )\n        ON CONFLICT(endpoint) DO UPDATE SET\n          session_id = excluded.session_id,\n          p256dh = excluded.p256dh,\n          auth = excluded.auth,\n          expiration_time = excluded.expiration_time,\n          user_agent = excluded.user_agent,\n          updated_at = excluded.updated_at,\n          failure_count = 0,\n          disabled_at = NULL\n      `,\n  });\n\n  const removeSubscriptionRow = SqlSchema.findAll({\n    Request: RemoveWebPushSubscriptionInput,\n    Result: Schema.Struct({ endpoint: Schema.String }),\n    execute: ({ sessionId, endpoint }) =>\n      sql`\n        DELETE FROM web_push_subscriptions\n        WHERE endpoint = ${endpoint}\n          AND session_id = ${sessionId}\n        RETURNING endpoint AS \"endpoint\"\n      `,\n  });\n\n  const listActiveSubscriptionRows = SqlSchema.findAll({\n    Request: ListActiveWebPushSubscriptionsInput,\n    Result: WebPushSubscriptionDbRow,\n    execute: ({ now }) =>\n      sql`\n        SELECT\n          web_push_subscriptions.endpoint AS \"endpoint\",\n          web_push_subscriptions.session_id AS \"sessionId\",\n          web_push_subscriptions.p256dh AS \"p256dh\",\n          web_push_subscriptions.auth AS \"auth\",\n          web_push_subscriptions.expiration_time AS \"expirationTime\",\n          web_push_subscriptions.user_agent AS \"userAgent\",\n          web_push_subscriptions.created_at AS \"createdAt\",\n          web_push_subscriptions.updated_at AS \"updatedAt\",\n          web_push_subscriptions.last_successful_push_at AS \"lastSuccessfulPushAt\",\n          web_push_subscriptions.last_failed_push_at AS \"lastFailedPushAt\",\n          web_push_subscriptions.failure_count AS \"failureCount\",\n          web_push_subscriptions.disabled_at AS \"disabledAt\"\n        FROM web_push_subscriptions\n        INNER JOIN auth_sessions\n          ON auth_sessions.session_id = web_push_subscriptions.session_id\n        WHERE web_push_subscriptions.disabled_at IS NULL\n          AND auth_sessions.revoked_at IS NULL\n          AND auth_sessions.expires_at > ${now}\n        ORDER BY web_push_subscriptions.updated_at DESC\n      `,\n  });\n\n  const markSuccessRow = SqlSchema.void({\n    Request: MarkWebPushSubscriptionSuccessInput,\n    execute: ({ endpoint, now }) =>\n      sql`\n        UPDATE web_push_subscriptions\n        SET\n          last_successful_push_at = ${now},\n          updated_at = ${now},\n          failure_count = 0\n        WHERE endpoint = ${endpoint}\n      `,\n  });\n\n  const markFailureRow = SqlSchema.void({\n    Request: MarkWebPushSubscriptionFailureInput,\n    execute: ({ endpoint, now }) =>\n      sql`\n        UPDATE web_push_subscriptions\n        SET\n          last_failed_push_at = ${now},\n          updated_at = ${now},\n          failure_count = failure_count + 1\n        WHERE endpoint = ${endpoint}\n      `,\n  });\n\n  const disableRow = SqlSchema.void({\n    Request: DisableWebPushSubscriptionInput,\n    execute: ({ endpoint, now }) =>\n      sql`\n        UPDATE web_push_subscriptions\n        SET\n          disabled_at = ${now},\n          updated_at = ${now}\n        WHERE endpoint = ${endpoint}\n      `,\n  });\n\n  const upsert: WebPushSubscriptionRepositoryShape[\"upsert\"] = (input) =>\n    upsertSubscriptionRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"WebPushSubscriptionRepository.upsert:query\",\n          \"WebPushSubscriptionRepository.upsert:encodeRequest\",\n        ),\n      ),\n    );\n\n  const removeByEndpointForSession: WebPushSubscriptionRepositoryShape[\"removeByEndpointForSession\"] =\n    (input) =>\n      removeSubscriptionRow(input).pipe(\n        Effect.mapError(\n          toPersistenceSqlOrDecodeError(\n            \"WebPushSubscriptionRepository.removeByEndpointForSession:query\",\n            \"WebPushSubscriptionRepository.removeByEndpointForSession:decodeRows\",\n          ),\n        ),\n        Effect.map((rows) => rows.length > 0),\n      );\n\n  const listActive: WebPushSubscriptionRepositoryShape[\"listActive\"] = (input) =>\n    listActiveSubscriptionRows(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"WebPushSubscriptionRepository.listActive:query\",\n          \"WebPushSubscriptionRepository.listActive:decodeRows\",\n        ),\n      ),\n      Effect.map((rows) => rows.map(toRecord)),\n    );\n\n  const markSuccess: WebPushSubscriptionRepositoryShape[\"markSuccess\"] = (input) =>\n    markSuccessRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"WebPushSubscriptionRepository.markSuccess:query\",\n          \"WebPushSubscriptionRepository.markSuccess:encodeRequest\",\n        ),\n      ),\n    );\n\n  const markFailure: WebPushSubscriptionRepositoryShape[\"markFailure\"] = (input) =>\n    markFailureRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"WebPushSubscriptionRepository.markFailure:query\",\n          \"WebPushSubscriptionRepository.markFailure:encodeRequest\",\n        ),\n      ),\n    );\n\n  const disable: WebPushSubscriptionRepositoryShape[\"disable\"] = (input) =>\n    disableRow(input).pipe(\n      Effect.mapError(\n        toPersistenceSqlOrDecodeError(\n          \"WebPushSubscriptionRepository.disable:query\",\n          \"WebPushSubscriptionRepository.disable:encodeRequest\",\n        ),\n      ),\n    );\n\n  return {\n    upsert,\n    removeByEndpointForSession,\n    listActive,\n    markSuccess,\n    markFailure,\n    disable,\n  } satisfies WebPushSubscriptionRepositoryShape;\n});\n\nexport const WebPushSubscriptionRepositoryLive = Layer.effect(\n  WebPushSubscriptionRepository,\n  makeWebPushSubscriptionRepository,\n);\n","import type {\n  EnvironmentId,\n  OrchestrationEvent,\n  OrchestrationMessage,\n  OrchestrationThread,\n  OrchestrationThreadShell,\n  ProviderRuntimeEvent,\n  ServerPushNotificationPayload,\n  ThreadId,\n  TurnId,\n} from \"@salchi/contracts\";\nimport { makeDrainableWorker } from \"@salchi/shared/DrainableWorker\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Stream from \"effect/Stream\";\n\nimport { ServerEnvironment } from \"../../environment/Services/ServerEnvironment.ts\";\nimport { OrchestrationEngineService } from \"../../orchestration/Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"../../orchestration/Services/ProjectionSnapshotQuery.ts\";\nimport { ProjectionThreadQueuedTurnRepositoryLive } from \"../../persistence/Layers/ProjectionThreadQueuedTurns.ts\";\nimport { ProjectionThreadQueuedTurnRepository } from \"../../persistence/Services/ProjectionThreadQueuedTurns.ts\";\nimport { ProviderService } from \"../../provider/Services/ProviderService.ts\";\nimport {\n  WebPushNotificationReactor,\n  type WebPushNotificationReactorShape,\n} from \"../Services/WebPushNotificationReactor.ts\";\nimport { WebPushService } from \"../Services/WebPushService.ts\";\n\ntype NotificationEvent =\n  | Extract<OrchestrationEvent, { type: \"thread.activity-appended\" | \"thread.turn-diff-completed\" }>\n  | Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>;\n\nexport type RuntimeContentTrackingEvent = Pick<\n  ProviderRuntimeEvent,\n  \"eventId\" | \"itemId\" | \"threadId\" | \"turnId\"\n>;\n\ninterface RuntimeTurnNotificationContent {\n  readonly contentByMessageKey: Map<string, string>;\n  readonly segmentIndexByBaseKey: Map<string, number>;\n  latestMessageKey: string | null;\n  activeBaseKey: string | null;\n}\n\ninterface NotificationWorkItem {\n  readonly event: NotificationEvent;\n  readonly hasPendingQueuedWorkAtCompletion: boolean;\n}\n\nexport interface QueuedTurnNotificationTracker {\n  readonly trackQueued: (threadId: ThreadId, messageId: string) => void;\n  readonly trackRemoved: (threadId: ThreadId, messageId: string) => void;\n  readonly trackPromoted: (threadId: ThreadId, messageId: string) => void;\n  readonly trackTurnStarted: (threadId: ThreadId) => void;\n  readonly trackTurnStartFailed: (threadId: ThreadId) => void;\n  readonly clearThread: (threadId: ThreadId) => void;\n  readonly hasPendingQueuedWork: (threadId: ThreadId) => boolean;\n}\n\nexport interface LatestProjectedThreadContent {\n  readonly content: string | null;\n  readonly turnId: TurnId | null;\n  readonly streaming: boolean;\n}\n\nconst TRACKED_RUNTIME_CONTENT_MAX_CHARS = 4_000;\nconst INTERRUPTED_ACTION_BODY = \"Agent interrupted. Open Salchi to choose the next action.\";\nconst EMPTY_ENGAGED_THREAD_IDS: ReadonlySet<ThreadId> = new Set();\nconst THREAD_NOTIFICATION_DETAIL_PAGE = {\n  limits: {\n    messages: 16,\n    proposedPlans: 1,\n    activities: 1,\n    checkpoints: 1,\n  },\n} as const;\n\nexport function createQueuedTurnNotificationTracker(): QueuedTurnNotificationTracker {\n  const queuedMessageIdsByThreadId = new Map<ThreadId, Set<string>>();\n  const promotedQueuedTurnThreadIds = new Set<ThreadId>();\n\n  const trackQueued = (threadId: ThreadId, messageId: string): void => {\n    const queuedMessageIds = queuedMessageIdsByThreadId.get(threadId) ?? new Set<string>();\n    queuedMessageIds.add(messageId);\n    queuedMessageIdsByThreadId.set(threadId, queuedMessageIds);\n  };\n\n  const trackRemoved = (threadId: ThreadId, messageId: string): void => {\n    const queuedMessageIds = queuedMessageIdsByThreadId.get(threadId);\n    if (queuedMessageIds === undefined) {\n      return;\n    }\n    queuedMessageIds.delete(messageId);\n    if (queuedMessageIds.size === 0) {\n      queuedMessageIdsByThreadId.delete(threadId);\n    }\n  };\n\n  const trackPromoted = (threadId: ThreadId, messageId: string): void => {\n    trackRemoved(threadId, messageId);\n    promotedQueuedTurnThreadIds.add(threadId);\n  };\n\n  const trackTurnStarted = (threadId: ThreadId): void => {\n    promotedQueuedTurnThreadIds.delete(threadId);\n  };\n\n  const clearThread = (threadId: ThreadId): void => {\n    queuedMessageIdsByThreadId.delete(threadId);\n    promotedQueuedTurnThreadIds.delete(threadId);\n  };\n\n  return {\n    trackQueued,\n    trackRemoved,\n    trackPromoted,\n    trackTurnStarted,\n    trackTurnStartFailed: trackTurnStarted,\n    clearThread,\n    hasPendingQueuedWork: (threadId) =>\n      (queuedMessageIdsByThreadId.get(threadId)?.size ?? 0) > 0 ||\n      promotedQueuedTurnThreadIds.has(threadId),\n  };\n}\n\nfunction threadUrl(environmentId: EnvironmentId, threadId: ThreadId): string {\n  return `/${encodeURIComponent(environmentId)}/${encodeURIComponent(threadId)}`;\n}\n\nfunction notificationThreadId(event: NotificationEvent): ThreadId {\n  return event.type === \"turn.completed\" ? event.threadId : event.payload.threadId;\n}\n\nfunction normalizeNotificationText(value: string | null | undefined): string | null {\n  const normalized = value?.replace(/\\s+/g, \" \").trim() ?? \"\";\n  return normalized.length > 0 ? normalized : null;\n}\n\nfunction normalizeManualStopReason(value: string | null | undefined): string | null {\n  const normalized =\n    normalizeNotificationText(value)\n      ?.toLowerCase()\n      .replace(/[.!]+$/g, \"\") ?? \"\";\n  return normalized.length > 0 ? normalized : null;\n}\n\nfunction isManualStopReason(value: string | null | undefined): boolean {\n  const normalized = normalizeManualStopReason(value);\n  if (normalized === null) {\n    return false;\n  }\n  return (\n    normalized === \"session stopped\" ||\n    normalized === \"cancelled\" ||\n    normalized === \"canceled\" ||\n    normalized.includes(\"user cancelled\") ||\n    normalized.includes(\"user canceled\")\n  );\n}\n\nfunction threadTurnKey(threadId: ThreadId, turnId: TurnId | undefined): string {\n  return `${threadId}:${turnId ?? \"unknown\"}`;\n}\n\nfunction runtimeMessageBaseKey(\n  event: Pick<ProviderRuntimeEvent, \"eventId\" | \"itemId\" | \"turnId\">,\n): string {\n  if (event.itemId !== undefined) {\n    return `item:${event.itemId}`;\n  }\n  if (event.turnId !== undefined) {\n    return `turn:${event.turnId}`;\n  }\n  return `event:${event.eventId}`;\n}\n\nfunction runtimeSegmentedMessageKey(\n  content: RuntimeTurnNotificationContent,\n  baseKey: string,\n): string {\n  const segmentIndex = content.segmentIndexByBaseKey.get(baseKey) ?? 0;\n  return segmentIndex === 0 ? baseKey : `${baseKey}:segment:${segmentIndex}`;\n}\n\nfunction truncateTrackedRuntimeContent(value: string): string {\n  return value.length > TRACKED_RUNTIME_CONTENT_MAX_CHARS\n    ? value.slice(0, TRACKED_RUNTIME_CONTENT_MAX_CHARS)\n    : value;\n}\n\nfunction getOrCreateRuntimeTurnNotificationContent(\n  existing: RuntimeTurnNotificationContent | undefined,\n): RuntimeTurnNotificationContent {\n  return (\n    existing ?? {\n      contentByMessageKey: new Map<string, string>(),\n      segmentIndexByBaseKey: new Map<string, number>(),\n      latestMessageKey: null,\n      activeBaseKey: null,\n    }\n  );\n}\n\nfunction appendTrackedRuntimeMessageContent(\n  existing: RuntimeTurnNotificationContent | undefined,\n  event: RuntimeContentTrackingEvent,\n  delta: string,\n): RuntimeTurnNotificationContent {\n  const content = getOrCreateRuntimeTurnNotificationContent(existing);\n  const baseKey = runtimeMessageBaseKey(event);\n  const messageKey = runtimeSegmentedMessageKey(content, baseKey);\n  content.contentByMessageKey.set(\n    messageKey,\n    truncateTrackedRuntimeContent(`${content.contentByMessageKey.get(messageKey) ?? \"\"}${delta}`),\n  );\n  content.latestMessageKey = messageKey;\n  content.activeBaseKey = baseKey;\n  return content;\n}\n\nfunction setTrackedRuntimeMessageContent(\n  existing: RuntimeTurnNotificationContent | undefined,\n  event: RuntimeContentTrackingEvent,\n  text: string,\n): RuntimeTurnNotificationContent {\n  const content = getOrCreateRuntimeTurnNotificationContent(existing);\n  const baseKey = runtimeMessageBaseKey(event);\n  const messageKey = runtimeSegmentedMessageKey(content, baseKey);\n  content.contentByMessageKey.set(messageKey, truncateTrackedRuntimeContent(text));\n  content.latestMessageKey = messageKey;\n  content.activeBaseKey = baseKey;\n  return content;\n}\n\nfunction trackRuntimeContentDelta(\n  runtimeContentByTurn: Map<string, RuntimeTurnNotificationContent>,\n  event: RuntimeContentTrackingEvent,\n  delta: string,\n): void {\n  const key = threadTurnKey(event.threadId, event.turnId);\n  runtimeContentByTurn.set(\n    key,\n    appendTrackedRuntimeMessageContent(runtimeContentByTurn.get(key), event, delta),\n  );\n}\n\nfunction trackRuntimeMessageContent(\n  runtimeContentByTurn: Map<string, RuntimeTurnNotificationContent>,\n  event: RuntimeContentTrackingEvent,\n  text: string,\n): void {\n  const key = threadTurnKey(event.threadId, event.turnId);\n  runtimeContentByTurn.set(\n    key,\n    setTrackedRuntimeMessageContent(runtimeContentByTurn.get(key), event, text),\n  );\n}\n\nfunction markRuntimeAssistantBoundary(\n  runtimeContentByTurn: Map<string, RuntimeTurnNotificationContent>,\n  event: RuntimeContentTrackingEvent,\n): void {\n  const key = threadTurnKey(event.threadId, event.turnId);\n  const content = runtimeContentByTurn.get(key);\n  if (content?.activeBaseKey === null || content?.activeBaseKey === undefined) {\n    return;\n  }\n  const nextSegmentIndex = (content.segmentIndexByBaseKey.get(content.activeBaseKey) ?? 0) + 1;\n  content.segmentIndexByBaseKey.set(content.activeBaseKey, nextSegmentIndex);\n  content.activeBaseKey = null;\n}\n\nfunction takeTrackedRuntimeThreadContent(\n  runtimeContentByTurn: Map<string, RuntimeTurnNotificationContent>,\n  event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>,\n): string | null {\n  const key = threadTurnKey(event.threadId, event.turnId);\n  const content = runtimeContentByTurn.get(key) ?? null;\n  runtimeContentByTurn.delete(key);\n  if (content?.latestMessageKey === null || content?.latestMessageKey === undefined) {\n    return null;\n  }\n  return normalizeNotificationText(content.contentByMessageKey.get(content.latestMessageKey));\n}\n\nexport function createRuntimeNotificationContentTrackerForTest() {\n  const runtimeContentByTurn = new Map<string, RuntimeTurnNotificationContent>();\n  return {\n    appendDelta: (event: RuntimeContentTrackingEvent, delta: string) => {\n      trackRuntimeContentDelta(runtimeContentByTurn, event, delta);\n    },\n    setMessage: (event: RuntimeContentTrackingEvent, text: string) => {\n      trackRuntimeMessageContent(runtimeContentByTurn, event, text);\n    },\n    markBoundary: (event: RuntimeContentTrackingEvent) => {\n      markRuntimeAssistantBoundary(runtimeContentByTurn, event);\n    },\n    messageKeys: (event: RuntimeContentTrackingEvent) =>\n      Array.from(\n        runtimeContentByTurn\n          .get(threadTurnKey(event.threadId, event.turnId))\n          ?.contentByMessageKey.keys() ?? [],\n      ),\n    take: (event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>) =>\n      takeTrackedRuntimeThreadContent(runtimeContentByTurn, event),\n  };\n}\n\nfunction latestMessageNotificationContent(\n  message: OrchestrationMessage | undefined,\n): string | null {\n  const text = normalizeNotificationText(message?.text);\n  if (text !== null) {\n    return text;\n  }\n  const attachmentCount = message?.attachments?.length ?? 0;\n  if (attachmentCount === 1) {\n    return \"Attachment\";\n  }\n  if (attachmentCount > 1) {\n    return `${attachmentCount} attachments`;\n  }\n  return null;\n}\n\nfunction latestProjectedThreadContent(\n  message: OrchestrationMessage | undefined,\n): LatestProjectedThreadContent | null {\n  if (message === undefined) {\n    return null;\n  }\n  return {\n    content: latestMessageNotificationContent(message),\n    turnId: message.turnId,\n    streaming: message.streaming,\n  };\n}\n\nexport function selectLatestThreadContentForTurnCompletion(input: {\n  readonly event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>;\n  readonly runtimeContent: string | null;\n  readonly projectedContent: LatestProjectedThreadContent | null;\n}): string | null {\n  const runtimeBody = normalizeNotificationText(input.runtimeContent);\n  if (runtimeBody !== null) {\n    return runtimeBody;\n  }\n  const projectedBody = normalizeNotificationText(input.projectedContent?.content);\n  return projectedBody;\n}\n\nexport function selectProjectedThreadContentForTurnCompletion(input: {\n  readonly event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>;\n  readonly thread: Pick<OrchestrationThread, \"latestTurn\" | \"messages\">;\n}): LatestProjectedThreadContent | null {\n  const latestTurn = input.thread.latestTurn;\n  const latestTurnAssistantMessage =\n    latestTurn !== null && latestTurn.turnId === input.event.turnId\n      ? latestTurn.assistantMessageId\n      : null;\n  const message =\n    latestTurnAssistantMessage !== null\n      ? input.thread.messages.find((entry) => entry.id === latestTurnAssistantMessage)\n      : undefined;\n  return latestProjectedThreadContent(message ?? input.thread.messages.at(-1));\n}\n\nfunction fallbackNotificationContent(event: NotificationEvent): string | null {\n  switch (event.type) {\n    case \"thread.activity-appended\":\n      return normalizeNotificationText(event.payload.activity.summary);\n\n    case \"thread.turn-diff-completed\":\n      return null;\n\n    case \"turn.completed\":\n      return \"Agent turn completed\";\n  }\n}\n\nfunction turnCompletionNotificationBody(\n  event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>,\n  latestThreadContent: string | null,\n): string | null {\n  switch (event.payload.state) {\n    case \"completed\":\n      return normalizeNotificationText(latestThreadContent) ?? \"Agent turn completed\";\n\n    case \"failed\":\n      return (\n        normalizeNotificationText(event.payload.errorMessage) ??\n        normalizeNotificationText(latestThreadContent) ??\n        \"Agent turn finished with errors\"\n      );\n\n    case \"cancelled\":\n      return null;\n\n    case \"interrupted\":\n      return isManualStopReason(event.payload.errorMessage) ||\n        isManualStopReason(event.payload.stopReason)\n        ? null\n        : INTERRUPTED_ACTION_BODY;\n  }\n}\n\nexport function isManualStopTurnCompletion(\n  event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>,\n  thread: Option.Option<OrchestrationThreadShell>,\n): boolean {\n  if (event.payload.state === \"cancelled\") {\n    return true;\n  }\n  if (Option.isSome(thread) && thread.value.session?.status === \"stopped\") {\n    return true;\n  }\n  return (\n    event.payload.state === \"interrupted\" &&\n    (isManualStopReason(event.payload.errorMessage) || isManualStopReason(event.payload.stopReason))\n  );\n}\n\nfunction isMaterializedSubagentChildThread(thread: OrchestrationThreadShell): boolean {\n  return thread.parentThreadId !== null && thread.subagentKind === \"thread_spawn\";\n}\n\nfunction isThreadUserEngaged(\n  thread: OrchestrationThreadShell,\n  engagedThreadIds: ReadonlySet<ThreadId>,\n): boolean {\n  return thread.latestUserMessageAt !== null || engagedThreadIds.has(thread.id);\n}\n\nfunction shouldSuppressUnengagedSubagentCompletion(input: {\n  readonly event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>;\n  readonly thread: Option.Option<OrchestrationThreadShell>;\n  readonly engagedThreadIds: ReadonlySet<ThreadId>;\n}): boolean {\n  if (input.event.payload.state !== \"completed\" || Option.isNone(input.thread)) {\n    return false;\n  }\n\n  const thread = input.thread.value;\n  return (\n    isMaterializedSubagentChildThread(thread) &&\n    !isThreadUserEngaged(thread, input.engagedThreadIds)\n  );\n}\n\nexport function shouldNotifyRuntimeTurnCompletion(\n  event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>,\n  thread: Option.Option<OrchestrationThreadShell>,\n  options?: {\n    readonly engagedThreadIds?: ReadonlySet<ThreadId>;\n    readonly hasPendingQueuedWork?: boolean;\n  },\n): boolean {\n  if (isManualStopTurnCompletion(event, thread)) {\n    return false;\n  }\n  if (options?.hasPendingQueuedWork === true) {\n    return false;\n  }\n  const engagedThreadIds = options?.engagedThreadIds ?? EMPTY_ENGAGED_THREAD_IDS;\n  if (\n    shouldSuppressUnengagedSubagentCompletion({\n      event,\n      thread,\n      engagedThreadIds,\n    })\n  ) {\n    return false;\n  }\n  if (Option.isNone(thread)) {\n    return true;\n  }\n  const activeTurnId = thread.value.session?.activeTurnId ?? null;\n  return activeTurnId === null || event.turnId === undefined || activeTurnId === event.turnId;\n}\n\nexport function deriveWebPushPayloadForEvent(input: {\n  readonly event: NotificationEvent;\n  readonly environmentId: EnvironmentId;\n  readonly threadTitle: string;\n  readonly latestThreadContent: string | null;\n}): ServerPushNotificationPayload | null {\n  const threadId = notificationThreadId(input.event);\n  const url = threadUrl(input.environmentId, threadId);\n\n  switch (input.event.type) {\n    case \"thread.activity-appended\": {\n      const activity = input.event.payload.activity;\n      const body =\n        normalizeNotificationText(input.latestThreadContent) ??\n        fallbackNotificationContent(input.event);\n      if (activity.kind === \"approval.requested\") {\n        return {\n          title: input.threadTitle,\n          ...(body ? { body } : {}),\n          url,\n          tag: `thread:${input.event.payload.threadId}:approval:${activity.id}`,\n        };\n      }\n      if (activity.kind === \"user-input.requested\") {\n        return {\n          title: input.threadTitle,\n          ...(body ? { body } : {}),\n          url,\n          tag: `thread:${input.event.payload.threadId}:input:${activity.id}`,\n        };\n      }\n      return null;\n    }\n\n    case \"thread.turn-diff-completed\":\n      return null;\n\n    case \"turn.completed\":\n      const body = turnCompletionNotificationBody(input.event, input.latestThreadContent);\n      if (body === null) {\n        return null;\n      }\n      return {\n        title: input.threadTitle,\n        body,\n        url,\n        tag: `thread:${input.event.threadId}:turn:${input.event.turnId ?? input.event.eventId}`,\n      };\n  }\n}\n\nexport const makeWebPushNotificationReactor = Effect.gen(function* () {\n  const orchestrationEngine = yield* OrchestrationEngineService;\n  const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n  const providerService = yield* ProviderService;\n  const push = yield* WebPushService;\n  const serverEnvironment = yield* ServerEnvironment;\n  const queuedTurnRepository = yield* ProjectionThreadQueuedTurnRepository;\n  const runtimeContentByTurn = new Map<string, RuntimeTurnNotificationContent>();\n  const userEngagedThreadIds = new Set<ThreadId>();\n  const queuedTurnNotificationTracker = createQueuedTurnNotificationTracker();\n\n  const resolveThread = (threadId: ThreadId) =>\n    projectionSnapshotQuery\n      .getThreadShellById(threadId)\n      .pipe(Effect.catch(() => Effect.succeed(Option.none<OrchestrationThreadShell>())));\n\n  const resolveLatestProjectedThreadContent = (\n    event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>,\n  ) =>\n    projectionSnapshotQuery\n      .getThreadDetailSnapshotById(event.threadId, THREAD_NOTIFICATION_DETAIL_PAGE)\n      .pipe(\n        Effect.map(\n          Option.match({\n            onNone: () => null,\n            onSome: (snapshot) =>\n              selectProjectedThreadContentForTurnCompletion({\n                event,\n                thread: snapshot.thread,\n              }),\n          }),\n        ),\n        Effect.catchCause((cause) =>\n          Effect.logWarning(\"failed to resolve web push notification body\", {\n            threadId: event.threadId,\n            cause: Cause.pretty(cause),\n          }).pipe(Effect.as(null)),\n        ),\n      );\n\n  const takeRuntimeThreadContent = (\n    event: Extract<ProviderRuntimeEvent, { type: \"turn.completed\" }>,\n  ) =>\n    Effect.sync(() => {\n      return takeTrackedRuntimeThreadContent(runtimeContentByTurn, event);\n    });\n\n  const resolveLatestThreadContent = (event: NotificationEvent): Effect.Effect<string | null> => {\n    if (event.type === \"thread.activity-appended\") {\n      return Effect.succeed(normalizeNotificationText(event.payload.activity.summary));\n    }\n    if (event.type !== \"turn.completed\") {\n      return Effect.succeed(null);\n    }\n    return Effect.gen(function* () {\n      const runtimeContent = yield* takeRuntimeThreadContent(event);\n      const projectedContent = yield* resolveLatestProjectedThreadContent(event);\n      return selectLatestThreadContentForTurnCompletion({\n        event,\n        runtimeContent,\n        projectedContent,\n      });\n    });\n  };\n\n  const processEvent = Effect.fn(\"processWebPushNotificationEvent\")(function* (\n    workItem: NotificationWorkItem,\n  ) {\n    const { event } = workItem;\n    const threadId = notificationThreadId(event);\n    const [environment, thread] = yield* Effect.all([\n      serverEnvironment.getDescriptor,\n      resolveThread(threadId),\n    ]);\n    if (\n      event.type === \"turn.completed\" &&\n      !shouldNotifyRuntimeTurnCompletion(event, thread, {\n        engagedThreadIds: userEngagedThreadIds,\n        hasPendingQueuedWork: workItem.hasPendingQueuedWorkAtCompletion,\n      })\n    ) {\n      yield* takeRuntimeThreadContent(event).pipe(Effect.asVoid);\n      return;\n    }\n    const threadTitle = Option.match(thread, {\n      onNone: () => \"Salchi thread\",\n      onSome: (threadShell) => threadShell.title,\n    });\n    const latestThreadContent = yield* resolveLatestThreadContent(event);\n    const payload = deriveWebPushPayloadForEvent({\n      event,\n      environmentId: environment.environmentId,\n      threadTitle,\n      latestThreadContent,\n    });\n    if (payload === null) {\n      return;\n    }\n    yield* push.sendToActiveSubscriptions({ payload }).pipe(\n      Effect.tap((result) =>\n        result.failedCount > 0\n          ? Effect.logWarning(\"web push notification had delivery failures\", {\n              sentCount: result.sentCount,\n              failedCount: result.failedCount,\n              eventType: event.type,\n              threadId,\n            })\n          : Effect.void,\n      ),\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.failCause(cause);\n        }\n        return Effect.logWarning(\"web push notification reactor failed to send\", {\n          eventType: event.type,\n          threadId,\n          cause: Cause.pretty(cause),\n        });\n      }),\n    );\n  });\n\n  const worker = yield* makeDrainableWorker(processEvent);\n\n  const trackQueuedTurnDomainEvent = (event: OrchestrationEvent): void => {\n    switch (event.type) {\n      case \"thread.turn-queued\":\n        queuedTurnNotificationTracker.trackQueued(event.payload.threadId, event.payload.messageId);\n        return;\n      case \"thread.queued-turn-cancelled\":\n      case \"thread.queued-turn-steered\":\n        queuedTurnNotificationTracker.trackRemoved(event.payload.threadId, event.payload.messageId);\n        return;\n      case \"thread.queued-turn-dispatched\":\n        queuedTurnNotificationTracker.trackPromoted(\n          event.payload.threadId,\n          event.payload.messageId,\n        );\n        return;\n      case \"thread.activity-appended\":\n        if (event.payload.activity.kind === \"provider.turn.start.failed\") {\n          queuedTurnNotificationTracker.trackTurnStartFailed(event.payload.threadId);\n        }\n        return;\n      case \"thread.archived\":\n      case \"thread.deleted\":\n        queuedTurnNotificationTracker.clearThread(event.payload.threadId);\n        return;\n      default:\n        return;\n    }\n  };\n\n  const hasPendingQueuedWork = (threadId: ThreadId): Effect.Effect<boolean> =>\n    queuedTurnRepository.getOldestByThreadId({ threadId }).pipe(\n      Effect.map(\n        (queuedTurn) =>\n          Option.isSome(queuedTurn) || queuedTurnNotificationTracker.hasPendingQueuedWork(threadId),\n      ),\n      Effect.catchCause((cause) =>\n        Effect.logWarning(\"failed to resolve queued turns for web push notification\", {\n          threadId,\n          cause: Cause.pretty(cause),\n        }).pipe(Effect.as(queuedTurnNotificationTracker.hasPendingQueuedWork(threadId))),\n      ),\n    );\n\n  return {\n    start: Effect.fn(\"startWebPushNotificationReactor\")(function* () {\n      yield* Effect.forkScoped(\n        Stream.runForEach(orchestrationEngine.streamDomainEvents, (event) => {\n          const trackQueuedTurns = Effect.sync(() => {\n            trackQueuedTurnDomainEvent(event);\n          });\n          if (event.type === \"thread.message-sent\" && event.payload.role === \"user\") {\n            return trackQueuedTurns.pipe(\n              Effect.andThen(\n                Effect.sync(() => {\n                  userEngagedThreadIds.add(event.payload.threadId);\n                }),\n              ),\n            );\n          }\n          if (event.type === \"thread.turn-queued\") {\n            return trackQueuedTurns.pipe(\n              Effect.andThen(\n                Effect.sync(() => {\n                  userEngagedThreadIds.add(event.payload.threadId);\n                }),\n              ),\n            );\n          }\n          if (event.type !== \"thread.activity-appended\") {\n            return trackQueuedTurns;\n          }\n          return trackQueuedTurns.pipe(\n            Effect.andThen(\n              worker.enqueue({\n                event,\n                hasPendingQueuedWorkAtCompletion: false,\n              }),\n            ),\n          );\n        }),\n      );\n      yield* Effect.forkScoped(\n        Stream.runForEach(providerService.streamEvents, (event) => {\n          if (event.type === \"content.delta\" && event.payload.streamKind === \"assistant_text\") {\n            return Effect.sync(() => {\n              trackRuntimeContentDelta(runtimeContentByTurn, event, event.payload.delta);\n            });\n          }\n          if (event.type === \"item.completed\" && event.payload.itemType === \"assistant_message\") {\n            const detail = normalizeNotificationText(event.payload.detail);\n            if (detail !== null) {\n              return Effect.sync(() => {\n                trackRuntimeMessageContent(runtimeContentByTurn, event, detail);\n              });\n            }\n          }\n          if (event.type === \"request.opened\" || event.type === \"user-input.requested\") {\n            return Effect.sync(() => {\n              markRuntimeAssistantBoundary(runtimeContentByTurn, event);\n            });\n          }\n          if (event.type === \"turn.started\" || event.type === \"turn.aborted\") {\n            return Effect.sync(() => {\n              if (event.type === \"turn.started\") {\n                queuedTurnNotificationTracker.trackTurnStarted(event.threadId);\n              }\n              runtimeContentByTurn.delete(threadTurnKey(event.threadId, event.turnId));\n            });\n          }\n          if (event.type !== \"turn.completed\") {\n            return Effect.void;\n          }\n          return hasPendingQueuedWork(event.threadId).pipe(\n            Effect.flatMap((hasPendingQueuedWorkAtCompletion) =>\n              worker.enqueue({ event, hasPendingQueuedWorkAtCompletion }),\n            ),\n          );\n        }),\n      );\n    }),\n    drain: worker.drain,\n  };\n});\n\nexport const WebPushNotificationReactorLive = Layer.effect(\n  WebPushNotificationReactor,\n  makeWebPushNotificationReactor,\n).pipe(Layer.provideMerge(ProjectionThreadQueuedTurnRepositoryLive));\n\nexport const WebPushNotificationReactorNoop = Layer.succeed(WebPushNotificationReactor, {\n  start: () => Effect.void,\n  drain: Effect.void,\n} satisfies WebPushNotificationReactorShape);\n","import type { ServerPushSendResult, ServerPushSubscriptionRecord } from \"@salchi/contracts\";\nimport { ServerPushNotificationError, ServerPushNotificationPayload } from \"@salchi/contracts\";\nimport { resolveTailscaleHttpsBaseUrl } from \"@salchi/tailscale\";\nimport * as Cause from \"effect/Cause\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport { ChildProcessSpawner } from \"effect/unstable/process\";\nimport WebPush, { type PushSubscription } from \"web-push\";\n\nimport { ServerSecretStore } from \"../../auth/Services/ServerSecretStore.ts\";\nimport { ServerConfig } from \"../../config.ts\";\nimport { WebPushSubscriptionRepository } from \"../../persistence/Services/WebPushSubscriptions.ts\";\nimport { WebPushService, type WebPushServiceShape } from \"../Services/WebPushService.ts\";\n\nconst WEB_PUSH_VAPID_SECRET_NAME = \"web-push-vapid\";\nconst WEB_PUSH_FALLBACK_VAPID_SUBJECT = \"mailto:web-push@example.com\";\nconst WEB_PUSH_TTL_SECONDS = 60 * 60 * 24;\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nconst VapidKeys = Schema.Struct({\n  publicKey: Schema.String,\n  privateKey: Schema.String,\n});\ntype VapidKeys = typeof VapidKeys.Type;\n\ninterface PushSendAttempt {\n  readonly sent: boolean;\n  readonly failureDetail?: string;\n}\n\nconst decodeVapidKeysJson = Schema.decodeUnknownEffect(Schema.fromJsonString(VapidKeys));\nconst encodeVapidKeysJson = Schema.encodeUnknownEffect(Schema.fromJsonString(VapidKeys));\nconst encodePushPayloadJson = Schema.encodeEffect(\n  Schema.fromJsonString(ServerPushNotificationPayload),\n);\n\nfunction makePushError(input: {\n  readonly operation: string;\n  readonly detail: string;\n  readonly cause?: unknown;\n}): ServerPushNotificationError {\n  return new ServerPushNotificationError({\n    operation: input.operation,\n    detail: input.detail,\n    ...(input.cause === undefined ? {} : { cause: input.cause }),\n  });\n}\n\nfunction toWebPushSubscription(record: ServerPushSubscriptionRecord): PushSubscription {\n  return {\n    endpoint: record.endpoint,\n    expirationTime: record.expirationTime,\n    keys: {\n      p256dh: record.p256dh,\n      auth: record.auth,\n    },\n  };\n}\n\nfunction isGonePushError(error: unknown): boolean {\n  if (typeof error !== \"object\" || error === null || !(\"statusCode\" in error)) {\n    return false;\n  }\n  const statusCode = (error as { readonly statusCode?: unknown }).statusCode;\n  return statusCode === 404 || statusCode === 410;\n}\n\nfunction readPushHttpStatus(error: unknown): number | null {\n  if (typeof error !== \"object\" || error === null || !(\"statusCode\" in error)) {\n    return null;\n  }\n  const statusCode = (error as { readonly statusCode?: unknown }).statusCode;\n  return typeof statusCode === \"number\" && Number.isFinite(statusCode) ? statusCode : null;\n}\n\nfunction readPushResponseBody(error: unknown): string | null {\n  if (typeof error !== \"object\" || error === null || !(\"body\" in error)) {\n    return null;\n  }\n  const body = (error as { readonly body?: unknown }).body;\n  if (typeof body === \"string\") {\n    return body;\n  }\n  if (body instanceof Uint8Array) {\n    return textDecoder.decode(body);\n  }\n  return null;\n}\n\nfunction formatPushFailure(error: unknown): string {\n  const message =\n    error instanceof Error && error.message.trim().length > 0 ? error.message : String(error);\n  const statusCode = readPushHttpStatus(error);\n  const body = readPushResponseBody(error);\n  const statusDetail = statusCode === null ? \"\" : ` (${statusCode})`;\n  const bodyDetail = body ? `: ${truncateNotificationText(body, 240)}` : \"\";\n  return `${message}${statusDetail}${bodyDetail}`;\n}\n\nfunction truncateNotificationText(value: string, maxLength: number): string {\n  const trimmed = value.trim();\n  if (trimmed.length <= maxLength) {\n    return trimmed;\n  }\n  return `${trimmed.slice(0, Math.max(0, maxLength - 3)).trimEnd()}...`;\n}\n\nfunction normalizePayload(payload: ServerPushNotificationPayload): ServerPushNotificationPayload {\n  const body = payload.body ? truncateNotificationText(payload.body, 240) : undefined;\n  return {\n    title: truncateNotificationText(payload.title, 80),\n    ...(body ? { body } : {}),\n    ...(payload.url ? { url: payload.url } : {}),\n    ...(payload.tag ? { tag: payload.tag } : {}),\n  };\n}\n\nfunction urlOriginOrNull(value: string): string | null {\n  try {\n    return new URL(value).origin;\n  } catch {\n    return null;\n  }\n}\n\nexport const makeWebPushService = Effect.gen(function* () {\n  const serverConfig = yield* ServerConfig;\n  const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const secrets = yield* ServerSecretStore;\n  const subscriptions = yield* WebPushSubscriptionRepository;\n\n  const loadOrCreateVapidKeys = Effect.gen(function* () {\n    const existing = yield* secrets.get(WEB_PUSH_VAPID_SECRET_NAME).pipe(\n      Effect.mapError((cause) =>\n        makePushError({\n          operation: \"push.loadVapidKeys\",\n          detail: \"Stored VAPID keys could not be read.\",\n          cause,\n        }),\n      ),\n    );\n    if (existing !== null) {\n      return yield* decodeVapidKeysJson(textDecoder.decode(existing)).pipe(\n        Effect.mapError((cause) =>\n          makePushError({\n            operation: \"push.loadVapidKeys\",\n            detail: \"Stored VAPID keys are invalid.\",\n            cause,\n          }),\n        ),\n      );\n    }\n\n    const generated = WebPush.generateVAPIDKeys();\n    const json = yield* encodeVapidKeysJson(generated).pipe(\n      Effect.mapError((cause) =>\n        makePushError({\n          operation: \"push.createVapidKeys\",\n          detail: \"Generated VAPID keys could not be encoded.\",\n          cause,\n        }),\n      ),\n    );\n    yield* secrets.set(WEB_PUSH_VAPID_SECRET_NAME, textEncoder.encode(json)).pipe(\n      Effect.mapError((cause) =>\n        makePushError({\n          operation: \"push.createVapidKeys\",\n          detail: \"Generated VAPID keys could not be stored.\",\n          cause,\n        }),\n      ),\n    );\n    return generated;\n  });\n  const loadOrCreateVapidKeysCached = yield* Effect.cached(loadOrCreateVapidKeys);\n\n  const getVapidKeys = loadOrCreateVapidKeysCached;\n\n  const resolveVapidSubject = Effect.gen(function* () {\n    if (serverConfig.tailscaleServeEnabled) {\n      const tailscaleBaseUrl = yield* resolveTailscaleHttpsBaseUrl({\n        servePort: serverConfig.tailscaleServePort,\n      }).pipe(\n        Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, childProcessSpawner),\n        Effect.catch((cause) =>\n          Effect.logWarning(\"failed to resolve Tailscale VAPID subject\", { cause }).pipe(\n            Effect.as(null),\n          ),\n        ),\n      );\n      const tailscaleOrigin = tailscaleBaseUrl ? urlOriginOrNull(tailscaleBaseUrl) : null;\n      if (tailscaleOrigin) {\n        return tailscaleOrigin;\n      }\n    }\n\n    if (serverConfig.devUrl?.protocol === \"https:\") {\n      return serverConfig.devUrl.origin;\n    }\n\n    return WEB_PUSH_FALLBACK_VAPID_SUBJECT;\n  });\n\n  const nowUtc = Effect.map(DateTime.now, DateTime.toUtc);\n\n  const sendOne = (\n    record: ServerPushSubscriptionRecord,\n    payload: ServerPushNotificationPayload,\n    vapidKeys: VapidKeys,\n    vapidSubject: string,\n  ): Effect.Effect<PushSendAttempt, never, never> =>\n    Effect.gen(function* () {\n      const normalizedPayload = normalizePayload(payload);\n      const jsonPayload = yield* encodePushPayloadJson(normalizedPayload).pipe(\n        Effect.mapError((cause) =>\n          makePushError({\n            operation: \"push.encodePayload\",\n            detail: \"Push notification payload could not be encoded.\",\n            cause,\n          }),\n        ),\n      );\n\n      return yield* Effect.tryPromise({\n        try: () =>\n          WebPush.sendNotification(toWebPushSubscription(record), jsonPayload, {\n            TTL: WEB_PUSH_TTL_SECONDS,\n            urgency: \"normal\",\n            vapidDetails: {\n              subject: vapidSubject,\n              publicKey: vapidKeys.publicKey,\n              privateKey: vapidKeys.privateKey,\n            },\n          }),\n        catch: (cause) =>\n          makePushError({\n            operation: \"push.sendNotification\",\n            detail: \"Web push delivery failed.\",\n            cause,\n          }),\n      }).pipe(\n        Effect.matchEffect({\n          onFailure: (error) =>\n            Effect.gen(function* () {\n              const now = yield* nowUtc;\n              const cause = error.cause ?? error;\n              const failureDetail = formatPushFailure(cause);\n              if (isGonePushError(cause)) {\n                yield* subscriptions\n                  .disable({ endpoint: record.endpoint, now })\n                  .pipe(Effect.ignoreCause({ log: true }));\n              } else {\n                yield* subscriptions\n                  .markFailure({ endpoint: record.endpoint, now })\n                  .pipe(Effect.ignoreCause({ log: true }));\n              }\n              yield* Effect.logWarning(\"web push delivery failed\", {\n                endpoint: record.endpoint,\n                detail: failureDetail,\n              });\n              return { sent: false, failureDetail };\n            }),\n          onSuccess: () =>\n            Effect.gen(function* () {\n              const now = yield* nowUtc;\n              yield* subscriptions\n                .markSuccess({ endpoint: record.endpoint, now })\n                .pipe(Effect.ignoreCause({ log: true }));\n              return { sent: true };\n            }),\n        }),\n      );\n    }).pipe(\n      Effect.catchCause((cause) => {\n        if (Cause.hasInterruptsOnly(cause)) {\n          return Effect.interrupt;\n        }\n        return Effect.logWarning(\"web push delivery bookkeeping failed\", {\n          endpoint: record.endpoint,\n          cause: Cause.pretty(cause),\n        }).pipe(\n          Effect.as({\n            sent: false,\n            failureDetail: \"Push delivery bookkeeping failed.\",\n          }),\n        );\n      }),\n    );\n\n  const sendToRecords = (\n    records: ReadonlyArray<ServerPushSubscriptionRecord>,\n    payload: ServerPushNotificationPayload,\n  ): Effect.Effect<ServerPushSendResult, ServerPushNotificationError> =>\n    Effect.gen(function* () {\n      if (records.length === 0) {\n        return { sentCount: 0, failedCount: 0 };\n      }\n      const vapidKeys = yield* getVapidKeys;\n      const vapidSubject = yield* resolveVapidSubject;\n      yield* Effect.sync(() => {\n        WebPush.setVapidDetails(vapidSubject, vapidKeys.publicKey, vapidKeys.privateKey);\n      });\n      const results = yield* Effect.forEach(\n        records,\n        (record) => sendOne(record, payload, vapidKeys, vapidSubject),\n        {\n          concurrency: 8,\n        },\n      );\n      const sentCount = results.filter((result) => result.sent).length;\n      const lastFailureDetail = results.findLast((result) => !result.sent)?.failureDetail;\n      return {\n        sentCount,\n        failedCount: records.length - sentCount,\n        ...(lastFailureDetail ? { lastFailureDetail } : {}),\n      };\n    });\n\n  const getActiveSubscriptions = Effect.fn(\"getActiveSubscriptions\")(function* () {\n    const now = yield* nowUtc;\n    return yield* subscriptions.listActive({ now }).pipe(\n      Effect.mapError((cause) =>\n        makePushError({\n          operation: \"push.listSubscriptions\",\n          detail: \"Failed to load active push subscriptions.\",\n          cause,\n        }),\n      ),\n    );\n  });\n\n  const getConfig: WebPushServiceShape[\"getConfig\"] = getVapidKeys.pipe(\n    Effect.map((keys) => ({\n      supported: true,\n      publicVapidKey: keys.publicKey,\n    })),\n  );\n\n  const registerSubscription: WebPushServiceShape[\"registerSubscription\"] = (sessionId, input) =>\n    Effect.gen(function* () {\n      const now = yield* nowUtc;\n      yield* subscriptions\n        .upsert({\n          sessionId,\n          subscription: input.subscription,\n          userAgent: input.userAgent ?? null,\n          now,\n        })\n        .pipe(\n          Effect.mapError((cause) =>\n            makePushError({\n              operation: \"push.registerSubscription\",\n              detail: \"Failed to store push subscription.\",\n              cause,\n            }),\n          ),\n        );\n      return {\n        subscribed: true,\n        endpoint: input.subscription.endpoint,\n      };\n    });\n\n  const unregisterSubscription: WebPushServiceShape[\"unregisterSubscription\"] = (\n    sessionId,\n    input,\n  ) =>\n    subscriptions.removeByEndpointForSession({ sessionId, endpoint: input.endpoint }).pipe(\n      Effect.mapError((cause) =>\n        makePushError({\n          operation: \"push.unregisterSubscription\",\n          detail: \"Failed to remove push subscription.\",\n          cause,\n        }),\n      ),\n      Effect.map(() => ({\n        subscribed: false,\n        endpoint: null,\n      })),\n    );\n\n  const sendTestNotification: WebPushServiceShape[\"sendTestNotification\"] = (sessionId, input) =>\n    Effect.gen(function* () {\n      const activeSubscriptions = yield* getActiveSubscriptions();\n      const matchingSubscription = activeSubscriptions.find(\n        (entry) => entry.sessionId === sessionId && entry.endpoint === input.endpoint,\n      );\n      if (!matchingSubscription) {\n        return yield* makePushError({\n          operation: \"push.sendTestNotification\",\n          detail: \"Push subscription is not active for this session.\",\n        });\n      }\n      const result = yield* sendToRecords([matchingSubscription], {\n        title: \"Salchi notifications are enabled\",\n        body: \"You will receive alerts when an agent needs attention or finishes a turn.\",\n        url: \"/\",\n        tag: \"salchi:test\",\n      });\n      if (result.sentCount === 0) {\n        return yield* makePushError({\n          operation: \"push.sendTestNotification\",\n          detail: result.lastFailureDetail\n            ? `Push provider rejected the test notification: ${result.lastFailureDetail}`\n            : \"Push provider rejected the test notification.\",\n        });\n      }\n      return result;\n    });\n\n  const sendToActiveSubscriptions: WebPushServiceShape[\"sendToActiveSubscriptions\"] = (input) =>\n    Effect.gen(function* () {\n      const activeSubscriptions = yield* getActiveSubscriptions();\n      return yield* sendToRecords(activeSubscriptions, input.payload);\n    });\n\n  return {\n    getConfig,\n    registerSubscription,\n    unregisterSubscription,\n    sendTestNotification,\n    sendToActiveSubscriptions,\n  } satisfies WebPushServiceShape;\n});\n\nexport const WebPushServiceLive = Layer.effect(WebPushService, makeWebPushService);\n\nexport const WebPushServiceNoop = Layer.succeed(WebPushService, {\n  getConfig: Effect.succeed({\n    supported: false,\n    publicVapidKey: null,\n  }),\n  registerSubscription: (_sessionId, input) =>\n    Effect.succeed({\n      subscribed: true,\n      endpoint: input.subscription.endpoint,\n    }),\n  unregisterSubscription: () =>\n    Effect.succeed({\n      subscribed: false,\n      endpoint: null,\n    }),\n  sendTestNotification: () =>\n    Effect.succeed({\n      sentCount: 0,\n      failedCount: 0,\n    }),\n  sendToActiveSubscriptions: () =>\n    Effect.succeed({\n      sentCount: 0,\n      failedCount: 0,\n    }),\n} satisfies WebPushServiceShape);\n","import { DEFAULT_TRANSCRIPTION_MODEL, type TranscriptionModel } from \"@salchi/contracts\";\n\nexport interface TranscriptionModelMetadata {\n  readonly id: TranscriptionModel;\n  readonly label: string;\n  readonly downloadBytes: number;\n  readonly downloadSizeLabel: string;\n  readonly memorySizeLabel: string;\n  readonly qualityLabel: string;\n}\n\nexport const TRANSCRIPTION_MODELS = [\n  {\n    id: \"tiny.en\",\n    label: \"Tiny\",\n    downloadBytes: 77_704_715,\n    downloadSizeLabel: \"75 MB\",\n    memorySizeLabel: \"~273 MB RAM\",\n    qualityLabel: \"Fastest, lower accuracy\",\n  },\n  {\n    id: \"base.en\",\n    label: \"Base\",\n    downloadBytes: 147_964_211,\n    downloadSizeLabel: \"142 MB\",\n    memorySizeLabel: \"~388 MB RAM\",\n    qualityLabel: \"Balanced\",\n  },\n  {\n    id: \"small.en\",\n    label: \"Small\",\n    downloadBytes: 264_477_561,\n    downloadSizeLabel: \"253 MB\",\n    memorySizeLabel: \"~560 MB RAM\",\n    qualityLabel: \"More accurate, slower\",\n  },\n] as const satisfies ReadonlyArray<TranscriptionModelMetadata>;\n\nexport function findTranscriptionModel(id: TranscriptionModel): TranscriptionModelMetadata {\n  const defaultModel = TRANSCRIPTION_MODELS.find(\n    (model) => model.id === DEFAULT_TRANSCRIPTION_MODEL,\n  );\n  if (!defaultModel) {\n    throw new Error(\n      `Missing metadata for default transcription model ${DEFAULT_TRANSCRIPTION_MODEL}.`,\n    );\n  }\n  return TRANSCRIPTION_MODELS.find((model) => model.id === id) ?? defaultModel;\n}\n\nexport function isTranscriptionModel(value: string): value is TranscriptionModel {\n  return TRANSCRIPTION_MODELS.some((model) => model.id === value);\n}\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { join } from \"node:path\";\n\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  reapManagedChildProcesses,\n  registerManagedChildProcess,\n  type ManagedChildProcessControl,\n  type ManagedChildProcessIdentity,\n} from \"../process/ManagedChildProcessRegistry.ts\";\n\nconst SIDECAR_REGISTRY_DIRECTORY = \"sidecars\";\n\nexport type ManagedWhisperProcessIdentity = ManagedChildProcessIdentity;\nexport type ManagedWhisperProcessControl = ManagedChildProcessControl;\n\nexport function managedWhisperSidecarRegistryDirectory(cacheDir: string): string {\n  return join(cacheDir, SIDECAR_REGISTRY_DIRECTORY);\n}\n\nexport const registerManagedWhisperSidecarProcess = Effect.fn(\n  \"managedWhisper.registerSidecarProcess\",\n)(function* (input: {\n  readonly cacheDir: string;\n  readonly sidecarPid: number;\n  readonly terminate: Effect.Effect<void>;\n  readonly processControl?: ManagedWhisperProcessControl;\n}) {\n  yield* registerManagedChildProcess({\n    registryDirectory: managedWhisperSidecarRegistryDirectory(input.cacheDir),\n    childPid: input.sidecarPid,\n    terminate: input.terminate,\n    ...(input.processControl ? { processControl: input.processControl } : {}),\n  });\n});\n\nexport const reapManagedWhisperSidecars = Effect.fn(\"managedWhisper.reapSidecars\")(\n  function* (input: {\n    readonly cacheDir: string;\n    readonly processControl?: ManagedWhisperProcessControl;\n  }) {\n    yield* reapManagedChildProcesses({\n      registryDirectory: managedWhisperSidecarRegistryDirectory(input.cacheDir),\n      ...(input.processControl ? { processControl: input.processControl } : {}),\n    });\n  },\n);\n","// @effect-diagnostics nodeBuiltinImport:off\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { availableParallelism } from \"node:os\";\n\nimport * as NetService from \"@salchi/shared/Net\";\nimport type { TranscriptionModel, TranscriptionStatus } from \"@salchi/contracts\";\nimport { findTranscriptionModel } from \"@salchi/shared/transcriptionModel\";\nimport { terminateChildProcess } from \"@salchi/shared/childProcess\";\nimport * as Clock from \"effect/Clock\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Option from \"effect/Option\";\nimport * as Path from \"effect/Path\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpClient, HttpClientResponse } from \"effect/unstable/http\";\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\";\n\nimport { ServerConfig } from \"../config.ts\";\nimport {\n  managedWhisperSidecarRegistryDirectory,\n  type ManagedWhisperProcessControl,\n  reapManagedWhisperSidecars,\n  registerManagedWhisperSidecarProcess,\n} from \"./ManagedWhisperProcessRegistry.ts\";\n\nexport {\n  managedWhisperSidecarRegistryDirectory,\n  type ManagedWhisperProcessControl,\n  reapManagedWhisperSidecars,\n};\n\nexport const MANAGED_WHISPER_VERSION = \"v1.9.1\";\nconst MANAGED_WHISPER_DOWNLOAD_TIMEOUT = \"15 minutes\";\nconst MANAGED_WHISPER_EXTRACTION_TIMEOUT = \"1 minute\";\nconst MANAGED_WHISPER_HEALTH_REQUEST_TIMEOUT = \"2 seconds\";\nconst MANAGED_WHISPER_START_TIMEOUT = \"30 seconds\";\nconst MANAGED_WHISPER_PROCESS_TERMINATE_GRACE = \"2 seconds\";\nconst MANAGED_WHISPER_LOCK_TIMEOUT = \"15 minutes\";\nconst MANAGED_WHISPER_LOCK_TIMEOUT_MS = 15 * 60 * 1_000;\nconst MANAGED_WHISPER_LOCK_RETRY_DELAY = \"200 millis\";\nconst MANAGED_WHISPER_STALE_LOCK_MS = 5 * 60 * 1_000;\n\ninterface ManagedWhisperModelAsset {\n  readonly fileName: string;\n  readonly bytes: number;\n  readonly sha256: string;\n  readonly url: string;\n}\n\nconst MANAGED_WHISPER_MODEL_ASSETS: Readonly<Record<TranscriptionModel, ManagedWhisperModelAsset>> =\n  {\n    \"tiny.en\": {\n      fileName: \"ggml-tiny.en.bin\",\n      bytes: findTranscriptionModel(\"tiny.en\").downloadBytes,\n      sha256: \"921e4cf8686fdd993dcd081a5da5b6c365bfde1162e72b08d75ac75289920b1f\",\n      url: \"https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en.bin\",\n    },\n    \"base.en\": {\n      fileName: \"ggml-base.en.bin\",\n      bytes: findTranscriptionModel(\"base.en\").downloadBytes,\n      sha256: \"a03779c86df3323075f5e796cb2ce5029f00ec8869eee3fdfb897afe36c6d002\",\n      url: \"https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin\",\n    },\n    \"small.en\": {\n      fileName: \"ggml-small.en-q8_0.bin\",\n      bytes: findTranscriptionModel(\"small.en\").downloadBytes,\n      sha256: \"67a179f608ea6114bd3fdb9060e762b588a3fb3bd00c4387971be4d177958067\",\n      url: \"https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en-q8_0.bin\",\n    },\n  };\n\nexport function resolveManagedWhisperModelAsset(\n  model: TranscriptionModel,\n): ManagedWhisperModelAsset {\n  return MANAGED_WHISPER_MODEL_ASSETS[model];\n}\n\ninterface ManagedWhisperRuntimeAsset {\n  readonly archiveName: string;\n  readonly bytes: number;\n  readonly sha256: string;\n  readonly url: string;\n}\n\nconst RUNTIME_ASSETS: Readonly<Record<\"arm64\" | \"x64\", ManagedWhisperRuntimeAsset>> = {\n  arm64: {\n    archiveName: `whisper-bin-ubuntu-arm64-${MANAGED_WHISPER_VERSION}.tar.gz`,\n    bytes: 4_555_819,\n    sha256: \"e0b66cd551ff6f2a28fabe3c6e89691eea037bb76833493abb9a71ca788994b3\",\n    url: `https://github.com/ggml-org/whisper.cpp/releases/download/${MANAGED_WHISPER_VERSION}/whisper-bin-ubuntu-arm64.tar.gz`,\n  },\n  x64: {\n    archiveName: `whisper-bin-ubuntu-x64-${MANAGED_WHISPER_VERSION}.tar.gz`,\n    bytes: 9_379_235,\n    sha256: \"f3bf3b4369a99b54665b0f19b88483b30de27f25963b0414235dea03198515c5\",\n    url: `https://github.com/ggml-org/whisper.cpp/releases/download/${MANAGED_WHISPER_VERSION}/whisper-bin-ubuntu-x64.tar.gz`,\n  },\n};\n\nexport class ManagedWhisperError extends Data.TaggedError(\"ManagedWhisperError\")<{\n  readonly detail: string;\n  readonly cause?: unknown;\n}> {}\n\nexport interface ManagedWhisperProcess {\n  readonly inferenceUrl: URL;\n  readonly awaitTermination: Effect.Effect<never, ManagedWhisperError>;\n}\n\nconst ManagedRuntimeMarkerSchema = Schema.Struct({\n  version: Schema.String,\n  archiveSha256: Schema.String,\n  binaryBytes: Schema.Int,\n  binarySha256: Schema.String,\n});\ntype ManagedRuntimeMarker = typeof ManagedRuntimeMarkerSchema.Type;\n\nconst ManagedFileLockOwnerSchema = Schema.Struct({\n  pid: Schema.Int,\n  token: Schema.String,\n});\n\nconst decodeManagedRuntimeMarker = Schema.decodeUnknownOption(\n  Schema.fromJsonString(ManagedRuntimeMarkerSchema),\n);\nconst encodeManagedRuntimeMarker = Schema.encodeUnknownEffect(\n  Schema.fromJsonString(ManagedRuntimeMarkerSchema),\n);\nconst decodeManagedFileLockOwner = Schema.decodeUnknownOption(\n  Schema.fromJsonString(ManagedFileLockOwnerSchema),\n);\nconst encodeManagedFileLockOwner = Schema.encodeUnknownEffect(\n  Schema.fromJsonString(ManagedFileLockOwnerSchema),\n);\n\nexport function resolveManagedWhisperRuntimeAsset(\n  platform: NodeJS.Platform,\n  architecture: string,\n): ManagedWhisperRuntimeAsset | null {\n  if (platform !== \"linux\" || (architecture !== \"arm64\" && architecture !== \"x64\")) {\n    return null;\n  }\n  return RUNTIME_ASSETS[architecture];\n}\n\nfunction managedWhisperError(detail: string, cause?: unknown) {\n  return new ManagedWhisperError({ detail, cause });\n}\n\nconst sha256File = Effect.fn(\"managedWhisper.sha256File\")(function* (filePath: string) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const hash = createHash(\"sha256\");\n  yield* fileSystem\n    .stream(filePath)\n    .pipe(Stream.runForEach((bytes) => Effect.sync(() => hash.update(bytes))));\n  return hash.digest(\"hex\");\n});\n\nconst verifiedFileExists = Effect.fn(\"managedWhisper.verifiedFileExists\")(function* (input: {\n  readonly filePath: string;\n  readonly bytes: number;\n  readonly sha256: string;\n}) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const info = yield* fileSystem\n    .stat(input.filePath)\n    .pipe(Effect.catch(() => Effect.succeed(null)));\n  if (!info || info.type !== \"File\" || Number(info.size) !== input.bytes) return false;\n  const digest = yield* sha256File(input.filePath).pipe(Effect.catch(() => Effect.succeed(null)));\n  return digest === input.sha256;\n});\n\nfunction parseManagedRuntimeMarker(raw: string): ManagedRuntimeMarker | null {\n  const marker = Option.getOrNull(decodeManagedRuntimeMarker(raw));\n  if (marker === null || marker.binaryBytes < 1 || !/^[a-f0-9]{64}$/.test(marker.binarySha256)) {\n    return null;\n  }\n  return marker;\n}\n\nexport const validateManagedRuntime = Effect.fn(\"managedWhisper.validateRuntime\")(\n  function* (input: {\n    readonly binaryPath: string;\n    readonly markerPath: string;\n    readonly version: string;\n    readonly archiveSha256: string;\n  }) {\n    const fileSystem = yield* FileSystem.FileSystem;\n    const markerRaw = yield* fileSystem\n      .readFileString(input.markerPath)\n      .pipe(Effect.catch(() => Effect.succeed(\"\")));\n    const marker = parseManagedRuntimeMarker(markerRaw);\n    if (\n      marker === null ||\n      marker.version !== input.version ||\n      marker.archiveSha256 !== input.archiveSha256\n    ) {\n      return false;\n    }\n\n    const info = yield* fileSystem\n      .stat(input.binaryPath)\n      .pipe(Effect.catch(() => Effect.succeed(null)));\n    if (\n      !info ||\n      info.type !== \"File\" ||\n      Number(info.size) !== marker.binaryBytes ||\n      (info.mode & 0o111) === 0\n    ) {\n      return false;\n    }\n    const digest = yield* sha256File(input.binaryPath).pipe(\n      Effect.catch(() => Effect.succeed(null)),\n    );\n    return digest === marker.binarySha256;\n  },\n);\n\nfunction isAlreadyExists(error: unknown): boolean {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"reason\" in error &&\n    typeof error.reason === \"object\" &&\n    error.reason !== null &&\n    \"_tag\" in error.reason &&\n    error.reason._tag === \"AlreadyExists\"\n  );\n}\n\nfunction processExists(pid: number): boolean {\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch (error) {\n    return (error as NodeJS.ErrnoException).code === \"EPERM\";\n  }\n}\n\nfunction parseLockOwner(raw: string): { readonly pid: number; readonly token: string } | null {\n  const value = Option.getOrNull(decodeManagedFileLockOwner(raw));\n  return value && value.pid > 0 ? value : null;\n}\n\nconst removeStaleLock = Effect.fn(\"managedWhisper.removeStaleLock\")(function* (lockPath: string) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const [raw, info] = yield* Effect.all([\n    fileSystem.readFileString(lockPath).pipe(Effect.catch(() => Effect.succeed(\"\"))),\n    fileSystem.stat(lockPath).pipe(Effect.catch(() => Effect.succeed(null))),\n  ]);\n  if (!info) return true;\n  const owner = parseLockOwner(raw);\n  if (owner && processExists(owner.pid)) return false;\n  const modifiedAt = Option.match(info.mtime, {\n    onNone: () => 0,\n    onSome: (value) => value.getTime(),\n  });\n  const now = yield* Clock.currentTimeMillis;\n  if (owner || now - modifiedAt >= MANAGED_WHISPER_STALE_LOCK_MS) {\n    yield* fileSystem.remove(lockPath, { force: true }).pipe(Effect.ignore);\n    return true;\n  }\n  return false;\n});\n\ninterface ManagedFileLockOwner {\n  readonly contents: string;\n}\n\nconst releaseManagedFileLock = Effect.fn(\"managedWhisper.releaseFileLock\")(function* (input: {\n  readonly lockPath: string;\n  readonly owner: ManagedFileLockOwner;\n  readonly fileSystem: FileSystem.FileSystem;\n}) {\n  const raw = yield* input.fileSystem\n    .readFileString(input.lockPath)\n    .pipe(Effect.catch(() => Effect.succeed(\"\")));\n  if (raw === input.owner.contents) {\n    yield* input.fileSystem.remove(input.lockPath, { force: true }).pipe(Effect.ignore);\n  }\n});\n\nconst acquireManagedFileLock = Effect.fn(\"managedWhisper.acquireFileLock\")(function* (\n  lockPath: string,\n  interruptibleSleep: () => Effect.Effect<void>,\n) {\n  const startedAt = yield* Clock.currentTimeMillis;\n  while (true) {\n    const owner = yield* Effect.uninterruptible(\n      Effect.gen(function* () {\n        const fileSystem = yield* FileSystem.FileSystem;\n        const contents = yield* encodeManagedFileLockOwner({\n          pid: process.pid,\n          token: randomUUID(),\n        });\n        const created = yield* Effect.scoped(\n          fileSystem.open(lockPath, { flag: \"wx\", mode: 0o600 }).pipe(\n            Effect.map(Option.some),\n            Effect.catch((error) =>\n              isAlreadyExists(error)\n                ? Effect.succeed(Option.none<FileSystem.File>())\n                : Effect.fail(error),\n            ),\n            Effect.flatMap(\n              Option.match({\n                onNone: () => Effect.succeed(false),\n                onSome: (file) =>\n                  file.writeAll(new TextEncoder().encode(contents)).pipe(\n                    Effect.andThen(file.sync),\n                    Effect.as(true),\n                    Effect.onError(() =>\n                      fileSystem.remove(lockPath, { force: true }).pipe(Effect.ignore),\n                    ),\n                  ),\n              }),\n            ),\n          ),\n        );\n        if (!created) return Option.none<ManagedFileLockOwner>();\n\n        return Option.some({ contents } satisfies ManagedFileLockOwner);\n      }),\n    );\n    if (Option.isSome(owner)) return owner.value;\n    if ((yield* Clock.currentTimeMillis) - startedAt >= MANAGED_WHISPER_LOCK_TIMEOUT_MS) {\n      return yield* managedWhisperError(\n        `Timed out waiting for the managed dictation cache lock ${lockPath} after ${MANAGED_WHISPER_LOCK_TIMEOUT}.`,\n      );\n    }\n    if (!(yield* removeStaleLock(lockPath))) {\n      yield* interruptibleSleep();\n    }\n  }\n});\n\nexport function withManagedFileLock<A, E, R>(input: {\n  readonly lockPath: string;\n  readonly use: Effect.Effect<A, E, R>;\n}) {\n  return Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n    return yield* Effect.uninterruptibleMask((restore) =>\n      acquireManagedFileLock(input.lockPath, () =>\n        restore(Effect.sleep(MANAGED_WHISPER_LOCK_RETRY_DELAY)),\n      ).pipe(\n        Effect.flatMap((owner) =>\n          restore(input.use).pipe(\n            // In the pinned Effect beta an interrupted restored region can skip its generic\n            // onExit cleanup. The ownership check makes this explicit interruption hook and\n            // the normal exit hook safely idempotent.\n            Effect.onInterrupt(() =>\n              releaseManagedFileLock({ lockPath: input.lockPath, owner, fileSystem }),\n            ),\n            Effect.onExit(() =>\n              releaseManagedFileLock({ lockPath: input.lockPath, owner, fileSystem }),\n            ),\n          ),\n        ),\n      ),\n    );\n  });\n}\n\nexport function withManagedTemporaryDirectory<A, E, R>(input: {\n  readonly directory: string;\n  readonly prefix: string;\n  readonly use: (temporaryDirectory: string) => Effect.Effect<A, E, R>;\n}) {\n  return Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n    return yield* Effect.uninterruptibleMask((restore) =>\n      fileSystem\n        .makeTempDirectory({\n          directory: input.directory,\n          prefix: input.prefix,\n        })\n        .pipe(\n          Effect.flatMap((temporaryDirectory) => {\n            const cleanup = fileSystem\n              .remove(temporaryDirectory, { recursive: true, force: true })\n              .pipe(Effect.ignore);\n            return restore(input.use(temporaryDirectory)).pipe(\n              // See withManagedFileLock: keep interruption cleanup explicit for this Effect beta.\n              Effect.onInterrupt(() => cleanup),\n              Effect.onExit(() => cleanup),\n            );\n          }),\n        ),\n    );\n  });\n}\n\nconst downloadVerifiedFile = Effect.fn(\"managedWhisper.downloadVerifiedFile\")(function* (input: {\n  readonly url: string;\n  readonly filePath: string;\n  readonly bytes: number;\n  readonly sha256: string;\n  readonly state: \"downloading-runtime\" | \"downloading-model\";\n  readonly onStatus: (status: TranscriptionStatus) => Effect.Effect<void>;\n}) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const httpClient = yield* HttpClient.HttpClient;\n\n  yield* fileSystem.makeDirectory(path.dirname(input.filePath), { recursive: true });\n  yield* withManagedFileLock({\n    lockPath: `${input.filePath}.lock`,\n    use: Effect.gen(function* () {\n      if (yield* verifiedFileExists(input)) {\n        yield* input.onStatus({\n          configured: true,\n          state: input.state,\n          downloadedBytes: input.bytes,\n          totalBytes: input.bytes,\n          message: null,\n        });\n        return;\n      }\n\n      const partialPath = `${input.filePath}.${process.pid}.${randomUUID()}.part`;\n      yield* input.onStatus({\n        configured: true,\n        state: input.state,\n        downloadedBytes: 0,\n        totalBytes: input.bytes,\n        message: null,\n      });\n\n      const cleanupPartial = fileSystem.remove(partialPath, { force: true }).pipe(Effect.ignore);\n      yield* Effect.gen(function* () {\n        let downloadedBytes = 0;\n        yield* httpClient.get(input.url).pipe(\n          Effect.flatMap(HttpClientResponse.filterStatusOk),\n          Effect.flatMap((response) =>\n            response.stream.pipe(\n              Stream.tap((bytes) => {\n                downloadedBytes += bytes.length;\n                if (downloadedBytes > input.bytes) {\n                  return Effect.fail(\n                    managedWhisperError(\"Downloaded artifact exceeded expected size.\"),\n                  );\n                }\n                return input.onStatus({\n                  configured: true,\n                  state: input.state,\n                  downloadedBytes,\n                  totalBytes: input.bytes,\n                  message: null,\n                });\n              }),\n              Stream.run(fileSystem.sink(partialPath, { flag: \"wx\" })),\n            ),\n          ),\n          Effect.timeout(MANAGED_WHISPER_DOWNLOAD_TIMEOUT),\n          Effect.mapError((cause) =>\n            cause instanceof ManagedWhisperError\n              ? cause\n              : managedWhisperError(`Failed to download ${path.basename(input.filePath)}.`, cause),\n          ),\n        );\n\n        const valid = yield* verifiedFileExists({ ...input, filePath: partialPath });\n        if (!valid) {\n          return yield* managedWhisperError(\n            `Downloaded ${path.basename(input.filePath)} failed integrity verification.`,\n          );\n        }\n        yield* fileSystem.rename(partialPath, input.filePath);\n      }).pipe(\n        Effect.onInterrupt(() => cleanupPartial),\n        Effect.ensuring(cleanupPartial),\n      );\n    }),\n  });\n});\n\nexport const terminateManagedChildProcess = Effect.fn(\"managedWhisper.terminateChild\")(function* (\n  child: ChildProcessSpawner.ChildProcessHandle,\n) {\n  yield* terminateChildProcess(child, {\n    gracefulTimeout: MANAGED_WHISPER_PROCESS_TERMINATE_GRACE,\n    forceTimeout: MANAGED_WHISPER_PROCESS_TERMINATE_GRACE,\n  });\n});\n\nconst addManagedChildProcessFinalizer = (\n  child: ChildProcessSpawner.ChildProcessHandle,\n): Effect.Effect<void, never, import(\"effect/Scope\").Scope> =>\n  Effect.addFinalizer(() => terminateManagedChildProcess(child).pipe(Effect.ignore));\n\nexport const registerManagedWhisperSidecarLifecycle = Effect.fn(\n  \"managedWhisper.registerSidecarLifecycle\",\n)(function* (input: {\n  readonly cacheDir: string;\n  readonly child: ChildProcessSpawner.ChildProcessHandle;\n  readonly processControl?: ManagedWhisperProcessControl;\n}) {\n  yield* registerManagedWhisperSidecarProcess({\n    cacheDir: input.cacheDir,\n    sidecarPid: Number(input.child.pid),\n    terminate: terminateManagedChildProcess(input.child),\n    ...(input.processControl ? { processControl: input.processControl } : {}),\n  });\n});\n\nexport const runTarExtraction = Effect.fn(\"managedWhisper.runTarExtraction\")(function* (input: {\n  readonly archivePath: string;\n  readonly destination: string;\n}) {\n  yield* Effect.scoped(\n    Effect.gen(function* () {\n      const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n      const child = yield* Effect.uninterruptible(\n        Effect.gen(function* () {\n          const child = yield* spawner.spawn(\n            ChildProcess.make(\n              \"tar\",\n              [\"-xzf\", input.archivePath, \"-C\", input.destination, \"--strip-components=1\"],\n              {\n                detached: false,\n                stdin: \"ignore\",\n                stdout: \"ignore\",\n                stderr: \"inherit\",\n              },\n            ),\n          );\n          yield* addManagedChildProcessFinalizer(child);\n          return child;\n        }),\n      );\n      const exitCode = yield* child.exitCode.pipe(\n        Effect.timeoutOrElse({\n          duration: MANAGED_WHISPER_EXTRACTION_TIMEOUT,\n          orElse: () =>\n            Effect.fail(\n              managedWhisperError(\n                `Timed out extracting whisper.cpp after ${MANAGED_WHISPER_EXTRACTION_TIMEOUT}.`,\n              ),\n            ),\n        }),\n      );\n      if (Number(exitCode) !== 0) {\n        return yield* managedWhisperError(`Failed to extract whisper.cpp (tar exit ${exitCode}).`);\n      }\n    }),\n  );\n});\n\nconst ensureManagedRuntime = Effect.fn(\"managedWhisper.ensureRuntime\")(function* (input: {\n  readonly cacheDir: string;\n  readonly asset: ManagedWhisperRuntimeAsset;\n  readonly onStatus: (status: TranscriptionStatus) => Effect.Effect<void>;\n}) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const runtimeDir = path.join(\n    input.cacheDir,\n    `runtime-${MANAGED_WHISPER_VERSION}-${process.arch}`,\n  );\n  const binaryPath = path.join(runtimeDir, \"whisper-server\");\n  const markerPath = path.join(runtimeDir, \".salchi-managed-runtime\");\n  yield* fileSystem.makeDirectory(input.cacheDir, { recursive: true });\n  yield* withManagedFileLock({\n    lockPath: `${runtimeDir}.lock`,\n    use: Effect.gen(function* () {\n      if (\n        yield* validateManagedRuntime({\n          binaryPath,\n          markerPath,\n          version: MANAGED_WHISPER_VERSION,\n          archiveSha256: input.asset.sha256,\n        })\n      ) {\n        return;\n      }\n\n      const archivePath = path.join(input.cacheDir, input.asset.archiveName);\n      yield* downloadVerifiedFile({\n        ...input.asset,\n        filePath: archivePath,\n        state: \"downloading-runtime\",\n        onStatus: input.onStatus,\n      });\n      yield* input.onStatus({\n        configured: true,\n        state: \"starting\",\n        downloadedBytes: null,\n        totalBytes: null,\n        message: \"Installing the local dictation runtime…\",\n      });\n\n      yield* withManagedTemporaryDirectory({\n        directory: input.cacheDir,\n        prefix: \"whisper-runtime-\",\n        use: (temporaryDirectory) =>\n          Effect.gen(function* () {\n            yield* runTarExtraction({ archivePath, destination: temporaryDirectory });\n            const temporaryBinary = path.join(temporaryDirectory, \"whisper-server\");\n            const temporaryMarker = path.join(temporaryDirectory, \".salchi-managed-runtime\");\n            const binaryInfo = yield* fileSystem\n              .stat(temporaryBinary)\n              .pipe(Effect.catch(() => Effect.succeed(null)));\n            if (!binaryInfo || binaryInfo.type !== \"File\" || Number(binaryInfo.size) < 1) {\n              return yield* managedWhisperError(\n                \"The whisper.cpp archive did not contain a valid whisper-server executable.\",\n              );\n            }\n            yield* fileSystem.chmod(temporaryBinary, 0o755);\n            const marker: ManagedRuntimeMarker = {\n              version: MANAGED_WHISPER_VERSION,\n              archiveSha256: input.asset.sha256,\n              binaryBytes: Number(binaryInfo.size),\n              binarySha256: yield* sha256File(temporaryBinary),\n            };\n            yield* fileSystem.writeFileString(\n              temporaryMarker,\n              `${yield* encodeManagedRuntimeMarker(marker)}\\n`,\n            );\n            if (\n              !(yield* validateManagedRuntime({\n                binaryPath: temporaryBinary,\n                markerPath: temporaryMarker,\n                version: MANAGED_WHISPER_VERSION,\n                archiveSha256: input.asset.sha256,\n              }))\n            ) {\n              return yield* managedWhisperError(\n                \"The installed whisper-server executable failed validation.\",\n              );\n            }\n            yield* fileSystem.remove(runtimeDir, { recursive: true, force: true });\n            yield* fileSystem.rename(temporaryDirectory, runtimeDir);\n          }),\n      });\n    }),\n  });\n  return binaryPath;\n});\n\nconst ensureManagedModel = Effect.fn(\"managedWhisper.ensureModel\")(function* (input: {\n  readonly cacheDir: string;\n  readonly asset: ManagedWhisperModelAsset;\n  readonly onStatus: (status: TranscriptionStatus) => Effect.Effect<void>;\n}) {\n  const path = yield* Path.Path;\n  const modelPath = path.join(input.cacheDir, input.asset.fileName);\n  yield* downloadVerifiedFile({\n    url: input.asset.url,\n    filePath: modelPath,\n    bytes: input.asset.bytes,\n    sha256: input.asset.sha256,\n    state: \"downloading-model\",\n    onStatus: input.onStatus,\n  });\n  return modelPath;\n});\n\nexport const awaitSidecarHealth = Effect.fn(\"managedWhisper.awaitHealth\")(function* (\n  healthUrl: URL,\n) {\n  const httpClient = yield* HttpClient.HttpClient;\n  const deadline = (yield* Clock.currentTimeMillis) + 30_000;\n  while ((yield* Clock.currentTimeMillis) < deadline) {\n    const healthy = yield* httpClient.get(healthUrl).pipe(\n      Effect.timeout(MANAGED_WHISPER_HEALTH_REQUEST_TIMEOUT),\n      Effect.map((response) => response.status >= 200 && response.status < 300),\n      Effect.catch(() => Effect.succeed(false)),\n    );\n    if (healthy) return;\n    yield* Effect.sleep(\"200 millis\");\n  }\n  return yield* managedWhisperError(\n    `whisper-server did not become healthy within ${MANAGED_WHISPER_START_TIMEOUT}.`,\n  );\n});\n\nexport function makeManagedWhisperSidecarCommand(input: {\n  readonly binaryPath: string;\n  readonly modelPath: string;\n  readonly port: number;\n  readonly threads: number;\n  readonly temporaryDirectory: string;\n}) {\n  return ChildProcess.make(\n    input.binaryPath,\n    [\n      \"--host\",\n      \"127.0.0.1\",\n      \"--port\",\n      String(input.port),\n      \"--threads\",\n      String(input.threads),\n      \"--model\",\n      input.modelPath,\n      \"--tmp-dir\",\n      input.temporaryDirectory,\n      \"--no-gpu\",\n    ],\n    {\n      // Keep terminal Ctrl+C scoped to the Salchi process. The sidecar is\n      // terminated by its owning Effect scope instead of receiving SIGINT\n      // concurrently and being mistaken for an unexpected crash.\n      detached: true,\n      stdin: \"ignore\",\n      stdout: \"ignore\",\n      stderr: \"ignore\",\n    },\n  );\n}\n\nconst startManagedSidecar = Effect.fn(\"managedWhisper.startSidecar\")(function* (input: {\n  readonly binaryPath: string;\n  readonly modelPath: string;\n  readonly cacheDir: string;\n}) {\n  const fileSystem = yield* FileSystem.FileSystem;\n  const path = yield* Path.Path;\n  const net = yield* NetService.NetService;\n  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;\n  const port = yield* net.reserveLoopbackPort();\n  const temporaryDirectory = path.join(input.cacheDir, \"tmp\");\n  yield* fileSystem.makeDirectory(temporaryDirectory, { recursive: true });\n  const threads = Math.max(1, Math.min(4, availableParallelism()));\n  const child = yield* Effect.uninterruptible(\n    Effect.gen(function* () {\n      const child = yield* spawner.spawn(\n        makeManagedWhisperSidecarCommand({\n          binaryPath: input.binaryPath,\n          modelPath: input.modelPath,\n          port,\n          threads,\n          temporaryDirectory,\n        }),\n      );\n      yield* registerManagedWhisperSidecarLifecycle({\n        cacheDir: input.cacheDir,\n        child,\n      });\n      return child;\n    }),\n  );\n\n  const baseUrl = new URL(`http://127.0.0.1:${port}`);\n  const healthUrl = new URL(\"/health\", baseUrl);\n  yield* Effect.raceFirst(\n    awaitSidecarHealth(healthUrl),\n    child.exitCode.pipe(\n      Effect.flatMap((exitCode) =>\n        Effect.fail(managedWhisperError(`whisper-server exited with code ${exitCode}.`)),\n      ),\n    ),\n  );\n  return {\n    inferenceUrl: new URL(\"/inference\", baseUrl),\n    awaitTermination: child.exitCode.pipe(\n      Effect.flatMap((exitCode) =>\n        Effect.fail(managedWhisperError(`whisper-server exited with code ${exitCode}.`)),\n      ),\n      Effect.mapError((cause) =>\n        cause instanceof ManagedWhisperError\n          ? cause\n          : managedWhisperError(\"Failed while monitoring whisper-server.\", cause),\n      ),\n    ),\n  } satisfies ManagedWhisperProcess;\n});\n\nconst provisionManagedWhisperInternal = Effect.fn(\"managedWhisper.provision\")(function* (input: {\n  readonly model: TranscriptionModel;\n  readonly onStatus: (status: TranscriptionStatus) => Effect.Effect<void>;\n}) {\n  const config = yield* ServerConfig;\n  const path = yield* Path.Path;\n  const asset = resolveManagedWhisperRuntimeAsset(process.platform, process.arch);\n  if (!asset) {\n    return yield* managedWhisperError(\n      `Automatic dictation installation is not available for ${process.platform}/${process.arch}. Configure SALCHI_WHISPER_SERVER_URL instead.`,\n    );\n  }\n\n  const cacheDir = path.join(config.providerStatusCacheDir, \"dictation\");\n  yield* reapManagedWhisperSidecars({ cacheDir });\n  yield* input.onStatus({\n    configured: true,\n    state: \"checking\",\n    downloadedBytes: null,\n    totalBytes: null,\n    message: \"Checking local dictation files…\",\n  });\n  const binaryPath = yield* ensureManagedRuntime({ cacheDir, asset, onStatus: input.onStatus });\n  const modelPath = yield* ensureManagedModel({\n    cacheDir,\n    asset: resolveManagedWhisperModelAsset(input.model),\n    onStatus: input.onStatus,\n  });\n  yield* input.onStatus({\n    configured: true,\n    state: \"starting\",\n    downloadedBytes: null,\n    totalBytes: null,\n    message: \"Starting local dictation…\",\n  });\n  return yield* startManagedSidecar({ binaryPath, modelPath, cacheDir });\n});\n\nexport const provisionManagedWhisper = (input: {\n  readonly model: TranscriptionModel;\n  readonly onStatus: (status: TranscriptionStatus) => Effect.Effect<void>;\n}) =>\n  provisionManagedWhisperInternal(input).pipe(\n    Effect.mapError((cause) =>\n      cause instanceof ManagedWhisperError\n        ? cause\n        : managedWhisperError(\"Failed to prepare local dictation.\", cause),\n    ),\n  );\n","import {\n  DEFAULT_TRANSCRIPTION_MODEL,\n  type TranscriptionModel,\n  type TranscriptionResult,\n  type TranscriptionStatus,\n} from \"@salchi/contracts\";\nimport * as Cause from \"effect/Cause\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as Deferred from \"effect/Deferred\";\nimport type * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Ref from \"effect/Ref\";\nimport * as Scope from \"effect/Scope\";\nimport * as Semaphore from \"effect/Semaphore\";\nimport * as Stream from \"effect/Stream\";\nimport { HttpBody, HttpClient, HttpClientResponse } from \"effect/unstable/http\";\n\nimport { ServerConfig } from \"../config.ts\";\nimport { ServerSettingsService } from \"../serverSettings.ts\";\nimport {\n  ManagedWhisperError,\n  type ManagedWhisperProcess,\n  provisionManagedWhisper,\n  resolveManagedWhisperRuntimeAsset,\n} from \"./ManagedWhisper.ts\";\n\nconst WHISPER_REQUEST_TIMEOUT = \"2 minutes\";\nconst WHISPER_PROMPT =\n  \"Salchi, Codex, Claude, Effect, TypeScript, JavaScript, Bun, React, WebSocket, GitHub, worktree.\";\nconst WHISPER_AUDIO_CONTEXT_MAX = 1_500;\nconst WHISPER_AUDIO_CONTEXT_MIN = 256;\nconst WHISPER_AUDIO_CONTEXT_STEP = 256;\nconst WHISPER_AUDIO_CONTEXT_PADDING_FRAMES = 50;\nconst WHISPER_SAMPLES_PER_AUDIO_CONTEXT_FRAME = 320;\nconst LOOPBACK_HOSTNAMES = new Set([\"127.0.0.1\", \"::1\", \"localhost\"]);\n\nexport type LocalTranscriptionErrorReason =\n  | \"not_configured\"\n  | \"provisioning_failed\"\n  | \"upstream_failed\"\n  | \"invalid_response\";\n\nexport class LocalTranscriptionError extends Data.TaggedError(\"LocalTranscriptionError\")<{\n  readonly reason: LocalTranscriptionErrorReason;\n  readonly cause?: unknown;\n}> {}\n\nexport interface LocalTranscriptionInput {\n  readonly audio: Uint8Array;\n  readonly contentType: string;\n}\n\nexport interface LocalTranscriptionShape {\n  readonly getStatus: Effect.Effect<TranscriptionStatus>;\n  readonly transcribe: (\n    input: LocalTranscriptionInput,\n  ) => Effect.Effect<TranscriptionResult, LocalTranscriptionError>;\n}\n\nexport class LocalTranscription extends Context.Service<\n  LocalTranscription,\n  LocalTranscriptionShape\n>()(\"salchi/transcription/LocalTranscription\") {}\n\nexport function resolveWhisperInferenceUrl(serverUrl: URL | undefined): URL | undefined {\n  if (!serverUrl) return undefined;\n\n  const normalizedHostname = serverUrl.hostname.trim().toLowerCase();\n  if (\n    !LOOPBACK_HOSTNAMES.has(normalizedHostname) ||\n    (serverUrl.protocol !== \"http:\" && serverUrl.protocol !== \"https:\")\n  ) {\n    return undefined;\n  }\n\n  const inferenceUrl = new URL(serverUrl.toString());\n  if (inferenceUrl.pathname === \"/\" || inferenceUrl.pathname.length === 0) {\n    inferenceUrl.pathname = \"/inference\";\n  }\n  inferenceUrl.hash = \"\";\n  return inferenceUrl;\n}\n\nexport function extractWhisperTranscriptionText(value: unknown): string | null {\n  if (\n    typeof value !== \"object\" ||\n    value === null ||\n    !(\"text\" in value) ||\n    typeof value.text !== \"string\"\n  ) {\n    return null;\n  }\n  return value.text.trim();\n}\n\nfunction audioFileExtension(contentType: string): string {\n  switch (contentType.split(\";\", 1)[0]?.trim().toLowerCase()) {\n    case \"audio/mp4\":\n      return \"m4a\";\n    case \"audio/ogg\":\n      return \"ogg\";\n    case \"audio/mpeg\":\n      return \"mp3\";\n    case \"audio/wav\":\n    case \"audio/x-wav\":\n      return \"wav\";\n    default:\n      return \"webm\";\n  }\n}\n\nfunction bytesMatchAscii(bytes: Uint8Array, offset: number, value: string): boolean {\n  if (offset < 0 || offset + value.length > bytes.length) return false;\n  for (let index = 0; index < value.length; index += 1) {\n    if (bytes[offset + index] !== value.charCodeAt(index)) return false;\n  }\n  return true;\n}\n\nexport function resolveWhisperAudioContext(input: LocalTranscriptionInput): number | null {\n  const contentType = input.contentType.split(\";\", 1)[0]?.trim().toLowerCase();\n  if (contentType !== \"audio/wav\" && contentType !== \"audio/x-wav\") return null;\n\n  const bytes = input.audio;\n  if (\n    bytes.length < 44 ||\n    !bytesMatchAscii(bytes, 0, \"RIFF\") ||\n    !bytesMatchAscii(bytes, 8, \"WAVE\")\n  ) {\n    return null;\n  }\n\n  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n  let blockAlign: number | null = null;\n  let dataBytes: number | null = null;\n  let offset = 12;\n\n  while (offset + 8 <= bytes.length) {\n    const chunkBytes = view.getUint32(offset + 4, true);\n    const chunkStart = offset + 8;\n    const chunkEnd = chunkStart + chunkBytes;\n    if (!Number.isSafeInteger(chunkEnd) || chunkEnd > bytes.length) return null;\n\n    if (bytesMatchAscii(bytes, offset, \"fmt \") && chunkBytes >= 16) {\n      const audioFormat = view.getUint16(chunkStart, true);\n      const channels = view.getUint16(chunkStart + 2, true);\n      const sampleRate = view.getUint32(chunkStart + 4, true);\n      const formatBlockAlign = view.getUint16(chunkStart + 12, true);\n      const bitsPerSample = view.getUint16(chunkStart + 14, true);\n      if (\n        audioFormat !== 1 ||\n        channels !== 1 ||\n        sampleRate !== 16_000 ||\n        formatBlockAlign !== 2 ||\n        bitsPerSample !== 16\n      ) {\n        return null;\n      }\n      blockAlign = formatBlockAlign;\n    } else if (bytesMatchAscii(bytes, offset, \"data\")) {\n      dataBytes = chunkBytes;\n    }\n\n    offset = chunkEnd + (chunkBytes % 2);\n  }\n\n  if (\n    blockAlign === null ||\n    dataBytes === null ||\n    dataBytes === 0 ||\n    dataBytes % blockAlign !== 0\n  ) {\n    return null;\n  }\n  const sampleCount = Math.floor(dataBytes / blockAlign);\n  const audioFrames = Math.ceil(sampleCount / WHISPER_SAMPLES_PER_AUDIO_CONTEXT_FRAME);\n  const paddedFrames = audioFrames + WHISPER_AUDIO_CONTEXT_PADDING_FRAMES;\n  const audioContext = Math.max(\n    WHISPER_AUDIO_CONTEXT_MIN,\n    Math.ceil(paddedFrames / WHISPER_AUDIO_CONTEXT_STEP) * WHISPER_AUDIO_CONTEXT_STEP,\n  );\n  return audioContext < WHISPER_AUDIO_CONTEXT_MAX ? audioContext : null;\n}\n\nexport function makeWhisperInferenceFormData(input: LocalTranscriptionInput): FormData {\n  const formData = new FormData();\n  formData.append(\n    \"file\",\n    new Blob([input.audio], { type: input.contentType }),\n    `recording.${audioFileExtension(input.contentType)}`,\n  );\n  formData.append(\"response_format\", \"json\");\n  formData.append(\"language\", \"en\");\n  formData.append(\"prompt\", WHISPER_PROMPT);\n  const audioContext = resolveWhisperAudioContext(input);\n  if (audioContext !== null) {\n    formData.append(\"audio_ctx\", String(audioContext));\n  }\n  return formData;\n}\n\nexport function makeLocalTranscription<R = never>(input: {\n  readonly initialStatus: TranscriptionStatus;\n  readonly initialInferenceUrl?: URL | undefined;\n  readonly provision?:\n    | ((\n        onStatus: (status: TranscriptionStatus) => Effect.Effect<void>,\n      ) => Effect.Effect<URL, ManagedWhisperError, R>)\n    | undefined;\n  readonly transcribeAt: (\n    inferenceUrl: URL,\n    request: LocalTranscriptionInput,\n  ) => Effect.Effect<TranscriptionResult, LocalTranscriptionError>;\n}) {\n  return Effect.gen(function* () {\n    const statusRef = yield* Ref.make(input.initialStatus);\n    const readiness = yield* Deferred.make<URL, LocalTranscriptionError>();\n    const semaphore = yield* Semaphore.make(1);\n\n    if (input.initialInferenceUrl) {\n      yield* Deferred.succeed(readiness, input.initialInferenceUrl);\n    } else if (input.provision) {\n      yield* input\n        .provision((status) => Ref.set(statusRef, status))\n        .pipe(\n          Effect.tap((inferenceUrl) =>\n            Ref.set(statusRef, {\n              configured: true,\n              state: \"ready\",\n              downloadedBytes: null,\n              totalBytes: null,\n              message: null,\n            }).pipe(Effect.andThen(Deferred.succeed(readiness, inferenceUrl))),\n          ),\n          Effect.catchCause((cause) => {\n            if (Cause.hasInterruptsOnly(cause)) {\n              return Effect.failCause(cause);\n            }\n            const failure = cause.reasons.find(Cause.isFailReason)?.error;\n            const error =\n              failure instanceof ManagedWhisperError\n                ? failure\n                : new ManagedWhisperError({\n                    detail: \"Unexpected local dictation setup failure.\",\n                    cause,\n                  });\n            return Effect.logError(\"Local dictation provisioning failed\", { cause }).pipe(\n              Effect.andThen(\n                Ref.set(statusRef, {\n                  configured: true,\n                  state: \"error\",\n                  downloadedBytes: null,\n                  totalBytes: null,\n                  message: error.detail,\n                }),\n              ),\n              Effect.andThen(\n                Deferred.fail(\n                  readiness,\n                  new LocalTranscriptionError({\n                    reason: \"provisioning_failed\",\n                    cause: error,\n                  }),\n                ),\n              ),\n            );\n          }),\n          Effect.forkScoped({ startImmediately: true }),\n        );\n    } else {\n      yield* Deferred.fail(readiness, new LocalTranscriptionError({ reason: \"not_configured\" }));\n    }\n\n    return LocalTranscription.of({\n      getStatus: Ref.get(statusRef),\n      transcribe: (request) =>\n        Deferred.await(readiness).pipe(\n          Effect.flatMap((inferenceUrl) =>\n            semaphore.withPermits(1)(input.transcribeAt(inferenceUrl, request)),\n          ),\n        ),\n    });\n  });\n}\n\ninterface ActiveManagedWhisper {\n  readonly model: TranscriptionModel;\n  readonly scope: Scope.Closeable;\n  readonly process: ManagedWhisperProcess;\n  readonly generation: number;\n}\n\ninterface PendingManagedWhisper {\n  readonly model: TranscriptionModel;\n  readonly generation: number;\n  readonly fiber: Fiber.Fiber<void, never>;\n}\n\nconst MANAGED_WHISPER_RETRY_DELAYS = [\"1 second\", \"5 seconds\"] as const;\n\nfunction managedWhisperErrorFromCause(\n  cause: Cause.Cause<ManagedWhisperError>,\n): ManagedWhisperError {\n  const failure = cause.reasons.find(Cause.isFailReason)?.error;\n  return failure instanceof ManagedWhisperError\n    ? failure\n    : new ManagedWhisperError({\n        detail: \"Unexpected local dictation setup failure.\",\n        cause,\n      });\n}\n\nexport function makeManagedLocalTranscription<R>(input: {\n  readonly initialModel: TranscriptionModel;\n  readonly provision: (\n    model: TranscriptionModel,\n    onStatus: (status: TranscriptionStatus) => Effect.Effect<void>,\n  ) => Effect.Effect<ManagedWhisperProcess, ManagedWhisperError, R | Scope.Scope>;\n  readonly transcribeAt: (\n    inferenceUrl: URL,\n    request: LocalTranscriptionInput,\n  ) => Effect.Effect<TranscriptionResult, LocalTranscriptionError>;\n  readonly retryDelays?: ReadonlyArray<Duration.Input> | undefined;\n}) {\n  return Effect.gen(function* () {\n    const parentScope = yield* Scope.Scope;\n    const provisionContext = yield* Effect.context<R>();\n    const initialReadiness = yield* Deferred.make<URL | null, LocalTranscriptionError>();\n    const readinessRef = yield* Ref.make(initialReadiness);\n    const statusRef = yield* Ref.make<TranscriptionStatus>({\n      configured: true,\n      state: \"checking\",\n      downloadedBytes: null,\n      totalBytes: null,\n      message: null,\n    });\n    const activeRef = yield* Ref.make<ActiveManagedWhisper | null>(null);\n    const desiredModelRef = yield* Ref.make<TranscriptionModel | null>(null);\n    const generationRef = yield* Ref.make(0);\n    const pendingRef = yield* Ref.make<PendingManagedWhisper | null>(null);\n    const switchSemaphore = yield* Semaphore.make(1);\n    const transcriptionSemaphore = yield* Semaphore.make(1);\n    const retryDelays = input.retryDelays ?? MANAGED_WHISPER_RETRY_DELAYS;\n\n    const replaceReadiness = (\n      readiness: Deferred.Deferred<URL | null, LocalTranscriptionError>,\n    ): Effect.Effect<void> =>\n      Ref.getAndSet(readinessRef, readiness).pipe(\n        Effect.flatMap((previous) => Deferred.succeed(previous, null)),\n        Effect.asVoid,\n      );\n\n    const setStatusForGeneration = (\n      generation: number,\n      status: TranscriptionStatus,\n    ): Effect.Effect<void> =>\n      Ref.get(generationRef).pipe(\n        Effect.flatMap((currentGeneration) =>\n          currentGeneration === generation ? Ref.set(statusRef, status) : Effect.void,\n        ),\n      );\n\n    const closeActive = (active: ActiveManagedWhisper): Effect.Effect<void> =>\n      Scope.close(active.scope, Exit.void).pipe(Effect.ignore);\n\n    let launchModel: (\n      model: TranscriptionModel,\n      failedActive?: ActiveManagedWhisper,\n    ) => Effect.Effect<void>;\n\n    const monitorActive = (active: ActiveManagedWhisper): Effect.Effect<void> =>\n      active.process.awaitTermination.pipe(\n        Effect.catch((error) =>\n          Effect.logError(\"Managed local dictation sidecar stopped\", {\n            model: active.model,\n            cause: error,\n          }).pipe(\n            Effect.andThen(\n              Ref.get(desiredModelRef).pipe(\n                Effect.flatMap((desiredModel) =>\n                  desiredModel ? launchModel(desiredModel, active) : Effect.void,\n                ),\n              ),\n            ),\n          ),\n        ),\n        Effect.catchCause((cause) =>\n          Cause.hasInterruptsOnly(cause)\n            ? Effect.interrupt\n            : Effect.logError(\"Managed local dictation sidecar monitor failed\", { cause }).pipe(\n                Effect.andThen(\n                  Ref.get(desiredModelRef).pipe(\n                    Effect.flatMap((desiredModel) =>\n                      desiredModel ? launchModel(desiredModel, active) : Effect.void,\n                    ),\n                  ),\n                ),\n              ),\n        ),\n      );\n\n    const runCandidate = (\n      model: TranscriptionModel,\n      generation: number,\n      readiness: Deferred.Deferred<URL | null, LocalTranscriptionError>,\n    ): Effect.Effect<void> =>\n      Effect.gen(function* () {\n        let lastError: ManagedWhisperError | null = null;\n        for (let attempt = 0; attempt <= retryDelays.length; attempt += 1) {\n          if ((yield* Ref.get(generationRef)) !== generation) return;\n          if (attempt > 0) {\n            yield* setStatusForGeneration(generation, {\n              configured: true,\n              state: \"checking\",\n              downloadedBytes: null,\n              totalBytes: null,\n              message: `Retrying local dictation setup (${attempt + 1}/${retryDelays.length + 1})…`,\n            });\n          }\n\n          const { childScope, provisionExit } = yield* Effect.uninterruptibleMask((restore) =>\n            Effect.gen(function* () {\n              const childScope = yield* Scope.fork(parentScope);\n              const provisionExit = yield* restore(\n                input\n                  .provision(model, (status) => setStatusForGeneration(generation, status))\n                  .pipe(\n                    Effect.provideService(Scope.Scope, childScope),\n                    Effect.provideContext(provisionContext),\n                  ),\n              ).pipe(Effect.exit);\n              if (Exit.isFailure(provisionExit)) {\n                yield* Scope.close(childScope, Exit.void).pipe(Effect.ignore);\n              }\n              return { childScope, provisionExit };\n            }),\n          );\n\n          if (Exit.isSuccess(provisionExit)) {\n            if ((yield* Ref.get(generationRef)) !== generation) {\n              yield* Scope.close(childScope, Exit.void).pipe(Effect.ignore);\n              return;\n            }\n\n            const active: ActiveManagedWhisper = {\n              model,\n              scope: childScope,\n              process: provisionExit.value,\n              generation,\n            };\n            yield* Scope.addFinalizer(\n              childScope,\n              Ref.update(activeRef, (current) => (current === active ? null : current)),\n            );\n            const committed = yield* transcriptionSemaphore.withPermits(1)(\n              Effect.gen(function* () {\n                if ((yield* Ref.get(generationRef)) !== generation) return false;\n                const previous = yield* Ref.getAndSet(activeRef, active);\n                yield* Ref.set(statusRef, {\n                  configured: true,\n                  state: \"ready\",\n                  downloadedBytes: null,\n                  totalBytes: null,\n                  message: null,\n                });\n                yield* Deferred.succeed(readiness, provisionExit.value.inferenceUrl);\n                if (previous) yield* closeActive(previous);\n                return true;\n              }),\n            );\n            if (!committed) {\n              yield* Scope.close(childScope, Exit.void).pipe(Effect.ignore);\n              return;\n            }\n            yield* monitorActive(active).pipe(\n              Effect.forkIn(parentScope, { startImmediately: true }),\n            );\n            return;\n          }\n\n          if (Cause.hasInterruptsOnly(provisionExit.cause)) {\n            return yield* Effect.interrupt;\n          }\n          lastError = managedWhisperErrorFromCause(provisionExit.cause);\n          if ((yield* Ref.get(generationRef)) !== generation) return;\n          if (attempt < retryDelays.length) {\n            yield* Effect.sleep(retryDelays[attempt]!);\n          }\n        }\n\n        const error =\n          lastError ??\n          new ManagedWhisperError({ detail: \"Unexpected local dictation setup failure.\" });\n        yield* Effect.logError(\"Local dictation model provisioning failed\", {\n          model,\n          cause: error,\n        });\n        if ((yield* Ref.get(generationRef)) !== generation) return;\n        const fallback = yield* Ref.get(activeRef);\n        yield* Ref.set(statusRef, {\n          configured: true,\n          state: \"error\",\n          downloadedBytes: null,\n          totalBytes: null,\n          message: error.detail,\n        });\n        if (fallback) {\n          yield* Deferred.succeed(readiness, fallback.process.inferenceUrl);\n        } else {\n          yield* Deferred.fail(\n            readiness,\n            new LocalTranscriptionError({\n              reason: \"provisioning_failed\",\n              cause: error,\n            }),\n          );\n        }\n      });\n\n    launchModel = (model, failedActive) =>\n      switchSemaphore.withPermits(1)(\n        Effect.gen(function* () {\n          const currentActive = yield* Ref.get(activeRef);\n          if (failedActive && currentActive !== failedActive) return;\n\n          let pending = yield* Ref.get(pendingRef);\n          if (pending && pending.fiber.pollUnsafe() !== undefined) {\n            yield* Ref.update(pendingRef, (current) => (current === pending ? null : current));\n            pending = null;\n          }\n          if (\n            !failedActive &&\n            pending?.model === model &&\n            (yield* Ref.get(statusRef)).state !== \"error\"\n          ) {\n            return;\n          }\n\n          if (!failedActive && currentActive?.model === model) {\n            const generation = (yield* Ref.get(generationRef)) + 1;\n            yield* Ref.set(generationRef, generation);\n            yield* Ref.set(desiredModelRef, model);\n            if (pending) yield* Fiber.interrupt(pending.fiber);\n            const readiness = yield* Deferred.make<URL | null, LocalTranscriptionError>();\n            yield* Deferred.succeed(readiness, currentActive.process.inferenceUrl);\n            yield* replaceReadiness(readiness);\n            yield* Ref.set(statusRef, {\n              configured: true,\n              state: \"ready\",\n              downloadedBytes: null,\n              totalBytes: null,\n              message: null,\n            });\n            return;\n          }\n\n          const generation = (yield* Ref.get(generationRef)) + 1;\n          yield* Ref.set(generationRef, generation);\n          yield* Ref.set(desiredModelRef, model);\n          if (pending) {\n            yield* Fiber.interrupt(pending.fiber);\n          }\n\n          const readiness = yield* Deferred.make<URL | null, LocalTranscriptionError>();\n          yield* replaceReadiness(readiness);\n          yield* Ref.set(statusRef, {\n            configured: true,\n            state: \"checking\",\n            downloadedBytes: null,\n            totalBytes: null,\n            message: failedActive ? \"Restarting local dictation…\" : null,\n          });\n\n          if (failedActive) {\n            yield* transcriptionSemaphore.withPermits(1)(\n              Ref.get(activeRef).pipe(\n                Effect.flatMap((active) =>\n                  active === failedActive\n                    ? Ref.set(activeRef, null).pipe(Effect.andThen(closeActive(failedActive)))\n                    : Effect.void,\n                ),\n              ),\n            );\n          }\n\n          const candidate = runCandidate(model, generation, readiness).pipe(\n            Effect.ensuring(\n              Ref.update(pendingRef, (current) =>\n                current?.generation === generation ? null : current,\n              ),\n            ),\n          );\n          const fiber = yield* candidate.pipe(\n            Effect.forkIn(parentScope, { startImmediately: false }),\n          );\n          yield* Ref.set(pendingRef, { model, generation, fiber });\n          if (fiber.pollUnsafe() !== undefined) {\n            yield* Ref.update(pendingRef, (current) =>\n              current?.generation === generation ? null : current,\n            );\n          }\n        }),\n      );\n\n    const selectModel = (model: TranscriptionModel): Effect.Effect<void> => launchModel(model);\n\n    const transcribe = (\n      request: LocalTranscriptionInput,\n    ): Effect.Effect<TranscriptionResult, LocalTranscriptionError> =>\n      Effect.suspend(() =>\n        Ref.get(readinessRef).pipe(\n          Effect.flatMap((readiness) =>\n            Deferred.await(readiness).pipe(\n              Effect.flatMap((inferenceUrl) =>\n                inferenceUrl === null\n                  ? Effect.succeed({ retry: true as const })\n                  : transcriptionSemaphore.withPermits(1)(\n                      Ref.get(readinessRef).pipe(\n                        Effect.flatMap(\n                          (\n                            currentReadiness,\n                          ): Effect.Effect<\n                            | { readonly retry: true }\n                            | { readonly retry: false; readonly result: TranscriptionResult },\n                            LocalTranscriptionError\n                          > =>\n                            currentReadiness === readiness\n                              ? input\n                                  .transcribeAt(inferenceUrl, request)\n                                  .pipe(Effect.map((result) => ({ retry: false as const, result })))\n                              : Effect.succeed({ retry: true as const }),\n                        ),\n                      ),\n                    ),\n              ),\n            ),\n          ),\n          Effect.flatMap((outcome) =>\n            outcome.retry ? transcribe(request) : Effect.succeed(outcome.result),\n          ),\n        ),\n      );\n\n    yield* selectModel(input.initialModel);\n\n    return {\n      service: LocalTranscription.of({\n        getStatus: Ref.get(statusRef),\n        transcribe,\n      }),\n      selectModel,\n    };\n  });\n}\n\nexport const LocalTranscriptionLive = Layer.effect(\n  LocalTranscription,\n  Effect.gen(function* () {\n    const config = yield* ServerConfig;\n    const httpClient = yield* HttpClient.HttpClient;\n    const inferenceUrl = resolveWhisperInferenceUrl(config.whisperServerUrl);\n\n    const transcribeAt = (\n      targetUrl: URL,\n      input: LocalTranscriptionInput,\n    ): Effect.Effect<TranscriptionResult, LocalTranscriptionError> => {\n      const formData = makeWhisperInferenceFormData(input);\n\n      return httpClient\n        .post(targetUrl, {\n          body: HttpBody.formData(formData),\n        })\n        .pipe(\n          Effect.flatMap(HttpClientResponse.filterStatusOk),\n          Effect.flatMap((response) => response.json),\n          Effect.flatMap((response) => {\n            const text = extractWhisperTranscriptionText(response);\n            return text === null\n              ? Effect.fail(\n                  new LocalTranscriptionError({\n                    reason: \"invalid_response\",\n                  }),\n                )\n              : Effect.succeed({ text } satisfies TranscriptionResult);\n          }),\n          Effect.timeout(WHISPER_REQUEST_TIMEOUT),\n          Effect.mapError((cause) =>\n            cause instanceof LocalTranscriptionError\n              ? cause\n              : new LocalTranscriptionError({\n                  reason: \"upstream_failed\",\n                  cause,\n                }),\n          ),\n        );\n    };\n\n    if (config.whisperServerUrl && !inferenceUrl) {\n      yield* Effect.logWarning(\n        \"Ignoring SALCHI_WHISPER_SERVER_URL because it is not an HTTP(S) loopback URL.\",\n      );\n      return yield* makeLocalTranscription({\n        initialStatus: {\n          configured: false,\n          state: \"error\",\n          downloadedBytes: null,\n          totalBytes: null,\n          message: \"The configured dictation server must use an HTTP(S) loopback URL.\",\n        },\n        transcribeAt,\n      });\n    }\n\n    if (inferenceUrl) {\n      return yield* makeLocalTranscription({\n        initialStatus: {\n          configured: true,\n          state: \"ready\",\n          downloadedBytes: null,\n          totalBytes: null,\n          message: null,\n        },\n        initialInferenceUrl: inferenceUrl,\n        transcribeAt,\n      });\n    }\n\n    if (config.whisperAutoProvision === false) {\n      return yield* makeLocalTranscription({\n        initialStatus: {\n          configured: false,\n          state: \"unavailable\",\n          downloadedBytes: null,\n          totalBytes: null,\n          message: null,\n        },\n        transcribeAt,\n      });\n    }\n\n    if (!resolveManagedWhisperRuntimeAsset(process.platform, process.arch)) {\n      return yield* makeLocalTranscription({\n        initialStatus: {\n          configured: false,\n          state: \"unavailable\",\n          downloadedBytes: null,\n          totalBytes: null,\n          message: `Automatic dictation installation is unavailable for ${process.platform}/${process.arch}.`,\n        },\n        transcribeAt,\n      });\n    }\n\n    const serverSettingsOption = yield* Effect.serviceOption(ServerSettingsService);\n    const initialModel = Option.isSome(serverSettingsOption)\n      ? yield* serverSettingsOption.value.getSettings.pipe(\n          Effect.map((settings) => settings.transcriptionModel),\n          Effect.orElseSucceed(() => DEFAULT_TRANSCRIPTION_MODEL),\n        )\n      : DEFAULT_TRANSCRIPTION_MODEL;\n    const managed = yield* makeManagedLocalTranscription({\n      initialModel,\n      provision: (model, onStatus) => provisionManagedWhisper({ model, onStatus }),\n      transcribeAt,\n    });\n    if (Option.isSome(serverSettingsOption)) {\n      yield* serverSettingsOption.value.streamChanges.pipe(\n        Stream.map((settings) => settings.transcriptionModel),\n        Stream.changes,\n        Stream.runForEach(managed.selectModel),\n        Effect.forkScoped,\n      );\n    }\n    return managed.service;\n  }),\n);\n","import {\n  TRANSCRIPTION_AUDIO_MAX_BYTES,\n  TRANSCRIPTION_ROUTE_PATH,\n  TRANSCRIPTION_STATUS_ROUTE_PATH,\n  type TranscriptionErrorResponse,\n  type TranscriptionResult,\n  type TranscriptionStatus,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport * as FileSystem from \"effect/FileSystem\";\nimport * as Layer from \"effect/Layer\";\nimport { HttpRouter, HttpServerRequest, HttpServerResponse, Multipart } from \"effect/unstable/http\";\n\nimport { ServerAuth } from \"../auth/Services/ServerAuth.ts\";\nimport { respondToAuthError } from \"../auth/http.ts\";\nimport { LocalTranscription } from \"./LocalTranscription.ts\";\n\nconst SUPPORTED_AUDIO_TYPES = new Set([\n  \"audio/mp4\",\n  \"audio/mpeg\",\n  \"audio/ogg\",\n  \"audio/wav\",\n  \"audio/webm\",\n  \"audio/x-wav\",\n]);\n\nconst multipartLimits = Multipart.limitsServices({\n  maxParts: 1,\n  maxFileSize: TRANSCRIPTION_AUDIO_MAX_BYTES,\n  maxTotalSize: TRANSCRIPTION_AUDIO_MAX_BYTES + 64 * 1024,\n});\n\nconst requireAuthenticatedRequest = Effect.gen(function* () {\n  const request = yield* HttpServerRequest.HttpServerRequest;\n  const serverAuth = yield* ServerAuth;\n  yield* serverAuth.authenticateHttpRequest(request);\n});\n\nfunction jsonError(status: number, code: TranscriptionErrorResponse[\"code\"], error: string) {\n  return HttpServerResponse.jsonUnsafe({ code, error } satisfies TranscriptionErrorResponse, {\n    status,\n  });\n}\n\nfunction normalizeAudioContentType(contentType: string): string {\n  return contentType.split(\";\", 1)[0]?.trim().toLowerCase() ?? \"\";\n}\n\nconst transcriptionStatusRouteLayer = HttpRouter.add(\n  \"GET\",\n  TRANSCRIPTION_STATUS_ROUTE_PATH,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const transcription = yield* LocalTranscription;\n    const status = yield* transcription.getStatus;\n    return HttpServerResponse.jsonUnsafe(status satisfies TranscriptionStatus, { status: 200 });\n  }).pipe(Effect.catchTag(\"AuthError\", respondToAuthError)),\n);\n\nconst transcriptionPostRouteLayer = HttpRouter.add(\n  \"POST\",\n  TRANSCRIPTION_ROUTE_PATH,\n  Effect.gen(function* () {\n    yield* requireAuthenticatedRequest;\n    const request = yield* HttpServerRequest.HttpServerRequest;\n    const transcription = yield* LocalTranscription;\n    const status = yield* transcription.getStatus;\n\n    if (!status.configured) {\n      return jsonError(503, \"not_configured\", \"Local transcription is not configured.\");\n    }\n\n    const multipart = yield* request.multipart.pipe(Effect.provideContext(multipartLimits));\n    const fileParts = multipart.file;\n    if (!Array.isArray(fileParts) || fileParts.length !== 1) {\n      return jsonError(400, \"invalid_audio\", \"Expected exactly one audio file.\");\n    }\n\n    const [file] = fileParts;\n    if (!file || file._tag !== \"PersistedFile\") {\n      return jsonError(400, \"invalid_audio\", \"Expected exactly one audio file.\");\n    }\n\n    const contentType = normalizeAudioContentType(file.contentType);\n    if (!SUPPORTED_AUDIO_TYPES.has(contentType)) {\n      return jsonError(415, \"invalid_audio\", \"Unsupported audio format.\");\n    }\n\n    const fileSystem = yield* FileSystem.FileSystem;\n    const audio = yield* fileSystem.readFile(file.path);\n    if (audio.length === 0) {\n      return jsonError(400, \"invalid_audio\", \"The audio recording is empty.\");\n    }\n\n    const result = yield* transcription.transcribe({\n      audio,\n      contentType,\n    });\n    return HttpServerResponse.jsonUnsafe(result satisfies TranscriptionResult, { status: 200 });\n  }).pipe(\n    Effect.catchTags({\n      AuthError: respondToAuthError,\n      MultipartError: (error) =>\n        error.reason._tag === \"FileTooLarge\" || error.reason._tag === \"BodyTooLarge\"\n          ? Effect.succeed(jsonError(413, \"audio_too_large\", \"The audio recording is too large.\"))\n          : Effect.succeed(jsonError(400, \"invalid_audio\", \"Invalid audio upload.\")),\n      LocalTranscriptionError: (error) =>\n        Effect.succeed(\n          error.reason === \"not_configured\"\n            ? jsonError(503, \"not_configured\", \"Local transcription is not configured.\")\n            : jsonError(502, \"transcription_failed\", \"Local transcription failed.\"),\n        ),\n    }),\n    Effect.catch((cause) =>\n      Effect.logError(\"Failed to process transcription upload\", { cause }).pipe(\n        Effect.as(jsonError(500, \"transcription_failed\", \"Local transcription failed.\")),\n      ),\n    ),\n  ),\n);\n\nexport const transcriptionHttpRouteLayer = Layer.merge(\n  transcriptionStatusRouteLayer,\n  transcriptionPostRouteLayer,\n);\n","import {\n  ClientOrchestrationCommand,\n  OrchestrationDispatchCommandError,\n  OrchestrationGetSnapshotError,\n  type OrchestrationReadModel,\n} from \"@salchi/contracts\";\nimport * as Effect from \"effect/Effect\";\nimport { HttpRouter, HttpServerRequest, HttpServerResponse } from \"effect/unstable/http\";\n\nimport { ServerAuth } from \"../auth/Services/ServerAuth.ts\";\nimport { normalizeDispatchCommand } from \"./Normalizer.ts\";\nimport { OrchestrationEngineService } from \"./Services/OrchestrationEngine.ts\";\nimport { ProjectionSnapshotQuery } from \"./Services/ProjectionSnapshotQuery.ts\";\n\nconst respondToOrchestrationHttpError = (\n  error: OrchestrationDispatchCommandError | OrchestrationGetSnapshotError,\n) =>\n  Effect.gen(function* () {\n    if (error._tag === \"OrchestrationGetSnapshotError\") {\n      yield* Effect.logError(\"orchestration http route failed\", {\n        message: error.message,\n        cause: error.cause,\n      });\n      return HttpServerResponse.jsonUnsafe({ error: error.message }, { status: 500 });\n    }\n\n    return HttpServerResponse.jsonUnsafe({ error: error.message }, { status: 400 });\n  });\n\nconst authenticateOwnerSession = Effect.gen(function* () {\n  const request = yield* HttpServerRequest.HttpServerRequest;\n  const serverAuth = yield* ServerAuth;\n  const session = yield* serverAuth.authenticateHttpRequest(request);\n  if (session.role !== \"owner\") {\n    return yield* new OrchestrationDispatchCommandError({\n      message: \"Only owner sessions can manage projects.\",\n    });\n  }\n  return session;\n});\n\nexport const orchestrationSnapshotRouteLayer = HttpRouter.add(\n  \"GET\",\n  \"/api/orchestration/snapshot\",\n  Effect.gen(function* () {\n    yield* authenticateOwnerSession;\n    const projectionSnapshotQuery = yield* ProjectionSnapshotQuery;\n    const snapshot = yield* projectionSnapshotQuery.getSnapshot().pipe(\n      Effect.mapError(\n        (cause) =>\n          new OrchestrationGetSnapshotError({\n            message: \"Failed to load orchestration snapshot.\",\n            cause,\n          }),\n      ),\n    );\n    return HttpServerResponse.jsonUnsafe(snapshot satisfies OrchestrationReadModel, {\n      status: 200,\n    });\n  }).pipe(\n    Effect.catchTags({\n      OrchestrationDispatchCommandError: respondToOrchestrationHttpError,\n      OrchestrationGetSnapshotError: respondToOrchestrationHttpError,\n    }),\n  ),\n);\n\nexport const orchestrationDispatchRouteLayer = HttpRouter.add(\n  \"POST\",\n  \"/api/orchestration/dispatch\",\n  Effect.gen(function* () {\n    yield* authenticateOwnerSession;\n    const orchestrationEngine = yield* OrchestrationEngineService;\n    const command = yield* HttpServerRequest.schemaBodyJson(ClientOrchestrationCommand).pipe(\n      Effect.mapError(\n        (cause) =>\n          new OrchestrationDispatchCommandError({\n            message: \"Invalid orchestration command payload.\",\n            cause,\n          }),\n      ),\n    );\n    const normalizedCommand = yield* normalizeDispatchCommand(command);\n    const result = yield* orchestrationEngine.dispatch(normalizedCommand).pipe(\n      Effect.mapError(\n        (cause) =>\n          new OrchestrationDispatchCommandError({\n            message: \"Failed to dispatch orchestration command.\",\n            cause,\n          }),\n      ),\n    );\n    return HttpServerResponse.jsonUnsafe(result, { status: 200 });\n  }).pipe(Effect.catchTag(\"OrchestrationDispatchCommandError\", respondToOrchestrationHttpError)),\n);\n","import * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport { FetchHttpClient, HttpRouter, HttpServer } from \"effect/unstable/http\";\n\nimport { ServerConfig, type ServerConfigShape } from \"./config.ts\";\nimport {\n  attachmentsRouteLayer,\n  otlpTracesProxyRouteLayer,\n  projectFaviconRouteLayer,\n  serverEnvironmentRouteLayer,\n  staticAndDevRouteLayer,\n  browserApiCorsLayer,\n  workspaceGitImageRouteLayer,\n  workspaceImageRouteLayer,\n  workspaceVideoRouteLayer,\n} from \"./http.ts\";\nimport { fixPath } from \"./os-jank.ts\";\nimport { websocketRpcRouteLayer } from \"./ws.ts\";\nimport * as ExternalLauncher from \"./process/externalLauncher.ts\";\nimport { layerConfig as SqlitePersistenceLayerLive } from \"./persistence/Layers/Sqlite.ts\";\nimport { ServerLifecycleEventsLive } from \"./serverLifecycleEvents.ts\";\nimport { AnalyticsServiceLayerLive } from \"./telemetry/Layers/AnalyticsService.ts\";\nimport { ProviderSessionDirectoryLive } from \"./provider/Layers/ProviderSessionDirectory.ts\";\nimport { ProviderSessionRuntimeRepositoryLive } from \"./persistence/Layers/ProviderSessionRuntime.ts\";\nimport { ProviderAdapterRegistryLive } from \"./provider/Layers/ProviderAdapterRegistry.ts\";\nimport { ProviderEventLoggersLive } from \"./provider/Layers/ProviderEventLoggers.ts\";\nimport { ProviderServiceLive } from \"./provider/Layers/ProviderService.ts\";\nimport { ProviderSessionReaperLive } from \"./provider/Layers/ProviderSessionReaper.ts\";\nimport { OpenCodeRuntimeLive } from \"./provider/opencodeRuntime.ts\";\nimport { CheckpointDiffQueryLive } from \"./checkpointing/Layers/CheckpointDiffQuery.ts\";\nimport { CheckpointStoreLive } from \"./checkpointing/Layers/CheckpointStore.ts\";\nimport * as AzureDevOpsCli from \"./sourceControl/AzureDevOpsCli.ts\";\nimport * as BitbucketApi from \"./sourceControl/BitbucketApi.ts\";\nimport * as GitHubCli from \"./sourceControl/GitHubCli.ts\";\nimport * as GitLabCli from \"./sourceControl/GitLabCli.ts\";\nimport * as TextGeneration from \"./textGeneration/TextGeneration.ts\";\nimport { ProviderInstanceRegistryHydrationLive } from \"./provider/Layers/ProviderInstanceRegistryHydration.ts\";\nimport { TerminalManagerLive } from \"./terminal/Layers/Manager.ts\";\nimport * as GitManager from \"./git/GitManager.ts\";\nimport { KeybindingsLive } from \"./keybindings.ts\";\nimport { ServerRuntimeStartup, ServerRuntimeStartupLive } from \"./serverRuntimeStartup.ts\";\nimport { OrchestrationReactorLive } from \"./orchestration/Layers/OrchestrationReactor.ts\";\nimport { RuntimeReceiptBusLive } from \"./orchestration/Layers/RuntimeReceiptBus.ts\";\nimport { ProviderRuntimeIngestionLive } from \"./orchestration/Layers/ProviderRuntimeIngestion.ts\";\nimport { ProviderCommandReactorLive } from \"./orchestration/Layers/ProviderCommandReactor.ts\";\nimport { CheckpointReactorLive } from \"./orchestration/Layers/CheckpointReactor.ts\";\nimport { ThreadDeletionReactorLive } from \"./orchestration/Layers/ThreadDeletionReactor.ts\";\nimport { ProviderRegistryLive } from \"./provider/Layers/ProviderRegistry.ts\";\nimport * as ProviderMaintenanceRunner from \"./provider/providerMaintenanceRunner.ts\";\nimport { ServerSettingsLive } from \"./serverSettings.ts\";\nimport { ProjectFaviconResolverLive } from \"./project/Layers/ProjectFaviconResolver.ts\";\nimport { RepositoryIdentityResolverLive } from \"./project/Layers/RepositoryIdentityResolver.ts\";\nimport { WorkspaceEntriesLive } from \"./workspace/Layers/WorkspaceEntries.ts\";\nimport { WorkspaceFileSystemLive } from \"./workspace/Layers/WorkspaceFileSystem.ts\";\nimport { WorkspacePathsLive } from \"./workspace/Layers/WorkspacePaths.ts\";\nimport * as GitVcsDriver from \"./vcs/GitVcsDriver.ts\";\nimport * as VcsDriverRegistry from \"./vcs/VcsDriverRegistry.ts\";\nimport * as VcsProjectConfig from \"./vcs/VcsProjectConfig.ts\";\nimport * as VcsProcess from \"./vcs/VcsProcess.ts\";\nimport * as VcsProvisioningService from \"./vcs/VcsProvisioningService.ts\";\nimport * as VcsStatusBroadcaster from \"./vcs/VcsStatusBroadcaster.ts\";\nimport * as GitWorkflowService from \"./git/GitWorkflowService.ts\";\nimport * as SourceControlProviderRegistry from \"./sourceControl/SourceControlProviderRegistry.ts\";\nimport * as SourceControlRepositoryService from \"./sourceControl/SourceControlRepositoryService.ts\";\nimport { ProjectSetupScriptRunnerLive } from \"./project/Layers/ProjectSetupScriptRunner.ts\";\nimport { ObservabilityLive } from \"./observability/Layers/Observability.ts\";\nimport { ServerEnvironmentLive } from \"./environment/Layers/ServerEnvironment.ts\";\nimport {\n  authBearerBootstrapRouteLayer,\n  authBrowserSessionRouteLayer,\n  authBootstrapRouteLayer,\n  authClientsRevokeOthersRouteLayer,\n  authClientsRevokeRouteLayer,\n  authClientsRouteLayer,\n  authPairingLinksRevokeRouteLayer,\n  authPairingLinksRouteLayer,\n  authPairingCredentialRouteLayer,\n  authSessionRouteLayer,\n  authTokenExchangeRouteLayer,\n  authWebSocketTicketRouteLayer,\n  authWebSocketTokenRouteLayer,\n} from \"./auth/http.ts\";\nimport { ServerSecretStoreLive } from \"./auth/Layers/ServerSecretStore.ts\";\nimport { ServerAuthLive } from \"./auth/Layers/ServerAuth.ts\";\nimport * as ProcessDiagnostics from \"./diagnostics/ProcessDiagnostics.ts\";\nimport * as ProcessResourceMonitor from \"./diagnostics/ProcessResourceMonitor.ts\";\nimport * as TraceDiagnostics from \"./diagnostics/TraceDiagnostics.ts\";\nimport { webResumeDiagnosticsRouteLayer } from \"./diagnostics/WebResumeLog.ts\";\nimport { OrchestrationLayerLive } from \"./orchestration/runtimeLayer.ts\";\nimport { WebPushSubscriptionRepositoryLive } from \"./persistence/Layers/WebPushSubscriptions.ts\";\nimport { WebPushNotificationReactorLive } from \"./push/Layers/WebPushNotificationReactor.ts\";\nimport { WebPushServiceLive } from \"./push/Layers/WebPushService.ts\";\nimport { LocalTranscriptionLive } from \"./transcription/LocalTranscription.ts\";\nimport { transcriptionHttpRouteLayer } from \"./transcription/http.ts\";\nimport {\n  clearPersistedServerRuntimeState,\n  makePersistedServerRuntimeState,\n  persistServerRuntimeState,\n} from \"./serverRuntimeState.ts\";\nimport {\n  orchestrationDispatchRouteLayer,\n  orchestrationSnapshotRouteLayer,\n} from \"./orchestration/http.ts\";\nimport * as NetService from \"@salchi/shared/Net\";\nimport { disableTailscaleServe, ensureTailscaleServe } from \"@salchi/tailscale\";\n\n// Effect's default preemptive shutdown waits 20s before finalizing request scopes.\n// Salchi's primary transport is long-lived WebSocket RPC, whose Effect scope finalizer\n// already closes the websocket gracefully. Do not add an artificial drain before\n// those finalizers get a chance to run.\nexport const HTTP_PREEMPTIVE_SHUTDOWN_GRACE_MS = 0;\n\ntype HttpServerConfig = Pick<ServerConfigShape, \"host\" | \"port\">;\n\nexport const makeBunHttpServerOptions = (config: HttpServerConfig) => ({\n  port: config.port,\n  ...(config.host ? { hostname: config.host } : {}),\n  gracefulShutdownTimeout: HTTP_PREEMPTIVE_SHUTDOWN_GRACE_MS,\n});\n\nexport const makeNodeHttpServerOptions = (config: HttpServerConfig) => ({\n  host: config.host,\n  port: config.port,\n  gracefulShutdownTimeout: HTTP_PREEMPTIVE_SHUTDOWN_GRACE_MS,\n});\n\nconst PtyAdapterLive = Layer.unwrap(\n  Effect.gen(function* () {\n    if (typeof Bun !== \"undefined\") {\n      const BunPTY = yield* Effect.promise(() => import(\"./terminal/Layers/BunPTY.ts\"));\n      return BunPTY.layer;\n    } else {\n      const NodePTY = yield* Effect.promise(() => import(\"./terminal/Layers/NodePTY.ts\"));\n      return NodePTY.layer;\n    }\n  }),\n);\n\nconst HttpServerLive = Layer.unwrap(\n  Effect.gen(function* () {\n    const config = yield* ServerConfig;\n    if (typeof Bun !== \"undefined\") {\n      const BunHttpServer = yield* Effect.promise(\n        () => import(\"@effect/platform-bun/BunHttpServer\"),\n      );\n      return BunHttpServer.layer(makeBunHttpServerOptions(config));\n    } else {\n      const [NodeHttpServer, NodeHttp] = yield* Effect.all([\n        Effect.promise(() => import(\"@effect/platform-node/NodeHttpServer\")),\n        Effect.promise(() => import(\"node:http\")),\n      ]);\n      return NodeHttpServer.layer(NodeHttp.createServer, makeNodeHttpServerOptions(config));\n    }\n  }),\n);\n\nconst PlatformServicesLive = Layer.unwrap(\n  Effect.gen(function* () {\n    if (typeof Bun !== \"undefined\") {\n      const { layer } = yield* Effect.promise(() => import(\"@effect/platform-bun/BunServices\"));\n      return layer;\n    } else {\n      const { layer } = yield* Effect.promise(() => import(\"@effect/platform-node/NodeServices\"));\n      return layer;\n    }\n  }),\n);\n\nconst ReactorLayerLive = Layer.empty.pipe(\n  Layer.provideMerge(OrchestrationReactorLive),\n  Layer.provideMerge(ProviderRuntimeIngestionLive),\n  Layer.provideMerge(ProviderCommandReactorLive),\n  Layer.provideMerge(CheckpointReactorLive),\n  Layer.provideMerge(ThreadDeletionReactorLive),\n  Layer.provideMerge(WebPushNotificationReactorLive),\n  Layer.provideMerge(RuntimeReceiptBusLive),\n);\n\nconst ProviderSessionDirectoryLayerLive = ProviderSessionDirectoryLive.pipe(\n  Layer.provide(ProviderSessionRuntimeRepositoryLive),\n);\n\n// `ProviderAdapterRegistryLive` is now a facade that resolves kind → adapter\n// by looking up the default `ProviderInstance` per driver in the instance\n// registry. Adapter construction itself moved inside each driver's\n// `create()`; `ProviderEventLoggersLive` owns the shared native/canonical\n// NDJSON writers and is provided at the outer runtime layer so both\n// `ProviderService` and the per-instance drivers read the same logger pair.\nconst ProviderLayerLive = ProviderServiceLive.pipe(\n  Layer.provide(ProviderAdapterRegistryLive),\n  Layer.provideMerge(ProviderSessionDirectoryLayerLive),\n);\n\nconst PersistenceLayerLive = Layer.empty.pipe(Layer.provideMerge(SqlitePersistenceLayerLive));\n\nconst VcsDriverRegistryLayerLive = VcsDriverRegistry.layer.pipe(\n  Layer.provide(VcsProjectConfig.layer),\n);\n\nconst SourceControlProviderRegistryLayerLive = SourceControlProviderRegistry.layer.pipe(\n  Layer.provide(\n    Layer.mergeAll(AzureDevOpsCli.layer, BitbucketApi.layer, GitHubCli.layer, GitLabCli.layer),\n  ),\n  Layer.provideMerge(GitVcsDriver.layer),\n  Layer.provideMerge(VcsDriverRegistryLayerLive),\n);\n\nconst GitManagerLayerLive = GitManager.layer.pipe(\n  Layer.provideMerge(ProjectSetupScriptRunnerLive),\n  Layer.provideMerge(GitVcsDriver.layer),\n  Layer.provideMerge(SourceControlProviderRegistryLayerLive),\n  Layer.provideMerge(TextGeneration.layer),\n);\n\nconst GitLayerLive = Layer.empty.pipe(\n  Layer.provideMerge(GitManagerLayerLive),\n  Layer.provideMerge(GitVcsDriver.layer),\n);\n\nconst GitWorkflowLayerLive = GitWorkflowService.layer.pipe(\n  Layer.provideMerge(VcsDriverRegistryLayerLive),\n  Layer.provideMerge(GitLayerLive),\n);\n\nconst SourceControlRepositoryServiceLayerLive = SourceControlRepositoryService.layer.pipe(\n  Layer.provideMerge(GitVcsDriver.layer),\n  Layer.provideMerge(SourceControlProviderRegistryLayerLive),\n);\n\nconst VcsLayerLive = Layer.empty.pipe(\n  Layer.provideMerge(VcsProjectConfig.layer),\n  Layer.provideMerge(VcsDriverRegistryLayerLive),\n  Layer.provideMerge(VcsProvisioningService.layer.pipe(Layer.provide(VcsDriverRegistryLayerLive))),\n  Layer.provideMerge(GitWorkflowLayerLive),\n  Layer.provideMerge(SourceControlRepositoryServiceLayerLive),\n  Layer.provideMerge(VcsStatusBroadcaster.layer.pipe(Layer.provide(GitWorkflowLayerLive))),\n);\n\nconst CheckpointingLayerLive = Layer.empty.pipe(\n  Layer.provideMerge(CheckpointDiffQueryLive),\n  Layer.provideMerge(CheckpointStoreLive.pipe(Layer.provide(VcsDriverRegistryLayerLive))),\n);\n\nconst TerminalLayerLive = TerminalManagerLive.pipe(Layer.provide(PtyAdapterLive));\n\nconst WorkspaceEntriesLayerLive = WorkspaceEntriesLive.pipe(\n  Layer.provide(WorkspacePathsLive),\n  Layer.provideMerge(VcsDriverRegistryLayerLive),\n);\n\nconst WorkspaceFileSystemLayerLive = WorkspaceFileSystemLive.pipe(\n  Layer.provide(WorkspacePathsLive),\n  Layer.provide(WorkspaceEntriesLayerLive),\n);\n\nconst WorkspaceLayerLive = Layer.mergeAll(\n  WorkspacePathsLive,\n  WorkspaceEntriesLayerLive,\n  WorkspaceFileSystemLayerLive,\n);\n\nconst AuthLayerLive = ServerAuthLive.pipe(\n  Layer.provideMerge(PersistenceLayerLive),\n  Layer.provide(ServerSecretStoreLive),\n);\n\nconst WebPushLayerLive = WebPushServiceLive.pipe(\n  Layer.provideMerge(WebPushSubscriptionRepositoryLive),\n  Layer.provideMerge(PersistenceLayerLive),\n  Layer.provide(ServerSecretStoreLive),\n);\n\nconst ProviderRuntimeLayerLive = ProviderSessionReaperLive.pipe(\n  Layer.provideMerge(ProviderLayerLive),\n  Layer.provideMerge(OrchestrationLayerLive),\n);\n\nconst RuntimeCoreDependenciesLive = ReactorLayerLive.pipe(\n  // Core Services\n  Layer.provideMerge(CheckpointingLayerLive),\n  Layer.provideMerge(SourceControlProviderRegistryLayerLive),\n  Layer.provideMerge(GitLayerLive),\n  Layer.provideMerge(VcsLayerLive),\n  Layer.provideMerge(ProviderRuntimeLayerLive),\n  Layer.provideMerge(TerminalLayerLive),\n  Layer.provideMerge(PersistenceLayerLive),\n  Layer.provideMerge(KeybindingsLive),\n  Layer.provideMerge(\n    ProviderMaintenanceRunner.layer.pipe(Layer.provideMerge(ProviderRegistryLive)),\n  ),\n  // The instance registry is the new routing keystone — text generation,\n  // adapter lookup, and runtime ingestion all resolve `ProviderInstanceId`\n  // through this layer. Built-in drivers come from `BUILT_IN_DRIVERS`;\n  // `providerInstances` hydration merges `settings.providers.<kind>`\n  // with explicit `providerInstances` entries on boot.\n  Layer.provideMerge(ProviderInstanceRegistryHydrationLive),\n  // Shared native/canonical NDJSON writers used by both the per-instance\n  // drivers (native stream, written from inside each `<X>Adapter`) and\n  // `ProviderService` (canonical stream, written after event normalization).\n  // Provided once at the runtime level so every consumer sees the same\n  // logger instances.\n  Layer.provideMerge(ProviderEventLoggersLive),\n  // `OpenCodeDriver.create()` yields `OpenCodeRuntime`; previously the old\n  // `ProviderRegistryLive` pulled `OpenCodeRuntimeLive` in for itself, but\n  // the rewritten registry reads snapshots off the instance registry and\n  // no longer transitively provides it. Exposing it at the runtime level\n  // keeps a single Live for all opencode consumers.\n  Layer.provideMerge(OpenCodeRuntimeLive),\n  // Managed dictation reads and watches the server-authoritative model\n  // selection. ServerSettingsLive follows it so Effect supplies that\n  // dependency to the transcription layer while exposing both services.\n  Layer.provideMerge(LocalTranscriptionLive),\n  Layer.provideMerge(ServerSettingsLive),\n  Layer.provideMerge(WorkspaceLayerLive),\n  Layer.provideMerge(ProjectFaviconResolverLive),\n  Layer.provideMerge(RepositoryIdentityResolverLive),\n  Layer.provideMerge(ServerEnvironmentLive),\n  Layer.provideMerge(AuthLayerLive),\n  Layer.provideMerge(WebPushLayerLive),\n);\n\nconst RuntimeDependenciesLive = RuntimeCoreDependenciesLive.pipe(\n  // Misc.\n  Layer.provideMerge(ProcessDiagnostics.layer),\n  Layer.provideMerge(ProcessResourceMonitor.layer),\n  Layer.provideMerge(TraceDiagnostics.layer),\n  Layer.provideMerge(AnalyticsServiceLayerLive),\n  Layer.provideMerge(ExternalLauncher.layer),\n  Layer.provideMerge(ServerLifecycleEventsLive),\n  Layer.provide(NetService.layer),\n);\n\nconst RuntimeServicesLive = ServerRuntimeStartupLive.pipe(\n  Layer.provideMerge(RuntimeDependenciesLive),\n);\n\nexport const makeRoutesLayer = Layer.mergeAll(\n  authBearerBootstrapRouteLayer,\n  authBrowserSessionRouteLayer,\n  authBootstrapRouteLayer,\n  authClientsRevokeOthersRouteLayer,\n  authClientsRevokeRouteLayer,\n  authClientsRouteLayer,\n  authPairingLinksRevokeRouteLayer,\n  authPairingLinksRouteLayer,\n  authPairingCredentialRouteLayer,\n  authSessionRouteLayer,\n  authTokenExchangeRouteLayer,\n  authWebSocketTicketRouteLayer,\n  authWebSocketTokenRouteLayer,\n  attachmentsRouteLayer,\n  transcriptionHttpRouteLayer,\n  orchestrationDispatchRouteLayer,\n  orchestrationSnapshotRouteLayer,\n  otlpTracesProxyRouteLayer,\n  projectFaviconRouteLayer,\n  serverEnvironmentRouteLayer,\n  webResumeDiagnosticsRouteLayer,\n  workspaceGitImageRouteLayer,\n  workspaceImageRouteLayer,\n  workspaceVideoRouteLayer,\n  staticAndDevRouteLayer,\n  websocketRpcRouteLayer,\n).pipe(Layer.provide(browserApiCorsLayer));\n\nexport const makeServerLayer = Layer.unwrap(\n  Effect.gen(function* () {\n    const config = yield* ServerConfig;\n\n    fixPath();\n\n    const httpListeningLayer = Layer.effectDiscard(\n      Effect.gen(function* () {\n        yield* HttpServer.HttpServer;\n        const startup = yield* ServerRuntimeStartup;\n        yield* startup.markHttpListening;\n      }),\n    );\n    const runtimeStateLayer = Layer.effectDiscard(\n      Effect.acquireRelease(\n        Effect.gen(function* () {\n          const server = yield* HttpServer.HttpServer;\n          const address = server.address;\n          if (typeof address === \"string\" || !(\"port\" in address)) {\n            return;\n          }\n\n          const state = yield* makePersistedServerRuntimeState({\n            config,\n            port: address.port,\n          });\n          yield* persistServerRuntimeState({\n            path: config.serverRuntimeStatePath,\n            state,\n          });\n        }),\n        () => clearPersistedServerRuntimeState(config.serverRuntimeStatePath),\n      ),\n    );\n    const tailscaleServeLayer = config.tailscaleServeEnabled\n      ? Layer.effectDiscard(\n          Effect.acquireRelease(\n            Effect.gen(function* () {\n              const server = yield* HttpServer.HttpServer;\n              const address = server.address;\n              if (typeof address === \"string\" || !(\"port\" in address)) {\n                return null;\n              }\n\n              const localPort = address.port;\n              return yield* ensureTailscaleServe({\n                localPort,\n                servePort: config.tailscaleServePort,\n                localHost: \"127.0.0.1\",\n              }).pipe(\n                Effect.as({ localPort, servePort: config.tailscaleServePort }),\n                Effect.tap(() =>\n                  Effect.logInfo(\"Tailscale Serve configured\", {\n                    localPort,\n                    servePort: config.tailscaleServePort,\n                  }),\n                ),\n                Effect.catch((cause) =>\n                  Effect.logWarning(\"Failed to configure Tailscale Serve\", {\n                    cause,\n                    localPort,\n                    servePort: config.tailscaleServePort,\n                  }).pipe(Effect.as(null)),\n                ),\n              );\n            }),\n            (configured) =>\n              configured\n                ? disableTailscaleServe({ servePort: configured.servePort }).pipe(\n                    Effect.tap(() =>\n                      Effect.logInfo(\"Tailscale Serve disabled\", {\n                        servePort: configured.servePort,\n                      }),\n                    ),\n                    Effect.catch((cause) =>\n                      Effect.logWarning(\"Failed to disable Tailscale Serve\", {\n                        cause,\n                        servePort: configured.servePort,\n                      }),\n                    ),\n                  )\n                : Effect.void,\n          ),\n        )\n      : Layer.empty;\n\n    const serverApplicationLayer = Layer.mergeAll(\n      HttpRouter.serve(makeRoutesLayer, {\n        disableLogger: !config.logWebSocketEvents,\n      }),\n      httpListeningLayer,\n      runtimeStateLayer,\n      tailscaleServeLayer,\n    );\n\n    return serverApplicationLayer.pipe(\n      Layer.provideMerge(RuntimeServicesLive),\n      Layer.provideMerge(HttpServerLive),\n      Layer.provide(ObservabilityLive),\n      Layer.provideMerge(FetchHttpClient.layer),\n      Layer.provideMerge(VcsProcess.layer),\n      Layer.provideMerge(PlatformServicesLive),\n    );\n  }),\n);\n\n// Important: Only `ServerConfig` should be provided by the CLI layer!!! Don't let other requirements leak into the launch layer.\nexport const runServer = Layer.launch(makeServerLayer);\n","import * as Effect from \"effect/Effect\";\nimport { Command, GlobalFlag } from \"effect/unstable/cli\";\n\nimport { ServerConfig, type StartupPresentation } from \"../config.ts\";\nimport { runServer } from \"../server.ts\";\nimport { type CliServerFlags, resolveServerConfig, sharedServerCommandFlags } from \"./config.ts\";\n\nexport const runServerCommand = (\n  flags: CliServerFlags,\n  options?: {\n    readonly startupPresentation?: StartupPresentation;\n    readonly forceAutoBootstrapProjectFromCwd?: boolean;\n    readonly defaultHost?: string;\n    readonly defaultTailscaleServeEnabled?: boolean;\n    readonly defaultTailscaleServePort?: number;\n  },\n) =>\n  Effect.gen(function* () {\n    const logLevel = yield* GlobalFlag.LogLevel;\n    const config = yield* resolveServerConfig(flags, logLevel, options);\n    return yield* runServer.pipe(Effect.provideService(ServerConfig, config));\n  });\n\nexport const startCommand = Command.make(\"start\", { ...sharedServerCommandFlags }).pipe(\n  Command.withDescription(\"Run the Salchi server.\"),\n  Command.withHandler((flags) => runServerCommand(flags)),\n);\n\nexport const serveCommand = Command.make(\"serve\", { ...sharedServerCommandFlags }).pipe(\n  Command.withDescription(\n    \"Run the Salchi server without opening a browser and print headless pairing details.\",\n  ),\n  Command.withHandler((flags) =>\n    runServerCommand(flags, {\n      startupPresentation: \"headless\",\n      forceAutoBootstrapProjectFromCwd: false,\n    }),\n  ),\n);\n","import { Command } from \"effect/unstable/cli\";\n\nimport { authCommand } from \"./auth.ts\";\nimport { sharedServerCommandFlags } from \"./config.ts\";\nimport { projectCommand } from \"./project.ts\";\nimport { runServerCommand, serveCommand, startCommand } from \"./server.ts\";\n\nexport const cli = Command.make(\"salchi\", { ...sharedServerCommandFlags }).pipe(\n  Command.withDescription(\"Run the Salchi server.\"),\n  Command.withHandler((flags) => runServerCommand(flags)),\n  Command.withSubcommands([startCommand, serveCommand, authCommand, projectCommand]),\n);\n","export type ShutdownSignal = \"SIGINT\" | \"SIGTERM\";\n\nexport interface ProcessShutdownWatchdogHost<Deadline = unknown> {\n  readonly addSignalListener: (signal: ShutdownSignal, listener: () => void) => void;\n  readonly removeSignalListener: (signal: ShutdownSignal, listener: () => void) => void;\n  readonly scheduleDeadline: (callback: () => void, delayMs: number) => Deadline;\n  readonly cancelDeadline: (deadline: Deadline) => void;\n  readonly exit: (code: number) => void;\n  readonly warn: (message: string) => void;\n}\n\nexport interface ProcessShutdownWatchdogOptions {\n  readonly timeoutMs?: number;\n}\n\nexport const PROCESS_SHUTDOWN_TIMEOUT_MS = 3_000;\n\nconst exitCodeForSignal = (signal: ShutdownSignal): number => (signal === \"SIGINT\" ? 130 : 143);\n\nconst liveHost: ProcessShutdownWatchdogHost<ReturnType<typeof setTimeout>> = {\n  addSignalListener: (signal, listener) => process.on(signal, listener),\n  removeSignalListener: (signal, listener) => process.removeListener(signal, listener),\n  // @effect-diagnostics-next-line globalTimers:off - This watchdog must fire even if the Effect runtime is stuck in finalization.\n  scheduleDeadline: (callback, delayMs) => setTimeout(callback, delayMs),\n  cancelDeadline: (deadline) => clearTimeout(deadline),\n  exit: (code) => process.exit(code),\n  warn: (message) => process.stderr.write(`${message}\\n`),\n};\n\n/**\n * Gives Effect finalizers a short grace period after the first termination\n * signal, then guarantees that the host process exits. A second signal skips\n * the remaining grace period.\n */\nexport function installProcessShutdownWatchdog<Deadline>(\n  options: ProcessShutdownWatchdogOptions = {},\n  host: ProcessShutdownWatchdogHost<Deadline> = liveHost as unknown as ProcessShutdownWatchdogHost<Deadline>,\n) {\n  const timeoutMs = options.timeoutMs ?? PROCESS_SHUTDOWN_TIMEOUT_MS;\n  let firstSignal: ShutdownSignal | undefined;\n  let deadline: Deadline | undefined;\n  let disposed = false;\n  let forced = false;\n\n  const cancelDeadline = () => {\n    if (deadline === undefined) return;\n    host.cancelDeadline(deadline);\n    deadline = undefined;\n  };\n\n  const forceExit = (reason: string) => {\n    if (forced || firstSignal === undefined) return;\n    forced = true;\n    cancelDeadline();\n    host.warn(reason);\n    host.exit(exitCodeForSignal(firstSignal));\n  };\n\n  const handleSignal = (signal: ShutdownSignal) => {\n    if (disposed) return;\n    if (firstSignal !== undefined) {\n      forceExit(`Received ${signal} during shutdown; forcing exit.`);\n      return;\n    }\n\n    firstSignal = signal;\n    host.warn(\n      `Received ${signal}; allowing ${timeoutMs}ms for graceful shutdown. Send another signal to force exit.`,\n    );\n    deadline = host.scheduleDeadline(\n      () => forceExit(`Graceful shutdown exceeded ${timeoutMs}ms; forcing exit.`),\n      timeoutMs,\n    );\n  };\n\n  const onSigint = () => handleSignal(\"SIGINT\");\n  const onSigterm = () => handleSignal(\"SIGTERM\");\n  host.addSignalListener(\"SIGINT\", onSigint);\n  host.addSignalListener(\"SIGTERM\", onSigterm);\n\n  return {\n    dispose: () => {\n      if (disposed) return;\n      disposed = true;\n      cancelDeadline();\n      host.removeSignalListener(\"SIGINT\", onSigint);\n      host.removeSignalListener(\"SIGTERM\", onSigterm);\n    },\n  };\n}\n","import * as NodeRuntime from \"@effect/platform-node/NodeRuntime\";\nimport * as NodeServices from \"@effect/platform-node/NodeServices\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport { Command } from \"effect/unstable/cli\";\n\nimport * as NetService from \"@salchi/shared/Net\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport { cli } from \"./cli/root.ts\";\nimport { installProcessShutdownWatchdog } from \"./processShutdownWatchdog.ts\";\n\nconst CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, NetService.layer);\n\n// This file is the dedicated executable entrypoint. Keep execution unconditional:\n// Node's ESM main-module flag does not exist before Node 22.18 and silently skipped\n// the CLI on otherwise supported Node 22.16, 22.17, and 23.x releases.\nconst shutdownWatchdog = installProcessShutdownWatchdog();\nCommand.run(cli, { version: packageJson.version }).pipe(\n  Effect.scoped,\n  Effect.provide(CliRuntimeLayer),\n  Effect.ensuring(Effect.sync(shutdownWatchdog.dispose)),\n  NodeRuntime.runMain,\n);\n"],"x_google_ignoreList":[343,344,345,346],"mappings":"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AM,qCAAqC,OAAO,OAAO;CACvD,GAAG,yBAAyB;CAC5B,MAAM;CACN,SAAS;AACX,CAAC;AAGD,MAAM,qCAAqC,OAAO,OAAO;CACvD,GAAG,yBAAyB;CAC5B,MAAM;CACN,SAAS;AACX,CAAC;AAGD,MAAM,iCAAiC,OAAO,OAAO;CACnD,GAAG,yBAAyB;CAC5B,MAAM;CACN,SAAS;AACX,CAAC;AAGD,MAAM,8BAA8B,OAAO,OAAO;CAChD,GAAG,yBAAyB;CAC5B,MAAM;CACN,SAAS;AACX,CAAC;AAGD,MAAM,4BAA4B,OAAO,OAAO;CAC9C,GAAG,yBAAyB;CAC5B,MAAM;CACN,SAAS;AACX,CAAC;AAGqC,OAAO,MAAM;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAqB+B,OAAO,SAAS;CAAC;CAAW;CAAa;CAAe;AAAO,CAAC;AC1oChG,MAAa,kCAAkC;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,wCAAwC;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAIA,MAAa,6BAA6B;CACxC;CACA;CACA,GAAG;AACL;AASA,MAAM,6BAA6B;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG,CAhBH,sBACA,GAAG,qCAeA;CACH,GAAG;AACL;AAEA,MAAa,6BAA6B,OAAO,gBAAgB;CAC/D,OAAO,QAAQ,SAAS;CACxB,OAAO,eAAe,MACpB,OAAO,YAAA,EAAgC,GACvC,OAAO,UAAU,sBAAsB,CACzC;CACA,OAAO,QAAQ,MAAM;AACvB,CAAC;AAED,MAAa,oBAAoB,OAAO,MAAM,CAC5C,OAAO,SAAS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"}