@excitedjs/tm 1.1.0

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 (702) hide show
  1. package/bin/tm +76 -0
  2. package/package.json +39 -0
  3. package/resolver-register.mjs +7 -0
  4. package/resolver.mjs +86 -0
  5. package/src/cli/context.ts +63 -0
  6. package/src/cli/dispatch.ts +444 -0
  7. package/src/cli/errors.ts +45 -0
  8. package/src/cli/parse.ts +265 -0
  9. package/src/cli.ts +12 -0
  10. package/src/codex-protocol/AbsolutePathBuf.ts +14 -0
  11. package/src/codex-protocol/AgentPath.ts +5 -0
  12. package/src/codex-protocol/ApplyPatchApprovalParams.ts +21 -0
  13. package/src/codex-protocol/ApplyPatchApprovalResponse.ts +6 -0
  14. package/src/codex-protocol/AuthMode.ts +8 -0
  15. package/src/codex-protocol/AutoCompactTokenLimitScope.ts +9 -0
  16. package/src/codex-protocol/ClientInfo.ts +5 -0
  17. package/src/codex-protocol/ClientNotification.ts +5 -0
  18. package/src/codex-protocol/ClientRequest.ts +110 -0
  19. package/src/codex-protocol/CollaborationMode.ts +10 -0
  20. package/src/codex-protocol/ContentItem.ts +6 -0
  21. package/src/codex-protocol/ConversationGitInfo.ts +5 -0
  22. package/src/codex-protocol/ConversationSummary.ts +8 -0
  23. package/src/codex-protocol/ExecCommandApprovalParams.ts +16 -0
  24. package/src/codex-protocol/ExecCommandApprovalResponse.ts +6 -0
  25. package/src/codex-protocol/ExecPolicyAmendment.ts +12 -0
  26. package/src/codex-protocol/FileChange.ts +5 -0
  27. package/src/codex-protocol/ForcedLoginMethod.ts +5 -0
  28. package/src/codex-protocol/FunctionCallOutputBody.ts +6 -0
  29. package/src/codex-protocol/FunctionCallOutputContentItem.ts +10 -0
  30. package/src/codex-protocol/FuzzyFileSearchMatchType.ts +5 -0
  31. package/src/codex-protocol/FuzzyFileSearchParams.ts +5 -0
  32. package/src/codex-protocol/FuzzyFileSearchResponse.ts +6 -0
  33. package/src/codex-protocol/FuzzyFileSearchResult.ts +9 -0
  34. package/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +5 -0
  35. package/src/codex-protocol/FuzzyFileSearchSessionStartParams.ts +5 -0
  36. package/src/codex-protocol/FuzzyFileSearchSessionStartResponse.ts +5 -0
  37. package/src/codex-protocol/FuzzyFileSearchSessionStopParams.ts +5 -0
  38. package/src/codex-protocol/FuzzyFileSearchSessionStopResponse.ts +5 -0
  39. package/src/codex-protocol/FuzzyFileSearchSessionUpdateParams.ts +5 -0
  40. package/src/codex-protocol/FuzzyFileSearchSessionUpdateResponse.ts +5 -0
  41. package/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +6 -0
  42. package/src/codex-protocol/GetAuthStatusParams.ts +5 -0
  43. package/src/codex-protocol/GetAuthStatusResponse.ts +6 -0
  44. package/src/codex-protocol/GetConversationSummaryParams.ts +6 -0
  45. package/src/codex-protocol/GetConversationSummaryResponse.ts +6 -0
  46. package/src/codex-protocol/GitDiffToRemoteParams.ts +5 -0
  47. package/src/codex-protocol/GitDiffToRemoteResponse.ts +6 -0
  48. package/src/codex-protocol/GitSha.ts +5 -0
  49. package/src/codex-protocol/ImageDetail.ts +5 -0
  50. package/src/codex-protocol/InitializeCapabilities.ts +21 -0
  51. package/src/codex-protocol/InitializeParams.ts +7 -0
  52. package/src/codex-protocol/InitializeResponse.ts +20 -0
  53. package/src/codex-protocol/InputModality.ts +8 -0
  54. package/src/codex-protocol/InternalSessionSource.ts +5 -0
  55. package/src/codex-protocol/LocalShellAction.ts +6 -0
  56. package/src/codex-protocol/LocalShellExecAction.ts +5 -0
  57. package/src/codex-protocol/LocalShellStatus.ts +5 -0
  58. package/src/codex-protocol/MessagePhase.ts +11 -0
  59. package/src/codex-protocol/ModeKind.ts +8 -0
  60. package/src/codex-protocol/NetworkPolicyAmendment.ts +6 -0
  61. package/src/codex-protocol/NetworkPolicyRuleAction.ts +5 -0
  62. package/src/codex-protocol/ParsedCommand.ts +12 -0
  63. package/src/codex-protocol/Personality.ts +5 -0
  64. package/src/codex-protocol/PlanType.ts +5 -0
  65. package/src/codex-protocol/RealtimeConversationVersion.ts +5 -0
  66. package/src/codex-protocol/RealtimeOutputModality.ts +5 -0
  67. package/src/codex-protocol/RealtimeVoice.ts +5 -0
  68. package/src/codex-protocol/RealtimeVoicesList.ts +6 -0
  69. package/src/codex-protocol/ReasoningEffort.ts +8 -0
  70. package/src/codex-protocol/ReasoningItemContent.ts +5 -0
  71. package/src/codex-protocol/ReasoningItemReasoningSummary.ts +5 -0
  72. package/src/codex-protocol/ReasoningSummary.ts +10 -0
  73. package/src/codex-protocol/RequestId.ts +5 -0
  74. package/src/codex-protocol/Resource.ts +9 -0
  75. package/src/codex-protocol/ResourceContent.ts +17 -0
  76. package/src/codex-protocol/ResourceTemplate.ts +9 -0
  77. package/src/codex-protocol/ResponseItem.ts +17 -0
  78. package/src/codex-protocol/ReviewDecision.ts +10 -0
  79. package/src/codex-protocol/ServerNotification.ts +73 -0
  80. package/src/codex-protocol/ServerRequest.ts +19 -0
  81. package/src/codex-protocol/SessionSource.ts +7 -0
  82. package/src/codex-protocol/Settings.ts +9 -0
  83. package/src/codex-protocol/SubAgentSource.ts +7 -0
  84. package/src/codex-protocol/ThreadId.ts +5 -0
  85. package/src/codex-protocol/ThreadMemoryMode.ts +5 -0
  86. package/src/codex-protocol/Tool.ts +9 -0
  87. package/src/codex-protocol/Verbosity.ts +9 -0
  88. package/src/codex-protocol/WebSearchAction.ts +5 -0
  89. package/src/codex-protocol/WebSearchContextSize.ts +5 -0
  90. package/src/codex-protocol/WebSearchLocation.ts +5 -0
  91. package/src/codex-protocol/WebSearchMode.ts +5 -0
  92. package/src/codex-protocol/WebSearchToolConfig.ts +7 -0
  93. package/src/codex-protocol/index.ts +86 -0
  94. package/src/codex-protocol/serde_json/JsonValue.ts +5 -0
  95. package/src/codex-protocol/v2/Account.ts +6 -0
  96. package/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +5 -0
  97. package/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +6 -0
  98. package/src/codex-protocol/v2/AccountUpdatedNotification.ts +7 -0
  99. package/src/codex-protocol/v2/ActivePermissionProfile.ts +15 -0
  100. package/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +5 -0
  101. package/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +5 -0
  102. package/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +15 -0
  103. package/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +5 -0
  104. package/src/codex-protocol/v2/AdditionalPermissionProfile.ts +11 -0
  105. package/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +5 -0
  106. package/src/codex-protocol/v2/AnalyticsConfig.ts +6 -0
  107. package/src/codex-protocol/v2/AppBranding.ts +8 -0
  108. package/src/codex-protocol/v2/AppInfo.ts +19 -0
  109. package/src/codex-protocol/v2/AppListUpdatedNotification.ts +9 -0
  110. package/src/codex-protocol/v2/AppMetadata.ts +7 -0
  111. package/src/codex-protocol/v2/AppReview.ts +5 -0
  112. package/src/codex-protocol/v2/AppScreenshot.ts +5 -0
  113. package/src/codex-protocol/v2/AppSummary.ts +8 -0
  114. package/src/codex-protocol/v2/AppToolApproval.ts +5 -0
  115. package/src/codex-protocol/v2/AppToolsConfig.ts +6 -0
  116. package/src/codex-protocol/v2/ApprovalsReviewer.ts +12 -0
  117. package/src/codex-protocol/v2/AppsConfig.ts +8 -0
  118. package/src/codex-protocol/v2/AppsDefaultConfig.ts +5 -0
  119. package/src/codex-protocol/v2/AppsListParams.ts +24 -0
  120. package/src/codex-protocol/v2/AppsListResponse.ts +14 -0
  121. package/src/codex-protocol/v2/AskForApproval.ts +5 -0
  122. package/src/codex-protocol/v2/AttestationGenerateParams.ts +5 -0
  123. package/src/codex-protocol/v2/AttestationGenerateResponse.ts +9 -0
  124. package/src/codex-protocol/v2/AutoReviewDecisionSource.ts +8 -0
  125. package/src/codex-protocol/v2/ByteRange.ts +5 -0
  126. package/src/codex-protocol/v2/CancelLoginAccountParams.ts +5 -0
  127. package/src/codex-protocol/v2/CancelLoginAccountResponse.ts +6 -0
  128. package/src/codex-protocol/v2/CancelLoginAccountStatus.ts +5 -0
  129. package/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +16 -0
  130. package/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +5 -0
  131. package/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +5 -0
  132. package/src/codex-protocol/v2/CodexErrorInfo.ts +12 -0
  133. package/src/codex-protocol/v2/CollabAgentState.ts +6 -0
  134. package/src/codex-protocol/v2/CollabAgentStatus.ts +5 -0
  135. package/src/codex-protocol/v2/CollabAgentTool.ts +5 -0
  136. package/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +5 -0
  137. package/src/codex-protocol/v2/CollaborationModeListParams.ts +8 -0
  138. package/src/codex-protocol/v2/CollaborationModeListResponse.ts +9 -0
  139. package/src/codex-protocol/v2/CollaborationModeMask.ts +10 -0
  140. package/src/codex-protocol/v2/CommandAction.ts +6 -0
  141. package/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +30 -0
  142. package/src/codex-protocol/v2/CommandExecOutputStream.ts +8 -0
  143. package/src/codex-protocol/v2/CommandExecParams.ts +105 -0
  144. package/src/codex-protocol/v2/CommandExecResizeParams.ts +18 -0
  145. package/src/codex-protocol/v2/CommandExecResizeResponse.ts +8 -0
  146. package/src/codex-protocol/v2/CommandExecResponse.ts +24 -0
  147. package/src/codex-protocol/v2/CommandExecTerminalSize.ts +16 -0
  148. package/src/codex-protocol/v2/CommandExecTerminateParams.ts +13 -0
  149. package/src/codex-protocol/v2/CommandExecTerminateResponse.ts +8 -0
  150. package/src/codex-protocol/v2/CommandExecWriteParams.ts +22 -0
  151. package/src/codex-protocol/v2/CommandExecWriteResponse.ts +8 -0
  152. package/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +7 -0
  153. package/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +5 -0
  154. package/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +62 -0
  155. package/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +6 -0
  156. package/src/codex-protocol/v2/CommandExecutionSource.ts +5 -0
  157. package/src/codex-protocol/v2/CommandExecutionStatus.ts +5 -0
  158. package/src/codex-protocol/v2/CommandMigration.ts +5 -0
  159. package/src/codex-protocol/v2/ComputerUseRequirements.ts +5 -0
  160. package/src/codex-protocol/v2/Config.ts +26 -0
  161. package/src/codex-protocol/v2/ConfigBatchWriteParams.ts +14 -0
  162. package/src/codex-protocol/v2/ConfigEdit.ts +7 -0
  163. package/src/codex-protocol/v2/ConfigLayer.ts +7 -0
  164. package/src/codex-protocol/v2/ConfigLayerMetadata.ts +6 -0
  165. package/src/codex-protocol/v2/ConfigLayerSource.ts +21 -0
  166. package/src/codex-protocol/v2/ConfigReadParams.ts +11 -0
  167. package/src/codex-protocol/v2/ConfigReadResponse.ts +8 -0
  168. package/src/codex-protocol/v2/ConfigRequirements.ts +13 -0
  169. package/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +10 -0
  170. package/src/codex-protocol/v2/ConfigValueWriteParams.ts +11 -0
  171. package/src/codex-protocol/v2/ConfigWarningNotification.ts +22 -0
  172. package/src/codex-protocol/v2/ConfigWriteResponse.ts +12 -0
  173. package/src/codex-protocol/v2/ConfiguredHookHandler.ts +5 -0
  174. package/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +6 -0
  175. package/src/codex-protocol/v2/ContextCompactedNotification.ts +8 -0
  176. package/src/codex-protocol/v2/CreditsSnapshot.ts +5 -0
  177. package/src/codex-protocol/v2/DeprecationNoticeNotification.ts +13 -0
  178. package/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +5 -0
  179. package/src/codex-protocol/v2/DynamicToolCallParams.ts +6 -0
  180. package/src/codex-protocol/v2/DynamicToolCallResponse.ts +6 -0
  181. package/src/codex-protocol/v2/DynamicToolCallStatus.ts +5 -0
  182. package/src/codex-protocol/v2/DynamicToolSpec.ts +6 -0
  183. package/src/codex-protocol/v2/EnvironmentAddParams.ts +5 -0
  184. package/src/codex-protocol/v2/EnvironmentAddResponse.ts +5 -0
  185. package/src/codex-protocol/v2/ErrorNotification.ts +6 -0
  186. package/src/codex-protocol/v2/ExecPolicyAmendment.ts +5 -0
  187. package/src/codex-protocol/v2/ExperimentalFeature.ts +37 -0
  188. package/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +12 -0
  189. package/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +9 -0
  190. package/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +19 -0
  191. package/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +11 -0
  192. package/src/codex-protocol/v2/ExperimentalFeatureStage.ts +5 -0
  193. package/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +13 -0
  194. package/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +6 -0
  195. package/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +5 -0
  196. package/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +6 -0
  197. package/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +5 -0
  198. package/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +11 -0
  199. package/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +5 -0
  200. package/src/codex-protocol/v2/FeedbackUploadParams.ts +5 -0
  201. package/src/codex-protocol/v2/FeedbackUploadResponse.ts +5 -0
  202. package/src/codex-protocol/v2/FileChangeApprovalDecision.ts +5 -0
  203. package/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +10 -0
  204. package/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +6 -0
  205. package/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +18 -0
  206. package/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +6 -0
  207. package/src/codex-protocol/v2/FileSystemAccessMode.ts +5 -0
  208. package/src/codex-protocol/v2/FileSystemPath.ts +7 -0
  209. package/src/codex-protocol/v2/FileSystemSandboxEntry.ts +7 -0
  210. package/src/codex-protocol/v2/FileSystemSpecialPath.ts +5 -0
  211. package/src/codex-protocol/v2/FileUpdateChange.ts +6 -0
  212. package/src/codex-protocol/v2/ForcedChatgptWorkspaceIds.ts +8 -0
  213. package/src/codex-protocol/v2/FsChangedNotification.ts +17 -0
  214. package/src/codex-protocol/v2/FsCopyParams.ts +21 -0
  215. package/src/codex-protocol/v2/FsCopyResponse.ts +8 -0
  216. package/src/codex-protocol/v2/FsCreateDirectoryParams.ts +17 -0
  217. package/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +8 -0
  218. package/src/codex-protocol/v2/FsGetMetadataParams.ts +13 -0
  219. package/src/codex-protocol/v2/FsGetMetadataResponse.ts +28 -0
  220. package/src/codex-protocol/v2/FsReadDirectoryEntry.ts +20 -0
  221. package/src/codex-protocol/v2/FsReadDirectoryParams.ts +13 -0
  222. package/src/codex-protocol/v2/FsReadDirectoryResponse.ts +13 -0
  223. package/src/codex-protocol/v2/FsReadFileParams.ts +13 -0
  224. package/src/codex-protocol/v2/FsReadFileResponse.ts +12 -0
  225. package/src/codex-protocol/v2/FsRemoveParams.ts +21 -0
  226. package/src/codex-protocol/v2/FsRemoveResponse.ts +8 -0
  227. package/src/codex-protocol/v2/FsUnwatchParams.ts +12 -0
  228. package/src/codex-protocol/v2/FsUnwatchResponse.ts +8 -0
  229. package/src/codex-protocol/v2/FsWatchParams.ts +17 -0
  230. package/src/codex-protocol/v2/FsWatchResponse.ts +13 -0
  231. package/src/codex-protocol/v2/FsWriteFileParams.ts +17 -0
  232. package/src/codex-protocol/v2/FsWriteFileResponse.ts +8 -0
  233. package/src/codex-protocol/v2/GetAccountParams.ts +13 -0
  234. package/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +14 -0
  235. package/src/codex-protocol/v2/GetAccountResponse.ts +6 -0
  236. package/src/codex-protocol/v2/GitInfo.ts +5 -0
  237. package/src/codex-protocol/v2/GrantedPermissionProfile.ts +7 -0
  238. package/src/codex-protocol/v2/GuardianApprovalReview.ts +13 -0
  239. package/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +9 -0
  240. package/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +8 -0
  241. package/src/codex-protocol/v2/GuardianCommandSource.ts +5 -0
  242. package/src/codex-protocol/v2/GuardianRiskLevel.ts +8 -0
  243. package/src/codex-protocol/v2/GuardianUserAuthorization.ts +8 -0
  244. package/src/codex-protocol/v2/GuardianWarningNotification.ts +13 -0
  245. package/src/codex-protocol/v2/HookCompletedNotification.ts +6 -0
  246. package/src/codex-protocol/v2/HookErrorInfo.ts +5 -0
  247. package/src/codex-protocol/v2/HookEventName.ts +5 -0
  248. package/src/codex-protocol/v2/HookExecutionMode.ts +5 -0
  249. package/src/codex-protocol/v2/HookHandlerType.ts +5 -0
  250. package/src/codex-protocol/v2/HookMetadata.ts +10 -0
  251. package/src/codex-protocol/v2/HookMigration.ts +5 -0
  252. package/src/codex-protocol/v2/HookOutputEntry.ts +6 -0
  253. package/src/codex-protocol/v2/HookOutputEntryKind.ts +5 -0
  254. package/src/codex-protocol/v2/HookPromptFragment.ts +5 -0
  255. package/src/codex-protocol/v2/HookRunStatus.ts +5 -0
  256. package/src/codex-protocol/v2/HookRunSummary.ts +13 -0
  257. package/src/codex-protocol/v2/HookScope.ts +5 -0
  258. package/src/codex-protocol/v2/HookSource.ts +5 -0
  259. package/src/codex-protocol/v2/HookStartedNotification.ts +6 -0
  260. package/src/codex-protocol/v2/HookTrustStatus.ts +5 -0
  261. package/src/codex-protocol/v2/HooksListEntry.ts +7 -0
  262. package/src/codex-protocol/v2/HooksListParams.ts +9 -0
  263. package/src/codex-protocol/v2/HooksListResponse.ts +6 -0
  264. package/src/codex-protocol/v2/ItemCompletedNotification.ts +10 -0
  265. package/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +38 -0
  266. package/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +33 -0
  267. package/src/codex-protocol/v2/ItemStartedNotification.ts +10 -0
  268. package/src/codex-protocol/v2/ListMcpServerStatusParams.ts +19 -0
  269. package/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +11 -0
  270. package/src/codex-protocol/v2/LoginAccountParams.ts +21 -0
  271. package/src/codex-protocol/v2/LoginAccountResponse.ts +17 -0
  272. package/src/codex-protocol/v2/LogoutAccountResponse.ts +5 -0
  273. package/src/codex-protocol/v2/ManagedHooksRequirements.ts +6 -0
  274. package/src/codex-protocol/v2/MarketplaceAddParams.ts +5 -0
  275. package/src/codex-protocol/v2/MarketplaceAddResponse.ts +6 -0
  276. package/src/codex-protocol/v2/MarketplaceInterface.ts +5 -0
  277. package/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +6 -0
  278. package/src/codex-protocol/v2/MarketplaceRemoveParams.ts +5 -0
  279. package/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +6 -0
  280. package/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +5 -0
  281. package/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +5 -0
  282. package/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +7 -0
  283. package/src/codex-protocol/v2/McpAuthStatus.ts +5 -0
  284. package/src/codex-protocol/v2/McpElicitationArrayType.ts +5 -0
  285. package/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +6 -0
  286. package/src/codex-protocol/v2/McpElicitationBooleanType.ts +5 -0
  287. package/src/codex-protocol/v2/McpElicitationConstOption.ts +5 -0
  288. package/src/codex-protocol/v2/McpElicitationEnumSchema.ts +8 -0
  289. package/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +6 -0
  290. package/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +7 -0
  291. package/src/codex-protocol/v2/McpElicitationNumberSchema.ts +6 -0
  292. package/src/codex-protocol/v2/McpElicitationNumberType.ts +5 -0
  293. package/src/codex-protocol/v2/McpElicitationObjectType.ts +5 -0
  294. package/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +9 -0
  295. package/src/codex-protocol/v2/McpElicitationSchema.ts +13 -0
  296. package/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +7 -0
  297. package/src/codex-protocol/v2/McpElicitationStringFormat.ts +5 -0
  298. package/src/codex-protocol/v2/McpElicitationStringSchema.ts +7 -0
  299. package/src/codex-protocol/v2/McpElicitationStringType.ts +5 -0
  300. package/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +6 -0
  301. package/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +7 -0
  302. package/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +7 -0
  303. package/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +6 -0
  304. package/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +7 -0
  305. package/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +6 -0
  306. package/src/codex-protocol/v2/McpResourceReadParams.ts +5 -0
  307. package/src/codex-protocol/v2/McpResourceReadResponse.ts +6 -0
  308. package/src/codex-protocol/v2/McpServerElicitationAction.ts +5 -0
  309. package/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +16 -0
  310. package/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +17 -0
  311. package/src/codex-protocol/v2/McpServerMigration.ts +5 -0
  312. package/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +5 -0
  313. package/src/codex-protocol/v2/McpServerOauthLoginParams.ts +5 -0
  314. package/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +5 -0
  315. package/src/codex-protocol/v2/McpServerRefreshResponse.ts +5 -0
  316. package/src/codex-protocol/v2/McpServerStartupState.ts +5 -0
  317. package/src/codex-protocol/v2/McpServerStatus.ts +9 -0
  318. package/src/codex-protocol/v2/McpServerStatusDetail.ts +5 -0
  319. package/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +6 -0
  320. package/src/codex-protocol/v2/McpServerToolCallParams.ts +6 -0
  321. package/src/codex-protocol/v2/McpServerToolCallResponse.ts +6 -0
  322. package/src/codex-protocol/v2/McpToolCallError.ts +5 -0
  323. package/src/codex-protocol/v2/McpToolCallProgressNotification.ts +5 -0
  324. package/src/codex-protocol/v2/McpToolCallResult.ts +6 -0
  325. package/src/codex-protocol/v2/McpToolCallStatus.ts +5 -0
  326. package/src/codex-protocol/v2/MemoryCitation.ts +6 -0
  327. package/src/codex-protocol/v2/MemoryCitationEntry.ts +5 -0
  328. package/src/codex-protocol/v2/MemoryResetResponse.ts +5 -0
  329. package/src/codex-protocol/v2/MergeStrategy.ts +5 -0
  330. package/src/codex-protocol/v2/MigrationDetails.ts +11 -0
  331. package/src/codex-protocol/v2/MockExperimentalMethodParams.ts +9 -0
  332. package/src/codex-protocol/v2/MockExperimentalMethodResponse.ts +9 -0
  333. package/src/codex-protocol/v2/Model.ts +19 -0
  334. package/src/codex-protocol/v2/ModelAvailabilityNux.ts +5 -0
  335. package/src/codex-protocol/v2/ModelListParams.ts +17 -0
  336. package/src/codex-protocol/v2/ModelListResponse.ts +11 -0
  337. package/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +5 -0
  338. package/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +5 -0
  339. package/src/codex-protocol/v2/ModelRerouteReason.ts +5 -0
  340. package/src/codex-protocol/v2/ModelReroutedNotification.ts +6 -0
  341. package/src/codex-protocol/v2/ModelServiceTier.ts +5 -0
  342. package/src/codex-protocol/v2/ModelUpgradeInfo.ts +5 -0
  343. package/src/codex-protocol/v2/ModelVerification.ts +5 -0
  344. package/src/codex-protocol/v2/ModelVerificationNotification.ts +6 -0
  345. package/src/codex-protocol/v2/NetworkAccess.ts +5 -0
  346. package/src/codex-protocol/v2/NetworkApprovalContext.ts +6 -0
  347. package/src/codex-protocol/v2/NetworkApprovalProtocol.ts +5 -0
  348. package/src/codex-protocol/v2/NetworkDomainPermission.ts +5 -0
  349. package/src/codex-protocol/v2/NetworkPolicyAmendment.ts +6 -0
  350. package/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +5 -0
  351. package/src/codex-protocol/v2/NetworkRequirements.ts +32 -0
  352. package/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +5 -0
  353. package/src/codex-protocol/v2/NonSteerableTurnKind.ts +5 -0
  354. package/src/codex-protocol/v2/OverriddenMetadata.ts +7 -0
  355. package/src/codex-protocol/v2/PatchApplyStatus.ts +5 -0
  356. package/src/codex-protocol/v2/PatchChangeKind.ts +5 -0
  357. package/src/codex-protocol/v2/PermissionGrantScope.ts +5 -0
  358. package/src/codex-protocol/v2/PermissionProfileListParams.ts +17 -0
  359. package/src/codex-protocol/v2/PermissionProfileListResponse.ts +11 -0
  360. package/src/codex-protocol/v2/PermissionProfileSummary.ts +13 -0
  361. package/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +11 -0
  362. package/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +11 -0
  363. package/src/codex-protocol/v2/PlanDeltaNotification.ts +9 -0
  364. package/src/codex-protocol/v2/PluginAuthPolicy.ts +5 -0
  365. package/src/codex-protocol/v2/PluginAvailability.ts +5 -0
  366. package/src/codex-protocol/v2/PluginDetail.ts +10 -0
  367. package/src/codex-protocol/v2/PluginHookSummary.ts +6 -0
  368. package/src/codex-protocol/v2/PluginInstallParams.ts +6 -0
  369. package/src/codex-protocol/v2/PluginInstallPolicy.ts +5 -0
  370. package/src/codex-protocol/v2/PluginInstallResponse.ts +7 -0
  371. package/src/codex-protocol/v2/PluginInstalledParams.ts +15 -0
  372. package/src/codex-protocol/v2/PluginInstalledResponse.ts +7 -0
  373. package/src/codex-protocol/v2/PluginInterface.ts +35 -0
  374. package/src/codex-protocol/v2/PluginListMarketplaceKind.ts +5 -0
  375. package/src/codex-protocol/v2/PluginListParams.ts +17 -0
  376. package/src/codex-protocol/v2/PluginListResponse.ts +7 -0
  377. package/src/codex-protocol/v2/PluginMarketplaceEntry.ts +13 -0
  378. package/src/codex-protocol/v2/PluginReadParams.ts +6 -0
  379. package/src/codex-protocol/v2/PluginReadResponse.ts +6 -0
  380. package/src/codex-protocol/v2/PluginShareCheckoutParams.ts +5 -0
  381. package/src/codex-protocol/v2/PluginShareCheckoutResponse.ts +6 -0
  382. package/src/codex-protocol/v2/PluginShareContext.ts +11 -0
  383. package/src/codex-protocol/v2/PluginShareDeleteParams.ts +5 -0
  384. package/src/codex-protocol/v2/PluginShareDeleteResponse.ts +5 -0
  385. package/src/codex-protocol/v2/PluginShareDiscoverability.ts +5 -0
  386. package/src/codex-protocol/v2/PluginShareListItem.ts +7 -0
  387. package/src/codex-protocol/v2/PluginShareListParams.ts +5 -0
  388. package/src/codex-protocol/v2/PluginShareListResponse.ts +6 -0
  389. package/src/codex-protocol/v2/PluginSharePrincipal.ts +7 -0
  390. package/src/codex-protocol/v2/PluginSharePrincipalRole.ts +5 -0
  391. package/src/codex-protocol/v2/PluginSharePrincipalType.ts +5 -0
  392. package/src/codex-protocol/v2/PluginShareSaveParams.ts +8 -0
  393. package/src/codex-protocol/v2/PluginShareSaveResponse.ts +5 -0
  394. package/src/codex-protocol/v2/PluginShareTarget.ts +7 -0
  395. package/src/codex-protocol/v2/PluginShareTargetRole.ts +5 -0
  396. package/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +5 -0
  397. package/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +7 -0
  398. package/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +7 -0
  399. package/src/codex-protocol/v2/PluginSkillReadParams.ts +5 -0
  400. package/src/codex-protocol/v2/PluginSkillReadResponse.ts +5 -0
  401. package/src/codex-protocol/v2/PluginSource.ts +6 -0
  402. package/src/codex-protocol/v2/PluginSummary.ts +27 -0
  403. package/src/codex-protocol/v2/PluginUninstallParams.ts +5 -0
  404. package/src/codex-protocol/v2/PluginUninstallResponse.ts +5 -0
  405. package/src/codex-protocol/v2/PluginsMigration.ts +5 -0
  406. package/src/codex-protocol/v2/ProcessExitedNotification.ts +42 -0
  407. package/src/codex-protocol/v2/ProcessKillParams.ts +12 -0
  408. package/src/codex-protocol/v2/ProcessKillResponse.ts +8 -0
  409. package/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +26 -0
  410. package/src/codex-protocol/v2/ProcessOutputStream.ts +8 -0
  411. package/src/codex-protocol/v2/ProcessResizePtyParams.ts +17 -0
  412. package/src/codex-protocol/v2/ProcessResizePtyResponse.ts +8 -0
  413. package/src/codex-protocol/v2/ProcessSpawnParams.ts +73 -0
  414. package/src/codex-protocol/v2/ProcessSpawnResponse.ts +8 -0
  415. package/src/codex-protocol/v2/ProcessTerminalSize.ts +16 -0
  416. package/src/codex-protocol/v2/ProcessWriteStdinParams.ts +21 -0
  417. package/src/codex-protocol/v2/ProcessWriteStdinResponse.ts +8 -0
  418. package/src/codex-protocol/v2/ProfileV2.ts +19 -0
  419. package/src/codex-protocol/v2/RateLimitReachedType.ts +5 -0
  420. package/src/codex-protocol/v2/RateLimitSnapshot.ts +9 -0
  421. package/src/codex-protocol/v2/RateLimitWindow.ts +5 -0
  422. package/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +6 -0
  423. package/src/codex-protocol/v2/ReasoningEffortOption.ts +6 -0
  424. package/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +5 -0
  425. package/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +5 -0
  426. package/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +5 -0
  427. package/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +5 -0
  428. package/src/codex-protocol/v2/RemoteControlDisableResponse.ts +6 -0
  429. package/src/codex-protocol/v2/RemoteControlEnableResponse.ts +6 -0
  430. package/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +9 -0
  431. package/src/codex-protocol/v2/RemoteControlStatusReadResponse.ts +6 -0
  432. package/src/codex-protocol/v2/RequestPermissionProfile.ts +7 -0
  433. package/src/codex-protocol/v2/ResidencyRequirement.ts +5 -0
  434. package/src/codex-protocol/v2/ReviewDelivery.ts +5 -0
  435. package/src/codex-protocol/v2/ReviewStartParams.ts +12 -0
  436. package/src/codex-protocol/v2/ReviewStartResponse.ts +13 -0
  437. package/src/codex-protocol/v2/ReviewTarget.ts +9 -0
  438. package/src/codex-protocol/v2/SandboxMode.ts +5 -0
  439. package/src/codex-protocol/v2/SandboxPolicy.ts +7 -0
  440. package/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +5 -0
  441. package/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +6 -0
  442. package/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +6 -0
  443. package/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +6 -0
  444. package/src/codex-protocol/v2/SessionMigration.ts +5 -0
  445. package/src/codex-protocol/v2/SessionSource.ts +6 -0
  446. package/src/codex-protocol/v2/SkillDependencies.ts +6 -0
  447. package/src/codex-protocol/v2/SkillErrorInfo.ts +5 -0
  448. package/src/codex-protocol/v2/SkillInterface.ts +6 -0
  449. package/src/codex-protocol/v2/SkillMetadata.ts +13 -0
  450. package/src/codex-protocol/v2/SkillScope.ts +5 -0
  451. package/src/codex-protocol/v2/SkillSummary.ts +7 -0
  452. package/src/codex-protocol/v2/SkillToolDependency.ts +5 -0
  453. package/src/codex-protocol/v2/SkillsChangedNotification.ts +11 -0
  454. package/src/codex-protocol/v2/SkillsConfigWriteParams.ts +14 -0
  455. package/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +5 -0
  456. package/src/codex-protocol/v2/SkillsListEntry.ts +7 -0
  457. package/src/codex-protocol/v2/SkillsListParams.ts +13 -0
  458. package/src/codex-protocol/v2/SkillsListResponse.ts +6 -0
  459. package/src/codex-protocol/v2/SortDirection.ts +5 -0
  460. package/src/codex-protocol/v2/SubagentMigration.ts +5 -0
  461. package/src/codex-protocol/v2/TerminalInteractionNotification.ts +5 -0
  462. package/src/codex-protocol/v2/TextElement.ts +14 -0
  463. package/src/codex-protocol/v2/TextPosition.ts +13 -0
  464. package/src/codex-protocol/v2/TextRange.ts +6 -0
  465. package/src/codex-protocol/v2/Thread.ts +86 -0
  466. package/src/codex-protocol/v2/ThreadActiveFlag.ts +5 -0
  467. package/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +10 -0
  468. package/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +5 -0
  469. package/src/codex-protocol/v2/ThreadArchiveParams.ts +5 -0
  470. package/src/codex-protocol/v2/ThreadArchiveResponse.ts +5 -0
  471. package/src/codex-protocol/v2/ThreadArchivedNotification.ts +5 -0
  472. package/src/codex-protocol/v2/ThreadBackgroundTerminalsCleanParams.ts +5 -0
  473. package/src/codex-protocol/v2/ThreadBackgroundTerminalsCleanResponse.ts +5 -0
  474. package/src/codex-protocol/v2/ThreadClosedNotification.ts +5 -0
  475. package/src/codex-protocol/v2/ThreadCompactStartParams.ts +5 -0
  476. package/src/codex-protocol/v2/ThreadCompactStartResponse.ts +5 -0
  477. package/src/codex-protocol/v2/ThreadDecrementElicitationParams.ts +12 -0
  478. package/src/codex-protocol/v2/ThreadDecrementElicitationResponse.ts +16 -0
  479. package/src/codex-protocol/v2/ThreadForkParams.ts +60 -0
  480. package/src/codex-protocol/v2/ThreadForkResponse.ts +35 -0
  481. package/src/codex-protocol/v2/ThreadGoal.ts +6 -0
  482. package/src/codex-protocol/v2/ThreadGoalClearParams.ts +5 -0
  483. package/src/codex-protocol/v2/ThreadGoalClearResponse.ts +5 -0
  484. package/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +5 -0
  485. package/src/codex-protocol/v2/ThreadGoalGetParams.ts +5 -0
  486. package/src/codex-protocol/v2/ThreadGoalGetResponse.ts +6 -0
  487. package/src/codex-protocol/v2/ThreadGoalSetParams.ts +6 -0
  488. package/src/codex-protocol/v2/ThreadGoalSetResponse.ts +6 -0
  489. package/src/codex-protocol/v2/ThreadGoalStatus.ts +5 -0
  490. package/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +6 -0
  491. package/src/codex-protocol/v2/ThreadIncrementElicitationParams.ts +12 -0
  492. package/src/codex-protocol/v2/ThreadIncrementElicitationResponse.ts +16 -0
  493. package/src/codex-protocol/v2/ThreadInjectItemsParams.ts +10 -0
  494. package/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +5 -0
  495. package/src/codex-protocol/v2/ThreadItem.ts +101 -0
  496. package/src/codex-protocol/v2/ThreadListParams.ts +54 -0
  497. package/src/codex-protocol/v2/ThreadListResponse.ts +18 -0
  498. package/src/codex-protocol/v2/ThreadLoadedListParams.ts +13 -0
  499. package/src/codex-protocol/v2/ThreadLoadedListResponse.ts +14 -0
  500. package/src/codex-protocol/v2/ThreadMemoryModeSetParams.ts +6 -0
  501. package/src/codex-protocol/v2/ThreadMemoryModeSetResponse.ts +5 -0
  502. package/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +20 -0
  503. package/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +12 -0
  504. package/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +6 -0
  505. package/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +5 -0
  506. package/src/codex-protocol/v2/ThreadReadParams.ts +9 -0
  507. package/src/codex-protocol/v2/ThreadReadResponse.ts +6 -0
  508. package/src/codex-protocol/v2/ThreadRealtimeAppendAudioParams.ts +9 -0
  509. package/src/codex-protocol/v2/ThreadRealtimeAppendAudioResponse.ts +8 -0
  510. package/src/codex-protocol/v2/ThreadRealtimeAppendTextParams.ts +8 -0
  511. package/src/codex-protocol/v2/ThreadRealtimeAppendTextResponse.ts +8 -0
  512. package/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +8 -0
  513. package/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +8 -0
  514. package/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +8 -0
  515. package/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +9 -0
  516. package/src/codex-protocol/v2/ThreadRealtimeListVoicesParams.ts +8 -0
  517. package/src/codex-protocol/v2/ThreadRealtimeListVoicesResponse.ts +9 -0
  518. package/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +9 -0
  519. package/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +8 -0
  520. package/src/codex-protocol/v2/ThreadRealtimeStartParams.ts +16 -0
  521. package/src/codex-protocol/v2/ThreadRealtimeStartResponse.ts +8 -0
  522. package/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +13 -0
  523. package/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +9 -0
  524. package/src/codex-protocol/v2/ThreadRealtimeStopParams.ts +8 -0
  525. package/src/codex-protocol/v2/ThreadRealtimeStopResponse.ts +8 -0
  526. package/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +13 -0
  527. package/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +13 -0
  528. package/src/codex-protocol/v2/ThreadResumeParams.ts +71 -0
  529. package/src/codex-protocol/v2/ThreadResumeResponse.ts +35 -0
  530. package/src/codex-protocol/v2/ThreadRollbackParams.ts +12 -0
  531. package/src/codex-protocol/v2/ThreadRollbackResponse.ts +14 -0
  532. package/src/codex-protocol/v2/ThreadSetNameParams.ts +5 -0
  533. package/src/codex-protocol/v2/ThreadSetNameResponse.ts +5 -0
  534. package/src/codex-protocol/v2/ThreadSettings.ts +14 -0
  535. package/src/codex-protocol/v2/ThreadSettingsUpdateParams.ts +61 -0
  536. package/src/codex-protocol/v2/ThreadSettingsUpdateResponse.ts +5 -0
  537. package/src/codex-protocol/v2/ThreadSettingsUpdatedNotification.ts +6 -0
  538. package/src/codex-protocol/v2/ThreadShellCommandParams.ts +12 -0
  539. package/src/codex-protocol/v2/ThreadShellCommandResponse.ts +5 -0
  540. package/src/codex-protocol/v2/ThreadSortKey.ts +5 -0
  541. package/src/codex-protocol/v2/ThreadSource.ts +5 -0
  542. package/src/codex-protocol/v2/ThreadSourceKind.ts +5 -0
  543. package/src/codex-protocol/v2/ThreadStartParams.ts +57 -0
  544. package/src/codex-protocol/v2/ThreadStartResponse.ts +35 -0
  545. package/src/codex-protocol/v2/ThreadStartSource.ts +5 -0
  546. package/src/codex-protocol/v2/ThreadStartedNotification.ts +6 -0
  547. package/src/codex-protocol/v2/ThreadStatus.ts +6 -0
  548. package/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +6 -0
  549. package/src/codex-protocol/v2/ThreadTokenUsage.ts +6 -0
  550. package/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +6 -0
  551. package/src/codex-protocol/v2/ThreadTurnsItemsListParams.ts +18 -0
  552. package/src/codex-protocol/v2/ThreadTurnsItemsListResponse.ts +16 -0
  553. package/src/codex-protocol/v2/ThreadTurnsListParams.ts +23 -0
  554. package/src/codex-protocol/v2/ThreadTurnsListResponse.ts +18 -0
  555. package/src/codex-protocol/v2/ThreadUnarchiveParams.ts +5 -0
  556. package/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +6 -0
  557. package/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +5 -0
  558. package/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +5 -0
  559. package/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +6 -0
  560. package/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +5 -0
  561. package/src/codex-protocol/v2/TokenUsageBreakdown.ts +5 -0
  562. package/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +8 -0
  563. package/src/codex-protocol/v2/ToolRequestUserInputOption.ts +8 -0
  564. package/src/codex-protocol/v2/ToolRequestUserInputParams.ts +9 -0
  565. package/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +9 -0
  566. package/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +9 -0
  567. package/src/codex-protocol/v2/ToolsV2.ts +6 -0
  568. package/src/codex-protocol/v2/Turn.ts +33 -0
  569. package/src/codex-protocol/v2/TurnCompletedNotification.ts +6 -0
  570. package/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +9 -0
  571. package/src/codex-protocol/v2/TurnEnvironmentParams.ts +6 -0
  572. package/src/codex-protocol/v2/TurnError.ts +6 -0
  573. package/src/codex-protocol/v2/TurnInterruptParams.ts +5 -0
  574. package/src/codex-protocol/v2/TurnInterruptResponse.ts +5 -0
  575. package/src/codex-protocol/v2/TurnItemsView.ts +5 -0
  576. package/src/codex-protocol/v2/TurnPlanStep.ts +6 -0
  577. package/src/codex-protocol/v2/TurnPlanStepStatus.ts +5 -0
  578. package/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +6 -0
  579. package/src/codex-protocol/v2/TurnStartParams.ts +88 -0
  580. package/src/codex-protocol/v2/TurnStartResponse.ts +6 -0
  581. package/src/codex-protocol/v2/TurnStartedNotification.ts +6 -0
  582. package/src/codex-protocol/v2/TurnStatus.ts +5 -0
  583. package/src/codex-protocol/v2/TurnSteerParams.ts +15 -0
  584. package/src/codex-protocol/v2/TurnSteerResponse.ts +5 -0
  585. package/src/codex-protocol/v2/UserInput.ts +11 -0
  586. package/src/codex-protocol/v2/WarningNotification.ts +13 -0
  587. package/src/codex-protocol/v2/WebSearchAction.ts +5 -0
  588. package/src/codex-protocol/v2/WindowsSandboxReadiness.ts +5 -0
  589. package/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +6 -0
  590. package/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +6 -0
  591. package/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +5 -0
  592. package/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +7 -0
  593. package/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +5 -0
  594. package/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +5 -0
  595. package/src/codex-protocol/v2/WriteStatus.ts +5 -0
  596. package/src/codex-protocol/v2/index.ts +503 -0
  597. package/src/column.ts +44 -0
  598. package/src/engines/claude/claude-engine.ts +769 -0
  599. package/src/engines/claude/clock.ts +48 -0
  600. package/src/engines/claude/compact.ts +107 -0
  601. package/src/engines/claude/ctx.ts +239 -0
  602. package/src/engines/claude/doctor.ts +202 -0
  603. package/src/engines/claude/env.ts +16 -0
  604. package/src/engines/claude/history.ts +504 -0
  605. package/src/engines/claude/identifiers.ts +25 -0
  606. package/src/engines/claude/identity-migration.ts +16 -0
  607. package/src/engines/claude/idle.ts +91 -0
  608. package/src/engines/claude/keys.ts +163 -0
  609. package/src/engines/claude/last.ts +52 -0
  610. package/src/engines/claude/mem.ts +124 -0
  611. package/src/engines/claude/persistence.ts +41 -0
  612. package/src/engines/claude/post-turn.ts +45 -0
  613. package/src/engines/claude/reload.ts +53 -0
  614. package/src/engines/claude/repo-fs.ts +63 -0
  615. package/src/engines/claude/resume.ts +145 -0
  616. package/src/engines/claude/send.ts +86 -0
  617. package/src/engines/claude/spawn.ts +435 -0
  618. package/src/engines/claude/state.ts +124 -0
  619. package/src/engines/claude/tmux.ts +99 -0
  620. package/src/engines/claude/wait-signals.ts +128 -0
  621. package/src/engines/claude/wait.ts +59 -0
  622. package/src/engines/codex/ask.ts +69 -0
  623. package/src/engines/codex/engine.ts +1261 -0
  624. package/src/engines/codex/events.ts +106 -0
  625. package/src/engines/codex/history.ts +385 -0
  626. package/src/engines/codex/identity-migration.ts +14 -0
  627. package/src/engines/codex/ipc-bridge-process.ts +14 -0
  628. package/src/engines/codex/ipc-bridge.ts +844 -0
  629. package/src/engines/codex/persistence.ts +236 -0
  630. package/src/engines/codex/rollout.ts +384 -0
  631. package/src/engines/codex/rpc.ts +311 -0
  632. package/src/engines/codex/supervisor.ts +648 -0
  633. package/src/engines/codex/ui-ipc.ts +374 -0
  634. package/src/engines/codex/verb-common.ts +34 -0
  635. package/src/engines/codex/verb-lifecycle.ts +94 -0
  636. package/src/engines/codex/verb-state.ts +19 -0
  637. package/src/engines/codex/verb-turns.ts +49 -0
  638. package/src/engines/codex/verbs.ts +15 -0
  639. package/src/engines/engine.ts +91 -0
  640. package/src/engines/git-worktree.ts +137 -0
  641. package/src/engines/production.ts +19 -0
  642. package/src/engines/registry.ts +70 -0
  643. package/src/engines/teammate-record.ts +113 -0
  644. package/src/engines/types.ts +334 -0
  645. package/src/env.ts +29 -0
  646. package/src/grep.ts +39 -0
  647. package/src/help.ts +433 -0
  648. package/src/identity/name.ts +58 -0
  649. package/src/identity/router.ts +80 -0
  650. package/src/identity/uuid-prefix.ts +40 -0
  651. package/src/main.ts +39 -0
  652. package/src/persistence/atomic-file.ts +74 -0
  653. package/src/persistence/identity-store.ts +294 -0
  654. package/src/persistence/identity-writer.ts +28 -0
  655. package/src/persistence/paths.ts +138 -0
  656. package/src/plugin-root.ts +26 -0
  657. package/src/proc.ts +66 -0
  658. package/src/shared/verb-args.ts +331 -0
  659. package/src/tm.ts +54 -0
  660. package/src/tmux.ts +57 -0
  661. package/src/verbs/archive.ts +211 -0
  662. package/src/verbs/ask.ts +29 -0
  663. package/src/verbs/compact.ts +25 -0
  664. package/src/verbs/context.ts +68 -0
  665. package/src/verbs/ctx.ts +21 -0
  666. package/src/verbs/format.ts +213 -0
  667. package/src/verbs/history.ts +190 -0
  668. package/src/verbs/kill.ts +61 -0
  669. package/src/verbs/last.ts +34 -0
  670. package/src/verbs/ls.ts +27 -0
  671. package/src/verbs/mem.ts +40 -0
  672. package/src/verbs/poll.ts +61 -0
  673. package/src/verbs/reload.ts +17 -0
  674. package/src/verbs/resolve.ts +14 -0
  675. package/src/verbs/resume.ts +170 -0
  676. package/src/verbs/send.ts +36 -0
  677. package/src/verbs/spawn.ts +81 -0
  678. package/src/verbs/states.ts +74 -0
  679. package/src/verbs/status.ts +26 -0
  680. package/src/verbs/wait.ts +40 -0
  681. package/src/verbs.ts +56 -0
  682. package/src/ws-types.d.ts +9 -0
  683. package/third_party/ws/LICENSE +20 -0
  684. package/third_party/ws/README.md +548 -0
  685. package/third_party/ws/UPSTREAM.md +55 -0
  686. package/third_party/ws/browser.js +8 -0
  687. package/third_party/ws/index.js +22 -0
  688. package/third_party/ws/lib/buffer-util.js +131 -0
  689. package/third_party/ws/lib/constants.js +19 -0
  690. package/third_party/ws/lib/event-target.js +292 -0
  691. package/third_party/ws/lib/extension.js +203 -0
  692. package/third_party/ws/lib/limiter.js +55 -0
  693. package/third_party/ws/lib/permessage-deflate.js +528 -0
  694. package/third_party/ws/lib/receiver.js +760 -0
  695. package/third_party/ws/lib/sender.js +607 -0
  696. package/third_party/ws/lib/stream.js +161 -0
  697. package/third_party/ws/lib/subprotocol.js +62 -0
  698. package/third_party/ws/lib/validation.js +152 -0
  699. package/third_party/ws/lib/websocket-server.js +562 -0
  700. package/third_party/ws/lib/websocket.js +1407 -0
  701. package/third_party/ws/package.json +13 -0
  702. package/third_party/ws/wrapper.mjs +21 -0
@@ -0,0 +1,844 @@
1
+ import { setTimeout as sleep } from 'node:timers/promises'
2
+
3
+ import type {
4
+ ClientRequest,
5
+ InitializeResponse,
6
+ ServerNotification,
7
+ ServerRequest,
8
+ } from '../../codex-protocol/index.js'
9
+ import type {
10
+ Thread,
11
+ ThreadCompactStartResponse,
12
+ ThreadReadResponse,
13
+ ThreadResumeResponse,
14
+ ThreadSettingsUpdateResponse,
15
+ ThreadStatus,
16
+ Turn,
17
+ TurnInterruptParams,
18
+ TurnInterruptResponse,
19
+ TurnStartParams,
20
+ TurnStartResponse,
21
+ TurnSteerParams,
22
+ TurnSteerResponse,
23
+ } from '../../codex-protocol/v2/index.js'
24
+ import { daemonAlive, readDaemonState } from './supervisor.js'
25
+ import { CodexWsClient } from './rpc.js'
26
+ import {
27
+ CodexUiIpcClient,
28
+ codexUiIpcSocketExists,
29
+ codexUiIpcSocketPath,
30
+ type IpcBroadcastContext,
31
+ type IpcRequestContext,
32
+ } from './ui-ipc.js'
33
+
34
+ // Codex UI's local AppServerManager only consumes stream broadcasts whose hostId matches
35
+ // its own hostId; follower routing is derived from the IPC broadcast sourceClientId.
36
+ const CODEX_UI_HOST_ID = 'local'
37
+ // Matches Codex extension 26.519.x's IPC schema version for thread-stream-state-changed.
38
+ const CODEX_UI_STREAM_VERSION = 6
39
+ const CODEX_IPC_RETRY_MS = 1000
40
+ const CODEX_IPC_POLL_MS = 1000
41
+ const CODEX_IPC_SNAPSHOT_DEBOUNCE_MS = 100
42
+
43
+ const CODEX_CLIENT_INFO = {
44
+ name: 'claudemux',
45
+ title: null,
46
+ version: '1.0.0',
47
+ }
48
+
49
+ const FOLLOWER_METHODS = new Set([
50
+ 'thread-follower-start-turn',
51
+ 'thread-follower-compact-thread',
52
+ 'thread-follower-steer-turn',
53
+ 'thread-follower-interrupt-turn',
54
+ 'thread-follower-set-model-and-reasoning',
55
+ 'thread-follower-set-collaboration-mode',
56
+ 'thread-follower-command-approval-decision',
57
+ 'thread-follower-file-approval-decision',
58
+ 'thread-follower-permissions-request-approval-response',
59
+ 'thread-follower-submit-user-input',
60
+ 'thread-follower-submit-mcp-server-elicitation-response',
61
+ 'thread-follower-set-queued-follow-ups-state',
62
+ ])
63
+
64
+ const TURN_START_OPTIONAL_KEYS = [
65
+ 'responsesapiClientMetadata',
66
+ 'environments',
67
+ 'cwd',
68
+ 'runtimeWorkspaceRoots',
69
+ 'approvalPolicy',
70
+ 'approvalsReviewer',
71
+ 'sandboxPolicy',
72
+ 'permissions',
73
+ 'model',
74
+ 'serviceTier',
75
+ 'effort',
76
+ 'summary',
77
+ 'personality',
78
+ 'outputSchema',
79
+ 'collaborationMode',
80
+ ] as const
81
+
82
+ interface PendingServerRequest {
83
+ readonly id: string
84
+ readonly method: ServerRequest['method']
85
+ readonly params: ServerRequest['params']
86
+ readonly resolve: (value: unknown) => void
87
+ readonly reject: (error: Error) => void
88
+ }
89
+
90
+ interface ConversationTurn {
91
+ readonly params: Record<string, unknown>
92
+ readonly turnId: string
93
+ readonly turnStartedAtMs: number | null
94
+ readonly durationMs: number | null
95
+ readonly finalAssistantStartedAtMs: number | null
96
+ readonly status: Turn['status']
97
+ readonly error: Turn['error']
98
+ readonly diff: null
99
+ readonly items: readonly unknown[]
100
+ }
101
+
102
+ interface ConversationState {
103
+ readonly id: string
104
+ readonly forkedFromId: string | null
105
+ readonly hostId: string
106
+ readonly turns: readonly ConversationTurn[]
107
+ readonly requests: readonly Record<string, unknown>[]
108
+ readonly createdAt: number
109
+ readonly updatedAt: number
110
+ readonly title: string | null
111
+ readonly modelProvider: string
112
+ readonly latestModel: string
113
+ readonly latestReasoningEffort: ThreadResumeResponse['reasoningEffort']
114
+ readonly previousTurnModel: null
115
+ readonly latestCollaborationMode: {
116
+ readonly mode: 'default'
117
+ readonly settings: {
118
+ readonly model: string
119
+ readonly reasoning_effort: ThreadResumeResponse['reasoningEffort']
120
+ readonly developer_instructions: null
121
+ }
122
+ }
123
+ readonly hasUnreadTurn: false
124
+ readonly rolloutPath: string
125
+ readonly cwd: string
126
+ readonly gitInfo: Thread['gitInfo']
127
+ readonly resumeState: 'resumed'
128
+ readonly latestTokenUsageInfo: null
129
+ readonly threadDetailLevel: null
130
+ readonly threadRuntimeStatus: ThreadStatus
131
+ readonly turnsPagination: {
132
+ readonly olderCursor: null
133
+ readonly isLoadingOlder: false
134
+ readonly hasLoadedOldest: true
135
+ }
136
+ readonly workspaceKind: 'project'
137
+ readonly source: Thread['source']
138
+ }
139
+
140
+ type ClientRequestMethod = ClientRequest['method']
141
+ type FollowerOkResponse = { readonly ok: true }
142
+ type FollowerResultResponse<T> = { readonly result: T }
143
+
144
+ export function isCodexFollowerIpcMethod(method: string): boolean {
145
+ return FOLLOWER_METHODS.has(method)
146
+ }
147
+
148
+ export class CodexIpcBridge {
149
+ private ipcClient: CodexUiIpcClient | null = null
150
+ private appClient: CodexWsClient | null = null
151
+ private appThread: ThreadResumeResponse | null = null
152
+ private activeThreadId: string | null = null
153
+ private snapshotTimer: ReturnType<typeof setTimeout> | null = null
154
+ private readonly pendingServerRequests = new Map<string, PendingServerRequest>()
155
+
156
+ constructor(private readonly opts: {
157
+ readonly name: string
158
+ readonly env: NodeJS.ProcessEnv
159
+ }) {}
160
+
161
+ async run(): Promise<void> {
162
+ while (daemonAlive(this.opts.name)) {
163
+ try {
164
+ await this.runOneIpcConnection()
165
+ } catch (e) {
166
+ this.log(`IPC bridge cycle failed: ${errorMessage(e)}`)
167
+ } finally {
168
+ this.ipcClient?.close()
169
+ this.ipcClient = null
170
+ }
171
+ await sleep(CODEX_IPC_RETRY_MS)
172
+ }
173
+ this.closeAppClient()
174
+ }
175
+
176
+ private async runOneIpcConnection(): Promise<void> {
177
+ if (!codexUiIpcSocketExists(this.opts.env)) {
178
+ await sleep(CODEX_IPC_RETRY_MS)
179
+ return
180
+ }
181
+ const socketPath = codexUiIpcSocketPath(this.opts.env)
182
+ const client = new CodexUiIpcClient({
183
+ socketPath,
184
+ clientType: 'claudemux-codex-teammate',
185
+ canHandle: async (ctx) => this.canHandleIpcRequest(ctx.method, ctx.params),
186
+ handleRequest: async (ctx) => this.handleIpcRequest(ctx),
187
+ })
188
+ client.onBroadcast((ctx) => this.handleIpcBroadcast(ctx))
189
+ await client.connect()
190
+ this.ipcClient = client
191
+ this.log(`connected to Codex UI IPC as ${client.id ?? '<unknown>'}`)
192
+ await this.reconcileThread()
193
+ await this.broadcastSnapshot()
194
+
195
+ const poll = setInterval(() => {
196
+ this.poll().catch((e) => this.log(`poll failed: ${errorMessage(e)}`))
197
+ }, CODEX_IPC_POLL_MS)
198
+ try {
199
+ await client.closed()
200
+ } finally {
201
+ clearInterval(poll)
202
+ }
203
+ }
204
+
205
+ private async poll(): Promise<void> {
206
+ if (!daemonAlive(this.opts.name)) {
207
+ this.ipcClient?.close()
208
+ this.closeAppClient()
209
+ return
210
+ }
211
+ const previousThreadId = this.activeThreadId
212
+ await this.reconcileThread()
213
+ if (this.activeThreadId !== null && this.activeThreadId !== previousThreadId) {
214
+ await this.broadcastSnapshot()
215
+ }
216
+ }
217
+
218
+ private async reconcileThread(): Promise<string | null> {
219
+ const state = readDaemonState(this.opts.name)
220
+ if (state === null || !daemonAlive(this.opts.name)) return null
221
+ if (state.threadId === null) return null
222
+ if (this.appClient === null || this.activeThreadId !== state.threadId) {
223
+ await this.openAppClient(state.socketPath, state.threadId)
224
+ }
225
+ return state.threadId
226
+ }
227
+
228
+ private async openAppClient(socketPath: string, threadId: string): Promise<void> {
229
+ this.closeAppClient()
230
+ const client = new CodexWsClient({ socketPath })
231
+ await client.ready()
232
+ await client.request<'initialize', InitializeResponse>('initialize', {
233
+ clientInfo: CODEX_CLIENT_INFO,
234
+ capabilities: {
235
+ experimentalApi: true,
236
+ requestAttestation: false,
237
+ },
238
+ })
239
+ client.onClose((reason) => this.handleAppClientClosed(client, reason))
240
+ client.setServerRequestHandler(async (req) => this.handleCodexServerRequest(req))
241
+ client.onNotification((notif) => this.handleCodexNotification(notif))
242
+ this.appClient = client
243
+ this.appThread = await client.request<'thread/resume', ThreadResumeResponse>('thread/resume', {
244
+ threadId,
245
+ persistExtendedHistory: false,
246
+ })
247
+ this.activeThreadId = threadId
248
+ }
249
+
250
+ private closeAppClient(): void {
251
+ const client = this.appClient
252
+ this.appClient = null
253
+ this.appThread = null
254
+ this.activeThreadId = null
255
+ if (client !== null) client.close()
256
+ for (const pending of this.pendingServerRequests.values()) {
257
+ pending.reject(new Error('codex IPC bridge app-server connection closed'))
258
+ }
259
+ this.pendingServerRequests.clear()
260
+ }
261
+
262
+ private handleAppClientClosed(client: CodexWsClient, reason: Error): void {
263
+ if (this.appClient !== client) return
264
+ this.appClient = null
265
+ this.appThread = null
266
+ this.activeThreadId = null
267
+ for (const pending of this.pendingServerRequests.values()) pending.reject(reason)
268
+ this.pendingServerRequests.clear()
269
+ }
270
+
271
+ private handleCodexNotification(notif: ServerNotification): void {
272
+ if (!notificationMatchesThread(notif, this.activeThreadId)) return
273
+ this.scheduleSnapshot()
274
+ }
275
+
276
+ private async handleCodexServerRequest(req: ServerRequest): Promise<unknown> {
277
+ if (!serverRequestMatchesThread(req, this.activeThreadId)) {
278
+ throw new Error(`server request ${req.method} does not target the active thread`)
279
+ }
280
+ const id = String(req.id)
281
+ return new Promise((resolve, reject) => {
282
+ this.pendingServerRequests.set(id, {
283
+ id,
284
+ method: req.method,
285
+ params: req.params,
286
+ resolve,
287
+ reject,
288
+ })
289
+ this.scheduleSnapshot()
290
+ })
291
+ }
292
+
293
+ private handleIpcBroadcast(ctx: IpcBroadcastContext): void {
294
+ if (ctx.method !== 'client-status-changed') return
295
+ const params = asRecord(ctx.params)
296
+ if (params?.['status'] === 'connected' && params['clientId'] !== this.ipcClient?.id) {
297
+ this.scheduleSnapshot()
298
+ }
299
+ }
300
+
301
+ private async canHandleIpcRequest(method: string, params: unknown): Promise<boolean> {
302
+ if (!isCodexFollowerIpcMethod(method)) return false
303
+ await this.reconcileThread()
304
+ if (this.activeThreadId === null) return false
305
+ return conversationId(params) === this.activeThreadId
306
+ }
307
+
308
+ private async handleIpcRequest(ctx: IpcRequestContext): Promise<unknown> {
309
+ if (!(await this.canHandleIpcRequest(ctx.method, ctx.params))) {
310
+ throw new Error(`claudemux codex teammate cannot handle ${ctx.method}`)
311
+ }
312
+ switch (ctx.method) {
313
+ case 'thread-follower-start-turn':
314
+ return this.handleStartTurn(ctx.params)
315
+ case 'thread-follower-compact-thread':
316
+ return this.handleCompactThread()
317
+ case 'thread-follower-steer-turn':
318
+ return this.handleSteerTurn(ctx.params)
319
+ case 'thread-follower-interrupt-turn':
320
+ return this.handleInterruptTurn(ctx.params)
321
+ case 'thread-follower-set-model-and-reasoning':
322
+ return this.handleThreadSettings(ctx.params, 'model')
323
+ case 'thread-follower-set-collaboration-mode':
324
+ return this.handleThreadSettings(ctx.params, 'collaboration')
325
+ case 'thread-follower-command-approval-decision':
326
+ return this.resolvePendingServerRequest(ctx.params, 'item/commandExecution/requestApproval')
327
+ case 'thread-follower-file-approval-decision':
328
+ return this.resolvePendingServerRequest(ctx.params, 'item/fileChange/requestApproval')
329
+ case 'thread-follower-permissions-request-approval-response':
330
+ return this.resolvePendingServerRequest(ctx.params, 'item/permissions/requestApproval')
331
+ case 'thread-follower-submit-user-input':
332
+ return this.resolvePendingServerRequest(ctx.params, 'item/tool/requestUserInput')
333
+ case 'thread-follower-submit-mcp-server-elicitation-response':
334
+ return this.resolvePendingServerRequest(ctx.params, 'mcpServer/elicitation/request')
335
+ case 'thread-follower-set-queued-follow-ups-state':
336
+ return this.handleSetQueuedFollowUpsState(ctx.params)
337
+ default:
338
+ throw new Error(`unsupported codex follower IPC method: ${ctx.method}`)
339
+ }
340
+ }
341
+
342
+ private async handleStartTurn(params: unknown): Promise<FollowerResultResponse<TurnStartResponse>> {
343
+ const client = await this.requireAppClient()
344
+ const threadId = this.requireThreadId()
345
+ const startParams = turnStartParamsFromFollower(params, threadId)
346
+ const response = await client.request<'turn/start', TurnStartResponse>('turn/start', startParams)
347
+ this.scheduleSnapshot()
348
+ return { result: response }
349
+ }
350
+
351
+ private async handleCompactThread(): Promise<FollowerOkResponse> {
352
+ const client = await this.requireAppClient()
353
+ const threadId = this.requireThreadId()
354
+ await client.request<'thread/compact/start', ThreadCompactStartResponse>(
355
+ 'thread/compact/start',
356
+ { threadId },
357
+ )
358
+ this.scheduleSnapshot()
359
+ return { ok: true }
360
+ }
361
+
362
+ private async handleSteerTurn(params: unknown): Promise<FollowerResultResponse<TurnSteerResponse>> {
363
+ const client = await this.requireAppClient()
364
+ const threadId = this.requireThreadId()
365
+ const steerParams = turnSteerParamsFromFollower(
366
+ params,
367
+ threadId,
368
+ await this.readActiveTurnId(client, threadId),
369
+ )
370
+ let response: TurnSteerResponse
371
+ try {
372
+ response = await client.request<'turn/steer', TurnSteerResponse>('turn/steer', steerParams)
373
+ } catch (e) {
374
+ const actualTurnId = expectedActiveTurnIdFromError(e)
375
+ if (actualTurnId === null) throw e
376
+ response = await client.request<'turn/steer', TurnSteerResponse>('turn/steer', {
377
+ ...steerParams,
378
+ expectedTurnId: actualTurnId,
379
+ })
380
+ }
381
+ this.scheduleSnapshot()
382
+ return { result: response }
383
+ }
384
+
385
+ private async handleInterruptTurn(params: unknown): Promise<FollowerOkResponse> {
386
+ const client = await this.requireAppClient()
387
+ const threadId = this.requireThreadId()
388
+ this.resolvePendingServerRequestsForInterrupt()
389
+ const activeTurnId = await this.readActiveTurnId(client, threadId)
390
+ if (activeTurnId === null) {
391
+ this.scheduleSnapshot()
392
+ return { ok: true }
393
+ }
394
+ const interruptParams = turnInterruptParamsFromFollower(
395
+ params,
396
+ threadId,
397
+ activeTurnId,
398
+ )
399
+ await client.request<'turn/interrupt', TurnInterruptResponse>('turn/interrupt', interruptParams)
400
+ this.scheduleSnapshot()
401
+ return { ok: true }
402
+ }
403
+
404
+ private async handleThreadSettings(
405
+ params: unknown,
406
+ mode: 'model' | 'collaboration',
407
+ ): Promise<FollowerOkResponse> {
408
+ const client = await this.requireAppClient()
409
+ const values = asRecord(params)
410
+ if (values === null) throw new Error(`thread-follower-set-${mode} params must be an object`)
411
+ const settings: Record<string, unknown> = { threadId: this.requireThreadId() }
412
+ if (mode === 'model') {
413
+ copyIfPresent(values, settings, 'model')
414
+ if ('reasoningEffort' in values) settings['effort'] = values['reasoningEffort']
415
+ copyIfPresent(values, settings, 'effort')
416
+ copyIfPresent(values, settings, 'summary')
417
+ copyIfPresent(values, settings, 'serviceTier')
418
+ copyIfPresent(values, settings, 'personality')
419
+ } else {
420
+ copyIfPresent(values, settings, 'collaborationMode')
421
+ }
422
+ await client.request<'thread/settings/update', ThreadSettingsUpdateResponse>(
423
+ 'thread/settings/update',
424
+ settings as ParametersFor<'thread/settings/update'>,
425
+ )
426
+ this.scheduleSnapshot()
427
+ return { ok: true }
428
+ }
429
+
430
+ private async handleSetQueuedFollowUpsState(params: unknown): Promise<FollowerOkResponse> {
431
+ const values = asRecord(params)
432
+ if (values === null) throw new Error('thread-follower-set-queued-follow-ups-state params must be an object')
433
+ const threadId = this.requireThreadId()
434
+ const state = asRecord(values['state'])
435
+ const messages = state === null || !Array.isArray(state[threadId]) ? [] : state[threadId]
436
+ this.ipcClient?.broadcast('thread-queued-followups-changed', {
437
+ conversationId: threadId,
438
+ messages,
439
+ })
440
+ return { ok: true }
441
+ }
442
+
443
+ private async resolvePendingServerRequest(
444
+ params: unknown,
445
+ expectedMethod: ServerRequest['method'],
446
+ ): Promise<Record<string, unknown>> {
447
+ const values = asRecord(params)
448
+ if (values === null) throw new Error(`params must be an object for ${expectedMethod}`)
449
+ const requestId = values?.['requestId']
450
+ if (typeof requestId !== 'string' || requestId.length === 0) {
451
+ throw new Error(`missing requestId for ${expectedMethod}`)
452
+ }
453
+ const pending = this.pendingServerRequests.get(requestId)
454
+ if (pending === undefined) throw new Error(`unknown pending server request ${requestId}`)
455
+ if (pending.method !== expectedMethod) {
456
+ throw new Error(`server request ${requestId} is ${pending.method}, not ${expectedMethod}`)
457
+ }
458
+ const result = serverRequestResult(expectedMethod, values)
459
+ this.pendingServerRequests.delete(requestId)
460
+ pending.resolve(result)
461
+ this.scheduleSnapshot()
462
+ return { ok: true }
463
+ }
464
+
465
+ private resolvePendingServerRequestsForInterrupt(): number {
466
+ let resolved = 0
467
+ for (const pending of Array.from(this.pendingServerRequests.values())) {
468
+ const result = interruptServerRequestResult(pending.method)
469
+ if (result === null) continue
470
+ this.pendingServerRequests.delete(pending.id)
471
+ pending.resolve(result)
472
+ resolved += 1
473
+ }
474
+ return resolved
475
+ }
476
+
477
+ private async requireAppClient(): Promise<CodexWsClient> {
478
+ await this.reconcileThread()
479
+ if (this.appClient === null) throw new Error('codex app-server client is not connected')
480
+ return this.appClient
481
+ }
482
+
483
+ private requireThreadId(): string {
484
+ if (this.activeThreadId === null) throw new Error('codex teammate has no active thread')
485
+ return this.activeThreadId
486
+ }
487
+
488
+ private async readActiveTurnId(client: CodexWsClient, threadId: string): Promise<string | null> {
489
+ const read = await client.request<'thread/read', ThreadReadResponse>('thread/read', {
490
+ threadId,
491
+ includeTurns: true,
492
+ })
493
+ return activeTurnIdFromThread(read.thread)
494
+ }
495
+
496
+ private scheduleSnapshot(): void {
497
+ if (this.ipcClient === null) return
498
+ if (this.snapshotTimer !== null) clearTimeout(this.snapshotTimer)
499
+ this.snapshotTimer = setTimeout(() => {
500
+ this.snapshotTimer = null
501
+ this.broadcastSnapshot().catch((e) => this.log(`snapshot broadcast failed: ${errorMessage(e)}`))
502
+ }, CODEX_IPC_SNAPSHOT_DEBOUNCE_MS)
503
+ }
504
+
505
+ private async broadcastSnapshot(): Promise<void> {
506
+ const ipc = this.ipcClient
507
+ if (ipc === null) return
508
+ const threadId = await this.reconcileThread()
509
+ if (threadId === null || this.appClient === null || this.appThread === null) return
510
+ let read: ThreadReadResponse
511
+ try {
512
+ read = await this.appClient.request<'thread/read', ThreadReadResponse>('thread/read', {
513
+ threadId,
514
+ includeTurns: true,
515
+ })
516
+ } catch (e) {
517
+ this.closeAppClient()
518
+ throw e
519
+ }
520
+ const state = conversationStateFromThread(this.appThread, read.thread, [
521
+ ...this.pendingServerRequests.values(),
522
+ ])
523
+ ipc.broadcast('thread-stream-state-changed', {
524
+ conversationId: threadId,
525
+ hostId: CODEX_UI_HOST_ID,
526
+ change: {
527
+ type: 'snapshot',
528
+ conversationState: state,
529
+ },
530
+ version: CODEX_UI_STREAM_VERSION,
531
+ })
532
+ }
533
+
534
+ private log(message: string): void {
535
+ console.error(`[codex-ipc-bridge:${this.opts.name}] ${message}`)
536
+ }
537
+ }
538
+
539
+ export function conversationStateFromThread(
540
+ resume: ThreadResumeResponse,
541
+ thread: Thread,
542
+ pendingRequests: readonly Pick<PendingServerRequest, 'id' | 'method' | 'params'>[] = [],
543
+ ): ConversationState {
544
+ const cwd = resume.cwd || thread.cwd || '/'
545
+ const createdAt = secondsToMillis(thread.createdAt)
546
+ const updatedAt = secondsToMillis(thread.updatedAt)
547
+ return {
548
+ id: thread.id,
549
+ forkedFromId: thread.forkedFromId,
550
+ hostId: CODEX_UI_HOST_ID,
551
+ turns: turnsFromThread(thread.id, thread.turns, resume, cwd),
552
+ requests: pendingRequests.map((request) => ({
553
+ id: request.id,
554
+ method: request.method,
555
+ params: request.params,
556
+ })),
557
+ createdAt,
558
+ updatedAt,
559
+ title: thread.name,
560
+ modelProvider: resume.modelProvider || thread.modelProvider,
561
+ latestModel: resume.model,
562
+ latestReasoningEffort: resume.reasoningEffort,
563
+ previousTurnModel: null,
564
+ latestCollaborationMode: {
565
+ mode: 'default',
566
+ settings: {
567
+ model: resume.model,
568
+ reasoning_effort: resume.reasoningEffort,
569
+ developer_instructions: null,
570
+ },
571
+ },
572
+ hasUnreadTurn: false,
573
+ rolloutPath: thread.path ?? '',
574
+ cwd,
575
+ gitInfo: thread.gitInfo,
576
+ resumeState: 'resumed',
577
+ latestTokenUsageInfo: null,
578
+ threadDetailLevel: null,
579
+ threadRuntimeStatus: thread.status,
580
+ turnsPagination: {
581
+ olderCursor: null,
582
+ isLoadingOlder: false,
583
+ hasLoadedOldest: true,
584
+ },
585
+ workspaceKind: 'project',
586
+ source: thread.source,
587
+ }
588
+ }
589
+
590
+ function turnsFromThread(
591
+ threadId: string,
592
+ turns: readonly Turn[],
593
+ resume: ThreadResumeResponse,
594
+ cwd: string,
595
+ ): readonly ConversationTurn[] {
596
+ return turns.map((turn) => {
597
+ const first = turn.items[0]
598
+ const input = isUserMessageItem(first) ? first.content : []
599
+ return {
600
+ params: {
601
+ threadId,
602
+ input,
603
+ approvalPolicy: resume.approvalPolicy,
604
+ approvalsReviewer: resume.approvalsReviewer,
605
+ sandboxPolicy: resume.sandbox,
606
+ model: resume.model,
607
+ cwd,
608
+ attachments: [],
609
+ effort: resume.reasoningEffort,
610
+ summary: 'none',
611
+ personality: null,
612
+ outputSchema: null,
613
+ collaborationMode: null,
614
+ },
615
+ turnId: turn.id,
616
+ turnStartedAtMs: nullableSecondsToMillis(turn.startedAt),
617
+ durationMs: turn.durationMs,
618
+ finalAssistantStartedAtMs: nullableSecondsToMillis(turn.completedAt),
619
+ status: turn.status,
620
+ error: turn.error,
621
+ diff: null,
622
+ items: turn.items.map((item) => normalizeThreadItemForUi(item)),
623
+ }
624
+ })
625
+ }
626
+
627
+ function normalizeThreadItemForUi(item: unknown): unknown {
628
+ if (
629
+ typeof item === 'object' &&
630
+ item !== null &&
631
+ (item as { type?: unknown }).type === 'collabAgentToolCall' &&
632
+ Array.isArray((item as { receiverThreadIds?: unknown }).receiverThreadIds)
633
+ ) {
634
+ const ids = (item as { receiverThreadIds: readonly unknown[] }).receiverThreadIds
635
+ return {
636
+ ...item,
637
+ receiverThreads: ids
638
+ .filter((id): id is string => typeof id === 'string')
639
+ .map((threadId) => ({ threadId, thread: null })),
640
+ }
641
+ }
642
+ return item
643
+ }
644
+
645
+ export function turnStartParamsFromFollower(params: unknown, threadId: string): TurnStartParams {
646
+ const outer = asRecord(params)
647
+ if (outer === null) throw new Error('thread-follower-start-turn params must be an object')
648
+ const inner = asRecord(outer['turnStartParams']) ?? outer
649
+ const input = inner['input']
650
+ if (!Array.isArray(input)) throw new Error('thread-follower-start-turn missing input array')
651
+ const result: Record<string, unknown> = {
652
+ threadId,
653
+ input,
654
+ }
655
+ for (const key of TURN_START_OPTIONAL_KEYS) copyIfPresent(inner, result, key)
656
+ return result as TurnStartParams
657
+ }
658
+
659
+ export function turnSteerParamsFromFollower(
660
+ params: unknown,
661
+ threadId: string,
662
+ activeTurnId: string | null = null,
663
+ ): TurnSteerParams {
664
+ const outer = asRecord(params)
665
+ if (outer === null) throw new Error('thread-follower-steer-turn params must be an object')
666
+ const inner = asRecord(outer['turnSteerParams']) ?? outer
667
+ const input = inner['input']
668
+ if (!Array.isArray(input)) throw new Error('thread-follower-steer-turn missing input array')
669
+ const expectedTurnId = firstString(
670
+ inner['expectedTurnId'],
671
+ inner['turnId'],
672
+ outer['expectedTurnId'],
673
+ outer['turnId'],
674
+ activeTurnId,
675
+ )
676
+ if (expectedTurnId === null) {
677
+ throw new Error('thread-follower-steer-turn missing active turn id')
678
+ }
679
+ const result: TurnSteerParams = {
680
+ threadId,
681
+ input: input as TurnSteerParams['input'],
682
+ expectedTurnId,
683
+ }
684
+ const metadata = followerResponsesapiMetadata(inner)
685
+ const outerMetadata = inner === outer ? { present: false as const } : followerResponsesapiMetadata(outer)
686
+ const selectedMetadata = metadata.present ? metadata : outerMetadata
687
+ if (selectedMetadata.present) {
688
+ result.responsesapiClientMetadata = selectedMetadata.value as TurnSteerParams['responsesapiClientMetadata']
689
+ }
690
+ return result
691
+ }
692
+
693
+ export function turnInterruptParamsFromFollower(
694
+ params: unknown,
695
+ threadId: string,
696
+ activeTurnId: string | null = null,
697
+ ): TurnInterruptParams {
698
+ const outer = asRecord(params)
699
+ if (outer === null) throw new Error('thread-follower-interrupt-turn params must be an object')
700
+ const inner = asRecord(outer['turnInterruptParams']) ?? asRecord(outer['interruptTurnParams']) ?? outer
701
+ const turnId = firstString(
702
+ inner['turnId'],
703
+ inner['expectedTurnId'],
704
+ outer['turnId'],
705
+ outer['expectedTurnId'],
706
+ activeTurnId,
707
+ )
708
+ if (turnId === null) throw new Error('thread-follower-interrupt-turn missing active turn id')
709
+ return { threadId, turnId }
710
+ }
711
+
712
+ function serverRequestResult(
713
+ method: ServerRequest['method'],
714
+ values: Record<string, unknown>,
715
+ ): unknown {
716
+ switch (method) {
717
+ case 'item/commandExecution/requestApproval':
718
+ case 'item/fileChange/requestApproval':
719
+ if (!('decision' in values)) throw new Error(`missing decision for ${method}`)
720
+ return { decision: values['decision'] }
721
+ case 'item/permissions/requestApproval':
722
+ case 'item/tool/requestUserInput':
723
+ case 'mcpServer/elicitation/request': {
724
+ if (!('response' in values)) throw new Error(`missing response for ${method}`)
725
+ return values['response']
726
+ }
727
+ case 'item/tool/call':
728
+ case 'account/chatgptAuthTokens/refresh':
729
+ case 'attestation/generate':
730
+ case 'applyPatchApproval':
731
+ case 'execCommandApproval':
732
+ throw new Error(`unsupported server request response method: ${method}`)
733
+ }
734
+ }
735
+
736
+ function interruptServerRequestResult(method: ServerRequest['method']): unknown | null {
737
+ switch (method) {
738
+ case 'item/commandExecution/requestApproval':
739
+ case 'item/fileChange/requestApproval':
740
+ return { decision: 'decline' }
741
+ case 'item/permissions/requestApproval':
742
+ return { permissions: {}, scope: 'turn' }
743
+ case 'item/tool/requestUserInput':
744
+ return { answers: {} }
745
+ case 'mcpServer/elicitation/request':
746
+ return { action: 'decline', content: null, _meta: null }
747
+ case 'item/tool/call':
748
+ case 'account/chatgptAuthTokens/refresh':
749
+ case 'attestation/generate':
750
+ case 'applyPatchApproval':
751
+ case 'execCommandApproval':
752
+ return null
753
+ }
754
+ }
755
+
756
+ function activeTurnIdFromThread(thread: Thread): string | null {
757
+ for (let i = thread.turns.length - 1; i >= 0; i -= 1) {
758
+ const turn = thread.turns[i]
759
+ if (turn?.status === 'inProgress') return turn.id
760
+ }
761
+ return null
762
+ }
763
+
764
+ function notificationMatchesThread(notif: ServerNotification, threadId: string | null): boolean {
765
+ if (threadId === null) return false
766
+ const params = asRecord(notif.params)
767
+ if (params === null) return false
768
+ if (params['threadId'] === threadId) return true
769
+ const thread = asRecord(params['thread'])
770
+ return thread?.['id'] === threadId
771
+ }
772
+
773
+ function serverRequestMatchesThread(req: ServerRequest, threadId: string | null): boolean {
774
+ if (threadId === null) return false
775
+ const params = asRecord(req.params)
776
+ return params?.['threadId'] === threadId
777
+ }
778
+
779
+ function conversationId(params: unknown): string | null {
780
+ const record = asRecord(params)
781
+ const id = record?.['conversationId']
782
+ return typeof id === 'string' && id.length > 0 ? id : null
783
+ }
784
+
785
+ function isUserMessageItem(item: unknown): item is { readonly content: readonly unknown[] } {
786
+ return (
787
+ typeof item === 'object' &&
788
+ item !== null &&
789
+ (item as { type?: unknown }).type === 'userMessage' &&
790
+ Array.isArray((item as { content?: unknown }).content)
791
+ )
792
+ }
793
+
794
+ function asRecord(value: unknown): Record<string, unknown> | null {
795
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
796
+ ? value as Record<string, unknown>
797
+ : null
798
+ }
799
+
800
+ function copyIfPresent(
801
+ from: Record<string, unknown>,
802
+ to: Record<string, unknown>,
803
+ key: string,
804
+ ): void {
805
+ if (key in from) to[key] = from[key]
806
+ }
807
+
808
+ function firstString(...values: readonly unknown[]): string | null {
809
+ for (const value of values) {
810
+ if (typeof value === 'string' && value.length > 0) return value
811
+ }
812
+ return null
813
+ }
814
+
815
+ function followerResponsesapiMetadata(
816
+ values: Record<string, unknown>,
817
+ ): { readonly present: true; readonly value: unknown } | { readonly present: false } {
818
+ if ('responsesapiClientMetadata' in values) {
819
+ return { present: true, value: values['responsesapiClientMetadata'] }
820
+ }
821
+ const restoreMessage = asRecord(values['restoreMessage'])
822
+ return restoreMessage === null || !('responsesapiClientMetadata' in restoreMessage)
823
+ ? { present: false }
824
+ : { present: true, value: restoreMessage['responsesapiClientMetadata'] }
825
+ }
826
+
827
+ function expectedActiveTurnIdFromError(error: unknown): string | null {
828
+ const match = errorMessage(error).match(/expected active turn id `[^`]+` but found `([^`]+)`/)
829
+ return match?.[1] ?? null
830
+ }
831
+
832
+ function secondsToMillis(value: number): number {
833
+ return Number.isFinite(value) ? value * 1000 : Date.now()
834
+ }
835
+
836
+ function nullableSecondsToMillis(value: number | null): number | null {
837
+ return value === null || !Number.isFinite(value) ? null : value * 1000
838
+ }
839
+
840
+ function errorMessage(value: unknown): string {
841
+ return value instanceof Error ? value.message : String(value)
842
+ }
843
+
844
+ type ParametersFor<M extends ClientRequestMethod> = Extract<ClientRequest, { method: M }>['params']