@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.
Files changed (545) hide show
  1. package/README.md +4 -2
  2. package/agents/codex-wrapper.md +1 -0
  3. package/config/compatibility.json +5 -5
  4. package/dist/claude/inputMapper.d.ts +5 -0
  5. package/dist/claude/inputMapper.js +9 -0
  6. package/dist/claude/inputMapper.js.map +1 -1
  7. package/dist/claude/modelCatalog.d.ts +4 -0
  8. package/dist/claude/modelCatalog.js +14 -0
  9. package/dist/claude/modelCatalog.js.map +1 -1
  10. package/dist/claude/modelSelection.d.ts +14 -0
  11. package/dist/claude/modelSelection.js +26 -0
  12. package/dist/claude/modelSelection.js.map +1 -1
  13. package/dist/claude/rateLimits.d.ts +2 -1
  14. package/dist/claude/rateLimits.js +12 -16
  15. package/dist/claude/rateLimits.js.map +1 -1
  16. package/dist/claude/resultClassifier.js +4 -1
  17. package/dist/claude/resultClassifier.js.map +1 -1
  18. package/dist/claude/service.d.ts +66 -2
  19. package/dist/claude/service.js +301 -130
  20. package/dist/claude/service.js.map +1 -1
  21. package/dist/claude/session/codexRollout.js +40 -1
  22. package/dist/claude/session/codexRollout.js.map +1 -1
  23. package/dist/claude/session/commands.d.ts +44 -1
  24. package/dist/claude/session/goalState.d.ts +5 -0
  25. package/dist/claude/session/goalState.js +22 -0
  26. package/dist/claude/session/goalState.js.map +1 -1
  27. package/dist/claude/session/providerRuntimeFactory.js +13 -2
  28. package/dist/claude/session/providerRuntimeFactory.js.map +1 -1
  29. package/dist/claude/session/repository.d.ts +3 -0
  30. package/dist/claude/session/repository.js +2 -0
  31. package/dist/claude/session/repository.js.map +1 -1
  32. package/dist/claude/session/runtime.js +1 -1
  33. package/dist/claude/session/runtime.js.map +1 -1
  34. package/dist/claude/session/scopeState.js +1 -0
  35. package/dist/claude/session/scopeState.js.map +1 -1
  36. package/dist/claude/session/session.d.ts +1 -0
  37. package/dist/claude/session/session.js +171 -49
  38. package/dist/claude/session/session.js.map +1 -1
  39. package/dist/claude/skillCatalog.js +1 -0
  40. package/dist/claude/skillCatalog.js.map +1 -1
  41. package/dist/claude/statusCommand.js +1 -2
  42. package/dist/claude/statusCommand.js.map +1 -1
  43. package/dist/claude/toolMapper.js +1 -1
  44. package/dist/claude/toolMapper.js.map +1 -1
  45. package/dist/codex/generated/AuthMode.d.ts +1 -1
  46. package/dist/codex/generated/ClientRequest.d.ts +142 -1
  47. package/dist/codex/generated/ImageGenerationFailure.d.ts +5 -0
  48. package/dist/codex/generated/ImageGenerationFailure.js +3 -0
  49. package/dist/codex/generated/ImageGenerationFailure.js.map +1 -0
  50. package/dist/codex/generated/ImageGenerationItem.d.ts +3 -0
  51. package/dist/codex/generated/InitializeCapabilities.d.ts +10 -1
  52. package/dist/codex/generated/InternalSessionSource.d.ts +1 -1
  53. package/dist/codex/generated/PathUri.d.ts +4 -3
  54. package/dist/codex/generated/PlanType.d.ts +1 -1
  55. package/dist/codex/generated/ResponseItem.d.ts +4 -1
  56. package/dist/codex/generated/ResponseItemRuntimeSchema.js +2 -2
  57. package/dist/codex/generated/ResponseItemRuntimeSchema.js.map +1 -1
  58. package/dist/codex/generated/ReviewDecision.d.ts +1 -1
  59. package/dist/codex/generated/ServerNotification.d.ts +43 -0
  60. package/dist/codex/generated/ServerNotificationEnvelope.d.ts +43 -0
  61. package/dist/codex/generated/index.d.ts +1 -0
  62. package/dist/codex/generated/index.js.map +1 -1
  63. package/dist/codex/generated/v2/AccountLoginCompletedNotification.d.ts +2 -0
  64. package/dist/codex/generated/v2/AgentMessageDelivery.d.ts +1 -0
  65. package/dist/codex/generated/v2/AgentMessageDelivery.js +3 -0
  66. package/dist/codex/generated/v2/AgentMessageDelivery.js.map +1 -0
  67. package/dist/codex/generated/v2/AllowDenyRequirement.d.ts +1 -0
  68. package/dist/codex/generated/v2/AllowDenyRequirement.js +3 -0
  69. package/dist/codex/generated/v2/AllowDenyRequirement.js.map +1 -0
  70. package/dist/codex/generated/v2/AppLinksConfig.d.ts +11 -0
  71. package/dist/codex/generated/v2/AppLinksConfig.js +3 -0
  72. package/dist/codex/generated/v2/AppLinksConfig.js.map +1 -0
  73. package/dist/codex/generated/v2/AppsConfig.d.ts +5 -0
  74. package/dist/codex/generated/v2/AppsReadParams.d.ts +4 -0
  75. package/dist/codex/generated/v2/AsyncUserInputQuestion.d.ts +4 -0
  76. package/dist/codex/generated/v2/AsyncUserInputQuestion.js +3 -0
  77. package/dist/codex/generated/v2/AsyncUserInputQuestion.js.map +1 -0
  78. package/dist/codex/generated/v2/AuthRecoveryNotification.d.ts +6 -0
  79. package/dist/codex/generated/v2/AuthRecoveryNotification.js +3 -0
  80. package/dist/codex/generated/v2/AuthRecoveryNotification.js.map +1 -0
  81. package/dist/codex/generated/v2/AutoReviewRequirements.d.ts +4 -0
  82. package/dist/codex/generated/v2/AutoReviewRequirements.js +3 -0
  83. package/dist/codex/generated/v2/AutoReviewRequirements.js.map +1 -0
  84. package/dist/codex/generated/v2/AwsCredentialType.d.ts +1 -0
  85. package/dist/codex/generated/v2/AwsCredentialType.js +3 -0
  86. package/dist/codex/generated/v2/AwsCredentialType.js.map +1 -0
  87. package/dist/codex/generated/v2/BedrockAwsProfile.d.ts +4 -0
  88. package/dist/codex/generated/v2/BedrockAwsProfile.js +3 -0
  89. package/dist/codex/generated/v2/BedrockAwsProfile.js.map +1 -0
  90. package/dist/codex/generated/v2/BedrockDiscoverParams.d.ts +1 -0
  91. package/dist/codex/generated/v2/BedrockDiscoverParams.js +3 -0
  92. package/dist/codex/generated/v2/BedrockDiscoverParams.js.map +1 -0
  93. package/dist/codex/generated/v2/BedrockDiscoverResponse.d.ts +6 -0
  94. package/dist/codex/generated/v2/BedrockDiscoverResponse.js +3 -0
  95. package/dist/codex/generated/v2/BedrockDiscoverResponse.js.map +1 -0
  96. package/dist/codex/generated/v2/BedrockEnvironmentCredential.d.ts +5 -0
  97. package/dist/codex/generated/v2/BedrockEnvironmentCredential.js +3 -0
  98. package/dist/codex/generated/v2/BedrockEnvironmentCredential.js.map +1 -0
  99. package/dist/codex/generated/v2/BedrockSetupParams.d.ts +8 -0
  100. package/dist/codex/generated/v2/BedrockSetupParams.js +3 -0
  101. package/dist/codex/generated/v2/BedrockSetupParams.js.map +1 -0
  102. package/dist/codex/generated/v2/BedrockSetupResponse.d.ts +1 -0
  103. package/dist/codex/generated/v2/BedrockSetupResponse.js +3 -0
  104. package/dist/codex/generated/v2/BedrockSetupResponse.js.map +1 -0
  105. package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.d.ts +1 -0
  106. package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.js +3 -0
  107. package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.js.map +1 -0
  108. package/dist/codex/generated/v2/BrowserUseConfig.d.ts +8 -0
  109. package/dist/codex/generated/v2/BrowserUseConfig.js +3 -0
  110. package/dist/codex/generated/v2/BrowserUseConfig.js.map +1 -0
  111. package/dist/codex/generated/v2/BrowserUseOriginPolicy.d.ts +11 -0
  112. package/dist/codex/generated/v2/BrowserUseOriginPolicy.js +3 -0
  113. package/dist/codex/generated/v2/BrowserUseOriginPolicy.js.map +1 -0
  114. package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.d.ts +7 -0
  115. package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.js +3 -0
  116. package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.js.map +1 -0
  117. package/dist/codex/generated/v2/BrowserUseRequirements.d.ts +7 -0
  118. package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.d.ts +1 -0
  119. package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.js +3 -0
  120. package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.js.map +1 -0
  121. package/dist/codex/generated/v2/CodexErrorInfo.d.ts +1 -1
  122. package/dist/codex/generated/v2/CollabAgentTool.d.ts +1 -1
  123. package/dist/codex/generated/v2/CollabAgentToolCallStatus.d.ts +1 -1
  124. package/dist/codex/generated/v2/CommandAction.d.ts +2 -2
  125. package/dist/codex/generated/v2/CommandExecutionApprovalKind.d.ts +4 -0
  126. package/dist/codex/generated/v2/CommandExecutionApprovalKind.js +3 -0
  127. package/dist/codex/generated/v2/CommandExecutionApprovalKind.js.map +1 -0
  128. package/dist/codex/generated/v2/CommandExecutionRequestApprovalParams.d.ts +6 -0
  129. package/dist/codex/generated/v2/ComputerUseConfig.d.ts +8 -0
  130. package/dist/codex/generated/v2/ComputerUseConfig.js +3 -0
  131. package/dist/codex/generated/v2/ComputerUseConfig.js.map +1 -0
  132. package/dist/codex/generated/v2/ComputerUseMacosConfig.d.ts +6 -0
  133. package/dist/codex/generated/v2/ComputerUseMacosConfig.js +3 -0
  134. package/dist/codex/generated/v2/ComputerUseMacosConfig.js.map +1 -0
  135. package/dist/codex/generated/v2/ComputerUseMacosRequirements.d.ts +6 -0
  136. package/dist/codex/generated/v2/ComputerUseMacosRequirements.js +3 -0
  137. package/dist/codex/generated/v2/ComputerUseMacosRequirements.js.map +1 -0
  138. package/dist/codex/generated/v2/ComputerUseRequirements.d.ts +7 -0
  139. package/dist/codex/generated/v2/ComputerUseWindowsConfig.d.ts +8 -0
  140. package/dist/codex/generated/v2/ComputerUseWindowsConfig.js +3 -0
  141. package/dist/codex/generated/v2/ComputerUseWindowsConfig.js.map +1 -0
  142. package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.d.ts +7 -0
  143. package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.js +3 -0
  144. package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.js.map +1 -0
  145. package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.d.ts +7 -0
  146. package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.js +3 -0
  147. package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.js.map +1 -0
  148. package/dist/codex/generated/v2/ComputerUseWindowsRequirements.d.ts +8 -0
  149. package/dist/codex/generated/v2/ComputerUseWindowsRequirements.js +3 -0
  150. package/dist/codex/generated/v2/ComputerUseWindowsRequirements.js.map +1 -0
  151. package/dist/codex/generated/v2/Config.d.ts +4 -0
  152. package/dist/codex/generated/v2/ConfigLayerSource.d.ts +6 -0
  153. package/dist/codex/generated/v2/ConfigRequirements.d.ts +9 -0
  154. package/dist/codex/generated/v2/ConfiguredHookHandler.d.ts +10 -0
  155. package/dist/codex/generated/v2/CyberAccessProgram.d.ts +5 -0
  156. package/dist/codex/generated/v2/CyberAccessProgram.js +3 -0
  157. package/dist/codex/generated/v2/CyberAccessProgram.js.map +1 -0
  158. package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.d.ts +1 -0
  159. package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.js +3 -0
  160. package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.js.map +1 -0
  161. package/dist/codex/generated/v2/ExternalAgentConfigDetectResponse.d.ts +2 -0
  162. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.d.ts +2 -2
  163. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.d.ts +11 -0
  164. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.js +3 -0
  165. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.js.map +1 -0
  166. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.d.ts +8 -0
  167. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.js +3 -0
  168. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.js.map +1 -0
  169. package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeSuccess.d.ts +4 -0
  170. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.d.ts +6 -0
  171. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.js +3 -0
  172. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.js.map +1 -0
  173. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.d.ts +1 -0
  174. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.js +3 -0
  175. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.js.map +1 -0
  176. package/dist/codex/generated/v2/GetAccountRateLimitsResponse.d.ts +10 -0
  177. package/dist/codex/generated/v2/GetAccountTokenUsageParams.d.ts +6 -0
  178. package/dist/codex/generated/v2/GetAccountTokenUsageParams.js +3 -0
  179. package/dist/codex/generated/v2/GetAccountTokenUsageParams.js.map +1 -0
  180. package/dist/codex/generated/v2/GetAccountTokenUsageResponse.d.ts +5 -0
  181. package/dist/codex/generated/v2/GuardianApprovalReviewAction.d.ts +7 -0
  182. package/dist/codex/generated/v2/HookEventName.d.ts +1 -1
  183. package/dist/codex/generated/v2/HookHandlerType.d.ts +1 -1
  184. package/dist/codex/generated/v2/HookMetadata.d.ts +13 -4
  185. package/dist/codex/generated/v2/InAppBrowserRequirements.d.ts +3 -0
  186. package/dist/codex/generated/v2/InAppBrowserRequirements.js +3 -0
  187. package/dist/codex/generated/v2/InAppBrowserRequirements.js.map +1 -0
  188. package/dist/codex/generated/v2/ItemGuardianApprovalReviewCompletedNotification.d.ts +2 -0
  189. package/dist/codex/generated/v2/ItemGuardianApprovalReviewStartedNotification.d.ts +2 -0
  190. package/dist/codex/generated/v2/LoginAccountParams.d.ts +6 -0
  191. package/dist/codex/generated/v2/ManagedHooksRequirements.d.ts +1 -0
  192. package/dist/codex/generated/v2/McpAuthStatus.d.ts +1 -1
  193. package/dist/codex/generated/v2/McpResourceReadParams.d.ts +5 -0
  194. package/dist/codex/generated/v2/McpResourceReadResponse.d.ts +4 -0
  195. package/dist/codex/generated/v2/McpServerConnectionStatus.d.ts +1 -0
  196. package/dist/codex/generated/v2/McpServerConnectionStatus.js +3 -0
  197. package/dist/codex/generated/v2/McpServerConnectionStatus.js.map +1 -0
  198. package/dist/codex/generated/v2/McpServerElicitationRequestParams.d.ts +5 -0
  199. package/dist/codex/generated/v2/McpServerEventNotification.d.ts +5 -0
  200. package/dist/codex/generated/v2/McpServerEventNotification.js +3 -0
  201. package/dist/codex/generated/v2/McpServerEventNotification.js.map +1 -0
  202. package/dist/codex/generated/v2/McpServerEventStreamNotification.d.ts +5 -0
  203. package/dist/codex/generated/v2/McpServerEventStreamNotification.js +3 -0
  204. package/dist/codex/generated/v2/McpServerEventStreamNotification.js.map +1 -0
  205. package/dist/codex/generated/v2/McpServerEventStreamStartParams.d.ts +9 -0
  206. package/dist/codex/generated/v2/McpServerEventStreamStartParams.js +3 -0
  207. package/dist/codex/generated/v2/McpServerEventStreamStartParams.js.map +1 -0
  208. package/dist/codex/generated/v2/McpServerEventStreamStartResponse.d.ts +1 -0
  209. package/dist/codex/generated/v2/McpServerEventStreamStartResponse.js +3 -0
  210. package/dist/codex/generated/v2/McpServerEventStreamStartResponse.js.map +1 -0
  211. package/dist/codex/generated/v2/McpServerEventStreamStopParams.d.ts +3 -0
  212. package/dist/codex/generated/v2/McpServerEventStreamStopParams.js +3 -0
  213. package/dist/codex/generated/v2/McpServerEventStreamStopParams.js.map +1 -0
  214. package/dist/codex/generated/v2/McpServerEventStreamStopResponse.d.ts +1 -0
  215. package/dist/codex/generated/v2/McpServerEventStreamStopResponse.js +3 -0
  216. package/dist/codex/generated/v2/McpServerEventStreamStopResponse.js.map +1 -0
  217. package/dist/codex/generated/v2/McpServerOauthClientRegistration.d.ts +1 -0
  218. package/dist/codex/generated/v2/McpServerOauthClientRegistration.js +3 -0
  219. package/dist/codex/generated/v2/McpServerOauthClientRegistration.js.map +1 -0
  220. package/dist/codex/generated/v2/McpServerOauthLoginParams.d.ts +5 -0
  221. package/dist/codex/generated/v2/McpServerStatus.d.ts +6 -0
  222. package/dist/codex/generated/v2/MisalignmentErrorDetails.d.ts +15 -0
  223. package/dist/codex/generated/v2/MisalignmentErrorDetails.js +3 -0
  224. package/dist/codex/generated/v2/MisalignmentErrorDetails.js.map +1 -0
  225. package/dist/codex/generated/v2/MisalignmentSteer.d.ts +3 -0
  226. package/dist/codex/generated/v2/MisalignmentSteer.js +3 -0
  227. package/dist/codex/generated/v2/MisalignmentSteer.js.map +1 -0
  228. package/dist/codex/generated/v2/Model.d.ts +6 -0
  229. package/dist/codex/generated/v2/ModelUpgradeInfo.d.ts +4 -0
  230. package/dist/codex/generated/v2/MultiAgentVersion.d.ts +4 -0
  231. package/dist/codex/generated/v2/MultiAgentVersion.js +3 -0
  232. package/dist/codex/generated/v2/MultiAgentVersion.js.map +1 -0
  233. package/dist/codex/generated/v2/PluginDisabledReason.d.ts +1 -0
  234. package/dist/codex/generated/v2/PluginDisabledReason.js +3 -0
  235. package/dist/codex/generated/v2/PluginDisabledReason.js.map +1 -0
  236. package/dist/codex/generated/v2/PluginInstallParams.d.ts +4 -0
  237. package/dist/codex/generated/v2/PluginReconcileChangedPlugin.d.ts +19 -0
  238. package/dist/codex/generated/v2/PluginReconcileChangedPlugin.js +3 -0
  239. package/dist/codex/generated/v2/PluginReconcileChangedPlugin.js.map +1 -0
  240. package/dist/codex/generated/v2/PluginReconcileParams.d.ts +6 -0
  241. package/dist/codex/generated/v2/PluginReconcileParams.js +3 -0
  242. package/dist/codex/generated/v2/PluginReconcileParams.js.map +1 -0
  243. package/dist/codex/generated/v2/PluginReconcileResponse.d.ts +23 -0
  244. package/dist/codex/generated/v2/PluginReconcileResponse.js +3 -0
  245. package/dist/codex/generated/v2/PluginReconcileResponse.js.map +1 -0
  246. package/dist/codex/generated/v2/PluginSearchParams.d.ts +9 -0
  247. package/dist/codex/generated/v2/PluginSearchParams.js +3 -0
  248. package/dist/codex/generated/v2/PluginSearchParams.js.map +1 -0
  249. package/dist/codex/generated/v2/PluginSearchResponse.d.ts +5 -0
  250. package/dist/codex/generated/v2/PluginSearchResponse.js +3 -0
  251. package/dist/codex/generated/v2/PluginSearchResponse.js.map +1 -0
  252. package/dist/codex/generated/v2/PluginSearchResult.d.ts +7 -0
  253. package/dist/codex/generated/v2/PluginSearchResult.js +3 -0
  254. package/dist/codex/generated/v2/PluginSearchResult.js.map +1 -0
  255. package/dist/codex/generated/v2/PluginSearchScope.d.ts +1 -0
  256. package/dist/codex/generated/v2/PluginSearchScope.js +3 -0
  257. package/dist/codex/generated/v2/PluginSearchScope.js.map +1 -0
  258. package/dist/codex/generated/v2/PluginSummary.d.ts +13 -0
  259. package/dist/codex/generated/v2/Project.d.ts +16 -0
  260. package/dist/codex/generated/v2/Project.js +3 -0
  261. package/dist/codex/generated/v2/Project.js.map +1 -0
  262. package/dist/codex/generated/v2/ProjectChangeType.d.ts +1 -0
  263. package/dist/codex/generated/v2/ProjectChangeType.js +3 -0
  264. package/dist/codex/generated/v2/ProjectChangeType.js.map +1 -0
  265. package/dist/codex/generated/v2/ProjectChangedNotification.d.ts +5 -0
  266. package/dist/codex/generated/v2/ProjectChangedNotification.js +3 -0
  267. package/dist/codex/generated/v2/ProjectChangedNotification.js.map +1 -0
  268. package/dist/codex/generated/v2/ProjectCreateParams.d.ts +9 -0
  269. package/dist/codex/generated/v2/ProjectCreateParams.js +3 -0
  270. package/dist/codex/generated/v2/ProjectCreateParams.js.map +1 -0
  271. package/dist/codex/generated/v2/ProjectCreateResponse.d.ts +4 -0
  272. package/dist/codex/generated/v2/ProjectCreateResponse.js +3 -0
  273. package/dist/codex/generated/v2/ProjectCreateResponse.js.map +1 -0
  274. package/dist/codex/generated/v2/ProjectDeleteParams.d.ts +3 -0
  275. package/dist/codex/generated/v2/ProjectDeleteParams.js +3 -0
  276. package/dist/codex/generated/v2/ProjectDeleteParams.js.map +1 -0
  277. package/dist/codex/generated/v2/ProjectDeleteResponse.d.ts +1 -0
  278. package/dist/codex/generated/v2/ProjectDeleteResponse.js +3 -0
  279. package/dist/codex/generated/v2/ProjectDeleteResponse.js.map +1 -0
  280. package/dist/codex/generated/v2/ProjectImportParams.d.ts +10 -0
  281. package/dist/codex/generated/v2/ProjectImportParams.js +3 -0
  282. package/dist/codex/generated/v2/ProjectImportParams.js.map +1 -0
  283. package/dist/codex/generated/v2/ProjectImportResponse.d.ts +4 -0
  284. package/dist/codex/generated/v2/ProjectImportResponse.js +3 -0
  285. package/dist/codex/generated/v2/ProjectImportResponse.js.map +1 -0
  286. package/dist/codex/generated/v2/ProjectListParams.d.ts +14 -0
  287. package/dist/codex/generated/v2/ProjectListParams.js +3 -0
  288. package/dist/codex/generated/v2/ProjectListParams.js.map +1 -0
  289. package/dist/codex/generated/v2/ProjectListResponse.d.ts +5 -0
  290. package/dist/codex/generated/v2/ProjectListResponse.js +3 -0
  291. package/dist/codex/generated/v2/ProjectListResponse.js.map +1 -0
  292. package/dist/codex/generated/v2/ProjectMoveParams.d.ts +4 -0
  293. package/dist/codex/generated/v2/ProjectMoveParams.js +3 -0
  294. package/dist/codex/generated/v2/ProjectMoveParams.js.map +1 -0
  295. package/dist/codex/generated/v2/ProjectMoveResponse.d.ts +1 -0
  296. package/dist/codex/generated/v2/ProjectMoveResponse.js +3 -0
  297. package/dist/codex/generated/v2/ProjectMoveResponse.js.map +1 -0
  298. package/dist/codex/generated/v2/ProjectReadParams.d.ts +3 -0
  299. package/dist/codex/generated/v2/ProjectReadParams.js +3 -0
  300. package/dist/codex/generated/v2/ProjectReadParams.js.map +1 -0
  301. package/dist/codex/generated/v2/ProjectReadResponse.d.ts +4 -0
  302. package/dist/codex/generated/v2/ProjectReadResponse.js +3 -0
  303. package/dist/codex/generated/v2/ProjectReadResponse.js.map +1 -0
  304. package/dist/codex/generated/v2/ProjectRoot.d.ts +4 -0
  305. package/dist/codex/generated/v2/ProjectRoot.js +3 -0
  306. package/dist/codex/generated/v2/ProjectRoot.js.map +1 -0
  307. package/dist/codex/generated/v2/ProjectSortKey.d.ts +1 -0
  308. package/dist/codex/generated/v2/ProjectSortKey.js +3 -0
  309. package/dist/codex/generated/v2/ProjectSortKey.js.map +1 -0
  310. package/dist/codex/generated/v2/ProjectUpdateParams.d.ts +9 -0
  311. package/dist/codex/generated/v2/ProjectUpdateParams.js +3 -0
  312. package/dist/codex/generated/v2/ProjectUpdateParams.js.map +1 -0
  313. package/dist/codex/generated/v2/ProjectUpdateResponse.d.ts +4 -0
  314. package/dist/codex/generated/v2/ProjectUpdateResponse.js +3 -0
  315. package/dist/codex/generated/v2/ProjectUpdateResponse.js.map +1 -0
  316. package/dist/codex/generated/v2/QueuedSubmission.d.ts +6 -0
  317. package/dist/codex/generated/v2/QueuedSubmission.js +3 -0
  318. package/dist/codex/generated/v2/QueuedSubmission.js.map +1 -0
  319. package/dist/codex/generated/v2/RawResponseCompletedNotification.d.ts +2 -0
  320. package/dist/codex/generated/v2/ResponseUsageMetadata.d.ts +8 -0
  321. package/dist/codex/generated/v2/ResponseUsageMetadata.js +3 -0
  322. package/dist/codex/generated/v2/ResponseUsageMetadata.js.map +1 -0
  323. package/dist/codex/generated/v2/ServerDiagnosticsGauge.d.ts +4 -0
  324. package/dist/codex/generated/v2/ServerDiagnosticsGauge.js +3 -0
  325. package/dist/codex/generated/v2/ServerDiagnosticsGauge.js.map +1 -0
  326. package/dist/codex/generated/v2/ServerDiagnosticsParams.d.ts +1 -0
  327. package/dist/codex/generated/v2/ServerDiagnosticsParams.js +3 -0
  328. package/dist/codex/generated/v2/ServerDiagnosticsParams.js.map +1 -0
  329. package/dist/codex/generated/v2/ServerDiagnosticsProcess.d.ts +5 -0
  330. package/dist/codex/generated/v2/ServerDiagnosticsProcess.js +3 -0
  331. package/dist/codex/generated/v2/ServerDiagnosticsProcess.js.map +1 -0
  332. package/dist/codex/generated/v2/ServerDiagnosticsResponse.d.ts +6 -0
  333. package/dist/codex/generated/v2/ServerDiagnosticsResponse.js +3 -0
  334. package/dist/codex/generated/v2/ServerDiagnosticsResponse.js.map +1 -0
  335. package/dist/codex/generated/v2/SkillMetadata.d.ts +4 -0
  336. package/dist/codex/generated/v2/StrictReviewRequiredNotification.d.ts +8 -0
  337. package/dist/codex/generated/v2/StrictReviewRequiredNotification.js +3 -0
  338. package/dist/codex/generated/v2/StrictReviewRequiredNotification.js.map +1 -0
  339. package/dist/codex/generated/v2/SubAgentActivityKind.d.ts +1 -1
  340. package/dist/codex/generated/v2/Thread.d.ts +22 -2
  341. package/dist/codex/generated/v2/ThreadBackgroundTerminal.d.ts +2 -2
  342. package/dist/codex/generated/v2/ThreadForkParams.d.ts +3 -1
  343. package/dist/codex/generated/v2/ThreadItem.d.ts +12 -0
  344. package/dist/codex/generated/v2/ThreadListParams.d.ts +8 -2
  345. package/dist/codex/generated/v2/ThreadMetadataUpdateParams.d.ts +5 -4
  346. package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.d.ts +4 -0
  347. package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.js +3 -0
  348. package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.js.map +1 -0
  349. package/dist/codex/generated/v2/ThreadQueueAddParams.d.ts +6 -0
  350. package/dist/codex/generated/v2/ThreadQueueAddParams.js +3 -0
  351. package/dist/codex/generated/v2/ThreadQueueAddParams.js.map +1 -0
  352. package/dist/codex/generated/v2/ThreadQueueAddResponse.d.ts +4 -0
  353. package/dist/codex/generated/v2/ThreadQueueAddResponse.js +3 -0
  354. package/dist/codex/generated/v2/ThreadQueueAddResponse.js.map +1 -0
  355. package/dist/codex/generated/v2/ThreadQueueChangedNotification.d.ts +3 -0
  356. package/dist/codex/generated/v2/ThreadQueueChangedNotification.js +3 -0
  357. package/dist/codex/generated/v2/ThreadQueueChangedNotification.js.map +1 -0
  358. package/dist/codex/generated/v2/ThreadQueueDeleteParams.d.ts +4 -0
  359. package/dist/codex/generated/v2/ThreadQueueDeleteParams.js +3 -0
  360. package/dist/codex/generated/v2/ThreadQueueDeleteParams.js.map +1 -0
  361. package/dist/codex/generated/v2/ThreadQueueDeleteResponse.d.ts +3 -0
  362. package/dist/codex/generated/v2/ThreadQueueDeleteResponse.js +3 -0
  363. package/dist/codex/generated/v2/ThreadQueueDeleteResponse.js.map +1 -0
  364. package/dist/codex/generated/v2/ThreadQueueListParams.d.ts +11 -0
  365. package/dist/codex/generated/v2/ThreadQueueListParams.js +3 -0
  366. package/dist/codex/generated/v2/ThreadQueueListParams.js.map +1 -0
  367. package/dist/codex/generated/v2/ThreadQueueListResponse.d.ts +8 -0
  368. package/dist/codex/generated/v2/ThreadQueueListResponse.js +3 -0
  369. package/dist/codex/generated/v2/ThreadQueueListResponse.js.map +1 -0
  370. package/dist/codex/generated/v2/ThreadQueueReorderParams.d.ts +4 -0
  371. package/dist/codex/generated/v2/ThreadQueueReorderParams.js +3 -0
  372. package/dist/codex/generated/v2/ThreadQueueReorderParams.js.map +1 -0
  373. package/dist/codex/generated/v2/ThreadQueueReorderResponse.d.ts +1 -0
  374. package/dist/codex/generated/v2/ThreadQueueReorderResponse.js +3 -0
  375. package/dist/codex/generated/v2/ThreadQueueReorderResponse.js.map +1 -0
  376. package/dist/codex/generated/v2/ThreadQueueStartParams.d.ts +4 -0
  377. package/dist/codex/generated/v2/ThreadQueueStartParams.js +3 -0
  378. package/dist/codex/generated/v2/ThreadQueueStartParams.js.map +1 -0
  379. package/dist/codex/generated/v2/ThreadQueueStartResponse.d.ts +4 -0
  380. package/dist/codex/generated/v2/ThreadQueueStartResponse.js +3 -0
  381. package/dist/codex/generated/v2/ThreadQueueStartResponse.js.map +1 -0
  382. package/dist/codex/generated/v2/ThreadQueueUpdateParams.d.ts +6 -0
  383. package/dist/codex/generated/v2/ThreadQueueUpdateParams.js +3 -0
  384. package/dist/codex/generated/v2/ThreadQueueUpdateParams.js.map +1 -0
  385. package/dist/codex/generated/v2/ThreadQueueUpdateResponse.d.ts +4 -0
  386. package/dist/codex/generated/v2/ThreadQueueUpdateResponse.js +3 -0
  387. package/dist/codex/generated/v2/ThreadQueueUpdateResponse.js.map +1 -0
  388. package/dist/codex/generated/v2/ThreadReadParams.d.ts +3 -0
  389. package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.d.ts +11 -0
  390. package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.js +3 -0
  391. package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.js.map +1 -0
  392. package/dist/codex/generated/v2/ThreadRealtimeItem.d.ts +24 -0
  393. package/dist/codex/generated/v2/ThreadRealtimeItem.js +3 -0
  394. package/dist/codex/generated/v2/ThreadRealtimeItem.js.map +1 -0
  395. package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.d.ts +8 -0
  396. package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.js +3 -0
  397. package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.js.map +1 -0
  398. package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.d.ts +8 -0
  399. package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.js +3 -0
  400. package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.js.map +1 -0
  401. package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.d.ts +8 -0
  402. package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.js +3 -0
  403. package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.js.map +1 -0
  404. package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.d.ts +1 -0
  405. package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.js +3 -0
  406. package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.js.map +1 -0
  407. package/dist/codex/generated/v2/ThreadRealtimeStartParams.d.ts +13 -0
  408. package/dist/codex/generated/v2/ThreadRealtimeStartTransport.d.ts +6 -0
  409. package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.d.ts +1 -0
  410. package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.js +3 -0
  411. package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.js.map +1 -0
  412. package/dist/codex/generated/v2/ThreadResumeParams.d.ts +3 -1
  413. package/dist/codex/generated/v2/ThreadResumeResponse.d.ts +4 -4
  414. package/dist/codex/generated/v2/ThreadRevertParams.d.ts +12 -0
  415. package/dist/codex/generated/v2/ThreadRevertParams.js +3 -0
  416. package/dist/codex/generated/v2/ThreadRevertParams.js.map +1 -0
  417. package/dist/codex/generated/v2/ThreadRevertResponse.d.ts +22 -0
  418. package/dist/codex/generated/v2/ThreadRevertResponse.js +3 -0
  419. package/dist/codex/generated/v2/ThreadRevertResponse.js.map +1 -0
  420. package/dist/codex/generated/v2/ThreadRevertedNotification.d.ts +3 -0
  421. package/dist/codex/generated/v2/ThreadRevertedNotification.js +3 -0
  422. package/dist/codex/generated/v2/ThreadRevertedNotification.js.map +1 -0
  423. package/dist/codex/generated/v2/ThreadSearchParams.d.ts +2 -2
  424. package/dist/codex/generated/v2/ThreadSearchSortKey.d.ts +1 -0
  425. package/dist/codex/generated/v2/ThreadSearchSortKey.js +3 -0
  426. package/dist/codex/generated/v2/ThreadSearchSortKey.js.map +1 -0
  427. package/dist/codex/generated/v2/ThreadSection.d.ts +18 -0
  428. package/dist/codex/generated/v2/ThreadSection.js +3 -0
  429. package/dist/codex/generated/v2/ThreadSection.js.map +1 -0
  430. package/dist/codex/generated/v2/ThreadSectionAppearance.d.ts +7 -0
  431. package/dist/codex/generated/v2/ThreadSectionAppearance.js +3 -0
  432. package/dist/codex/generated/v2/ThreadSectionAppearance.js.map +1 -0
  433. package/dist/codex/generated/v2/ThreadSectionCreateParams.d.ts +11 -0
  434. package/dist/codex/generated/v2/ThreadSectionCreateParams.js +3 -0
  435. package/dist/codex/generated/v2/ThreadSectionCreateParams.js.map +1 -0
  436. package/dist/codex/generated/v2/ThreadSectionCreateResponse.d.ts +7 -0
  437. package/dist/codex/generated/v2/ThreadSectionCreateResponse.js +3 -0
  438. package/dist/codex/generated/v2/ThreadSectionCreateResponse.js.map +1 -0
  439. package/dist/codex/generated/v2/ThreadSectionDeleteParams.d.ts +9 -0
  440. package/dist/codex/generated/v2/ThreadSectionDeleteParams.js +3 -0
  441. package/dist/codex/generated/v2/ThreadSectionDeleteParams.js.map +1 -0
  442. package/dist/codex/generated/v2/ThreadSectionDeleteResponse.d.ts +4 -0
  443. package/dist/codex/generated/v2/ThreadSectionDeleteResponse.js +3 -0
  444. package/dist/codex/generated/v2/ThreadSectionDeleteResponse.js.map +1 -0
  445. package/dist/codex/generated/v2/ThreadSectionListParams.d.ts +13 -0
  446. package/dist/codex/generated/v2/ThreadSectionListParams.js +3 -0
  447. package/dist/codex/generated/v2/ThreadSectionListParams.js.map +1 -0
  448. package/dist/codex/generated/v2/ThreadSectionListResponse.d.ts +11 -0
  449. package/dist/codex/generated/v2/ThreadSectionListResponse.js +3 -0
  450. package/dist/codex/generated/v2/ThreadSectionListResponse.js.map +1 -0
  451. package/dist/codex/generated/v2/ThreadSectionMoveParams.d.ts +17 -0
  452. package/dist/codex/generated/v2/ThreadSectionMoveParams.js +3 -0
  453. package/dist/codex/generated/v2/ThreadSectionMoveParams.js.map +1 -0
  454. package/dist/codex/generated/v2/ThreadSectionMoveResponse.d.ts +1 -0
  455. package/dist/codex/generated/v2/ThreadSectionMoveResponse.js +3 -0
  456. package/dist/codex/generated/v2/ThreadSectionMoveResponse.js.map +1 -0
  457. package/dist/codex/generated/v2/ThreadSectionUpdateParams.d.ts +18 -0
  458. package/dist/codex/generated/v2/ThreadSectionUpdateParams.js +3 -0
  459. package/dist/codex/generated/v2/ThreadSectionUpdateParams.js.map +1 -0
  460. package/dist/codex/generated/v2/ThreadSectionUpdateResponse.d.ts +7 -0
  461. package/dist/codex/generated/v2/ThreadSectionUpdateResponse.js +3 -0
  462. package/dist/codex/generated/v2/ThreadSectionUpdateResponse.js.map +1 -0
  463. package/dist/codex/generated/v2/ThreadShellCommandParams.d.ts +6 -0
  464. package/dist/codex/generated/v2/ThreadSortKey.d.ts +1 -1
  465. package/dist/codex/generated/v2/ThreadStartParams.d.ts +5 -0
  466. package/dist/codex/generated/v2/ThreadTimelineEntry.d.ts +31 -0
  467. package/dist/codex/generated/v2/ThreadTimelineEntry.js +3 -0
  468. package/dist/codex/generated/v2/ThreadTimelineEntry.js.map +1 -0
  469. package/dist/codex/generated/v2/ThreadTimelineListParams.d.ts +8 -0
  470. package/dist/codex/generated/v2/ThreadTimelineListParams.js +3 -0
  471. package/dist/codex/generated/v2/ThreadTimelineListParams.js.map +1 -0
  472. package/dist/codex/generated/v2/ThreadTimelineListResponse.d.ts +9 -0
  473. package/dist/codex/generated/v2/ThreadTimelineListResponse.js +3 -0
  474. package/dist/codex/generated/v2/ThreadTimelineListResponse.js.map +1 -0
  475. package/dist/codex/generated/v2/ThreadUsage.d.ts +7 -0
  476. package/dist/codex/generated/v2/ThreadUsage.js +3 -0
  477. package/dist/codex/generated/v2/ThreadUsage.js.map +1 -0
  478. package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.d.ts +11 -0
  479. package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.js +3 -0
  480. package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.js.map +1 -0
  481. package/dist/codex/generated/v2/ToolRequestUserInputParams.d.ts +4 -0
  482. package/dist/codex/generated/v2/TurnError.d.ts +5 -0
  483. package/dist/codex/generated/v2/TurnSettingsUpdateParams.d.ts +34 -0
  484. package/dist/codex/generated/v2/TurnSettingsUpdateParams.js +3 -0
  485. package/dist/codex/generated/v2/TurnSettingsUpdateParams.js.map +1 -0
  486. package/dist/codex/generated/v2/TurnSettingsUpdateResponse.d.ts +4 -0
  487. package/dist/codex/generated/v2/TurnSettingsUpdateResponse.js +3 -0
  488. package/dist/codex/generated/v2/TurnSettingsUpdateResponse.js.map +1 -0
  489. package/dist/codex/generated/v2/TurnSettingsUpdateStatus.d.ts +1 -0
  490. package/dist/codex/generated/v2/TurnSettingsUpdateStatus.js +3 -0
  491. package/dist/codex/generated/v2/TurnSettingsUpdateStatus.js.map +1 -0
  492. package/dist/codex/generated/v2/TurnStartParams.d.ts +19 -0
  493. package/dist/codex/generated/v2/TurnToolOutput.d.ts +6 -0
  494. package/dist/codex/generated/v2/TurnToolOutput.js +3 -0
  495. package/dist/codex/generated/v2/TurnToolOutput.js.map +1 -0
  496. package/dist/codex/generated/v2/index.d.ts +125 -0
  497. package/dist/daemon/probe.js +1 -1
  498. package/dist/gateway/clientConnection.js +129 -24
  499. package/dist/gateway/clientConnection.js.map +1 -1
  500. package/dist/gateway/remoteRelay.js +2 -2
  501. package/dist/gateway/remoteRelay.js.map +1 -1
  502. package/dist/gateway/stockRpc.d.ts +2 -0
  503. package/dist/gateway/stockRpc.js +13 -0
  504. package/dist/gateway/stockRpc.js.map +1 -1
  505. package/dist/gateway/threadList.d.ts +6 -0
  506. package/dist/gateway/threadList.js +58 -12
  507. package/dist/gateway/threadList.js.map +1 -1
  508. package/dist/gateway/transientNotice.js +6 -4
  509. package/dist/gateway/transientNotice.js.map +1 -1
  510. package/dist/handoff/lineageStore.d.ts +2 -8
  511. package/dist/handoff/lineageStore.js +2 -8
  512. package/dist/handoff/lineageStore.js.map +1 -1
  513. package/dist/handoff/providerEpochs.js +4 -5
  514. package/dist/handoff/providerEpochs.js.map +1 -1
  515. package/dist/handoff/service.d.ts +16 -3
  516. package/dist/handoff/service.js +196 -125
  517. package/dist/handoff/service.js.map +1 -1
  518. package/dist/handoff/titleGeneration.d.ts +1 -0
  519. package/dist/handoff/titleGeneration.js.map +1 -1
  520. package/dist/management/setup.d.ts +6 -0
  521. package/dist/management/setup.js +11 -3
  522. package/dist/management/setup.js.map +1 -1
  523. package/dist/protocol/search.d.ts +24 -0
  524. package/dist/protocol/search.js +105 -0
  525. package/dist/protocol/search.js.map +1 -0
  526. package/dist/protocol/turnPagination.d.ts +16 -0
  527. package/dist/protocol/turnPagination.js +75 -35
  528. package/dist/protocol/turnPagination.js.map +1 -1
  529. package/dist/runtime/dependencies.js +1 -1
  530. package/dist/store/HybridStore.d.ts +4 -0
  531. package/dist/store/HybridStore.js +1 -1
  532. package/dist/store/HybridStore.js.map +1 -1
  533. package/dist/store/memoryStore.d.ts +6 -0
  534. package/dist/store/memoryStore.js +16 -0
  535. package/dist/store/memoryStore.js.map +1 -1
  536. package/dist/store/sqliteStore.d.ts +3 -0
  537. package/dist/store/sqliteStore.js +60 -1
  538. package/dist/store/sqliteStore.js.map +1 -1
  539. package/dist/store/threadFilter.js +11 -2
  540. package/dist/store/threadFilter.js.map +1 -1
  541. package/legal/THIRD_PARTY_NOTICES.md +304 -263
  542. package/package.json +6 -6
  543. package/scripts/install-claude-stack.sh +27 -4
  544. package/skills/workforce/SKILL.md +51 -24
  545. package/vendor/codex/continuation.md +5 -0
@@ -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
- if (params.cursor && !params.cursor.startsWith("hyb-overlay-item:"))
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
- recentDurableProviders = new Map();
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
- const metadata = publicParams;
412
- const result = await this.withAdminLock(publicThreadId, async () => {
413
- const response = await stock.request(method, params);
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?.initialTurnsPage && !includeTurns
429
- ? (await stock.request("thread/read", {
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(await this.visibleTurns(publicThreadId, backendTurns, stock), {
436
- threadId: publicThreadId,
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.request("thread/read", {
451
- threadId: resolved.epoch.backendThreadId,
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.initialTurnsPage && resume.excludeTurns
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(await this.visibleTurns(publicThreadId, backendTurns, this.daemonStock ?? clientStock), {
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, async () => {
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(!params.excludeTurns),
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: null,
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 boundaryIndex = visible.findLastIndex((turn) => turn.turn.status === "completed" && turn.epochId && turn.providerTurnId);
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
- async rollbackLogicalThread(params, clientStock, connectionId) {
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 currentTurns = await this.currentBackendTurns(target, this.daemonStock ?? clientStock);
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.length - params.numTurns;
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
- if (params.numTurns === 0) {
832
- const backend = target.epoch.provider === "claude"
833
- ? this.claude.readThread(target.epoch.backendThreadId, true).thread
834
- : (await clientStock.request("thread/read", {
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
- : (await stock.request("thread/read", {
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 durableProvider = "threadId" in params
1326
- ? this.claude.ownsThread(params.threadId) ? "claude" : "stock"
1327
- : this.recentDurableProviders.get(connectionId) ?? "stock";
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, { durableProvider });
1381
+ threads.set(threadId, owner);
1337
1382
  candidates.set(connectionId, threads);
1338
1383
  }
1339
- observeDurableThread(connectionId, provider) {
1340
- this.recentDurableProviders.set(connectionId, provider);
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 && candidate.userPrompt.trim() === text);
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.recentDurableProviders.delete(connectionId);
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.request("thread/read", { threadId, includeTurns: true }),
1649
+ readStockThread(stock, threadId),
1588
1650
  stock.request("thread/resume", { threadId, excludeTurns: true }),
1589
1651
  ]);
1590
- resolved = this.epochs.seed(read.thread, "stock", resume.model, resume);
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 currentBackendTurns(resolved, stock) {
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.turns;
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
- const read = await stock.request("thread/read", {
1606
- threadId: resolved.epoch.backendThreadId,
1607
- includeTurns: true,
1608
- });
1609
- return read.thread.turns;
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.request("thread/read", {
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.request("thread/read", {
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.thread,
1818
- backendTurns: read.thread.turns,
1819
- turns: await this.visibleTurns(job.publicThreadId, read.thread.turns, stock),
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.request("thread/read", { threadId, includeTurns: true });
2155
- return [...overlay.inheritedTurns, ...read.thread.turns];
2225
+ const read = await readStockThread(stock, threadId);
2226
+ return [...overlay.inheritedTurns, ...read.turns];
2156
2227
  }
2157
2228
  }
2158
2229
  //# sourceMappingURL=service.js.map