@gkorepanov/ccodex 0.4.19 → 0.4.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/agents/codex-wrapper.md +1 -0
- package/config/compatibility.json +5 -5
- package/dist/claude/inputMapper.d.ts +5 -0
- package/dist/claude/inputMapper.js +9 -0
- package/dist/claude/inputMapper.js.map +1 -1
- package/dist/claude/modelCatalog.d.ts +4 -0
- package/dist/claude/modelCatalog.js +14 -0
- package/dist/claude/modelCatalog.js.map +1 -1
- package/dist/claude/modelSelection.d.ts +14 -0
- package/dist/claude/modelSelection.js +26 -0
- package/dist/claude/modelSelection.js.map +1 -1
- package/dist/claude/rateLimits.d.ts +2 -1
- package/dist/claude/rateLimits.js +12 -16
- package/dist/claude/rateLimits.js.map +1 -1
- package/dist/claude/resultClassifier.js +4 -1
- package/dist/claude/resultClassifier.js.map +1 -1
- package/dist/claude/service.d.ts +66 -2
- package/dist/claude/service.js +301 -130
- package/dist/claude/service.js.map +1 -1
- package/dist/claude/session/codexRollout.js +40 -1
- package/dist/claude/session/codexRollout.js.map +1 -1
- package/dist/claude/session/commands.d.ts +44 -1
- package/dist/claude/session/goalState.d.ts +5 -0
- package/dist/claude/session/goalState.js +22 -0
- package/dist/claude/session/goalState.js.map +1 -1
- package/dist/claude/session/providerRuntimeFactory.js +13 -2
- package/dist/claude/session/providerRuntimeFactory.js.map +1 -1
- package/dist/claude/session/repository.d.ts +3 -0
- package/dist/claude/session/repository.js +2 -0
- package/dist/claude/session/repository.js.map +1 -1
- package/dist/claude/session/runtime.js +1 -1
- package/dist/claude/session/runtime.js.map +1 -1
- package/dist/claude/session/scopeState.js +1 -0
- package/dist/claude/session/scopeState.js.map +1 -1
- package/dist/claude/session/session.d.ts +1 -0
- package/dist/claude/session/session.js +171 -49
- package/dist/claude/session/session.js.map +1 -1
- package/dist/claude/skillCatalog.js +1 -0
- package/dist/claude/skillCatalog.js.map +1 -1
- package/dist/claude/statusCommand.js +1 -2
- package/dist/claude/statusCommand.js.map +1 -1
- package/dist/claude/toolMapper.js +1 -1
- package/dist/claude/toolMapper.js.map +1 -1
- package/dist/codex/generated/AuthMode.d.ts +1 -1
- package/dist/codex/generated/ClientRequest.d.ts +142 -1
- package/dist/codex/generated/ImageGenerationFailure.d.ts +5 -0
- package/dist/codex/generated/ImageGenerationFailure.js +3 -0
- package/dist/codex/generated/ImageGenerationFailure.js.map +1 -0
- package/dist/codex/generated/ImageGenerationItem.d.ts +3 -0
- package/dist/codex/generated/InitializeCapabilities.d.ts +10 -1
- package/dist/codex/generated/InternalSessionSource.d.ts +1 -1
- package/dist/codex/generated/PathUri.d.ts +4 -3
- package/dist/codex/generated/PlanType.d.ts +1 -1
- package/dist/codex/generated/ResponseItem.d.ts +4 -1
- package/dist/codex/generated/ResponseItemRuntimeSchema.js +2 -2
- package/dist/codex/generated/ResponseItemRuntimeSchema.js.map +1 -1
- package/dist/codex/generated/ReviewDecision.d.ts +1 -1
- package/dist/codex/generated/ServerNotification.d.ts +43 -0
- package/dist/codex/generated/ServerNotificationEnvelope.d.ts +43 -0
- package/dist/codex/generated/index.d.ts +1 -0
- package/dist/codex/generated/index.js.map +1 -1
- package/dist/codex/generated/v2/AccountLoginCompletedNotification.d.ts +2 -0
- package/dist/codex/generated/v2/AgentMessageDelivery.d.ts +1 -0
- package/dist/codex/generated/v2/AgentMessageDelivery.js +3 -0
- package/dist/codex/generated/v2/AgentMessageDelivery.js.map +1 -0
- package/dist/codex/generated/v2/AllowDenyRequirement.d.ts +1 -0
- package/dist/codex/generated/v2/AllowDenyRequirement.js +3 -0
- package/dist/codex/generated/v2/AllowDenyRequirement.js.map +1 -0
- package/dist/codex/generated/v2/AppLinksConfig.d.ts +11 -0
- package/dist/codex/generated/v2/AppLinksConfig.js +3 -0
- package/dist/codex/generated/v2/AppLinksConfig.js.map +1 -0
- package/dist/codex/generated/v2/AppsConfig.d.ts +5 -0
- package/dist/codex/generated/v2/AppsReadParams.d.ts +4 -0
- package/dist/codex/generated/v2/AsyncUserInputQuestion.d.ts +4 -0
- package/dist/codex/generated/v2/AsyncUserInputQuestion.js +3 -0
- package/dist/codex/generated/v2/AsyncUserInputQuestion.js.map +1 -0
- package/dist/codex/generated/v2/AuthRecoveryNotification.d.ts +6 -0
- package/dist/codex/generated/v2/AuthRecoveryNotification.js +3 -0
- package/dist/codex/generated/v2/AuthRecoveryNotification.js.map +1 -0
- package/dist/codex/generated/v2/AutoReviewRequirements.d.ts +4 -0
- package/dist/codex/generated/v2/AutoReviewRequirements.js +3 -0
- package/dist/codex/generated/v2/AutoReviewRequirements.js.map +1 -0
- package/dist/codex/generated/v2/AwsCredentialType.d.ts +1 -0
- package/dist/codex/generated/v2/AwsCredentialType.js +3 -0
- package/dist/codex/generated/v2/AwsCredentialType.js.map +1 -0
- package/dist/codex/generated/v2/BedrockAwsProfile.d.ts +4 -0
- package/dist/codex/generated/v2/BedrockAwsProfile.js +3 -0
- package/dist/codex/generated/v2/BedrockAwsProfile.js.map +1 -0
- package/dist/codex/generated/v2/BedrockDiscoverParams.d.ts +1 -0
- package/dist/codex/generated/v2/BedrockDiscoverParams.js +3 -0
- package/dist/codex/generated/v2/BedrockDiscoverParams.js.map +1 -0
- package/dist/codex/generated/v2/BedrockDiscoverResponse.d.ts +6 -0
- package/dist/codex/generated/v2/BedrockDiscoverResponse.js +3 -0
- package/dist/codex/generated/v2/BedrockDiscoverResponse.js.map +1 -0
- package/dist/codex/generated/v2/BedrockEnvironmentCredential.d.ts +5 -0
- package/dist/codex/generated/v2/BedrockEnvironmentCredential.js +3 -0
- package/dist/codex/generated/v2/BedrockEnvironmentCredential.js.map +1 -0
- package/dist/codex/generated/v2/BedrockSetupParams.d.ts +8 -0
- package/dist/codex/generated/v2/BedrockSetupParams.js +3 -0
- package/dist/codex/generated/v2/BedrockSetupParams.js.map +1 -0
- package/dist/codex/generated/v2/BedrockSetupResponse.d.ts +1 -0
- package/dist/codex/generated/v2/BedrockSetupResponse.js +3 -0
- package/dist/codex/generated/v2/BedrockSetupResponse.js.map +1 -0
- package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.d.ts +1 -0
- package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.js +3 -0
- package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.js.map +1 -0
- package/dist/codex/generated/v2/BrowserUseConfig.d.ts +8 -0
- package/dist/codex/generated/v2/BrowserUseConfig.js +3 -0
- package/dist/codex/generated/v2/BrowserUseConfig.js.map +1 -0
- package/dist/codex/generated/v2/BrowserUseOriginPolicy.d.ts +11 -0
- package/dist/codex/generated/v2/BrowserUseOriginPolicy.js +3 -0
- package/dist/codex/generated/v2/BrowserUseOriginPolicy.js.map +1 -0
- package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.d.ts +7 -0
- package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.js +3 -0
- package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.js.map +1 -0
- package/dist/codex/generated/v2/BrowserUseRequirements.d.ts +7 -0
- package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.d.ts +1 -0
- package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.js +3 -0
- package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.js.map +1 -0
- package/dist/codex/generated/v2/CodexErrorInfo.d.ts +1 -1
- package/dist/codex/generated/v2/CollabAgentTool.d.ts +1 -1
- package/dist/codex/generated/v2/CollabAgentToolCallStatus.d.ts +1 -1
- package/dist/codex/generated/v2/CommandAction.d.ts +2 -2
- package/dist/codex/generated/v2/CommandExecutionApprovalKind.d.ts +4 -0
- package/dist/codex/generated/v2/CommandExecutionApprovalKind.js +3 -0
- package/dist/codex/generated/v2/CommandExecutionApprovalKind.js.map +1 -0
- package/dist/codex/generated/v2/CommandExecutionRequestApprovalParams.d.ts +6 -0
- package/dist/codex/generated/v2/ComputerUseConfig.d.ts +8 -0
- package/dist/codex/generated/v2/ComputerUseConfig.js +3 -0
- package/dist/codex/generated/v2/ComputerUseConfig.js.map +1 -0
- package/dist/codex/generated/v2/ComputerUseMacosConfig.d.ts +6 -0
- package/dist/codex/generated/v2/ComputerUseMacosConfig.js +3 -0
- package/dist/codex/generated/v2/ComputerUseMacosConfig.js.map +1 -0
- package/dist/codex/generated/v2/ComputerUseMacosRequirements.d.ts +6 -0
- package/dist/codex/generated/v2/ComputerUseMacosRequirements.js +3 -0
- package/dist/codex/generated/v2/ComputerUseMacosRequirements.js.map +1 -0
- package/dist/codex/generated/v2/ComputerUseRequirements.d.ts +7 -0
- package/dist/codex/generated/v2/ComputerUseWindowsConfig.d.ts +8 -0
- package/dist/codex/generated/v2/ComputerUseWindowsConfig.js +3 -0
- package/dist/codex/generated/v2/ComputerUseWindowsConfig.js.map +1 -0
- package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.d.ts +7 -0
- package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.js +3 -0
- package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.js.map +1 -0
- package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.d.ts +7 -0
- package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.js +3 -0
- package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.js.map +1 -0
- package/dist/codex/generated/v2/ComputerUseWindowsRequirements.d.ts +8 -0
- package/dist/codex/generated/v2/ComputerUseWindowsRequirements.js +3 -0
- package/dist/codex/generated/v2/ComputerUseWindowsRequirements.js.map +1 -0
- package/dist/codex/generated/v2/Config.d.ts +4 -0
- package/dist/codex/generated/v2/ConfigLayerSource.d.ts +6 -0
- package/dist/codex/generated/v2/ConfigRequirements.d.ts +9 -0
- package/dist/codex/generated/v2/ConfiguredHookHandler.d.ts +10 -0
- package/dist/codex/generated/v2/CyberAccessProgram.d.ts +5 -0
- package/dist/codex/generated/v2/CyberAccessProgram.js +3 -0
- package/dist/codex/generated/v2/CyberAccessProgram.js.map +1 -0
- package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.d.ts +1 -0
- package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.js +3 -0
- package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.js.map +1 -0
- package/dist/codex/generated/v2/ExternalAgentConfigDetectResponse.d.ts +2 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.d.ts +2 -2
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.d.ts +11 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.js +3 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.js.map +1 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.d.ts +8 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.js +3 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.js.map +1 -0
- package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeSuccess.d.ts +4 -0
- package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.d.ts +6 -0
- package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.js +3 -0
- package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.js.map +1 -0
- package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.d.ts +1 -0
- package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.js +3 -0
- package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.js.map +1 -0
- package/dist/codex/generated/v2/GetAccountRateLimitsResponse.d.ts +10 -0
- package/dist/codex/generated/v2/GetAccountTokenUsageParams.d.ts +6 -0
- package/dist/codex/generated/v2/GetAccountTokenUsageParams.js +3 -0
- package/dist/codex/generated/v2/GetAccountTokenUsageParams.js.map +1 -0
- package/dist/codex/generated/v2/GetAccountTokenUsageResponse.d.ts +5 -0
- package/dist/codex/generated/v2/GuardianApprovalReviewAction.d.ts +7 -0
- package/dist/codex/generated/v2/HookEventName.d.ts +1 -1
- package/dist/codex/generated/v2/HookHandlerType.d.ts +1 -1
- package/dist/codex/generated/v2/HookMetadata.d.ts +13 -4
- package/dist/codex/generated/v2/InAppBrowserRequirements.d.ts +3 -0
- package/dist/codex/generated/v2/InAppBrowserRequirements.js +3 -0
- package/dist/codex/generated/v2/InAppBrowserRequirements.js.map +1 -0
- package/dist/codex/generated/v2/ItemGuardianApprovalReviewCompletedNotification.d.ts +2 -0
- package/dist/codex/generated/v2/ItemGuardianApprovalReviewStartedNotification.d.ts +2 -0
- package/dist/codex/generated/v2/LoginAccountParams.d.ts +6 -0
- package/dist/codex/generated/v2/ManagedHooksRequirements.d.ts +1 -0
- package/dist/codex/generated/v2/McpAuthStatus.d.ts +1 -1
- package/dist/codex/generated/v2/McpResourceReadParams.d.ts +5 -0
- package/dist/codex/generated/v2/McpResourceReadResponse.d.ts +4 -0
- package/dist/codex/generated/v2/McpServerConnectionStatus.d.ts +1 -0
- package/dist/codex/generated/v2/McpServerConnectionStatus.js +3 -0
- package/dist/codex/generated/v2/McpServerConnectionStatus.js.map +1 -0
- package/dist/codex/generated/v2/McpServerElicitationRequestParams.d.ts +5 -0
- package/dist/codex/generated/v2/McpServerEventNotification.d.ts +5 -0
- package/dist/codex/generated/v2/McpServerEventNotification.js +3 -0
- package/dist/codex/generated/v2/McpServerEventNotification.js.map +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamNotification.d.ts +5 -0
- package/dist/codex/generated/v2/McpServerEventStreamNotification.js +3 -0
- package/dist/codex/generated/v2/McpServerEventStreamNotification.js.map +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamStartParams.d.ts +9 -0
- package/dist/codex/generated/v2/McpServerEventStreamStartParams.js +3 -0
- package/dist/codex/generated/v2/McpServerEventStreamStartParams.js.map +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamStartResponse.d.ts +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamStartResponse.js +3 -0
- package/dist/codex/generated/v2/McpServerEventStreamStartResponse.js.map +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamStopParams.d.ts +3 -0
- package/dist/codex/generated/v2/McpServerEventStreamStopParams.js +3 -0
- package/dist/codex/generated/v2/McpServerEventStreamStopParams.js.map +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamStopResponse.d.ts +1 -0
- package/dist/codex/generated/v2/McpServerEventStreamStopResponse.js +3 -0
- package/dist/codex/generated/v2/McpServerEventStreamStopResponse.js.map +1 -0
- package/dist/codex/generated/v2/McpServerOauthClientRegistration.d.ts +1 -0
- package/dist/codex/generated/v2/McpServerOauthClientRegistration.js +3 -0
- package/dist/codex/generated/v2/McpServerOauthClientRegistration.js.map +1 -0
- package/dist/codex/generated/v2/McpServerOauthLoginParams.d.ts +5 -0
- package/dist/codex/generated/v2/McpServerStatus.d.ts +6 -0
- package/dist/codex/generated/v2/MisalignmentErrorDetails.d.ts +15 -0
- package/dist/codex/generated/v2/MisalignmentErrorDetails.js +3 -0
- package/dist/codex/generated/v2/MisalignmentErrorDetails.js.map +1 -0
- package/dist/codex/generated/v2/MisalignmentSteer.d.ts +3 -0
- package/dist/codex/generated/v2/MisalignmentSteer.js +3 -0
- package/dist/codex/generated/v2/MisalignmentSteer.js.map +1 -0
- package/dist/codex/generated/v2/Model.d.ts +6 -0
- package/dist/codex/generated/v2/ModelUpgradeInfo.d.ts +4 -0
- package/dist/codex/generated/v2/MultiAgentVersion.d.ts +4 -0
- package/dist/codex/generated/v2/MultiAgentVersion.js +3 -0
- package/dist/codex/generated/v2/MultiAgentVersion.js.map +1 -0
- package/dist/codex/generated/v2/PluginDisabledReason.d.ts +1 -0
- package/dist/codex/generated/v2/PluginDisabledReason.js +3 -0
- package/dist/codex/generated/v2/PluginDisabledReason.js.map +1 -0
- package/dist/codex/generated/v2/PluginInstallParams.d.ts +4 -0
- package/dist/codex/generated/v2/PluginReconcileChangedPlugin.d.ts +19 -0
- package/dist/codex/generated/v2/PluginReconcileChangedPlugin.js +3 -0
- package/dist/codex/generated/v2/PluginReconcileChangedPlugin.js.map +1 -0
- package/dist/codex/generated/v2/PluginReconcileParams.d.ts +6 -0
- package/dist/codex/generated/v2/PluginReconcileParams.js +3 -0
- package/dist/codex/generated/v2/PluginReconcileParams.js.map +1 -0
- package/dist/codex/generated/v2/PluginReconcileResponse.d.ts +23 -0
- package/dist/codex/generated/v2/PluginReconcileResponse.js +3 -0
- package/dist/codex/generated/v2/PluginReconcileResponse.js.map +1 -0
- package/dist/codex/generated/v2/PluginSearchParams.d.ts +9 -0
- package/dist/codex/generated/v2/PluginSearchParams.js +3 -0
- package/dist/codex/generated/v2/PluginSearchParams.js.map +1 -0
- package/dist/codex/generated/v2/PluginSearchResponse.d.ts +5 -0
- package/dist/codex/generated/v2/PluginSearchResponse.js +3 -0
- package/dist/codex/generated/v2/PluginSearchResponse.js.map +1 -0
- package/dist/codex/generated/v2/PluginSearchResult.d.ts +7 -0
- package/dist/codex/generated/v2/PluginSearchResult.js +3 -0
- package/dist/codex/generated/v2/PluginSearchResult.js.map +1 -0
- package/dist/codex/generated/v2/PluginSearchScope.d.ts +1 -0
- package/dist/codex/generated/v2/PluginSearchScope.js +3 -0
- package/dist/codex/generated/v2/PluginSearchScope.js.map +1 -0
- package/dist/codex/generated/v2/PluginSummary.d.ts +13 -0
- package/dist/codex/generated/v2/Project.d.ts +16 -0
- package/dist/codex/generated/v2/Project.js +3 -0
- package/dist/codex/generated/v2/Project.js.map +1 -0
- package/dist/codex/generated/v2/ProjectChangeType.d.ts +1 -0
- package/dist/codex/generated/v2/ProjectChangeType.js +3 -0
- package/dist/codex/generated/v2/ProjectChangeType.js.map +1 -0
- package/dist/codex/generated/v2/ProjectChangedNotification.d.ts +5 -0
- package/dist/codex/generated/v2/ProjectChangedNotification.js +3 -0
- package/dist/codex/generated/v2/ProjectChangedNotification.js.map +1 -0
- package/dist/codex/generated/v2/ProjectCreateParams.d.ts +9 -0
- package/dist/codex/generated/v2/ProjectCreateParams.js +3 -0
- package/dist/codex/generated/v2/ProjectCreateParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectCreateResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ProjectCreateResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectCreateResponse.js.map +1 -0
- package/dist/codex/generated/v2/ProjectDeleteParams.d.ts +3 -0
- package/dist/codex/generated/v2/ProjectDeleteParams.js +3 -0
- package/dist/codex/generated/v2/ProjectDeleteParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectDeleteResponse.d.ts +1 -0
- package/dist/codex/generated/v2/ProjectDeleteResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectDeleteResponse.js.map +1 -0
- package/dist/codex/generated/v2/ProjectImportParams.d.ts +10 -0
- package/dist/codex/generated/v2/ProjectImportParams.js +3 -0
- package/dist/codex/generated/v2/ProjectImportParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectImportResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ProjectImportResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectImportResponse.js.map +1 -0
- package/dist/codex/generated/v2/ProjectListParams.d.ts +14 -0
- package/dist/codex/generated/v2/ProjectListParams.js +3 -0
- package/dist/codex/generated/v2/ProjectListParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectListResponse.d.ts +5 -0
- package/dist/codex/generated/v2/ProjectListResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectListResponse.js.map +1 -0
- package/dist/codex/generated/v2/ProjectMoveParams.d.ts +4 -0
- package/dist/codex/generated/v2/ProjectMoveParams.js +3 -0
- package/dist/codex/generated/v2/ProjectMoveParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectMoveResponse.d.ts +1 -0
- package/dist/codex/generated/v2/ProjectMoveResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectMoveResponse.js.map +1 -0
- package/dist/codex/generated/v2/ProjectReadParams.d.ts +3 -0
- package/dist/codex/generated/v2/ProjectReadParams.js +3 -0
- package/dist/codex/generated/v2/ProjectReadParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectReadResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ProjectReadResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectReadResponse.js.map +1 -0
- package/dist/codex/generated/v2/ProjectRoot.d.ts +4 -0
- package/dist/codex/generated/v2/ProjectRoot.js +3 -0
- package/dist/codex/generated/v2/ProjectRoot.js.map +1 -0
- package/dist/codex/generated/v2/ProjectSortKey.d.ts +1 -0
- package/dist/codex/generated/v2/ProjectSortKey.js +3 -0
- package/dist/codex/generated/v2/ProjectSortKey.js.map +1 -0
- package/dist/codex/generated/v2/ProjectUpdateParams.d.ts +9 -0
- package/dist/codex/generated/v2/ProjectUpdateParams.js +3 -0
- package/dist/codex/generated/v2/ProjectUpdateParams.js.map +1 -0
- package/dist/codex/generated/v2/ProjectUpdateResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ProjectUpdateResponse.js +3 -0
- package/dist/codex/generated/v2/ProjectUpdateResponse.js.map +1 -0
- package/dist/codex/generated/v2/QueuedSubmission.d.ts +6 -0
- package/dist/codex/generated/v2/QueuedSubmission.js +3 -0
- package/dist/codex/generated/v2/QueuedSubmission.js.map +1 -0
- package/dist/codex/generated/v2/RawResponseCompletedNotification.d.ts +2 -0
- package/dist/codex/generated/v2/ResponseUsageMetadata.d.ts +8 -0
- package/dist/codex/generated/v2/ResponseUsageMetadata.js +3 -0
- package/dist/codex/generated/v2/ResponseUsageMetadata.js.map +1 -0
- package/dist/codex/generated/v2/ServerDiagnosticsGauge.d.ts +4 -0
- package/dist/codex/generated/v2/ServerDiagnosticsGauge.js +3 -0
- package/dist/codex/generated/v2/ServerDiagnosticsGauge.js.map +1 -0
- package/dist/codex/generated/v2/ServerDiagnosticsParams.d.ts +1 -0
- package/dist/codex/generated/v2/ServerDiagnosticsParams.js +3 -0
- package/dist/codex/generated/v2/ServerDiagnosticsParams.js.map +1 -0
- package/dist/codex/generated/v2/ServerDiagnosticsProcess.d.ts +5 -0
- package/dist/codex/generated/v2/ServerDiagnosticsProcess.js +3 -0
- package/dist/codex/generated/v2/ServerDiagnosticsProcess.js.map +1 -0
- package/dist/codex/generated/v2/ServerDiagnosticsResponse.d.ts +6 -0
- package/dist/codex/generated/v2/ServerDiagnosticsResponse.js +3 -0
- package/dist/codex/generated/v2/ServerDiagnosticsResponse.js.map +1 -0
- package/dist/codex/generated/v2/SkillMetadata.d.ts +4 -0
- package/dist/codex/generated/v2/StrictReviewRequiredNotification.d.ts +8 -0
- package/dist/codex/generated/v2/StrictReviewRequiredNotification.js +3 -0
- package/dist/codex/generated/v2/StrictReviewRequiredNotification.js.map +1 -0
- package/dist/codex/generated/v2/SubAgentActivityKind.d.ts +1 -1
- package/dist/codex/generated/v2/Thread.d.ts +22 -2
- package/dist/codex/generated/v2/ThreadBackgroundTerminal.d.ts +2 -2
- package/dist/codex/generated/v2/ThreadForkParams.d.ts +3 -1
- package/dist/codex/generated/v2/ThreadItem.d.ts +12 -0
- package/dist/codex/generated/v2/ThreadListParams.d.ts +8 -2
- package/dist/codex/generated/v2/ThreadMetadataUpdateParams.d.ts +5 -4
- package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.js +3 -0
- package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueAddParams.d.ts +6 -0
- package/dist/codex/generated/v2/ThreadQueueAddParams.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueAddParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueAddResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadQueueAddResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueAddResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueChangedNotification.d.ts +3 -0
- package/dist/codex/generated/v2/ThreadQueueChangedNotification.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueChangedNotification.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueDeleteParams.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadQueueDeleteParams.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueDeleteParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueDeleteResponse.d.ts +3 -0
- package/dist/codex/generated/v2/ThreadQueueDeleteResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueDeleteResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueListParams.d.ts +11 -0
- package/dist/codex/generated/v2/ThreadQueueListParams.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueListParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueListResponse.d.ts +8 -0
- package/dist/codex/generated/v2/ThreadQueueListResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueListResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueReorderParams.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadQueueReorderParams.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueReorderParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueReorderResponse.d.ts +1 -0
- package/dist/codex/generated/v2/ThreadQueueReorderResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueReorderResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueStartParams.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadQueueStartParams.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueStartParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueStartResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadQueueStartResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueStartResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueUpdateParams.d.ts +6 -0
- package/dist/codex/generated/v2/ThreadQueueUpdateParams.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueUpdateParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadQueueUpdateResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadQueueUpdateResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadQueueUpdateResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadReadParams.d.ts +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.d.ts +11 -0
- package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeItem.d.ts +24 -0
- package/dist/codex/generated/v2/ThreadRealtimeItem.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeItem.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.d.ts +8 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.d.ts +8 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.d.ts +8 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.d.ts +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeStartParams.d.ts +13 -0
- package/dist/codex/generated/v2/ThreadRealtimeStartTransport.d.ts +6 -0
- package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.d.ts +1 -0
- package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.js +3 -0
- package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.js.map +1 -0
- package/dist/codex/generated/v2/ThreadResumeParams.d.ts +3 -1
- package/dist/codex/generated/v2/ThreadResumeResponse.d.ts +4 -4
- package/dist/codex/generated/v2/ThreadRevertParams.d.ts +12 -0
- package/dist/codex/generated/v2/ThreadRevertParams.js +3 -0
- package/dist/codex/generated/v2/ThreadRevertParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRevertResponse.d.ts +22 -0
- package/dist/codex/generated/v2/ThreadRevertResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadRevertResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadRevertedNotification.d.ts +3 -0
- package/dist/codex/generated/v2/ThreadRevertedNotification.js +3 -0
- package/dist/codex/generated/v2/ThreadRevertedNotification.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSearchParams.d.ts +2 -2
- package/dist/codex/generated/v2/ThreadSearchSortKey.d.ts +1 -0
- package/dist/codex/generated/v2/ThreadSearchSortKey.js +3 -0
- package/dist/codex/generated/v2/ThreadSearchSortKey.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSection.d.ts +18 -0
- package/dist/codex/generated/v2/ThreadSection.js +3 -0
- package/dist/codex/generated/v2/ThreadSection.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionAppearance.d.ts +7 -0
- package/dist/codex/generated/v2/ThreadSectionAppearance.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionAppearance.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionCreateParams.d.ts +11 -0
- package/dist/codex/generated/v2/ThreadSectionCreateParams.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionCreateParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionCreateResponse.d.ts +7 -0
- package/dist/codex/generated/v2/ThreadSectionCreateResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionCreateResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionDeleteParams.d.ts +9 -0
- package/dist/codex/generated/v2/ThreadSectionDeleteParams.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionDeleteParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionDeleteResponse.d.ts +4 -0
- package/dist/codex/generated/v2/ThreadSectionDeleteResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionDeleteResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionListParams.d.ts +13 -0
- package/dist/codex/generated/v2/ThreadSectionListParams.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionListParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionListResponse.d.ts +11 -0
- package/dist/codex/generated/v2/ThreadSectionListResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionListResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionMoveParams.d.ts +17 -0
- package/dist/codex/generated/v2/ThreadSectionMoveParams.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionMoveParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionMoveResponse.d.ts +1 -0
- package/dist/codex/generated/v2/ThreadSectionMoveResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionMoveResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionUpdateParams.d.ts +18 -0
- package/dist/codex/generated/v2/ThreadSectionUpdateParams.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionUpdateParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadSectionUpdateResponse.d.ts +7 -0
- package/dist/codex/generated/v2/ThreadSectionUpdateResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadSectionUpdateResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadShellCommandParams.d.ts +6 -0
- package/dist/codex/generated/v2/ThreadSortKey.d.ts +1 -1
- package/dist/codex/generated/v2/ThreadStartParams.d.ts +5 -0
- package/dist/codex/generated/v2/ThreadTimelineEntry.d.ts +31 -0
- package/dist/codex/generated/v2/ThreadTimelineEntry.js +3 -0
- package/dist/codex/generated/v2/ThreadTimelineEntry.js.map +1 -0
- package/dist/codex/generated/v2/ThreadTimelineListParams.d.ts +8 -0
- package/dist/codex/generated/v2/ThreadTimelineListParams.js +3 -0
- package/dist/codex/generated/v2/ThreadTimelineListParams.js.map +1 -0
- package/dist/codex/generated/v2/ThreadTimelineListResponse.d.ts +9 -0
- package/dist/codex/generated/v2/ThreadTimelineListResponse.js +3 -0
- package/dist/codex/generated/v2/ThreadTimelineListResponse.js.map +1 -0
- package/dist/codex/generated/v2/ThreadUsage.d.ts +7 -0
- package/dist/codex/generated/v2/ThreadUsage.js +3 -0
- package/dist/codex/generated/v2/ThreadUsage.js.map +1 -0
- package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.d.ts +11 -0
- package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.js +3 -0
- package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.js.map +1 -0
- package/dist/codex/generated/v2/ToolRequestUserInputParams.d.ts +4 -0
- package/dist/codex/generated/v2/TurnError.d.ts +5 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateParams.d.ts +34 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateParams.js +3 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateParams.js.map +1 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateResponse.d.ts +4 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateResponse.js +3 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateResponse.js.map +1 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateStatus.d.ts +1 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateStatus.js +3 -0
- package/dist/codex/generated/v2/TurnSettingsUpdateStatus.js.map +1 -0
- package/dist/codex/generated/v2/TurnStartParams.d.ts +19 -0
- package/dist/codex/generated/v2/TurnToolOutput.d.ts +6 -0
- package/dist/codex/generated/v2/TurnToolOutput.js +3 -0
- package/dist/codex/generated/v2/TurnToolOutput.js.map +1 -0
- package/dist/codex/generated/v2/index.d.ts +125 -0
- package/dist/daemon/probe.js +1 -1
- package/dist/gateway/clientConnection.js +129 -24
- package/dist/gateway/clientConnection.js.map +1 -1
- package/dist/gateway/remoteRelay.js +2 -2
- package/dist/gateway/remoteRelay.js.map +1 -1
- package/dist/gateway/stockRpc.d.ts +2 -0
- package/dist/gateway/stockRpc.js +13 -0
- package/dist/gateway/stockRpc.js.map +1 -1
- package/dist/gateway/threadList.d.ts +6 -0
- package/dist/gateway/threadList.js +58 -12
- package/dist/gateway/threadList.js.map +1 -1
- package/dist/gateway/transientNotice.js +6 -4
- package/dist/gateway/transientNotice.js.map +1 -1
- package/dist/handoff/lineageStore.d.ts +2 -8
- package/dist/handoff/lineageStore.js +2 -8
- package/dist/handoff/lineageStore.js.map +1 -1
- package/dist/handoff/providerEpochs.js +4 -5
- package/dist/handoff/providerEpochs.js.map +1 -1
- package/dist/handoff/service.d.ts +16 -3
- package/dist/handoff/service.js +196 -125
- package/dist/handoff/service.js.map +1 -1
- package/dist/handoff/titleGeneration.d.ts +1 -0
- package/dist/handoff/titleGeneration.js.map +1 -1
- package/dist/management/setup.d.ts +6 -0
- package/dist/management/setup.js +11 -3
- package/dist/management/setup.js.map +1 -1
- package/dist/protocol/search.d.ts +24 -0
- package/dist/protocol/search.js +105 -0
- package/dist/protocol/search.js.map +1 -0
- package/dist/protocol/turnPagination.d.ts +16 -0
- package/dist/protocol/turnPagination.js +75 -35
- package/dist/protocol/turnPagination.js.map +1 -1
- package/dist/runtime/dependencies.js +1 -1
- package/dist/store/HybridStore.d.ts +4 -0
- package/dist/store/HybridStore.js +1 -1
- package/dist/store/HybridStore.js.map +1 -1
- package/dist/store/memoryStore.d.ts +6 -0
- package/dist/store/memoryStore.js +16 -0
- package/dist/store/memoryStore.js.map +1 -1
- package/dist/store/sqliteStore.d.ts +3 -0
- package/dist/store/sqliteStore.js +60 -1
- package/dist/store/sqliteStore.js.map +1 -1
- package/dist/store/threadFilter.js +11 -2
- package/dist/store/threadFilter.js.map +1 -1
- package/legal/THIRD_PARTY_NOTICES.md +304 -263
- package/package.json +6 -6
- package/scripts/install-claude-stack.sh +27 -4
- package/skills/workforce/SKILL.md +51 -24
- package/vendor/codex/continuation.md +5 -0
package/dist/handoff/service.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { DEFAULT_RENAME_PROMPT } from "../config/config.js";
|
|
2
|
+
import { findStockSection } from "../gateway/stockRpc.js";
|
|
2
3
|
import { projectItemIds, projectRpcToBackendThread, projectRpcToPublicThread, } from "../gateway/logicalThreadProjection.js";
|
|
3
|
-
import { invalidParams } from "../protocol/errors.js";
|
|
4
|
-
import { paginateTurns } from "../protocol/turnPagination.js";
|
|
4
|
+
import { invalidParams, invalidRequest } from "../protocol/errors.js";
|
|
5
|
+
import { historyCursors, paginateItems, paginateTurns } from "../protocol/turnPagination.js";
|
|
6
|
+
import { searchTurnOccurrences } from "../protocol/search.js";
|
|
5
7
|
import { filterSortThreads } from "../store/threadFilter.js";
|
|
6
8
|
import { v7 as uuidv7 } from "uuid";
|
|
7
9
|
import { stockSwitchThreadSource, ProviderEpochs, } from "./providerEpochs.js";
|
|
@@ -166,23 +168,25 @@ function stagedSettings(base, pending) {
|
|
|
166
168
|
function pageTurns(turns, params) {
|
|
167
169
|
return paginateTurns(turns, params, ["hyb-overlay-turn:", "hyb-turn:"]);
|
|
168
170
|
}
|
|
171
|
+
/** Full stock history without the deprecated paginated `includeTurns` hydration: page `thread/turns/list` instead. */
|
|
172
|
+
async function readStockThread(stock, threadId) {
|
|
173
|
+
const { thread } = await stock.request("thread/read", { threadId, includeTurns: false });
|
|
174
|
+
if (thread.historyMode !== "paginated") {
|
|
175
|
+
return (await stock.request("thread/read", { threadId, includeTurns: true })).thread;
|
|
176
|
+
}
|
|
177
|
+
const turns = [];
|
|
178
|
+
let cursor = null;
|
|
179
|
+
do {
|
|
180
|
+
const page = await stock.request("thread/turns/list", {
|
|
181
|
+
threadId, cursor, limit: 100, sortDirection: "asc", itemsView: "full",
|
|
182
|
+
});
|
|
183
|
+
turns.push(...page.data);
|
|
184
|
+
cursor = page.nextCursor;
|
|
185
|
+
} while (cursor);
|
|
186
|
+
return { ...thread, turns };
|
|
187
|
+
}
|
|
169
188
|
function pageItems(turns, params) {
|
|
170
|
-
|
|
171
|
-
throw invalidParams("Invalid handoff item cursor.");
|
|
172
|
-
const offset = params.cursor ? Number(params.cursor.slice("hyb-overlay-item:".length)) : 0;
|
|
173
|
-
if (!Number.isInteger(offset) || offset < 0)
|
|
174
|
-
throw invalidParams("Invalid handoff item cursor.");
|
|
175
|
-
const items = turns.flatMap((turn) => params.turnId && turn.id !== params.turnId
|
|
176
|
-
? []
|
|
177
|
-
: turn.items.map((item) => ({ turnId: turn.id, item })));
|
|
178
|
-
const ordered = params.sortDirection === "desc" ? [...items].reverse() : items;
|
|
179
|
-
const limit = Math.max(1, Math.min(params.limit ?? 50, 100));
|
|
180
|
-
const data = ordered.slice(offset, offset + limit);
|
|
181
|
-
return {
|
|
182
|
-
data,
|
|
183
|
-
nextCursor: offset + data.length < ordered.length ? `hyb-overlay-item:${offset + data.length}` : null,
|
|
184
|
-
backwardsCursor: data.length > 0 ? `hyb-overlay-item:${Math.max(0, offset - limit)}` : null,
|
|
185
|
-
};
|
|
189
|
+
return paginateItems(turns, params, ["hyb-overlay-item:"]);
|
|
186
190
|
}
|
|
187
191
|
function messageThreadId(message) {
|
|
188
192
|
if (!message.params || typeof message.params !== "object")
|
|
@@ -217,7 +221,7 @@ export class CrossProviderForks {
|
|
|
217
221
|
titleTurns = new Map();
|
|
218
222
|
stockServerRequests = new Map();
|
|
219
223
|
stockServerRequestAliases = new Map();
|
|
220
|
-
|
|
224
|
+
recentDurableThreads = new Map();
|
|
221
225
|
adminTails = new Map();
|
|
222
226
|
lineage;
|
|
223
227
|
legacyMirror;
|
|
@@ -236,6 +240,9 @@ export class CrossProviderForks {
|
|
|
236
240
|
}
|
|
237
241
|
pending(threadId) { return this.store.getPending(threadId); }
|
|
238
242
|
logical(threadId) { return this.epochs.resolve(threadId); }
|
|
243
|
+
currentBackendId(publicThreadId) {
|
|
244
|
+
return this.epochs.resolve(publicThreadId)?.epoch.backendThreadId;
|
|
245
|
+
}
|
|
239
246
|
hiddenBackendIds(provider) { return this.epochs.hiddenBackendIds(provider); }
|
|
240
247
|
catalogTombstones() { return this.store.remoteCatalogTombstones(); }
|
|
241
248
|
async sideSnapshot(params, targetThreadId) {
|
|
@@ -398,6 +405,16 @@ export class CrossProviderForks {
|
|
|
398
405
|
return { provider: resolved.epoch.provider, result: {} };
|
|
399
406
|
}
|
|
400
407
|
}
|
|
408
|
+
if (method === "thread/searchOccurrences") {
|
|
409
|
+
const stock = this.daemonStock ?? clientStock;
|
|
410
|
+
const turns = resolved.epoch.backendThreadId.startsWith("ccodex-provisional:")
|
|
411
|
+
? this.store.listLogicalTurns(publicThreadId).map((value) => value.turn)
|
|
412
|
+
: await this.visibleTurns(publicThreadId, await this.currentBackendTurns(resolved, stock), stock);
|
|
413
|
+
return {
|
|
414
|
+
provider: resolved.epoch.provider,
|
|
415
|
+
result: searchTurnOccurrences(publicThreadId, turns, publicParams),
|
|
416
|
+
};
|
|
417
|
+
}
|
|
401
418
|
if (resolved.epoch.backendThreadId.startsWith("ccodex-provisional:")) {
|
|
402
419
|
return this.requestProvisionalLogical(method, publicParams, resolved);
|
|
403
420
|
}
|
|
@@ -407,16 +424,10 @@ export class CrossProviderForks {
|
|
|
407
424
|
const result = await this.withAdminLock(publicThreadId, () => stock.request(method, params));
|
|
408
425
|
return { provider: "stock", result: projectRpcToPublicThread({ result }, owner).result };
|
|
409
426
|
}
|
|
410
|
-
if (method === "thread/metadata/update") {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
if (metadata.isPinned !== undefined && metadata.isPinned !== null
|
|
415
|
-
&& !this.lineage.updateTaskPinned(publicThreadId, metadata.isPinned)) {
|
|
416
|
-
throw new Error(`Unknown logical thread '${publicThreadId}'.`);
|
|
417
|
-
}
|
|
418
|
-
return response;
|
|
419
|
-
});
|
|
427
|
+
if (method === "thread/metadata/update" || method === "thread/section/move") {
|
|
428
|
+
// Section membership lives on the current backend thread; it is not
|
|
429
|
+
// mirrored across provider switches.
|
|
430
|
+
const result = await this.withAdminLock(publicThreadId, () => stock.request(method, params));
|
|
420
431
|
return { provider: "stock", result: projectRpcToPublicThread({ result }, owner).result };
|
|
421
432
|
}
|
|
422
433
|
if (method === "thread/read" || method === "thread/resume") {
|
|
@@ -425,33 +436,25 @@ export class CrossProviderForks {
|
|
|
425
436
|
const includeTurns = resume
|
|
426
437
|
? !resume.excludeTurns
|
|
427
438
|
: params.includeTurns ?? false;
|
|
428
|
-
const backendTurns = resume
|
|
429
|
-
? (await stock
|
|
430
|
-
threadId: resolved.epoch.backendThreadId,
|
|
431
|
-
includeTurns: true,
|
|
432
|
-
})).thread.turns
|
|
439
|
+
const backendTurns = resume && !includeTurns
|
|
440
|
+
? (await readStockThread(stock, resolved.epoch.backendThreadId)).turns
|
|
433
441
|
: result.thread.turns;
|
|
442
|
+
const visible = resume ? await this.visibleTurns(publicThreadId, backendTurns, stock) : [];
|
|
434
443
|
const initialTurnsPage = resume?.initialTurnsPage
|
|
435
|
-
? pageTurns(
|
|
436
|
-
|
|
437
|
-
...resume.initialTurnsPage,
|
|
438
|
-
})
|
|
439
|
-
: "initialTurnsPage" in result ? result.initialTurnsPage : undefined;
|
|
444
|
+
? pageTurns(visible, { threadId: publicThreadId, ...resume.initialTurnsPage })
|
|
445
|
+
: undefined;
|
|
440
446
|
return {
|
|
441
447
|
provider: "stock",
|
|
442
448
|
result: {
|
|
443
449
|
...result,
|
|
444
450
|
thread: this.epochs.projectThread(publicThreadId, projectItemIds(result.thread, resolved.epoch.id), includeTurns, includeTurns ? (await this.historicalTurns(publicThreadId, stock)).map((entry) => entry.turn) : []),
|
|
445
|
-
...(resume ? { initialTurnsPage } : {}),
|
|
451
|
+
...(resume ? { initialTurnsPage, ...historyCursors(visible) } : {}),
|
|
446
452
|
},
|
|
447
453
|
};
|
|
448
454
|
}
|
|
449
455
|
if (method === "thread/turns/list" || method === "thread/items/list") {
|
|
450
|
-
const read = await stock
|
|
451
|
-
|
|
452
|
-
includeTurns: true,
|
|
453
|
-
});
|
|
454
|
-
const turns = await this.visibleTurns(publicThreadId, read.thread.turns, stock);
|
|
456
|
+
const read = await readStockThread(stock, resolved.epoch.backendThreadId);
|
|
457
|
+
const turns = await this.visibleTurns(publicThreadId, read.turns, stock);
|
|
455
458
|
return {
|
|
456
459
|
provider: "stock",
|
|
457
460
|
result: method === "thread/turns/list"
|
|
@@ -483,19 +486,18 @@ export class CrossProviderForks {
|
|
|
483
486
|
const thread = this.epochs.projectThread(publicThreadId, projectItemIds(response.thread, resolved.epoch.id), !resume.excludeTurns, !resume.excludeTurns
|
|
484
487
|
? (await this.historicalTurns(publicThreadId, this.daemonStock ?? clientStock)).map((entry) => entry.turn)
|
|
485
488
|
: []);
|
|
486
|
-
const backendTurns = resume.
|
|
489
|
+
const backendTurns = resume.excludeTurns
|
|
487
490
|
? this.claude.readThread(threadId, true).thread.turns
|
|
488
491
|
: response.thread.turns;
|
|
492
|
+
const visible = await this.visibleTurns(publicThreadId, backendTurns, this.daemonStock ?? clientStock);
|
|
489
493
|
return {
|
|
490
494
|
provider: "claude",
|
|
491
495
|
result: {
|
|
492
496
|
...response,
|
|
493
497
|
thread,
|
|
498
|
+
...historyCursors(visible),
|
|
494
499
|
...(resume.initialTurnsPage ? {
|
|
495
|
-
initialTurnsPage: pageTurns(
|
|
496
|
-
threadId: publicThreadId,
|
|
497
|
-
...resume.initialTurnsPage,
|
|
498
|
-
}),
|
|
500
|
+
initialTurnsPage: pageTurns(visible, { threadId: publicThreadId, ...resume.initialTurnsPage }),
|
|
499
501
|
} : {}),
|
|
500
502
|
},
|
|
501
503
|
after: async () => prepared.notifyGoalSnapshot((event, eventParams) => {
|
|
@@ -537,19 +539,19 @@ export class CrossProviderForks {
|
|
|
537
539
|
}
|
|
538
540
|
}
|
|
539
541
|
if (method === "thread/metadata/update") {
|
|
540
|
-
const metadata = publicParams;
|
|
541
542
|
return {
|
|
542
543
|
provider: "claude",
|
|
543
|
-
result: await this.withAdminLock(publicThreadId,
|
|
544
|
-
const result = await this.claude.updateThreadMetadata(params);
|
|
545
|
-
if (metadata.isPinned !== undefined && metadata.isPinned !== null
|
|
546
|
-
&& !this.lineage.updateTaskPinned(publicThreadId, metadata.isPinned)) {
|
|
547
|
-
throw new Error(`Unknown logical thread '${publicThreadId}'.`);
|
|
548
|
-
}
|
|
549
|
-
return result;
|
|
550
|
-
}),
|
|
544
|
+
result: await this.withAdminLock(publicThreadId, () => this.claude.updateThreadMetadata(params)),
|
|
551
545
|
};
|
|
552
546
|
}
|
|
547
|
+
if (method === "thread/section/move") {
|
|
548
|
+
const move = params;
|
|
549
|
+
const section = move.sectionId === null
|
|
550
|
+
? null
|
|
551
|
+
: await findStockSection(this.daemonStock ?? clientStock, move.sectionId);
|
|
552
|
+
await this.withAdminLock(publicThreadId, () => this.claude.setThreadSection(move.threadId, section));
|
|
553
|
+
return { provider: "claude", result: {} };
|
|
554
|
+
}
|
|
553
555
|
if (method === "thread/archive") {
|
|
554
556
|
const buffer = this.subscriptions?.bufferLifecycle(threadId, ["thread/archived"]);
|
|
555
557
|
try {
|
|
@@ -626,6 +628,41 @@ export class CrossProviderForks {
|
|
|
626
628
|
if (method === "turn/steer") {
|
|
627
629
|
return { provider: "claude", result: await this.claude.steerTurn(params) };
|
|
628
630
|
}
|
|
631
|
+
if (method === "thread/queue/list") {
|
|
632
|
+
return { provider: "claude", result: this.claude.listQueue(params) };
|
|
633
|
+
}
|
|
634
|
+
if (method === "app/list" || method === "mcpServerStatus/list") {
|
|
635
|
+
return { provider: "claude", result: { data: [], nextCursor: null } };
|
|
636
|
+
}
|
|
637
|
+
if (method === "app/installed")
|
|
638
|
+
return { provider: "claude", result: { apps: [] } };
|
|
639
|
+
if (method === "thread/queue/add") {
|
|
640
|
+
const prepared = await this.claude.addQueuedSubmission(params);
|
|
641
|
+
return { provider: "claude", result: prepared.response, after: prepared.after };
|
|
642
|
+
}
|
|
643
|
+
if (method === "thread/queue/update") {
|
|
644
|
+
return {
|
|
645
|
+
provider: "claude",
|
|
646
|
+
result: await this.claude.updateQueuedSubmission(params),
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
if (method === "thread/queue/delete") {
|
|
650
|
+
return {
|
|
651
|
+
provider: "claude",
|
|
652
|
+
result: await this.claude.deleteQueuedSubmission(params),
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
if (method === "thread/queue/reorder") {
|
|
656
|
+
return { provider: "claude", result: await this.claude.reorderQueue(params) };
|
|
657
|
+
}
|
|
658
|
+
if (method === "thread/queue/start") {
|
|
659
|
+
const prepared = await this.claude.prepareQueueStart(params);
|
|
660
|
+
return {
|
|
661
|
+
provider: "claude",
|
|
662
|
+
result: prepared.response,
|
|
663
|
+
after: async () => { await prepared.announce(); prepared.start(); },
|
|
664
|
+
};
|
|
665
|
+
}
|
|
629
666
|
throw invalidParams(`Method '${method}' is not implemented for a migrated Claude task yet.`);
|
|
630
667
|
}
|
|
631
668
|
requestProvisionalLogical(method, params, resolved) {
|
|
@@ -643,10 +680,12 @@ export class CrossProviderForks {
|
|
|
643
680
|
}
|
|
644
681
|
if (method === "thread/resume") {
|
|
645
682
|
const settings = resolved.epoch.settings;
|
|
683
|
+
const resume = params;
|
|
646
684
|
return {
|
|
647
685
|
provider: resolved.epoch.provider,
|
|
648
686
|
result: {
|
|
649
|
-
thread: thread(!
|
|
687
|
+
thread: thread(!resume.excludeTurns),
|
|
688
|
+
...historyCursors(turns),
|
|
650
689
|
model: resolved.epoch.model,
|
|
651
690
|
modelProvider: resolved.epoch.provider === "claude" ? "claude" : "openai",
|
|
652
691
|
serviceTier: typeof settings.serviceTier === "string" ? settings.serviceTier : null,
|
|
@@ -660,7 +699,9 @@ export class CrossProviderForks {
|
|
|
660
699
|
activePermissionProfile: settings.activePermissionProfile ?? null,
|
|
661
700
|
reasoningEffort: settings.reasoningEffort ?? settings.effort ?? null,
|
|
662
701
|
multiAgentMode: settings.multiAgentMode ?? "explicitRequestOnly",
|
|
663
|
-
initialTurnsPage:
|
|
702
|
+
initialTurnsPage: resume.initialTurnsPage
|
|
703
|
+
? pageTurns(turns, { threadId: resolved.logical.publicThreadId, ...resume.initialTurnsPage })
|
|
704
|
+
: null,
|
|
664
705
|
},
|
|
665
706
|
};
|
|
666
707
|
}
|
|
@@ -695,9 +736,15 @@ export class CrossProviderForks {
|
|
|
695
736
|
}
|
|
696
737
|
const currentTurns = await this.currentBackendTurns(source, this.daemonStock ?? clientStock);
|
|
697
738
|
const visible = await this.snapshotTurns(params.threadId, currentTurns, this.daemonStock ?? clientStock);
|
|
698
|
-
const
|
|
739
|
+
const requested = params.lastTurnId ?? params.beforeTurnId;
|
|
740
|
+
const requestedIndex = requested ? visible.findIndex((turn) => turn.turn.id === requested) : undefined;
|
|
741
|
+
if (requestedIndex === -1)
|
|
742
|
+
throw invalidRequest(`turn not found: ${requested}`);
|
|
743
|
+
const boundaryIndex = requestedIndex === undefined
|
|
744
|
+
? visible.findLastIndex((turn) => turn.turn.status === "completed" && turn.epochId && turn.providerTurnId)
|
|
745
|
+
: params.lastTurnId ? requestedIndex : requestedIndex - 1;
|
|
699
746
|
const boundary = visible[boundaryIndex];
|
|
700
|
-
if (!boundary?.epochId || !boundary.providerTurnId) {
|
|
747
|
+
if (!boundary?.epochId || !boundary.providerTurnId || boundary.turn.status !== "completed") {
|
|
701
748
|
throw invalidParams("Cannot fork before the task has a completed provider turn.");
|
|
702
749
|
}
|
|
703
750
|
const selectedBoundary = this.lineage.getEpoch(boundary.epochId);
|
|
@@ -801,21 +848,37 @@ export class CrossProviderForks {
|
|
|
801
848
|
throw error;
|
|
802
849
|
}
|
|
803
850
|
}
|
|
804
|
-
|
|
851
|
+
rollbackLogicalThread(params, clientStock, connectionId) {
|
|
852
|
+
if (!Number.isInteger(params.numTurns) || params.numTurns < 0) {
|
|
853
|
+
throw invalidParams("numTurns must be a non-negative integer.");
|
|
854
|
+
}
|
|
855
|
+
return this.truncateLogicalThread(params.threadId, (turns) => turns.length - params.numTurns, clientStock, connectionId);
|
|
856
|
+
}
|
|
857
|
+
/** `thread/revert` on a logical thread: drops `beforeTurnId` and later public turns via the rollback path. */
|
|
858
|
+
async revertLogicalThread(params, clientStock, connectionId) {
|
|
859
|
+
const { thread } = await this.truncateLogicalThread(params.threadId, (turns) => {
|
|
860
|
+
const keep = turns.findIndex((entry) => entry.publicTurnId === params.beforeTurnId);
|
|
861
|
+
if (keep === -1)
|
|
862
|
+
throw invalidParams(`Unknown turn '${params.beforeTurnId}'.`);
|
|
863
|
+
return keep;
|
|
864
|
+
}, clientStock, connectionId);
|
|
865
|
+
return { thread: { ...thread, turns: [] }, ...historyCursors(thread.turns) };
|
|
866
|
+
}
|
|
867
|
+
async truncateLogicalThread(publicThreadId, keepOf, clientStock, connectionId) {
|
|
868
|
+
const params = { threadId: publicThreadId };
|
|
805
869
|
const selection = this.store.getForkSelection(params.threadId);
|
|
806
870
|
const unresolvedTarget = this.epochs.resolve(params.threadId);
|
|
807
871
|
if (!unresolvedTarget)
|
|
808
872
|
throw invalidParams(`Unknown logical thread '${params.threadId}'.`);
|
|
809
873
|
const target = await this.hydrate(unresolvedTarget, this.daemonStock ?? clientStock);
|
|
810
|
-
if (!Number.isInteger(params.numTurns) || params.numTurns < 0) {
|
|
811
|
-
throw invalidParams("numTurns must be a non-negative integer.");
|
|
812
|
-
}
|
|
813
874
|
const pendingFork = selection?.status === "pending" ? selection : undefined;
|
|
814
|
-
const
|
|
875
|
+
const backend = await this.backendThread(target, this.daemonStock ?? clientStock);
|
|
876
|
+
const currentTurns = backend?.turns ?? [];
|
|
815
877
|
const turns = await this.snapshotTurns(params.threadId, currentTurns, this.daemonStock ?? clientStock);
|
|
816
|
-
const keep = turns
|
|
878
|
+
const keep = keepOf(turns);
|
|
817
879
|
if (keep <= 0)
|
|
818
880
|
throw invalidParams("Rollback removed every provider turn.");
|
|
881
|
+
const numTurns = turns.length - keep;
|
|
819
882
|
const retained = turns.slice(0, keep);
|
|
820
883
|
const boundary = [...retained].reverse().find((turn) => turn.epochId && turn.providerTurnId);
|
|
821
884
|
if (!boundary?.epochId || !boundary.providerTurnId) {
|
|
@@ -828,25 +891,10 @@ export class CrossProviderForks {
|
|
|
828
891
|
}
|
|
829
892
|
const selectedEpoch = await this.hydrateEpoch(selectedBoundary.epochId, this.daemonStock ?? clientStock);
|
|
830
893
|
if (!pendingFork && selectedEpoch.id === target.epoch.id) {
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
threadId: target.epoch.backendThreadId,
|
|
836
|
-
includeTurns: true,
|
|
837
|
-
})).thread;
|
|
838
|
-
return { thread: this.epochs.projectThread(params.threadId, projectItemIds(backend, target.epoch.id), true, (await this.historicalTurns(params.threadId, this.daemonStock ?? clientStock)).map((entry) => entry.turn)) };
|
|
839
|
-
}
|
|
840
|
-
const rolled = target.epoch.provider === "claude"
|
|
841
|
-
? await this.claude.rollbackThread({
|
|
842
|
-
threadId: target.epoch.backendThreadId,
|
|
843
|
-
numTurns: params.numTurns,
|
|
844
|
-
})
|
|
845
|
-
: await clientStock.request("thread/rollback", {
|
|
846
|
-
threadId: target.epoch.backendThreadId,
|
|
847
|
-
numTurns: params.numTurns,
|
|
848
|
-
});
|
|
849
|
-
return { thread: this.epochs.projectThread(params.threadId, projectItemIds(rolled.thread, target.epoch.id), true, (await this.historicalTurns(params.threadId, this.daemonStock ?? clientStock)).map((entry) => entry.turn)) };
|
|
894
|
+
const rolled = numTurns === 0
|
|
895
|
+
? backend
|
|
896
|
+
: await this.truncateBackend(target, backend, turns[keep], numTurns, clientStock);
|
|
897
|
+
return { thread: this.epochs.projectThread(params.threadId, projectItemIds(rolled, target.epoch.id), true, (await this.historicalTurns(params.threadId, this.daemonStock ?? clientStock)).map((entry) => entry.turn)) };
|
|
850
898
|
}
|
|
851
899
|
let forked;
|
|
852
900
|
let stockBuildOwner;
|
|
@@ -1139,10 +1187,7 @@ export class CrossProviderForks {
|
|
|
1139
1187
|
if (job.targetBackendThreadId && job.targetProviderTurnId) {
|
|
1140
1188
|
const target = job.targetProvider === "claude"
|
|
1141
1189
|
? this.claude.readThread(job.targetBackendThreadId, true).thread
|
|
1142
|
-
:
|
|
1143
|
-
threadId: job.targetBackendThreadId,
|
|
1144
|
-
includeTurns: true,
|
|
1145
|
-
})).thread;
|
|
1190
|
+
: await readStockThread(stock, job.targetBackendThreadId);
|
|
1146
1191
|
if (target.turns.some((turn) => turn.id === job.targetProviderTurnId)) {
|
|
1147
1192
|
const material = await this.providerSwitchMaterial(job, stock, `${HANDOFF_DAEMON_CONNECTION_ID}:recovery:${job.id}`);
|
|
1148
1193
|
const sealed = await this.finalizeProviderSwitch(job, target, material.targetSettings, material.sourceTurns, stock);
|
|
@@ -1274,7 +1319,7 @@ export class CrossProviderForks {
|
|
|
1274
1319
|
if (items.length > 0)
|
|
1275
1320
|
await stock.request("thread/inject_items", { threadId: created.thread.id, items });
|
|
1276
1321
|
const threads = this.systemEphemeralThreads.get(connectionId) ?? new Map();
|
|
1277
|
-
threads.set(created.thread.id, { durableProvider: "claude" });
|
|
1322
|
+
threads.set(created.thread.id, { durableProvider: "claude", durableThreadId: params.threadId });
|
|
1278
1323
|
this.systemEphemeralThreads.set(connectionId, threads);
|
|
1279
1324
|
return {
|
|
1280
1325
|
...created,
|
|
@@ -1322,9 +1367,9 @@ export class CrossProviderForks {
|
|
|
1322
1367
|
const directStart = !("threadId" in params);
|
|
1323
1368
|
if (params.ephemeral !== true)
|
|
1324
1369
|
return;
|
|
1325
|
-
const
|
|
1326
|
-
? this.claude.ownsThread(params.threadId) ? "claude" : "stock"
|
|
1327
|
-
: this.
|
|
1370
|
+
const owner = "threadId" in params
|
|
1371
|
+
? { durableProvider: this.claude.ownsThread(params.threadId) ? "claude" : "stock", durableThreadId: params.threadId }
|
|
1372
|
+
: this.recentDurableThreads.get(connectionId) ?? { durableProvider: "stock" };
|
|
1328
1373
|
const candidates = directStart && params.threadSource !== "system" && params.threadSource !== "user"
|
|
1329
1374
|
? this.directTitleCandidates
|
|
1330
1375
|
: params.threadSource === "system" ? this.systemEphemeralThreads : undefined;
|
|
@@ -1333,11 +1378,11 @@ export class CrossProviderForks {
|
|
|
1333
1378
|
const threads = candidates.get(connectionId) ?? new Map();
|
|
1334
1379
|
if (threads.size >= 64 && !threads.has(threadId))
|
|
1335
1380
|
threads.delete(threads.keys().next().value);
|
|
1336
|
-
threads.set(threadId,
|
|
1381
|
+
threads.set(threadId, owner);
|
|
1337
1382
|
candidates.set(connectionId, threads);
|
|
1338
1383
|
}
|
|
1339
|
-
observeDurableThread(connectionId, provider) {
|
|
1340
|
-
this.
|
|
1384
|
+
observeDurableThread(connectionId, provider, threadId) {
|
|
1385
|
+
this.recentDurableThreads.set(connectionId, { durableProvider: provider, durableThreadId: threadId });
|
|
1341
1386
|
}
|
|
1342
1387
|
observeDurableTurn(connectionId, params) {
|
|
1343
1388
|
if (this.systemEphemeralThreads.get(connectionId)?.has(params.threadId)
|
|
@@ -1348,7 +1393,9 @@ export class CrossProviderForks {
|
|
|
1348
1393
|
return;
|
|
1349
1394
|
const durableProvider = this.claude.ownsThread(params.threadId) ? "claude" : "stock";
|
|
1350
1395
|
const turn = [...this.titleTurns.values()].reverse()
|
|
1351
|
-
.find((candidate) => candidate.connectionId === connectionId
|
|
1396
|
+
.find((candidate) => candidate.connectionId === connectionId
|
|
1397
|
+
&& (!candidate.durableThreadId || candidate.durableThreadId === params.threadId)
|
|
1398
|
+
&& candidate.userPrompt.trim() === text);
|
|
1352
1399
|
if (turn)
|
|
1353
1400
|
turn.durableProvider = durableProvider;
|
|
1354
1401
|
}
|
|
@@ -1373,6 +1420,7 @@ export class CrossProviderForks {
|
|
|
1373
1420
|
return params;
|
|
1374
1421
|
const turn = {
|
|
1375
1422
|
durableProvider: owner.durableProvider,
|
|
1423
|
+
durableThreadId: owner.durableThreadId,
|
|
1376
1424
|
connectionId,
|
|
1377
1425
|
userPrompt: prompt.userPrompt,
|
|
1378
1426
|
outputSchema: prompt.outputSchema,
|
|
@@ -1383,6 +1431,19 @@ export class CrossProviderForks {
|
|
|
1383
1431
|
: item);
|
|
1384
1432
|
return { ...params, input };
|
|
1385
1433
|
}
|
|
1434
|
+
async persistGeneratedTitle(message) {
|
|
1435
|
+
if (message.method !== "turn/completed")
|
|
1436
|
+
return;
|
|
1437
|
+
const params = message.params;
|
|
1438
|
+
const title = this.titleTurns.get(params.threadId);
|
|
1439
|
+
if (params.turn.status !== "completed" || title?.durableProvider !== "claude"
|
|
1440
|
+
|| !title.durableThreadId || !title.output)
|
|
1441
|
+
return;
|
|
1442
|
+
await this.claude.setGeneratedThreadName({
|
|
1443
|
+
threadId: title.durableThreadId,
|
|
1444
|
+
name: JSON.parse(title.output).title,
|
|
1445
|
+
}, title.userPrompt);
|
|
1446
|
+
}
|
|
1386
1447
|
rewriteTitleMessages(message) {
|
|
1387
1448
|
if (!message.params || typeof message.params !== "object")
|
|
1388
1449
|
return undefined;
|
|
@@ -1499,7 +1560,7 @@ export class CrossProviderForks {
|
|
|
1499
1560
|
const threads = this.systemEphemeralThreads.get(connectionId) ?? new Map();
|
|
1500
1561
|
this.systemEphemeralThreads.delete(connectionId);
|
|
1501
1562
|
this.directTitleCandidates.delete(connectionId);
|
|
1502
|
-
this.
|
|
1563
|
+
this.recentDurableThreads.delete(connectionId);
|
|
1503
1564
|
for (const threadId of threads.keys())
|
|
1504
1565
|
this.titleTurns.delete(threadId);
|
|
1505
1566
|
await Promise.allSettled([...threads.keys()].map((threadId) => stock.request("thread/delete", { threadId })));
|
|
@@ -1547,6 +1608,7 @@ export class CrossProviderForks {
|
|
|
1547
1608
|
const full = await this.fullOverlayTurns(params.threadId, overlay, stock);
|
|
1548
1609
|
return {
|
|
1549
1610
|
...result,
|
|
1611
|
+
...historyCursors(full),
|
|
1550
1612
|
thread: this.patchThread(result.thread, overlay, !params.excludeTurns, full),
|
|
1551
1613
|
initialTurnsPage: params.initialTurnsPage ? pageTurns(full, {
|
|
1552
1614
|
threadId: params.threadId,
|
|
@@ -1584,10 +1646,10 @@ export class CrossProviderForks {
|
|
|
1584
1646
|
}
|
|
1585
1647
|
else {
|
|
1586
1648
|
const [read, resume] = await Promise.all([
|
|
1587
|
-
stock
|
|
1649
|
+
readStockThread(stock, threadId),
|
|
1588
1650
|
stock.request("thread/resume", { threadId, excludeTurns: true }),
|
|
1589
1651
|
]);
|
|
1590
|
-
resolved = this.epochs.seed(read
|
|
1652
|
+
resolved = this.epochs.seed(read, "stock", resume.model, resume);
|
|
1591
1653
|
}
|
|
1592
1654
|
}
|
|
1593
1655
|
if (resolved.epoch.provider !== pending.sourceProvider) {
|
|
@@ -1596,17 +1658,32 @@ export class CrossProviderForks {
|
|
|
1596
1658
|
this.store.setPending({ ...pending, expectedEpochId: resolved.epoch.id });
|
|
1597
1659
|
return this.epochs.resolve(threadId);
|
|
1598
1660
|
}
|
|
1599
|
-
async
|
|
1661
|
+
async backendThread(resolved, stock) {
|
|
1600
1662
|
if (resolved.epoch.backendThreadId.startsWith("ccodex-provisional:"))
|
|
1601
|
-
return
|
|
1602
|
-
if (resolved.epoch.provider === "claude")
|
|
1603
|
-
return this.claude.readThread(resolved.epoch.backendThreadId, true).thread
|
|
1663
|
+
return undefined;
|
|
1664
|
+
if (resolved.epoch.provider === "claude")
|
|
1665
|
+
return this.claude.readThread(resolved.epoch.backendThreadId, true).thread;
|
|
1666
|
+
return readStockThread(stock, resolved.epoch.backendThreadId);
|
|
1667
|
+
}
|
|
1668
|
+
/** Drops the current epoch's trailing turns: `thread/revert` on paginated backends, `thread/rollback` on legacy ones. */
|
|
1669
|
+
async truncateBackend(target, backend, firstDropped, numTurns, clientStock) {
|
|
1670
|
+
const threadId = target.epoch.backendThreadId;
|
|
1671
|
+
if (backend.historyMode !== "paginated") {
|
|
1672
|
+
const rolled = target.epoch.provider === "claude"
|
|
1673
|
+
? await this.claude.rollbackThread({ threadId, numTurns })
|
|
1674
|
+
: await clientStock.request("thread/rollback", { threadId, numTurns });
|
|
1675
|
+
return rolled.thread;
|
|
1604
1676
|
}
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1677
|
+
if (!firstDropped.providerTurnId)
|
|
1678
|
+
throw invalidParams("Rollback has no provider-backed turn boundary.");
|
|
1679
|
+
const revert = { threadId, beforeTurnId: firstDropped.providerTurnId };
|
|
1680
|
+
const reverted = target.epoch.provider === "claude"
|
|
1681
|
+
? await this.claude.revertThread(revert)
|
|
1682
|
+
: await clientStock.request("thread/revert", revert);
|
|
1683
|
+
return { ...reverted.thread, turns: backend.turns.slice(0, backend.turns.length - numTurns) };
|
|
1684
|
+
}
|
|
1685
|
+
async currentBackendTurns(resolved, stock) {
|
|
1686
|
+
return (await this.backendThread(resolved, stock))?.turns ?? [];
|
|
1610
1687
|
}
|
|
1611
1688
|
async hydrate(resolved, stock) {
|
|
1612
1689
|
if (resolved.epoch.backendThreadId.startsWith("ccodex-provisional:"))
|
|
@@ -1699,10 +1776,7 @@ export class CrossProviderForks {
|
|
|
1699
1776
|
if (!turns) {
|
|
1700
1777
|
turns = epoch.provider === "claude"
|
|
1701
1778
|
? this.claude.readThread(epoch.backendThreadId, true).thread.turns
|
|
1702
|
-
: (await stock
|
|
1703
|
-
threadId: epoch.backendThreadId,
|
|
1704
|
-
includeTurns: true,
|
|
1705
|
-
})).thread.turns;
|
|
1779
|
+
: (await readStockThread(stock, epoch.backendThreadId)).turns;
|
|
1706
1780
|
loaded.set(epoch.epochId, turns);
|
|
1707
1781
|
}
|
|
1708
1782
|
const start = turns.findIndex((turn) => turn.id === segment.startTurnId);
|
|
@@ -1804,19 +1878,16 @@ export class CrossProviderForks {
|
|
|
1804
1878
|
};
|
|
1805
1879
|
}
|
|
1806
1880
|
const [read, resume] = await Promise.all([
|
|
1807
|
-
stock.
|
|
1808
|
-
threadId: resolved.epoch.backendThreadId,
|
|
1809
|
-
includeTurns: true,
|
|
1810
|
-
}),
|
|
1881
|
+
readStockThread(stock, resolved.epoch.backendThreadId),
|
|
1811
1882
|
stock.request("thread/resume", {
|
|
1812
1883
|
threadId: resolved.epoch.backendThreadId,
|
|
1813
1884
|
excludeTurns: true,
|
|
1814
1885
|
}),
|
|
1815
1886
|
]);
|
|
1816
1887
|
return {
|
|
1817
|
-
thread: read
|
|
1818
|
-
backendTurns: read.
|
|
1819
|
-
turns: await this.visibleTurns(job.publicThreadId, read.
|
|
1888
|
+
thread: read,
|
|
1889
|
+
backendTurns: read.turns,
|
|
1890
|
+
turns: await this.visibleTurns(job.publicThreadId, read.turns, stock),
|
|
1820
1891
|
settings: resume,
|
|
1821
1892
|
};
|
|
1822
1893
|
}
|
|
@@ -2151,8 +2222,8 @@ export class CrossProviderForks {
|
|
|
2151
2222
|
};
|
|
2152
2223
|
}
|
|
2153
2224
|
async fullOverlayTurns(threadId, overlay, stock) {
|
|
2154
|
-
const read = await stock
|
|
2155
|
-
return [...overlay.inheritedTurns, ...read.
|
|
2225
|
+
const read = await readStockThread(stock, threadId);
|
|
2226
|
+
return [...overlay.inheritedTurns, ...read.turns];
|
|
2156
2227
|
}
|
|
2157
2228
|
}
|
|
2158
2229
|
//# sourceMappingURL=service.js.map
|