@codex-app-sdk/backend 0.13.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 (1809) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +39 -0
  3. package/assets/apple-speechanalyzer-cli +0 -0
  4. package/dist/chunks/codex-BT2Vtjs1.js +233 -0
  5. package/dist/chunks/codex-BT2Vtjs1.js.map +1 -0
  6. package/dist/codex/client.d.ts +86 -0
  7. package/dist/codex/client.d.ts.map +1 -0
  8. package/dist/codex/generated/AbsolutePathBuf.d.ts +11 -0
  9. package/dist/codex/generated/AbsolutePathBuf.d.ts.map +1 -0
  10. package/dist/codex/generated/AgentMessageInputContent.d.ts +8 -0
  11. package/dist/codex/generated/AgentMessageInputContent.d.ts.map +1 -0
  12. package/dist/codex/generated/AgentPath.d.ts +2 -0
  13. package/dist/codex/generated/AgentPath.d.ts.map +1 -0
  14. package/dist/codex/generated/ApplyPatchApprovalParams.d.ts +23 -0
  15. package/dist/codex/generated/ApplyPatchApprovalParams.d.ts.map +1 -0
  16. package/dist/codex/generated/ApplyPatchApprovalResponse.d.ts +5 -0
  17. package/dist/codex/generated/ApplyPatchApprovalResponse.d.ts.map +1 -0
  18. package/dist/codex/generated/AuthMode.d.ts +5 -0
  19. package/dist/codex/generated/AuthMode.d.ts.map +1 -0
  20. package/dist/codex/generated/AutoCompactTokenLimitScope.d.ts +6 -0
  21. package/dist/codex/generated/AutoCompactTokenLimitScope.d.ts.map +1 -0
  22. package/dist/codex/generated/ClientInfo.d.ts +6 -0
  23. package/dist/codex/generated/ClientInfo.d.ts.map +1 -0
  24. package/dist/codex/generated/ClientNotification.d.ts +4 -0
  25. package/dist/codex/generated/ClientNotification.d.ts.map +1 -0
  26. package/dist/codex/generated/ClientRequest.d.ts +808 -0
  27. package/dist/codex/generated/ClientRequest.d.ts.map +1 -0
  28. package/dist/codex/generated/CodexResponseHandoffMode.d.ts +2 -0
  29. package/dist/codex/generated/CodexResponseHandoffMode.d.ts.map +1 -0
  30. package/dist/codex/generated/CollaborationMode.d.ts +10 -0
  31. package/dist/codex/generated/CollaborationMode.d.ts.map +1 -0
  32. package/dist/codex/generated/ConfigurationReasoning.d.ts +8 -0
  33. package/dist/codex/generated/ConfigurationReasoning.d.ts.map +1 -0
  34. package/dist/codex/generated/ContentItem.d.ts +16 -0
  35. package/dist/codex/generated/ContentItem.d.ts.map +1 -0
  36. package/dist/codex/generated/ConversationGitInfo.d.ts +6 -0
  37. package/dist/codex/generated/ConversationGitInfo.d.ts.map +1 -0
  38. package/dist/codex/generated/ConversationSummary.d.ts +16 -0
  39. package/dist/codex/generated/ConversationSummary.d.ts.map +1 -0
  40. package/dist/codex/generated/ConversationTextRole.d.ts +2 -0
  41. package/dist/codex/generated/ConversationTextRole.d.ts.map +1 -0
  42. package/dist/codex/generated/ExecCommandApprovalParams.d.ts +19 -0
  43. package/dist/codex/generated/ExecCommandApprovalParams.d.ts.map +1 -0
  44. package/dist/codex/generated/ExecCommandApprovalResponse.d.ts +5 -0
  45. package/dist/codex/generated/ExecCommandApprovalResponse.d.ts.map +1 -0
  46. package/dist/codex/generated/ExecPolicyAmendment.d.ts +9 -0
  47. package/dist/codex/generated/ExecPolicyAmendment.d.ts.map +1 -0
  48. package/dist/codex/generated/FileChange.d.ts +12 -0
  49. package/dist/codex/generated/FileChange.d.ts.map +1 -0
  50. package/dist/codex/generated/ForcedLoginMethod.d.ts +2 -0
  51. package/dist/codex/generated/ForcedLoginMethod.d.ts.map +1 -0
  52. package/dist/codex/generated/FunctionCallOutputBody.d.ts +3 -0
  53. package/dist/codex/generated/FunctionCallOutputBody.d.ts.map +1 -0
  54. package/dist/codex/generated/FunctionCallOutputContentItem.d.ts +20 -0
  55. package/dist/codex/generated/FunctionCallOutputContentItem.d.ts.map +1 -0
  56. package/dist/codex/generated/FuzzyFileSearchMatchType.d.ts +2 -0
  57. package/dist/codex/generated/FuzzyFileSearchMatchType.d.ts.map +1 -0
  58. package/dist/codex/generated/FuzzyFileSearchParams.d.ts +6 -0
  59. package/dist/codex/generated/FuzzyFileSearchParams.d.ts.map +1 -0
  60. package/dist/codex/generated/FuzzyFileSearchResponse.d.ts +5 -0
  61. package/dist/codex/generated/FuzzyFileSearchResponse.d.ts.map +1 -0
  62. package/dist/codex/generated/FuzzyFileSearchResult.d.ts +13 -0
  63. package/dist/codex/generated/FuzzyFileSearchResult.d.ts.map +1 -0
  64. package/dist/codex/generated/FuzzyFileSearchSessionCompletedNotification.d.ts +4 -0
  65. package/dist/codex/generated/FuzzyFileSearchSessionCompletedNotification.d.ts.map +1 -0
  66. package/dist/codex/generated/FuzzyFileSearchSessionStartParams.d.ts +5 -0
  67. package/dist/codex/generated/FuzzyFileSearchSessionStartParams.d.ts.map +1 -0
  68. package/dist/codex/generated/FuzzyFileSearchSessionStartResponse.d.ts +2 -0
  69. package/dist/codex/generated/FuzzyFileSearchSessionStartResponse.d.ts.map +1 -0
  70. package/dist/codex/generated/FuzzyFileSearchSessionStopParams.d.ts +4 -0
  71. package/dist/codex/generated/FuzzyFileSearchSessionStopParams.d.ts.map +1 -0
  72. package/dist/codex/generated/FuzzyFileSearchSessionStopResponse.d.ts +2 -0
  73. package/dist/codex/generated/FuzzyFileSearchSessionStopResponse.d.ts.map +1 -0
  74. package/dist/codex/generated/FuzzyFileSearchSessionUpdateParams.d.ts +5 -0
  75. package/dist/codex/generated/FuzzyFileSearchSessionUpdateParams.d.ts.map +1 -0
  76. package/dist/codex/generated/FuzzyFileSearchSessionUpdateResponse.d.ts +2 -0
  77. package/dist/codex/generated/FuzzyFileSearchSessionUpdateResponse.d.ts.map +1 -0
  78. package/dist/codex/generated/FuzzyFileSearchSessionUpdatedNotification.d.ts +7 -0
  79. package/dist/codex/generated/FuzzyFileSearchSessionUpdatedNotification.d.ts.map +1 -0
  80. package/dist/codex/generated/GetAuthStatusParams.d.ts +5 -0
  81. package/dist/codex/generated/GetAuthStatusParams.d.ts.map +1 -0
  82. package/dist/codex/generated/GetAuthStatusResponse.d.ts +7 -0
  83. package/dist/codex/generated/GetAuthStatusResponse.d.ts.map +1 -0
  84. package/dist/codex/generated/GetConversationSummaryParams.d.ts +7 -0
  85. package/dist/codex/generated/GetConversationSummaryParams.d.ts.map +1 -0
  86. package/dist/codex/generated/GetConversationSummaryResponse.d.ts +5 -0
  87. package/dist/codex/generated/GetConversationSummaryResponse.d.ts.map +1 -0
  88. package/dist/codex/generated/GitDiffToRemoteParams.d.ts +4 -0
  89. package/dist/codex/generated/GitDiffToRemoteParams.d.ts.map +1 -0
  90. package/dist/codex/generated/GitDiffToRemoteResponse.d.ts +6 -0
  91. package/dist/codex/generated/GitDiffToRemoteResponse.d.ts.map +1 -0
  92. package/dist/codex/generated/GitSha.d.ts +2 -0
  93. package/dist/codex/generated/GitSha.d.ts.map +1 -0
  94. package/dist/codex/generated/ImageDetail.d.ts +2 -0
  95. package/dist/codex/generated/ImageDetail.d.ts.map +1 -0
  96. package/dist/codex/generated/ImageGenerationFailure.d.ts +6 -0
  97. package/dist/codex/generated/ImageGenerationFailure.d.ts.map +1 -0
  98. package/dist/codex/generated/ImageGenerationItem.d.ts +12 -0
  99. package/dist/codex/generated/ImageGenerationItem.d.ts.map +1 -0
  100. package/dist/codex/generated/InitializeCapabilities.d.ts +32 -0
  101. package/dist/codex/generated/InitializeCapabilities.d.ts.map +1 -0
  102. package/dist/codex/generated/InitializeParams.d.ts +7 -0
  103. package/dist/codex/generated/InitializeParams.d.ts.map +1 -0
  104. package/dist/codex/generated/InitializeResponse.d.ts +19 -0
  105. package/dist/codex/generated/InitializeResponse.d.ts.map +1 -0
  106. package/dist/codex/generated/InputModality.d.ts +5 -0
  107. package/dist/codex/generated/InputModality.d.ts.map +1 -0
  108. package/dist/codex/generated/InternalChatMessageMetadataPassthrough.d.ts +10 -0
  109. package/dist/codex/generated/InternalChatMessageMetadataPassthrough.d.ts.map +1 -0
  110. package/dist/codex/generated/InternalSessionSource.d.ts +2 -0
  111. package/dist/codex/generated/InternalSessionSource.d.ts.map +1 -0
  112. package/dist/codex/generated/LegacyAppPathString.d.ts +24 -0
  113. package/dist/codex/generated/LegacyAppPathString.d.ts.map +1 -0
  114. package/dist/codex/generated/LocalShellAction.d.ts +5 -0
  115. package/dist/codex/generated/LocalShellAction.d.ts.map +1 -0
  116. package/dist/codex/generated/LocalShellExecAction.d.ts +10 -0
  117. package/dist/codex/generated/LocalShellExecAction.d.ts.map +1 -0
  118. package/dist/codex/generated/LocalShellStatus.d.ts +2 -0
  119. package/dist/codex/generated/LocalShellStatus.d.ts.map +1 -0
  120. package/dist/codex/generated/McpServerInfo.d.ts +13 -0
  121. package/dist/codex/generated/McpServerInfo.d.ts.map +1 -0
  122. package/dist/codex/generated/MessagePhase.d.ts +8 -0
  123. package/dist/codex/generated/MessagePhase.d.ts.map +1 -0
  124. package/dist/codex/generated/ModeKind.d.ts +5 -0
  125. package/dist/codex/generated/ModeKind.d.ts.map +1 -0
  126. package/dist/codex/generated/MultiAgentMode.d.ts +8 -0
  127. package/dist/codex/generated/MultiAgentMode.d.ts.map +1 -0
  128. package/dist/codex/generated/NetworkPolicyAmendment.d.ts +6 -0
  129. package/dist/codex/generated/NetworkPolicyAmendment.d.ts.map +1 -0
  130. package/dist/codex/generated/NetworkPolicyRuleAction.d.ts +2 -0
  131. package/dist/codex/generated/NetworkPolicyRuleAction.d.ts.map +1 -0
  132. package/dist/codex/generated/ParsedCommand.d.ts +25 -0
  133. package/dist/codex/generated/ParsedCommand.d.ts.map +1 -0
  134. package/dist/codex/generated/PathUri.d.ts +29 -0
  135. package/dist/codex/generated/PathUri.d.ts.map +1 -0
  136. package/dist/codex/generated/Personality.d.ts +2 -0
  137. package/dist/codex/generated/Personality.d.ts.map +1 -0
  138. package/dist/codex/generated/PlanType.d.ts +2 -0
  139. package/dist/codex/generated/PlanType.d.ts.map +1 -0
  140. package/dist/codex/generated/RealtimeConversationVersion.d.ts +2 -0
  141. package/dist/codex/generated/RealtimeConversationVersion.d.ts.map +1 -0
  142. package/dist/codex/generated/RealtimeOutputModality.d.ts +2 -0
  143. package/dist/codex/generated/RealtimeOutputModality.d.ts.map +1 -0
  144. package/dist/codex/generated/RealtimeVoice.d.ts +2 -0
  145. package/dist/codex/generated/RealtimeVoice.d.ts.map +1 -0
  146. package/dist/codex/generated/RealtimeVoicesList.d.ts +8 -0
  147. package/dist/codex/generated/RealtimeVoicesList.d.ts.map +1 -0
  148. package/dist/codex/generated/ReasoningEffort.d.ts +5 -0
  149. package/dist/codex/generated/ReasoningEffort.d.ts.map +1 -0
  150. package/dist/codex/generated/ReasoningItemContent.d.ts +8 -0
  151. package/dist/codex/generated/ReasoningItemContent.d.ts.map +1 -0
  152. package/dist/codex/generated/ReasoningItemReasoningSummary.d.ts +5 -0
  153. package/dist/codex/generated/ReasoningItemReasoningSummary.d.ts.map +1 -0
  154. package/dist/codex/generated/ReasoningSummary.d.ts +7 -0
  155. package/dist/codex/generated/ReasoningSummary.d.ts.map +1 -0
  156. package/dist/codex/generated/RequestId.d.ts +2 -0
  157. package/dist/codex/generated/RequestId.d.ts.map +1 -0
  158. package/dist/codex/generated/Resource.d.ts +16 -0
  159. package/dist/codex/generated/Resource.d.ts.map +1 -0
  160. package/dist/codex/generated/ResourceContent.d.ts +22 -0
  161. package/dist/codex/generated/ResourceContent.d.ts.map +1 -0
  162. package/dist/codex/generated/ResourceTemplate.d.ts +13 -0
  163. package/dist/codex/generated/ResourceTemplate.d.ts.map +1 -0
  164. package/dist/codex/generated/ResponseItem.d.ts +127 -0
  165. package/dist/codex/generated/ResponseItem.d.ts.map +1 -0
  166. package/dist/codex/generated/ResponseItemId.d.ts +6 -0
  167. package/dist/codex/generated/ResponseItemId.d.ts.map +1 -0
  168. package/dist/codex/generated/ReviewDecision.d.ts +19 -0
  169. package/dist/codex/generated/ReviewDecision.d.ts.map +1 -0
  170. package/dist/codex/generated/ServerNotification.d.ts +335 -0
  171. package/dist/codex/generated/ServerNotification.d.ts.map +1 -0
  172. package/dist/codex/generated/ServerNotificationEnvelope.d.ts +346 -0
  173. package/dist/codex/generated/ServerNotificationEnvelope.d.ts.map +1 -0
  174. package/dist/codex/generated/ServerRequest.d.ts +61 -0
  175. package/dist/codex/generated/ServerRequest.d.ts.map +1 -0
  176. package/dist/codex/generated/SessionSource.d.ts +10 -0
  177. package/dist/codex/generated/SessionSource.d.ts.map +1 -0
  178. package/dist/codex/generated/Settings.d.ts +10 -0
  179. package/dist/codex/generated/Settings.d.ts.map +1 -0
  180. package/dist/codex/generated/SleepItem.d.ts +8 -0
  181. package/dist/codex/generated/SleepItem.d.ts.map +1 -0
  182. package/dist/codex/generated/SubAgentSource.d.ts +14 -0
  183. package/dist/codex/generated/SubAgentSource.d.ts.map +1 -0
  184. package/dist/codex/generated/ThreadId.d.ts +7 -0
  185. package/dist/codex/generated/ThreadId.d.ts.map +1 -0
  186. package/dist/codex/generated/ThreadMemoryMode.d.ts +2 -0
  187. package/dist/codex/generated/ThreadMemoryMode.d.ts.map +1 -0
  188. package/dist/codex/generated/Tool.d.ts +15 -0
  189. package/dist/codex/generated/Tool.d.ts.map +1 -0
  190. package/dist/codex/generated/Verbosity.d.ts +6 -0
  191. package/dist/codex/generated/Verbosity.d.ts.map +1 -0
  192. package/dist/codex/generated/WebSearchAction.d.ts +15 -0
  193. package/dist/codex/generated/WebSearchAction.d.ts.map +1 -0
  194. package/dist/codex/generated/WebSearchContextSize.d.ts +2 -0
  195. package/dist/codex/generated/WebSearchContextSize.d.ts.map +1 -0
  196. package/dist/codex/generated/WebSearchItem.d.ts +15 -0
  197. package/dist/codex/generated/WebSearchItem.d.ts.map +1 -0
  198. package/dist/codex/generated/WebSearchLocation.d.ts +7 -0
  199. package/dist/codex/generated/WebSearchLocation.d.ts.map +1 -0
  200. package/dist/codex/generated/WebSearchMode.d.ts +2 -0
  201. package/dist/codex/generated/WebSearchMode.d.ts.map +1 -0
  202. package/dist/codex/generated/WebSearchToolConfig.d.ts +8 -0
  203. package/dist/codex/generated/WebSearchToolConfig.d.ts.map +1 -0
  204. package/dist/codex/generated/index.d.ts +100 -0
  205. package/dist/codex/generated/index.d.ts.map +1 -0
  206. package/dist/codex/generated/serde_json/JsonValue.d.ts +4 -0
  207. package/dist/codex/generated/serde_json/JsonValue.d.ts.map +1 -0
  208. package/dist/codex/generated/v2/Account.d.ts +12 -0
  209. package/dist/codex/generated/v2/Account.d.ts.map +1 -0
  210. package/dist/codex/generated/v2/AccountLoginCompletedNotification.d.ts +8 -0
  211. package/dist/codex/generated/v2/AccountLoginCompletedNotification.d.ts.map +1 -0
  212. package/dist/codex/generated/v2/AccountRateLimitsUpdatedNotification.d.ts +12 -0
  213. package/dist/codex/generated/v2/AccountRateLimitsUpdatedNotification.d.ts.map +1 -0
  214. package/dist/codex/generated/v2/AccountTokenUsageDailyBucket.d.ts +5 -0
  215. package/dist/codex/generated/v2/AccountTokenUsageDailyBucket.d.ts.map +1 -0
  216. package/dist/codex/generated/v2/AccountTokenUsageSummary.d.ts +8 -0
  217. package/dist/codex/generated/v2/AccountTokenUsageSummary.d.ts.map +1 -0
  218. package/dist/codex/generated/v2/AccountUpdatedNotification.d.ts +7 -0
  219. package/dist/codex/generated/v2/AccountUpdatedNotification.d.ts.map +1 -0
  220. package/dist/codex/generated/v2/ActivePermissionProfile.d.ts +13 -0
  221. package/dist/codex/generated/v2/ActivePermissionProfile.d.ts.map +1 -0
  222. package/dist/codex/generated/v2/AddCreditsNudgeCreditType.d.ts +2 -0
  223. package/dist/codex/generated/v2/AddCreditsNudgeCreditType.d.ts.map +1 -0
  224. package/dist/codex/generated/v2/AddCreditsNudgeEmailStatus.d.ts +2 -0
  225. package/dist/codex/generated/v2/AddCreditsNudgeEmailStatus.d.ts.map +1 -0
  226. package/dist/codex/generated/v2/AdditionalContextEntry.d.ts +6 -0
  227. package/dist/codex/generated/v2/AdditionalContextEntry.d.ts.map +1 -0
  228. package/dist/codex/generated/v2/AdditionalContextKind.d.ts +2 -0
  229. package/dist/codex/generated/v2/AdditionalContextKind.d.ts.map +1 -0
  230. package/dist/codex/generated/v2/AdditionalFileSystemPermissions.d.ts +15 -0
  231. package/dist/codex/generated/v2/AdditionalFileSystemPermissions.d.ts.map +1 -0
  232. package/dist/codex/generated/v2/AdditionalNetworkPermissions.d.ts +4 -0
  233. package/dist/codex/generated/v2/AdditionalNetworkPermissions.d.ts.map +1 -0
  234. package/dist/codex/generated/v2/AdditionalPermissionProfile.d.ts +10 -0
  235. package/dist/codex/generated/v2/AdditionalPermissionProfile.d.ts.map +1 -0
  236. package/dist/codex/generated/v2/AgentMessageDelivery.d.ts +2 -0
  237. package/dist/codex/generated/v2/AgentMessageDelivery.d.ts.map +1 -0
  238. package/dist/codex/generated/v2/AgentMessageDeltaNotification.d.ts +7 -0
  239. package/dist/codex/generated/v2/AgentMessageDeltaNotification.d.ts.map +1 -0
  240. package/dist/codex/generated/v2/AllowDenyRequirement.d.ts +2 -0
  241. package/dist/codex/generated/v2/AllowDenyRequirement.d.ts.map +1 -0
  242. package/dist/codex/generated/v2/AnalyticsConfig.d.ts +9 -0
  243. package/dist/codex/generated/v2/AnalyticsConfig.d.ts.map +1 -0
  244. package/dist/codex/generated/v2/AppBranding.d.ts +12 -0
  245. package/dist/codex/generated/v2/AppBranding.d.ts.map +1 -0
  246. package/dist/codex/generated/v2/AppInfo.d.ts +37 -0
  247. package/dist/codex/generated/v2/AppInfo.d.ts.map +1 -0
  248. package/dist/codex/generated/v2/AppLinksConfig.d.ts +12 -0
  249. package/dist/codex/generated/v2/AppLinksConfig.d.ts.map +1 -0
  250. package/dist/codex/generated/v2/AppListUpdatedNotification.d.ts +8 -0
  251. package/dist/codex/generated/v2/AppListUpdatedNotification.d.ts.map +1 -0
  252. package/dist/codex/generated/v2/AppMetadata.d.ts +16 -0
  253. package/dist/codex/generated/v2/AppMetadata.d.ts.map +1 -0
  254. package/dist/codex/generated/v2/AppReview.d.ts +4 -0
  255. package/dist/codex/generated/v2/AppReview.d.ts.map +1 -0
  256. package/dist/codex/generated/v2/AppScreenshot.d.ts +6 -0
  257. package/dist/codex/generated/v2/AppScreenshot.d.ts.map +1 -0
  258. package/dist/codex/generated/v2/AppSummary.d.ts +11 -0
  259. package/dist/codex/generated/v2/AppSummary.d.ts.map +1 -0
  260. package/dist/codex/generated/v2/AppTemplateSummary.d.ts +13 -0
  261. package/dist/codex/generated/v2/AppTemplateSummary.d.ts.map +1 -0
  262. package/dist/codex/generated/v2/AppTemplateUnavailableReason.d.ts +2 -0
  263. package/dist/codex/generated/v2/AppTemplateUnavailableReason.d.ts.map +1 -0
  264. package/dist/codex/generated/v2/AppToolApproval.d.ts +2 -0
  265. package/dist/codex/generated/v2/AppToolApproval.d.ts.map +1 -0
  266. package/dist/codex/generated/v2/AppToolSummary.d.ts +12 -0
  267. package/dist/codex/generated/v2/AppToolSummary.d.ts.map +1 -0
  268. package/dist/codex/generated/v2/AppToolsConfig.d.ts +8 -0
  269. package/dist/codex/generated/v2/AppToolsConfig.d.ts.map +1 -0
  270. package/dist/codex/generated/v2/ApplicationNetworkRequirements.d.ts +11 -0
  271. package/dist/codex/generated/v2/ApplicationNetworkRequirements.d.ts.map +1 -0
  272. package/dist/codex/generated/v2/ApplicationRequirements.d.ts +5 -0
  273. package/dist/codex/generated/v2/ApplicationRequirements.d.ts.map +1 -0
  274. package/dist/codex/generated/v2/ApprovalsReviewer.d.ts +9 -0
  275. package/dist/codex/generated/v2/ApprovalsReviewer.d.ts.map +1 -0
  276. package/dist/codex/generated/v2/AppsConfig.d.ts +23 -0
  277. package/dist/codex/generated/v2/AppsConfig.d.ts.map +1 -0
  278. package/dist/codex/generated/v2/AppsDefaultConfig.d.ts +10 -0
  279. package/dist/codex/generated/v2/AppsDefaultConfig.d.ts.map +1 -0
  280. package/dist/codex/generated/v2/AppsInstalledParams.d.ts +15 -0
  281. package/dist/codex/generated/v2/AppsInstalledParams.d.ts.map +1 -0
  282. package/dist/codex/generated/v2/AppsInstalledResponse.d.ts +8 -0
  283. package/dist/codex/generated/v2/AppsInstalledResponse.d.ts.map +1 -0
  284. package/dist/codex/generated/v2/AppsListParams.d.ts +22 -0
  285. package/dist/codex/generated/v2/AppsListParams.d.ts.map +1 -0
  286. package/dist/codex/generated/v2/AppsListResponse.d.ts +13 -0
  287. package/dist/codex/generated/v2/AppsListResponse.d.ts.map +1 -0
  288. package/dist/codex/generated/v2/AppsReadParams.d.ts +19 -0
  289. package/dist/codex/generated/v2/AppsReadParams.d.ts.map +1 -0
  290. package/dist/codex/generated/v2/AppsReadResponse.d.ts +9 -0
  291. package/dist/codex/generated/v2/AppsReadResponse.d.ts.map +1 -0
  292. package/dist/codex/generated/v2/AskForApproval.d.ts +10 -0
  293. package/dist/codex/generated/v2/AskForApproval.d.ts.map +1 -0
  294. package/dist/codex/generated/v2/AsyncUserInputQuestion.d.ts +5 -0
  295. package/dist/codex/generated/v2/AsyncUserInputQuestion.d.ts.map +1 -0
  296. package/dist/codex/generated/v2/AttestationGenerateParams.d.ts +2 -0
  297. package/dist/codex/generated/v2/AttestationGenerateParams.d.ts.map +1 -0
  298. package/dist/codex/generated/v2/AttestationGenerateResponse.d.ts +7 -0
  299. package/dist/codex/generated/v2/AttestationGenerateResponse.d.ts.map +1 -0
  300. package/dist/codex/generated/v2/AuthRecoveryNotification.d.ts +7 -0
  301. package/dist/codex/generated/v2/AuthRecoveryNotification.d.ts.map +1 -0
  302. package/dist/codex/generated/v2/AutoReviewDecisionSource.d.ts +5 -0
  303. package/dist/codex/generated/v2/AutoReviewDecisionSource.d.ts.map +1 -0
  304. package/dist/codex/generated/v2/AutoReviewRequirements.d.ts +5 -0
  305. package/dist/codex/generated/v2/AutoReviewRequirements.d.ts.map +1 -0
  306. package/dist/codex/generated/v2/AwsCredentialType.d.ts +2 -0
  307. package/dist/codex/generated/v2/AwsCredentialType.d.ts.map +1 -0
  308. package/dist/codex/generated/v2/BedrockAwsProfile.d.ts +5 -0
  309. package/dist/codex/generated/v2/BedrockAwsProfile.d.ts.map +1 -0
  310. package/dist/codex/generated/v2/BedrockDiscoverParams.d.ts +2 -0
  311. package/dist/codex/generated/v2/BedrockDiscoverParams.d.ts.map +1 -0
  312. package/dist/codex/generated/v2/BedrockDiscoverResponse.d.ts +7 -0
  313. package/dist/codex/generated/v2/BedrockDiscoverResponse.d.ts.map +1 -0
  314. package/dist/codex/generated/v2/BedrockEnvironmentCredential.d.ts +6 -0
  315. package/dist/codex/generated/v2/BedrockEnvironmentCredential.d.ts.map +1 -0
  316. package/dist/codex/generated/v2/BedrockSetupParams.d.ts +9 -0
  317. package/dist/codex/generated/v2/BedrockSetupParams.d.ts.map +1 -0
  318. package/dist/codex/generated/v2/BedrockSetupResponse.d.ts +2 -0
  319. package/dist/codex/generated/v2/BedrockSetupResponse.d.ts.map +1 -0
  320. package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.d.ts +2 -0
  321. package/dist/codex/generated/v2/BrowserUseAccessApprovalLifetime.d.ts.map +1 -0
  322. package/dist/codex/generated/v2/BrowserUseConfig.d.ts +9 -0
  323. package/dist/codex/generated/v2/BrowserUseConfig.d.ts.map +1 -0
  324. package/dist/codex/generated/v2/BrowserUseOriginPolicy.d.ts +12 -0
  325. package/dist/codex/generated/v2/BrowserUseOriginPolicy.d.ts.map +1 -0
  326. package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.d.ts +8 -0
  327. package/dist/codex/generated/v2/BrowserUseOriginPolicyConfig.d.ts.map +1 -0
  328. package/dist/codex/generated/v2/BrowserUseRequirements.d.ts +12 -0
  329. package/dist/codex/generated/v2/BrowserUseRequirements.d.ts.map +1 -0
  330. package/dist/codex/generated/v2/ByteRange.d.ts +5 -0
  331. package/dist/codex/generated/v2/ByteRange.d.ts.map +1 -0
  332. package/dist/codex/generated/v2/CancelLoginAccountParams.d.ts +4 -0
  333. package/dist/codex/generated/v2/CancelLoginAccountParams.d.ts.map +1 -0
  334. package/dist/codex/generated/v2/CancelLoginAccountResponse.d.ts +5 -0
  335. package/dist/codex/generated/v2/CancelLoginAccountResponse.d.ts.map +1 -0
  336. package/dist/codex/generated/v2/CancelLoginAccountStatus.d.ts +2 -0
  337. package/dist/codex/generated/v2/CancelLoginAccountStatus.d.ts.map +1 -0
  338. package/dist/codex/generated/v2/CapabilityRootLocation.d.ts +12 -0
  339. package/dist/codex/generated/v2/CapabilityRootLocation.d.ts.map +1 -0
  340. package/dist/codex/generated/v2/ChatgptAuthTokensRefreshParams.d.ts +15 -0
  341. package/dist/codex/generated/v2/ChatgptAuthTokensRefreshParams.d.ts.map +1 -0
  342. package/dist/codex/generated/v2/ChatgptAuthTokensRefreshReason.d.ts +2 -0
  343. package/dist/codex/generated/v2/ChatgptAuthTokensRefreshReason.d.ts.map +1 -0
  344. package/dist/codex/generated/v2/ChatgptAuthTokensRefreshResponse.d.ts +6 -0
  345. package/dist/codex/generated/v2/ChatgptAuthTokensRefreshResponse.d.ts.map +1 -0
  346. package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.d.ts +2 -0
  347. package/dist/codex/generated/v2/CliAuthCredentialsStoreMode.d.ts.map +1 -0
  348. package/dist/codex/generated/v2/CodexErrorInfo.d.ts +29 -0
  349. package/dist/codex/generated/v2/CodexErrorInfo.d.ts.map +1 -0
  350. package/dist/codex/generated/v2/CollabAgentState.d.ts +6 -0
  351. package/dist/codex/generated/v2/CollabAgentState.d.ts.map +1 -0
  352. package/dist/codex/generated/v2/CollabAgentStatus.d.ts +2 -0
  353. package/dist/codex/generated/v2/CollabAgentStatus.d.ts.map +1 -0
  354. package/dist/codex/generated/v2/CollabAgentTool.d.ts +2 -0
  355. package/dist/codex/generated/v2/CollabAgentTool.d.ts.map +1 -0
  356. package/dist/codex/generated/v2/CollabAgentToolCallStatus.d.ts +2 -0
  357. package/dist/codex/generated/v2/CollabAgentToolCallStatus.d.ts.map +1 -0
  358. package/dist/codex/generated/v2/CollaborationModeListParams.d.ts +5 -0
  359. package/dist/codex/generated/v2/CollaborationModeListParams.d.ts.map +1 -0
  360. package/dist/codex/generated/v2/CollaborationModeListResponse.d.ts +8 -0
  361. package/dist/codex/generated/v2/CollaborationModeListResponse.d.ts.map +1 -0
  362. package/dist/codex/generated/v2/CollaborationModeMask.d.ts +12 -0
  363. package/dist/codex/generated/v2/CollaborationModeMask.d.ts.map +1 -0
  364. package/dist/codex/generated/v2/CommandAction.d.ts +20 -0
  365. package/dist/codex/generated/v2/CommandAction.d.ts.map +1 -0
  366. package/dist/codex/generated/v2/CommandExecOutputDeltaNotification.d.ts +28 -0
  367. package/dist/codex/generated/v2/CommandExecOutputDeltaNotification.d.ts.map +1 -0
  368. package/dist/codex/generated/v2/CommandExecOutputStream.d.ts +5 -0
  369. package/dist/codex/generated/v2/CommandExecOutputStream.d.ts.map +1 -0
  370. package/dist/codex/generated/v2/CommandExecParams.d.ts +105 -0
  371. package/dist/codex/generated/v2/CommandExecParams.d.ts.map +1 -0
  372. package/dist/codex/generated/v2/CommandExecResizeParams.d.ts +16 -0
  373. package/dist/codex/generated/v2/CommandExecResizeParams.d.ts.map +1 -0
  374. package/dist/codex/generated/v2/CommandExecResizeResponse.d.ts +5 -0
  375. package/dist/codex/generated/v2/CommandExecResizeResponse.d.ts.map +1 -0
  376. package/dist/codex/generated/v2/CommandExecResponse.d.ts +22 -0
  377. package/dist/codex/generated/v2/CommandExecResponse.d.ts.map +1 -0
  378. package/dist/codex/generated/v2/CommandExecTerminalSize.d.ts +14 -0
  379. package/dist/codex/generated/v2/CommandExecTerminalSize.d.ts.map +1 -0
  380. package/dist/codex/generated/v2/CommandExecTerminateParams.d.ts +11 -0
  381. package/dist/codex/generated/v2/CommandExecTerminateParams.d.ts.map +1 -0
  382. package/dist/codex/generated/v2/CommandExecTerminateResponse.d.ts +5 -0
  383. package/dist/codex/generated/v2/CommandExecTerminateResponse.d.ts.map +1 -0
  384. package/dist/codex/generated/v2/CommandExecWriteParams.d.ts +20 -0
  385. package/dist/codex/generated/v2/CommandExecWriteParams.d.ts.map +1 -0
  386. package/dist/codex/generated/v2/CommandExecWriteResponse.d.ts +5 -0
  387. package/dist/codex/generated/v2/CommandExecWriteResponse.d.ts.map +1 -0
  388. package/dist/codex/generated/v2/CommandExecutionApprovalDecision.d.ts +12 -0
  389. package/dist/codex/generated/v2/CommandExecutionApprovalDecision.d.ts.map +1 -0
  390. package/dist/codex/generated/v2/CommandExecutionApprovalKind.d.ts +5 -0
  391. package/dist/codex/generated/v2/CommandExecutionApprovalKind.d.ts.map +1 -0
  392. package/dist/codex/generated/v2/CommandExecutionOutputDeltaNotification.d.ts +7 -0
  393. package/dist/codex/generated/v2/CommandExecutionOutputDeltaNotification.d.ts.map +1 -0
  394. package/dist/codex/generated/v2/CommandExecutionRequestApprovalParams.d.ts +73 -0
  395. package/dist/codex/generated/v2/CommandExecutionRequestApprovalParams.d.ts.map +1 -0
  396. package/dist/codex/generated/v2/CommandExecutionRequestApprovalResponse.d.ts +5 -0
  397. package/dist/codex/generated/v2/CommandExecutionRequestApprovalResponse.d.ts.map +1 -0
  398. package/dist/codex/generated/v2/CommandExecutionSource.d.ts +2 -0
  399. package/dist/codex/generated/v2/CommandExecutionSource.d.ts.map +1 -0
  400. package/dist/codex/generated/v2/CommandExecutionStatus.d.ts +2 -0
  401. package/dist/codex/generated/v2/CommandExecutionStatus.d.ts.map +1 -0
  402. package/dist/codex/generated/v2/CommandMigration.d.ts +4 -0
  403. package/dist/codex/generated/v2/CommandMigration.d.ts.map +1 -0
  404. package/dist/codex/generated/v2/ComputerUseConfig.d.ts +9 -0
  405. package/dist/codex/generated/v2/ComputerUseConfig.d.ts.map +1 -0
  406. package/dist/codex/generated/v2/ComputerUseMacosConfig.d.ts +7 -0
  407. package/dist/codex/generated/v2/ComputerUseMacosConfig.d.ts.map +1 -0
  408. package/dist/codex/generated/v2/ComputerUseMacosRequirements.d.ts +7 -0
  409. package/dist/codex/generated/v2/ComputerUseMacosRequirements.d.ts.map +1 -0
  410. package/dist/codex/generated/v2/ComputerUseRequirements.d.ts +11 -0
  411. package/dist/codex/generated/v2/ComputerUseRequirements.d.ts.map +1 -0
  412. package/dist/codex/generated/v2/ComputerUseWindowsConfig.d.ts +9 -0
  413. package/dist/codex/generated/v2/ComputerUseWindowsConfig.d.ts.map +1 -0
  414. package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.d.ts +8 -0
  415. package/dist/codex/generated/v2/ComputerUseWindowsExeConfig.d.ts.map +1 -0
  416. package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.d.ts +8 -0
  417. package/dist/codex/generated/v2/ComputerUseWindowsExeRequirement.d.ts.map +1 -0
  418. package/dist/codex/generated/v2/ComputerUseWindowsRequirements.d.ts +9 -0
  419. package/dist/codex/generated/v2/ComputerUseWindowsRequirements.d.ts.map +1 -0
  420. package/dist/codex/generated/v2/Config.d.ts +56 -0
  421. package/dist/codex/generated/v2/Config.d.ts.map +1 -0
  422. package/dist/codex/generated/v2/ConfigBatchWriteParams.d.ts +16 -0
  423. package/dist/codex/generated/v2/ConfigBatchWriteParams.d.ts.map +1 -0
  424. package/dist/codex/generated/v2/ConfigEdit.d.ts +8 -0
  425. package/dist/codex/generated/v2/ConfigEdit.d.ts.map +1 -0
  426. package/dist/codex/generated/v2/ConfigLayer.d.ts +9 -0
  427. package/dist/codex/generated/v2/ConfigLayer.d.ts.map +1 -0
  428. package/dist/codex/generated/v2/ConfigLayerMetadata.d.ts +6 -0
  429. package/dist/codex/generated/v2/ConfigLayerMetadata.d.ts.map +1 -0
  430. package/dist/codex/generated/v2/ConfigLayerSource.d.ts +54 -0
  431. package/dist/codex/generated/v2/ConfigLayerSource.d.ts.map +1 -0
  432. package/dist/codex/generated/v2/ConfigReadParams.d.ts +10 -0
  433. package/dist/codex/generated/v2/ConfigReadParams.d.ts.map +1 -0
  434. package/dist/codex/generated/v2/ConfigReadResponse.d.ts +11 -0
  435. package/dist/codex/generated/v2/ConfigReadResponse.d.ts.map +1 -0
  436. package/dist/codex/generated/v2/ConfigRequirements.d.ts +55 -0
  437. package/dist/codex/generated/v2/ConfigRequirements.d.ts.map +1 -0
  438. package/dist/codex/generated/v2/ConfigRequirementsReadResponse.d.ts +8 -0
  439. package/dist/codex/generated/v2/ConfigRequirementsReadResponse.d.ts.map +1 -0
  440. package/dist/codex/generated/v2/ConfigValueWriteParams.d.ts +13 -0
  441. package/dist/codex/generated/v2/ConfigValueWriteParams.d.ts.map +1 -0
  442. package/dist/codex/generated/v2/ConfigWarningNotification.d.ts +20 -0
  443. package/dist/codex/generated/v2/ConfigWarningNotification.d.ts.map +1 -0
  444. package/dist/codex/generated/v2/ConfigWriteResponse.d.ts +13 -0
  445. package/dist/codex/generated/v2/ConfigWriteResponse.d.ts.map +1 -0
  446. package/dist/codex/generated/v2/ConfiguredHookHandler.d.ts +30 -0
  447. package/dist/codex/generated/v2/ConfiguredHookHandler.d.ts.map +1 -0
  448. package/dist/codex/generated/v2/ConfiguredHookMatcherGroup.d.ts +6 -0
  449. package/dist/codex/generated/v2/ConfiguredHookMatcherGroup.d.ts.map +1 -0
  450. package/dist/codex/generated/v2/ConnectorMetadata.d.ts +16 -0
  451. package/dist/codex/generated/v2/ConnectorMetadata.d.ts.map +1 -0
  452. package/dist/codex/generated/v2/ConsumeAccountRateLimitResetCreditOutcome.d.ts +2 -0
  453. package/dist/codex/generated/v2/ConsumeAccountRateLimitResetCreditOutcome.d.ts.map +1 -0
  454. package/dist/codex/generated/v2/ConsumeAccountRateLimitResetCreditParams.d.ts +13 -0
  455. package/dist/codex/generated/v2/ConsumeAccountRateLimitResetCreditParams.d.ts.map +1 -0
  456. package/dist/codex/generated/v2/ConsumeAccountRateLimitResetCreditResponse.d.ts +5 -0
  457. package/dist/codex/generated/v2/ConsumeAccountRateLimitResetCreditResponse.d.ts.map +1 -0
  458. package/dist/codex/generated/v2/ContextCompactedNotification.d.ts +8 -0
  459. package/dist/codex/generated/v2/ContextCompactedNotification.d.ts.map +1 -0
  460. package/dist/codex/generated/v2/CreditsSnapshot.d.ts +6 -0
  461. package/dist/codex/generated/v2/CreditsSnapshot.d.ts.map +1 -0
  462. package/dist/codex/generated/v2/CurrentTimeReadParams.d.ts +4 -0
  463. package/dist/codex/generated/v2/CurrentTimeReadParams.d.ts.map +1 -0
  464. package/dist/codex/generated/v2/CurrentTimeReadResponse.d.ts +7 -0
  465. package/dist/codex/generated/v2/CurrentTimeReadResponse.d.ts.map +1 -0
  466. package/dist/codex/generated/v2/CyberAccessProgram.d.ts +6 -0
  467. package/dist/codex/generated/v2/CyberAccessProgram.d.ts.map +1 -0
  468. package/dist/codex/generated/v2/DeprecationNoticeNotification.d.ts +11 -0
  469. package/dist/codex/generated/v2/DeprecationNoticeNotification.d.ts.map +1 -0
  470. package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.d.ts +2 -0
  471. package/dist/codex/generated/v2/DesktopOnboardingEntrypoint.d.ts.map +1 -0
  472. package/dist/codex/generated/v2/DynamicToolCallOutputContentItem.d.ts +11 -0
  473. package/dist/codex/generated/v2/DynamicToolCallOutputContentItem.d.ts.map +1 -0
  474. package/dist/codex/generated/v2/DynamicToolCallParams.d.ts +10 -0
  475. package/dist/codex/generated/v2/DynamicToolCallParams.d.ts.map +1 -0
  476. package/dist/codex/generated/v2/DynamicToolCallResponse.d.ts +6 -0
  477. package/dist/codex/generated/v2/DynamicToolCallResponse.d.ts.map +1 -0
  478. package/dist/codex/generated/v2/DynamicToolCallStatus.d.ts +2 -0
  479. package/dist/codex/generated/v2/DynamicToolCallStatus.d.ts.map +1 -0
  480. package/dist/codex/generated/v2/DynamicToolFunctionSpec.d.ts +8 -0
  481. package/dist/codex/generated/v2/DynamicToolFunctionSpec.d.ts.map +1 -0
  482. package/dist/codex/generated/v2/DynamicToolNamespaceSpec.d.ts +7 -0
  483. package/dist/codex/generated/v2/DynamicToolNamespaceSpec.d.ts.map +1 -0
  484. package/dist/codex/generated/v2/DynamicToolNamespaceTool.d.ts +5 -0
  485. package/dist/codex/generated/v2/DynamicToolNamespaceTool.d.ts.map +1 -0
  486. package/dist/codex/generated/v2/DynamicToolSpec.d.ts +8 -0
  487. package/dist/codex/generated/v2/DynamicToolSpec.d.ts.map +1 -0
  488. package/dist/codex/generated/v2/EnvironmentAddParams.d.ts +9 -0
  489. package/dist/codex/generated/v2/EnvironmentAddParams.d.ts.map +1 -0
  490. package/dist/codex/generated/v2/EnvironmentAddResponse.d.ts +2 -0
  491. package/dist/codex/generated/v2/EnvironmentAddResponse.d.ts.map +1 -0
  492. package/dist/codex/generated/v2/EnvironmentConnectionNotification.d.ts +5 -0
  493. package/dist/codex/generated/v2/EnvironmentConnectionNotification.d.ts.map +1 -0
  494. package/dist/codex/generated/v2/EnvironmentInfoParams.d.ts +4 -0
  495. package/dist/codex/generated/v2/EnvironmentInfoParams.d.ts.map +1 -0
  496. package/dist/codex/generated/v2/EnvironmentInfoResponse.d.ts +10 -0
  497. package/dist/codex/generated/v2/EnvironmentInfoResponse.d.ts.map +1 -0
  498. package/dist/codex/generated/v2/EnvironmentShellInfo.d.ts +11 -0
  499. package/dist/codex/generated/v2/EnvironmentShellInfo.d.ts.map +1 -0
  500. package/dist/codex/generated/v2/EnvironmentStatusKind.d.ts +8 -0
  501. package/dist/codex/generated/v2/EnvironmentStatusKind.d.ts.map +1 -0
  502. package/dist/codex/generated/v2/EnvironmentStatusParams.d.ts +10 -0
  503. package/dist/codex/generated/v2/EnvironmentStatusParams.d.ts.map +1 -0
  504. package/dist/codex/generated/v2/EnvironmentStatusResponse.d.ts +15 -0
  505. package/dist/codex/generated/v2/EnvironmentStatusResponse.d.ts.map +1 -0
  506. package/dist/codex/generated/v2/ErrorNotification.d.ts +8 -0
  507. package/dist/codex/generated/v2/ErrorNotification.d.ts.map +1 -0
  508. package/dist/codex/generated/v2/ExecPolicyAmendment.d.ts +2 -0
  509. package/dist/codex/generated/v2/ExecPolicyAmendment.d.ts.map +1 -0
  510. package/dist/codex/generated/v2/ExperimentalFeature.d.ts +35 -0
  511. package/dist/codex/generated/v2/ExperimentalFeature.d.ts.map +1 -0
  512. package/dist/codex/generated/v2/ExperimentalFeatureEnablementSetParams.d.ts +12 -0
  513. package/dist/codex/generated/v2/ExperimentalFeatureEnablementSetParams.d.ts.map +1 -0
  514. package/dist/codex/generated/v2/ExperimentalFeatureEnablementSetResponse.d.ts +9 -0
  515. package/dist/codex/generated/v2/ExperimentalFeatureEnablementSetResponse.d.ts.map +1 -0
  516. package/dist/codex/generated/v2/ExperimentalFeatureListParams.d.ts +17 -0
  517. package/dist/codex/generated/v2/ExperimentalFeatureListParams.d.ts.map +1 -0
  518. package/dist/codex/generated/v2/ExperimentalFeatureListResponse.d.ts +10 -0
  519. package/dist/codex/generated/v2/ExperimentalFeatureListResponse.d.ts.map +1 -0
  520. package/dist/codex/generated/v2/ExperimentalFeatureStage.d.ts +2 -0
  521. package/dist/codex/generated/v2/ExperimentalFeatureStage.d.ts.map +1 -0
  522. package/dist/codex/generated/v2/ExternalAgentConfigDetectParams.d.ts +28 -0
  523. package/dist/codex/generated/v2/ExternalAgentConfigDetectParams.d.ts.map +1 -0
  524. package/dist/codex/generated/v2/ExternalAgentConfigDetectResponse.d.ts +7 -0
  525. package/dist/codex/generated/v2/ExternalAgentConfigDetectResponse.d.ts.map +1 -0
  526. package/dist/codex/generated/v2/ExternalAgentConfigImportCompletedNotification.d.ts +6 -0
  527. package/dist/codex/generated/v2/ExternalAgentConfigImportCompletedNotification.d.ts.map +1 -0
  528. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoriesReadResponse.d.ts +7 -0
  529. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoriesReadResponse.d.ts.map +1 -0
  530. package/dist/codex/generated/v2/ExternalAgentConfigImportHistory.d.ts +10 -0
  531. package/dist/codex/generated/v2/ExternalAgentConfigImportHistory.d.ts.map +1 -0
  532. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.d.ts +12 -0
  533. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.d.ts.map +1 -0
  534. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordResponse.d.ts +4 -0
  535. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordResponse.d.ts.map +1 -0
  536. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.d.ts +12 -0
  537. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordSuccessParams.d.ts.map +1 -0
  538. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.d.ts +9 -0
  539. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordTypeResultParams.d.ts.map +1 -0
  540. package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeFailure.d.ts +11 -0
  541. package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeFailure.d.ts.map +1 -0
  542. package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeSuccess.d.ts +12 -0
  543. package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeSuccess.d.ts.map +1 -0
  544. package/dist/codex/generated/v2/ExternalAgentConfigImportParams.d.ts +19 -0
  545. package/dist/codex/generated/v2/ExternalAgentConfigImportParams.d.ts.map +1 -0
  546. package/dist/codex/generated/v2/ExternalAgentConfigImportProgressNotification.d.ts +6 -0
  547. package/dist/codex/generated/v2/ExternalAgentConfigImportProgressNotification.d.ts.map +1 -0
  548. package/dist/codex/generated/v2/ExternalAgentConfigImportResponse.d.ts +4 -0
  549. package/dist/codex/generated/v2/ExternalAgentConfigImportResponse.d.ts.map +1 -0
  550. package/dist/codex/generated/v2/ExternalAgentConfigImportTypeResult.d.ts +9 -0
  551. package/dist/codex/generated/v2/ExternalAgentConfigImportTypeResult.d.ts.map +1 -0
  552. package/dist/codex/generated/v2/ExternalAgentConfigMigrationItem.d.ts +12 -0
  553. package/dist/codex/generated/v2/ExternalAgentConfigMigrationItem.d.ts.map +1 -0
  554. package/dist/codex/generated/v2/ExternalAgentConfigMigrationItemType.d.ts +2 -0
  555. package/dist/codex/generated/v2/ExternalAgentConfigMigrationItemType.d.ts.map +1 -0
  556. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.d.ts +7 -0
  557. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorCandidate.d.ts.map +1 -0
  558. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.d.ts +2 -0
  559. package/dist/codex/generated/v2/ExternalAgentDetectedConnectorSource.d.ts.map +1 -0
  560. package/dist/codex/generated/v2/ExternalAgentImportedConnectorCandidate.d.ts +7 -0
  561. package/dist/codex/generated/v2/ExternalAgentImportedConnectorCandidate.d.ts.map +1 -0
  562. package/dist/codex/generated/v2/ExternalAgentImportedConnectorSource.d.ts +2 -0
  563. package/dist/codex/generated/v2/ExternalAgentImportedConnectorSource.d.ts.map +1 -0
  564. package/dist/codex/generated/v2/FeedbackRequirements.d.ts +4 -0
  565. package/dist/codex/generated/v2/FeedbackRequirements.d.ts.map +1 -0
  566. package/dist/codex/generated/v2/FeedbackUploadParams.d.ts +11 -0
  567. package/dist/codex/generated/v2/FeedbackUploadParams.d.ts.map +1 -0
  568. package/dist/codex/generated/v2/FeedbackUploadResponse.d.ts +4 -0
  569. package/dist/codex/generated/v2/FeedbackUploadResponse.d.ts.map +1 -0
  570. package/dist/codex/generated/v2/FileChangeApprovalDecision.d.ts +2 -0
  571. package/dist/codex/generated/v2/FileChangeApprovalDecision.d.ts.map +1 -0
  572. package/dist/codex/generated/v2/FileChangeOutputDeltaNotification.d.ts +12 -0
  573. package/dist/codex/generated/v2/FileChangeOutputDeltaNotification.d.ts.map +1 -0
  574. package/dist/codex/generated/v2/FileChangePatchUpdatedNotification.d.ts +8 -0
  575. package/dist/codex/generated/v2/FileChangePatchUpdatedNotification.d.ts.map +1 -0
  576. package/dist/codex/generated/v2/FileChangeRequestApprovalParams.d.ts +19 -0
  577. package/dist/codex/generated/v2/FileChangeRequestApprovalParams.d.ts.map +1 -0
  578. package/dist/codex/generated/v2/FileChangeRequestApprovalResponse.d.ts +5 -0
  579. package/dist/codex/generated/v2/FileChangeRequestApprovalResponse.d.ts.map +1 -0
  580. package/dist/codex/generated/v2/FileSystemAccessMode.d.ts +2 -0
  581. package/dist/codex/generated/v2/FileSystemAccessMode.d.ts.map +1 -0
  582. package/dist/codex/generated/v2/FileSystemPath.d.ts +13 -0
  583. package/dist/codex/generated/v2/FileSystemPath.d.ts.map +1 -0
  584. package/dist/codex/generated/v2/FileSystemSandboxEntry.d.ts +7 -0
  585. package/dist/codex/generated/v2/FileSystemSandboxEntry.d.ts.map +1 -0
  586. package/dist/codex/generated/v2/FileSystemSpecialPath.d.ts +18 -0
  587. package/dist/codex/generated/v2/FileSystemSpecialPath.d.ts.map +1 -0
  588. package/dist/codex/generated/v2/FileUpdateChange.d.ts +7 -0
  589. package/dist/codex/generated/v2/FileUpdateChange.d.ts.map +1 -0
  590. package/dist/codex/generated/v2/ForcedChatgptWorkspaceIds.d.ts +5 -0
  591. package/dist/codex/generated/v2/ForcedChatgptWorkspaceIds.d.ts.map +1 -0
  592. package/dist/codex/generated/v2/FsChangedNotification.d.ts +15 -0
  593. package/dist/codex/generated/v2/FsChangedNotification.d.ts.map +1 -0
  594. package/dist/codex/generated/v2/FsCopyParams.d.ts +19 -0
  595. package/dist/codex/generated/v2/FsCopyParams.d.ts.map +1 -0
  596. package/dist/codex/generated/v2/FsCopyResponse.d.ts +5 -0
  597. package/dist/codex/generated/v2/FsCopyResponse.d.ts.map +1 -0
  598. package/dist/codex/generated/v2/FsCreateDirectoryParams.d.ts +15 -0
  599. package/dist/codex/generated/v2/FsCreateDirectoryParams.d.ts.map +1 -0
  600. package/dist/codex/generated/v2/FsCreateDirectoryResponse.d.ts +5 -0
  601. package/dist/codex/generated/v2/FsCreateDirectoryResponse.d.ts.map +1 -0
  602. package/dist/codex/generated/v2/FsGetMetadataParams.d.ts +11 -0
  603. package/dist/codex/generated/v2/FsGetMetadataParams.d.ts.map +1 -0
  604. package/dist/codex/generated/v2/FsGetMetadataResponse.d.ts +26 -0
  605. package/dist/codex/generated/v2/FsGetMetadataResponse.d.ts.map +1 -0
  606. package/dist/codex/generated/v2/FsReadDirectoryEntry.d.ts +18 -0
  607. package/dist/codex/generated/v2/FsReadDirectoryEntry.d.ts.map +1 -0
  608. package/dist/codex/generated/v2/FsReadDirectoryParams.d.ts +11 -0
  609. package/dist/codex/generated/v2/FsReadDirectoryParams.d.ts.map +1 -0
  610. package/dist/codex/generated/v2/FsReadDirectoryResponse.d.ts +11 -0
  611. package/dist/codex/generated/v2/FsReadDirectoryResponse.d.ts.map +1 -0
  612. package/dist/codex/generated/v2/FsReadFileParams.d.ts +11 -0
  613. package/dist/codex/generated/v2/FsReadFileParams.d.ts.map +1 -0
  614. package/dist/codex/generated/v2/FsReadFileResponse.d.ts +10 -0
  615. package/dist/codex/generated/v2/FsReadFileResponse.d.ts.map +1 -0
  616. package/dist/codex/generated/v2/FsRemoveParams.d.ts +19 -0
  617. package/dist/codex/generated/v2/FsRemoveParams.d.ts.map +1 -0
  618. package/dist/codex/generated/v2/FsRemoveResponse.d.ts +5 -0
  619. package/dist/codex/generated/v2/FsRemoveResponse.d.ts.map +1 -0
  620. package/dist/codex/generated/v2/FsUnwatchParams.d.ts +10 -0
  621. package/dist/codex/generated/v2/FsUnwatchParams.d.ts.map +1 -0
  622. package/dist/codex/generated/v2/FsUnwatchResponse.d.ts +5 -0
  623. package/dist/codex/generated/v2/FsUnwatchResponse.d.ts.map +1 -0
  624. package/dist/codex/generated/v2/FsWatchParams.d.ts +15 -0
  625. package/dist/codex/generated/v2/FsWatchParams.d.ts.map +1 -0
  626. package/dist/codex/generated/v2/FsWatchResponse.d.ts +11 -0
  627. package/dist/codex/generated/v2/FsWatchResponse.d.ts.map +1 -0
  628. package/dist/codex/generated/v2/FsWriteFileParams.d.ts +15 -0
  629. package/dist/codex/generated/v2/FsWriteFileParams.d.ts.map +1 -0
  630. package/dist/codex/generated/v2/FsWriteFileResponse.d.ts +5 -0
  631. package/dist/codex/generated/v2/FsWriteFileResponse.d.ts.map +1 -0
  632. package/dist/codex/generated/v2/GetAccountParams.d.ts +11 -0
  633. package/dist/codex/generated/v2/GetAccountParams.d.ts.map +1 -0
  634. package/dist/codex/generated/v2/GetAccountRateLimitsParams.d.ts +16 -0
  635. package/dist/codex/generated/v2/GetAccountRateLimitsParams.d.ts.map +1 -0
  636. package/dist/codex/generated/v2/GetAccountRateLimitsResponse.d.ts +31 -0
  637. package/dist/codex/generated/v2/GetAccountRateLimitsResponse.d.ts.map +1 -0
  638. package/dist/codex/generated/v2/GetAccountResponse.d.ts +6 -0
  639. package/dist/codex/generated/v2/GetAccountResponse.d.ts.map +1 -0
  640. package/dist/codex/generated/v2/GetAccountTokenUsageParams.d.ts +7 -0
  641. package/dist/codex/generated/v2/GetAccountTokenUsageParams.d.ts.map +1 -0
  642. package/dist/codex/generated/v2/GetAccountTokenUsageResponse.d.ts +12 -0
  643. package/dist/codex/generated/v2/GetAccountTokenUsageResponse.d.ts.map +1 -0
  644. package/dist/codex/generated/v2/GetWorkspaceMessagesResponse.d.ts +12 -0
  645. package/dist/codex/generated/v2/GetWorkspaceMessagesResponse.d.ts.map +1 -0
  646. package/dist/codex/generated/v2/GitInfo.d.ts +6 -0
  647. package/dist/codex/generated/v2/GitInfo.d.ts.map +1 -0
  648. package/dist/codex/generated/v2/GrantedPermissionProfile.d.ts +7 -0
  649. package/dist/codex/generated/v2/GrantedPermissionProfile.d.ts.map +1 -0
  650. package/dist/codex/generated/v2/GuardianApprovalReview.d.ts +15 -0
  651. package/dist/codex/generated/v2/GuardianApprovalReview.d.ts.map +1 -0
  652. package/dist/codex/generated/v2/GuardianApprovalReviewAction.d.ts +45 -0
  653. package/dist/codex/generated/v2/GuardianApprovalReviewAction.d.ts.map +1 -0
  654. package/dist/codex/generated/v2/GuardianApprovalReviewStatus.d.ts +5 -0
  655. package/dist/codex/generated/v2/GuardianApprovalReviewStatus.d.ts.map +1 -0
  656. package/dist/codex/generated/v2/GuardianCommandSource.d.ts +2 -0
  657. package/dist/codex/generated/v2/GuardianCommandSource.d.ts.map +1 -0
  658. package/dist/codex/generated/v2/GuardianRiskLevel.d.ts +5 -0
  659. package/dist/codex/generated/v2/GuardianRiskLevel.d.ts.map +1 -0
  660. package/dist/codex/generated/v2/GuardianUserAuthorization.d.ts +5 -0
  661. package/dist/codex/generated/v2/GuardianUserAuthorization.d.ts.map +1 -0
  662. package/dist/codex/generated/v2/GuardianWarningNotification.d.ts +11 -0
  663. package/dist/codex/generated/v2/GuardianWarningNotification.d.ts.map +1 -0
  664. package/dist/codex/generated/v2/HookCompletedNotification.d.ts +7 -0
  665. package/dist/codex/generated/v2/HookCompletedNotification.d.ts.map +1 -0
  666. package/dist/codex/generated/v2/HookErrorInfo.d.ts +5 -0
  667. package/dist/codex/generated/v2/HookErrorInfo.d.ts.map +1 -0
  668. package/dist/codex/generated/v2/HookEventName.d.ts +2 -0
  669. package/dist/codex/generated/v2/HookEventName.d.ts.map +1 -0
  670. package/dist/codex/generated/v2/HookExecutionMode.d.ts +2 -0
  671. package/dist/codex/generated/v2/HookExecutionMode.d.ts.map +1 -0
  672. package/dist/codex/generated/v2/HookHandlerType.d.ts +2 -0
  673. package/dist/codex/generated/v2/HookHandlerType.d.ts.map +1 -0
  674. package/dist/codex/generated/v2/HookMetadata.d.ts +37 -0
  675. package/dist/codex/generated/v2/HookMetadata.d.ts.map +1 -0
  676. package/dist/codex/generated/v2/HookMigration.d.ts +4 -0
  677. package/dist/codex/generated/v2/HookMigration.d.ts.map +1 -0
  678. package/dist/codex/generated/v2/HookOutputEntry.d.ts +6 -0
  679. package/dist/codex/generated/v2/HookOutputEntry.d.ts.map +1 -0
  680. package/dist/codex/generated/v2/HookOutputEntryKind.d.ts +2 -0
  681. package/dist/codex/generated/v2/HookOutputEntryKind.d.ts.map +1 -0
  682. package/dist/codex/generated/v2/HookPromptFragment.d.ts +5 -0
  683. package/dist/codex/generated/v2/HookPromptFragment.d.ts.map +1 -0
  684. package/dist/codex/generated/v2/HookRunStatus.d.ts +2 -0
  685. package/dist/codex/generated/v2/HookRunStatus.d.ts.map +1 -0
  686. package/dist/codex/generated/v2/HookRunSummary.d.ts +25 -0
  687. package/dist/codex/generated/v2/HookRunSummary.d.ts.map +1 -0
  688. package/dist/codex/generated/v2/HookScope.d.ts +2 -0
  689. package/dist/codex/generated/v2/HookScope.d.ts.map +1 -0
  690. package/dist/codex/generated/v2/HookSource.d.ts +2 -0
  691. package/dist/codex/generated/v2/HookSource.d.ts.map +1 -0
  692. package/dist/codex/generated/v2/HookStartedNotification.d.ts +7 -0
  693. package/dist/codex/generated/v2/HookStartedNotification.d.ts.map +1 -0
  694. package/dist/codex/generated/v2/HookTrustStatus.d.ts +2 -0
  695. package/dist/codex/generated/v2/HookTrustStatus.d.ts.map +1 -0
  696. package/dist/codex/generated/v2/HooksListEntry.d.ts +9 -0
  697. package/dist/codex/generated/v2/HooksListEntry.d.ts.map +1 -0
  698. package/dist/codex/generated/v2/HooksListParams.d.ts +7 -0
  699. package/dist/codex/generated/v2/HooksListParams.d.ts.map +1 -0
  700. package/dist/codex/generated/v2/HooksListResponse.d.ts +5 -0
  701. package/dist/codex/generated/v2/HooksListResponse.d.ts.map +1 -0
  702. package/dist/codex/generated/v2/InAppBrowserRequirements.d.ts +4 -0
  703. package/dist/codex/generated/v2/InAppBrowserRequirements.d.ts.map +1 -0
  704. package/dist/codex/generated/v2/InstalledApp.d.ts +22 -0
  705. package/dist/codex/generated/v2/InstalledApp.d.ts.map +1 -0
  706. package/dist/codex/generated/v2/ItemCompletedNotification.d.ts +11 -0
  707. package/dist/codex/generated/v2/ItemCompletedNotification.d.ts.map +1 -0
  708. package/dist/codex/generated/v2/ItemGuardianApprovalReviewCompletedNotification.d.ts +43 -0
  709. package/dist/codex/generated/v2/ItemGuardianApprovalReviewCompletedNotification.d.ts.map +1 -0
  710. package/dist/codex/generated/v2/ItemGuardianApprovalReviewStartedNotification.d.ts +37 -0
  711. package/dist/codex/generated/v2/ItemGuardianApprovalReviewStartedNotification.d.ts.map +1 -0
  712. package/dist/codex/generated/v2/ItemStartedNotification.d.ts +11 -0
  713. package/dist/codex/generated/v2/ItemStartedNotification.d.ts.map +1 -0
  714. package/dist/codex/generated/v2/ListMcpServerStatusParams.d.ts +18 -0
  715. package/dist/codex/generated/v2/ListMcpServerStatusParams.d.ts.map +1 -0
  716. package/dist/codex/generated/v2/ListMcpServerStatusResponse.d.ts +10 -0
  717. package/dist/codex/generated/v2/ListMcpServerStatusResponse.d.ts.map +1 -0
  718. package/dist/codex/generated/v2/LoginAccountParams.d.ts +41 -0
  719. package/dist/codex/generated/v2/LoginAccountParams.d.ts.map +1 -0
  720. package/dist/codex/generated/v2/LoginAccountResponse.d.ts +26 -0
  721. package/dist/codex/generated/v2/LoginAccountResponse.d.ts.map +1 -0
  722. package/dist/codex/generated/v2/LoginAppBrand.d.ts +2 -0
  723. package/dist/codex/generated/v2/LoginAppBrand.d.ts.map +1 -0
  724. package/dist/codex/generated/v2/LogoutAccountResponse.d.ts +2 -0
  725. package/dist/codex/generated/v2/LogoutAccountResponse.d.ts.map +1 -0
  726. package/dist/codex/generated/v2/ManagedHooksRequirements.d.ts +18 -0
  727. package/dist/codex/generated/v2/ManagedHooksRequirements.d.ts.map +1 -0
  728. package/dist/codex/generated/v2/MarketplaceAddParams.d.ts +6 -0
  729. package/dist/codex/generated/v2/MarketplaceAddParams.d.ts.map +1 -0
  730. package/dist/codex/generated/v2/MarketplaceAddResponse.d.ts +7 -0
  731. package/dist/codex/generated/v2/MarketplaceAddResponse.d.ts.map +1 -0
  732. package/dist/codex/generated/v2/MarketplaceInterface.d.ts +4 -0
  733. package/dist/codex/generated/v2/MarketplaceInterface.d.ts.map +1 -0
  734. package/dist/codex/generated/v2/MarketplaceLoadErrorInfo.d.ts +6 -0
  735. package/dist/codex/generated/v2/MarketplaceLoadErrorInfo.d.ts.map +1 -0
  736. package/dist/codex/generated/v2/MarketplaceRemoveParams.d.ts +4 -0
  737. package/dist/codex/generated/v2/MarketplaceRemoveParams.d.ts.map +1 -0
  738. package/dist/codex/generated/v2/MarketplaceRemoveResponse.d.ts +6 -0
  739. package/dist/codex/generated/v2/MarketplaceRemoveResponse.d.ts.map +1 -0
  740. package/dist/codex/generated/v2/MarketplaceUpgradeErrorInfo.d.ts +5 -0
  741. package/dist/codex/generated/v2/MarketplaceUpgradeErrorInfo.d.ts.map +1 -0
  742. package/dist/codex/generated/v2/MarketplaceUpgradeParams.d.ts +4 -0
  743. package/dist/codex/generated/v2/MarketplaceUpgradeParams.d.ts.map +1 -0
  744. package/dist/codex/generated/v2/MarketplaceUpgradeResponse.d.ts +8 -0
  745. package/dist/codex/generated/v2/MarketplaceUpgradeResponse.d.ts.map +1 -0
  746. package/dist/codex/generated/v2/McpAuthStatus.d.ts +2 -0
  747. package/dist/codex/generated/v2/McpAuthStatus.d.ts.map +1 -0
  748. package/dist/codex/generated/v2/McpElicitationArrayType.d.ts +2 -0
  749. package/dist/codex/generated/v2/McpElicitationArrayType.d.ts.map +1 -0
  750. package/dist/codex/generated/v2/McpElicitationBooleanSchema.d.ts +8 -0
  751. package/dist/codex/generated/v2/McpElicitationBooleanSchema.d.ts.map +1 -0
  752. package/dist/codex/generated/v2/McpElicitationBooleanType.d.ts +2 -0
  753. package/dist/codex/generated/v2/McpElicitationBooleanType.d.ts.map +1 -0
  754. package/dist/codex/generated/v2/McpElicitationConstOption.d.ts +5 -0
  755. package/dist/codex/generated/v2/McpElicitationConstOption.d.ts.map +1 -0
  756. package/dist/codex/generated/v2/McpElicitationEnumSchema.d.ts +5 -0
  757. package/dist/codex/generated/v2/McpElicitationEnumSchema.d.ts.map +1 -0
  758. package/dist/codex/generated/v2/McpElicitationLegacyTitledEnumSchema.d.ts +10 -0
  759. package/dist/codex/generated/v2/McpElicitationLegacyTitledEnumSchema.d.ts.map +1 -0
  760. package/dist/codex/generated/v2/McpElicitationMultiSelectEnumSchema.d.ts +4 -0
  761. package/dist/codex/generated/v2/McpElicitationMultiSelectEnumSchema.d.ts.map +1 -0
  762. package/dist/codex/generated/v2/McpElicitationNumberSchema.d.ts +10 -0
  763. package/dist/codex/generated/v2/McpElicitationNumberSchema.d.ts.map +1 -0
  764. package/dist/codex/generated/v2/McpElicitationNumberType.d.ts +2 -0
  765. package/dist/codex/generated/v2/McpElicitationNumberType.d.ts.map +1 -0
  766. package/dist/codex/generated/v2/McpElicitationObjectType.d.ts +2 -0
  767. package/dist/codex/generated/v2/McpElicitationObjectType.d.ts.map +1 -0
  768. package/dist/codex/generated/v2/McpElicitationPrimitiveSchema.d.ts +6 -0
  769. package/dist/codex/generated/v2/McpElicitationPrimitiveSchema.d.ts.map +1 -0
  770. package/dist/codex/generated/v2/McpElicitationSchema.d.ts +17 -0
  771. package/dist/codex/generated/v2/McpElicitationSchema.d.ts.map +1 -0
  772. package/dist/codex/generated/v2/McpElicitationSingleSelectEnumSchema.d.ts +4 -0
  773. package/dist/codex/generated/v2/McpElicitationSingleSelectEnumSchema.d.ts.map +1 -0
  774. package/dist/codex/generated/v2/McpElicitationStringFormat.d.ts +2 -0
  775. package/dist/codex/generated/v2/McpElicitationStringFormat.d.ts.map +1 -0
  776. package/dist/codex/generated/v2/McpElicitationStringSchema.d.ts +12 -0
  777. package/dist/codex/generated/v2/McpElicitationStringSchema.d.ts.map +1 -0
  778. package/dist/codex/generated/v2/McpElicitationStringType.d.ts +2 -0
  779. package/dist/codex/generated/v2/McpElicitationStringType.d.ts.map +1 -0
  780. package/dist/codex/generated/v2/McpElicitationTitledEnumItems.d.ts +5 -0
  781. package/dist/codex/generated/v2/McpElicitationTitledEnumItems.d.ts.map +1 -0
  782. package/dist/codex/generated/v2/McpElicitationTitledMultiSelectEnumSchema.d.ts +12 -0
  783. package/dist/codex/generated/v2/McpElicitationTitledMultiSelectEnumSchema.d.ts.map +1 -0
  784. package/dist/codex/generated/v2/McpElicitationTitledSingleSelectEnumSchema.d.ts +10 -0
  785. package/dist/codex/generated/v2/McpElicitationTitledSingleSelectEnumSchema.d.ts.map +1 -0
  786. package/dist/codex/generated/v2/McpElicitationUntitledEnumItems.d.ts +6 -0
  787. package/dist/codex/generated/v2/McpElicitationUntitledEnumItems.d.ts.map +1 -0
  788. package/dist/codex/generated/v2/McpElicitationUntitledMultiSelectEnumSchema.d.ts +12 -0
  789. package/dist/codex/generated/v2/McpElicitationUntitledMultiSelectEnumSchema.d.ts.map +1 -0
  790. package/dist/codex/generated/v2/McpElicitationUntitledSingleSelectEnumSchema.d.ts +9 -0
  791. package/dist/codex/generated/v2/McpElicitationUntitledSingleSelectEnumSchema.d.ts.map +1 -0
  792. package/dist/codex/generated/v2/McpResourceReadParams.d.ts +11 -0
  793. package/dist/codex/generated/v2/McpResourceReadParams.d.ts.map +1 -0
  794. package/dist/codex/generated/v2/McpResourceReadResponse.d.ts +9 -0
  795. package/dist/codex/generated/v2/McpResourceReadResponse.d.ts.map +1 -0
  796. package/dist/codex/generated/v2/McpServerConnectionStatus.d.ts +2 -0
  797. package/dist/codex/generated/v2/McpServerConnectionStatus.d.ts.map +1 -0
  798. package/dist/codex/generated/v2/McpServerElicitationAction.d.ts +2 -0
  799. package/dist/codex/generated/v2/McpServerElicitationAction.d.ts.map +1 -0
  800. package/dist/codex/generated/v2/McpServerElicitationRequestParams.d.ts +42 -0
  801. package/dist/codex/generated/v2/McpServerElicitationRequestParams.d.ts.map +1 -0
  802. package/dist/codex/generated/v2/McpServerElicitationRequestResponse.d.ts +16 -0
  803. package/dist/codex/generated/v2/McpServerElicitationRequestResponse.d.ts.map +1 -0
  804. package/dist/codex/generated/v2/McpServerEventNotification.d.ts +6 -0
  805. package/dist/codex/generated/v2/McpServerEventNotification.d.ts.map +1 -0
  806. package/dist/codex/generated/v2/McpServerEventStreamNotification.d.ts +6 -0
  807. package/dist/codex/generated/v2/McpServerEventStreamNotification.d.ts.map +1 -0
  808. package/dist/codex/generated/v2/McpServerEventStreamStartParams.d.ts +10 -0
  809. package/dist/codex/generated/v2/McpServerEventStreamStartParams.d.ts.map +1 -0
  810. package/dist/codex/generated/v2/McpServerEventStreamStartResponse.d.ts +2 -0
  811. package/dist/codex/generated/v2/McpServerEventStreamStartResponse.d.ts.map +1 -0
  812. package/dist/codex/generated/v2/McpServerEventStreamStopParams.d.ts +4 -0
  813. package/dist/codex/generated/v2/McpServerEventStreamStopParams.d.ts.map +1 -0
  814. package/dist/codex/generated/v2/McpServerEventStreamStopResponse.d.ts +2 -0
  815. package/dist/codex/generated/v2/McpServerEventStreamStopResponse.d.ts.map +1 -0
  816. package/dist/codex/generated/v2/McpServerMigration.d.ts +4 -0
  817. package/dist/codex/generated/v2/McpServerMigration.d.ts.map +1 -0
  818. package/dist/codex/generated/v2/McpServerOauthClientRegistration.d.ts +2 -0
  819. package/dist/codex/generated/v2/McpServerOauthClientRegistration.d.ts.map +1 -0
  820. package/dist/codex/generated/v2/McpServerOauthLoginCompletedNotification.d.ts +7 -0
  821. package/dist/codex/generated/v2/McpServerOauthLoginCompletedNotification.d.ts.map +1 -0
  822. package/dist/codex/generated/v2/McpServerOauthLoginParams.d.ts +12 -0
  823. package/dist/codex/generated/v2/McpServerOauthLoginParams.d.ts.map +1 -0
  824. package/dist/codex/generated/v2/McpServerOauthLoginResponse.d.ts +4 -0
  825. package/dist/codex/generated/v2/McpServerOauthLoginResponse.d.ts.map +1 -0
  826. package/dist/codex/generated/v2/McpServerRefreshResponse.d.ts +2 -0
  827. package/dist/codex/generated/v2/McpServerRefreshResponse.d.ts.map +1 -0
  828. package/dist/codex/generated/v2/McpServerStartupFailureReason.d.ts +2 -0
  829. package/dist/codex/generated/v2/McpServerStartupFailureReason.d.ts.map +1 -0
  830. package/dist/codex/generated/v2/McpServerStartupState.d.ts +2 -0
  831. package/dist/codex/generated/v2/McpServerStartupState.d.ts.map +1 -0
  832. package/dist/codex/generated/v2/McpServerStatus.d.ts +27 -0
  833. package/dist/codex/generated/v2/McpServerStatus.d.ts.map +1 -0
  834. package/dist/codex/generated/v2/McpServerStatusDetail.d.ts +2 -0
  835. package/dist/codex/generated/v2/McpServerStatusDetail.d.ts.map +1 -0
  836. package/dist/codex/generated/v2/McpServerStatusUpdatedNotification.d.ts +10 -0
  837. package/dist/codex/generated/v2/McpServerStatusUpdatedNotification.d.ts.map +1 -0
  838. package/dist/codex/generated/v2/McpServerToolCallParams.d.ts +9 -0
  839. package/dist/codex/generated/v2/McpServerToolCallParams.d.ts.map +1 -0
  840. package/dist/codex/generated/v2/McpServerToolCallResponse.d.ts +8 -0
  841. package/dist/codex/generated/v2/McpServerToolCallResponse.d.ts.map +1 -0
  842. package/dist/codex/generated/v2/McpToolCallAppContext.d.ts +8 -0
  843. package/dist/codex/generated/v2/McpToolCallAppContext.d.ts.map +1 -0
  844. package/dist/codex/generated/v2/McpToolCallError.d.ts +4 -0
  845. package/dist/codex/generated/v2/McpToolCallError.d.ts.map +1 -0
  846. package/dist/codex/generated/v2/McpToolCallProgressNotification.d.ts +7 -0
  847. package/dist/codex/generated/v2/McpToolCallProgressNotification.d.ts.map +1 -0
  848. package/dist/codex/generated/v2/McpToolCallResult.d.ts +7 -0
  849. package/dist/codex/generated/v2/McpToolCallResult.d.ts.map +1 -0
  850. package/dist/codex/generated/v2/McpToolCallStatus.d.ts +2 -0
  851. package/dist/codex/generated/v2/McpToolCallStatus.d.ts.map +1 -0
  852. package/dist/codex/generated/v2/MemoryCitation.d.ts +6 -0
  853. package/dist/codex/generated/v2/MemoryCitation.d.ts.map +1 -0
  854. package/dist/codex/generated/v2/MemoryCitationEntry.d.ts +7 -0
  855. package/dist/codex/generated/v2/MemoryCitationEntry.d.ts.map +1 -0
  856. package/dist/codex/generated/v2/MemoryResetResponse.d.ts +2 -0
  857. package/dist/codex/generated/v2/MemoryResetResponse.d.ts.map +1 -0
  858. package/dist/codex/generated/v2/MergeStrategy.d.ts +2 -0
  859. package/dist/codex/generated/v2/MergeStrategy.d.ts.map +1 -0
  860. package/dist/codex/generated/v2/MigrationDetails.d.ts +18 -0
  861. package/dist/codex/generated/v2/MigrationDetails.d.ts.map +1 -0
  862. package/dist/codex/generated/v2/MisalignmentErrorDetails.d.ts +16 -0
  863. package/dist/codex/generated/v2/MisalignmentErrorDetails.d.ts.map +1 -0
  864. package/dist/codex/generated/v2/MisalignmentSteer.d.ts +4 -0
  865. package/dist/codex/generated/v2/MisalignmentSteer.d.ts.map +1 -0
  866. package/dist/codex/generated/v2/MockExperimentalMethodParams.d.ts +7 -0
  867. package/dist/codex/generated/v2/MockExperimentalMethodParams.d.ts.map +1 -0
  868. package/dist/codex/generated/v2/MockExperimentalMethodResponse.d.ts +7 -0
  869. package/dist/codex/generated/v2/MockExperimentalMethodResponse.d.ts.map +1 -0
  870. package/dist/codex/generated/v2/Model.d.ts +37 -0
  871. package/dist/codex/generated/v2/Model.d.ts.map +1 -0
  872. package/dist/codex/generated/v2/ModelAvailabilityNux.d.ts +4 -0
  873. package/dist/codex/generated/v2/ModelAvailabilityNux.d.ts.map +1 -0
  874. package/dist/codex/generated/v2/ModelListParams.d.ts +15 -0
  875. package/dist/codex/generated/v2/ModelListParams.d.ts.map +1 -0
  876. package/dist/codex/generated/v2/ModelListResponse.d.ts +10 -0
  877. package/dist/codex/generated/v2/ModelListResponse.d.ts.map +1 -0
  878. package/dist/codex/generated/v2/ModelProviderCapabilitiesReadParams.d.ts +2 -0
  879. package/dist/codex/generated/v2/ModelProviderCapabilitiesReadParams.d.ts.map +1 -0
  880. package/dist/codex/generated/v2/ModelProviderCapabilitiesReadResponse.d.ts +6 -0
  881. package/dist/codex/generated/v2/ModelProviderCapabilitiesReadResponse.d.ts.map +1 -0
  882. package/dist/codex/generated/v2/ModelRerouteReason.d.ts +2 -0
  883. package/dist/codex/generated/v2/ModelRerouteReason.d.ts.map +1 -0
  884. package/dist/codex/generated/v2/ModelReroutedNotification.d.ts +9 -0
  885. package/dist/codex/generated/v2/ModelReroutedNotification.d.ts.map +1 -0
  886. package/dist/codex/generated/v2/ModelSafetyBufferingUpdatedNotification.d.ts +10 -0
  887. package/dist/codex/generated/v2/ModelSafetyBufferingUpdatedNotification.d.ts.map +1 -0
  888. package/dist/codex/generated/v2/ModelServiceTier.d.ts +6 -0
  889. package/dist/codex/generated/v2/ModelServiceTier.d.ts.map +1 -0
  890. package/dist/codex/generated/v2/ModelUpgradeInfo.d.ts +11 -0
  891. package/dist/codex/generated/v2/ModelUpgradeInfo.d.ts.map +1 -0
  892. package/dist/codex/generated/v2/ModelVerification.d.ts +2 -0
  893. package/dist/codex/generated/v2/ModelVerification.d.ts.map +1 -0
  894. package/dist/codex/generated/v2/ModelVerificationNotification.d.ts +7 -0
  895. package/dist/codex/generated/v2/ModelVerificationNotification.d.ts.map +1 -0
  896. package/dist/codex/generated/v2/ModelsRequirements.d.ts +5 -0
  897. package/dist/codex/generated/v2/ModelsRequirements.d.ts.map +1 -0
  898. package/dist/codex/generated/v2/MultiAgentVersion.d.ts +5 -0
  899. package/dist/codex/generated/v2/MultiAgentVersion.d.ts.map +1 -0
  900. package/dist/codex/generated/v2/NetworkAccess.d.ts +2 -0
  901. package/dist/codex/generated/v2/NetworkAccess.d.ts.map +1 -0
  902. package/dist/codex/generated/v2/NetworkApprovalContext.d.ts +6 -0
  903. package/dist/codex/generated/v2/NetworkApprovalContext.d.ts.map +1 -0
  904. package/dist/codex/generated/v2/NetworkApprovalProtocol.d.ts +2 -0
  905. package/dist/codex/generated/v2/NetworkApprovalProtocol.d.ts.map +1 -0
  906. package/dist/codex/generated/v2/NetworkDomainPermission.d.ts +2 -0
  907. package/dist/codex/generated/v2/NetworkDomainPermission.d.ts.map +1 -0
  908. package/dist/codex/generated/v2/NetworkPolicyAmendment.d.ts +6 -0
  909. package/dist/codex/generated/v2/NetworkPolicyAmendment.d.ts.map +1 -0
  910. package/dist/codex/generated/v2/NetworkPolicyRuleAction.d.ts +2 -0
  911. package/dist/codex/generated/v2/NetworkPolicyRuleAction.d.ts.map +1 -0
  912. package/dist/codex/generated/v2/NetworkRequirements.d.ts +41 -0
  913. package/dist/codex/generated/v2/NetworkRequirements.d.ts.map +1 -0
  914. package/dist/codex/generated/v2/NetworkUnixSocketPermission.d.ts +2 -0
  915. package/dist/codex/generated/v2/NetworkUnixSocketPermission.d.ts.map +1 -0
  916. package/dist/codex/generated/v2/NewThreadModelDefaults.d.ts +7 -0
  917. package/dist/codex/generated/v2/NewThreadModelDefaults.d.ts.map +1 -0
  918. package/dist/codex/generated/v2/NonSteerableTurnKind.d.ts +2 -0
  919. package/dist/codex/generated/v2/NonSteerableTurnKind.d.ts.map +1 -0
  920. package/dist/codex/generated/v2/OverriddenMetadata.d.ts +8 -0
  921. package/dist/codex/generated/v2/OverriddenMetadata.d.ts.map +1 -0
  922. package/dist/codex/generated/v2/PatchApplyStatus.d.ts +2 -0
  923. package/dist/codex/generated/v2/PatchApplyStatus.d.ts.map +1 -0
  924. package/dist/codex/generated/v2/PatchChangeKind.d.ts +9 -0
  925. package/dist/codex/generated/v2/PatchChangeKind.d.ts.map +1 -0
  926. package/dist/codex/generated/v2/PermissionGrantScope.d.ts +2 -0
  927. package/dist/codex/generated/v2/PermissionGrantScope.d.ts.map +1 -0
  928. package/dist/codex/generated/v2/PermissionProfileListParams.d.ts +15 -0
  929. package/dist/codex/generated/v2/PermissionProfileListParams.d.ts.map +1 -0
  930. package/dist/codex/generated/v2/PermissionProfileListResponse.d.ts +10 -0
  931. package/dist/codex/generated/v2/PermissionProfileListResponse.d.ts.map +1 -0
  932. package/dist/codex/generated/v2/PermissionProfileSummary.d.ts +15 -0
  933. package/dist/codex/generated/v2/PermissionProfileSummary.d.ts.map +1 -0
  934. package/dist/codex/generated/v2/PermissionsRequestApprovalParams.d.ts +16 -0
  935. package/dist/codex/generated/v2/PermissionsRequestApprovalParams.d.ts.map +1 -0
  936. package/dist/codex/generated/v2/PermissionsRequestApprovalResponse.d.ts +11 -0
  937. package/dist/codex/generated/v2/PermissionsRequestApprovalResponse.d.ts.map +1 -0
  938. package/dist/codex/generated/v2/PlanDeltaNotification.d.ts +11 -0
  939. package/dist/codex/generated/v2/PlanDeltaNotification.d.ts.map +1 -0
  940. package/dist/codex/generated/v2/PluginAuthPolicy.d.ts +2 -0
  941. package/dist/codex/generated/v2/PluginAuthPolicy.d.ts.map +1 -0
  942. package/dist/codex/generated/v2/PluginAvailability.d.ts +2 -0
  943. package/dist/codex/generated/v2/PluginAvailability.d.ts.map +1 -0
  944. package/dist/codex/generated/v2/PluginDetail.d.ts +21 -0
  945. package/dist/codex/generated/v2/PluginDetail.d.ts.map +1 -0
  946. package/dist/codex/generated/v2/PluginDisabledReason.d.ts +2 -0
  947. package/dist/codex/generated/v2/PluginDisabledReason.d.ts.map +1 -0
  948. package/dist/codex/generated/v2/PluginHookSummary.d.ts +6 -0
  949. package/dist/codex/generated/v2/PluginHookSummary.d.ts.map +1 -0
  950. package/dist/codex/generated/v2/PluginInstallParams.d.ts +11 -0
  951. package/dist/codex/generated/v2/PluginInstallParams.d.ts.map +1 -0
  952. package/dist/codex/generated/v2/PluginInstallPolicy.d.ts +2 -0
  953. package/dist/codex/generated/v2/PluginInstallPolicy.d.ts.map +1 -0
  954. package/dist/codex/generated/v2/PluginInstallPolicySource.d.ts +2 -0
  955. package/dist/codex/generated/v2/PluginInstallPolicySource.d.ts.map +1 -0
  956. package/dist/codex/generated/v2/PluginInstallResponse.d.ts +7 -0
  957. package/dist/codex/generated/v2/PluginInstallResponse.d.ts.map +1 -0
  958. package/dist/codex/generated/v2/PluginInstalledParams.d.ts +13 -0
  959. package/dist/codex/generated/v2/PluginInstalledParams.d.ts.map +1 -0
  960. package/dist/codex/generated/v2/PluginInstalledResponse.d.ts +7 -0
  961. package/dist/codex/generated/v2/PluginInstalledResponse.d.ts.map +1 -0
  962. package/dist/codex/generated/v2/PluginInterface.d.ts +51 -0
  963. package/dist/codex/generated/v2/PluginInterface.d.ts.map +1 -0
  964. package/dist/codex/generated/v2/PluginListMarketplaceKind.d.ts +2 -0
  965. package/dist/codex/generated/v2/PluginListMarketplaceKind.d.ts.map +1 -0
  966. package/dist/codex/generated/v2/PluginListParams.d.ts +19 -0
  967. package/dist/codex/generated/v2/PluginListParams.d.ts.map +1 -0
  968. package/dist/codex/generated/v2/PluginListResponse.d.ts +8 -0
  969. package/dist/codex/generated/v2/PluginListResponse.d.ts.map +1 -0
  970. package/dist/codex/generated/v2/PluginMarketplaceEntry.d.ts +14 -0
  971. package/dist/codex/generated/v2/PluginMarketplaceEntry.d.ts.map +1 -0
  972. package/dist/codex/generated/v2/PluginReadParams.d.ts +7 -0
  973. package/dist/codex/generated/v2/PluginReadParams.d.ts.map +1 -0
  974. package/dist/codex/generated/v2/PluginReadResponse.d.ts +5 -0
  975. package/dist/codex/generated/v2/PluginReadResponse.d.ts.map +1 -0
  976. package/dist/codex/generated/v2/PluginReconcileChangedPlugin.d.ts +20 -0
  977. package/dist/codex/generated/v2/PluginReconcileChangedPlugin.d.ts.map +1 -0
  978. package/dist/codex/generated/v2/PluginReconcileParams.d.ts +7 -0
  979. package/dist/codex/generated/v2/PluginReconcileParams.d.ts.map +1 -0
  980. package/dist/codex/generated/v2/PluginReconcileResponse.d.ts +24 -0
  981. package/dist/codex/generated/v2/PluginReconcileResponse.d.ts.map +1 -0
  982. package/dist/codex/generated/v2/PluginSearchParams.d.ts +10 -0
  983. package/dist/codex/generated/v2/PluginSearchParams.d.ts.map +1 -0
  984. package/dist/codex/generated/v2/PluginSearchResponse.d.ts +6 -0
  985. package/dist/codex/generated/v2/PluginSearchResponse.d.ts.map +1 -0
  986. package/dist/codex/generated/v2/PluginSearchResult.d.ts +8 -0
  987. package/dist/codex/generated/v2/PluginSearchResult.d.ts.map +1 -0
  988. package/dist/codex/generated/v2/PluginSearchScope.d.ts +2 -0
  989. package/dist/codex/generated/v2/PluginSearchScope.d.ts.map +1 -0
  990. package/dist/codex/generated/v2/PluginShareCheckoutParams.d.ts +4 -0
  991. package/dist/codex/generated/v2/PluginShareCheckoutParams.d.ts.map +1 -0
  992. package/dist/codex/generated/v2/PluginShareCheckoutResponse.d.ts +11 -0
  993. package/dist/codex/generated/v2/PluginShareCheckoutResponse.d.ts.map +1 -0
  994. package/dist/codex/generated/v2/PluginShareContext.d.ts +16 -0
  995. package/dist/codex/generated/v2/PluginShareContext.d.ts.map +1 -0
  996. package/dist/codex/generated/v2/PluginShareDeleteParams.d.ts +4 -0
  997. package/dist/codex/generated/v2/PluginShareDeleteParams.d.ts.map +1 -0
  998. package/dist/codex/generated/v2/PluginShareDeleteResponse.d.ts +2 -0
  999. package/dist/codex/generated/v2/PluginShareDeleteResponse.d.ts.map +1 -0
  1000. package/dist/codex/generated/v2/PluginShareDiscoverability.d.ts +2 -0
  1001. package/dist/codex/generated/v2/PluginShareDiscoverability.d.ts.map +1 -0
  1002. package/dist/codex/generated/v2/PluginShareListItem.d.ts +7 -0
  1003. package/dist/codex/generated/v2/PluginShareListItem.d.ts.map +1 -0
  1004. package/dist/codex/generated/v2/PluginShareListParams.d.ts +2 -0
  1005. package/dist/codex/generated/v2/PluginShareListParams.d.ts.map +1 -0
  1006. package/dist/codex/generated/v2/PluginShareListResponse.d.ts +5 -0
  1007. package/dist/codex/generated/v2/PluginShareListResponse.d.ts.map +1 -0
  1008. package/dist/codex/generated/v2/PluginSharePrincipal.d.ts +9 -0
  1009. package/dist/codex/generated/v2/PluginSharePrincipal.d.ts.map +1 -0
  1010. package/dist/codex/generated/v2/PluginSharePrincipalRole.d.ts +2 -0
  1011. package/dist/codex/generated/v2/PluginSharePrincipalRole.d.ts.map +1 -0
  1012. package/dist/codex/generated/v2/PluginSharePrincipalType.d.ts +2 -0
  1013. package/dist/codex/generated/v2/PluginSharePrincipalType.d.ts.map +1 -0
  1014. package/dist/codex/generated/v2/PluginShareSaveParams.d.ts +10 -0
  1015. package/dist/codex/generated/v2/PluginShareSaveParams.d.ts.map +1 -0
  1016. package/dist/codex/generated/v2/PluginShareSaveResponse.d.ts +6 -0
  1017. package/dist/codex/generated/v2/PluginShareSaveResponse.d.ts.map +1 -0
  1018. package/dist/codex/generated/v2/PluginShareTarget.d.ts +8 -0
  1019. package/dist/codex/generated/v2/PluginShareTarget.d.ts.map +1 -0
  1020. package/dist/codex/generated/v2/PluginShareTargetRole.d.ts +2 -0
  1021. package/dist/codex/generated/v2/PluginShareTargetRole.d.ts.map +1 -0
  1022. package/dist/codex/generated/v2/PluginShareUpdateDiscoverability.d.ts +2 -0
  1023. package/dist/codex/generated/v2/PluginShareUpdateDiscoverability.d.ts.map +1 -0
  1024. package/dist/codex/generated/v2/PluginShareUpdateTargetsParams.d.ts +8 -0
  1025. package/dist/codex/generated/v2/PluginShareUpdateTargetsParams.d.ts.map +1 -0
  1026. package/dist/codex/generated/v2/PluginShareUpdateTargetsResponse.d.ts +7 -0
  1027. package/dist/codex/generated/v2/PluginShareUpdateTargetsResponse.d.ts.map +1 -0
  1028. package/dist/codex/generated/v2/PluginSkillReadParams.d.ts +6 -0
  1029. package/dist/codex/generated/v2/PluginSkillReadParams.d.ts.map +1 -0
  1030. package/dist/codex/generated/v2/PluginSkillReadResponse.d.ts +4 -0
  1031. package/dist/codex/generated/v2/PluginSkillReadResponse.d.ts.map +1 -0
  1032. package/dist/codex/generated/v2/PluginSource.d.ts +25 -0
  1033. package/dist/codex/generated/v2/PluginSource.d.ts.map +1 -0
  1034. package/dist/codex/generated/v2/PluginSummary.d.ts +54 -0
  1035. package/dist/codex/generated/v2/PluginSummary.d.ts.map +1 -0
  1036. package/dist/codex/generated/v2/PluginUninstallParams.d.ts +4 -0
  1037. package/dist/codex/generated/v2/PluginUninstallParams.d.ts.map +1 -0
  1038. package/dist/codex/generated/v2/PluginUninstallResponse.d.ts +2 -0
  1039. package/dist/codex/generated/v2/PluginUninstallResponse.d.ts.map +1 -0
  1040. package/dist/codex/generated/v2/PluginsMigration.d.ts +5 -0
  1041. package/dist/codex/generated/v2/PluginsMigration.d.ts.map +1 -0
  1042. package/dist/codex/generated/v2/ProcessExitedNotification.d.ts +40 -0
  1043. package/dist/codex/generated/v2/ProcessExitedNotification.d.ts.map +1 -0
  1044. package/dist/codex/generated/v2/ProcessKillParams.d.ts +10 -0
  1045. package/dist/codex/generated/v2/ProcessKillParams.d.ts.map +1 -0
  1046. package/dist/codex/generated/v2/ProcessKillResponse.d.ts +5 -0
  1047. package/dist/codex/generated/v2/ProcessKillResponse.d.ts.map +1 -0
  1048. package/dist/codex/generated/v2/ProcessOutputDeltaNotification.d.ts +24 -0
  1049. package/dist/codex/generated/v2/ProcessOutputDeltaNotification.d.ts.map +1 -0
  1050. package/dist/codex/generated/v2/ProcessOutputStream.d.ts +5 -0
  1051. package/dist/codex/generated/v2/ProcessOutputStream.d.ts.map +1 -0
  1052. package/dist/codex/generated/v2/ProcessResizePtyParams.d.ts +15 -0
  1053. package/dist/codex/generated/v2/ProcessResizePtyParams.d.ts.map +1 -0
  1054. package/dist/codex/generated/v2/ProcessResizePtyResponse.d.ts +5 -0
  1055. package/dist/codex/generated/v2/ProcessResizePtyResponse.d.ts.map +1 -0
  1056. package/dist/codex/generated/v2/ProcessSpawnParams.d.ts +73 -0
  1057. package/dist/codex/generated/v2/ProcessSpawnParams.d.ts.map +1 -0
  1058. package/dist/codex/generated/v2/ProcessSpawnResponse.d.ts +5 -0
  1059. package/dist/codex/generated/v2/ProcessSpawnResponse.d.ts.map +1 -0
  1060. package/dist/codex/generated/v2/ProcessTerminalSize.d.ts +14 -0
  1061. package/dist/codex/generated/v2/ProcessTerminalSize.d.ts.map +1 -0
  1062. package/dist/codex/generated/v2/ProcessWriteStdinParams.d.ts +19 -0
  1063. package/dist/codex/generated/v2/ProcessWriteStdinParams.d.ts.map +1 -0
  1064. package/dist/codex/generated/v2/ProcessWriteStdinResponse.d.ts +5 -0
  1065. package/dist/codex/generated/v2/ProcessWriteStdinResponse.d.ts.map +1 -0
  1066. package/dist/codex/generated/v2/Project.d.ts +17 -0
  1067. package/dist/codex/generated/v2/Project.d.ts.map +1 -0
  1068. package/dist/codex/generated/v2/ProjectChangeType.d.ts +2 -0
  1069. package/dist/codex/generated/v2/ProjectChangeType.d.ts.map +1 -0
  1070. package/dist/codex/generated/v2/ProjectChangedNotification.d.ts +6 -0
  1071. package/dist/codex/generated/v2/ProjectChangedNotification.d.ts.map +1 -0
  1072. package/dist/codex/generated/v2/ProjectCreateParams.d.ts +10 -0
  1073. package/dist/codex/generated/v2/ProjectCreateParams.d.ts.map +1 -0
  1074. package/dist/codex/generated/v2/ProjectCreateResponse.d.ts +5 -0
  1075. package/dist/codex/generated/v2/ProjectCreateResponse.d.ts.map +1 -0
  1076. package/dist/codex/generated/v2/ProjectDeleteParams.d.ts +4 -0
  1077. package/dist/codex/generated/v2/ProjectDeleteParams.d.ts.map +1 -0
  1078. package/dist/codex/generated/v2/ProjectDeleteResponse.d.ts +2 -0
  1079. package/dist/codex/generated/v2/ProjectDeleteResponse.d.ts.map +1 -0
  1080. package/dist/codex/generated/v2/ProjectImportParams.d.ts +11 -0
  1081. package/dist/codex/generated/v2/ProjectImportParams.d.ts.map +1 -0
  1082. package/dist/codex/generated/v2/ProjectImportResponse.d.ts +5 -0
  1083. package/dist/codex/generated/v2/ProjectImportResponse.d.ts.map +1 -0
  1084. package/dist/codex/generated/v2/ProjectListParams.d.ts +15 -0
  1085. package/dist/codex/generated/v2/ProjectListParams.d.ts.map +1 -0
  1086. package/dist/codex/generated/v2/ProjectListResponse.d.ts +6 -0
  1087. package/dist/codex/generated/v2/ProjectListResponse.d.ts.map +1 -0
  1088. package/dist/codex/generated/v2/ProjectMoveParams.d.ts +5 -0
  1089. package/dist/codex/generated/v2/ProjectMoveParams.d.ts.map +1 -0
  1090. package/dist/codex/generated/v2/ProjectMoveResponse.d.ts +2 -0
  1091. package/dist/codex/generated/v2/ProjectMoveResponse.d.ts.map +1 -0
  1092. package/dist/codex/generated/v2/ProjectReadParams.d.ts +4 -0
  1093. package/dist/codex/generated/v2/ProjectReadParams.d.ts.map +1 -0
  1094. package/dist/codex/generated/v2/ProjectReadResponse.d.ts +5 -0
  1095. package/dist/codex/generated/v2/ProjectReadResponse.d.ts.map +1 -0
  1096. package/dist/codex/generated/v2/ProjectRoot.d.ts +5 -0
  1097. package/dist/codex/generated/v2/ProjectRoot.d.ts.map +1 -0
  1098. package/dist/codex/generated/v2/ProjectSortKey.d.ts +2 -0
  1099. package/dist/codex/generated/v2/ProjectSortKey.d.ts.map +1 -0
  1100. package/dist/codex/generated/v2/ProjectUpdateParams.d.ts +10 -0
  1101. package/dist/codex/generated/v2/ProjectUpdateParams.d.ts.map +1 -0
  1102. package/dist/codex/generated/v2/ProjectUpdateResponse.d.ts +5 -0
  1103. package/dist/codex/generated/v2/ProjectUpdateResponse.d.ts.map +1 -0
  1104. package/dist/codex/generated/v2/QueuedSubmission.d.ts +7 -0
  1105. package/dist/codex/generated/v2/QueuedSubmission.d.ts.map +1 -0
  1106. package/dist/codex/generated/v2/RateLimitReachedType.d.ts +2 -0
  1107. package/dist/codex/generated/v2/RateLimitReachedType.d.ts.map +1 -0
  1108. package/dist/codex/generated/v2/RateLimitResetCredit.d.ts +27 -0
  1109. package/dist/codex/generated/v2/RateLimitResetCredit.d.ts.map +1 -0
  1110. package/dist/codex/generated/v2/RateLimitResetCreditStatus.d.ts +2 -0
  1111. package/dist/codex/generated/v2/RateLimitResetCreditStatus.d.ts.map +1 -0
  1112. package/dist/codex/generated/v2/RateLimitResetCreditsSummary.d.ts +13 -0
  1113. package/dist/codex/generated/v2/RateLimitResetCreditsSummary.d.ts.map +1 -0
  1114. package/dist/codex/generated/v2/RateLimitResetType.d.ts +2 -0
  1115. package/dist/codex/generated/v2/RateLimitResetType.d.ts.map +1 -0
  1116. package/dist/codex/generated/v2/RateLimitSnapshot.d.ts +24 -0
  1117. package/dist/codex/generated/v2/RateLimitSnapshot.d.ts.map +1 -0
  1118. package/dist/codex/generated/v2/RateLimitWindow.d.ts +6 -0
  1119. package/dist/codex/generated/v2/RateLimitWindow.d.ts.map +1 -0
  1120. package/dist/codex/generated/v2/RawResponseCompletedNotification.d.ts +14 -0
  1121. package/dist/codex/generated/v2/RawResponseCompletedNotification.d.ts.map +1 -0
  1122. package/dist/codex/generated/v2/RawResponseItemCompletedNotification.d.ts +7 -0
  1123. package/dist/codex/generated/v2/RawResponseItemCompletedNotification.d.ts.map +1 -0
  1124. package/dist/codex/generated/v2/ReasoningEffortOption.d.ts +6 -0
  1125. package/dist/codex/generated/v2/ReasoningEffortOption.d.ts.map +1 -0
  1126. package/dist/codex/generated/v2/ReasoningSummaryPartAddedNotification.d.ts +7 -0
  1127. package/dist/codex/generated/v2/ReasoningSummaryPartAddedNotification.d.ts.map +1 -0
  1128. package/dist/codex/generated/v2/ReasoningSummaryTextDeltaNotification.d.ts +8 -0
  1129. package/dist/codex/generated/v2/ReasoningSummaryTextDeltaNotification.d.ts.map +1 -0
  1130. package/dist/codex/generated/v2/ReasoningTextDeltaNotification.d.ts +8 -0
  1131. package/dist/codex/generated/v2/ReasoningTextDeltaNotification.d.ts.map +1 -0
  1132. package/dist/codex/generated/v2/RemoteControlClient.d.ts +11 -0
  1133. package/dist/codex/generated/v2/RemoteControlClient.d.ts.map +1 -0
  1134. package/dist/codex/generated/v2/RemoteControlClientsListOrder.d.ts +2 -0
  1135. package/dist/codex/generated/v2/RemoteControlClientsListOrder.d.ts.map +1 -0
  1136. package/dist/codex/generated/v2/RemoteControlClientsListParams.d.ts +8 -0
  1137. package/dist/codex/generated/v2/RemoteControlClientsListParams.d.ts.map +1 -0
  1138. package/dist/codex/generated/v2/RemoteControlClientsListResponse.d.ts +6 -0
  1139. package/dist/codex/generated/v2/RemoteControlClientsListResponse.d.ts.map +1 -0
  1140. package/dist/codex/generated/v2/RemoteControlClientsRevokeParams.d.ts +5 -0
  1141. package/dist/codex/generated/v2/RemoteControlClientsRevokeParams.d.ts.map +1 -0
  1142. package/dist/codex/generated/v2/RemoteControlClientsRevokeResponse.d.ts +2 -0
  1143. package/dist/codex/generated/v2/RemoteControlClientsRevokeResponse.d.ts.map +1 -0
  1144. package/dist/codex/generated/v2/RemoteControlConnectionStatus.d.ts +2 -0
  1145. package/dist/codex/generated/v2/RemoteControlConnectionStatus.d.ts.map +1 -0
  1146. package/dist/codex/generated/v2/RemoteControlDisableParams.d.ts +4 -0
  1147. package/dist/codex/generated/v2/RemoteControlDisableParams.d.ts.map +1 -0
  1148. package/dist/codex/generated/v2/RemoteControlDisableResponse.d.ts +8 -0
  1149. package/dist/codex/generated/v2/RemoteControlDisableResponse.d.ts.map +1 -0
  1150. package/dist/codex/generated/v2/RemoteControlEnableParams.d.ts +4 -0
  1151. package/dist/codex/generated/v2/RemoteControlEnableParams.d.ts.map +1 -0
  1152. package/dist/codex/generated/v2/RemoteControlEnableResponse.d.ts +8 -0
  1153. package/dist/codex/generated/v2/RemoteControlEnableResponse.d.ts.map +1 -0
  1154. package/dist/codex/generated/v2/RemoteControlPairingStartParams.d.ts +4 -0
  1155. package/dist/codex/generated/v2/RemoteControlPairingStartParams.d.ts.map +1 -0
  1156. package/dist/codex/generated/v2/RemoteControlPairingStartResponse.d.ts +7 -0
  1157. package/dist/codex/generated/v2/RemoteControlPairingStartResponse.d.ts.map +1 -0
  1158. package/dist/codex/generated/v2/RemoteControlPairingStatusParams.d.ts +5 -0
  1159. package/dist/codex/generated/v2/RemoteControlPairingStatusParams.d.ts.map +1 -0
  1160. package/dist/codex/generated/v2/RemoteControlPairingStatusResponse.d.ts +4 -0
  1161. package/dist/codex/generated/v2/RemoteControlPairingStatusResponse.d.ts.map +1 -0
  1162. package/dist/codex/generated/v2/RemoteControlStatusChangedNotification.d.ts +11 -0
  1163. package/dist/codex/generated/v2/RemoteControlStatusChangedNotification.d.ts.map +1 -0
  1164. package/dist/codex/generated/v2/RemoteControlStatusReadResponse.d.ts +8 -0
  1165. package/dist/codex/generated/v2/RemoteControlStatusReadResponse.d.ts.map +1 -0
  1166. package/dist/codex/generated/v2/RequestPermissionProfile.d.ts +7 -0
  1167. package/dist/codex/generated/v2/RequestPermissionProfile.d.ts.map +1 -0
  1168. package/dist/codex/generated/v2/ResidencyRequirement.d.ts +2 -0
  1169. package/dist/codex/generated/v2/ResidencyRequirement.d.ts.map +1 -0
  1170. package/dist/codex/generated/v2/ResponseUsageMetadata.d.ts +9 -0
  1171. package/dist/codex/generated/v2/ResponseUsageMetadata.d.ts.map +1 -0
  1172. package/dist/codex/generated/v2/ReviewDelivery.d.ts +2 -0
  1173. package/dist/codex/generated/v2/ReviewDelivery.d.ts.map +1 -0
  1174. package/dist/codex/generated/v2/ReviewStartParams.d.ts +14 -0
  1175. package/dist/codex/generated/v2/ReviewStartParams.d.ts.map +1 -0
  1176. package/dist/codex/generated/v2/ReviewStartResponse.d.ts +12 -0
  1177. package/dist/codex/generated/v2/ReviewStartResponse.d.ts.map +1 -0
  1178. package/dist/codex/generated/v2/ReviewTarget.d.ts +17 -0
  1179. package/dist/codex/generated/v2/ReviewTarget.d.ts.map +1 -0
  1180. package/dist/codex/generated/v2/SandboxMode.d.ts +2 -0
  1181. package/dist/codex/generated/v2/SandboxMode.d.ts.map +1 -0
  1182. package/dist/codex/generated/v2/SandboxPolicy.d.ts +18 -0
  1183. package/dist/codex/generated/v2/SandboxPolicy.d.ts.map +1 -0
  1184. package/dist/codex/generated/v2/SandboxWorkspaceWrite.d.ts +7 -0
  1185. package/dist/codex/generated/v2/SandboxWorkspaceWrite.d.ts.map +1 -0
  1186. package/dist/codex/generated/v2/ScheduledTaskSchedule.d.ts +17 -0
  1187. package/dist/codex/generated/v2/ScheduledTaskSchedule.d.ts.map +1 -0
  1188. package/dist/codex/generated/v2/ScheduledTaskSummary.d.ts +8 -0
  1189. package/dist/codex/generated/v2/ScheduledTaskSummary.d.ts.map +1 -0
  1190. package/dist/codex/generated/v2/ScheduledTaskWeekday.d.ts +2 -0
  1191. package/dist/codex/generated/v2/ScheduledTaskWeekday.d.ts.map +1 -0
  1192. package/dist/codex/generated/v2/SelectedCapabilityRoot.d.ts +15 -0
  1193. package/dist/codex/generated/v2/SelectedCapabilityRoot.d.ts.map +1 -0
  1194. package/dist/codex/generated/v2/SendAddCreditsNudgeEmailParams.d.ts +5 -0
  1195. package/dist/codex/generated/v2/SendAddCreditsNudgeEmailParams.d.ts.map +1 -0
  1196. package/dist/codex/generated/v2/SendAddCreditsNudgeEmailResponse.d.ts +5 -0
  1197. package/dist/codex/generated/v2/SendAddCreditsNudgeEmailResponse.d.ts.map +1 -0
  1198. package/dist/codex/generated/v2/ServerDiagnosticsGauge.d.ts +5 -0
  1199. package/dist/codex/generated/v2/ServerDiagnosticsGauge.d.ts.map +1 -0
  1200. package/dist/codex/generated/v2/ServerDiagnosticsParams.d.ts +2 -0
  1201. package/dist/codex/generated/v2/ServerDiagnosticsParams.d.ts.map +1 -0
  1202. package/dist/codex/generated/v2/ServerDiagnosticsProcess.d.ts +6 -0
  1203. package/dist/codex/generated/v2/ServerDiagnosticsProcess.d.ts.map +1 -0
  1204. package/dist/codex/generated/v2/ServerDiagnosticsResponse.d.ts +7 -0
  1205. package/dist/codex/generated/v2/ServerDiagnosticsResponse.d.ts.map +1 -0
  1206. package/dist/codex/generated/v2/ServerRequestResolvedNotification.d.ts +6 -0
  1207. package/dist/codex/generated/v2/ServerRequestResolvedNotification.d.ts.map +1 -0
  1208. package/dist/codex/generated/v2/SessionMigration.d.ts +6 -0
  1209. package/dist/codex/generated/v2/SessionMigration.d.ts.map +1 -0
  1210. package/dist/codex/generated/v2/SessionSource.d.ts +7 -0
  1211. package/dist/codex/generated/v2/SessionSource.d.ts.map +1 -0
  1212. package/dist/codex/generated/v2/SkillDependencies.d.ts +5 -0
  1213. package/dist/codex/generated/v2/SkillDependencies.d.ts.map +1 -0
  1214. package/dist/codex/generated/v2/SkillErrorInfo.d.ts +5 -0
  1215. package/dist/codex/generated/v2/SkillErrorInfo.d.ts.map +1 -0
  1216. package/dist/codex/generated/v2/SkillInterface.d.ts +18 -0
  1217. package/dist/codex/generated/v2/SkillInterface.d.ts.map +1 -0
  1218. package/dist/codex/generated/v2/SkillMetadata.d.ts +22 -0
  1219. package/dist/codex/generated/v2/SkillMetadata.d.ts.map +1 -0
  1220. package/dist/codex/generated/v2/SkillMigration.d.ts +4 -0
  1221. package/dist/codex/generated/v2/SkillMigration.d.ts.map +1 -0
  1222. package/dist/codex/generated/v2/SkillScope.d.ts +2 -0
  1223. package/dist/codex/generated/v2/SkillScope.d.ts.map +1 -0
  1224. package/dist/codex/generated/v2/SkillSummary.d.ts +11 -0
  1225. package/dist/codex/generated/v2/SkillSummary.d.ts.map +1 -0
  1226. package/dist/codex/generated/v2/SkillToolDependency.d.ts +9 -0
  1227. package/dist/codex/generated/v2/SkillToolDependency.d.ts.map +1 -0
  1228. package/dist/codex/generated/v2/SkillsChangedNotification.d.ts +8 -0
  1229. package/dist/codex/generated/v2/SkillsChangedNotification.d.ts.map +1 -0
  1230. package/dist/codex/generated/v2/SkillsConfigWriteParams.d.ts +13 -0
  1231. package/dist/codex/generated/v2/SkillsConfigWriteParams.d.ts.map +1 -0
  1232. package/dist/codex/generated/v2/SkillsConfigWriteResponse.d.ts +4 -0
  1233. package/dist/codex/generated/v2/SkillsConfigWriteResponse.d.ts.map +1 -0
  1234. package/dist/codex/generated/v2/SkillsExtraRootsSetParams.d.ts +5 -0
  1235. package/dist/codex/generated/v2/SkillsExtraRootsSetParams.d.ts.map +1 -0
  1236. package/dist/codex/generated/v2/SkillsExtraRootsSetResponse.d.ts +2 -0
  1237. package/dist/codex/generated/v2/SkillsExtraRootsSetResponse.d.ts.map +1 -0
  1238. package/dist/codex/generated/v2/SkillsListEntry.d.ts +8 -0
  1239. package/dist/codex/generated/v2/SkillsListEntry.d.ts.map +1 -0
  1240. package/dist/codex/generated/v2/SkillsListParams.d.ts +11 -0
  1241. package/dist/codex/generated/v2/SkillsListParams.d.ts.map +1 -0
  1242. package/dist/codex/generated/v2/SkillsListResponse.d.ts +5 -0
  1243. package/dist/codex/generated/v2/SkillsListResponse.d.ts.map +1 -0
  1244. package/dist/codex/generated/v2/SortDirection.d.ts +2 -0
  1245. package/dist/codex/generated/v2/SortDirection.d.ts.map +1 -0
  1246. package/dist/codex/generated/v2/SpendControlLimitSnapshot.d.ts +7 -0
  1247. package/dist/codex/generated/v2/SpendControlLimitSnapshot.d.ts.map +1 -0
  1248. package/dist/codex/generated/v2/StrictReviewRequiredNotification.d.ts +9 -0
  1249. package/dist/codex/generated/v2/StrictReviewRequiredNotification.d.ts.map +1 -0
  1250. package/dist/codex/generated/v2/SubAgentActivityKind.d.ts +2 -0
  1251. package/dist/codex/generated/v2/SubAgentActivityKind.d.ts.map +1 -0
  1252. package/dist/codex/generated/v2/SubagentMigration.d.ts +4 -0
  1253. package/dist/codex/generated/v2/SubagentMigration.d.ts.map +1 -0
  1254. package/dist/codex/generated/v2/TerminalInteractionNotification.d.ts +8 -0
  1255. package/dist/codex/generated/v2/TerminalInteractionNotification.d.ts.map +1 -0
  1256. package/dist/codex/generated/v2/TextElement.d.ts +12 -0
  1257. package/dist/codex/generated/v2/TextElement.d.ts.map +1 -0
  1258. package/dist/codex/generated/v2/TextPosition.d.ts +11 -0
  1259. package/dist/codex/generated/v2/TextPosition.d.ts.map +1 -0
  1260. package/dist/codex/generated/v2/TextRange.d.ts +6 -0
  1261. package/dist/codex/generated/v2/TextRange.d.ts.map +1 -0
  1262. package/dist/codex/generated/v2/Thread.d.ts +151 -0
  1263. package/dist/codex/generated/v2/Thread.d.ts.map +1 -0
  1264. package/dist/codex/generated/v2/ThreadActiveFlag.d.ts +2 -0
  1265. package/dist/codex/generated/v2/ThreadActiveFlag.d.ts.map +1 -0
  1266. package/dist/codex/generated/v2/ThreadApproveGuardianDeniedActionParams.d.ts +9 -0
  1267. package/dist/codex/generated/v2/ThreadApproveGuardianDeniedActionParams.d.ts.map +1 -0
  1268. package/dist/codex/generated/v2/ThreadApproveGuardianDeniedActionResponse.d.ts +2 -0
  1269. package/dist/codex/generated/v2/ThreadApproveGuardianDeniedActionResponse.d.ts.map +1 -0
  1270. package/dist/codex/generated/v2/ThreadArchiveParams.d.ts +4 -0
  1271. package/dist/codex/generated/v2/ThreadArchiveParams.d.ts.map +1 -0
  1272. package/dist/codex/generated/v2/ThreadArchiveResponse.d.ts +2 -0
  1273. package/dist/codex/generated/v2/ThreadArchiveResponse.d.ts.map +1 -0
  1274. package/dist/codex/generated/v2/ThreadArchivedNotification.d.ts +4 -0
  1275. package/dist/codex/generated/v2/ThreadArchivedNotification.d.ts.map +1 -0
  1276. package/dist/codex/generated/v2/ThreadBackgroundTerminal.d.ts +11 -0
  1277. package/dist/codex/generated/v2/ThreadBackgroundTerminal.d.ts.map +1 -0
  1278. package/dist/codex/generated/v2/ThreadBackgroundTerminalsCleanParams.d.ts +4 -0
  1279. package/dist/codex/generated/v2/ThreadBackgroundTerminalsCleanParams.d.ts.map +1 -0
  1280. package/dist/codex/generated/v2/ThreadBackgroundTerminalsCleanResponse.d.ts +2 -0
  1281. package/dist/codex/generated/v2/ThreadBackgroundTerminalsCleanResponse.d.ts.map +1 -0
  1282. package/dist/codex/generated/v2/ThreadBackgroundTerminalsListParams.d.ts +12 -0
  1283. package/dist/codex/generated/v2/ThreadBackgroundTerminalsListParams.d.ts.map +1 -0
  1284. package/dist/codex/generated/v2/ThreadBackgroundTerminalsListResponse.d.ts +10 -0
  1285. package/dist/codex/generated/v2/ThreadBackgroundTerminalsListResponse.d.ts.map +1 -0
  1286. package/dist/codex/generated/v2/ThreadBackgroundTerminalsTerminateParams.d.ts +5 -0
  1287. package/dist/codex/generated/v2/ThreadBackgroundTerminalsTerminateParams.d.ts.map +1 -0
  1288. package/dist/codex/generated/v2/ThreadBackgroundTerminalsTerminateResponse.d.ts +4 -0
  1289. package/dist/codex/generated/v2/ThreadBackgroundTerminalsTerminateResponse.d.ts.map +1 -0
  1290. package/dist/codex/generated/v2/ThreadClosedNotification.d.ts +4 -0
  1291. package/dist/codex/generated/v2/ThreadClosedNotification.d.ts.map +1 -0
  1292. package/dist/codex/generated/v2/ThreadCompactStartParams.d.ts +4 -0
  1293. package/dist/codex/generated/v2/ThreadCompactStartParams.d.ts.map +1 -0
  1294. package/dist/codex/generated/v2/ThreadCompactStartResponse.d.ts +2 -0
  1295. package/dist/codex/generated/v2/ThreadCompactStartResponse.d.ts.map +1 -0
  1296. package/dist/codex/generated/v2/ThreadDecrementElicitationParams.d.ts +10 -0
  1297. package/dist/codex/generated/v2/ThreadDecrementElicitationParams.d.ts.map +1 -0
  1298. package/dist/codex/generated/v2/ThreadDecrementElicitationResponse.d.ts +14 -0
  1299. package/dist/codex/generated/v2/ThreadDecrementElicitationResponse.d.ts.map +1 -0
  1300. package/dist/codex/generated/v2/ThreadDeleteParams.d.ts +4 -0
  1301. package/dist/codex/generated/v2/ThreadDeleteParams.d.ts.map +1 -0
  1302. package/dist/codex/generated/v2/ThreadDeleteResponse.d.ts +2 -0
  1303. package/dist/codex/generated/v2/ThreadDeleteResponse.d.ts.map +1 -0
  1304. package/dist/codex/generated/v2/ThreadDeletedNotification.d.ts +4 -0
  1305. package/dist/codex/generated/v2/ThreadDeletedNotification.d.ts.map +1 -0
  1306. package/dist/codex/generated/v2/ThreadEnvironment.d.ts +10 -0
  1307. package/dist/codex/generated/v2/ThreadEnvironment.d.ts.map +1 -0
  1308. package/dist/codex/generated/v2/ThreadExtra.d.ts +5 -0
  1309. package/dist/codex/generated/v2/ThreadExtra.d.ts.map +1 -0
  1310. package/dist/codex/generated/v2/ThreadForkParams.d.ts +84 -0
  1311. package/dist/codex/generated/v2/ThreadForkParams.d.ts.map +1 -0
  1312. package/dist/codex/generated/v2/ThreadForkResponse.d.ts +46 -0
  1313. package/dist/codex/generated/v2/ThreadForkResponse.d.ts.map +1 -0
  1314. package/dist/codex/generated/v2/ThreadGoal.d.ts +12 -0
  1315. package/dist/codex/generated/v2/ThreadGoal.d.ts.map +1 -0
  1316. package/dist/codex/generated/v2/ThreadGoalClearParams.d.ts +4 -0
  1317. package/dist/codex/generated/v2/ThreadGoalClearParams.d.ts.map +1 -0
  1318. package/dist/codex/generated/v2/ThreadGoalClearResponse.d.ts +4 -0
  1319. package/dist/codex/generated/v2/ThreadGoalClearResponse.d.ts.map +1 -0
  1320. package/dist/codex/generated/v2/ThreadGoalClearedNotification.d.ts +4 -0
  1321. package/dist/codex/generated/v2/ThreadGoalClearedNotification.d.ts.map +1 -0
  1322. package/dist/codex/generated/v2/ThreadGoalGetParams.d.ts +4 -0
  1323. package/dist/codex/generated/v2/ThreadGoalGetParams.d.ts.map +1 -0
  1324. package/dist/codex/generated/v2/ThreadGoalGetResponse.d.ts +5 -0
  1325. package/dist/codex/generated/v2/ThreadGoalGetResponse.d.ts.map +1 -0
  1326. package/dist/codex/generated/v2/ThreadGoalSetParams.d.ts +8 -0
  1327. package/dist/codex/generated/v2/ThreadGoalSetParams.d.ts.map +1 -0
  1328. package/dist/codex/generated/v2/ThreadGoalSetResponse.d.ts +5 -0
  1329. package/dist/codex/generated/v2/ThreadGoalSetResponse.d.ts.map +1 -0
  1330. package/dist/codex/generated/v2/ThreadGoalStatus.d.ts +2 -0
  1331. package/dist/codex/generated/v2/ThreadGoalStatus.d.ts.map +1 -0
  1332. package/dist/codex/generated/v2/ThreadGoalUpdatedNotification.d.ts +7 -0
  1333. package/dist/codex/generated/v2/ThreadGoalUpdatedNotification.d.ts.map +1 -0
  1334. package/dist/codex/generated/v2/ThreadHistoryMode.d.ts +2 -0
  1335. package/dist/codex/generated/v2/ThreadHistoryMode.d.ts.map +1 -0
  1336. package/dist/codex/generated/v2/ThreadIncrementElicitationParams.d.ts +10 -0
  1337. package/dist/codex/generated/v2/ThreadIncrementElicitationParams.d.ts.map +1 -0
  1338. package/dist/codex/generated/v2/ThreadIncrementElicitationResponse.d.ts +14 -0
  1339. package/dist/codex/generated/v2/ThreadIncrementElicitationResponse.d.ts.map +1 -0
  1340. package/dist/codex/generated/v2/ThreadInjectItemsParams.d.ts +9 -0
  1341. package/dist/codex/generated/v2/ThreadInjectItemsParams.d.ts.map +1 -0
  1342. package/dist/codex/generated/v2/ThreadInjectItemsResponse.d.ts +2 -0
  1343. package/dist/codex/generated/v2/ThreadInjectItemsResponse.d.ts.map +1 -0
  1344. package/dist/codex/generated/v2/ThreadItem.d.ts +211 -0
  1345. package/dist/codex/generated/v2/ThreadItem.d.ts.map +1 -0
  1346. package/dist/codex/generated/v2/ThreadItemEntry.d.ts +9 -0
  1347. package/dist/codex/generated/v2/ThreadItemEntry.d.ts.map +1 -0
  1348. package/dist/codex/generated/v2/ThreadItemsListParams.d.ts +21 -0
  1349. package/dist/codex/generated/v2/ThreadItemsListParams.d.ts.map +1 -0
  1350. package/dist/codex/generated/v2/ThreadItemsListResponse.d.ts +15 -0
  1351. package/dist/codex/generated/v2/ThreadItemsListResponse.d.ts.map +1 -0
  1352. package/dist/codex/generated/v2/ThreadListParams.d.ts +77 -0
  1353. package/dist/codex/generated/v2/ThreadListParams.d.ts.map +1 -0
  1354. package/dist/codex/generated/v2/ThreadListResponse.d.ts +17 -0
  1355. package/dist/codex/generated/v2/ThreadListResponse.d.ts.map +1 -0
  1356. package/dist/codex/generated/v2/ThreadLoadedListParams.d.ts +11 -0
  1357. package/dist/codex/generated/v2/ThreadLoadedListParams.d.ts.map +1 -0
  1358. package/dist/codex/generated/v2/ThreadLoadedListResponse.d.ts +12 -0
  1359. package/dist/codex/generated/v2/ThreadLoadedListResponse.d.ts.map +1 -0
  1360. package/dist/codex/generated/v2/ThreadMemoryModeSetParams.d.ts +6 -0
  1361. package/dist/codex/generated/v2/ThreadMemoryModeSetParams.d.ts.map +1 -0
  1362. package/dist/codex/generated/v2/ThreadMemoryModeSetResponse.d.ts +2 -0
  1363. package/dist/codex/generated/v2/ThreadMemoryModeSetResponse.d.ts.map +1 -0
  1364. package/dist/codex/generated/v2/ThreadMetadataGitInfoUpdateParams.d.ts +18 -0
  1365. package/dist/codex/generated/v2/ThreadMetadataGitInfoUpdateParams.d.ts.map +1 -0
  1366. package/dist/codex/generated/v2/ThreadMetadataUpdateParams.d.ts +22 -0
  1367. package/dist/codex/generated/v2/ThreadMetadataUpdateParams.d.ts.map +1 -0
  1368. package/dist/codex/generated/v2/ThreadMetadataUpdateResponse.d.ts +5 -0
  1369. package/dist/codex/generated/v2/ThreadMetadataUpdateResponse.d.ts.map +1 -0
  1370. package/dist/codex/generated/v2/ThreadNameUpdatedNotification.d.ts +5 -0
  1371. package/dist/codex/generated/v2/ThreadNameUpdatedNotification.d.ts.map +1 -0
  1372. package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.d.ts +5 -0
  1373. package/dist/codex/generated/v2/ThreadProjectUpdatedNotification.d.ts.map +1 -0
  1374. package/dist/codex/generated/v2/ThreadQueueAddParams.d.ts +7 -0
  1375. package/dist/codex/generated/v2/ThreadQueueAddParams.d.ts.map +1 -0
  1376. package/dist/codex/generated/v2/ThreadQueueAddResponse.d.ts +5 -0
  1377. package/dist/codex/generated/v2/ThreadQueueAddResponse.d.ts.map +1 -0
  1378. package/dist/codex/generated/v2/ThreadQueueChangedNotification.d.ts +4 -0
  1379. package/dist/codex/generated/v2/ThreadQueueChangedNotification.d.ts.map +1 -0
  1380. package/dist/codex/generated/v2/ThreadQueueDeleteParams.d.ts +5 -0
  1381. package/dist/codex/generated/v2/ThreadQueueDeleteParams.d.ts.map +1 -0
  1382. package/dist/codex/generated/v2/ThreadQueueDeleteResponse.d.ts +4 -0
  1383. package/dist/codex/generated/v2/ThreadQueueDeleteResponse.d.ts.map +1 -0
  1384. package/dist/codex/generated/v2/ThreadQueueListParams.d.ts +12 -0
  1385. package/dist/codex/generated/v2/ThreadQueueListParams.d.ts.map +1 -0
  1386. package/dist/codex/generated/v2/ThreadQueueListResponse.d.ts +9 -0
  1387. package/dist/codex/generated/v2/ThreadQueueListResponse.d.ts.map +1 -0
  1388. package/dist/codex/generated/v2/ThreadQueueReorderParams.d.ts +5 -0
  1389. package/dist/codex/generated/v2/ThreadQueueReorderParams.d.ts.map +1 -0
  1390. package/dist/codex/generated/v2/ThreadQueueReorderResponse.d.ts +2 -0
  1391. package/dist/codex/generated/v2/ThreadQueueReorderResponse.d.ts.map +1 -0
  1392. package/dist/codex/generated/v2/ThreadQueueStartParams.d.ts +5 -0
  1393. package/dist/codex/generated/v2/ThreadQueueStartParams.d.ts.map +1 -0
  1394. package/dist/codex/generated/v2/ThreadQueueStartResponse.d.ts +5 -0
  1395. package/dist/codex/generated/v2/ThreadQueueStartResponse.d.ts.map +1 -0
  1396. package/dist/codex/generated/v2/ThreadQueueUpdateParams.d.ts +7 -0
  1397. package/dist/codex/generated/v2/ThreadQueueUpdateParams.d.ts.map +1 -0
  1398. package/dist/codex/generated/v2/ThreadQueueUpdateResponse.d.ts +5 -0
  1399. package/dist/codex/generated/v2/ThreadQueueUpdateResponse.d.ts.map +1 -0
  1400. package/dist/codex/generated/v2/ThreadReadParams.d.ts +11 -0
  1401. package/dist/codex/generated/v2/ThreadReadParams.d.ts.map +1 -0
  1402. package/dist/codex/generated/v2/ThreadReadResponse.d.ts +5 -0
  1403. package/dist/codex/generated/v2/ThreadReadResponse.d.ts.map +1 -0
  1404. package/dist/codex/generated/v2/ThreadRealtimeAppendAudioParams.d.ts +9 -0
  1405. package/dist/codex/generated/v2/ThreadRealtimeAppendAudioParams.d.ts.map +1 -0
  1406. package/dist/codex/generated/v2/ThreadRealtimeAppendAudioResponse.d.ts +5 -0
  1407. package/dist/codex/generated/v2/ThreadRealtimeAppendAudioResponse.d.ts.map +1 -0
  1408. package/dist/codex/generated/v2/ThreadRealtimeAppendSpeechParams.d.ts +8 -0
  1409. package/dist/codex/generated/v2/ThreadRealtimeAppendSpeechParams.d.ts.map +1 -0
  1410. package/dist/codex/generated/v2/ThreadRealtimeAppendSpeechResponse.d.ts +5 -0
  1411. package/dist/codex/generated/v2/ThreadRealtimeAppendSpeechResponse.d.ts.map +1 -0
  1412. package/dist/codex/generated/v2/ThreadRealtimeAppendTextParams.d.ts +10 -0
  1413. package/dist/codex/generated/v2/ThreadRealtimeAppendTextParams.d.ts.map +1 -0
  1414. package/dist/codex/generated/v2/ThreadRealtimeAppendTextResponse.d.ts +5 -0
  1415. package/dist/codex/generated/v2/ThreadRealtimeAppendTextResponse.d.ts.map +1 -0
  1416. package/dist/codex/generated/v2/ThreadRealtimeAudioChunk.d.ts +11 -0
  1417. package/dist/codex/generated/v2/ThreadRealtimeAudioChunk.d.ts.map +1 -0
  1418. package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.d.ts +12 -0
  1419. package/dist/codex/generated/v2/ThreadRealtimeBemItemPresentation.d.ts.map +1 -0
  1420. package/dist/codex/generated/v2/ThreadRealtimeClosedNotification.d.ts +8 -0
  1421. package/dist/codex/generated/v2/ThreadRealtimeClosedNotification.d.ts.map +1 -0
  1422. package/dist/codex/generated/v2/ThreadRealtimeErrorNotification.d.ts +8 -0
  1423. package/dist/codex/generated/v2/ThreadRealtimeErrorNotification.d.ts.map +1 -0
  1424. package/dist/codex/generated/v2/ThreadRealtimeInitialItem.d.ts +9 -0
  1425. package/dist/codex/generated/v2/ThreadRealtimeInitialItem.d.ts.map +1 -0
  1426. package/dist/codex/generated/v2/ThreadRealtimeItem.d.ts +25 -0
  1427. package/dist/codex/generated/v2/ThreadRealtimeItem.d.ts.map +1 -0
  1428. package/dist/codex/generated/v2/ThreadRealtimeItemAddedNotification.d.ts +9 -0
  1429. package/dist/codex/generated/v2/ThreadRealtimeItemAddedNotification.d.ts.map +1 -0
  1430. package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.d.ts +9 -0
  1431. package/dist/codex/generated/v2/ThreadRealtimeItemCompletedNotification.d.ts.map +1 -0
  1432. package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.d.ts +9 -0
  1433. package/dist/codex/generated/v2/ThreadRealtimeItemStartedNotification.d.ts.map +1 -0
  1434. package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.d.ts +9 -0
  1435. package/dist/codex/generated/v2/ThreadRealtimeItemTranscriptDeltaNotification.d.ts.map +1 -0
  1436. package/dist/codex/generated/v2/ThreadRealtimeListVoicesParams.d.ts +5 -0
  1437. package/dist/codex/generated/v2/ThreadRealtimeListVoicesParams.d.ts.map +1 -0
  1438. package/dist/codex/generated/v2/ThreadRealtimeListVoicesResponse.d.ts +8 -0
  1439. package/dist/codex/generated/v2/ThreadRealtimeListVoicesResponse.d.ts.map +1 -0
  1440. package/dist/codex/generated/v2/ThreadRealtimeOutputAudioDeltaNotification.d.ts +9 -0
  1441. package/dist/codex/generated/v2/ThreadRealtimeOutputAudioDeltaNotification.d.ts.map +1 -0
  1442. package/dist/codex/generated/v2/ThreadRealtimeSdpNotification.d.ts +8 -0
  1443. package/dist/codex/generated/v2/ThreadRealtimeSdpNotification.d.ts.map +1 -0
  1444. package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.d.ts +2 -0
  1445. package/dist/codex/generated/v2/ThreadRealtimeSessionOutcome.d.ts.map +1 -0
  1446. package/dist/codex/generated/v2/ThreadRealtimeStartParams.d.ts +83 -0
  1447. package/dist/codex/generated/v2/ThreadRealtimeStartParams.d.ts.map +1 -0
  1448. package/dist/codex/generated/v2/ThreadRealtimeStartResponse.d.ts +5 -0
  1449. package/dist/codex/generated/v2/ThreadRealtimeStartResponse.d.ts.map +1 -0
  1450. package/dist/codex/generated/v2/ThreadRealtimeStartTransport.d.ts +20 -0
  1451. package/dist/codex/generated/v2/ThreadRealtimeStartTransport.d.ts.map +1 -0
  1452. package/dist/codex/generated/v2/ThreadRealtimeStartedNotification.d.ts +10 -0
  1453. package/dist/codex/generated/v2/ThreadRealtimeStartedNotification.d.ts.map +1 -0
  1454. package/dist/codex/generated/v2/ThreadRealtimeStopParams.d.ts +7 -0
  1455. package/dist/codex/generated/v2/ThreadRealtimeStopParams.d.ts.map +1 -0
  1456. package/dist/codex/generated/v2/ThreadRealtimeStopResponse.d.ts +5 -0
  1457. package/dist/codex/generated/v2/ThreadRealtimeStopResponse.d.ts.map +1 -0
  1458. package/dist/codex/generated/v2/ThreadRealtimeTranscriptDeltaNotification.d.ts +13 -0
  1459. package/dist/codex/generated/v2/ThreadRealtimeTranscriptDeltaNotification.d.ts.map +1 -0
  1460. package/dist/codex/generated/v2/ThreadRealtimeTranscriptDoneNotification.d.ts +13 -0
  1461. package/dist/codex/generated/v2/ThreadRealtimeTranscriptDoneNotification.d.ts.map +1 -0
  1462. package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.d.ts +2 -0
  1463. package/dist/codex/generated/v2/ThreadRealtimeTranscriptRole.d.ts.map +1 -0
  1464. package/dist/codex/generated/v2/ThreadResumeInitialTurnsPageParams.d.ts +17 -0
  1465. package/dist/codex/generated/v2/ThreadResumeInitialTurnsPageParams.d.ts.map +1 -0
  1466. package/dist/codex/generated/v2/ThreadResumeParams.d.ts +83 -0
  1467. package/dist/codex/generated/v2/ThreadResumeParams.d.ts.map +1 -0
  1468. package/dist/codex/generated/v2/ThreadResumeResponse.d.ts +65 -0
  1469. package/dist/codex/generated/v2/ThreadResumeResponse.d.ts.map +1 -0
  1470. package/dist/codex/generated/v2/ThreadRevertParams.d.ts +13 -0
  1471. package/dist/codex/generated/v2/ThreadRevertParams.d.ts.map +1 -0
  1472. package/dist/codex/generated/v2/ThreadRevertResponse.d.ts +23 -0
  1473. package/dist/codex/generated/v2/ThreadRevertResponse.d.ts.map +1 -0
  1474. package/dist/codex/generated/v2/ThreadRevertedNotification.d.ts +4 -0
  1475. package/dist/codex/generated/v2/ThreadRevertedNotification.d.ts.map +1 -0
  1476. package/dist/codex/generated/v2/ThreadRollbackParams.d.ts +14 -0
  1477. package/dist/codex/generated/v2/ThreadRollbackParams.d.ts.map +1 -0
  1478. package/dist/codex/generated/v2/ThreadRollbackResponse.d.ts +12 -0
  1479. package/dist/codex/generated/v2/ThreadRollbackResponse.d.ts.map +1 -0
  1480. package/dist/codex/generated/v2/ThreadSearchOccurrence.d.ts +18 -0
  1481. package/dist/codex/generated/v2/ThreadSearchOccurrence.d.ts.map +1 -0
  1482. package/dist/codex/generated/v2/ThreadSearchOccurrencesParams.d.ts +20 -0
  1483. package/dist/codex/generated/v2/ThreadSearchOccurrencesParams.d.ts.map +1 -0
  1484. package/dist/codex/generated/v2/ThreadSearchOccurrencesResponse.d.ts +12 -0
  1485. package/dist/codex/generated/v2/ThreadSearchOccurrencesResponse.d.ts.map +1 -0
  1486. package/dist/codex/generated/v2/ThreadSearchParams.d.ts +36 -0
  1487. package/dist/codex/generated/v2/ThreadSearchParams.d.ts.map +1 -0
  1488. package/dist/codex/generated/v2/ThreadSearchResponse.d.ts +17 -0
  1489. package/dist/codex/generated/v2/ThreadSearchResponse.d.ts.map +1 -0
  1490. package/dist/codex/generated/v2/ThreadSearchResult.d.ts +6 -0
  1491. package/dist/codex/generated/v2/ThreadSearchResult.d.ts.map +1 -0
  1492. package/dist/codex/generated/v2/ThreadSearchSortKey.d.ts +2 -0
  1493. package/dist/codex/generated/v2/ThreadSearchSortKey.d.ts.map +1 -0
  1494. package/dist/codex/generated/v2/ThreadSearchTextRange.d.ts +14 -0
  1495. package/dist/codex/generated/v2/ThreadSearchTextRange.d.ts.map +1 -0
  1496. package/dist/codex/generated/v2/ThreadSection.d.ts +19 -0
  1497. package/dist/codex/generated/v2/ThreadSection.d.ts.map +1 -0
  1498. package/dist/codex/generated/v2/ThreadSectionAppearance.d.ts +8 -0
  1499. package/dist/codex/generated/v2/ThreadSectionAppearance.d.ts.map +1 -0
  1500. package/dist/codex/generated/v2/ThreadSectionCreateParams.d.ts +12 -0
  1501. package/dist/codex/generated/v2/ThreadSectionCreateParams.d.ts.map +1 -0
  1502. package/dist/codex/generated/v2/ThreadSectionCreateResponse.d.ts +8 -0
  1503. package/dist/codex/generated/v2/ThreadSectionCreateResponse.d.ts.map +1 -0
  1504. package/dist/codex/generated/v2/ThreadSectionDeleteParams.d.ts +10 -0
  1505. package/dist/codex/generated/v2/ThreadSectionDeleteParams.d.ts.map +1 -0
  1506. package/dist/codex/generated/v2/ThreadSectionDeleteResponse.d.ts +5 -0
  1507. package/dist/codex/generated/v2/ThreadSectionDeleteResponse.d.ts.map +1 -0
  1508. package/dist/codex/generated/v2/ThreadSectionListParams.d.ts +14 -0
  1509. package/dist/codex/generated/v2/ThreadSectionListParams.d.ts.map +1 -0
  1510. package/dist/codex/generated/v2/ThreadSectionListResponse.d.ts +12 -0
  1511. package/dist/codex/generated/v2/ThreadSectionListResponse.d.ts.map +1 -0
  1512. package/dist/codex/generated/v2/ThreadSectionMoveParams.d.ts +18 -0
  1513. package/dist/codex/generated/v2/ThreadSectionMoveParams.d.ts.map +1 -0
  1514. package/dist/codex/generated/v2/ThreadSectionMoveResponse.d.ts +2 -0
  1515. package/dist/codex/generated/v2/ThreadSectionMoveResponse.d.ts.map +1 -0
  1516. package/dist/codex/generated/v2/ThreadSectionUpdateParams.d.ts +19 -0
  1517. package/dist/codex/generated/v2/ThreadSectionUpdateParams.d.ts.map +1 -0
  1518. package/dist/codex/generated/v2/ThreadSectionUpdateResponse.d.ts +8 -0
  1519. package/dist/codex/generated/v2/ThreadSectionUpdateResponse.d.ts.map +1 -0
  1520. package/dist/codex/generated/v2/ThreadSetNameParams.d.ts +5 -0
  1521. package/dist/codex/generated/v2/ThreadSetNameParams.d.ts.map +1 -0
  1522. package/dist/codex/generated/v2/ThreadSetNameResponse.d.ts +2 -0
  1523. package/dist/codex/generated/v2/ThreadSetNameResponse.d.ts.map +1 -0
  1524. package/dist/codex/generated/v2/ThreadSettings.d.ts +29 -0
  1525. package/dist/codex/generated/v2/ThreadSettings.d.ts.map +1 -0
  1526. package/dist/codex/generated/v2/ThreadSettingsUpdateParams.d.ts +65 -0
  1527. package/dist/codex/generated/v2/ThreadSettingsUpdateParams.d.ts.map +1 -0
  1528. package/dist/codex/generated/v2/ThreadSettingsUpdateResponse.d.ts +2 -0
  1529. package/dist/codex/generated/v2/ThreadSettingsUpdateResponse.d.ts.map +1 -0
  1530. package/dist/codex/generated/v2/ThreadSettingsUpdatedNotification.d.ts +6 -0
  1531. package/dist/codex/generated/v2/ThreadSettingsUpdatedNotification.d.ts.map +1 -0
  1532. package/dist/codex/generated/v2/ThreadShellCommandParams.d.ts +17 -0
  1533. package/dist/codex/generated/v2/ThreadShellCommandParams.d.ts.map +1 -0
  1534. package/dist/codex/generated/v2/ThreadShellCommandResponse.d.ts +2 -0
  1535. package/dist/codex/generated/v2/ThreadShellCommandResponse.d.ts.map +1 -0
  1536. package/dist/codex/generated/v2/ThreadSortKey.d.ts +2 -0
  1537. package/dist/codex/generated/v2/ThreadSortKey.d.ts.map +1 -0
  1538. package/dist/codex/generated/v2/ThreadSource.d.ts +2 -0
  1539. package/dist/codex/generated/v2/ThreadSource.d.ts.map +1 -0
  1540. package/dist/codex/generated/v2/ThreadSourceKind.d.ts +2 -0
  1541. package/dist/codex/generated/v2/ThreadSourceKind.d.ts.map +1 -0
  1542. package/dist/codex/generated/v2/ThreadStartParams.d.ts +90 -0
  1543. package/dist/codex/generated/v2/ThreadStartParams.d.ts.map +1 -0
  1544. package/dist/codex/generated/v2/ThreadStartResponse.d.ts +46 -0
  1545. package/dist/codex/generated/v2/ThreadStartResponse.d.ts.map +1 -0
  1546. package/dist/codex/generated/v2/ThreadStartSource.d.ts +2 -0
  1547. package/dist/codex/generated/v2/ThreadStartSource.d.ts.map +1 -0
  1548. package/dist/codex/generated/v2/ThreadStartedNotification.d.ts +5 -0
  1549. package/dist/codex/generated/v2/ThreadStartedNotification.d.ts.map +1 -0
  1550. package/dist/codex/generated/v2/ThreadStatus.d.ts +12 -0
  1551. package/dist/codex/generated/v2/ThreadStatus.d.ts.map +1 -0
  1552. package/dist/codex/generated/v2/ThreadStatusChangedNotification.d.ts +6 -0
  1553. package/dist/codex/generated/v2/ThreadStatusChangedNotification.d.ts.map +1 -0
  1554. package/dist/codex/generated/v2/ThreadTimelineEntry.d.ts +32 -0
  1555. package/dist/codex/generated/v2/ThreadTimelineEntry.d.ts.map +1 -0
  1556. package/dist/codex/generated/v2/ThreadTimelineListParams.d.ts +9 -0
  1557. package/dist/codex/generated/v2/ThreadTimelineListParams.d.ts.map +1 -0
  1558. package/dist/codex/generated/v2/ThreadTimelineListResponse.d.ts +10 -0
  1559. package/dist/codex/generated/v2/ThreadTimelineListResponse.d.ts.map +1 -0
  1560. package/dist/codex/generated/v2/ThreadTokenUsage.d.ts +7 -0
  1561. package/dist/codex/generated/v2/ThreadTokenUsage.d.ts.map +1 -0
  1562. package/dist/codex/generated/v2/ThreadTokenUsageUpdatedNotification.d.ts +7 -0
  1563. package/dist/codex/generated/v2/ThreadTokenUsageUpdatedNotification.d.ts.map +1 -0
  1564. package/dist/codex/generated/v2/ThreadTurnsListParams.d.ts +22 -0
  1565. package/dist/codex/generated/v2/ThreadTurnsListParams.d.ts.map +1 -0
  1566. package/dist/codex/generated/v2/ThreadTurnsListResponse.d.ts +17 -0
  1567. package/dist/codex/generated/v2/ThreadTurnsListResponse.d.ts.map +1 -0
  1568. package/dist/codex/generated/v2/ThreadUnarchiveParams.d.ts +4 -0
  1569. package/dist/codex/generated/v2/ThreadUnarchiveParams.d.ts.map +1 -0
  1570. package/dist/codex/generated/v2/ThreadUnarchiveResponse.d.ts +5 -0
  1571. package/dist/codex/generated/v2/ThreadUnarchiveResponse.d.ts.map +1 -0
  1572. package/dist/codex/generated/v2/ThreadUnarchivedNotification.d.ts +4 -0
  1573. package/dist/codex/generated/v2/ThreadUnarchivedNotification.d.ts.map +1 -0
  1574. package/dist/codex/generated/v2/ThreadUnsubscribeParams.d.ts +4 -0
  1575. package/dist/codex/generated/v2/ThreadUnsubscribeParams.d.ts.map +1 -0
  1576. package/dist/codex/generated/v2/ThreadUnsubscribeResponse.d.ts +5 -0
  1577. package/dist/codex/generated/v2/ThreadUnsubscribeResponse.d.ts.map +1 -0
  1578. package/dist/codex/generated/v2/ThreadUnsubscribeStatus.d.ts +2 -0
  1579. package/dist/codex/generated/v2/ThreadUnsubscribeStatus.d.ts.map +1 -0
  1580. package/dist/codex/generated/v2/ThreadUsage.d.ts +8 -0
  1581. package/dist/codex/generated/v2/ThreadUsage.d.ts.map +1 -0
  1582. package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.d.ts +12 -0
  1583. package/dist/codex/generated/v2/ThreadUsageBreakdownGroup.d.ts.map +1 -0
  1584. package/dist/codex/generated/v2/TokenUsageBreakdown.d.ts +9 -0
  1585. package/dist/codex/generated/v2/TokenUsageBreakdown.d.ts.map +1 -0
  1586. package/dist/codex/generated/v2/ToolRequestUserInputAnswer.d.ts +7 -0
  1587. package/dist/codex/generated/v2/ToolRequestUserInputAnswer.d.ts.map +1 -0
  1588. package/dist/codex/generated/v2/ToolRequestUserInputOption.d.ts +8 -0
  1589. package/dist/codex/generated/v2/ToolRequestUserInputOption.d.ts.map +1 -0
  1590. package/dist/codex/generated/v2/ToolRequestUserInputParams.d.ts +16 -0
  1591. package/dist/codex/generated/v2/ToolRequestUserInputParams.d.ts.map +1 -0
  1592. package/dist/codex/generated/v2/ToolRequestUserInputQuestion.d.ts +13 -0
  1593. package/dist/codex/generated/v2/ToolRequestUserInputQuestion.d.ts.map +1 -0
  1594. package/dist/codex/generated/v2/ToolRequestUserInputResponse.d.ts +10 -0
  1595. package/dist/codex/generated/v2/ToolRequestUserInputResponse.d.ts.map +1 -0
  1596. package/dist/codex/generated/v2/ToolsV2.d.ts +5 -0
  1597. package/dist/codex/generated/v2/ToolsV2.d.ts.map +1 -0
  1598. package/dist/codex/generated/v2/Turn.d.ts +36 -0
  1599. package/dist/codex/generated/v2/Turn.d.ts.map +1 -0
  1600. package/dist/codex/generated/v2/TurnCompletedNotification.d.ts +6 -0
  1601. package/dist/codex/generated/v2/TurnCompletedNotification.d.ts.map +1 -0
  1602. package/dist/codex/generated/v2/TurnDiffUpdatedNotification.d.ts +10 -0
  1603. package/dist/codex/generated/v2/TurnDiffUpdatedNotification.d.ts.map +1 -0
  1604. package/dist/codex/generated/v2/TurnEnvironmentParams.d.ts +10 -0
  1605. package/dist/codex/generated/v2/TurnEnvironmentParams.d.ts.map +1 -0
  1606. package/dist/codex/generated/v2/TurnError.d.ts +12 -0
  1607. package/dist/codex/generated/v2/TurnError.d.ts.map +1 -0
  1608. package/dist/codex/generated/v2/TurnInterruptParams.d.ts +5 -0
  1609. package/dist/codex/generated/v2/TurnInterruptParams.d.ts.map +1 -0
  1610. package/dist/codex/generated/v2/TurnInterruptResponse.d.ts +2 -0
  1611. package/dist/codex/generated/v2/TurnInterruptResponse.d.ts.map +1 -0
  1612. package/dist/codex/generated/v2/TurnItemsView.d.ts +2 -0
  1613. package/dist/codex/generated/v2/TurnItemsView.d.ts.map +1 -0
  1614. package/dist/codex/generated/v2/TurnModerationMetadataNotification.d.ts +7 -0
  1615. package/dist/codex/generated/v2/TurnModerationMetadataNotification.d.ts.map +1 -0
  1616. package/dist/codex/generated/v2/TurnPlanStep.d.ts +6 -0
  1617. package/dist/codex/generated/v2/TurnPlanStep.d.ts.map +1 -0
  1618. package/dist/codex/generated/v2/TurnPlanStepStatus.d.ts +2 -0
  1619. package/dist/codex/generated/v2/TurnPlanStepStatus.d.ts.map +1 -0
  1620. package/dist/codex/generated/v2/TurnPlanUpdatedNotification.d.ts +8 -0
  1621. package/dist/codex/generated/v2/TurnPlanUpdatedNotification.d.ts.map +1 -0
  1622. package/dist/codex/generated/v2/TurnSettingsUpdateParams.d.ts +35 -0
  1623. package/dist/codex/generated/v2/TurnSettingsUpdateParams.d.ts.map +1 -0
  1624. package/dist/codex/generated/v2/TurnSettingsUpdateResponse.d.ts +5 -0
  1625. package/dist/codex/generated/v2/TurnSettingsUpdateResponse.d.ts.map +1 -0
  1626. package/dist/codex/generated/v2/TurnSettingsUpdateStatus.d.ts +2 -0
  1627. package/dist/codex/generated/v2/TurnSettingsUpdateStatus.d.ts.map +1 -0
  1628. package/dist/codex/generated/v2/TurnStartParams.d.ts +128 -0
  1629. package/dist/codex/generated/v2/TurnStartParams.d.ts.map +1 -0
  1630. package/dist/codex/generated/v2/TurnStartResponse.d.ts +5 -0
  1631. package/dist/codex/generated/v2/TurnStartResponse.d.ts.map +1 -0
  1632. package/dist/codex/generated/v2/TurnStartedNotification.d.ts +6 -0
  1633. package/dist/codex/generated/v2/TurnStartedNotification.d.ts.map +1 -0
  1634. package/dist/codex/generated/v2/TurnStatus.d.ts +2 -0
  1635. package/dist/codex/generated/v2/TurnStatus.d.ts.map +1 -0
  1636. package/dist/codex/generated/v2/TurnSteerParams.d.ts +31 -0
  1637. package/dist/codex/generated/v2/TurnSteerParams.d.ts.map +1 -0
  1638. package/dist/codex/generated/v2/TurnSteerResponse.d.ts +4 -0
  1639. package/dist/codex/generated/v2/TurnSteerResponse.d.ts.map +1 -0
  1640. package/dist/codex/generated/v2/TurnToolOutput.d.ts +7 -0
  1641. package/dist/codex/generated/v2/TurnToolOutput.d.ts.map +1 -0
  1642. package/dist/codex/generated/v2/TurnsPage.d.ts +7 -0
  1643. package/dist/codex/generated/v2/TurnsPage.d.ts.map +1 -0
  1644. package/dist/codex/generated/v2/UserInput.d.ts +33 -0
  1645. package/dist/codex/generated/v2/UserInput.d.ts.map +1 -0
  1646. package/dist/codex/generated/v2/UserVerificationCancellationReason.d.ts +2 -0
  1647. package/dist/codex/generated/v2/UserVerificationCancellationReason.d.ts.map +1 -0
  1648. package/dist/codex/generated/v2/UserVerificationDeleteParams.d.ts +2 -0
  1649. package/dist/codex/generated/v2/UserVerificationDeleteParams.d.ts.map +1 -0
  1650. package/dist/codex/generated/v2/UserVerificationDeleteResponse.d.ts +2 -0
  1651. package/dist/codex/generated/v2/UserVerificationDeleteResponse.d.ts.map +1 -0
  1652. package/dist/codex/generated/v2/UserVerificationEnrollParams.d.ts +2 -0
  1653. package/dist/codex/generated/v2/UserVerificationEnrollParams.d.ts.map +1 -0
  1654. package/dist/codex/generated/v2/UserVerificationEnrollResponse.d.ts +4 -0
  1655. package/dist/codex/generated/v2/UserVerificationEnrollResponse.d.ts.map +1 -0
  1656. package/dist/codex/generated/v2/UserVerificationErrorDetails.d.ts +21 -0
  1657. package/dist/codex/generated/v2/UserVerificationErrorDetails.d.ts.map +1 -0
  1658. package/dist/codex/generated/v2/UserVerificationFailureReason.d.ts +2 -0
  1659. package/dist/codex/generated/v2/UserVerificationFailureReason.d.ts.map +1 -0
  1660. package/dist/codex/generated/v2/UserVerificationInvalidRequestReason.d.ts +2 -0
  1661. package/dist/codex/generated/v2/UserVerificationInvalidRequestReason.d.ts.map +1 -0
  1662. package/dist/codex/generated/v2/UserVerificationProof.d.ts +11 -0
  1663. package/dist/codex/generated/v2/UserVerificationProof.d.ts.map +1 -0
  1664. package/dist/codex/generated/v2/UserVerificationRpcError.d.ts +10 -0
  1665. package/dist/codex/generated/v2/UserVerificationRpcError.d.ts.map +1 -0
  1666. package/dist/codex/generated/v2/UserVerificationStatusParams.d.ts +2 -0
  1667. package/dist/codex/generated/v2/UserVerificationStatusParams.d.ts.map +1 -0
  1668. package/dist/codex/generated/v2/UserVerificationStatusResponse.d.ts +10 -0
  1669. package/dist/codex/generated/v2/UserVerificationStatusResponse.d.ts.map +1 -0
  1670. package/dist/codex/generated/v2/UserVerificationUnavailableReason.d.ts +2 -0
  1671. package/dist/codex/generated/v2/UserVerificationUnavailableReason.d.ts.map +1 -0
  1672. package/dist/codex/generated/v2/UserVerificationVerifyParams.d.ts +18 -0
  1673. package/dist/codex/generated/v2/UserVerificationVerifyParams.d.ts.map +1 -0
  1674. package/dist/codex/generated/v2/UserVerificationVerifyResponse.d.ts +5 -0
  1675. package/dist/codex/generated/v2/UserVerificationVerifyResponse.d.ts.map +1 -0
  1676. package/dist/codex/generated/v2/WarningNotification.d.ts +11 -0
  1677. package/dist/codex/generated/v2/WarningNotification.d.ts.map +1 -0
  1678. package/dist/codex/generated/v2/WebSearchAction.d.ts +15 -0
  1679. package/dist/codex/generated/v2/WebSearchAction.d.ts.map +1 -0
  1680. package/dist/codex/generated/v2/WindowsSandboxReadiness.d.ts +2 -0
  1681. package/dist/codex/generated/v2/WindowsSandboxReadiness.d.ts.map +1 -0
  1682. package/dist/codex/generated/v2/WindowsSandboxReadinessResponse.d.ts +5 -0
  1683. package/dist/codex/generated/v2/WindowsSandboxReadinessResponse.d.ts.map +1 -0
  1684. package/dist/codex/generated/v2/WindowsSandboxSetupCompletedNotification.d.ts +7 -0
  1685. package/dist/codex/generated/v2/WindowsSandboxSetupCompletedNotification.d.ts.map +1 -0
  1686. package/dist/codex/generated/v2/WindowsSandboxSetupMode.d.ts +2 -0
  1687. package/dist/codex/generated/v2/WindowsSandboxSetupMode.d.ts.map +1 -0
  1688. package/dist/codex/generated/v2/WindowsSandboxSetupStartParams.d.ts +7 -0
  1689. package/dist/codex/generated/v2/WindowsSandboxSetupStartParams.d.ts.map +1 -0
  1690. package/dist/codex/generated/v2/WindowsSandboxSetupStartResponse.d.ts +4 -0
  1691. package/dist/codex/generated/v2/WindowsSandboxSetupStartResponse.d.ts.map +1 -0
  1692. package/dist/codex/generated/v2/WindowsWorldWritableWarningNotification.d.ts +6 -0
  1693. package/dist/codex/generated/v2/WindowsWorldWritableWarningNotification.d.ts.map +1 -0
  1694. package/dist/codex/generated/v2/WorkspaceMessage.d.ts +15 -0
  1695. package/dist/codex/generated/v2/WorkspaceMessage.d.ts.map +1 -0
  1696. package/dist/codex/generated/v2/WorkspaceMessageType.d.ts +2 -0
  1697. package/dist/codex/generated/v2/WorkspaceMessageType.d.ts.map +1 -0
  1698. package/dist/codex/generated/v2/WriteStatus.d.ts +2 -0
  1699. package/dist/codex/generated/v2/WriteStatus.d.ts.map +1 -0
  1700. package/dist/codex/generated/v2/index.d.ts +747 -0
  1701. package/dist/codex/generated/v2/index.d.ts.map +1 -0
  1702. package/dist/codex/index.d.ts +7 -0
  1703. package/dist/codex/index.d.ts.map +1 -0
  1704. package/dist/codex/method-map.d.ts +966 -0
  1705. package/dist/codex/method-map.d.ts.map +1 -0
  1706. package/dist/codex/schema-version.d.ts +2 -0
  1707. package/dist/codex/schema-version.d.ts.map +1 -0
  1708. package/dist/codex/server-request-map.d.ts +69 -0
  1709. package/dist/codex/server-request-map.d.ts.map +1 -0
  1710. package/dist/codex/wire.d.ts +46 -0
  1711. package/dist/codex/wire.d.ts.map +1 -0
  1712. package/dist/index.d.ts +2 -0
  1713. package/dist/index.d.ts.map +1 -0
  1714. package/dist/index.js +7487 -0
  1715. package/dist/index.js.map +1 -0
  1716. package/dist/node/apple-speech-transcription.d.ts +45 -0
  1717. package/dist/node/apple-speech-transcription.d.ts.map +1 -0
  1718. package/dist/node/codex-app-backend-cache.d.ts +61 -0
  1719. package/dist/node/codex-app-backend-cache.d.ts.map +1 -0
  1720. package/dist/node/codex-app-backend.d.ts +37 -0
  1721. package/dist/node/codex-app-backend.d.ts.map +1 -0
  1722. package/dist/node/codex-approvals.d.ts +8 -0
  1723. package/dist/node/codex-approvals.d.ts.map +1 -0
  1724. package/dist/node/codex-conversation-handle.d.ts +35 -0
  1725. package/dist/node/codex-conversation-handle.d.ts.map +1 -0
  1726. package/dist/node/codex-conversation-history.d.ts +24 -0
  1727. package/dist/node/codex-conversation-history.d.ts.map +1 -0
  1728. package/dist/node/codex-executable.d.ts +21 -0
  1729. package/dist/node/codex-executable.d.ts.map +1 -0
  1730. package/dist/node/codex-markdown-images.d.ts +14 -0
  1731. package/dist/node/codex-markdown-images.d.ts.map +1 -0
  1732. package/dist/node/codex-raw-response-item-adapter.d.ts +14 -0
  1733. package/dist/node/codex-raw-response-item-adapter.d.ts.map +1 -0
  1734. package/dist/node/codex-stdio-transport.d.ts +38 -0
  1735. package/dist/node/codex-stdio-transport.d.ts.map +1 -0
  1736. package/dist/node/codex-surface-approvals-controller.d.ts +33 -0
  1737. package/dist/node/codex-surface-approvals-controller.d.ts.map +1 -0
  1738. package/dist/node/codex-surface-authentication-controller.d.ts +32 -0
  1739. package/dist/node/codex-surface-authentication-controller.d.ts.map +1 -0
  1740. package/dist/node/codex-surface-authentication.d.ts +9 -0
  1741. package/dist/node/codex-surface-authentication.d.ts.map +1 -0
  1742. package/dist/node/codex-surface-catalog-controller.d.ts +47 -0
  1743. package/dist/node/codex-surface-catalog-controller.d.ts.map +1 -0
  1744. package/dist/node/codex-surface-catalog.d.ts +11 -0
  1745. package/dist/node/codex-surface-catalog.d.ts.map +1 -0
  1746. package/dist/node/codex-surface-client-requests-controller.d.ts +40 -0
  1747. package/dist/node/codex-surface-client-requests-controller.d.ts.map +1 -0
  1748. package/dist/node/codex-surface-connection-controller.d.ts +60 -0
  1749. package/dist/node/codex-surface-connection-controller.d.ts.map +1 -0
  1750. package/dist/node/codex-surface-contracts.d.ts +168 -0
  1751. package/dist/node/codex-surface-contracts.d.ts.map +1 -0
  1752. package/dist/node/codex-surface-conversation-settings-controller.d.ts +42 -0
  1753. package/dist/node/codex-surface-conversation-settings-controller.d.ts.map +1 -0
  1754. package/dist/node/codex-surface-conversations-controller.d.ts +52 -0
  1755. package/dist/node/codex-surface-conversations-controller.d.ts.map +1 -0
  1756. package/dist/node/codex-surface-data.d.ts +20 -0
  1757. package/dist/node/codex-surface-data.d.ts.map +1 -0
  1758. package/dist/node/codex-surface-events.d.ts +13 -0
  1759. package/dist/node/codex-surface-events.d.ts.map +1 -0
  1760. package/dist/node/codex-surface-extensions-controller.d.ts +20 -0
  1761. package/dist/node/codex-surface-extensions-controller.d.ts.map +1 -0
  1762. package/dist/node/codex-surface-fork-controller.d.ts +37 -0
  1763. package/dist/node/codex-surface-fork-controller.d.ts.map +1 -0
  1764. package/dist/node/codex-surface-items-controller.d.ts +37 -0
  1765. package/dist/node/codex-surface-items-controller.d.ts.map +1 -0
  1766. package/dist/node/codex-surface-lifecycle-controller.d.ts +58 -0
  1767. package/dist/node/codex-surface-lifecycle-controller.d.ts.map +1 -0
  1768. package/dist/node/codex-surface-mcp.d.ts +28 -0
  1769. package/dist/node/codex-surface-mcp.d.ts.map +1 -0
  1770. package/dist/node/codex-surface-message-state.d.ts +30 -0
  1771. package/dist/node/codex-surface-message-state.d.ts.map +1 -0
  1772. package/dist/node/codex-surface-messages-controller.d.ts +49 -0
  1773. package/dist/node/codex-surface-messages-controller.d.ts.map +1 -0
  1774. package/dist/node/codex-surface-notifications-controller.d.ts +47 -0
  1775. package/dist/node/codex-surface-notifications-controller.d.ts.map +1 -0
  1776. package/dist/node/codex-surface-prompt-history.d.ts +7 -0
  1777. package/dist/node/codex-surface-prompt-history.d.ts.map +1 -0
  1778. package/dist/node/codex-surface-prompts.d.ts +32 -0
  1779. package/dist/node/codex-surface-prompts.d.ts.map +1 -0
  1780. package/dist/node/codex-surface-realtime-session.d.ts +12 -0
  1781. package/dist/node/codex-surface-realtime-session.d.ts.map +1 -0
  1782. package/dist/node/codex-surface-realtime.d.ts +13 -0
  1783. package/dist/node/codex-surface-realtime.d.ts.map +1 -0
  1784. package/dist/node/codex-surface-runtime-controller.d.ts +49 -0
  1785. package/dist/node/codex-surface-runtime-controller.d.ts.map +1 -0
  1786. package/dist/node/codex-surface-runtime.d.ts +44 -0
  1787. package/dist/node/codex-surface-runtime.d.ts.map +1 -0
  1788. package/dist/node/codex-surface-settings.d.ts +27 -0
  1789. package/dist/node/codex-surface-settings.d.ts.map +1 -0
  1790. package/dist/node/codex-surface-subagents.d.ts +6 -0
  1791. package/dist/node/codex-surface-subagents.d.ts.map +1 -0
  1792. package/dist/node/codex-surface-text-generation-controller.d.ts +22 -0
  1793. package/dist/node/codex-surface-text-generation-controller.d.ts.map +1 -0
  1794. package/dist/node/codex-surface-transport-options.d.ts +6 -0
  1795. package/dist/node/codex-surface-transport-options.d.ts.map +1 -0
  1796. package/dist/node/codex-surface-turn-actions-controller.d.ts +44 -0
  1797. package/dist/node/codex-surface-turn-actions-controller.d.ts.map +1 -0
  1798. package/dist/node/codex-surface.d.ts +157 -0
  1799. package/dist/node/codex-surface.d.ts.map +1 -0
  1800. package/dist/node/codex-tool-part-adapter.d.ts +22 -0
  1801. package/dist/node/codex-tool-part-adapter.d.ts.map +1 -0
  1802. package/dist/node/codex-unix-socket-transport.d.ts +40 -0
  1803. package/dist/node/codex-unix-socket-transport.d.ts.map +1 -0
  1804. package/dist/node/index.d.ts +10 -0
  1805. package/dist/node/index.d.ts.map +1 -0
  1806. package/dist/node/tool-output.d.ts +2 -0
  1807. package/dist/node/tool-output.d.ts.map +1 -0
  1808. package/dist/protocol.js +2 -0
  1809. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/node/codex-executable.ts","../src/node/codex-stdio-transport.ts","../src/node/codex-unix-socket-transport.ts","../src/node/codex-surface-prompts.ts","../src/node/codex-surface-realtime.ts","../src/node/codex-surface-realtime-session.ts","../src/node/codex-surface-runtime.ts","../src/node/codex-surface-authentication.ts","../src/node/codex-surface-transport-options.ts","../src/node/codex-surface-authentication-controller.ts","../src/node/codex-conversation-handle.ts","../src/node/tool-output.ts","../src/node/codex-tool-part-adapter.ts","../src/node/codex-surface-message-state.ts","../src/node/codex-conversation-history.ts","../src/node/codex-raw-response-item-adapter.ts","../src/node/codex-surface-events.ts","../src/node/codex-surface-subagents.ts","../src/node/codex-surface-items-controller.ts","../src/node/codex-surface-client-requests-controller.ts","../src/node/codex-surface-catalog.ts","../src/node/codex-surface-settings.ts","../src/node/codex-surface-data.ts","../src/node/codex-surface-catalog-controller.ts","../src/node/codex-approvals.ts","../src/node/codex-surface-approvals-controller.ts","../src/node/codex-surface-mcp.ts","../src/node/codex-surface-extensions-controller.ts","../src/node/codex-surface-conversations-controller.ts","../src/node/codex-surface-conversation-settings-controller.ts","../src/node/codex-surface-turn-actions-controller.ts","../src/node/codex-surface-messages-controller.ts","../src/node/codex-surface-lifecycle-controller.ts","../src/node/codex-surface-notifications-controller.ts","../src/node/codex-surface-runtime-controller.ts","../src/node/codex-surface-connection-controller.ts","../src/node/codex-surface-fork-controller.ts","../src/node/codex-markdown-images.ts","../src/node/codex-surface-prompt-history.ts","../src/node/codex-surface-text-generation-controller.ts","../src/node/codex-surface.ts","../src/node/codex-app-backend-cache.ts","../src/node/codex-app-backend.ts","../src/node/apple-speech-transcription.ts"],"sourcesContent":["import { execFileSync as nodeExecFileSync } from 'node:child_process';\nimport { existsSync as nodeExistsSync, readFileSync as nodeReadFileSync, readdirSync as nodeReaddirSync } from 'node:fs';\nimport { homedir as nodeHomedir } from 'node:os';\nimport path from 'node:path';\n\ntype ExecFileSync = (\n file: string,\n args: string[],\n options?: { encoding?: BufferEncoding; env?: NodeJS.ProcessEnv; stdio?: 'ignore' | 'pipe' },\n) => string | Buffer;\n\nexport type CodexExecutableDiscoveryDependencies = {\n env?: NodeJS.ProcessEnv;\n execFileSync?: ExecFileSync;\n existsSync?: (filePath: string) => boolean;\n homedir?: () => string;\n pathDelimiter?: string;\n platform?: NodeJS.Platform;\n readFileSync?: (filePath: string, encoding: BufferEncoding) => string;\n readdirSync?: (dirPath: string) => string[];\n shell?: string;\n};\n\nexport function discoverCodexExecutable(\n dependencies: CodexExecutableDiscoveryDependencies = {},\n): string | null {\n return resolveExecutable('codex', dependencies);\n}\n\nexport function codexRuntimePathEntries(\n dependencies: CodexExecutableDiscoveryDependencies = {},\n): string[] {\n const delimiter = pathDelimiter(dependencies);\n const env = dependencies.env ?? process.env;\n return unique([\n ...bundledApplicationBinaryPaths(dependencies),\n ...pathEntries(env.PATH, delimiter),\n ...pathEntries(loginShellPath(dependencies), delimiter),\n ...commonUserBinaryPaths(dependencies),\n ...nvmBinaryPaths(dependencies),\n ]);\n}\n\nfunction bundledApplicationBinaryPaths(dependencies: CodexExecutableDiscoveryDependencies): string[] {\n if ((dependencies.platform ?? process.platform) !== 'darwin') return [];\n return [\n '/Applications/ChatGPT.app/Contents/Resources',\n '/Applications/Codex.app/Contents/Resources',\n ].filter((entry) => executableExists(path.join(entry, 'codex'), dependencies));\n}\n\nexport function withCodexRuntimePath(\n env: NodeJS.ProcessEnv | undefined,\n dependencies: CodexExecutableDiscoveryDependencies = {},\n): NodeJS.ProcessEnv {\n const mergedEnv = { ...process.env, ...env };\n return {\n ...mergedEnv,\n PATH: codexRuntimePathEntries({ ...dependencies, env: mergedEnv }).join(pathDelimiter(dependencies)),\n };\n}\n\nfunction resolveExecutable(\n executable: string,\n dependencies: CodexExecutableDiscoveryDependencies,\n): string | null {\n for (const entry of codexRuntimePathEntries(dependencies)) {\n for (const candidate of executableCandidates(executable, dependencies)) {\n const filePath = path.join(entry, candidate);\n if (executableExists(filePath, dependencies)) {\n return filePath;\n }\n }\n }\n return null;\n}\n\nfunction loginShellPath(dependencies: CodexExecutableDiscoveryDependencies): string | null {\n if ((dependencies.platform ?? process.platform) === 'win32') {\n return null;\n }\n\n const shell = dependencies.shell ?? dependencies.env?.SHELL ?? process.env.SHELL ?? '/bin/bash';\n const command = shell.endsWith('/nu') || shell === 'nu' ? 'print $env.PATH' : 'printf \"%s\" \"$PATH\"';\n try {\n return (dependencies.execFileSync ?? nodeExecFileSync)(shell, ['-l', '-c', command], {\n encoding: 'utf8',\n env: dependencies.env ?? process.env,\n stdio: 'pipe',\n }).toString();\n } catch {}\n return null;\n}\n\nfunction commonUserBinaryPaths(dependencies: CodexExecutableDiscoveryDependencies): string[] {\n if ((dependencies.platform ?? process.platform) === 'win32') {\n return [];\n }\n\n const home = homeDir(dependencies);\n return [\n path.join(home, '.local/bin'),\n path.join(home, 'bin'),\n '/opt/homebrew/bin',\n '/usr/local/bin',\n ].filter((entry) => executableExists(entry, dependencies));\n}\n\nfunction nvmBinaryPaths(dependencies: CodexExecutableDiscoveryDependencies): string[] {\n if ((dependencies.platform ?? process.platform) === 'win32') {\n return [];\n }\n return unique([nvmBinaryPathFromCommand(dependencies), nvmBinaryPathFromFiles(dependencies)]);\n}\n\nfunction nvmBinaryPathFromCommand(dependencies: CodexExecutableDiscoveryDependencies): string | null {\n const shell = dependencies.shell ?? dependencies.env?.SHELL ?? process.env.SHELL ?? '/bin/bash';\n try {\n const nodePath = (dependencies.execFileSync ?? nodeExecFileSync)(shell, ['-l', '-c', 'nvm which current'], {\n encoding: 'utf8',\n env: dependencies.env ?? process.env,\n stdio: 'pipe',\n }).toString().trim();\n return executableExists(nodePath, dependencies) ? path.dirname(nodePath) : null;\n } catch {}\n return null;\n}\n\nfunction nvmBinaryPathFromFiles(dependencies: CodexExecutableDiscoveryDependencies): string | null {\n const home = homeDir(dependencies);\n const aliasPath = path.join(home, '.nvm/alias/default');\n const versionsPath = path.join(home, '.nvm/versions/node');\n if (!executableExists(aliasPath, dependencies) || !executableExists(versionsPath, dependencies)) {\n return null;\n }\n\n try {\n let current = (dependencies.readFileSync ?? nodeReadFileSync)(aliasPath, 'utf8').trim();\n if (!current) {\n return null;\n }\n if (!current.startsWith('v')) {\n current = `v${current}`;\n }\n const best = (dependencies.readdirSync ?? nodeReaddirSync)(versionsPath)\n .filter((version) => version.startsWith(current))\n .sort()\n .at(-1);\n return best ? path.join(versionsPath, best, 'bin') : null;\n } catch {}\n return null;\n}\n\nfunction executableCandidates(executable: string, dependencies: CodexExecutableDiscoveryDependencies): string[] {\n if ((dependencies.platform ?? process.platform) !== 'win32' || path.extname(executable)) {\n return [executable];\n }\n const pathExt = dependencies.env?.PATHEXT ?? process.env.PATHEXT ?? '.EXE;.CMD;.BAT;.COM';\n return [executable, ...pathExt.split(';').filter(Boolean).map((extension) => `${executable}${extension.toLowerCase()}`)];\n}\n\nfunction pathEntries(value: string | undefined | null, delimiter: string): string[] {\n return value ? value.split(delimiter).map((entry) => entry.trim()) : [];\n}\n\nfunction unique(entries: Array<string | null | undefined>): string[] {\n return [...new Set(entries.filter((entry): entry is string => Boolean(entry)))];\n}\n\nfunction executableExists(filePath: string, dependencies: CodexExecutableDiscoveryDependencies): boolean {\n return (dependencies.existsSync ?? nodeExistsSync)(filePath);\n}\n\nfunction homeDir(dependencies: CodexExecutableDiscoveryDependencies): string {\n return dependencies.homedir?.() ?? dependencies.env?.HOME ?? process.env.HOME ?? nodeHomedir();\n}\n\nfunction pathDelimiter(dependencies: CodexExecutableDiscoveryDependencies): string {\n return dependencies.pathDelimiter ?? path.delimiter;\n}\n","import { spawn, type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from 'node:child_process';\nimport { constants as bufferConstants } from 'node:buffer';\nimport { RpcTransportProtocolError, type RpcMessage, type RpcTransport } from '../codex/wire';\nimport {\n discoverCodexExecutable,\n withCodexRuntimePath,\n type CodexExecutableDiscoveryDependencies,\n} from './codex-executable';\n\nexport type CodexAppServerExit = {\n code: number | null;\n signal: NodeJS.Signals | null;\n stderr: string;\n};\n\nexport type CodexAppServerStdioTransportOptions = {\n command?: string;\n configOverrides?: string[];\n codexHome?: string;\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n executableDiscovery?: CodexExecutableDiscoveryDependencies;\n onExit?: (exit: CodexAppServerExit) => void;\n onStderr?: (text: string) => void;\n spawnProcess?: typeof spawn;\n shutdownTimeoutMs?: number;\n maxDiagnosticBufferChars?: number;\n maxOutputLineChars?: number;\n};\n\nconst DEFAULT_DIAGNOSTIC_BUFFER_CHARS = 64 * 1024;\nconst DEFAULT_CONFIG_OVERRIDES = ['features.default_mode_request_user_input=true'];\nconst DEFAULT_OUTPUT_LINE_CHARS = Math.min(\n 256 * 1024 * 1024,\n Math.floor(bufferConstants.MAX_STRING_LENGTH / 2),\n);\nconst DEFAULT_SHUTDOWN_TIMEOUT_MS = 12_000;\n\nexport class CodexAppServerStdioTransport implements RpcTransport {\n private child: ChildProcessWithoutNullStreams | null = null;\n private readonly expectedExits = new WeakSet<ChildProcessWithoutNullStreams>();\n private readonly messageListeners = new Set<(message: unknown) => void>();\n private readonly errorListeners = new Set<(error: Error) => void>();\n\n constructor(private readonly options: CodexAppServerStdioTransportOptions = {}) {}\n\n async start(): Promise<void> {\n if (this.child) {\n return;\n }\n\n const env = withCodexRuntimePath(this.options.env, this.options.executableDiscovery);\n const command = this.options.command?.trim()\n || discoverCodexExecutable({ ...this.options.executableDiscovery, env })\n || 'codex';\n const configArgs = [\n ...DEFAULT_CONFIG_OVERRIDES,\n ...(this.options.configOverrides ?? []),\n ].flatMap((override) => ['-c', override]);\n const args = [...configArgs, 'app-server', '--listen', 'stdio://'];\n const processEnv = {\n ...env,\n ...(this.options.codexHome ? { CODEX_HOME: this.options.codexHome } : {}),\n };\n const spawnOptions: SpawnOptionsWithoutStdio = {\n ...(this.options.cwd ? { cwd: this.options.cwd } : {}),\n env: processEnv,\n stdio: 'pipe',\n };\n const child = (this.options.spawnProcess ?? spawn)(command, args, spawnOptions);\n this.child = child;\n let stdoutBuffer = '';\n let discardingOversizedLine = false;\n let stderrBuffer = '';\n const maxDiagnosticBufferChars = Math.max(1, this.options.maxDiagnosticBufferChars ?? DEFAULT_DIAGNOSTIC_BUFFER_CHARS);\n const maxOutputLineChars = Math.max(1, this.options.maxOutputLineChars ?? DEFAULT_OUTPUT_LINE_CHARS);\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n child.stdout.on('data', (chunk: string | Buffer) => {\n let text = chunk.toString();\n if (discardingOversizedLine) {\n const discardedLineEnd = text.indexOf('\\n');\n if (discardedLineEnd < 0) return;\n discardingOversizedLine = false;\n text = text.slice(discardedLineEnd + 1);\n }\n stdoutBuffer += text;\n let newlineIndex = stdoutBuffer.indexOf('\\n');\n while (newlineIndex >= 0) {\n const line = stdoutBuffer.slice(0, newlineIndex).trim();\n stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);\n newlineIndex = stdoutBuffer.indexOf('\\n');\n if (line) {\n if (line.length > maxOutputLineChars) {\n this.emitError(new RpcTransportProtocolError(\n 'Codex app-server output line exceeded the configured limit',\n { requestId: rpcResponseIdFromPrefix(line) },\n ));\n } else {\n this.parseLine(line);\n }\n }\n }\n if (stdoutBuffer.length > maxOutputLineChars) {\n const requestId = rpcResponseIdFromPrefix(stdoutBuffer);\n stdoutBuffer = '';\n discardingOversizedLine = true;\n this.emitError(new RpcTransportProtocolError(\n 'Codex app-server output line exceeded the configured limit',\n { requestId },\n ));\n }\n });\n child.stderr.on('data', (chunk: string | Buffer) => {\n const text = chunk.toString();\n stderrBuffer = appendBounded(stderrBuffer, text, maxDiagnosticBufferChars);\n this.options.onStderr?.(text);\n });\n child.stdin.on('error', (error) => {\n if (this.child !== child || this.expectedExits.has(child)) return;\n this.child = null;\n this.expectedExits.add(child);\n child.kill();\n this.emitError(error);\n });\n child.once('error', (error) => {\n if (this.child === child) {\n this.child = null;\n }\n if (!this.expectedExits.has(child)) {\n this.expectedExits.add(child);\n this.emitError(error);\n }\n });\n child.once('exit', (code, signal) => {\n if (this.child === child) {\n this.child = null;\n }\n const exit = { code, signal, stderr: stderrBuffer.trim() };\n this.options.onExit?.(exit);\n if (!this.expectedExits.has(child)) {\n const status = code ?? signal ?? 'unknown';\n const detail = exit.stderr ? `: ${exit.stderr}` : '';\n this.emitError(new Error(`Codex app-server exited (${status})${detail}`));\n }\n });\n }\n\n send(message: RpcMessage): void {\n if (!this.child) {\n throw new Error('Codex app-server transport is not started');\n }\n this.child.stdin.write(`${JSON.stringify(message)}\\n`);\n }\n\n async close(): Promise<void> {\n const child = this.child;\n this.child = null;\n if (!child) {\n return;\n }\n this.expectedExits.add(child);\n const shutdownTimeoutMs = this.options.shutdownTimeoutMs ?? DEFAULT_SHUTDOWN_TIMEOUT_MS;\n const gracefulExit = waitForExit(child, shutdownTimeoutMs);\n // Stdio app-server shuts its threads down on EOF. SIGTERM bypasses that\n // path and can lose the tail of a rollout that has not been flushed yet.\n child.stdin.end();\n if (await gracefulExit) return;\n\n const signalTimeoutMs = Math.min(shutdownTimeoutMs, 1_000);\n const terminatedExit = waitForExit(child, signalTimeoutMs);\n child.kill();\n if (await terminatedExit) return;\n\n const forcedExit = waitForExit(child, signalTimeoutMs);\n child.kill('SIGKILL');\n if (!await forcedExit) {\n throw new Error('Codex app-server did not exit after SIGKILL');\n }\n }\n\n onMessage(listener: (message: unknown) => void): () => void {\n this.messageListeners.add(listener);\n return () => this.messageListeners.delete(listener);\n }\n\n onError(listener: (error: Error) => void): () => void {\n this.errorListeners.add(listener);\n return () => this.errorListeners.delete(listener);\n }\n\n private parseLine(line: string): void {\n try {\n const message: unknown = JSON.parse(line);\n for (const listener of this.messageListeners) {\n listener(message);\n }\n } catch (error) {\n this.emitError(new RpcTransportProtocolError(\n 'Codex app-server sent malformed JSON',\n { cause: error },\n ));\n }\n }\n\n private emitError(error: Error): void {\n for (const listener of this.errorListeners) {\n listener(error);\n }\n }\n}\n\nfunction appendBounded(current: string, chunk: string, limit: number): string {\n return (current + chunk).slice(-limit);\n}\n\nfunction rpcResponseIdFromPrefix(frame: string): string | number | undefined {\n const match = /^\\s*\\{\\s*\"id\"\\s*:\\s*(?:(-?\\d+)|(\"(?:\\\\.|[^\"\\\\])*\"))/.exec(frame);\n if (!match) return undefined;\n if (match[1] !== undefined) {\n const id = Number(match[1]);\n return Number.isSafeInteger(id) ? id : undefined;\n }\n try {\n return JSON.parse(match[2] as string) as string;\n } catch {}\n return undefined;\n}\n\nfunction waitForExit(child: ChildProcessWithoutNullStreams, timeoutMs: number): Promise<boolean> {\n if (child.exitCode !== null || child.signalCode !== null) return Promise.resolve(true);\n return new Promise((resolve) => {\n const onExit = (): void => {\n clearTimeout(timeout);\n resolve(true);\n };\n const timeout = setTimeout(() => {\n child.off('exit', onExit);\n resolve(false);\n }, Math.max(0, timeoutMs));\n child.once('exit', onExit);\n });\n}\n","import { randomBytes } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { createConnection, type Socket } from 'node:net';\nimport { RpcTransportProtocolError, type RpcMessage, type RpcTransport } from '../codex/wire';\n\nconst DEFAULT_MAX_FRAME_BYTES = 64 * 1024 * 1024;\n\nexport type CodexAppServerUnixSocketTransportOptions = {\n /** Discriminates this opt-in transport from the default spawned stdio transport. */\n type: 'unixSocket';\n /** Absolute path to an app-server control socket. */\n socketPath?: string;\n /** Used to derive the default control socket when socketPath is omitted. */\n codexHome?: string;\n maxFrameBytes?: number;\n};\n\n/**\n * Connects to an already-running Codex app-server listening on a Unix socket.\n * It never owns, starts, or stops the remote server.\n */\nexport class CodexAppServerUnixSocketTransport implements RpcTransport {\n private socket: Socket | null = null;\n private readonly messageListeners = new Set<(message: unknown) => void>();\n private readonly errorListeners = new Set<(error: Error) => void>();\n private handshakeBuffer = Buffer.alloc(0);\n private frameBuffer = Buffer.alloc(0);\n private fragments: Buffer[] = [];\n private fragmentOpcode: number | null = null;\n private started = false;\n private closed = false;\n\n constructor(private readonly options: CodexAppServerUnixSocketTransportOptions) {}\n\n async start(): Promise<void> {\n if (this.started) return;\n this.closed = false;\n const socket = createConnection(this.socketPath());\n this.socket = socket;\n await new Promise<void>((resolve, reject) => {\n const fail = (error: Error): void => {\n cleanup();\n this.socket = null;\n socket.destroy();\n reject(error);\n };\n const onConnect = (): void => {\n socket.write(websocketHandshakeRequest());\n };\n const onData = (chunk: Buffer): void => {\n this.handshakeBuffer = Buffer.concat([this.handshakeBuffer, chunk]);\n const boundary = this.handshakeBuffer.indexOf('\\r\\n\\r\\n');\n if (boundary < 0) return;\n const header = this.handshakeBuffer.subarray(0, boundary).toString('utf8');\n const remainder = this.handshakeBuffer.subarray(boundary + 4);\n this.handshakeBuffer = Buffer.alloc(0);\n if (!/^HTTP\\/1\\.1 101(?: |$)/m.test(header)) {\n fail(new Error(`Codex app-server rejected Unix socket WebSocket upgrade: ${header.split('\\r\\n', 1)[0]}`));\n return;\n }\n cleanup();\n socket.on('data', (data: Buffer) => this.handleFrameData(data));\n socket.on('error', (error) => this.handleSocketError(error));\n socket.on('close', () => this.handleSocketClose());\n this.started = true;\n this.handleFrameData(remainder);\n resolve();\n };\n const cleanup = (): void => {\n socket.off('connect', onConnect);\n socket.off('data', onData);\n socket.off('error', fail);\n socket.off('close', onClose);\n };\n const onClose = (): void => fail(new Error('Codex app-server closed the Unix socket during WebSocket upgrade'));\n socket.once('connect', onConnect);\n socket.on('data', onData);\n socket.once('error', fail);\n socket.once('close', onClose);\n });\n }\n\n send(message: RpcMessage): void {\n if (!this.socket || !this.started) throw new Error('Codex app-server Unix socket transport is not started');\n this.writeFrame(0x1, Buffer.from(JSON.stringify(message)), this.socket);\n }\n\n async close(): Promise<void> {\n this.closed = true;\n this.started = false;\n const socket = this.socket;\n this.socket = null;\n if (!socket) return;\n if (!socket.destroyed) {\n try {\n this.writeFrame(0x8, Buffer.alloc(0), socket);\n } finally {\n socket.end();\n }\n }\n }\n\n onMessage(listener: (message: unknown) => void): () => void {\n this.messageListeners.add(listener);\n return () => this.messageListeners.delete(listener);\n }\n\n onError(listener: (error: Error) => void): () => void {\n this.errorListeners.add(listener);\n return () => this.errorListeners.delete(listener);\n }\n\n private socketPath(): string {\n const explicit = this.options.socketPath?.trim();\n if (explicit) return explicit;\n const home = this.options.codexHome?.trim() || process.env.CODEX_HOME?.trim() || join(homedir(), '.codex');\n return join(home, 'app-server-control', 'app-server-control.sock');\n }\n\n private handleFrameData(chunk: Buffer): void {\n this.frameBuffer = Buffer.concat([this.frameBuffer, chunk]);\n try {\n while (true) {\n const frame = readFrame(this.frameBuffer, this.options.maxFrameBytes ?? DEFAULT_MAX_FRAME_BYTES);\n if (!frame) return;\n this.frameBuffer = this.frameBuffer.subarray(frame.bytesRead);\n this.handleFrame(frame.fin, frame.opcode, frame.payload);\n }\n } catch (error) {\n this.frameBuffer = Buffer.alloc(0);\n this.emitError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n private handleFrame(fin: boolean, opcode: number, payload: Buffer): void {\n if (opcode === 0x8) {\n void this.close();\n return;\n }\n if (opcode === 0x9) {\n if (this.socket && !this.socket.destroyed) this.writeFrame(0xA, payload, this.socket);\n return;\n }\n if (opcode === 0xA) return;\n if (opcode === 0x0) {\n if (this.fragmentOpcode === null) return this.emitError(new RpcTransportProtocolError('Codex app-server sent an unexpected WebSocket continuation frame'));\n this.fragments.push(payload);\n if (!fin) return;\n const initialOpcode = this.fragmentOpcode;\n const complete = Buffer.concat(this.fragments);\n this.fragments = [];\n this.fragmentOpcode = null;\n return this.handleFrame(true, initialOpcode, complete);\n }\n if (opcode !== 0x1 || this.fragmentOpcode !== null) {\n return this.emitError(new RpcTransportProtocolError(`Codex app-server sent unsupported WebSocket opcode ${opcode}`));\n }\n if (!fin) {\n this.fragmentOpcode = opcode;\n this.fragments = [payload];\n return;\n }\n try {\n const message: unknown = JSON.parse(payload.toString('utf8'));\n for (const listener of this.messageListeners) listener(message);\n } catch (error) {\n this.emitError(new RpcTransportProtocolError('Codex app-server sent malformed JSON', { cause: error }));\n }\n }\n\n private writeFrame(opcode: number, payload: Buffer, target: Socket): void {\n target.write(encodeClientFrame(opcode, payload));\n }\n\n private handleSocketError(error: Error): void {\n if (!this.closed) this.emitError(error);\n }\n\n private handleSocketClose(): void {\n this.started = false;\n this.socket = null;\n if (!this.closed) this.emitError(new Error('Codex app-server Unix socket connection closed'));\n }\n\n private emitError(error: Error): void {\n for (const listener of this.errorListeners) listener(error);\n }\n}\n\nfunction websocketHandshakeRequest(): string {\n const key = randomBytes(16).toString('base64');\n return [\n 'GET /rpc HTTP/1.1',\n 'Host: localhost',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Key: ${key}`,\n 'Sec-WebSocket-Version: 13',\n '',\n '',\n ].join('\\r\\n');\n}\n\nfunction encodeClientFrame(opcode: number, payload: Buffer): Buffer {\n const mask = randomBytes(4);\n const header = frameHeader(opcode, payload.length, true);\n const masked = Buffer.from(payload);\n for (let index = 0; index < masked.length; index += 1) masked[index] = (masked[index] ?? 0) ^ (mask[index % 4] ?? 0);\n return Buffer.concat([header, mask, masked]);\n}\n\nfunction frameHeader(opcode: number, length: number, masked: boolean): Buffer {\n const maskBit = masked ? 0x80 : 0;\n if (length < 126) return Buffer.from([0x80 | opcode, maskBit | length]);\n if (length <= 0xffff) {\n const header = Buffer.alloc(4);\n header[0] = 0x80 | opcode;\n header[1] = maskBit | 126;\n header.writeUInt16BE(length, 2);\n return header;\n }\n const header = Buffer.alloc(10);\n header[0] = 0x80 | opcode;\n header[1] = maskBit | 127;\n header.writeBigUInt64BE(BigInt(length), 2);\n return header;\n}\n\nfunction readFrame(buffer: Buffer, maxFrameBytes: number): { fin: boolean; opcode: number; payload: Buffer; bytesRead: number } | null {\n if (buffer.length < 2) return null;\n const firstByte = buffer[0] ?? 0;\n const secondByte = buffer[1] ?? 0;\n const fin = (firstByte & 0x80) !== 0;\n const opcode = firstByte & 0x0f;\n const masked = (secondByte & 0x80) !== 0;\n let length = secondByte & 0x7f;\n let offset = 2;\n if (length === 126) {\n if (buffer.length < offset + 2) return null;\n length = buffer.readUInt16BE(offset);\n offset += 2;\n } else if (length === 127) {\n if (buffer.length < offset + 8) return null;\n const longLength = buffer.readBigUInt64BE(offset);\n if (longLength > BigInt(Number.MAX_SAFE_INTEGER)) throw new RpcTransportProtocolError('Codex app-server sent an oversized WebSocket frame');\n length = Number(longLength);\n offset += 8;\n }\n if (length > maxFrameBytes) throw new RpcTransportProtocolError('Codex app-server WebSocket frame exceeded the configured limit');\n const maskLength = masked ? 4 : 0;\n if (buffer.length < offset + maskLength + length) return null;\n const mask = masked ? buffer.subarray(offset, offset + 4) : undefined;\n offset += maskLength;\n const payload = Buffer.from(buffer.subarray(offset, offset + length));\n if (mask) for (let index = 0; index < payload.length; index += 1) payload[index] = (payload[index] ?? 0) ^ (mask[index % 4] ?? 0);\n return { fin, opcode, payload, bytesRead: offset + length };\n}\n","import type { v2 } from '../codex/index';\nimport type {\n CodexSurfaceReviewTarget,\n CodexSurfaceSkill,\n CodexSurfaceSkillInput,\n SurfaceMessage,\n SurfaceMessageToolPart,\n} from '@codex-app-sdk/core/surface';\n\nexport type GoalSlashCommand =\n | { action: 'clear' }\n | { action: 'edit' }\n | { action: 'set'; objective: string }\n | { action: 'show' }\n | { action: 'unsupported' };\n\nexport function mcpElicitationResponse(\n decision: 'allow' | 'allow_conversation' | 'always_allow' | 'deny',\n): v2.McpServerElicitationRequestResponse {\n switch (decision) {\n case 'allow':\n return { action: 'accept', content: null, _meta: null };\n case 'allow_conversation':\n return { action: 'accept', content: null, _meta: { persist: 'session' } };\n case 'always_allow':\n return { action: 'accept', content: null, _meta: { persist: 'always' } };\n case 'deny':\n return { action: 'decline', content: null, _meta: null };\n }\n}\n\nexport function parsePlanSlashCommand(prompt: string): { prompt: string | null } | null {\n const match = /^\\/plan(?:\\s(.*))?$/s.exec(prompt.trim());\n if (!match) return null;\n const planPrompt = match[1]?.trim() ?? '';\n return { prompt: planPrompt || null };\n}\n\nexport function parseGoalSlashCommand(prompt: string): GoalSlashCommand | null {\n const match = /^\\/goal(?:\\s(.*))?$/s.exec(prompt.trim());\n if (!match) return null;\n const rest = match[1]?.trim() ?? '';\n if (!rest) return { action: 'show' };\n if (rest.toLowerCase() === 'clear') return { action: 'clear' };\n if (rest.toLowerCase() === 'edit') return { action: 'edit' };\n if (rest.toLowerCase() === 'pause' || rest.toLowerCase() === 'resume') return { action: 'unsupported' };\n return { action: 'set', objective: rest };\n}\n\nexport function parseReviewSlashCommand(prompt: string): CodexSurfaceReviewTarget | null {\n const match = /^\\/review(?:\\s(.*))?$/s.exec(prompt.trim());\n if (!match) return null;\n const instructions = match[1]?.trim() ?? '';\n return instructions ? { type: 'custom', instructions } : { type: 'uncommittedChanges' };\n}\n\nexport function normalizeReviewTarget(target: CodexSurfaceReviewTarget): v2.ReviewTarget {\n if (target.type === 'commit') return { ...target, title: target.title ?? null };\n return { ...target };\n}\n\nexport function promptSkillInputsFromText(\n text: string,\n skills: readonly CodexSurfaceSkill[],\n): CodexSurfaceSkillInput[] {\n const names = new Set<string>();\n const pattern = /(?:^|[^\\w.%+-])[$/]([A-Za-z0-9_.-]+)/g;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(text)) !== null) {\n names.add(match[1]!);\n }\n return skills\n .filter((skill) => skill.enabled && names.has(skill.name) && Boolean(skill.path))\n .map((skill) => ({ name: skill.name, path: skill.path }));\n}\n\nexport function validateSkillInputs(\n inputs: readonly CodexSurfaceSkillInput[],\n catalog: readonly CodexSurfaceSkill[],\n): CodexSurfaceSkillInput[] {\n return inputs.map((input) => {\n const match = catalog.find((skill) => (\n skill.enabled\n && skill.name === input.name\n && skill.path === input.path\n ));\n if (!match) {\n throw new Error(`Skill '${input.name}' is not an enabled skill in the Codex catalog`);\n }\n return { name: match.name, path: match.path };\n });\n}\n\nexport function mergeSkillInputs(\n ...groups: readonly (readonly CodexSurfaceSkillInput[])[]\n): CodexSurfaceSkillInput[] {\n const seen = new Set<string>();\n return groups.flatMap((group) => group.filter((skill) => {\n const key = `${skill.name}\\u0000${skill.path}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n }));\n}\n\nexport function findPendingMcpToolPart(\n messages: readonly SurfaceMessage[],\n turnId: string,\n server: string,\n tool: string,\n): SurfaceMessageToolPart | null {\n const running = messages\n .filter((message) => message.metadata?.turnId === turnId)\n .flatMap((message) => message.parts)\n .filter((part): part is SurfaceMessageToolPart => (\n part.type === 'tool' && part.kind === 'mcp' && part.status === 'running'\n ));\n const exact = running.find((part) => {\n const metadataServer = stringValue(part.metadata?.server);\n const metadataTool = stringValue(part.metadata?.tool);\n return (\n (metadataServer === server && metadataTool === tool)\n || part.title.endsWith(`.${tool}`)\n );\n });\n return exact ?? (running.length === 1 ? running[0] ?? null : null);\n}\n\nexport function argumentsPreview(meta: Record<string, unknown>): string {\n if (Array.isArray(meta.tool_params_display)) {\n const lines = meta.tool_params_display.map((entry) => {\n if (!isRecord(entry) || typeof entry.name !== 'string') return '';\n const label = stringValue(entry.display_name) ?? entry.name;\n const value = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value);\n return `${label}: ${value}`;\n }).filter(Boolean);\n if (lines.length > 0) return lines.join('\\n');\n }\n return meta.tool_params === undefined ? '' : JSON.stringify(meta.tool_params, null, 2);\n}\n\nexport function persistSupports(value: unknown, mode: 'always' | 'session'): boolean {\n return value === mode || (Array.isArray(value) && value.includes(mode));\n}\n\nexport function stringValue(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nexport function normalizedConversationId(value: string): string {\n const conversationId = value.trim();\n if (!conversationId) throw new Error('Conversation id cannot be empty');\n return conversationId;\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import type { v2 } from '../codex/index';\nimport type { CodexRealtimeInputAudioChunk } from '@codex-app-sdk/core/surface';\n\nexport function normalizedOptionalRealtimeString(\n value: string | undefined,\n field: string,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== 'string') throw new TypeError(`Realtime ${field} must be a string`);\n const normalized = value.trim();\n if (!normalized) throw new TypeError(`Realtime ${field} cannot be empty`);\n return normalized;\n}\n\nexport function normalizedRealtimeText(value: string, field: string): string {\n if (typeof value !== 'string') throw new TypeError(`Realtime ${field} must be a string`);\n const normalized = value.trim();\n if (!normalized) throw new TypeError(`Realtime ${field} cannot be empty`);\n return normalized;\n}\n\nexport function realtimeAudioChunkParams(audio: CodexRealtimeInputAudioChunk): v2.ThreadRealtimeAudioChunk {\n if (!(audio.data instanceof Uint8Array)) {\n throw new TypeError('Realtime audio data must be a Uint8Array');\n }\n const sampleRate = positiveInteger(audio.sampleRate, 'sampleRate');\n const numChannels = positiveInteger(audio.numChannels, 'numChannels');\n const samplesPerChannel = audio.samplesPerChannel === undefined\n ? Math.floor(audio.data.byteLength / 2 / numChannels)\n : nullableNonNegativeInteger(audio.samplesPerChannel, 'samplesPerChannel');\n const itemId = audio.itemId === undefined ? null : audio.itemId;\n if (itemId !== null && (typeof itemId !== 'string' || !itemId.trim())) {\n throw new TypeError('Realtime audio itemId must be a non-empty string or null');\n }\n return {\n data: Buffer.from(audio.data.buffer, audio.data.byteOffset, audio.data.byteLength).toString('base64'),\n sampleRate,\n numChannels,\n samplesPerChannel,\n itemId,\n };\n}\n\nexport function realtimeAudioChunk(audio: v2.ThreadRealtimeAudioChunk): {\n data: Uint8Array;\n sampleRate: number;\n numChannels: number;\n samplesPerChannel: number | null;\n itemId: string | null;\n} {\n return {\n data: new Uint8Array(Buffer.from(audio.data, 'base64')),\n sampleRate: audio.sampleRate,\n numChannels: audio.numChannels,\n samplesPerChannel: audio.samplesPerChannel,\n itemId: audio.itemId,\n };\n}\n\nfunction positiveInteger(value: number, field: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`Realtime audio ${field} must be a positive integer`);\n }\n return value;\n}\n\nfunction nullableNonNegativeInteger(value: number | null, field: string): number | null {\n if (value === null) return null;\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`Realtime audio ${field} must be a non-negative integer or null`);\n }\n return value;\n}\n","import type { CodexAppServerClient, RealtimeVoice } from '../codex/index';\nimport type { CodexConversationEvent, CodexRealtimeEvent, StartCodexRealtimeOptions } from '@codex-app-sdk/core/surface';\nimport type { CodexRealtimeSession } from './codex-surface-contracts';\nimport {\n normalizedOptionalRealtimeString,\n normalizedRealtimeText,\n realtimeAudioChunkParams,\n} from './codex-surface-realtime';\n\nexport type StartCodexRealtimeSessionContext = {\n client: CodexAppServerClient;\n ensureThreadReady(): Promise<void>;\n onConversationEvent(listener: (event: CodexConversationEvent) => void): () => void;\n options: StartCodexRealtimeOptions;\n threadId: string;\n};\n\nexport async function startCodexRealtimeSession(\n context: StartCodexRealtimeSessionContext,\n): Promise<CodexRealtimeSession> {\n const { client, ensureThreadReady, onConversationEvent, options, threadId } = context;\n await ensureThreadReady();\n const outputModality = options.outputModality;\n if (outputModality !== 'text' && outputModality !== 'audio') {\n throw new TypeError(`Invalid realtime output modality '${String(outputModality)}'`);\n }\n const version = options.version;\n if (version !== undefined && version !== 'v1' && version !== 'v2' && version !== 'v3') {\n throw new TypeError(`Invalid realtime version '${String(version)}'`);\n }\n const model = normalizedOptionalRealtimeString(options.model, 'model');\n const voice = normalizedOptionalRealtimeString(options.voice, 'voice');\n const transport = options.transport ?? { type: 'websocket' };\n if (transport.type !== 'websocket' && transport.type !== 'webrtc') {\n throw new TypeError(`Invalid realtime transport '${String((transport as { type?: unknown }).type)}'`);\n }\n if (transport.type === 'webrtc' && !transport.sdp.trim()) {\n throw new TypeError('WebRTC realtime transport requires a non-empty SDP offer');\n }\n const answer = transport.type === 'webrtc' ? deferredRealtimeSdp(onConversationEvent) : null;\n let remoteSdp: string | null;\n try {\n const [, sdp] = await Promise.all([client.request('thread/realtime/start', {\n threadId,\n outputModality,\n ...(model ? { model } : {}),\n ...(version ? { version } : {}),\n ...(voice ? { voice: voice as RealtimeVoice } : {}),\n ...(options.includeStartupContext !== undefined\n ? { includeStartupContext: options.includeStartupContext }\n : {}),\n ...(options.prompt !== undefined ? { prompt: options.prompt } : {}),\n ...(options.flushTranscriptTailOnSessionEnd !== undefined\n ? { flushTranscriptTailOnSessionEnd: options.flushTranscriptTailOnSessionEnd }\n : {}),\n transport: transport.type === 'webrtc'\n ? { type: 'webrtc', sdp: transport.sdp }\n : { type: 'websocket' },\n }), answer?.promise ?? Promise.resolve(null)]);\n remoteSdp = sdp;\n } catch (error) {\n answer?.cancel();\n throw error;\n }\n\n let stopped = false;\n const requireActive = (): void => {\n if (stopped) throw new Error(`Realtime session for '${threadId}' is stopped`);\n };\n return {\n conversationId: threadId,\n transport: transport.type,\n remoteSdp,\n appendAudio: async (audio) => {\n requireActive();\n if (transport.type === 'webrtc') {\n throw new Error('WebRTC realtime audio must be sent through its negotiated media track');\n }\n await client.request('thread/realtime/appendAudio', {\n threadId,\n audio: realtimeAudioChunkParams(audio),\n });\n },\n appendText: async (text, role = 'user') => {\n requireActive();\n const normalizedText = normalizedRealtimeText(text, 'text');\n if (role !== 'user' && role !== 'developer' && role !== 'assistant') {\n throw new TypeError(`Invalid realtime text role '${String(role)}'`);\n }\n await client.request('thread/realtime/appendText', { threadId, text: normalizedText, role });\n },\n appendSpeech: async (text) => {\n requireActive();\n await client.request('thread/realtime/appendSpeech', {\n threadId,\n text: normalizedRealtimeText(text, 'speech'),\n });\n },\n stop: async () => {\n if (stopped) return;\n await client.request('thread/realtime/stop', { threadId });\n stopped = true;\n },\n onEvent: (listener) => onConversationEvent((event) => {\n if (event.type.startsWith('realtime.')) listener(event as CodexRealtimeEvent);\n }),\n };\n}\n\nfunction deferredRealtimeSdp(\n onConversationEvent: StartCodexRealtimeSessionContext['onConversationEvent'],\n): { promise: Promise<string>; cancel(): void } {\n let unsubscribe: () => void = () => undefined;\n let timer: NodeJS.Timeout | undefined;\n let settled = false;\n const cleanup = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n unsubscribe();\n };\n const promise = new Promise<string>((resolve, reject) => {\n unsubscribe = onConversationEvent((event) => {\n if (event.type === 'realtime.sdp') {\n cleanup();\n resolve(event.payload.sdp);\n } else if (event.type === 'realtime.error') {\n cleanup();\n reject(new Error(event.payload.message));\n } else if (event.type === 'realtime.closed') {\n cleanup();\n reject(new Error('Realtime session closed before returning its WebRTC answer'));\n }\n });\n timer = setTimeout(() => {\n cleanup();\n reject(new Error('Timed out waiting for the WebRTC realtime SDP answer'));\n }, 30_000);\n });\n return { promise, cancel: cleanup };\n}\n","import type {\n CodexSurfaceApproval,\n CodexSurfaceAuthentication,\n CodexSurfaceClientRequest,\n CodexSurfaceSnapshot,\n CodexConversationLoadingStrategy,\n CodexSurfaceSkill,\n CodexSurfaceThreadStatus,\n CodexSurfaceTurn,\n SurfaceMessage,\n} from '@codex-app-sdk/core/surface';\nimport type { ThreadHistoryMode } from '../codex/generated/v2/ThreadHistoryMode';\n\nexport type ThreadRuntimeState = {\n threadId: string;\n cwd: string | null;\n hydrated: boolean;\n activeTurnId: string | null;\n turns: CodexSurfaceTurn[];\n turnIds: string[];\n messages: SurfaceMessage[];\n answeredClientRequestIds: string[];\n approvalPreset: CodexSurfaceSnapshot['approvalPreset'];\n approvalPresets: CodexSurfaceSnapshot['approvalPresets'];\n permissionProfiles: CodexSurfaceSnapshot['permissionProfiles'];\n skills: CodexSurfaceSkill[];\n skillCatalogStatus: CodexSurfaceSnapshot['skillCatalogStatus'];\n selectedModelId: string | null;\n selectedReasoningEffort: string | null;\n selectedServiceTier: string | null;\n planMode: boolean;\n executionPlan: CodexSurfaceSnapshot['executionPlan'];\n contextUsage: CodexSurfaceSnapshot['contextUsage'];\n goal: CodexSurfaceSnapshot['goal'];\n turnGitDiff: CodexSurfaceSnapshot['turnGitDiff'];\n threadStatus: CodexSurfaceThreadStatus | null;\n queuedPrompts: CodexSurfaceSnapshot['queuedPrompts'];\n busy: boolean;\n turnStartPending: boolean;\n historyLoading: boolean;\n historyMode: ThreadHistoryMode;\n loadingStrategy: CodexConversationLoadingStrategy;\n historyCursor: string | null;\n historyHasOlder: boolean;\n historyLoadingOlder: boolean;\n fullHistoryHydrated: boolean;\n error: string | null;\n planMarkdownByTurn: Map<string, string>;\n};\n\nexport type ThreadRuntimePatch = Partial<Omit<ThreadRuntimeState, 'threadId' | 'planMarkdownByTurn'>>;\n\nexport type ConversationCatalogs = Pick<\n ThreadRuntimeState,\n 'approvalPresets' | 'permissionProfiles' | 'skillCatalogStatus' | 'skills'\n>;\n\nexport function initialSurfaceSnapshot(authentication: CodexSurfaceAuthentication): CodexSurfaceSnapshot {\n return {\n status: 'idle',\n authentication,\n conversations: [],\n activeConversationId: null,\n activeTurnId: null,\n turns: [],\n messages: [],\n clientRequests: [],\n answeredClientRequestIds: [],\n approvals: [],\n models: [],\n modelCatalogStatus: 'notLoaded',\n skills: [],\n skillCatalogStatus: 'notLoaded',\n plugins: [],\n pluginCatalogStatus: 'notLoaded',\n permissionProfiles: [],\n approvalPresets: [],\n approvalPreset: null,\n selectedModelId: null,\n selectedReasoningEffort: null,\n selectedServiceTier: null,\n planMode: false,\n executionPlan: null,\n contextUsage: null,\n goal: null,\n turnGitDiff: null,\n threadStatus: null,\n rateLimits: null,\n queuedPrompts: [],\n busy: false,\n historyLoading: false,\n historyState: {\n loadingStrategy: 'lazy',\n hasOlder: false,\n loadingOlder: false,\n fullyLoaded: false,\n },\n error: null,\n };\n}\n\nexport function createThreadRuntime(\n threadId: string,\n state: CodexSurfaceSnapshot,\n patch: ThreadRuntimePatch = {},\n): ThreadRuntimeState {\n return {\n threadId,\n cwd: null,\n hydrated: false,\n activeTurnId: null,\n turns: [],\n turnIds: [],\n messages: [],\n answeredClientRequestIds: [],\n approvalPreset: state.approvalPreset,\n approvalPresets: [...state.approvalPresets],\n permissionProfiles: [...state.permissionProfiles],\n skills: [...state.skills],\n skillCatalogStatus: state.skillCatalogStatus,\n selectedModelId: state.selectedModelId,\n selectedReasoningEffort: state.selectedReasoningEffort,\n selectedServiceTier: state.selectedServiceTier ?? null,\n planMode: false,\n executionPlan: null,\n contextUsage: null,\n goal: null,\n turnGitDiff: null,\n threadStatus: null,\n queuedPrompts: [],\n busy: false,\n turnStartPending: false,\n historyLoading: false,\n historyMode: 'legacy',\n loadingStrategy: state.historyState?.loadingStrategy ?? 'lazy',\n historyCursor: null,\n historyHasOlder: false,\n historyLoadingOlder: false,\n fullHistoryHydrated: false,\n error: null,\n planMarkdownByTurn: new Map(),\n ...patch,\n };\n}\n\nexport function runtimeProjection(\n runtime: ThreadRuntimeState,\n approvals: CodexSurfaceApproval[],\n clientRequests: CodexSurfaceClientRequest[],\n): Pick<\n CodexSurfaceSnapshot,\n | 'approvalPreset'\n | 'approvalPresets'\n | 'answeredClientRequestIds'\n | 'approvals'\n | 'activeTurnId'\n | 'busy'\n | 'clientRequests'\n | 'contextUsage'\n | 'error'\n | 'executionPlan'\n | 'goal'\n | 'historyLoading'\n | 'historyState'\n | 'messages'\n | 'permissionProfiles'\n | 'planMode'\n | 'queuedPrompts'\n | 'selectedModelId'\n | 'selectedReasoningEffort'\n | 'selectedServiceTier'\n | 'skillCatalogStatus'\n | 'skills'\n | 'threadStatus'\n | 'turnGitDiff'\n | 'turns'\n> {\n const projectedClientRequests = [...clientRequests];\n const knownClientRequestIds = new Set(projectedClientRequests.map((request) => request.id));\n const answeredClientRequestIds = new Set(runtime.answeredClientRequestIds);\n for (const message of runtime.messages) {\n const answeredByMessage = message.metadata?.asyncQuestionRequestIds;\n if (Array.isArray(answeredByMessage)) {\n for (const requestId of answeredByMessage) {\n if (typeof requestId === 'string') answeredClientRequestIds.add(requestId);\n }\n }\n }\n for (const message of runtime.messages) {\n for (const part of message.parts) {\n if (\n part.type !== 'question'\n || part.historical === true\n || knownClientRequestIds.has(part.request.id)\n || answeredClientRequestIds.has(part.request.id)\n ) continue;\n knownClientRequestIds.add(part.request.id);\n projectedClientRequests.push(part.request);\n }\n }\n return {\n activeTurnId: runtime.activeTurnId,\n approvalPreset: runtime.approvalPreset,\n approvalPresets: runtime.approvalPresets,\n answeredClientRequestIds: [...answeredClientRequestIds],\n approvals,\n busy: runtime.busy,\n clientRequests: projectedClientRequests,\n contextUsage: runtime.contextUsage,\n error: runtime.error,\n executionPlan: runtime.executionPlan,\n goal: runtime.goal,\n historyLoading: runtime.historyLoading,\n historyState: {\n loadingStrategy: runtime.loadingStrategy,\n hasOlder: runtime.historyHasOlder,\n loadingOlder: runtime.historyLoadingOlder,\n fullyLoaded: runtime.fullHistoryHydrated,\n },\n messages: runtime.messages,\n permissionProfiles: runtime.permissionProfiles,\n planMode: runtime.planMode,\n queuedPrompts: runtime.queuedPrompts,\n selectedModelId: runtime.selectedModelId,\n selectedReasoningEffort: runtime.selectedReasoningEffort,\n selectedServiceTier: runtime.selectedServiceTier,\n skillCatalogStatus: runtime.skillCatalogStatus,\n skills: runtime.skills,\n threadStatus: runtime.threadStatus,\n turnGitDiff: runtime.turnGitDiff,\n turns: runtime.turns,\n };\n}\n","import type { v2 } from '../codex/index';\nimport type { CodexSurfaceAuthentication } from '@codex-app-sdk/core/surface';\n\nexport function initialAuthentication(): CodexSurfaceAuthentication {\n return {\n status: 'notLoaded',\n account: null,\n requiresOpenaiAuth: null,\n error: null,\n login: {\n status: 'idle',\n loginId: null,\n authUrl: null,\n error: null,\n },\n };\n}\n\nexport function surfaceAccount(account: v2.Account): NonNullable<CodexSurfaceAuthentication['account']> {\n if (account.type === 'chatgpt') {\n return { type: 'chatgpt', email: account.email, planType: account.planType };\n }\n if (account.type === 'amazonBedrock') {\n return {\n type: 'amazonBedrock',\n credentialSource: account.usesCodexManagedCredentials ? 'codexManaged' : 'awsManaged',\n };\n }\n return { type: 'apiKey' };\n}\n\nexport function surfaceAuthenticationKey(authentication: CodexSurfaceAuthentication): string {\n return JSON.stringify({\n account: authentication.account,\n requiresOpenaiAuth: authentication.requiresOpenaiAuth,\n });\n}\n\nexport function surfaceAuthenticationIdentityKey(authentication: CodexSurfaceAuthentication): string {\n const account = authentication.account;\n if (!account) {\n return JSON.stringify({ type: null, requiresOpenaiAuth: authentication.requiresOpenaiAuth });\n }\n if (account.type === 'chatgpt') return JSON.stringify({ type: account.type, email: account.email });\n if (account.type === 'amazonBedrock') {\n return JSON.stringify({ type: account.type, credentialSource: account.credentialSource });\n }\n return JSON.stringify({ type: account.type });\n}\n\nexport function normalizedLoginId(value: string): string {\n const loginId = value.trim();\n if (!loginId) throw new Error('Codex login id cannot be empty');\n return loginId;\n}\n\nexport function safeLoginUrl(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error('Codex account/login/start returned an invalid authentication URL');\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new Error(`Codex account/login/start returned unsupported authentication URL scheme '${url.protocol}'`);\n }\n return url.href;\n}\n","import { isAbsolute } from 'node:path';\nimport type { CodexAppServerTransportOptions, CodexSurfaceOptions } from './codex-surface-contracts';\nimport type { CodexAppServerUnixSocketTransportOptions } from './codex-unix-socket-transport';\n\nexport function isUnixSocketTransportOptions(\n options: CodexAppServerTransportOptions,\n): options is CodexAppServerUnixSocketTransportOptions {\n return 'type' in options && options.type === 'unixSocket';\n}\n\nexport function surfaceTransportOptions(options: CodexSurfaceOptions): CodexAppServerTransportOptions {\n const topLevelHome = options.codexHome === undefined\n ? undefined\n : absoluteCodexHome(options.codexHome);\n const transportHome = options.transport?.codexHome;\n if (topLevelHome !== undefined && transportHome !== undefined && topLevelHome !== transportHome) {\n throw new Error('Codex surface codexHome conflicts with transport.codexHome');\n }\n const transport = options.transport ?? {};\n return {\n ...transport,\n ...(topLevelHome === undefined ? {} : { codexHome: topLevelHome }),\n };\n}\n\nexport function absoluteCodexHome(value: string): string {\n const codexHome = value.trim();\n if (!codexHome) throw new Error('Codex surface codexHome cannot be empty');\n if (!isAbsolute(codexHome)) throw new Error('Codex surface codexHome must be an absolute path');\n return codexHome;\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexSurfaceAuthentication,\n CodexSurfaceChatGptDeviceCodeLogin,\n CodexSurfaceChatGptLogin,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n} from '@codex-app-sdk/core/surface';\nimport {\n normalizedLoginId,\n safeLoginUrl,\n surfaceAccount,\n surfaceAuthenticationIdentityKey,\n} from './codex-surface-authentication';\nimport { errorMessage } from './codex-surface-prompts';\n\nexport type CodexSurfaceAuthenticationHost = {\n bootstrapSurfaceData(force?: boolean): Promise<void>;\n clearAuthenticatedSurfaceData(): Promise<void>;\n getSnapshot(): CodexSurfaceSnapshot;\n patchAuthentication(patch: Partial<CodexSurfaceAuthentication>, origin: CodexSurfaceEventOrigin): void;\n reportError(error: unknown): void;\n};\n\nexport class CodexSurfaceAuthenticationController {\n private accountRefreshPromise: Promise<CodexSurfaceSnapshot> | null = null;\n private accountRefreshRequested = false;\n private accountRefreshForceBootstrap = false;\n private accountRefreshOrigin: CodexSurfaceEventOrigin = 'action';\n private chatGptLoginPromise: Promise<CodexSurfaceChatGptLogin> | null = null;\n private chatGptDeviceCodeLoginPromise: Promise<CodexSurfaceChatGptDeviceCodeLogin> | null = null;\n private activeChatGptDeviceCodeLogin: CodexSurfaceChatGptDeviceCodeLogin | null = null;\n private lastLoadedAuthenticationIdentityKey: string | null = null;\n\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly host: CodexSurfaceAuthenticationHost,\n ) {}\n\n pendingRefresh(): Promise<CodexSurfaceSnapshot> | null {\n return this.accountRefreshPromise;\n }\n\n async startChatGptLogin(): Promise<CodexSurfaceChatGptLogin> {\n const current = this.host.getSnapshot().authentication.login;\n if (current.status === 'pending' && current.loginId && current.authUrl) {\n return { loginId: current.loginId, authUrl: current.authUrl };\n }\n if (this.chatGptLoginPromise) return this.chatGptLoginPromise;\n const start = (async () => {\n this.host.patchAuthentication({\n login: { status: 'starting', loginId: null, authUrl: null, error: null },\n }, 'action');\n try {\n const response = await this.client.request('account/login/start', { type: 'chatgpt' });\n if (response.type !== 'chatgpt') {\n throw new Error(`Codex account/login/start returned unexpected login type '${response.type}'`);\n }\n const loginId = normalizedLoginId(response.loginId);\n const authUrl = safeLoginUrl(response.authUrl);\n this.host.patchAuthentication({\n login: { status: 'pending', loginId, authUrl, error: null },\n }, 'action');\n return { loginId, authUrl };\n } catch (error) {\n this.host.patchAuthentication({\n login: { status: 'error', loginId: null, authUrl: null, error: errorMessage(error) },\n }, 'action');\n throw error;\n }\n })();\n this.chatGptLoginPromise = start;\n void start.finally(() => {\n this.chatGptLoginPromise = null;\n }).catch(() => undefined);\n return start;\n }\n\n async startChatGptDeviceCodeLogin(): Promise<CodexSurfaceChatGptDeviceCodeLogin> {\n const current = this.host.getSnapshot().authentication.login;\n if (\n current.status === 'pending'\n && current.loginId === this.activeChatGptDeviceCodeLogin?.loginId\n && current.authUrl === this.activeChatGptDeviceCodeLogin.verificationUrl\n ) {\n return this.activeChatGptDeviceCodeLogin;\n }\n if (this.chatGptDeviceCodeLoginPromise) return this.chatGptDeviceCodeLoginPromise;\n const start = (async () => {\n this.activeChatGptDeviceCodeLogin = null;\n this.host.patchAuthentication({\n login: { status: 'starting', loginId: null, authUrl: null, error: null },\n }, 'action');\n try {\n const response = await this.client.request('account/login/start', { type: 'chatgptDeviceCode' });\n if (response.type !== 'chatgptDeviceCode') {\n throw new Error(`Codex account/login/start returned unexpected login type '${response.type}'`);\n }\n const loginId = normalizedLoginId(response.loginId);\n const verificationUrl = safeLoginUrl(response.verificationUrl);\n const userCode = response.userCode.trim();\n if (!userCode) throw new Error('Codex account/login/start returned an empty device user code');\n this.host.patchAuthentication({\n login: { status: 'pending', loginId, authUrl: verificationUrl, error: null },\n }, 'action');\n const login = { loginId, verificationUrl, userCode };\n this.activeChatGptDeviceCodeLogin = login;\n return login;\n } catch (error) {\n this.host.patchAuthentication({\n login: { status: 'error', loginId: null, authUrl: null, error: errorMessage(error) },\n }, 'action');\n throw error;\n }\n })();\n this.chatGptDeviceCodeLoginPromise = start;\n void start.finally(() => {\n this.chatGptDeviceCodeLoginPromise = null;\n }).catch(() => undefined);\n return start;\n }\n\n async cancelLogin(loginId: string): Promise<CodexSurfaceSnapshot> {\n const normalized = normalizedLoginId(loginId);\n const response = await this.client.request('account/login/cancel', { loginId: normalized });\n this.host.patchAuthentication({\n login: {\n status: response.status === 'canceled' ? 'cancelled' : 'idle',\n loginId: null,\n authUrl: null,\n error: null,\n },\n }, 'action');\n this.activeChatGptDeviceCodeLogin = null;\n return this.host.getSnapshot();\n }\n\n async logout(): Promise<CodexSurfaceSnapshot> {\n await this.client.request('account/logout', undefined);\n this.host.patchAuthentication({\n login: { status: 'idle', loginId: null, authUrl: null, error: null },\n }, 'action');\n this.activeChatGptDeviceCodeLogin = null;\n const authenticationChanged = await this.load('action');\n if (authenticationChanged || this.blocksBootstrap()) {\n await this.host.clearAuthenticatedSurfaceData();\n }\n if (!this.blocksBootstrap()) await this.host.bootstrapSurfaceData(true);\n return this.host.getSnapshot();\n }\n\n refresh(\n origin: CodexSurfaceEventOrigin,\n forceBootstrap = false,\n ): Promise<CodexSurfaceSnapshot> {\n this.accountRefreshRequested = true;\n this.accountRefreshForceBootstrap ||= forceBootstrap;\n this.accountRefreshOrigin = origin;\n if (this.accountRefreshPromise) return this.accountRefreshPromise;\n const refresh = (async () => {\n while (this.accountRefreshRequested) {\n const refreshOrigin = this.accountRefreshOrigin;\n const refreshForceBootstrap = this.accountRefreshForceBootstrap;\n this.accountRefreshRequested = false;\n this.accountRefreshForceBootstrap = false;\n try {\n const authenticationChanged = await this.load(refreshOrigin);\n if (authenticationChanged || this.blocksBootstrap()) {\n await this.host.clearAuthenticatedSurfaceData();\n }\n if (!this.blocksBootstrap()) {\n await this.host.bootstrapSurfaceData(refreshForceBootstrap);\n }\n } catch (error) {\n if (!this.accountRefreshRequested) throw error;\n this.accountRefreshForceBootstrap ||= refreshForceBootstrap;\n }\n }\n return this.host.getSnapshot();\n })();\n this.accountRefreshPromise = refresh;\n void refresh.finally(() => {\n this.accountRefreshPromise = null;\n }).catch(() => undefined);\n return refresh;\n }\n\n async load(origin: CodexSurfaceEventOrigin): Promise<boolean> {\n const previousAuthenticationIdentityKey = this.lastLoadedAuthenticationIdentityKey;\n this.host.patchAuthentication({ status: 'loading', error: null }, origin);\n try {\n const response = await this.client.request('account/read', { refreshToken: false });\n const account = response.account ? surfaceAccount(response.account) : null;\n const authentication = {\n ...this.host.getSnapshot().authentication,\n account,\n requiresOpenaiAuth: response.requiresOpenaiAuth,\n };\n const authenticationIdentityKey = surfaceAuthenticationIdentityKey(authentication);\n this.host.patchAuthentication({\n status: 'loaded', account, requiresOpenaiAuth: response.requiresOpenaiAuth, error: null,\n }, origin);\n this.lastLoadedAuthenticationIdentityKey = authenticationIdentityKey;\n return previousAuthenticationIdentityKey !== null\n && previousAuthenticationIdentityKey !== authenticationIdentityKey;\n } catch (error) {\n this.host.patchAuthentication({ status: 'error', error: errorMessage(error) }, origin);\n throw error;\n }\n }\n\n blocksBootstrap(): boolean {\n const authentication = this.host.getSnapshot().authentication;\n return authentication.status === 'loaded'\n && authentication.account === null\n && authentication.requiresOpenaiAuth === true;\n }\n\n handleLoginCompleted(params: v2.AccountLoginCompletedNotification): void {\n const current = this.host.getSnapshot().authentication.login;\n const loginId = params.loginId ?? current.loginId;\n if (!params.success) {\n this.activeChatGptDeviceCodeLogin = null;\n this.host.patchAuthentication({\n login: {\n status: 'error', loginId, authUrl: current.authUrl,\n error: params.error ?? 'Codex sign-in failed',\n },\n }, 'notification');\n return;\n }\n this.activeChatGptDeviceCodeLogin = null;\n this.host.patchAuthentication({\n login: { status: 'completed', loginId, authUrl: current.authUrl, error: null },\n }, 'notification');\n void this.refresh('notification').catch((error) => this.host.reportError(error));\n }\n}\n","import type {\n CodexConversationEvent,\n CodexConversationHistory,\n CodexConversationHistoryPage,\n CodexConversationPromptHistory,\n CodexConversationSnapshot,\n CodexSurfaceApprovalDecision,\n CodexSurfaceApprovalScope,\n CodexSurfaceClientRequestResponse,\n SendCodexMessageOptions,\n StartCodexRealtimeOptions,\n StartCodexReviewOptions,\n UpdateCodexConversationSettings,\n} from '@codex-app-sdk/core/surface';\nimport type {\n CodexConversation,\n CodexConversationForkResult,\n CodexConversationHostOptions,\n CodexConversationLoadOptions,\n CodexRealtimeSession,\n ForkCodexConversationOptions,\n} from './codex-surface-contracts';\n\nexport type CodexConversationHandleOperations = {\n clearGoal(): Promise<void>;\n compact(): Promise<void>;\n continueInterruptedTurn(): Promise<void>;\n deleteTurn(turnId: string): Promise<void>;\n deleteQueuedPrompt(promptId: string): Promise<void>;\n updateQueuedPrompt(promptId: string, prompt: string): Promise<void>;\n editTurn(turnId: string, content: string): Promise<void>;\n fork(\n options?: ForkCodexConversationOptions,\n hostOptions?: CodexConversationHostOptions,\n ): Promise<CodexConversationForkResult>;\n forkTurn(\n turnId: string,\n options?: ForkCodexConversationOptions,\n hostOptions?: CodexConversationHostOptions,\n ): Promise<CodexConversationForkResult>;\n getSnapshot(): CodexConversationSnapshot;\n interrupt(): Promise<void>;\n load(options?: CodexConversationLoadOptions): Promise<void>;\n onEvent(listener: (event: CodexConversationEvent) => void): () => void;\n onStateChange(listener: (snapshot: CodexConversationSnapshot) => void): () => void;\n readHistory(): Promise<CodexConversationHistory>;\n readPromptHistory(): Promise<CodexConversationPromptHistory>;\n loadOlderHistory?: () => Promise<CodexConversationHistoryPage>;\n rename(title: string): Promise<void>;\n resolveApproval(\n approvalId: string,\n decision: CodexSurfaceApprovalDecision,\n scope?: CodexSurfaceApprovalScope,\n ): Promise<void>;\n respondToClientRequest(response: CodexSurfaceClientRequestResponse): Promise<void>;\n retryTurn(turnId: string): Promise<void>;\n select(): Promise<void>;\n sendMessage(prompt: string, options?: SendCodexMessageOptions): Promise<void>;\n setGoal(objective: string, tokenBudget?: number | null): Promise<void>;\n startRealtime(options: StartCodexRealtimeOptions): Promise<CodexRealtimeSession>;\n startReview(options?: StartCodexReviewOptions): Promise<void>;\n steerMessage(prompt: string, options?: SendCodexMessageOptions): Promise<void>;\n steerQueuedPrompt(promptId: string, prompt?: string): Promise<void>;\n updateSettings(settings: UpdateCodexConversationSettings): Promise<void>;\n};\n\nexport function createCodexConversationHandle(\n id: string,\n operations: CodexConversationHandleOperations,\n): CodexConversation {\n const snapshotAfter = async (operation: () => Promise<void>): Promise<CodexConversationSnapshot> => {\n await operation();\n return operations.getSnapshot();\n };\n return {\n id,\n fork: operations.fork,\n forkTurn: operations.forkTurn,\n load: (options) => snapshotAfter(() => operations.load(options)),\n select: () => snapshotAfter(operations.select),\n readHistory: operations.readHistory,\n readPromptHistory: operations.readPromptHistory,\n loadOlderHistory: operations.loadOlderHistory ?? (\n async () => ({ conversationId: id, messages: [], hasOlder: false })\n ),\n rename: (title) => snapshotAfter(() => operations.rename(title)),\n updateSettings: (settings) => snapshotAfter(() => operations.updateSettings(settings)),\n sendMessage: (prompt, options) => snapshotAfter(() => operations.sendMessage(prompt, options)),\n startRealtime: operations.startRealtime,\n compact: () => snapshotAfter(operations.compact),\n continueInterruptedTurn: () => snapshotAfter(operations.continueInterruptedTurn),\n startReview: (options) => snapshotAfter(() => operations.startReview(options)),\n steerMessage: (prompt, options) => snapshotAfter(() => operations.steerMessage(prompt, options)),\n interrupt: () => snapshotAfter(operations.interrupt),\n deleteTurn: (turnId) => snapshotAfter(() => operations.deleteTurn(turnId)),\n editTurn: (turnId, content) => snapshotAfter(() => operations.editTurn(turnId, content)),\n retryTurn: (turnId) => snapshotAfter(() => operations.retryTurn(turnId)),\n deleteQueuedPrompt: (promptId) => snapshotAfter(() => operations.deleteQueuedPrompt(promptId)),\n updateQueuedPrompt: (promptId, prompt) => snapshotAfter(() => operations.updateQueuedPrompt(promptId, prompt)),\n steerQueuedPrompt: (promptId, prompt) => snapshotAfter(() => operations.steerQueuedPrompt(promptId, prompt)),\n respondToClientRequest: (response) => snapshotAfter(() => operations.respondToClientRequest(response)),\n resolveApproval: (approvalId, decision, scope) => snapshotAfter(\n () => operations.resolveApproval(approvalId, decision, scope),\n ),\n setGoal: (objective, tokenBudget) => snapshotAfter(() => operations.setGoal(objective, tokenBudget)),\n clearGoal: () => snapshotAfter(operations.clearGoal),\n getSnapshot: operations.getSnapshot,\n onStateChange: operations.onStateChange,\n onEvent: operations.onEvent,\n };\n}\n","const structuredToolResultNotice = 'Result returned in structuredContent.';\n\nexport function toolOutputText(output: unknown): string | undefined {\n if (typeof output === 'string') {\n return output;\n }\n\n if (Array.isArray(output)) {\n return output\n .map((entry) => toolOutputText(entry))\n .filter(Boolean)\n .join('\\n\\n') || undefined;\n }\n\n if (!isRecord(output)) {\n return JSON.stringify(output);\n }\n\n const structuredText = 'structuredContent' in output ? toolOutputText(output.structuredContent) : undefined;\n if (structuredText) {\n const contentText = toolOutputContentText(output);\n if (!contentText || contentText.trim() === structuredToolResultNotice) {\n return structuredText;\n }\n\n return `${contentText}\\n\\n${structuredText}`;\n }\n\n return toolOutputContentText(output) ?? JSON.stringify(output);\n}\n\nfunction toolOutputContentText(output: Record<string, unknown>): string | undefined {\n if (typeof output.text === 'string') {\n return output.text;\n }\n\n if (typeof output.content === 'string') {\n return output.content;\n }\n\n if (Array.isArray(output.content)) {\n return toolOutputText(output.content);\n }\n\n return undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import { isAbsolute, resolve } from 'node:path';\nimport type {\n CodexSurfaceFileActivityAction,\n CodexSurfaceFileActivityStatus,\n SurfaceMessageToolPart as RendererToolPart,\n SurfaceMessageToolPartUpdate as RendererToolPartUpdate,\n} from '@codex-app-sdk/core/surface';\nimport { toolOutputText } from './tool-output';\n\nconst structuredToolResultNotice = 'Result returned in structuredContent.';\nconst MAX_TOOL_PAYLOAD_BYTES = 32 * 1024;\n\nexport type CodexToolPartAdapterOptions = {\n includeCommandOutput?: boolean;\n cwd?: string | null;\n};\n\nexport type CodexFileActivity = {\n action: CodexSurfaceFileActivityAction;\n path: string;\n status: CodexSurfaceFileActivityStatus;\n};\n\nexport function codexToolPartFileActivities(\n toolPart: RendererToolPart,\n cwd?: string | null,\n): CodexFileActivity[] {\n const status = toolPart.status;\n if (toolPart.kind === 'command') {\n const input = isRecord(toolPart.input) ? toolPart.input : {};\n const commandCwd = typeof input.cwd === 'string' ? input.cwd : cwd ?? undefined;\n const actions = normalizedCommandActions(input.commandActions);\n return actions.flatMap((action) => {\n if (action.type !== 'read') return [];\n const path = fullFilePath(action.path ?? action.name, commandCwd);\n return path ? [{ action: 'read' as const, path, status }] : [];\n });\n }\n\n if (toolPart.kind !== 'fileChange') return [];\n const input = isRecord(toolPart.input) ? toolPart.input : {};\n const metadata = toolPart.metadata ?? {};\n const changes = Array.isArray(metadata.changes)\n ? metadata.changes\n : Array.isArray(input.changes) ? input.changes : [];\n return changes.flatMap((change) => {\n if (!isRecord(change) || typeof change.path !== 'string') return [];\n const kind = patchChangeKind(change.kind);\n if (kind === 'delete') return [];\n const path = fullFilePath(change.path, cwd ?? undefined);\n return path ? [{ action: kind === 'add' ? 'create' as const : 'edit' as const, path, status }] : [];\n });\n}\n\nexport function codexThreadItemToToolPart(item: unknown, options: CodexToolPartAdapterOptions = {}): RendererToolPart | null {\n if (!isRecord(item) || typeof item.id !== 'string') {\n return null;\n }\n\n if (item.type === 'commandExecution') {\n const command = typeof item.command === 'string' ? item.command : 'command';\n const status = rendererToolStatus(item.status);\n const statusText = commandStatusText(status, item.commandActions, command);\n const body = options.includeCommandOutput && typeof item.aggregatedOutput === 'string' ? item.aggregatedOutput : undefined;\n return {\n type: 'tool',\n id: item.id,\n kind: 'command',\n title: command,\n status,\n ...(statusText ? { statusText } : {}),\n ...(body !== undefined ? { body } : {}),\n input: {\n command,\n cwd: typeof item.cwd === 'string' ? item.cwd : undefined,\n commandActions: item.commandActions,\n },\n output: {\n exitCode: typeof item.exitCode === 'number' ? item.exitCode : undefined,\n durationMs: typeof item.durationMs === 'number' ? item.durationMs : undefined,\n },\n metadata: {\n source: item.source,\n processId: item.processId,\n },\n };\n }\n\n if (item.type === 'mcpToolCall') {\n const server = typeof item.server === 'string' ? item.server : 'mcp';\n const tool = typeof item.tool === 'string' ? item.tool : 'tool';\n const errorMessage = boundedToolText(mcpErrorMessage(item.error));\n const input = boundedToolPayload(item.arguments);\n const output = boundedToolPayload(item.result);\n return {\n type: 'tool',\n id: item.id,\n kind: 'mcp',\n title: `${server}.${tool}`,\n status: rendererToolStatus(item.status),\n body: errorMessage ?? boundedToolText(mcpResultText(output)),\n ...(input !== undefined ? { input } : {}),\n ...(output !== undefined ? { output } : {}),\n metadata: {\n server,\n tool,\n pluginId: item.pluginId,\n mcpAppResourceUri: item.mcpAppResourceUri,\n durationMs: item.durationMs,\n },\n };\n }\n\n if (item.type === 'dynamicToolCall') {\n const tool = typeof item.tool === 'string' ? item.tool : 'tool';\n const namespace = typeof item.namespace === 'string' ? item.namespace : null;\n const input = boundedToolPayload(item.arguments);\n const output = boundedToolPayload(item.contentItems);\n return {\n type: 'tool',\n id: item.id,\n kind: 'dynamic',\n title: namespace ? `${namespace}.${tool}` : tool,\n status: rendererToolStatus(item.status),\n body: boundedToolText(dynamicToolContentText(output)),\n ...(input !== undefined ? { input } : {}),\n ...(output !== undefined ? { output } : {}),\n metadata: {\n namespace,\n tool,\n success: item.success,\n durationMs: item.durationMs,\n },\n };\n }\n\n if (item.type === 'fileChange') {\n const changes = Array.isArray(item.changes) ? item.changes : [];\n const status = rendererToolStatus(item.status);\n const statusText = fileChangeStatusText(status, changes);\n return {\n type: 'tool',\n id: item.id,\n kind: 'fileChange',\n title: changes.length === 1 ? '1 file change' : `${changes.length} file changes`,\n status,\n ...(statusText ? { statusText } : {}),\n body: fileChangesText(changes),\n input: { changes },\n metadata: {\n changes,\n ...(typeof item.cwd === 'string' ? { cwd: item.cwd } : options.cwd ? { cwd: options.cwd } : {}),\n },\n };\n }\n\n if (item.type === 'webSearch') {\n const query = typeof item.query === 'string' && item.query.trim() ? item.query.trim() : 'web search';\n return {\n type: 'tool',\n id: item.id,\n kind: 'webSearch',\n title: 'Web search',\n status: 'completed',\n body: query,\n input: item.action ?? { query },\n metadata: {\n query,\n action: item.action,\n },\n };\n }\n\n if (item.type === 'imageGeneration') {\n return {\n type: 'tool',\n id: item.id,\n kind: 'dynamic',\n title: 'image_generation',\n status: rendererToolStatus(item.status),\n body: typeof item.revisedPrompt === 'string' ? item.revisedPrompt : undefined,\n input: {\n revisedPrompt: item.revisedPrompt,\n },\n output: item.savedPath,\n metadata: {\n savedPath: item.savedPath,\n },\n };\n }\n\n return null;\n}\n\nexport function shouldForwardCommandExecutionOutput(item: unknown): boolean {\n if (!isRecord(item) || item.type !== 'commandExecution' || typeof item.command !== 'string') {\n return false;\n }\n\n const command = item.command;\n return isApplyPatchCommand(command) || isShellRedirectWriteCommand(command) || isTeeWriteCommand(command);\n}\n\nexport function commandOutputDeltaToToolPartUpdate(itemId: string, delta: string): RendererToolPartUpdate {\n return {\n itemId,\n bodyDelta: delta,\n fallbackToolPart: {\n type: 'tool',\n id: itemId,\n kind: 'command',\n title: 'Command',\n status: 'running',\n },\n };\n}\n\nexport function fileChangePatchToToolPartUpdate(itemId: string, changes: unknown[]): RendererToolPartUpdate {\n const statusText = fileChangeStatusText('running', changes);\n return {\n itemId,\n body: fileChangesText(changes),\n ...(statusText ? { statusText } : {}),\n input: { changes },\n metadata: { changes },\n fallbackToolPart: {\n type: 'tool',\n id: itemId,\n kind: 'fileChange',\n title: changes.length === 1 ? '1 file change' : `${changes.length} file changes`,\n status: 'running',\n ...(statusText ? { statusText } : {}),\n body: fileChangesText(changes),\n input: { changes },\n metadata: { changes },\n },\n };\n}\n\nexport function mcpProgressToToolPartUpdate(itemId: string, message: string): RendererToolPartUpdate {\n return {\n itemId,\n bodyAppend: message,\n fallbackToolPart: {\n type: 'tool',\n id: itemId,\n kind: 'mcp',\n title: 'MCP tool',\n status: 'running',\n },\n };\n}\n\nexport function rawOutputToToolPartUpdate(itemId: string, output: unknown, title?: string, status: unknown = 'completed'): RendererToolPartUpdate {\n const boundedOutput = boundedToolPayload(output);\n const body = boundedToolText(toolOutputText(boundedOutput));\n return {\n itemId,\n title: title && title.trim() ? title : undefined,\n status: rendererToolStatus(status),\n body,\n ...(boundedOutput !== undefined ? { output: boundedOutput } : {}),\n fallbackToolPart: {\n type: 'tool',\n id: itemId,\n kind: 'generic',\n title: title && title.trim() ? title : 'Tool output',\n status: rendererToolStatus(status),\n body,\n ...(boundedOutput !== undefined ? { output: boundedOutput } : {}),\n },\n };\n}\n\nfunction rendererToolStatus(status: unknown): RendererToolPart['status'] {\n if (status === 'completed' || status === 'succeeded' || status === 'success') {\n return 'completed';\n }\n\n if (status === 'failed' || status === 'error' || status === 'declined' || status === 'incomplete' || status === 'canceled' || status === 'cancelled') {\n return 'failed';\n }\n\n return 'running';\n}\n\nfunction commandStatusText(status: RendererToolPart['status'], commandActions: unknown, command: string): string | undefined {\n const descriptor = commandStatusDescriptor(status, commandActions, command);\n return descriptor ? JSON.stringify(descriptor) : undefined;\n}\n\nfunction commandStatusDescriptor(status: RendererToolPart['status'], commandActions: unknown, command: string): {\n action: 'edit' | 'explore' | 'list' | 'read' | 'run' | 'search';\n phase: RendererToolPart['status'];\n params: Record<string, unknown>;\n source: 'codex';\n} | undefined {\n const actions = normalizedCommandActions(commandActions);\n const actionTypes = new Set(actions.map((action) => action.type));\n if (actions.length === 0) {\n return {\n action: 'run',\n phase: status,\n params: { target: command },\n source: 'codex',\n };\n }\n\n if (actionTypes.size === 1 && actionTypes.has('read')) {\n const names = uniqueNonEmpty(actions.map((action) => action.name ?? action.path));\n return {\n action: 'read',\n phase: status,\n params: {\n names,\n target: formatReadTargetList(names, command),\n },\n source: 'codex',\n };\n }\n\n if (actionTypes.size === 1 && actionTypes.has('listFiles')) {\n const targets = uniqueNonEmpty(actions.map((action) => action.path ?? action.command));\n return {\n action: 'list',\n phase: status,\n params: {\n targets,\n target: formatTargetList(targets, command),\n },\n source: 'codex',\n };\n }\n\n if (actionTypes.size === 1 && actionTypes.has('search')) {\n const searches = actions.map((action) => {\n if (action.query && action.path) {\n return `\"${action.query}\" in ${action.path}`;\n }\n\n return action.query ?? action.path ?? action.command;\n });\n const targets = uniqueNonEmpty(searches);\n return {\n action: 'search',\n phase: status,\n params: {\n targets,\n target: formatTargetList(targets, command),\n },\n source: 'codex',\n };\n }\n\n return {\n action: 'explore',\n phase: status,\n params: {\n actions: actions.map((action) => action.type),\n target: formatTargetList(uniqueNonEmpty(actions.map(commandActionTarget)), command),\n },\n source: 'codex',\n };\n}\n\nfunction commandActionTarget(action: NormalizedCommandAction): string | undefined {\n return action.path ?? action.name ?? action.query ?? action.command;\n}\n\ntype NormalizedCommandAction = {\n command?: string;\n name?: string;\n path?: string;\n query?: string;\n type: 'listFiles' | 'read' | 'search';\n};\n\nfunction normalizedCommandActions(value: unknown): NormalizedCommandAction[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.flatMap((entry) => {\n if (!isRecord(entry)) {\n return [];\n }\n\n if (entry.type !== 'read' && entry.type !== 'listFiles' && entry.type !== 'search') {\n return [];\n }\n\n return [{\n command: typeof entry.command === 'string' ? entry.command : undefined,\n name: typeof entry.name === 'string' ? entry.name : undefined,\n path: typeof entry.path === 'string' ? entry.path : undefined,\n query: typeof entry.query === 'string' ? entry.query : undefined,\n type: entry.type,\n }];\n });\n}\n\nfunction isApplyPatchCommand(command: string): boolean {\n return /(?:^|[\\s;\"'(|&])apply_patch(?:\\s|$)/u.test(command);\n}\n\nfunction isShellRedirectWriteCommand(command: string): boolean {\n return /(?:^|[\\s;\"'(|&])(?:cat|printf|echo)\\b[\\s\\S]*>>?\\s*(?:\"[^\"]+\"|'[^']+'|[^\\s;\"'&|]+)(?=$|[\\s;&|])/u.test(command);\n}\n\nfunction isTeeWriteCommand(command: string): boolean {\n return /(?:^|[\\s;\"'(|&])tee(?:\\s+-a)?\\s+(?!-)(?:\"[^\"]+\"|'[^']+'|[^\\s;\"'&|]+)(?=$|[\\s;&|])/u.test(command);\n}\n\nfunction uniqueNonEmpty(values: Array<string | undefined>): string[] {\n return [...new Set(values.map((value) => value?.trim()).filter((value): value is string => Boolean(value)))];\n}\n\nfunction formatTargetList(values: string[], fallback: string): string {\n if (values.length === 0) {\n return fallback;\n }\n\n if (values.length <= 3) {\n return values.join(', ');\n }\n\n return `${values.slice(0, 3).join(', ')} and ${values.length - 3} more`;\n}\n\nfunction formatReadTargetList(values: string[], fallback: string): string {\n return formatFileTargetList(values, fallback);\n}\n\nfunction formatFileTargetList(values: string[], fallback: string): string {\n const names = uniqueNonEmpty(values.map(fileName));\n return formatTargetList(names, fallback);\n}\n\nfunction fileChangeStatusText(status: RendererToolPart['status'], changes: unknown[]): string | undefined {\n const descriptor = fileChangeStatusDescriptor(status, changes);\n return descriptor ? JSON.stringify(descriptor) : undefined;\n}\n\nfunction fileChangeStatusDescriptor(status: RendererToolPart['status'], changes: unknown[]): {\n action: 'create' | 'delete' | 'edit';\n phase: RendererToolPart['status'];\n params: Record<string, unknown>;\n source: 'codex';\n} | undefined {\n const normalizedChanges = changes.flatMap((change) => {\n if (!isRecord(change)) {\n return [];\n }\n\n const path = typeof change.path === 'string' ? change.path : undefined;\n const kind = patchChangeKind(change.kind);\n const lineDiff = lineDiffFromFileChange(change);\n return [{\n addedLines: lineDiff.addedLines,\n kind,\n path,\n removedLines: lineDiff.removedLines,\n }];\n });\n\n if (!normalizedChanges.length) {\n return undefined;\n }\n\n const addedLines = normalizedChanges.reduce((total, change) => total + change.addedLines, 0);\n const removedLines = normalizedChanges.reduce((total, change) => total + change.removedLines, 0);\n const paths = uniqueNonEmpty(normalizedChanges.map((change) => change.path));\n const target = formatFileTargetList(paths, `${normalizedChanges.length} files`);\n return {\n action: fileChangeAction(normalizedChanges.map((change) => change.kind)),\n phase: status,\n params: {\n addedLines,\n path: paths.length === 1 ? paths[0] : undefined,\n removedLines,\n target,\n },\n source: 'codex',\n };\n}\n\nfunction fileChangeAction(kinds: Array<'add' | 'delete' | undefined>): 'create' | 'delete' | 'edit' {\n if (kinds.every((kind) => kind === 'add')) {\n return 'create';\n }\n\n if (kinds.every((kind) => kind === 'delete')) {\n return 'delete';\n }\n\n return 'edit';\n}\n\nfunction lineDiffFromFileChange(change: Record<string, unknown>): { addedLines: number; removedLines: number } {\n const diff = typeof change.diff === 'string' ? change.diff : undefined;\n const kind = patchChangeKind(change.kind);\n if (kind === 'add') {\n return { addedLines: rawContentLineCount(diff), removedLines: 0 };\n }\n if (kind === 'delete') {\n return { addedLines: 0, removedLines: rawContentLineCount(diff) };\n }\n\n return lineDiffFromUnifiedDiff(diff);\n}\n\nexport function lineDiffFromUnifiedDiff(diff: string | undefined): { addedLines: number; removedLines: number } {\n if (!diff) {\n return { addedLines: 0, removedLines: 0 };\n }\n\n let addedLines = 0;\n let removedLines = 0;\n for (const line of diff.split('\\n')) {\n if (line.startsWith('+++') || line.startsWith('---')) {\n continue;\n }\n\n if (line.startsWith('+')) {\n addedLines += 1;\n } else if (line.startsWith('-')) {\n removedLines += 1;\n }\n }\n\n return { addedLines, removedLines };\n}\n\nfunction patchChangeKind(kind: unknown): 'add' | 'delete' | undefined {\n if (kind === 'add' || kind === 'delete') {\n return kind;\n }\n\n if (isRecord(kind) && typeof kind.type === 'string') {\n return patchChangeKind(kind.type);\n }\n\n return undefined;\n}\n\nfunction fullFilePath(value: string | undefined, cwd: string | undefined): string | undefined {\n const path = value?.trim();\n if (!path) return undefined;\n if (isAbsolute(path)) return path;\n if (!cwd || !isAbsolute(cwd)) return undefined;\n return resolve(cwd, path);\n}\n\nfunction rawContentLineCount(content: string | undefined): number {\n if (!content) {\n return 0;\n }\n\n const lines = content.split(/\\r\\n|\\r|\\n/);\n while (lines.at(-1) === '') {\n lines.pop();\n }\n return lines.length;\n}\n\nfunction fileName(path: string): string {\n const parts = path.split(/[\\\\/]/).filter(Boolean);\n return parts.at(-1) ?? path;\n}\n\nfunction mcpErrorMessage(error: unknown): string | undefined {\n if (!isRecord(error)) {\n return undefined;\n }\n\n return typeof error.message === 'string' ? error.message : undefined;\n}\n\nfunction mcpResultText(result: unknown): string | undefined {\n if (!isRecord(result)) {\n return undefined;\n }\n\n const contentText = mcpContentText(result.content);\n const structuredText = 'structuredContent' in result ? toolOutputText(result.structuredContent) : undefined;\n if (!structuredText) {\n return contentText;\n }\n\n if (!contentText || contentText.trim() === structuredToolResultNotice) {\n return structuredText;\n }\n\n return `${contentText}\\n\\n${structuredText}`;\n}\n\nfunction mcpContentText(content: unknown): string | undefined {\n if (!Array.isArray(content)) {\n return undefined;\n }\n\n return content\n .map((entry) => {\n if (!isRecord(entry)) {\n return '';\n }\n\n if (typeof entry.text === 'string') {\n return entry.text;\n }\n\n return JSON.stringify(entry);\n })\n .filter(Boolean)\n .join('\\n\\n') || undefined;\n}\n\nfunction dynamicToolContentText(contentItems: unknown): string | undefined {\n if (!Array.isArray(contentItems)) {\n return undefined;\n }\n\n return contentItems\n .map((entry) => {\n if (isRecord(entry) && typeof entry.text === 'string') {\n return entry.text;\n }\n\n return JSON.stringify(entry);\n })\n .filter(Boolean)\n .join('\\n\\n') || undefined;\n}\n\nfunction fileChangesText(changes: unknown[]): string | undefined {\n return changes\n .map((change) => {\n if (!isRecord(change)) {\n return JSON.stringify(change);\n }\n\n const kind = patchChangeKind(change.kind) ?? 'update';\n const path = typeof change.path === 'string' ? change.path : 'unknown';\n return `${kind} ${path}`;\n })\n .join('\\n') || undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction boundedToolText(value: string | undefined): string | undefined {\n return value !== undefined && Buffer.byteLength(value) <= MAX_TOOL_PAYLOAD_BYTES ? value : undefined;\n}\n\nfunction boundedToolPayload(value: unknown): unknown {\n if (value === undefined || !jsonValueFitsByteBudget(value, MAX_TOOL_PAYLOAD_BYTES)) {\n return undefined;\n }\n return value;\n}\n\nfunction jsonValueFitsByteBudget(value: unknown, maxBytes: number): boolean {\n if (jsonValueContainsOversizedStringOrCycle(value, maxBytes, new Set<object>())) {\n return false;\n }\n try {\n const serialized = JSON.stringify(value);\n return serialized !== undefined && Buffer.byteLength(serialized) <= maxBytes;\n } catch {\n return false;\n }\n}\n\nfunction jsonValueContainsOversizedStringOrCycle(\n value: unknown,\n maxBytes: number,\n ancestors: Set<object>,\n): boolean {\n if (typeof value === 'string') return Buffer.byteLength(value) > maxBytes;\n if (value === null || typeof value !== 'object') return false;\n if (ancestors.has(value)) return true;\n\n ancestors.add(value);\n const entries = Array.isArray(value) ? value : Object.values(value);\n const oversized = entries.some((entry) => jsonValueContainsOversizedStringOrCycle(entry, maxBytes, ancestors));\n ancestors.delete(value);\n return oversized;\n}\n","import type { v2 } from '../codex/index';\nimport type {\n SurfaceMessage,\n SurfaceMessageMediaPart,\n SurfaceMessageQuestionPart,\n SurfaceMessageReasoningPart,\n SurfaceMessageTextPart,\n SurfaceMessageToolPart,\n SurfaceMessageToolPartUpdate,\n} from '@codex-app-sdk/core/surface';\nimport { isRecord } from './codex-surface-prompts';\n\nexport function activeTurnId(turns: v2.Turn[]): string | null {\n for (let index = turns.length - 1; index >= 0; index -= 1) {\n const turn = turns[index];\n if (turn?.status === 'inProgress') return turn.id;\n }\n return null;\n}\n\nexport function ensureAssistantTurnMessage(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n options: { createdAt?: string; forceSegment?: boolean } = {},\n): SurfaceMessage[] {\n const next = [...messages];\n const lastTurnIndex = findLastIndex(next, (message) => message.metadata?.turnId === turnId);\n const lastTurnMessage = lastTurnIndex >= 0 ? next[lastTurnIndex] : undefined;\n if (\n lastTurnMessage?.role === 'assistant'\n && lastTurnMessage.kind === undefined\n && lastTurnMessage.status === 'streaming'\n ) {\n return next;\n }\n\n if (options.forceSegment) {\n const previousAssistantIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n const previousAssistant = previousAssistantIndex >= 0 ? next[previousAssistantIndex] : undefined;\n if (previousAssistant?.parts.length === 0) {\n next.splice(previousAssistantIndex, 1);\n } else if (previousAssistant) {\n next.splice(previousAssistantIndex, 1, { ...previousAssistant, status: 'complete' });\n }\n } else {\n const existing = next.find((message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n && message.status === 'streaming'\n ));\n if (existing) return next;\n }\n\n const segmentCount = next.filter((message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n )).length;\n const id = segmentCount === 0 ? `assistant-${turnId}` : `assistant-${turnId}-segment-${segmentCount}`;\n next.push({\n id,\n role: 'assistant',\n status: 'streaming',\n turnId,\n parts: [],\n createdAt: options.createdAt ?? new Date().toISOString(),\n metadata: { conversationId: threadId, turnId },\n });\n return next;\n}\n\nexport function appendAssistantTextDelta(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n itemId: string,\n delta: string,\n phase?: SurfaceMessageTextPart['phase'],\n): SurfaceMessage[] {\n if (!delta) return [...messages];\n const next = ensureAssistantTurnMessage(messages, threadId, turnId);\n const messageIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n const parts = [...message.parts];\n const lastPart = parts.at(-1);\n if (lastPart?.type === 'text' && lastPart.itemId === itemId) {\n parts.splice(parts.length - 1, 1, {\n ...lastPart,\n text: `${lastPart.text}${delta}`,\n ...(phase ? { phase } : {}),\n });\n } else {\n parts.push({ type: 'text', text: delta, itemId, ...(phase ? { phase } : {}) });\n }\n next.splice(messageIndex, 1, { ...message, status: 'streaming', parts });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function upsertAssistantReasoningSummaries(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n itemId: string,\n summaries: readonly string[],\n): SurfaceMessage[] {\n const normalized = summaries\n .map((summary, summaryIndex): SurfaceMessageReasoningPart | null => {\n const text = summary.trim();\n return text ? { type: 'reasoning', summary: text, itemId, summaryIndex } : null;\n })\n .filter((part): part is SurfaceMessageReasoningPart => part !== null);\n if (normalized.length === 0) return [...messages];\n\n const next = ensureAssistantTurnMessage(messages, threadId, turnId);\n const messageIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n\n const firstExistingIndex = message.parts.findIndex((part) => (\n part.type === 'reasoning' && part.itemId === itemId\n ));\n const parts = message.parts.filter((part) => (\n part.type !== 'reasoning' || part.itemId !== itemId\n ));\n parts.splice(firstExistingIndex >= 0 ? firstExistingIndex : parts.length, 0, ...normalized);\n next.splice(messageIndex, 1, { ...message, status: 'streaming', parts });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function upsertAssistantText(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n itemId: string,\n text: string,\n phase?: SurfaceMessageTextPart['phase'],\n): SurfaceMessage[] {\n const next = [...messages];\n for (let messageIndex = next.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = next[messageIndex];\n if (message?.role !== 'assistant' || message.metadata?.turnId !== turnId) continue;\n const partIndex = message.parts.findIndex((part) => part.type === 'text' && part.itemId === itemId);\n if (partIndex < 0) continue;\n const parts = [...message.parts];\n const existingPart = parts[partIndex] as SurfaceMessageTextPart;\n parts.splice(partIndex, 1, {\n ...existingPart,\n text,\n itemId,\n ...(phase ? { phase } : {}),\n });\n next.splice(messageIndex, 1, { ...message, parts });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n }\n\n const ensured = ensureAssistantTurnMessage(next, threadId, turnId);\n const messageIndex = findLastIndex(ensured, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n const message = messageIndex >= 0 ? ensured[messageIndex] : undefined;\n if (!message) return ensured;\n const textPart: SurfaceMessageTextPart = {\n type: 'text',\n text,\n itemId,\n ...(phase ? { phase } : {}),\n };\n ensured.splice(messageIndex, 1, {\n ...message,\n parts: [...message.parts, textPart],\n });\n return pruneEmptyAssistantPlaceholders(ensured, threadId);\n}\n\nexport function removeAssistantText(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n itemId: string,\n): SurfaceMessage[] {\n const next = messages.map((message) => {\n if (message.role !== 'assistant' || message.metadata?.turnId !== turnId) return message;\n const parts = message.parts.filter((part) => part.type !== 'text' || part.itemId !== itemId);\n return parts.length === message.parts.length ? message : { ...message, parts };\n });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function extractProposedPlanDocument(text: string): { markdown: string; visibleText: string } | null {\n const match = /<proposed_plan>([\\s\\S]*?)<\\/proposed_plan>/iu.exec(text);\n const markdown = match?.[1]?.trim() ?? '';\n if (!match || !markdown) return null;\n return {\n markdown,\n visibleText: `${text.slice(0, match.index)}${text.slice(match.index + match[0].length)}`.trim(),\n };\n}\n\nexport function upsertAssistantToolPart(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n toolPart: SurfaceMessageToolPart,\n): SurfaceMessage[] {\n let next = [...messages];\n let messageIndex = next.findIndex((message) => (\n message.role === 'assistant'\n && message.metadata?.turnId === turnId\n && message.parts.some((part) => part.type === 'tool' && part.id === toolPart.id)\n ));\n if (messageIndex < 0) {\n next = ensureAssistantTurnMessage(next, threadId, turnId);\n messageIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n }\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => part.type === 'tool' && part.id === toolPart.id);\n if (partIndex >= 0) {\n const existing = parts[partIndex] as SurfaceMessageToolPart;\n parts.splice(partIndex, 1, {\n ...existing,\n ...toolPart,\n body: toolPart.body ?? existing.body,\n input: toolPart.input ?? existing.input,\n output: toolPart.output ?? existing.output,\n statusText: toolPart.statusText ?? transitionedToolStatusText(existing.statusText, toolPart.status),\n metadata: { ...(existing.metadata ?? {}), ...(toolPart.metadata ?? {}) },\n });\n } else {\n parts.push(toolPart);\n }\n next.splice(messageIndex, 1, { ...message, status: 'streaming', parts });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function upsertAssistantMediaPart(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n mediaPart: SurfaceMessageMediaPart,\n): SurfaceMessage[] {\n let next = [...messages];\n let messageIndex = next.findIndex((message) => (\n message.role === 'assistant'\n && message.metadata?.turnId === turnId\n && message.parts.some((part) => part.type === 'media' && part.itemId === mediaPart.itemId)\n ));\n if (messageIndex < 0 && mediaPart.itemId) {\n messageIndex = next.findIndex((message) => (\n message.role === 'assistant'\n && message.metadata?.turnId === turnId\n && message.parts.some((part) => part.type === 'tool' && part.id === mediaPart.itemId)\n ));\n }\n if (messageIndex < 0) {\n next = ensureAssistantTurnMessage(next, threadId, turnId);\n messageIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n }\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => (\n part.type === 'media' && part.itemId === mediaPart.itemId\n ));\n if (partIndex >= 0) parts.splice(partIndex, 1, mediaPart);\n else parts.push(mediaPart);\n next.splice(messageIndex, 1, { ...message, status: 'streaming', parts });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function upsertAssistantQuestionPart(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n questionPart: SurfaceMessageQuestionPart,\n): SurfaceMessage[] {\n let next = [...messages];\n let messageIndex = next.findIndex((message) => (\n message.role === 'assistant'\n && message.metadata?.turnId === turnId\n && message.parts.some((part) => (\n part.type === 'question' && part.request.id === questionPart.request.id\n ))\n ));\n if (messageIndex < 0) {\n next = ensureAssistantTurnMessage(next, threadId, turnId);\n messageIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n }\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => (\n part.type === 'question' && part.request.id === questionPart.request.id\n ));\n if (partIndex >= 0) parts.splice(partIndex, 1, questionPart);\n else parts.push(questionPart);\n next.splice(messageIndex, 1, { ...message, parts });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function surfaceMediaPartsEqual(\n left: SurfaceMessageMediaPart,\n right: SurfaceMessageMediaPart,\n): boolean {\n return left.itemId === right.itemId\n && left.media.url === right.media.url\n && left.media.alt === right.media.alt\n && left.media.mimeType === right.media.mimeType\n && left.media.prompt === right.media.prompt\n && left.media.title === right.media.title;\n}\n\nexport function updateAssistantToolPart(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n update: SurfaceMessageToolPartUpdate,\n): SurfaceMessage[] {\n const next = [...messages];\n const messageIndex = next.findIndex((message) => (\n message.role === 'assistant'\n && message.metadata?.turnId === turnId\n && message.parts.some((part) => part.type === 'tool' && part.id === update.itemId)\n ));\n if (messageIndex < 0) {\n if (!update.fallbackToolPart) return next;\n const inserted = upsertAssistantToolPart(next, threadId, turnId, update.fallbackToolPart);\n return updateAssistantToolPart(inserted, threadId, turnId, {\n ...update,\n fallbackToolPart: undefined,\n });\n }\n const message = next[messageIndex];\n if (!message) return next;\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => part.type === 'tool' && part.id === update.itemId);\n const existing = parts[partIndex] as SurfaceMessageToolPart | undefined;\n if (!existing) return next;\n parts.splice(partIndex, 1, {\n ...existing,\n ...(update.title !== undefined ? { title: update.title } : {}),\n ...(update.status !== undefined ? { status: update.status } : {}),\n ...(update.statusText !== undefined ? { statusText: update.statusText ?? undefined } : {}),\n ...(update.body !== undefined ? { body: update.body } : {}),\n ...(update.bodyDelta !== undefined ? { body: `${existing.body ?? ''}${update.bodyDelta}` } : {}),\n ...(update.bodyAppend !== undefined\n ? { body: [existing.body, update.bodyAppend].filter(Boolean).join('\\n') }\n : {}),\n ...(update.input !== undefined ? { input: update.input } : {}),\n ...(update.output !== undefined ? { output: update.output } : {}),\n ...(update.metadata !== undefined\n ? { metadata: { ...(existing.metadata ?? {}), ...update.metadata } }\n : {}),\n });\n next.splice(messageIndex, 1, { ...message, parts });\n return next;\n}\n\nexport function appendCompactionMarker(\n messages: readonly SurfaceMessage[],\n threadId: string,\n turnId: string,\n status: 'streaming' | 'complete' = 'streaming',\n): SurfaceMessage[] {\n if (messages.some((message) => message.kind === 'compaction' && message.metadata?.turnId === turnId)) {\n return messages.map((message) => (\n status === 'complete' && message.kind === 'compaction' && message.metadata?.turnId === turnId\n ? { ...message, status }\n : message\n ));\n }\n const next = [...messages];\n const activeAssistantIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n ));\n const activeAssistant = activeAssistantIndex >= 0 ? next[activeAssistantIndex] : undefined;\n if (activeAssistant?.parts.length === 0) {\n next.splice(activeAssistantIndex, 1);\n } else if (activeAssistant) {\n next.splice(activeAssistantIndex, 1, { ...activeAssistant, status: 'complete' });\n }\n next.push({\n id: `compaction-${turnId}`,\n kind: 'compaction',\n role: 'assistant',\n status,\n turnId,\n parts: [],\n createdAt: new Date().toISOString(),\n metadata: { conversationId: threadId, turnId },\n });\n return pruneEmptyAssistantPlaceholders(next, threadId);\n}\n\nexport function finalizeTurnToolParts(\n messages: SurfaceMessage[],\n turnId: string,\n turnStatus: v2.TurnStatus,\n): SurfaceMessage[] {\n const toolStatus: SurfaceMessageToolPart['status'] = turnStatus === 'completed' ? 'completed' : 'failed';\n return messages.map((message) => {\n if (message.metadata?.turnId !== turnId) return message;\n let changed = false;\n const parts = message.parts.map((part) => {\n if (part.type !== 'tool' || part.status !== 'running') return part;\n changed = true;\n return {\n ...part,\n status: toolStatus,\n statusText: transitionedToolStatusText(part.statusText, toolStatus),\n };\n });\n return changed ? { ...message, parts } : message;\n });\n}\n\nfunction transitionedToolStatusText(\n statusText: string | undefined,\n phase: SurfaceMessageToolPart['status'],\n): string | undefined {\n if (phase === 'running') return statusText;\n if (!statusText) return statusText;\n try {\n const parsed: unknown = JSON.parse(statusText);\n if (!isRecord(parsed)) return statusText;\n return JSON.stringify({ ...parsed, phase });\n } catch {\n return statusText;\n }\n}\n\nexport function pruneEmptyAssistantPlaceholders(messages: SurfaceMessage[], threadId: string): SurfaceMessage[] {\n const relevantIndexes = messages\n .map((message, index) => ({ message, index }))\n .filter(({ message }) => message.metadata?.conversationId === threadId);\n const lastIndex = relevantIndexes.at(-1)?.index ?? -1;\n return messages.filter((message, index) => (\n message.metadata?.conversationId !== threadId\n || index === lastIndex\n || message.role !== 'assistant'\n || message.kind !== undefined\n || message.parts.length > 0\n ));\n}\n\nfunction findLastIndex<T>(values: readonly T[], predicate: (value: T) => boolean): number {\n for (let index = values.length - 1; index >= 0; index -= 1) {\n const value = values[index];\n if (value !== undefined && predicate(value)) return index;\n }\n return -1;\n}\n\nexport function addUnique<T>(values: readonly T[], value: T): T[] {\n return values.includes(value) ? [...values] : [...values, value];\n}\n\nexport function formatPlanMarkdown(\n explanation: string | null,\n plan: readonly { step: string; status: string }[],\n): string {\n return [\n explanation?.trim() ?? '',\n ...plan.map((entry) => `${entry.status === 'completed' ? '- [x]' : '- [ ]'} ${entry.step}`),\n ].filter(Boolean).join('\\n');\n}\n\nexport function planProgressToolPart(\n turnId: string,\n markdown: string,\n status: SurfaceMessageToolPart['status'],\n): SurfaceMessageToolPart {\n return {\n type: 'tool',\n id: `plan-progress-${turnId}`,\n kind: 'generic',\n title: 'plan',\n status,\n body: markdown,\n statusText: JSON.stringify({\n source: 'codex',\n action: 'plan',\n phase: status,\n params: {\n addedLines: markdown.split('\\n').filter((line) => line.trim()).length,\n operation: 'write',\n target: 'plan',\n },\n }),\n metadata: { planProgress: true },\n };\n}\n","import type { Thread } from '../codex/generated/v2/Thread';\nimport type { ThreadItem } from '../codex/generated/v2/ThreadItem';\nimport type { Turn } from '../codex/generated/v2/Turn';\nimport { basename, extname, isAbsolute } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type {\n CodexSurfaceClientRequest,\n SurfaceMessage,\n SurfaceMessageAttachment,\n SurfaceMessageMediaPart,\n SurfaceMessagePart,\n SurfaceMessageQuestionPart,\n} from '@codex-app-sdk/core/surface';\nimport { codexThreadItemToToolPart } from './codex-tool-part-adapter';\nimport {\n extractProposedPlanDocument,\n finalizeTurnToolParts,\n} from './codex-surface-message-state';\n\nexport { codexThreadItemToToolPart as codexItemToToolPart } from './codex-tool-part-adapter';\n\nconst MAX_INLINE_GENERATED_IMAGE_BYTES = 16 * 1024 * 1024;\nconst supportedGeneratedImageMimeTypes = new Set([\n 'image/avif',\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n]);\n\nexport function codexThreadToSurfaceMessages(thread: Thread): SurfaceMessage[] {\n const turns = Array.isArray(thread.turns) ? thread.turns : [];\n return turns.flatMap((turn) => codexTurnToSurfaceMessages(thread.id, turn));\n}\n\n/**\n * Keep bounded data previews from optimistic messages when app-server history\n * rematerializes the same user attachment from its local filesystem path.\n * Filesystem URLs are not renderer-safe in Electron and are intentionally not\n * used as image sources.\n */\nexport function preserveHistoricalAttachmentPreviews(\n previousMessages: readonly SurfaceMessage[],\n historyMessages: readonly SurfaceMessage[],\n): SurfaceMessage[] {\n const previewsByPath = new Map<string, string>();\n for (const message of previousMessages) {\n for (const part of message.parts) {\n if (part.type !== 'attachment' || part.attachment.kind !== 'image' || !part.attachment.path) continue;\n if (isRendererSafeImagePreview(part.attachment.url)) {\n previewsByPath.set(part.attachment.path, part.attachment.url);\n }\n }\n }\n if (previewsByPath.size === 0) return [...historyMessages];\n\n return historyMessages.map((message) => {\n let changed = false;\n const parts = message.parts.map((part) => {\n if (part.type !== 'attachment' || part.attachment.kind !== 'image' || !part.attachment.path) {\n return part;\n }\n const previewUrl = previewsByPath.get(part.attachment.path);\n if (!previewUrl || part.attachment.url === previewUrl) return part;\n changed = true;\n return { ...part, attachment: { ...part.attachment, url: previewUrl } };\n });\n return changed ? { ...message, parts } : message;\n });\n}\n\nexport function codexTurnToSurfaceMessages(threadId: string, turn: Turn): SurfaceMessage[] {\n const messages: SurfaceMessage[] = [];\n const assistantParts: SurfaceMessagePart[] = [];\n const createdAt = timestampToIso(turn.startedAt ?? turn.completedAt);\n let assistantSegmentIndex = 0;\n let sawAssistantActivity = false;\n const initialUserMessageKeys = new Set<string>();\n\n const flushAssistantMessage = () => {\n if (assistantParts.length === 0) {\n return;\n }\n\n const segmentSuffix = assistantSegmentIndex === 0 ? '' : `-segment-${assistantSegmentIndex}`;\n messages.push({\n id: `assistant-${turn.id}${segmentSuffix}`,\n role: 'assistant',\n status: surfaceMessageStatus(turn.status),\n turnId: turn.id,\n parts: [...assistantParts],\n createdAt,\n metadata: { conversationId: threadId, turnId: turn.id },\n });\n assistantParts.length = 0;\n assistantSegmentIndex += 1;\n };\n\n for (const item of Array.isArray(turn.items) ? turn.items : []) {\n if (item.type === 'userMessage') {\n const parts = userMessageParts(item);\n const asyncQuestionRequestIds = asyncQuestionRequestIdsForUserMessage(item);\n if (parts.length > 0) {\n const isSteerMessage = sawAssistantActivity;\n const initialMessageKey = isSteerMessage ? null : JSON.stringify(parts);\n if (initialMessageKey && initialUserMessageKeys.has(initialMessageKey)) continue;\n if (initialMessageKey) initialUserMessageKeys.add(initialMessageKey);\n flushAssistantMessage();\n messages.push({\n id: item.clientId ?? `user-${threadId}-${turn.id}-${item.id ?? messages.length}`,\n ...(isSteerMessage ? { kind: 'steer' as const } : {}),\n role: 'user',\n status: 'complete',\n turnId: turn.id,\n parts,\n createdAt,\n metadata: {\n conversationId: threadId,\n turnId: turn.id,\n ...(asyncQuestionRequestIds.length > 0 ? {\n asyncQuestionRequestIds,\n asyncQuestionAnswers: asyncQuestionAnswersForUserMessage(item),\n } : {}),\n },\n });\n }\n continue;\n }\n\n if (item.type === 'contextCompaction') {\n sawAssistantActivity = true;\n flushAssistantMessage();\n const markerId = `compaction-${turn.id}`;\n if (!messages.some((message) => message.id === markerId)) {\n messages.push({\n id: markerId,\n kind: 'compaction',\n role: 'assistant',\n status: 'complete',\n turnId: turn.id,\n parts: [],\n createdAt,\n metadata: { conversationId: threadId, turnId: turn.id },\n });\n }\n continue;\n }\n\n if (item.type === 'agentMessage') {\n const text = typeof item.text === 'string' ? item.text : '';\n const questionPart = codexItemToQuestionPart(threadId, turn.id, item, true);\n const proposedPlan = item.phase === 'final_answer'\n ? extractProposedPlanDocument(text)\n : null;\n if (proposedPlan && !questionPart) {\n if (proposedPlan.visibleText) {\n sawAssistantActivity = true;\n assistantParts.push({\n type: 'text',\n text: proposedPlan.visibleText,\n itemId: item.id,\n ...(item.phase ? { phase: item.phase } : {}),\n });\n }\n } else if (text && !questionPart) {\n sawAssistantActivity = true;\n assistantParts.push({\n type: 'text',\n text,\n itemId: item.id,\n ...(item.phase ? { phase: item.phase } : {}),\n });\n }\n if (questionPart) {\n sawAssistantActivity = true;\n assistantParts.push(questionPart);\n }\n continue;\n }\n\n if (item.type === 'reasoning') {\n const summaries = item.summary\n .map((summary, summaryIndex) => ({ summary: summary.trim(), summaryIndex }))\n .filter(({ summary }) => summary.length > 0);\n if (summaries.length > 0) {\n sawAssistantActivity = true;\n assistantParts.push(...summaries.map(({ summary, summaryIndex }) => ({\n type: 'reasoning' as const,\n summary,\n itemId: item.id,\n summaryIndex,\n })));\n }\n continue;\n }\n\n if (item.type === 'exitedReviewMode') {\n const text = typeof item.review === 'string' ? item.review : '';\n if (text) {\n sawAssistantActivity = true;\n assistantParts.push({ type: 'text', text, itemId: item.id });\n }\n continue;\n }\n\n const toolPart = codexThreadItemToToolPart(item);\n if (toolPart) {\n sawAssistantActivity = true;\n assistantParts.push(toolPart);\n }\n const mediaPart = codexItemToMediaPart(item);\n if (mediaPart) {\n sawAssistantActivity = true;\n assistantParts.push(mediaPart);\n }\n }\n\n flushAssistantMessage();\n return turn.status === 'inProgress'\n ? messages\n : finalizeTurnToolParts(messages, turn.id, turn.status);\n}\n\nexport function codexItemToSurfaceMessage(\n threadId: string,\n turn: Pick<Turn, 'id' | 'status' | 'startedAt'>,\n item: ThreadItem,\n): SurfaceMessage | null {\n const createdAt = timestampToIso(turn.startedAt);\n if (item.type === 'userMessage') {\n const parts = userMessageParts(item);\n const asyncQuestionRequestIds = asyncQuestionRequestIdsForUserMessage(item);\n return parts.length > 0 ? {\n id: item.clientId ?? `user-${threadId}-${turn.id}-${item.id}`,\n role: 'user',\n status: 'complete',\n turnId: turn.id,\n parts,\n createdAt,\n metadata: {\n conversationId: threadId,\n turnId: turn.id,\n itemId: item.id,\n ...(asyncQuestionRequestIds.length > 0 ? {\n asyncQuestionRequestIds,\n asyncQuestionAnswers: asyncQuestionAnswersForUserMessage(item),\n } : {}),\n },\n } : null;\n }\n\n if (item.type === 'agentMessage' || item.type === 'exitedReviewMode') {\n const text = item.type === 'agentMessage' ? item.text : item.review;\n const proposedPlan = item.type === 'agentMessage' && item.phase === 'final_answer'\n ? extractProposedPlanDocument(text)\n : null;\n const questionPart = item.type === 'agentMessage'\n ? codexItemToQuestionPart(threadId, turn.id, item, true)\n : null;\n const parts: SurfaceMessagePart[] = [\n ...(!questionPart && (proposedPlan?.visibleText || (!proposedPlan && text)) ? [{\n type: 'text' as const,\n text: proposedPlan?.visibleText ?? text,\n itemId: item.id,\n ...(item.type === 'agentMessage' && item.phase ? { phase: item.phase } : {}),\n }] : []),\n ...(questionPart ? [questionPart] : []),\n ];\n return parts.length > 0 ? {\n id: `assistant-${item.id}`,\n role: 'assistant',\n status: surfaceMessageStatus(turn.status),\n turnId: turn.id,\n parts,\n createdAt,\n metadata: { conversationId: threadId, turnId: turn.id, itemId: item.id },\n } : null;\n }\n\n if (item.type === 'reasoning') {\n const parts = item.summary\n .map((summary, summaryIndex) => ({ summary: summary.trim(), summaryIndex }))\n .filter(({ summary }) => summary.length > 0)\n .map(({ summary, summaryIndex }) => ({\n type: 'reasoning' as const,\n summary,\n itemId: item.id,\n summaryIndex,\n }));\n return parts.length > 0 ? {\n id: `assistant-${item.id}`,\n role: 'assistant',\n status: surfaceMessageStatus(turn.status),\n turnId: turn.id,\n parts,\n createdAt,\n metadata: { conversationId: threadId, turnId: turn.id, itemId: item.id },\n } : null;\n }\n\n const parts: SurfaceMessagePart[] = [];\n const toolPart = codexThreadItemToToolPart(item);\n if (toolPart) parts.push(toolPart);\n const mediaPart = codexItemToMediaPart(item);\n if (mediaPart) parts.push(mediaPart);\n const message: SurfaceMessage | null = parts.length > 0 ? {\n id: `assistant-${item.id}`,\n role: 'assistant',\n status: surfaceMessageStatus(turn.status),\n turnId: turn.id,\n parts,\n createdAt,\n metadata: { conversationId: threadId, turnId: turn.id, itemId: item.id },\n } : null;\n if (!message || turn.status === 'inProgress') return message;\n return finalizeTurnToolParts([message], turn.id, turn.status)[0] ?? null;\n}\n\nexport function codexItemToQuestionPart(\n threadId: string,\n turnId: string,\n item: Extract<ThreadItem, { type: 'agentMessage' }>,\n historical = false,\n): SurfaceMessageQuestionPart | null {\n if (item.delivery !== 'async') return null;\n const structuredQuestions = item.questions ?? [];\n const questions = structuredQuestions.length > 0\n ? structuredQuestions.map((question, index) => ({\n id: JSON.stringify(['request_user_input_async', item.id, index]),\n header: question.title,\n question: question.title,\n isOther: true,\n isSecret: false,\n options: question.options?.map((label) => ({ label, description: '' })) ?? null,\n }))\n : item.text.trim()\n ? [{\n id: item.id,\n header: 'Question',\n question: item.text,\n isOther: true,\n isSecret: false,\n options: null,\n }]\n : [];\n if (questions.length === 0) return null;\n const request: Extract<CodexSurfaceClientRequest, { kind: 'ask_user' }> = {\n id: `async-question:${item.id}`,\n kind: 'ask_user',\n conversationId: threadId,\n turnId,\n itemId: item.id,\n payload: {\n request: {\n itemId: item.id,\n delivery: 'async',\n blocking: false,\n questions,\n },\n },\n };\n return { type: 'question', request, ...(historical ? { historical: true } : {}) };\n}\n\nexport function codexItemToMediaPart(item: ThreadItem): SurfaceMessageMediaPart | null {\n if (item.type !== 'imageGeneration') return null;\n const toolPart = codexThreadItemToToolPart(item);\n if (toolPart?.status !== 'completed') return null;\n\n const candidatePath = typeof item.savedPath === 'string' && isAbsolute(item.savedPath)\n ? item.savedPath\n : null;\n const savedPathMimeType = candidatePath ? mimeTypeForSource(candidatePath) : undefined;\n const savedPath = savedPathMimeType && supportedGeneratedImageMimeTypes.has(savedPathMimeType)\n ? candidatePath\n : null;\n const result = typeof item.result === 'string' ? item.result.trim() : '';\n const inlineImage = codexImageDataUrl(result);\n const url = inlineImage?.url ?? (savedPath ? pathToFileURL(savedPath).href : undefined);\n if (!url) return null;\n\n const prompt = typeof item.revisedPrompt === 'string' ? item.revisedPrompt.trim() : '';\n return {\n type: 'media',\n itemId: item.id,\n media: {\n url,\n alt: 'Generated image',\n title: 'Generated image',\n mimeType: inlineImage?.mimeType ?? savedPathMimeType ?? 'image/png',\n ...(prompt ? { prompt } : {}),\n },\n };\n}\n\nfunction userMessageParts(item: Extract<ThreadItem, { type: 'userMessage' }>): SurfaceMessagePart[] {\n const content = Array.isArray(item.content) ? item.content : [];\n const hasTextInput = content.some((input) => (\n isRecord(input) && input.type === 'text' && typeof input.text === 'string' && input.text.length > 0\n ));\n const parts: SurfaceMessagePart[] = [];\n let text: string[] = [];\n const renderedSkills = new Set<string>();\n const flushText = () => {\n if (text.length > 0) parts.push({ type: 'text', text: text.join('\\n') });\n text = [];\n };\n\n for (const input of content) {\n if (isRecord(input) && input.type === 'skill' && typeof input.name === 'string') {\n // app-server persists selected skills alongside the original prompt text.\n // The text is the canonical user-authored display value; rendering the\n // structured execution metadata too repeats the skill mention.\n if (hasTextInput) continue;\n const normalizedName = input.name.toLowerCase();\n if (renderedSkills.has(normalizedName)) continue;\n renderedSkills.add(normalizedName);\n }\n const inputText = userInputText(input);\n if (inputText) {\n text.push(inputText);\n continue;\n }\n const attachment = userInputAttachment(input);\n if (!attachment) continue;\n flushText();\n parts.push({ type: 'attachment', attachment });\n }\n flushText();\n return parts;\n}\n\nfunction userInputText(input: unknown): string {\n if (!isRecord(input) || typeof input.type !== 'string') {\n return '';\n }\n if (input.type === 'text' && typeof input.text === 'string') {\n return asyncQuestionReply(input.text)?.displayText ?? input.text;\n }\n if (input.type === 'skill' && typeof input.name === 'string') return `$${input.name}`;\n return '';\n}\n\nfunction asyncQuestionRequestIdsForUserMessage(\n item: Extract<ThreadItem, { type: 'userMessage' }>,\n): string[] {\n const ids = new Set<string>();\n for (const input of Array.isArray(item.content) ? item.content : []) {\n if (!isRecord(input) || input.type !== 'text' || typeof input.text !== 'string') continue;\n for (const requestId of asyncQuestionReply(input.text)?.requestIds ?? []) ids.add(requestId);\n }\n return [...ids];\n}\n\nfunction asyncQuestionAnswersForUserMessage(item: Extract<ThreadItem, { type: 'userMessage' }>): Record<string, { answers: string[] }> {\n const answers: Record<string, { answers: string[] }> = {};\n for (const input of Array.isArray(item.content) ? item.content : []) {\n if (!isRecord(input) || input.type !== 'text' || typeof input.text !== 'string') continue;\n Object.assign(answers, asyncQuestionReply(input.text)?.answers);\n }\n return answers;\n}\n\nfunction asyncQuestionReply(text: string): { displayText: string; requestIds: string[]; answers: Record<string, { answers: string[] }> } | null {\n const match = text.match(\n /^<send_user_message_question_reply>\\s*([\\s\\S]*?)\\s*<\\/send_user_message_question_reply>$/,\n );\n if (!match?.[1]) return null;\n try {\n const value: unknown = JSON.parse(match[1]);\n if (!Array.isArray(value)) return null;\n const replies = value.filter((entry): entry is {\n questionItemId: string;\n question: string;\n answer: string;\n } => (\n isRecord(entry)\n && typeof entry.questionItemId === 'string'\n && typeof entry.question === 'string'\n && typeof entry.answer === 'string'\n ));\n if (replies.length === 0) return null;\n const requestIds = replies.flatMap((reply) => {\n try {\n const questionId: unknown = JSON.parse(reply.questionItemId);\n if (\n Array.isArray(questionId)\n && questionId[0] === 'request_user_input_async'\n && typeof questionId[1] === 'string'\n ) return [`async-question:${questionId[1]}`];\n } catch {\n // Open-ended asynchronous questions use their item id directly.\n }\n return [`async-question:${reply.questionItemId}`];\n });\n return {\n displayText: replies.length === 1\n ? replies[0]!.answer\n : replies.map((reply) => `${reply.question}: ${reply.answer}`).join('\\n'),\n requestIds,\n answers: Object.fromEntries(replies.map((reply) => [reply.questionItemId, { answers: [reply.answer] }])),\n };\n } catch {\n return null;\n }\n}\n\nfunction userInputAttachment(input: unknown): SurfaceMessageAttachment | null {\n if (!isRecord(input) || typeof input.type !== 'string') return null;\n if (input.type === 'mention' && typeof input.path === 'string') {\n const name = typeof input.name === 'string' && input.name.trim()\n ? input.name.trim()\n : attachmentName(input.path, 'File');\n const mimeType = mimeTypeForSource(input.path);\n return {\n kind: 'file',\n name,\n path: input.path,\n ...(mimeType ? { mimeType } : {}),\n };\n }\n if (input.type === 'image' && typeof input.url === 'string') {\n const mimeType = mimeTypeForSource(input.url);\n return {\n kind: 'image',\n name: attachmentName(input.url, 'Image'),\n url: input.url,\n ...(mimeType ? { mimeType } : {}),\n };\n }\n if (input.type === 'localImage' && typeof input.path === 'string') {\n const mimeType = mimeTypeForSource(input.path);\n return {\n kind: 'image',\n name: attachmentName(input.path, 'Image'),\n path: input.path,\n ...(mimeType ? { mimeType } : {}),\n };\n }\n return null;\n}\n\nfunction attachmentName(source: string, fallback: string): string {\n try {\n const path = /^[a-z][a-z\\d+.-]*:/i.test(source) ? new URL(source).pathname : source;\n const name = basename(decodeURIComponent(path)).trim();\n return name || fallback;\n } catch {\n return basename(source).trim() || fallback;\n }\n}\n\nfunction mimeTypeForSource(source: string): string | undefined {\n const dataMimeType = /^data:([^;,]+)/i.exec(source)?.[1]?.toLowerCase();\n if (dataMimeType) return dataMimeType;\n let extension = '';\n try {\n const path = /^[a-z][a-z\\d+.-]*:/i.test(source) ? new URL(source).pathname : source;\n extension = extname(path).slice(1).toLowerCase();\n } catch {\n extension = extname(source).slice(1).toLowerCase();\n }\n return ({\n avif: 'image/avif',\n gif: 'image/gif',\n heic: 'image/heic',\n heif: 'image/heif',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n pdf: 'application/pdf',\n png: 'image/png',\n svg: 'image/svg+xml',\n webp: 'image/webp',\n } as Record<string, string>)[extension];\n}\n\nexport function codexImageDataUrl(result: string): { url: string; mimeType: string } | null {\n if (!result) return null;\n const dataUrlMatch = /^data:image\\/[a-z0-9.+-]+;base64,([a-z0-9+/=\\s]+)$/i.exec(result);\n const compact = (dataUrlMatch?.[1] ?? result).replace(/\\s+/g, '');\n const maxEncodedLength = Math.ceil(MAX_INLINE_GENERATED_IMAGE_BYTES / 3) * 4 + 4;\n if (\n !compact\n || compact.length > maxEncodedLength\n || compact.length % 4 !== 0\n || !/^[a-z0-9+/]+={0,2}$/i.test(compact)\n ) {\n return null;\n }\n const bytes = Buffer.from(compact, 'base64');\n if (bytes.byteLength === 0 || bytes.byteLength > MAX_INLINE_GENERATED_IMAGE_BYTES) return null;\n const mimeType = generatedImageMimeType(bytes);\n if (!mimeType) return null;\n return { url: `data:${mimeType};base64,${compact}`, mimeType };\n}\n\nfunction isRendererSafeImagePreview(value: string | undefined): value is string {\n return Boolean(\n value\n && value.length <= 16 * 1024 * 1024\n && /^data:image\\/(?:avif|bmp|gif|heic|heif|jpe?g|png|webp);base64,[a-z\\d+/]+={0,2}$/i.test(value),\n );\n}\n\nfunction generatedImageMimeType(bytes: Uint8Array): string | null {\n if (startsWithBytes(bytes, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) return 'image/png';\n if (startsWithBytes(bytes, [0xff, 0xd8, 0xff])) return 'image/jpeg';\n const header = Buffer.from(bytes.subarray(0, 12)).toString('ascii');\n if (header.startsWith('GIF87a') || header.startsWith('GIF89a')) return 'image/gif';\n if (header.startsWith('RIFF') && header.slice(8, 12) === 'WEBP') return 'image/webp';\n if (bytes.byteLength >= 12 && header.slice(4, 12) === 'ftypavif') return 'image/avif';\n return null;\n}\n\nfunction startsWithBytes(bytes: Uint8Array, prefix: readonly number[]): boolean {\n return prefix.every((value, index) => bytes[index] === value);\n}\n\nfunction surfaceMessageStatus(status: Turn['status']): SurfaceMessage['status'] {\n if (status === 'inProgress') return 'streaming';\n if (status === 'failed') return 'error';\n return 'complete';\n}\n\nfunction timestampToIso(timestamp: number | null | undefined): string {\n if (typeof timestamp !== 'number' || !Number.isFinite(timestamp)) {\n return new Date(0).toISOString();\n }\n return new Date(timestamp * 1000).toISOString();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { ResponseItem } from '../codex/generated/ResponseItem';\nimport type { SurfaceMessageToolPart, SurfaceMessageToolPartUpdate } from '@codex-app-sdk/core/surface';\nimport { codexThreadItemToToolPart, rawOutputToToolPartUpdate } from './codex-tool-part-adapter';\n\ntype AdaptedRawResponseItemEvent =\n | { type: 'item.started' | 'item.completed'; payload: { toolPart: SurfaceMessageToolPart } }\n | { type: 'item.updated'; payload: SurfaceMessageToolPartUpdate };\n\nexport function rawResponseItemToEvent(item: ResponseItem): AdaptedRawResponseItemEvent | null {\n if (!isRecord(item) || typeof item.type !== 'string') {\n return null;\n }\n\n if (item.type === 'local_shell_call') {\n const toolPart = codexThreadItemToToolPart(localShellCallToCommandExecution(item))!;\n\n return {\n type: rawStatusIsCompleted(item.status) ? 'item.completed' : 'item.started',\n payload: { toolPart },\n };\n }\n\n if (item.type === 'function_call') {\n const toolPart = codexThreadItemToToolPart(functionCallToThreadItem(item))!;\n\n return {\n type: 'item.started',\n payload: { toolPart },\n };\n }\n\n if (item.type === 'function_call_output') {\n return rawOutputUpdate(item.call_id, item.output);\n }\n\n if (item.type === 'custom_tool_call') {\n const toolPart = codexThreadItemToToolPart({\n type: 'dynamicToolCall',\n id: stringValue(item.call_id) ?? fallbackRawItemId(item),\n namespace: null,\n tool: stringValue(item.name) ?? 'custom_tool',\n status: item.status,\n arguments: stringValue(item.input) ?? '',\n contentItems: null,\n success: null,\n durationMs: null,\n })!;\n\n return {\n type: 'item.started',\n payload: { toolPart },\n };\n }\n\n if (item.type === 'custom_tool_call_output') {\n return rawOutputUpdate(item.call_id, item.output, stringValue(item.name) ?? undefined);\n }\n\n if (item.type === 'tool_search_call') {\n const toolPart = codexThreadItemToToolPart({\n type: 'dynamicToolCall',\n id: stringValue(item.call_id) ?? fallbackRawItemId(item),\n namespace: 'codex',\n tool: 'tool_search',\n status: item.status,\n arguments: item.arguments,\n contentItems: null,\n success: null,\n durationMs: null,\n execution: item.execution,\n })!;\n\n return {\n type: 'item.started',\n payload: { toolPart },\n };\n }\n\n if (item.type === 'tool_search_output') {\n return {\n type: 'item.updated',\n payload: rawOutputToToolPartUpdate(stringValue(item.call_id) ?? fallbackRawItemId(item), item.tools, 'tool_search', item.status),\n };\n }\n\n if (item.type === 'web_search_call') {\n const toolPart = codexThreadItemToToolPart({\n type: 'webSearch',\n id: fallbackRawItemId(item),\n query: webSearchQuery(item.action),\n action: item.action,\n })!;\n\n return {\n type: 'item.completed',\n payload: { toolPart },\n };\n }\n\n if (item.type === 'image_generation_call') {\n const toolPart = codexThreadItemToToolPart({\n type: 'dynamicToolCall',\n id: stringValue(item.id) ?? fallbackRawItemId(item),\n namespace: null,\n tool: 'image_generation',\n status: item.status,\n arguments: {\n revisedPrompt: item.revised_prompt,\n },\n contentItems: null,\n success: item.status === 'completed',\n durationMs: null,\n })!;\n\n return {\n type: 'item.completed',\n payload: { toolPart },\n };\n }\n\n return null;\n}\n\nfunction localShellCallToCommandExecution(item: Record<string, unknown>): Record<string, unknown> {\n const action = isRecord(item.action) ? item.action : {};\n const command = Array.isArray(action.command)\n ? joinCommand(action.command)\n : stringValue(action.command) ?? 'local shell';\n\n return {\n type: 'commandExecution',\n id: stringValue(item.call_id) ?? fallbackRawItemId(item),\n command,\n cwd: stringValue(action.working_directory) ?? '',\n processId: null,\n source: 'agent',\n status: rawStatusToThreadStatus(item.status),\n commandActions: [],\n aggregatedOutput: null,\n exitCode: null,\n durationMs: null,\n };\n}\n\nfunction functionCallToThreadItem(item: Record<string, unknown>): Record<string, unknown> {\n const name = stringValue(item.name) ?? 'function_call';\n const args = parseArguments(item.arguments);\n const id = stringValue(item.call_id) ?? fallbackRawItemId(item);\n\n if (name === 'shell_command' && isRecord(args)) {\n return {\n type: 'commandExecution',\n id,\n command: stringValue(args.command) ?? name,\n cwd: stringValue(args.workdir) ?? stringValue(args.cwd) ?? '',\n processId: null,\n source: 'agent',\n status: 'inProgress',\n commandActions: [],\n aggregatedOutput: null,\n exitCode: null,\n durationMs: null,\n };\n }\n\n return {\n type: 'dynamicToolCall',\n id,\n namespace: stringValue(item.namespace),\n tool: name,\n status: 'inProgress',\n arguments: args,\n contentItems: null,\n success: null,\n durationMs: null,\n };\n}\n\nfunction rawOutputUpdate(callId: unknown, output: unknown, title?: string): AdaptedRawResponseItemEvent {\n return {\n type: 'item.updated',\n payload: rawOutputToToolPartUpdate(stringValue(callId) ?? 'raw-response-output', output, title),\n };\n}\n\nfunction rawStatusToThreadStatus(status: unknown): string {\n if (status === 'completed') {\n return 'completed';\n }\n\n if (status === 'incomplete' || status === 'failed' || status === 'error') {\n return 'failed';\n }\n\n return 'inProgress';\n}\n\nfunction rawStatusIsCompleted(status: unknown): boolean {\n return status === 'completed' || status === 'failed' || status === 'error' || status === 'incomplete';\n}\n\nfunction parseArguments(value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n}\n\nfunction webSearchQuery(action: unknown): string {\n if (!isRecord(action)) {\n return 'web search';\n }\n\n return stringValue(action.query) ?? stringValue(action.searchTerm) ?? 'web search';\n}\n\nfunction joinCommand(parts: unknown[]): string {\n return parts.map((part) => {\n const value = String(part);\n return /\\s/.test(value) ? JSON.stringify(value) : value;\n }).join(' ');\n}\n\nfunction fallbackRawItemId(item: Record<string, unknown>): string {\n const callId = stringValue(item.call_id) ?? stringValue(item.id);\n if (callId) {\n return callId;\n }\n\n return `raw-${item.type}`;\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { v2 } from '../codex/index';\nimport type {\n CodexSurfaceEvent,\n CodexSurfaceJsonValue,\n CodexSurfaceTurn,\n CodexSurfaceTurnError,\n} from '@codex-app-sdk/core/surface';\n\nexport type SurfaceEventInput = CodexSurfaceEvent extends infer Event\n ? Event extends CodexSurfaceEvent\n ? Omit<Event, 'seq' | 'occurredAt' | 'origin'>\n : never\n : never;\n\nexport function threadItemKey(threadId: string, itemId: string): string {\n return `${threadId}\\u0000${itemId}`;\n}\n\nexport function timestampToIso(timestamp: number | null | undefined): string {\n return typeof timestamp === 'number' && Number.isFinite(timestamp)\n ? new Date(timestamp * 1000).toISOString()\n : new Date().toISOString();\n}\n\nexport function timestampToIsoOrNull(timestamp: number | null | undefined): string | null {\n return typeof timestamp === 'number' && Number.isFinite(timestamp)\n ? new Date(timestamp * 1000).toISOString()\n : null;\n}\n\nexport function surfaceTurnError(error: v2.TurnError | null): CodexSurfaceTurnError | null {\n if (!error) return null;\n return {\n message: error.message,\n additionalDetails: error.additionalDetails,\n codexErrorInfo: error.codexErrorInfo as CodexSurfaceJsonValue | null,\n };\n}\n\nexport function surfaceTurn(turn: v2.Turn, willRetry = false): CodexSurfaceTurn {\n return {\n id: turn.id,\n status: turn.status,\n error: surfaceTurnError(turn.error),\n willRetry,\n startedAt: timestampToIsoOrNull(turn.startedAt),\n completedAt: timestampToIsoOrNull(turn.completedAt),\n durationMs: turn.durationMs ?? null,\n };\n}\n\nexport function upsertSurfaceTurn(\n turns: readonly CodexSurfaceTurn[],\n turn: CodexSurfaceTurn,\n): CodexSurfaceTurn[] {\n const index = turns.findIndex((candidate) => candidate.id === turn.id);\n if (index < 0) return [...turns, turn];\n const next = [...turns];\n next.splice(index, 1, turn);\n return next;\n}\n\nexport function sameValue(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nexport function createMessageId(): string {\n return `user-${globalThis.crypto.randomUUID()}`;\n}\n\nexport function createQueuedPromptId(): string {\n return `queued-prompt-${globalThis.crypto.randomUUID()}`;\n}\n","import type { v2 } from '../codex/index';\nimport type {\n CodexSurfaceSubagentState,\n CodexSurfaceSubagentToolCall,\n} from '@codex-app-sdk/core/surface';\n\nexport function surfaceSubagentToolCall(\n item: Extract<v2.ThreadItem, { type: 'collabAgentToolCall' }>,\n): CodexSurfaceSubagentToolCall {\n const agentStates: Record<string, CodexSurfaceSubagentState> = {};\n for (const [conversationId, state] of Object.entries(item.agentsStates)) {\n if (state) agentStates[conversationId] = { status: state.status, message: state.message };\n }\n return {\n id: item.id,\n tool: item.tool,\n status: item.status,\n senderConversationId: item.senderThreadId,\n receiverConversationIds: [...item.receiverThreadIds],\n prompt: item.prompt,\n model: item.model,\n reasoningEffort: item.reasoningEffort,\n agentStates,\n };\n}\n","import type { v2 } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n SurfaceMessage,\n SurfaceMessageTextPart,\n SurfaceMessageToolPart,\n SurfaceMessageToolPartUpdate,\n} from '@codex-app-sdk/core/surface';\nimport {\n codexItemToMediaPart,\n codexItemToQuestionPart,\n codexItemToSurfaceMessage,\n codexItemToToolPart,\n} from './codex-conversation-history';\nimport { rawResponseItemToEvent } from './codex-raw-response-item-adapter';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport {\n surfaceTurn,\n surfaceTurnError,\n threadItemKey,\n timestampToIsoOrNull,\n upsertSurfaceTurn,\n} from './codex-surface-events';\nimport {\n appendAssistantTextDelta,\n appendCompactionMarker,\n ensureAssistantTurnMessage,\n extractProposedPlanDocument,\n finalizeTurnToolParts,\n formatPlanMarkdown,\n planProgressToolPart,\n removeAssistantText,\n surfaceMediaPartsEqual,\n updateAssistantToolPart,\n upsertAssistantMediaPart,\n upsertAssistantQuestionPart,\n upsertAssistantReasoningSummaries,\n upsertAssistantText,\n upsertAssistantToolPart,\n} from './codex-surface-message-state';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\nimport { surfaceSubagentToolCall } from './codex-surface-subagents';\nimport {\n codexToolPartFileActivities,\n shouldForwardCommandExecutionOutput,\n} from './codex-tool-part-adapter';\n\nexport type CodexSurfaceItemsHost = {\n assistantMessageForTurn(threadId: string, turnId: string): SurfaceMessage | null;\n emitConversationActivity(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void;\n emitSummaryUpserted(\n summary: CodexConversationSummary,\n reason: 'started' | 'listed' | 'resumed' | 'created' | 'updated',\n origin: CodexSurfaceEventOrigin,\n ): void;\n getState(): CodexSurfaceSnapshot;\n markRuntimeTurnActive(runtime: ThreadRuntimeState, turnId: string): void;\n messageContainingTool(threadId: string, turnId: string, itemId: string): SurfaceMessage | null;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n sendNextQueuedPrompt(threadId: string): void;\n};\n\nexport class CodexSurfaceItemsController {\n private readonly commandOutputForwardItemIds = new Set<string>();\n private readonly fileActivityKeys = new Set<string>();\n // app-server emits exitedReviewMode first, followed by a final agentMessage\n // rendered from the same ReviewOutputEvent. Full history retains only the\n // review-mode item, so it is the canonical surface representation.\n private readonly reviewOutputByTurn = new Map<string, string>();\n\n constructor(private readonly host: CodexSurfaceItemsHost) {}\n\n reset(): void {\n this.commandOutputForwardItemIds.clear();\n this.fileActivityKeys.clear();\n this.reviewOutputByTurn.clear();\n }\n\n forget(threadId: string): void {\n const prefix = `${threadId}\\u0000`;\n for (const key of this.commandOutputForwardItemIds) {\n if (key.startsWith(prefix)) this.commandOutputForwardItemIds.delete(key);\n }\n for (const key of this.fileActivityKeys) {\n if (key.startsWith(prefix)) this.fileActivityKeys.delete(key);\n }\n for (const key of this.reviewOutputByTurn.keys()) {\n if (key.startsWith(prefix)) this.reviewOutputByTurn.delete(key);\n }\n }\n\n isForwardingCommandOutput(threadId: string, itemId: string): boolean {\n return this.commandOutputForwardItemIds.has(threadItemKey(threadId, itemId));\n }\n\n applyAgentDelta(params: v2.AgentMessageDeltaNotification): void {\n const runtime = this.host.requireRuntime(params.threadId);\n this.host.markRuntimeTurnActive(runtime, params.turnId);\n const phase = runtime.messages.flatMap((message) => message.parts)\n .find((part): part is SurfaceMessageTextPart => (\n part.type === 'text' && part.itemId === params.itemId\n ))?.phase;\n this.host.patchRuntime(params.threadId, {\n messages: appendAssistantTextDelta(\n runtime.messages, params.threadId, params.turnId, params.itemId, params.delta, phase,\n ),\n });\n const message = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n if (message) {\n this.host.emitEvent('notification', {\n type: 'message.delta', conversationId: params.threadId, turnId: params.turnId,\n payload: {\n messageId: message.id,\n itemId: params.itemId,\n delta: params.delta,\n ...(phase ? { phase } : {}),\n },\n });\n }\n }\n\n applyPlanDelta(params: v2.PlanDeltaNotification): void {\n const runtime = this.host.requireRuntime(params.threadId);\n this.host.markRuntimeTurnActive(runtime, params.turnId);\n const markdown = `${runtime.planMarkdownByTurn.get(params.turnId) ?? ''}${params.delta}`;\n runtime.planMarkdownByTurn.set(params.turnId, markdown);\n this.host.patchRuntime(params.threadId, {\n messages: upsertAssistantToolPart(\n runtime.messages, params.threadId, params.turnId,\n planProgressToolPart(params.turnId, markdown, 'running'),\n ),\n });\n this.host.emitEvent('notification', {\n type: 'plan.delta', conversationId: params.threadId, turnId: params.turnId,\n payload: { itemId: params.itemId, delta: params.delta, markdown },\n });\n }\n\n applyPlanUpdated(params: v2.TurnPlanUpdatedNotification): void {\n const runtime = this.host.requireRuntime(params.threadId);\n this.host.markRuntimeTurnActive(runtime, params.turnId);\n const markdown = formatPlanMarkdown(params.explanation, params.plan);\n const updatedAt = new Date().toISOString();\n runtime.planMarkdownByTurn.set(params.turnId, markdown);\n this.host.patchRuntime(params.threadId, {\n executionPlan: {\n turnId: params.turnId,\n explanation: params.explanation,\n steps: structuredClone(params.plan),\n markdown,\n updatedAt,\n },\n messages: upsertAssistantToolPart(\n runtime.messages, params.threadId, params.turnId,\n planProgressToolPart(params.turnId, markdown, 'completed'),\n ),\n });\n this.host.emitEvent('notification', {\n type: 'plan.updated', conversationId: params.threadId, turnId: params.turnId,\n payload: {\n explanation: params.explanation,\n steps: structuredClone(params.plan),\n markdown,\n status: 'completed',\n },\n });\n }\n\n applyRawResponseItem(params: v2.RawResponseItemCompletedNotification): void {\n const runtime = this.host.requireRuntime(params.threadId);\n this.host.markRuntimeTurnActive(runtime, params.turnId);\n const event = rawResponseItemToEvent(params.item);\n if (!event) return;\n if (event.type === 'item.updated') {\n this.applyToolUpdate(params.threadId, params.turnId, event.payload);\n return;\n }\n this.host.patchRuntime(params.threadId, {\n messages: upsertAssistantToolPart(\n runtime.messages, params.threadId, params.turnId, event.payload.toolPart,\n ),\n });\n const message = this.host.messageContainingTool(\n params.threadId, params.turnId, event.payload.toolPart.id,\n );\n if (message) {\n this.host.emitEvent('notification', {\n type: event.type === 'item.completed' ? 'tool.completed' : 'tool.started',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: { messageId: message.id, toolPart: structuredClone(event.payload.toolPart) },\n });\n this.emitFileActivities(\n params.threadId,\n params.turnId,\n message.id,\n event.payload.toolPart.id,\n event.payload.toolPart,\n runtime.cwd,\n );\n }\n }\n\n applyItem(params: v2.ItemStartedNotification | v2.ItemCompletedNotification, completed: boolean): void {\n const runtime = this.host.requireRuntime(params.threadId);\n const turnStartPending = runtime.turnStartPending;\n if (!completed) this.host.markRuntimeTurnActive(runtime, params.turnId);\n const turn = {\n id: params.turnId,\n status: completed ? 'completed' : 'inProgress',\n startedAt: ('startedAtMs' in params ? params.startedAtMs : params.completedAtMs) / 1000,\n } as const;\n\n if (params.item.type === 'userMessage') {\n const message = codexItemToSurfaceMessage(params.threadId, turn, params.item);\n if (!message || runtime.messages.some((candidate) => candidate.id === message.id)) return;\n const isSteer = runtime.messages.some((candidate) => (\n candidate.role === 'assistant'\n && candidate.metadata?.turnId === params.turnId\n && candidate.parts.length > 0\n ));\n const pendingOptimisticIndex = !isSteer && turnStartPending\n ? runtime.messages.map((candidate) => (\n candidate.role === 'user'\n && candidate.kind !== 'steer'\n && !candidate.turnId\n && JSON.stringify(candidate.parts) === JSON.stringify(message.parts)\n )).lastIndexOf(true)\n : -1;\n if (pendingOptimisticIndex >= 0) {\n const pending = runtime.messages[pendingOptimisticIndex]!;\n const reconciled = {\n ...message,\n id: pending.id,\n createdAt: pending.createdAt ?? message.createdAt,\n metadata: { ...pending.metadata, ...message.metadata },\n };\n const messages = [...runtime.messages];\n messages.splice(pendingOptimisticIndex, 1, reconciled);\n this.host.patchRuntime(params.threadId, { messages });\n this.host.emitEvent('notification', {\n type: 'message.updated', conversationId: params.threadId, turnId: params.turnId,\n payload: { message: structuredClone(reconciled) },\n });\n return;\n }\n const duplicateInitialMessage = !isSteer && runtime.messages.some((candidate) => (\n candidate.role === 'user'\n && candidate.turnId === params.turnId\n && candidate.kind !== 'steer'\n && JSON.stringify(candidate.parts) === JSON.stringify(message.parts)\n ));\n if (duplicateInitialMessage) return;\n const appended = isSteer ? { ...message, kind: 'steer' as const } : message;\n const messages = [...runtime.messages, appended];\n this.host.patchRuntime(params.threadId, {\n messages: isSteer\n ? ensureAssistantTurnMessage(messages, params.threadId, params.turnId, { forceSegment: true })\n : messages,\n });\n this.host.emitEvent('notification', {\n type: 'message.appended', conversationId: params.threadId, turnId: params.turnId,\n payload: { message: structuredClone(appended) },\n });\n return;\n }\n\n if (params.item.type === 'reasoning') {\n const summaries = params.item.summary.filter((summary) => summary.trim().length > 0);\n if (summaries.length === 0) return;\n const previousMessage = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n const previousParts = previousMessage ? JSON.stringify(previousMessage.parts) : null;\n this.host.patchRuntime(params.threadId, {\n messages: upsertAssistantReasoningSummaries(\n runtime.messages,\n params.threadId,\n params.turnId,\n params.item.id,\n params.item.summary,\n ),\n });\n const message = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n if (!message || JSON.stringify(message.parts) === previousParts) return;\n this.host.emitEvent('notification', {\n type: previousMessage ? 'message.updated' : 'message.appended',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: { message: structuredClone(message) },\n });\n return;\n }\n\n if (\n params.item.type === 'agentMessage'\n && completed\n && runtime.planMode\n && params.item.phase === 'final_answer'\n ) {\n const proposedPlan = extractProposedPlanDocument(params.item.text);\n if (proposedPlan) {\n const previousMessage = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n let messages = removeAssistantText(\n runtime.messages, params.threadId, params.turnId, params.item.id,\n );\n if (proposedPlan.visibleText) {\n messages = upsertAssistantText(\n messages, params.threadId, params.turnId, params.item.id,\n proposedPlan.visibleText, params.item.phase,\n );\n }\n messages = upsertAssistantToolPart(\n messages, params.threadId, params.turnId,\n planProgressToolPart(params.turnId, proposedPlan.markdown, 'completed'),\n );\n runtime.planMarkdownByTurn.set(params.turnId, proposedPlan.markdown);\n this.host.patchRuntime(params.threadId, { messages });\n const message = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n if (message) {\n this.host.emitEvent('notification', {\n type: previousMessage ? 'message.updated' : 'message.appended',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: { message: structuredClone(message) },\n });\n }\n this.host.emitEvent('notification', {\n type: 'plan.completed', conversationId: params.threadId, turnId: params.turnId,\n payload: { itemId: params.item.id, markdown: proposedPlan.markdown },\n });\n return;\n }\n }\n\n if (params.item.type === 'agentMessage' || params.item.type === 'exitedReviewMode') {\n const text = params.item.type === 'agentMessage' ? params.item.text : params.item.review;\n const phase = params.item.type === 'agentMessage' ? params.item.phase ?? undefined : undefined;\n if (!text && params.item.type !== 'agentMessage') return;\n const reviewTurnKey = threadItemKey(params.threadId, params.turnId);\n if (\n params.item.type === 'agentMessage'\n && this.reviewOutputByTurn.get(reviewTurnKey) === text\n ) return;\n if (params.item.type === 'exitedReviewMode') {\n this.reviewOutputByTurn.set(reviewTurnKey, text);\n }\n const previousMessageIds = new Set(runtime.messages.map((message) => message.id));\n const previousMessage = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n const previousParts = previousMessage ? JSON.stringify(previousMessage.parts) : null;\n const previousQuestionRequestIds = new Set(previousMessage?.parts.flatMap((part) => (\n part.type === 'question' ? [part.request.id] : []\n )) ?? []);\n const previousText = runtime.messages.flatMap((message) => message.parts)\n .find((part): part is Extract<SurfaceMessage['parts'][number], { type: 'text' }> => (\n part.type === 'text' && part.itemId === params.item.id\n ))?.text ?? '';\n const questionPart = params.item.type === 'agentMessage'\n ? codexItemToQuestionPart(params.threadId, params.turnId, params.item)\n : null;\n const visibleText = questionPart ? '' : text;\n let messages = questionPart\n ? removeAssistantText(runtime.messages, params.threadId, params.turnId, params.item.id)\n : upsertAssistantText(runtime.messages, params.threadId, params.turnId, params.item.id, text, phase);\n if (questionPart) {\n messages = upsertAssistantQuestionPart(\n messages, params.threadId, params.turnId, questionPart,\n );\n }\n this.host.patchRuntime(params.threadId, { messages });\n if (!visibleText && !questionPart) return;\n const message = this.host.assistantMessageForTurn(params.threadId, params.turnId);\n if (message && !previousMessageIds.has(message.id)) {\n this.host.emitEvent('notification', {\n type: 'message.appended', conversationId: params.threadId, turnId: params.turnId,\n payload: { message: structuredClone(message) },\n });\n } else if (message && questionPart && JSON.stringify(message.parts) !== previousParts) {\n this.host.emitEvent('notification', {\n type: 'message.updated', conversationId: params.threadId, turnId: params.turnId,\n payload: { message: structuredClone(message) },\n });\n } else if (message && visibleText !== previousText) {\n if (visibleText.startsWith(previousText)) {\n const delta = visibleText.slice(previousText.length);\n if (delta) this.host.emitEvent('notification', {\n type: 'message.delta', conversationId: params.threadId, turnId: params.turnId,\n payload: {\n messageId: message.id,\n itemId: params.item.id,\n delta,\n ...(phase ? { phase } : {}),\n },\n });\n } else {\n this.host.emitEvent('notification', {\n type: 'message.updated', conversationId: params.threadId, turnId: params.turnId,\n payload: { message: structuredClone(message) },\n });\n }\n }\n if (questionPart && !previousQuestionRequestIds.has(questionPart.request.id)) {\n this.host.emitEvent('notification', {\n type: 'clientRequest.requested',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: { request: structuredClone(questionPart.request) },\n });\n }\n return;\n }\n\n if (params.item.type === 'plan') {\n if (!completed) return;\n const markdown = params.item.text.trim() || runtime.planMarkdownByTurn.get(params.turnId) || '';\n runtime.planMarkdownByTurn.set(params.turnId, markdown);\n this.host.patchRuntime(params.threadId, {\n messages: upsertAssistantToolPart(\n runtime.messages, params.threadId, params.turnId,\n planProgressToolPart(params.turnId, markdown, 'completed'),\n ),\n });\n this.host.emitEvent('notification', {\n type: 'plan.completed', conversationId: params.threadId, turnId: params.turnId,\n payload: { itemId: params.item.id, markdown },\n });\n return;\n }\n\n if (params.item.type === 'contextCompaction') {\n this.host.patchRuntime(params.threadId, {\n messages: appendCompactionMarker(runtime.messages, params.threadId, params.turnId, completed ? 'complete' : 'streaming'),\n });\n if (completed) {\n const message = this.host.requireRuntime(params.threadId).messages.find((candidate) => (\n candidate.kind === 'compaction' && candidate.metadata?.turnId === params.turnId\n ));\n if (message) this.host.emitEvent('notification', {\n type: 'context.compactionCompleted', conversationId: params.threadId, turnId: params.turnId,\n payload: { itemId: params.item.id, message: structuredClone(message) },\n });\n } else {\n this.host.emitEvent('notification', {\n type: 'context.compactionStarted', conversationId: params.threadId, turnId: params.turnId,\n payload: { itemId: params.item.id },\n });\n }\n return;\n }\n\n if (params.item.type === 'collabAgentToolCall') {\n this.host.emitEvent('notification', {\n type: 'subagent.toolCallChanged',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: {\n lifecycle: completed ? 'completed' : 'started',\n toolCall: surfaceSubagentToolCall(params.item),\n },\n });\n return;\n }\n\n if (params.item.type === 'subAgentActivity') {\n this.host.emitEvent('notification', {\n type: 'subagent.activity',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: {\n lifecycle: completed ? 'completed' : 'started',\n activity: {\n id: params.item.id,\n kind: params.item.kind,\n agentConversationId: params.item.agentThreadId,\n agentPath: params.item.agentPath,\n },\n },\n });\n return;\n }\n\n const includeCommandOutput = this.shouldForwardCommandOutput(params.threadId, completed, params.item);\n const toolPart = codexItemToToolPart(params.item, { includeCommandOutput, cwd: runtime.cwd });\n const mediaPart = codexItemToMediaPart(params.item);\n if (!toolPart && !mediaPart) return;\n const mediaChanged = mediaPart ? !runtime.messages.some((message) => (\n message.parts.some((part) => part.type === 'media' && surfaceMediaPartsEqual(part, mediaPart))\n )) : false;\n let messages = toolPart\n ? upsertAssistantToolPart(runtime.messages, params.threadId, params.turnId, toolPart)\n : [...runtime.messages];\n if (mediaPart) messages = upsertAssistantMediaPart(messages, params.threadId, params.turnId, mediaPart);\n this.host.patchRuntime(params.threadId, { messages });\n const message = toolPart\n ? this.host.messageContainingTool(params.threadId, params.turnId, toolPart.id)\n : this.host.assistantMessageForTurn(params.threadId, params.turnId);\n if (message && toolPart) this.host.emitEvent('notification', {\n type: completed ? 'tool.completed' : 'tool.started',\n conversationId: params.threadId,\n turnId: params.turnId,\n payload: { messageId: message.id, toolPart: structuredClone(toolPart) },\n });\n if (message && toolPart) {\n this.emitFileActivities(\n params.threadId,\n params.turnId,\n message.id,\n toolPart.id,\n toolPart,\n runtime.cwd,\n );\n }\n if (message && mediaPart && mediaChanged) this.host.emitEvent('notification', {\n type: 'message.updated', conversationId: params.threadId, turnId: params.turnId,\n payload: { message: structuredClone(message) },\n });\n }\n\n shouldForwardCommandOutput(threadId: string, completed: boolean, item: v2.ThreadItem): boolean {\n const itemId = 'id' in item && typeof item.id === 'string' ? item.id : null;\n if (!itemId) return false;\n const key = threadItemKey(threadId, itemId);\n if (!completed) {\n const shouldForward = shouldForwardCommandExecutionOutput(item);\n if (shouldForward) this.commandOutputForwardItemIds.add(key);\n else this.commandOutputForwardItemIds.delete(key);\n return shouldForward;\n }\n const shouldForward = this.commandOutputForwardItemIds.has(key)\n || shouldForwardCommandExecutionOutput(item);\n this.commandOutputForwardItemIds.delete(key);\n return shouldForward;\n }\n\n applyToolUpdate(threadId: string, turnId: string, update: SurfaceMessageToolPartUpdate): void {\n const runtime = this.host.requireRuntime(threadId);\n this.host.markRuntimeTurnActive(runtime, turnId);\n const effectiveUpdate = runtime.cwd && hasFileChangeData(update)\n ? { ...update, metadata: { ...update.metadata, cwd: runtime.cwd } }\n : update;\n this.host.patchRuntime(threadId, {\n messages: updateAssistantToolPart(runtime.messages, threadId, turnId, effectiveUpdate),\n });\n const message = this.host.messageContainingTool(threadId, turnId, update.itemId);\n if (message) this.host.emitEvent('notification', {\n type: 'tool.updated', conversationId: threadId, turnId,\n payload: { messageId: message.id, update: structuredClone(effectiveUpdate) },\n });\n const toolPart = message?.parts.find((part): part is SurfaceMessageToolPart => (\n part.type === 'tool' && part.id === update.itemId\n ));\n if (message && toolPart) {\n this.emitFileActivities(threadId, turnId, message.id, toolPart.id, toolPart, runtime.cwd);\n }\n }\n\n private emitFileActivities(\n threadId: string,\n turnId: string,\n messageId: string,\n itemId: string,\n toolPart: SurfaceMessageToolPart,\n cwd: string | null,\n ): void {\n for (const activity of codexToolPartFileActivities(toolPart, cwd)) {\n const key = `${threadId}\\u0000${itemId}\\u0000${activity.action}\\u0000${activity.path}\\u0000${activity.status}`;\n if (this.fileActivityKeys.has(key)) continue;\n this.fileActivityKeys.add(key);\n this.host.emitEvent('notification', {\n type: 'file.activity',\n conversationId: threadId,\n turnId,\n payload: {\n messageId,\n itemId,\n path: activity.path,\n action: activity.action,\n status: activity.status,\n },\n });\n }\n }\n\n applyTurnCompleted(params: v2.TurnCompletedNotification): void {\n const runtime = this.host.requireRuntime(params.threadId);\n if (!runtime.turnIds.includes(params.turn.id)) runtime.turnIds.push(params.turn.id);\n if (runtime.activeTurnId === params.turn.id) runtime.activeTurnId = null;\n const status: SurfaceMessage['status'] = params.turn.status === 'failed' ? 'error' : 'complete';\n const messages = finalizeTurnToolParts(runtime.messages, params.turn.id, params.turn.status)\n .map((message) => message.metadata?.turnId === params.turn.id ? { ...message, status } : message)\n .filter((message) => !(\n message.role === 'assistant' && message.metadata?.turnId === params.turn.id\n && message.kind === undefined && message.parts.length === 0\n ));\n this.host.patchRuntime(params.threadId, {\n busy: runtime.activeTurnId !== null,\n ...(runtime.activeTurnId === null ? { threadStatus: { type: 'idle' as const } } : {}),\n turnStartPending: false,\n error: params.turn.error?.message ?? null,\n messages,\n turns: upsertSurfaceTurn(runtime.turns, surfaceTurn(params.turn)),\n });\n this.host.patch({\n conversations: this.host.getState().conversations.map((conversation) => conversation.id === params.threadId\n ? {\n ...conversation,\n status: params.turn.status === 'failed' ? 'error' : 'idle',\n turnCount: runtime.turnIds.length,\n updatedAt: new Date().toISOString(),\n }\n : conversation),\n });\n const summary = this.host.getState().conversations.find((conversation) => conversation.id === params.threadId);\n if (summary) this.host.emitSummaryUpserted(summary, 'updated', 'notification');\n this.host.emitEvent('notification', {\n type: 'turn.completed', conversationId: params.threadId, turnId: params.turn.id,\n payload: {\n status: params.turn.status,\n error: surfaceTurnError(params.turn.error),\n willRetry: false,\n startedAt: timestampToIsoOrNull(params.turn.startedAt),\n completedAt: timestampToIsoOrNull(params.turn.completedAt),\n durationMs: params.turn.durationMs ?? null,\n },\n });\n this.host.emitConversationActivity(params.threadId, 'notification');\n runtime.planMarkdownByTurn.delete(params.turn.id);\n this.host.sendNextQueuedPrompt(params.threadId);\n }\n}\n\nfunction hasFileChangeData(update: SurfaceMessageToolPartUpdate): boolean {\n if (update.fallbackToolPart?.kind === 'fileChange') return true;\n const input = update.input;\n const metadata = update.metadata;\n return (isRecord(input) && Array.isArray(input.changes))\n || (isRecord(metadata) && Array.isArray(metadata.changes));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n","import type {\n CodexServerRequestResponder,\n ServerRequest,\n} from '../codex/index';\nimport type {\n CodexSurfaceClientRequest,\n CodexSurfaceClientRequestResponse,\n SurfaceMessage,\n SurfaceMessageToolPart,\n} from '@codex-app-sdk/core/surface';\nimport {\n argumentsPreview,\n findPendingMcpToolPart,\n isRecord,\n mcpElicitationResponse,\n persistSupports,\n stringValue,\n} from './codex-surface-prompts';\nimport { addUnique, updateAssistantToolPart, upsertAssistantToolPart } from './codex-surface-message-state';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\n\ntype ToolInputRequest = Extract<ServerRequest, { method: 'item/tool/requestUserInput' }>;\ntype McpElicitationRequest = Extract<ServerRequest, { method: 'mcpServer/elicitation/request' }>;\ntype ClientRequestResolutionReason =\n | 'conversation_closed'\n | 'conversation_removed'\n | 'surface_disconnected';\n\ntype PendingClientRequest =\n | {\n kind: 'ask_user';\n itemId: string;\n request: Extract<CodexSurfaceClientRequest, { kind: 'ask_user' }>;\n threadId: string;\n turnId: string;\n responder: CodexServerRequestResponder<'item/tool/requestUserInput'>;\n }\n | {\n kind: 'mcp_tool_approval';\n displayTurnId: string;\n itemId: string;\n request: Extract<CodexSurfaceClientRequest, { kind: 'confirm_tool' }>;\n threadId: string;\n turnId: string | null;\n responder: CodexServerRequestResponder<'mcpServer/elicitation/request'>;\n };\n\nexport type CodexSurfaceClientRequestsHost = {\n activeConversationId(): string | null;\n answerAsyncQuestion(threadId: string, prompt: string, displayText: string): Promise<void>;\n emitConversationActivity(threadId: string, origin: 'action' | 'notification'): void;\n emitEvent(origin: 'action' | 'notification', input: SurfaceEventInput): void;\n hasPendingApproval(threadId: string): boolean;\n markRuntimeTurnActive(runtime: ThreadRuntimeState, turnId: string): void;\n messageContainingTool(threadId: string, turnId: string, itemId: string): SurfaceMessage | null;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n};\n\nexport class CodexSurfaceClientRequestsController {\n private readonly pending = new Map<string, PendingClientRequest>();\n\n constructor(private readonly host: CodexSurfaceClientRequestsHost) {}\n\n requestsForThread(threadId: string): CodexSurfaceClientRequest[] {\n return [...this.pending.values()]\n .filter((pending) => pending.threadId === threadId)\n .map((pending) => pending.request);\n }\n\n hasForThread(threadId: string): boolean {\n return [...this.pending.values()].some((pending) => pending.threadId === threadId);\n }\n\n clear(): void {\n this.pending.clear();\n }\n\n rejectAll(reason: string): void {\n for (const pending of this.pending.values()) pending.responder.reject(reason);\n this.pending.clear();\n }\n\n clearForThread(threadId: string, reason: string, eventReason: ClientRequestResolutionReason): void {\n const resolved: PendingClientRequest[] = [];\n for (const [requestId, pending] of this.pending) {\n if (pending.threadId !== threadId) continue;\n pending.responder.reject(reason);\n this.pending.delete(requestId);\n resolved.push(pending);\n }\n this.host.patchRuntime(threadId, {});\n for (const pending of resolved) {\n this.host.emitEvent('notification', {\n type: 'clientRequest.resolved',\n conversationId: threadId,\n ...(pending.turnId ? { turnId: pending.turnId } : {}),\n payload: {\n request: structuredClone(pending.request),\n response: null,\n reason: eventReason,\n },\n });\n }\n }\n\n async respond(\n threadId: string | undefined,\n response: CodexSurfaceClientRequestResponse,\n ): Promise<void> {\n const pending = this.pending.get(response.id);\n if (!pending) {\n await this.respondToAsyncQuestion(threadId, response);\n return;\n }\n if (threadId !== undefined && pending.threadId !== threadId) {\n throw new Error(`Client request '${response.id}' belongs to conversation '${pending.threadId}', not '${threadId}'`);\n }\n const confirmationDecision = response.payload?.decision ?? 'deny';\n if (\n pending.kind === 'mcp_tool_approval'\n && !['allow', 'allow_conversation', 'always_allow', 'deny'].includes(confirmationDecision)\n ) {\n throw new Error(`Invalid tool confirmation decision '${String(confirmationDecision)}'`);\n }\n this.pending.delete(response.id);\n const runtime = this.host.requireRuntime(pending.threadId);\n const answeredClientRequestIds = addUnique(runtime.answeredClientRequestIds, response.id);\n if (pending.kind === 'ask_user') {\n const answers = response.payload?.answers ?? {};\n pending.responder.resolve({ answers });\n this.host.patchRuntime(pending.threadId, {\n answeredClientRequestIds,\n messages: updateAssistantToolPart(runtime.messages, pending.threadId, pending.turnId, {\n itemId: pending.itemId,\n output: { answers },\n }),\n });\n } else {\n const decision = confirmationDecision;\n pending.responder.resolve(mcpElicitationResponse(decision));\n this.host.patchRuntime(pending.threadId, {\n answeredClientRequestIds,\n messages: updateAssistantToolPart(runtime.messages, pending.threadId, pending.displayTurnId, {\n itemId: pending.itemId,\n output: { decision },\n }),\n });\n }\n this.maybeClearWaitingBusy(pending.threadId);\n this.host.emitEvent('action', {\n type: 'clientRequest.resolved',\n conversationId: pending.threadId,\n ...(pending.turnId ? { turnId: pending.turnId } : {}),\n payload: {\n request: structuredClone(pending.request),\n response: structuredClone(response),\n reason: 'host',\n },\n });\n this.host.emitConversationActivity(pending.threadId, 'action');\n }\n\n private async respondToAsyncQuestion(\n threadId: string | undefined,\n response: CodexSurfaceClientRequestResponse,\n ): Promise<void> {\n const resolvedThreadId = threadId ?? this.host.activeConversationId();\n const runtime = resolvedThreadId === null ? null : this.host.requireRuntime(resolvedThreadId);\n let request: Extract<CodexSurfaceClientRequest, { kind: 'ask_user' }> | null = null;\n for (const message of runtime?.messages ?? []) {\n for (const part of message.parts) {\n if (part.type === 'question' && !part.historical && part.request.id === response.id) request = part.request;\n }\n }\n const match = runtime && request ? { request, runtime } : null;\n if (!match) throw new Error(`Unknown client request '${response.id}'`);\n if (match.request.payload.request.delivery !== 'async') {\n throw new Error(`Unknown client request '${response.id}'`);\n }\n const answers = response.payload?.answers ?? {};\n const entries = match.request.payload.request.questions.flatMap((question) => {\n const answer = answers[question.id]?.answers.join(', ').trim() ?? '';\n return answer ? [{\n questionItemId: question.id,\n question: question.question,\n answer,\n }] : [];\n });\n if (response.payload?.cancelled !== true) {\n if (entries.length === 0) throw new Error('At least one answer is required');\n const prompt = '<send_user_message_question_reply>\\n'\n + `${JSON.stringify(entries)}\\n`\n + '</send_user_message_question_reply>';\n const displayText = entries.length === 1\n ? entries[0]!.answer\n : entries.map((entry) => `${entry.question}: ${entry.answer}`).join('\\n');\n await this.host.answerAsyncQuestion(match.runtime.threadId, prompt, displayText);\n }\n this.host.patchRuntime(match.runtime.threadId, {\n answeredClientRequestIds: addUnique(match.runtime.answeredClientRequestIds, response.id),\n });\n this.host.emitEvent('action', {\n type: 'clientRequest.resolved',\n conversationId: match.runtime.threadId,\n ...(match.request.turnId ? { turnId: match.request.turnId } : {}),\n payload: {\n request: structuredClone(match.request),\n response: structuredClone(response),\n reason: 'host',\n },\n });\n this.host.emitConversationActivity(match.runtime.threadId, 'action');\n }\n\n handleServerResolved(requestId: string, threadId: string): void {\n const pending = this.pending.get(requestId);\n this.pending.delete(requestId);\n if (pending) {\n const runtime = this.host.requireRuntime(pending.threadId);\n this.host.patchRuntime(pending.threadId, {\n answeredClientRequestIds: addUnique(runtime.answeredClientRequestIds, requestId),\n });\n }\n this.maybeClearWaitingBusy(threadId);\n if (!pending) return;\n this.host.emitEvent('notification', {\n type: 'clientRequest.resolved',\n conversationId: pending.threadId,\n ...(pending.turnId ? { turnId: pending.turnId } : {}),\n payload: { request: structuredClone(pending.request), response: null, reason: 'server' },\n });\n }\n\n maybeClearWaitingBusy(threadId: string): void {\n const runtime = this.host.requireRuntime(threadId);\n if (runtime.turnStartPending || runtime.activeTurnId !== null) return;\n if (!this.host.hasPendingApproval(threadId) && !this.hasForThread(threadId)) {\n this.host.patchRuntime(threadId, { busy: false });\n }\n }\n\n handleToolInputRequest(\n request: ToolInputRequest,\n responder: CodexServerRequestResponder<'item/tool/requestUserInput'>,\n ): boolean {\n const { threadId, turnId, itemId, questions } = request.params;\n if (questions.length === 0) return false;\n const runtime = this.host.requireRuntime(threadId);\n this.host.markRuntimeTurnActive(runtime, turnId);\n const requestId = String(request.id);\n const normalizedQuestions = questions.map((question) => ({\n ...question,\n options: question.options?.map((option) => ({ ...option })) ?? null,\n }));\n const clientRequest: Extract<CodexSurfaceClientRequest, { kind: 'ask_user' }> = {\n id: requestId,\n kind: 'ask_user',\n conversationId: threadId,\n turnId,\n itemId,\n payload: {\n request: {\n itemId,\n delivery: 'tool',\n blocking: request.params.isBlocking ?? true,\n questions: normalizedQuestions,\n ...(request.params.autoResolutionMs === null\n ? {}\n : { autoResolutionMs: request.params.autoResolutionMs }),\n },\n },\n };\n this.pending.set(requestId, {\n kind: 'ask_user', itemId, request: clientRequest, threadId, turnId, responder,\n });\n this.host.patchRuntime(threadId, {\n busy: true,\n messages: upsertAssistantToolPart(runtime.messages, threadId, turnId, {\n type: 'tool',\n id: itemId,\n kind: 'generic',\n title: 'ask_user_question',\n status: 'running',\n statusText: JSON.stringify({\n source: 'codex', action: 'ask_user_question', phase: 'running',\n params: { requestId, questions: normalizedQuestions },\n }),\n input: normalizedQuestions,\n metadata: { requestId, question: normalizedQuestions[0]!.question },\n }),\n });\n const requestToolMessage = this.host.messageContainingTool(threadId, turnId, itemId);\n const requestToolPart = requestToolMessage?.parts.find((part) => part.type === 'tool' && part.id === itemId);\n if (requestToolMessage && requestToolPart?.type === 'tool') {\n this.host.emitEvent('notification', {\n type: 'tool.started', conversationId: threadId, turnId,\n payload: { messageId: requestToolMessage.id, toolPart: structuredClone(requestToolPart) },\n });\n }\n this.host.emitEvent('notification', {\n type: 'clientRequest.requested', conversationId: threadId, turnId,\n payload: { request: structuredClone(clientRequest) },\n });\n this.host.emitConversationActivity(threadId, 'notification');\n return true;\n }\n\n handleMcpElicitationRequest(\n request: McpElicitationRequest,\n responder: CodexServerRequestResponder<'mcpServer/elicitation/request'>,\n ): boolean {\n const params = request.params;\n if (params.mode !== 'form') return false;\n const meta = params._meta;\n if (!isRecord(meta) || meta.codex_approval_kind !== 'mcp_tool_call') return false;\n const requestId = String(request.id);\n const toolName = stringValue(meta.tool_name) ?? stringValue(meta.tool_title) ?? 'tool';\n const runtime = this.host.requireRuntime(params.threadId);\n if (params.turnId) this.host.markRuntimeTurnActive(runtime, params.turnId);\n const displayTurnId = params.turnId ?? runtime.activeTurnId ?? `client-request-${requestId}`;\n const existingTool = findPendingMcpToolPart(\n runtime.messages, displayTurnId, params.serverName, toolName,\n );\n const itemId = existingTool?.id ?? `approval-${requestId}`;\n const summary = params.message.trim() || `Allow ${params.serverName} to run ${toolName}?`;\n const clientRequest: Extract<CodexSurfaceClientRequest, { kind: 'confirm_tool' }> = {\n id: requestId,\n kind: 'confirm_tool',\n conversationId: params.threadId,\n turnId: params.turnId,\n itemId,\n payload: {\n confirmation: {\n argumentsPreview: argumentsPreview(meta),\n integrationId: params.serverName,\n integrationName: stringValue(meta.connector_name) ?? params.serverName,\n summary,\n toolName,\n ...(persistSupports(meta.persist, 'session') ? { allowConversation: true } : {}),\n ...(persistSupports(meta.persist, 'always') ? { allowAlways: true } : {}),\n },\n },\n };\n this.pending.set(requestId, {\n kind: 'mcp_tool_approval', displayTurnId, itemId, request: clientRequest,\n threadId: params.threadId, turnId: params.turnId, responder,\n });\n const toolPart: SurfaceMessageToolPart = {\n type: 'tool',\n id: itemId,\n kind: 'mcp',\n title: `${params.serverName}.${toolName}`,\n status: 'running',\n statusText: JSON.stringify({\n source: 'mcp', action: 'confirm_tool', phase: 'running',\n params: {\n requestId, confirmationSummary: summary, argumentsPreview: argumentsPreview(meta),\n allowConversation: persistSupports(meta.persist, 'session'),\n allowAlways: persistSupports(meta.persist, 'always'),\n },\n }),\n input: meta.tool_params,\n metadata: {\n ...(existingTool?.metadata ?? {}),\n requestId, confirmationRequestId: requestId, server: params.serverName, tool: toolName,\n },\n };\n this.host.patchRuntime(params.threadId, {\n busy: true,\n messages: upsertAssistantToolPart(runtime.messages, params.threadId, displayTurnId, toolPart),\n });\n const toolMessage = this.host.messageContainingTool(params.threadId, displayTurnId, itemId);\n if (toolMessage) {\n this.host.emitEvent('notification', {\n type: 'tool.started', conversationId: params.threadId, turnId: displayTurnId,\n payload: { messageId: toolMessage.id, toolPart: structuredClone(toolPart) },\n });\n }\n this.host.emitEvent('notification', {\n type: 'clientRequest.requested',\n conversationId: params.threadId,\n ...(params.turnId ? { turnId: params.turnId } : {}),\n payload: { request: structuredClone(clientRequest) },\n });\n this.host.emitConversationActivity(params.threadId, 'notification');\n return true;\n }\n}\n","import { extname } from 'node:path';\nimport type { v2 } from '../codex/index';\nimport type { CodexSurfaceModel, CodexSurfacePlugin, CodexSurfaceSkill } from '@codex-app-sdk/core/surface';\n\nconst MAX_CATALOG_ICON_BYTES = 256 * 1024;\n\nexport function codexModelToSurfaceModel(model: v2.Model): CodexSurfaceModel {\n return {\n id: model.id,\n model: model.model,\n displayName: model.displayName,\n description: model.description,\n hidden: model.hidden,\n supportedReasoningEfforts: model.supportedReasoningEfforts,\n defaultReasoningEffort: model.defaultReasoningEffort,\n ...(model.serviceTiers.length > 0 ? {\n serviceTiers: model.serviceTiers.map((tier) => ({\n id: tier.id,\n name: tier.name,\n description: tier.description,\n })),\n } : {}),\n ...(model.defaultServiceTier ? { defaultServiceTier: model.defaultServiceTier } : {}),\n isDefault: model.isDefault,\n providerMetadata: {\n inputModalities: model.inputModalities,\n serviceTiers: model.serviceTiers,\n supportsPersonality: model.supportsPersonality,\n upgrade: model.upgrade,\n upgradeInfo: model.upgradeInfo,\n },\n };\n}\n\nexport async function surfaceSkills(\n skills: readonly v2.SkillMetadata[],\n localIconDataUrl: (path: string) => Promise<string | undefined>,\n): Promise<CodexSurfaceSkill[]> {\n return Promise.all(\n skills\n .filter((skill) => skill.enabled)\n .map((skill) => surfaceSkill(skill, localIconDataUrl)),\n );\n}\n\nexport async function surfaceSkill(\n skill: v2.SkillMetadata,\n localIconDataUrl: (path: string) => Promise<string | undefined>,\n): Promise<CodexSurfaceSkill> {\n const brandColor = nonEmpty(skill.interface?.brandColor);\n const defaultPrompt = stringOrUndefined(skill.interface?.defaultPrompt);\n const [iconSmall, iconLarge] = await Promise.all([\n skill.interface?.iconSmall ? localIconDataUrl(skill.interface.iconSmall) : undefined,\n skill.interface?.iconLarge ? localIconDataUrl(skill.interface.iconLarge) : undefined,\n ]);\n return {\n name: skill.name,\n description: skill.description,\n shortDescription: skill.shortDescription ?? skill.interface?.shortDescription,\n displayName: skill.interface?.displayName,\n iconSmall,\n iconLarge,\n ...(brandColor ? { brandColor } : {}),\n ...(defaultPrompt !== undefined ? { defaultPrompt } : {}),\n path: skill.path,\n scope: skill.scope,\n enabled: skill.enabled,\n };\n}\n\nexport async function surfacePlugin(\n plugin: v2.PluginSummary,\n localIconDataUrl: (path: string) => Promise<string | undefined>,\n): Promise<CodexSurfacePlugin> {\n const pluginInterface = plugin.interface;\n const composerIconUrl = safeRemoteImageUrl(pluginInterface?.composerIconUrl);\n const logoUrl = safeRemoteImageUrl(pluginInterface?.logoUrl);\n const logoUrlDark = safeRemoteImageUrl(pluginInterface?.logoUrlDark);\n const displayName = nonEmpty(pluginInterface?.displayName) ?? plugin.name;\n const shortDescription = nonEmpty(pluginInterface?.shortDescription);\n const longDescription = nonEmpty(pluginInterface?.longDescription);\n const brandColor = nonEmpty(pluginInterface?.brandColor);\n const iconUrl = composerIconUrl\n ?? logoUrl\n ?? await firstLocalPluginIcon([pluginInterface?.composerIcon, pluginInterface?.logo], localIconDataUrl);\n const iconUrlDark = composerIconUrl\n ?? logoUrlDark\n ?? logoUrl\n ?? await firstLocalPluginIcon([\n pluginInterface?.composerIcon,\n pluginInterface?.logoDark,\n pluginInterface?.logo,\n ], localIconDataUrl);\n return {\n id: plugin.id,\n name: plugin.name,\n displayName,\n ...(shortDescription ? { shortDescription } : {}),\n ...(longDescription ? { longDescription } : {}),\n ...(brandColor ? { brandColor } : {}),\n ...(iconUrl ? { iconUrl } : {}),\n ...(iconUrlDark ? { iconUrlDark } : {}),\n enabled: plugin.enabled,\n };\n}\n\nexport async function firstLocalPluginIcon(\n paths: readonly (string | null | undefined)[],\n localIconDataUrl: (path: string) => Promise<string | undefined>,\n): Promise<string | undefined> {\n for (const path of paths) {\n if (!path) continue;\n const dataUrl = await localIconDataUrl(path);\n if (dataUrl) return dataUrl;\n }\n return undefined;\n}\n\nexport function safeRemoteImageUrl(value: string | null | undefined): string | undefined {\n const url = nonEmpty(value);\n try {\n return new URL(url!).protocol === 'https:' ? url : undefined;\n } catch {}\n return undefined;\n}\n\nexport function catalogIconMimeType(path: string): string | undefined {\n switch (extname(path).toLowerCase()) {\n case '.avif': return 'image/avif';\n case '.bmp': return 'image/bmp';\n case '.gif': return 'image/gif';\n case '.ico': return 'image/x-icon';\n case '.jpeg':\n case '.jpg': return 'image/jpeg';\n case '.png': return 'image/png';\n case '.svg': return 'image/svg+xml';\n case '.webp': return 'image/webp';\n }\n return undefined;\n}\n\nexport function boundedImageDataUrl(mimeType: string, dataBase64: string): string | undefined {\n const encoded = dataBase64.trim();\n if (!/^[a-z\\d+/]+={0,2}$/i.test(encoded)) {\n return undefined;\n }\n const unpadded = encoded.replace(/=+$/, '');\n if (unpadded.length % 4 === 1) return undefined;\n const suppliedPadding = encoded.length - unpadded.length;\n const requiredPadding = (4 - (unpadded.length % 4)) % 4;\n if (suppliedPadding !== 0 && suppliedPadding !== requiredPadding) return undefined;\n const byteLength = Math.floor((unpadded.length * 3) / 4);\n if (byteLength > MAX_CATALOG_ICON_BYTES) return undefined;\n const padded = `${unpadded}${'='.repeat((4 - (unpadded.length % 4)) % 4)}`;\n return `data:${mimeType};base64,${padded}`;\n}\n\nfunction nonEmpty(value: unknown): string | undefined {\n const trimmed = typeof value === 'string' ? value.trim() : undefined;\n return trimmed || undefined;\n}\n\nfunction stringOrUndefined(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n","import type { v2 } from '../codex/index';\nimport type {\n CodexSurfaceApprovalPreset,\n CodexSurfaceModel,\n CodexSurfaceSnapshot,\n SendCodexMessageOptions,\n UpdateCodexConversationSettings,\n} from '@codex-app-sdk/core/surface';\n\nexport type SurfaceSelection = Pick<\n CodexSurfaceSnapshot,\n 'approvalPreset' | 'planMode' | 'selectedModelId' | 'selectedReasoningEffort'\n | 'selectedServiceTier'\n>;\n\nexport function selectedModel(\n models: CodexSurfaceModel[],\n idOrModel: string | null,\n): CodexSurfaceModel | null {\n return models.find((model) => model.id === idOrModel || model.model === idOrModel)\n ?? models.find((model) => model.isDefault)\n ?? models[0]\n ?? null;\n}\n\nexport function requireCatalogModel(models: CodexSurfaceModel[], idOrModel: string): CodexSurfaceModel {\n const model = models.find((candidate) => candidate.id === idOrModel || candidate.model === idOrModel);\n if (!model) throw new Error(`Unknown model '${idOrModel}'`);\n return model;\n}\n\nexport function validateReasoningEffort(\n model: CodexSurfaceModel | null,\n reasoningEffort: string | undefined,\n): void {\n if (!reasoningEffort) return;\n if (!model) throw new Error(`Cannot select reasoning effort '${reasoningEffort}' without a model`);\n const supported = model.supportedReasoningEfforts?.map((option) => option.reasoningEffort) ?? [];\n if (supported.length > 0 && !supported.includes(reasoningEffort)) {\n throw new Error(`Reasoning effort '${reasoningEffort}' is not available for '${model.displayName}'`);\n }\n}\n\nexport function defaultReasoningEffort(model: CodexSurfaceModel): string | null {\n return model.defaultReasoningEffort\n ?? model.supportedReasoningEfforts?.[0]?.reasoningEffort\n ?? null;\n}\n\nexport function defaultServiceTier(model: CodexSurfaceModel): string | null {\n return model.defaultServiceTier ?? null;\n}\n\nexport function validateServiceTier(\n model: CodexSurfaceModel | null,\n serviceTier: string | null | undefined,\n): void {\n if (!serviceTier) return;\n if (!model) throw new Error(`Cannot select service tier '${serviceTier}' without a model`);\n if (serviceTier === 'default' || serviceTier === model.defaultServiceTier) return;\n const supported = model.serviceTiers?.map((option) => option.id) ?? [];\n if (supported.length > 0 && !supported.includes(serviceTier)) {\n throw new Error(`Service tier '${serviceTier}' is not available for '${model.displayName}'`);\n }\n}\n\nexport function approvalPresetsForProfiles(\n profiles: CodexSurfaceSnapshot['permissionProfiles'],\n requirements: v2.ConfigRequirements | null,\n): CodexSurfaceApprovalPreset[] {\n const allowed = new Set(profiles.filter((profile) => profile.allowed).map((profile) => profile.id));\n const presets: CodexSurfaceApprovalPreset[] = [];\n if (\n allowed.has(':workspace')\n && requirementAllows(requirements?.allowedApprovalPolicies, 'on-request')\n && requirementAllows(requirements?.allowedApprovalsReviewers, 'user')\n ) presets.push('ask-for-approval');\n if (\n allowed.has(':workspace')\n && requirementAllows(requirements?.allowedApprovalPolicies, 'on-request')\n && requirementAllows(requirements?.allowedApprovalsReviewers, 'auto_review')\n ) presets.push('approve-for-me');\n if (\n (allowed.has(':danger-full-access') || allowed.has(':danger-no-sandbox'))\n && requirementAllows(requirements?.allowedApprovalPolicies, 'never')\n && requirementAllows(requirements?.allowedApprovalsReviewers, 'user')\n ) presets.push('full-access');\n return presets;\n}\n\nfunction requirementAllows<T>(values: T[] | null | undefined, value: T): boolean {\n return !Array.isArray(values) || values.length === 0 || values.includes(value);\n}\n\nexport function approvalPresetStartParams(preset: CodexSurfaceApprovalPreset): {\n approvalPolicy: v2.AskForApproval;\n approvalsReviewer: v2.ApprovalsReviewer;\n permissions: string;\n} {\n if (preset === 'full-access') {\n return {\n approvalPolicy: 'never',\n approvalsReviewer: 'user',\n permissions: ':danger-full-access',\n };\n }\n return {\n approvalPolicy: 'on-request',\n approvalsReviewer: preset === 'approve-for-me' ? 'auto_review' : 'user',\n permissions: ':workspace',\n };\n}\n\nexport function approvalPresetUpdateParams(preset: CodexSurfaceApprovalPreset): {\n approvalPolicy: v2.AskForApproval;\n approvalsReviewer: v2.ApprovalsReviewer;\n permissions: string;\n} {\n return approvalPresetStartParams(preset);\n}\n\nexport function approvalPresetFromSettings(\n approvalPolicy: v2.AskForApproval,\n approvalsReviewer: v2.ApprovalsReviewer,\n sandbox: v2.SandboxPolicy,\n activePermissionProfile: v2.ActivePermissionProfile | null,\n): CodexSurfaceApprovalPreset | null {\n const profile = activePermissionProfile?.id;\n if (\n approvalPolicy === 'never'\n && (\n sandbox.type === 'dangerFullAccess'\n || profile === ':danger-full-access'\n || profile === ':danger-no-sandbox'\n )\n ) return 'full-access';\n if (\n approvalPolicy === 'on-request'\n && (approvalsReviewer === 'auto_review' || approvalsReviewer === 'guardian_subagent')\n ) return 'approve-for-me';\n if (approvalPolicy === 'on-request') return 'ask-for-approval';\n return null;\n}\n\nexport function sessionSelection(\n response: v2.ThreadForkResponse | v2.ThreadResumeResponse | v2.ThreadStartResponse,\n models: CodexSurfaceModel[],\n current: CodexSurfaceSnapshot,\n): SurfaceSelection {\n const model = selectedModel(models, response.model);\n return {\n approvalPreset: approvalPresetFromSettings(\n response.approvalPolicy,\n response.approvalsReviewer,\n response.sandbox,\n response.activePermissionProfile,\n ) ?? current.approvalPreset,\n planMode: current.planMode,\n selectedModelId: model?.id ?? current.selectedModelId,\n selectedReasoningEffort: response.reasoningEffort ?? (model ? defaultReasoningEffort(model) : null),\n selectedServiceTier: response.serviceTier !== undefined\n ? response.serviceTier\n : model ? defaultServiceTier(model) : null,\n };\n}\n\nexport function threadSettingsSelection(\n settings: v2.ThreadSettings,\n models: CodexSurfaceModel[],\n current: CodexSurfaceSnapshot,\n): SurfaceSelection {\n const model = selectedModel(models, settings.model);\n return {\n approvalPreset: approvalPresetFromSettings(\n settings.approvalPolicy,\n settings.approvalsReviewer,\n settings.sandboxPolicy,\n settings.activePermissionProfile,\n ) ?? current.approvalPreset,\n planMode: settings.collaborationMode.mode === 'plan',\n selectedModelId: model?.id ?? current.selectedModelId,\n selectedReasoningEffort: settings.effort ?? (model ? defaultReasoningEffort(model) : null),\n selectedServiceTier: settings.serviceTier !== undefined\n ? settings.serviceTier\n : model ? defaultServiceTier(model) : null,\n };\n}\n\nexport function nextSelection(\n current: CodexSurfaceSnapshot,\n settings: UpdateCodexConversationSettings,\n): SurfaceSelection {\n let model = selectedModel(current.models, current.selectedModelId);\n if (settings.modelId) {\n model = current.models.find((candidate) => candidate.id === settings.modelId) ?? null;\n if (!model) throw new Error(`Unknown model '${settings.modelId}'`);\n }\n\n let reasoningEffort = settings.reasoningEffort ?? current.selectedReasoningEffort;\n let serviceTier = settings.serviceTier !== undefined\n ? settings.serviceTier\n : current.selectedServiceTier ?? null;\n const supported = model?.supportedReasoningEfforts?.map((option) => option.reasoningEffort) ?? [];\n if (settings.reasoningEffort && supported.length > 0 && !supported.includes(settings.reasoningEffort)) {\n throw new Error(`Reasoning effort '${settings.reasoningEffort}' is not available for '${model!.displayName}'`);\n }\n if (settings.modelId && supported.length > 0 && (!reasoningEffort || !supported.includes(reasoningEffort))) {\n reasoningEffort = model ? defaultReasoningEffort(model) : null;\n }\n if (settings.serviceTier !== undefined) validateServiceTier(model, serviceTier);\n if (settings.serviceTier === undefined && settings.modelId && serviceTier\n && !model!.serviceTiers?.some((tier) => tier.id === serviceTier)) {\n serviceTier = model ? defaultServiceTier(model) : null;\n }\n\n return {\n approvalPreset: settings.approvalPreset ?? current.approvalPreset,\n planMode: settings.planMode ?? current.planMode,\n selectedModelId: model?.id ?? null,\n selectedReasoningEffort: reasoningEffort,\n selectedServiceTier: serviceTier,\n };\n}\n\nexport function collaborationMode(\n planMode: boolean,\n model: string,\n reasoningEffort: string | null,\n): NonNullable<v2.TurnStartParams['collaborationMode']> {\n return {\n mode: planMode ? 'plan' : 'default',\n settings: {\n model,\n reasoning_effort: reasoningEffort,\n developer_instructions: null,\n },\n };\n}\n\nexport function turnSettings(\n state: CodexSurfaceSnapshot,\n options: SendCodexMessageOptions,\n): Pick<v2.TurnStartParams, 'collaborationMode' | 'effort' | 'model' | 'serviceTier'> {\n const selected = selectedModel(state.models, state.selectedModelId);\n const model = options.model ?? selected?.model;\n const effort = options.reasoningEffort ?? state.selectedReasoningEffort;\n const planMode = options.planMode ?? state.planMode;\n return {\n ...(model ? { model } : {}),\n ...(effort ? { effort } : {}),\n ...(model ? { collaborationMode: collaborationMode(planMode, model, effort) } : {}),\n ...(options.serviceTier !== undefined\n ? { serviceTier: options.serviceTier }\n : state.selectedServiceTier ? { serviceTier: state.selectedServiceTier } : {}),\n };\n}\n","import { basename, isAbsolute } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { v2 } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceAttachment,\n CodexSurfaceContextUsage,\n CodexSurfaceRateLimitSnapshot,\n CodexSurfaceRateLimits,\n CodexSurfaceSnapshot,\n CodexSurfaceThreadStatus,\n SendCodexMessageOptions,\n SurfaceMessage,\n SurfaceMessageAttachmentPart,\n} from '@codex-app-sdk/core/surface';\nimport {\n requireCatalogModel,\n selectedModel,\n validateReasoningEffort,\n validateServiceTier,\n} from './codex-surface-settings';\n\nexport function threadToSummary(thread: v2.Thread): CodexConversationSummary {\n const preview = thread.preview.trim();\n const firstPreviewLine = preview.split('\\n')[0]!;\n return {\n id: thread.id,\n ...(thread.sessionId ? { sessionId: thread.sessionId } : {}),\n ...(thread.parentThreadId ? { parentConversationId: thread.parentThreadId } : {}),\n ...(thread.agentNickname ? { agentNickname: thread.agentNickname } : {}),\n ...(thread.agentRole ? { agentRole: thread.agentRole } : {}),\n title: thread.name?.trim() || firstPreviewLine.trim() || 'Untitled conversation',\n preview,\n cwd: thread.cwd,\n status: thread.status.type === 'active' ? 'active' : thread.status.type === 'systemError' ? 'error' : 'idle',\n turnCount: thread.turns.length,\n createdAt: new Date(thread.createdAt * 1000).toISOString(),\n updatedAt: new Date((thread.recencyAt ?? thread.updatedAt) * 1000).toISOString(),\n };\n}\n\nexport function upsertConversation(\n conversations: CodexConversationSummary[],\n next: CodexConversationSummary,\n): CodexConversationSummary[] {\n return [next, ...conversations.filter((conversation) => conversation.id !== next.id)]\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));\n}\n\nexport function validatedSendOptions(\n state: CodexSurfaceSnapshot,\n options: SendCodexMessageOptions,\n): SendCodexMessageOptions {\n const model = options.model\n ? requireCatalogModel(state.models, options.model)\n : selectedModel(state.models, state.selectedModelId);\n validateReasoningEffort(model, options.reasoningEffort);\n validateServiceTier(model, options.serviceTier);\n return {\n ...options,\n ...(options.attachments ? { attachments: validateAttachments(options.attachments) } : {}),\n ...(options.model && model ? { model: model.model } : {}),\n };\n}\n\nexport function validateAttachments(attachments: readonly CodexSurfaceAttachment[]): CodexSurfaceAttachment[] {\n return attachments.map((attachment) => {\n const path = attachment.path.trim();\n if (!path) throw new Error('Attachment paths cannot be empty');\n if (!isAbsolute(path)) throw new Error(`Attachment path must be absolute: '${path}'`);\n if (attachment.type === 'image') return { ...attachment, path };\n const name = attachment.name?.trim();\n return { ...attachment, path, ...(name ? { name } : {}) };\n });\n}\n\nexport function attachmentInput(attachment: CodexSurfaceAttachment): v2.UserInput {\n if (attachment.type === 'image') {\n return {\n type: 'localImage',\n path: attachment.path,\n ...(attachment.detail === undefined ? {} : { detail: attachment.detail }),\n };\n }\n return {\n type: 'mention',\n name: attachment.name ?? basename(attachment.path),\n path: attachment.path,\n };\n}\n\nexport function surfaceAttachmentPart(attachment: CodexSurfaceAttachment): SurfaceMessageAttachmentPart {\n const name = attachment.name?.trim() || basename(attachment.path);\n if (attachment.type === 'image') {\n return {\n type: 'attachment',\n attachment: {\n kind: 'image',\n name,\n path: attachment.path,\n url: attachment.previewUrl ?? pathToFileURL(attachment.path).href,\n ...(attachment.mimeType ? { mimeType: attachment.mimeType } : {}),\n },\n };\n }\n return {\n type: 'attachment',\n attachment: {\n kind: 'file',\n name,\n path: attachment.path,\n ...(attachment.mimeType ? { mimeType: attachment.mimeType } : {}),\n },\n };\n}\n\nexport function messageTurnIdOrNull(message: SurfaceMessage): string | null {\n const metadataTurnId = message.metadata?.turnId;\n return message.turnId ?? (typeof metadataTurnId === 'string' ? metadataTurnId : null);\n}\n\nexport function messageTurnId(message: SurfaceMessage): string {\n const turnId = messageTurnIdOrNull(message);\n if (!turnId) throw new Error('This message is not associated with a Codex turn');\n return turnId;\n}\n\nexport function surfaceMessageText(message: SurfaceMessage): string {\n return message.parts\n .filter((part): part is Extract<SurfaceMessage['parts'][number], { type: 'text' }> => part.type === 'text')\n .map((part) => part.text)\n .join('\\n')\n .trim();\n}\n\nexport function surfaceMessageAttachments(message: SurfaceMessage): CodexSurfaceAttachment[] {\n return message.parts.flatMap((part): CodexSurfaceAttachment[] => {\n if (part.type !== 'attachment') return [];\n const attachment = part.attachment;\n const attachmentPath = attachment.path;\n if (!attachmentPath) return [];\n if (attachment.kind === 'image') {\n return [{\n type: 'image',\n path: attachmentPath,\n name: attachment.name,\n ...(attachment.mimeType ? { mimeType: attachment.mimeType } : {}),\n ...(attachment.url?.startsWith('data:image/') ? { previewUrl: attachment.url } : {}),\n }];\n }\n return [{\n type: 'file',\n path: attachmentPath,\n name: attachment.name,\n ...(attachment.mimeType ? { mimeType: attachment.mimeType } : {}),\n }];\n });\n}\n\nexport function surfaceContextUsage(tokenUsage: v2.ThreadTokenUsage): CodexSurfaceContextUsage {\n const modelContextWindow = tokenUsage.modelContextWindow;\n const contextTokens = tokenUsage.last.totalTokens;\n const usedPercent = typeof modelContextWindow === 'number' && modelContextWindow > 0\n ? Math.min(100, Math.max(0, (contextTokens / modelContextWindow) * 100))\n : null;\n return {\n totalTokens: tokenUsage.total.totalTokens,\n inputTokens: tokenUsage.total.inputTokens,\n cachedInputTokens: tokenUsage.total.cachedInputTokens,\n outputTokens: tokenUsage.total.outputTokens,\n reasoningOutputTokens: tokenUsage.total.reasoningOutputTokens,\n lastTotalTokens: tokenUsage.last.totalTokens,\n modelContextWindow,\n usedPercent,\n };\n}\n\nexport function surfaceThreadStatus(status: v2.ThreadStatus): CodexSurfaceThreadStatus {\n return status.type === 'active'\n ? { type: 'active', activeFlags: [...status.activeFlags] }\n : { type: status.type };\n}\n\nexport function conversationStatus(status: v2.ThreadStatus): CodexConversationSummary['status'] {\n if (status.type === 'active') return 'active';\n if (status.type === 'systemError') return 'error';\n return 'idle';\n}\n\nexport function surfaceRateLimits(response: v2.GetAccountRateLimitsResponse): CodexSurfaceRateLimits {\n const byLimitId = response.rateLimitsByLimitId\n ? Object.fromEntries(Object.entries(response.rateLimitsByLimitId)\n .filter((entry): entry is [string, v2.RateLimitSnapshot] => Boolean(entry[1]))\n .map(([limitId, snapshot]) => [limitId, surfaceRateLimitSnapshot(snapshot)]))\n : null;\n return {\n rateLimits: surfaceRateLimitSnapshot(response.rateLimits),\n rateLimitsByLimitId: byLimitId,\n rateLimitResetCredits: response.rateLimitResetCredits ? {\n availableCount: String(response.rateLimitResetCredits.availableCount),\n credits: response.rateLimitResetCredits.credits?.map((credit) => ({ ...credit })) ?? null,\n } : null,\n };\n}\n\nexport function surfaceRateLimitSnapshot(snapshot: v2.RateLimitSnapshot): CodexSurfaceRateLimitSnapshot {\n return {\n limitId: snapshot.limitId,\n limitName: snapshot.limitName,\n primary: snapshot.primary ? { ...snapshot.primary } : null,\n secondary: snapshot.secondary ? { ...snapshot.secondary } : null,\n credits: snapshot.credits ? { ...snapshot.credits } : null,\n individualLimit: snapshot.individualLimit ? { ...snapshot.individualLimit } : null,\n planType: snapshot.planType,\n rateLimitReachedType: snapshot.rateLimitReachedType,\n };\n}\n\nexport function mergeSurfaceRateLimits(\n current: CodexSurfaceRateLimits | null,\n update: v2.RateLimitSnapshot,\n): CodexSurfaceRateLimits {\n const next = surfaceRateLimitSnapshot(update);\n if (!current) {\n return {\n rateLimits: next,\n rateLimitsByLimitId: next.limitId ? { [next.limitId]: next } : null,\n rateLimitResetCredits: null,\n };\n }\n const merged = mergeRateLimitSnapshot(current.rateLimits, next);\n const rateLimitsByLimitId = current.rateLimitsByLimitId ? { ...current.rateLimitsByLimitId } : {};\n if (merged.limitId) {\n rateLimitsByLimitId[merged.limitId] = mergeRateLimitSnapshot(\n rateLimitsByLimitId[merged.limitId] ?? merged,\n next,\n );\n }\n return {\n ...current,\n rateLimits: merged,\n rateLimitsByLimitId: Object.keys(rateLimitsByLimitId).length > 0 ? rateLimitsByLimitId : null,\n };\n}\n\nexport function mergeRateLimitSnapshot(\n current: CodexSurfaceRateLimitSnapshot,\n update: CodexSurfaceRateLimitSnapshot,\n): CodexSurfaceRateLimitSnapshot {\n return {\n limitId: update.limitId ?? current.limitId,\n limitName: update.limitName ?? current.limitName,\n primary: update.primary ? { ...(current.primary ?? {}), ...update.primary } : current.primary,\n secondary: update.secondary ? { ...(current.secondary ?? {}), ...update.secondary } : current.secondary,\n credits: update.credits ? { ...(current.credits ?? {}), ...update.credits } : current.credits,\n individualLimit: update.individualLimit\n ? { ...(current.individualLimit ?? {}), ...update.individualLimit }\n : current.individualLimit,\n planType: update.planType ?? current.planType,\n rateLimitReachedType: update.rateLimitReachedType ?? current.rateLimitReachedType,\n };\n}\n","import { isAbsolute } from 'node:path';\nimport type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexSurfaceApprovalPreset,\n CodexSurfaceEventOrigin,\n CodexSurfaceModel,\n CodexSurfaceSnapshot,\n CodexSurfaceSkill,\n ListCodexModelsOptions,\n} from '@codex-app-sdk/core/surface';\nimport {\n boundedImageDataUrl,\n catalogIconMimeType,\n codexModelToSurfaceModel,\n surfacePlugin,\n surfaceSkills,\n} from './codex-surface-catalog';\nimport { surfaceRateLimits } from './codex-surface-data';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport {\n approvalPresetsForProfiles,\n defaultReasoningEffort,\n defaultServiceTier,\n selectedModel,\n} from './codex-surface-settings';\nimport type { ListCodexSkillsOptions } from './codex-surface-contracts';\nimport type { ConversationCatalogs, ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\n\nexport type CodexSurfaceCatalogHost = {\n authenticationBlocksBootstrap(): boolean;\n emitConversationSkills(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void;\n ensureConnected(): Promise<void>;\n getState(): CodexSurfaceSnapshot;\n isClosed(): boolean;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n preferredApprovalPreset(): CodexSurfaceApprovalPreset | null;\n runtimes(): Iterable<ThreadRuntimeState>;\n};\n\nexport class CodexSurfaceCatalogController {\n private readonly iconDataUrls = new Map<string, Promise<string | undefined>>();\n private pluginPromise: Promise<void> | null = null;\n private pluginLastAttemptedCwdsKey: string | null = null;\n private pluginRefreshRequested = false;\n\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly cwd: string | undefined,\n private readonly host: CodexSurfaceCatalogHost,\n ) {}\n\n reset(pluginRefreshRequested: boolean): void {\n this.iconDataUrls.clear();\n this.pluginLastAttemptedCwdsKey = null;\n this.pluginRefreshRequested = pluginRefreshRequested;\n }\n\n async listModels(options: ListCodexModelsOptions = {}): Promise<CodexSurfaceModel[]> {\n await this.host.ensureConnected();\n const includeHidden = options.includeHidden ?? false;\n const forceReload = options.forceReload ?? true;\n const state = this.host.getState();\n if (!forceReload && !includeHidden && state.modelCatalogStatus === 'loaded') {\n return structuredClone(state.models);\n }\n const models = await this.requestModels(includeHidden);\n if (!includeHidden) this.applyModels(models, 'action');\n return structuredClone(models);\n }\n\n async loadModels(): Promise<void> {\n this.host.patch({ modelCatalogStatus: 'loading' });\n this.emitModels([], 'loading');\n try {\n this.applyModels(await this.requestModels(false), 'action');\n } catch {\n this.host.patch({ modelCatalogStatus: 'error', models: [] });\n this.emitModels([], 'error');\n }\n }\n\n async loadSkills(forceReload = false, origin: CodexSurfaceEventOrigin = 'action'): Promise<void> {\n if (forceReload) this.iconDataUrls.clear();\n this.host.patch({ skillCatalogStatus: 'loading' });\n this.emitSkills(this.cwd ?? null, [], 'loading', origin);\n try {\n const response = await this.client.request('skills/list', {\n ...(this.cwd ? { cwds: [this.cwd] } : {}), forceReload,\n });\n const skills = await surfaceSkills(\n response.data.flatMap((entry) => entry.skills),\n (path) => this.iconDataUrl(path),\n );\n this.host.patch({ skills, skillCatalogStatus: 'loaded' });\n this.emitSkills(this.cwd ?? null, skills, 'loaded', origin);\n } catch {\n this.host.patch({ skills: [], skillCatalogStatus: 'error' });\n this.emitSkills(this.cwd ?? null, [], 'error', origin);\n }\n }\n\n async listSkills(options: ListCodexSkillsOptions = {}): Promise<CodexSurfaceSkill[]> {\n await this.host.ensureConnected();\n if (options.forceReload) this.iconDataUrls.clear();\n const response = await this.client.request('skills/list', {\n ...(options.cwd ? { cwds: [options.cwd] } : {}),\n forceReload: options.forceReload ?? false,\n });\n const skills = await surfaceSkills(\n response.data.flatMap((entry) => entry.skills),\n (path) => this.iconDataUrl(path),\n );\n for (const runtime of this.host.runtimes()) {\n if (runtime.cwd !== (options.cwd ?? null)) continue;\n this.host.patchRuntime(runtime.threadId, { skills, skillCatalogStatus: 'loaded' });\n this.host.emitConversationSkills(runtime.threadId, 'action');\n }\n this.emitSkills(options.cwd ?? null, skills, 'loaded', 'action');\n return structuredClone(skills);\n }\n\n async loadPermissionProfiles(): Promise<void> {\n try {\n const profiles = await this.requestPermissionProfiles(this.cwd);\n const requirements = (await this.client.request('configRequirements/read', undefined)).requirements;\n const approvalPresets = approvalPresetsForProfiles(profiles, requirements);\n const preferred = this.host.preferredApprovalPreset();\n this.host.patch({\n permissionProfiles: profiles,\n approvalPresets,\n approvalPreset: preferred\n ? (approvalPresets.includes(preferred) ? preferred : approvalPresets[0] ?? null)\n : null,\n });\n this.emitPermissions(this.cwd ?? null, profiles, approvalPresets);\n } catch {\n this.host.patch({ permissionProfiles: [], approvalPresets: [], approvalPreset: null });\n this.emitPermissions(this.cwd ?? null, [], []);\n }\n }\n\n async loadRateLimits(): Promise<void> {\n try {\n const rateLimits = surfaceRateLimits(\n await this.client.request('account/rateLimits/read', undefined),\n );\n this.host.patch({ rateLimits });\n this.host.emitEvent('action', {\n type: 'rateLimits.changed', payload: { rateLimits: structuredClone(rateLimits) },\n });\n } catch {\n this.host.patch({ rateLimits: null });\n this.host.emitEvent('action', { type: 'rateLimits.changed', payload: { rateLimits: null } });\n }\n }\n\n async loadConversationCatalogs(cwd: string | undefined, forceReload = false): Promise<ConversationCatalogs> {\n const state = this.host.getState();\n if (!forceReload && cwd === this.cwd && state.skillCatalogStatus !== 'notLoaded') {\n return {\n skills: [...state.skills],\n skillCatalogStatus: state.skillCatalogStatus,\n permissionProfiles: [...state.permissionProfiles],\n approvalPresets: [...state.approvalPresets],\n };\n }\n const [skillResult, permissionResult] = await Promise.allSettled([\n this.client.request('skills/list', { ...(cwd ? { cwds: [cwd] } : {}), forceReload }),\n (async () => ({\n profiles: await this.requestPermissionProfiles(cwd),\n requirements: (await this.client.request('configRequirements/read', undefined)).requirements,\n }))(),\n ]);\n const skills = skillResult.status === 'fulfilled'\n ? await surfaceSkills(\n skillResult.value.data.flatMap((entry) => entry.skills),\n (path) => this.iconDataUrl(path),\n )\n : [];\n const permissionProfiles = permissionResult.status === 'fulfilled' ? permissionResult.value.profiles : [];\n return {\n skills,\n skillCatalogStatus: skillResult.status === 'fulfilled' ? 'loaded' : 'error',\n permissionProfiles,\n approvalPresets: permissionResult.status === 'fulfilled'\n ? approvalPresetsForProfiles(permissionProfiles, permissionResult.value.requirements)\n : [],\n };\n }\n\n schedulePluginRefresh(force = false): void {\n const state = this.host.getState();\n if (this.host.isClosed() || state.status !== 'ready' || this.host.authenticationBlocksBootstrap()) return;\n const scope = this.pluginScope();\n if (force) {\n this.pluginLastAttemptedCwdsKey = null;\n this.pluginRefreshRequested = true;\n }\n if (this.pluginPromise) return;\n if (!this.pluginRefreshRequested && this.pluginLastAttemptedCwdsKey === scope.key) return;\n this.pluginRefreshRequested = false;\n this.host.patch({ pluginCatalogStatus: 'loading' });\n this.host.emitEvent('action', {\n type: 'catalog.pluginsChanged',\n payload: { plugins: structuredClone(state.plugins), status: 'loading' },\n });\n const loading = this.loadPluginCatalog(scope.cwds, scope.key);\n this.pluginPromise = loading;\n void loading.finally(() => {\n this.pluginPromise = null;\n if (this.pluginRefreshRequested || this.pluginScope().key !== scope.key) this.schedulePluginRefresh();\n }).catch(() => undefined);\n }\n\n private async requestModels(includeHidden: boolean): Promise<CodexSurfaceModel[]> {\n const models: CodexSurfaceModel[] = [];\n let cursor: string | null | undefined = null;\n do {\n const response: v2.ModelListResponse = await this.client.request('model/list', { cursor, includeHidden });\n models.push(...response.data.map(codexModelToSurfaceModel));\n cursor = response.nextCursor;\n } while (cursor);\n return models;\n }\n\n private applyModels(models: CodexSurfaceModel[], origin: CodexSurfaceEventOrigin): void {\n const selected = selectedModel(models, this.host.getState().selectedModelId);\n this.host.patch({\n models,\n modelCatalogStatus: 'loaded',\n selectedModelId: selected?.id ?? null,\n selectedReasoningEffort: selected ? defaultReasoningEffort(selected) : null,\n selectedServiceTier: selected ? defaultServiceTier(selected) : null,\n });\n this.emitModels(models, 'loaded', origin);\n }\n\n private emitModels(\n models: CodexSurfaceModel[],\n status: CodexSurfaceSnapshot['modelCatalogStatus'],\n origin: CodexSurfaceEventOrigin = 'action',\n ): void {\n this.host.emitEvent(origin, {\n type: 'catalog.modelsChanged', payload: { models: structuredClone(models), status },\n });\n }\n\n private emitSkills(\n cwd: string | null,\n skills: CodexSurfaceSkill[],\n status: CodexSurfaceSnapshot['skillCatalogStatus'],\n origin: CodexSurfaceEventOrigin,\n ): void {\n this.host.emitEvent(origin, {\n type: 'catalog.skillsChanged', payload: { cwd, skills: structuredClone(skills), status },\n });\n }\n\n private emitPermissions(\n cwd: string | null,\n profiles: CodexSurfaceSnapshot['permissionProfiles'],\n approvalPresets: CodexSurfaceSnapshot['approvalPresets'],\n ): void {\n this.host.emitEvent('action', {\n type: 'catalog.permissionsChanged',\n payload: { cwd, permissionProfiles: structuredClone(profiles), approvalPresets: [...approvalPresets] },\n });\n }\n\n private async requestPermissionProfiles(cwd: string | undefined) {\n const profiles: CodexSurfaceSnapshot['permissionProfiles'] = [];\n let cursor: string | null | undefined = null;\n do {\n const response: v2.PermissionProfileListResponse = await this.client.request('permissionProfile/list', {\n cursor, ...(cwd ? { cwd } : {}),\n });\n profiles.push(...response.data);\n cursor = response.nextCursor;\n } while (cursor);\n return profiles;\n }\n\n private pluginScope(): { cwds: string[]; key: string } {\n const state = this.host.getState();\n const cwds = [...new Set([\n this.cwd,\n ...state.conversations.map((conversation) => conversation.cwd),\n ...[...this.host.runtimes()].map((runtime) => runtime.cwd ?? undefined),\n ].filter((cwd): cwd is string => typeof cwd === 'string' && cwd.trim().length > 0))].sort();\n return { cwds, key: JSON.stringify(cwds) };\n }\n\n private async loadPluginCatalog(cwds: readonly string[], key: string): Promise<void> {\n this.pluginLastAttemptedCwdsKey = key;\n try {\n const response = await this.client.request('plugin/installed', {\n ...(cwds.length > 0 ? { cwds: [...cwds] } : {}),\n });\n const summaries = new Map<string, v2.PluginSummary>();\n for (const marketplace of response.marketplaces) {\n for (const plugin of marketplace.plugins) {\n if (!summaries.has(plugin.id)) summaries.set(plugin.id, plugin);\n }\n }\n const plugins = await Promise.all(\n [...summaries.values()].map((plugin) => surfacePlugin(plugin, (path) => this.iconDataUrl(path))),\n );\n if (this.host.isClosed() || this.host.authenticationBlocksBootstrap()) return;\n this.host.patch({ plugins, pluginCatalogStatus: 'loaded' });\n this.host.emitEvent('action', {\n type: 'catalog.pluginsChanged', payload: { plugins: structuredClone(plugins), status: 'loaded' },\n });\n } catch {\n if (this.host.isClosed() || this.host.authenticationBlocksBootstrap()) return;\n this.pluginLastAttemptedCwdsKey = null;\n this.host.patch({ pluginCatalogStatus: 'error' });\n this.host.emitEvent('action', {\n type: 'catalog.pluginsChanged',\n payload: { plugins: structuredClone(this.host.getState().plugins), status: 'error' },\n });\n }\n }\n\n private iconDataUrl(path: string): Promise<string | undefined> {\n const existing = this.iconDataUrls.get(path);\n if (existing) return existing;\n const materialized = this.readIconDataUrl(path);\n this.iconDataUrls.set(path, materialized);\n return materialized;\n }\n\n private async readIconDataUrl(path: string): Promise<string | undefined> {\n if (!isAbsolute(path)) return undefined;\n const mimeType = catalogIconMimeType(path);\n if (!mimeType) return undefined;\n try {\n const response = await this.client.request('fs/readFile', { path });\n return boundedImageDataUrl(mimeType, response.dataBase64);\n } catch {\n return undefined;\n }\n }\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexSurfaceApproval,\n CodexSurfaceApprovalDecision,\n CodexSurfaceApprovalScope,\n CodexSurfaceRequestedPermission,\n} from '@codex-app-sdk/core/surface';\n\nexport type PendingCodexApproval = {\n approval: CodexSurfaceApproval;\n resolve(decision: CodexSurfaceApprovalDecision, scope: CodexSurfaceApprovalScope): void;\n};\n\nexport function registerCodexApprovalHandlers(\n client: CodexAppServerClient,\n onApproval: (pending: PendingCodexApproval) => void,\n): () => void {\n const unsubscribers = [\n client.onServerRequest('item/commandExecution/requestApproval', (request, responder) => {\n onApproval({\n approval: commandApproval(request.id, request.params),\n resolve: (decision, scope) => responder.resolve({\n decision: commandDecision(request.params, decision, scope),\n }),\n });\n return true;\n }),\n client.onServerRequest('item/fileChange/requestApproval', (request, responder) => {\n onApproval({\n approval: fileChangeApproval(request.id, request.params),\n resolve: (decision, scope) => responder.resolve({\n decision: decision === 'deny' ? 'decline' : scope === 'session' ? 'acceptForSession' : 'accept',\n }),\n });\n return true;\n }),\n client.onServerRequest('item/permissions/requestApproval', (request, responder) => {\n onApproval({\n approval: permissionsApproval(request.id, request.params),\n resolve: (decision, scope) => responder.resolve({\n permissions: decision === 'deny' ? {} : {\n ...(request.params.permissions.fileSystem ? { fileSystem: request.params.permissions.fileSystem } : {}),\n ...(request.params.permissions.network ? { network: request.params.permissions.network } : {}),\n },\n scope: scope === 'session' ? 'session' : 'turn',\n }),\n });\n return true;\n }),\n client.onServerRequest('execCommandApproval', (request, responder) => {\n onApproval({\n approval: {\n id: String(request.id),\n kind: 'command',\n conversationId: request.params.conversationId,\n itemId: request.params.callId,\n title: 'Run command',\n command: request.params.command.join(' '),\n cwd: request.params.cwd,\n ...(request.params.reason ? { description: request.params.reason } : {}),\n },\n resolve: (decision, scope) => responder.resolve({\n decision: decision === 'deny'\n ? { denied: { rejection: 'Denied by user' } }\n : scope === 'session' ? 'approved_for_session' : 'approved',\n }),\n });\n return true;\n }),\n client.onServerRequest('applyPatchApproval', (request, responder) => {\n onApproval({\n approval: {\n id: String(request.id),\n kind: 'file-change',\n conversationId: request.params.conversationId,\n itemId: request.params.callId,\n title: 'Apply file changes',\n ...((request.params.reason || request.params.grantRoot) ? {\n description: request.params.reason ?? `Write under ${request.params.grantRoot}`,\n } : {}),\n },\n resolve: (decision, scope) => responder.resolve({\n decision: decision === 'deny'\n ? { denied: { rejection: 'Denied by user' } }\n : scope === 'session' ? 'approved_for_session' : 'approved',\n }),\n });\n return true;\n }),\n ];\n\n return () => {\n for (const unsubscribe of unsubscribers) unsubscribe();\n };\n}\n\nfunction commandApproval(\n id: string | number,\n params: v2.CommandExecutionRequestApprovalParams,\n): CodexSurfaceApproval {\n const availableDecisions = params.availableDecisions;\n const additionalPermissions = permissionDetails(params.additionalPermissions);\n const requestedPermissions = [\n ...(params.networkApprovalContext ? [{\n kind: 'network' as const,\n enabled: true,\n host: params.networkApprovalContext.host,\n protocol: params.networkApprovalContext.protocol,\n }] : []),\n ...additionalPermissions.filter((permission) => !params.networkApprovalContext || permission.kind !== 'network'),\n ];\n return {\n id: String(id),\n kind: 'command',\n conversationId: params.threadId,\n turnId: params.turnId,\n itemId: params.itemId,\n title: 'Run command',\n command: params.command ?? undefined,\n cwd: params.cwd ?? undefined,\n ...(params.reason ? { description: params.reason } : {}),\n ...(requestedPermissions.length ? { requestedPermissions } : {}),\n ...(availableDecisions ? {\n allowedScopes: [\n ...(availableDecisions.includes('accept') ? ['once' as const] : []),\n ...(availableDecisions.includes('acceptForSession') ? ['session' as const] : []),\n ],\n canDeny: availableDecisions.includes('decline') || availableDecisions.includes('cancel'),\n } : {}),\n };\n}\n\nfunction fileChangeApproval(\n id: string | number,\n params: v2.FileChangeRequestApprovalParams,\n): CodexSurfaceApproval {\n return {\n id: String(id),\n kind: 'file-change',\n conversationId: params.threadId,\n turnId: params.turnId,\n itemId: params.itemId,\n title: 'Apply file changes',\n ...((params.reason || params.grantRoot) ? {\n description: params.reason ?? `Write under ${params.grantRoot}`,\n } : {}),\n };\n}\n\nfunction permissionsApproval(\n id: string | number,\n params: v2.PermissionsRequestApprovalParams,\n): CodexSurfaceApproval {\n const requestedPermissions = permissionDetails(params.permissions);\n return {\n id: String(id),\n kind: 'permissions',\n conversationId: params.threadId,\n turnId: params.turnId,\n itemId: params.itemId,\n title: 'Grant additional permissions',\n description: params.reason ?? 'Codex requested additional access for this task.',\n cwd: params.cwd,\n ...(requestedPermissions.length ? { requestedPermissions } : {}),\n };\n}\n\nfunction commandDecision(\n params: v2.CommandExecutionRequestApprovalParams,\n decision: CodexSurfaceApprovalDecision,\n scope: CodexSurfaceApprovalScope,\n): v2.CommandExecutionApprovalDecision {\n const available = params.availableDecisions;\n const requested = decision === 'deny' ? 'decline' : scope === 'session' ? 'acceptForSession' : 'accept';\n if (!available || available.includes(requested)) return requested;\n if (decision === 'deny' && available.includes('cancel')) return 'cancel';\n throw new Error(`Approval decision '${decision}:${scope}' is not available for this command`);\n}\n\nfunction permissionDetails(\n profile: v2.RequestPermissionProfile | v2.AdditionalPermissionProfile | null | undefined,\n): CodexSurfaceRequestedPermission[] {\n if (!profile) return [];\n const permissions: CodexSurfaceRequestedPermission[] = [];\n if (profile.network) {\n permissions.push({ kind: 'network', enabled: profile.network.enabled ?? false });\n }\n if (profile.fileSystem) {\n for (const path of profile.fileSystem.read ?? []) {\n permissions.push({ kind: 'filesystem', access: 'read', path });\n }\n for (const path of profile.fileSystem.write ?? []) {\n permissions.push({ kind: 'filesystem', access: 'write', path });\n }\n for (const entry of profile.fileSystem.entries ?? []) {\n permissions.push({\n kind: 'filesystem',\n access: entry.access,\n path: fileSystemPath(entry.path),\n });\n }\n }\n return permissions;\n}\n\nfunction fileSystemPath(path: v2.FileSystemPath): string {\n if (path.type === 'path') return path.path;\n if (path.type === 'glob_pattern') return path.pattern;\n const special = path.value;\n switch (special.kind) {\n case 'project_roots': return special.subpath ? `project roots/${special.subpath}` : 'project roots';\n case 'tmpdir': return 'system temporary directory';\n case 'slash_tmp': return '/tmp';\n case 'root': return 'filesystem root';\n case 'minimal': return 'minimal runtime paths';\n case 'unknown': return [special.path, special.subpath].filter(Boolean).join('/');\n }\n}\n","import type { CodexAppServerClient } from '../codex/index';\nimport type {\n CodexSurfaceApprovalDecision,\n CodexSurfaceApprovalScope,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n} from '@codex-app-sdk/core/surface';\nimport { registerCodexApprovalHandlers, type PendingCodexApproval } from './codex-approvals';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\n\ntype ApprovalResolutionReason =\n | 'conversation_closed'\n | 'conversation_removed'\n | 'surface_disconnected';\n\nexport type CodexSurfaceApprovalsHost = {\n activeConversationId(): string | null;\n createRuntime(threadId: string, patch: ThreadRuntimePatch): ThreadRuntimeState;\n emitConversationActivity(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void;\n markRuntimeTurnActive(runtime: ThreadRuntimeState, turnId: string): void;\n maybeClearWaitingBusy(threadId: string): void;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchConversationStatus(threadId: string, status: 'active'): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n};\n\nexport class CodexSurfaceApprovalsController {\n private readonly pending = new Map<string, PendingCodexApproval>();\n private readonly unsubscribeHandler: () => void;\n\n constructor(client: CodexAppServerClient, private readonly host: CodexSurfaceApprovalsHost) {\n this.unsubscribeHandler = registerCodexApprovalHandlers(client, (pending) => this.add(pending));\n }\n\n close(): void {\n this.unsubscribeHandler();\n this.pending.clear();\n }\n\n denyAll(): void {\n for (const pending of this.pending.values()) pending.resolve('deny', 'once');\n this.pending.clear();\n }\n\n approvalsForThread(threadId: string): CodexSurfaceSnapshot['approvals'] {\n return [...this.pending.values()]\n .map((pending) => pending.approval)\n .filter((approval) => approval.conversationId === threadId);\n }\n\n hasForThread(threadId: string): boolean {\n return [...this.pending.values()]\n .some((pending) => pending.approval.conversationId === threadId);\n }\n\n async resolve(\n threadId: string | undefined,\n approvalId: string,\n decision: CodexSurfaceApprovalDecision,\n scope: CodexSurfaceApprovalScope,\n ): Promise<void> {\n const pending = this.pending.get(approvalId);\n if (!pending) throw new Error(`Unknown approval '${approvalId}'`);\n if (threadId !== undefined && pending.approval.conversationId !== threadId) {\n throw new Error(\n `Approval '${approvalId}' belongs to conversation '${pending.approval.conversationId}', not '${threadId}'`,\n );\n }\n if (decision !== 'approve' && decision !== 'deny') {\n throw new Error(`Invalid approval decision '${String(decision)}'`);\n }\n if (scope !== 'once' && scope !== 'session') {\n throw new Error(`Invalid approval scope '${String(scope)}'`);\n }\n if (decision === 'approve' && pending.approval.allowedScopes && !pending.approval.allowedScopes.includes(scope)) {\n throw new Error(`Approval decision '${decision}:${scope}' is not available for '${approvalId}'`);\n }\n pending.resolve(decision, scope);\n this.pending.delete(approvalId);\n this.refreshActive();\n this.host.maybeClearWaitingBusy(pending.approval.conversationId);\n this.host.emitEvent('action', {\n type: 'approval.resolved',\n conversationId: pending.approval.conversationId,\n ...(pending.approval.turnId ? { turnId: pending.approval.turnId } : {}),\n payload: {\n approval: structuredClone(pending.approval), decision, scope, reason: 'host',\n },\n });\n this.host.emitConversationActivity(pending.approval.conversationId, 'action');\n }\n\n clearForThread(threadId: string, eventReason: ApprovalResolutionReason): void {\n const resolved: PendingCodexApproval[] = [];\n for (const [approvalId, pending] of this.pending) {\n if (pending.approval.conversationId !== threadId) continue;\n pending.resolve('deny', 'once');\n this.pending.delete(approvalId);\n resolved.push(pending);\n }\n this.refreshActive();\n this.host.patchRuntime(threadId, {});\n for (const pending of resolved) {\n this.host.emitEvent('notification', {\n type: 'approval.resolved',\n conversationId: threadId,\n ...(pending.approval.turnId ? { turnId: pending.approval.turnId } : {}),\n payload: {\n approval: structuredClone(pending.approval),\n decision: 'deny', scope: 'once', reason: eventReason,\n },\n });\n }\n }\n\n handleServerResolved(requestId: string): void {\n const pending = this.pending.get(requestId);\n this.pending.delete(requestId);\n this.refreshActive();\n if (!pending) return;\n this.host.maybeClearWaitingBusy(pending.approval.conversationId);\n this.host.emitEvent('notification', {\n type: 'approval.resolved',\n conversationId: pending.approval.conversationId,\n ...(pending.approval.turnId ? { turnId: pending.approval.turnId } : {}),\n payload: {\n approval: structuredClone(pending.approval),\n decision: null, scope: null, reason: 'server',\n },\n });\n }\n\n private add(pending: PendingCodexApproval): void {\n this.pending.set(pending.approval.id, pending);\n const runtime = this.host.createRuntime(pending.approval.conversationId, { busy: true });\n if (pending.approval.turnId) this.host.markRuntimeTurnActive(runtime, pending.approval.turnId);\n this.host.patchRuntime(pending.approval.conversationId, { busy: true });\n this.host.patchConversationStatus(pending.approval.conversationId, 'active');\n this.refreshActive();\n this.host.emitEvent('notification', {\n type: 'approval.requested',\n conversationId: pending.approval.conversationId,\n ...(pending.approval.turnId ? { turnId: pending.approval.turnId } : {}),\n payload: { approval: structuredClone(pending.approval) },\n });\n this.host.emitConversationActivity(pending.approval.conversationId, 'notification');\n }\n\n private refreshActive(): void {\n const threadId = this.host.activeConversationId();\n this.host.patch({ approvals: threadId ? this.approvalsForThread(threadId) : [] });\n }\n}\n","import { isAbsolute } from 'node:path';\nimport type { CodexSurfaceJsonValue } from '@codex-app-sdk/core/surface';\n\nexport type CodexMcpServerToolApprovalMode = 'auto' | 'prompt' | 'writes' | 'approve';\n\nexport type CodexMcpServerTransport =\n | {\n type: 'stdio';\n command: string;\n args?: readonly string[];\n cwd?: string;\n env?: Readonly<Record<string, string>>;\n /** Environment variable names inherited by the app-server-launched process. */\n envVars?: readonly string[];\n }\n | {\n type: 'http';\n url: string;\n };\n\n/** Trusted main-process configuration for an app-owned MCP server. */\nexport type CodexMcpServerDefinition = {\n name: string;\n transport: CodexMcpServerTransport;\n toolApprovalMode?: CodexMcpServerToolApprovalMode;\n required?: boolean;\n enabledTools?: readonly string[];\n startupTimeoutMs?: number;\n toolTimeoutMs?: number;\n};\n\nexport function normalizeMcpServers(\n definitions: readonly CodexMcpServerDefinition[],\n): readonly CodexMcpServerDefinition[] {\n if (!Array.isArray(definitions)) throw new TypeError('Codex MCP servers must be an array');\n const names = new Set<string>();\n return definitions.map((definition, index) => {\n if (!definition || typeof definition !== 'object' || Array.isArray(definition)) {\n throw new TypeError(`Codex MCP server ${index + 1} must be an object`);\n }\n const name = definition.name?.trim();\n if (!name || !/^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(name)) {\n throw new TypeError(`Codex MCP server ${index + 1} name must match ^[A-Za-z0-9][A-Za-z0-9_-]*$`);\n }\n if (names.has(name)) throw new Error(`Duplicate Codex MCP server '${name}'`);\n names.add(name);\n const transport = normalizeMcpTransport(definition.transport, name);\n const toolApprovalMode = definition.toolApprovalMode;\n if (\n toolApprovalMode !== undefined\n && toolApprovalMode !== 'auto'\n && toolApprovalMode !== 'prompt'\n && toolApprovalMode !== 'writes'\n && toolApprovalMode !== 'approve'\n ) {\n throw new TypeError(`Codex MCP server '${name}' tool approval mode is invalid`);\n }\n if (definition.required !== undefined && typeof definition.required !== 'boolean') {\n throw new TypeError(`Codex MCP server '${name}' required flag must be a boolean`);\n }\n const enabledTools = definition.enabledTools === undefined\n ? undefined\n : normalizedNonEmptyStrings(definition.enabledTools, `Codex MCP server '${name}' enabled tool`);\n const startupTimeoutMs = optionalPositiveMilliseconds(\n definition.startupTimeoutMs,\n `Codex MCP server '${name}' startup timeout`,\n );\n const toolTimeoutMs = optionalPositiveMilliseconds(\n definition.toolTimeoutMs,\n `Codex MCP server '${name}' tool timeout`,\n );\n return {\n name,\n transport,\n ...(toolApprovalMode === undefined ? {} : { toolApprovalMode }),\n ...(definition.required === undefined ? {} : { required: definition.required }),\n ...(enabledTools === undefined ? {} : { enabledTools }),\n ...(startupTimeoutMs === undefined ? {} : { startupTimeoutMs }),\n ...(toolTimeoutMs === undefined ? {} : { toolTimeoutMs }),\n };\n });\n}\n\nfunction normalizeMcpTransport(\n transport: CodexMcpServerTransport,\n serverName: string,\n): CodexMcpServerTransport {\n if (!transport || typeof transport !== 'object' || Array.isArray(transport)) {\n throw new TypeError(`Codex MCP server '${serverName}' transport must be an object`);\n }\n if (transport.type === 'http') {\n const url = transport.url?.trim();\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new TypeError(`Codex MCP server '${serverName}' URL must be valid`);\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new TypeError(`Codex MCP server '${serverName}' URL must use HTTP or HTTPS`);\n }\n return { type: 'http', url };\n }\n if (transport.type !== 'stdio') {\n throw new TypeError(`Codex MCP server '${serverName}' transport type is invalid`);\n }\n const command = transport.command?.trim();\n if (!command) throw new TypeError(`Codex MCP server '${serverName}' command cannot be empty`);\n const args = transport.args === undefined\n ? undefined\n : normalizedNonEmptyStrings(transport.args, `Codex MCP server '${serverName}' argument`);\n const cwd = transport.cwd?.trim();\n if (cwd !== undefined && (!cwd || !isAbsolute(cwd))) {\n throw new TypeError(`Codex MCP server '${serverName}' cwd must be an absolute path`);\n }\n let env: Record<string, string> | undefined;\n if (transport.env !== undefined) {\n if (!transport.env || typeof transport.env !== 'object' || Array.isArray(transport.env)) {\n throw new TypeError(`Codex MCP server '${serverName}' env must be an object`);\n }\n env = {};\n for (const [key, value] of Object.entries(transport.env)) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || typeof value !== 'string') {\n throw new TypeError(`Codex MCP server '${serverName}' env entries must be string environment variables`);\n }\n env[key] = value;\n }\n }\n const envVars = transport.envVars === undefined\n ? undefined\n : normalizedEnvironmentVariableNames(transport.envVars, serverName);\n return {\n type: 'stdio',\n command,\n ...(args === undefined ? {} : { args }),\n ...(cwd === undefined ? {} : { cwd }),\n ...(env === undefined ? {} : { env }),\n ...(envVars === undefined ? {} : { envVars }),\n };\n}\n\nfunction normalizedNonEmptyStrings(values: readonly string[], label: string): string[] {\n if (!Array.isArray(values)) throw new TypeError(`${label}s must be an array`);\n const normalized = values.map((value) => {\n if (typeof value !== 'string' || !value.trim()) throw new TypeError(`${label} cannot be empty`);\n return value.trim();\n });\n return [...new Set(normalized)];\n}\n\nfunction normalizedEnvironmentVariableNames(values: readonly string[], serverName: string): string[] {\n const names = normalizedNonEmptyStrings(values, `Codex MCP server '${serverName}' environment variable`);\n for (const name of names) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {\n throw new TypeError(`Codex MCP server '${serverName}' environment variable '${name}' is invalid`);\n }\n }\n return names;\n}\n\nfunction optionalPositiveMilliseconds(value: number | undefined, label: string): number | undefined {\n if (value === undefined) return undefined;\n if (!Number.isFinite(value) || value <= 0) throw new TypeError(`${label} must be a positive finite number`);\n return value;\n}\n\nexport function mcpServerConfig(\n definitions: readonly CodexMcpServerDefinition[],\n): Record<string, CodexSurfaceJsonValue> {\n const config: Record<string, CodexSurfaceJsonValue> = {};\n for (const definition of definitions) {\n const server: Record<string, CodexSurfaceJsonValue> = definition.transport.type === 'http'\n ? { url: definition.transport.url }\n : {\n command: definition.transport.command,\n ...(definition.transport.args === undefined ? {} : { args: [...definition.transport.args] }),\n ...(definition.transport.cwd === undefined ? {} : { cwd: definition.transport.cwd }),\n ...(definition.transport.env === undefined ? {} : { env: { ...definition.transport.env } }),\n ...(definition.transport.envVars === undefined ? {} : { env_vars: [...definition.transport.envVars] }),\n };\n if (definition.toolApprovalMode !== undefined) {\n server.default_tools_approval_mode = definition.toolApprovalMode;\n }\n if (definition.required !== undefined) server.required = definition.required;\n if (definition.enabledTools !== undefined) server.enabled_tools = [...definition.enabledTools];\n if (definition.startupTimeoutMs !== undefined) server.startup_timeout_sec = definition.startupTimeoutMs / 1000;\n if (definition.toolTimeoutMs !== undefined) server.tool_timeout_sec = definition.toolTimeoutMs / 1000;\n config[`mcp_servers.${definition.name}`] = server;\n }\n return config;\n}\n\nexport function assertNoMcpConfigCollision(\n config: Readonly<Record<string, CodexSurfaceJsonValue>>,\n definitions: readonly CodexMcpServerDefinition[],\n): void {\n if (definitions.length === 0) return;\n for (const key of Object.keys(config)) {\n if (key === 'mcp_servers') {\n throw new Error('Raw mcp_servers config cannot be combined with typed Codex MCP servers');\n }\n for (const definition of definitions) {\n const path = `mcp_servers.${definition.name}`;\n if (key === path || key.startsWith(`${path}.`)) {\n throw new Error(`Raw config for Codex MCP server '${definition.name}' conflicts with its typed definition`);\n }\n }\n }\n}\n","import type { CodexServerRequestResponder, ServerRequest, v2 } from '../codex/index';\nimport type { CodexSurfaceJsonValue, CreateCodexConversationOptions } from '@codex-app-sdk/core/surface';\nimport {\n assertNoMcpConfigCollision,\n mcpServerConfig,\n normalizeMcpServers,\n type CodexMcpServerDefinition,\n} from './codex-surface-mcp';\nimport { errorMessage } from './codex-surface-prompts';\nimport type {\n CodexConversationLoadOptions,\n CodexDynamicTool,\n CodexSurfaceExtension,\n CodexThreadStartExtension,\n} from './codex-surface-contracts';\n\ntype DynamicToolRequest = Extract<ServerRequest, { method: 'item/tool/call' }>;\n\nexport class CodexSurfaceExtensionsController {\n private readonly dynamicTools = new Map<string, CodexDynamicTool>();\n readonly defaultMcpServers: readonly CodexMcpServerDefinition[];\n\n constructor(\n private readonly extensions: readonly CodexSurfaceExtension[],\n mcpServers: readonly CodexMcpServerDefinition[],\n private readonly hostOptionsForThread: (threadId: string) => CodexConversationLoadOptions | undefined,\n ) {\n this.defaultMcpServers = normalizeMcpServers(mcpServers);\n for (const extension of extensions) {\n for (const tool of extension.dynamicTools ?? []) {\n const name = tool.name.trim();\n if (!name) throw new Error('Dynamic tool names cannot be empty');\n if (this.dynamicTools.has(name)) throw new Error(`Duplicate dynamic tool '${name}'`);\n this.dynamicTools.set(name, { ...tool, name });\n }\n }\n }\n\n hasDynamicTools(): boolean {\n return this.dynamicTools.size > 0;\n }\n\n dynamicToolSpecs(): v2.DynamicToolSpec[] {\n return [...this.dynamicTools.values()].map((tool) => ({\n type: 'function',\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema as v2.DynamicToolFunctionSpec['inputSchema'],\n ...(tool.deferLoading === undefined ? {} : { deferLoading: tool.deferLoading }),\n }));\n }\n\n async conversationExtension(\n context: Parameters<NonNullable<CodexSurfaceExtension['configureConversation']>>[0],\n createOptions: CreateCodexConversationOptions = {},\n mcpServers: readonly CodexMcpServerDefinition[] = this.defaultMcpServers,\n ): Promise<CodexThreadStartExtension> {\n const config: Record<string, CodexSurfaceJsonValue> = mcpServerConfig(mcpServers);\n const developerInstructions: string[] = [];\n let baseInstructions: string | undefined;\n for (const extension of this.extensions) {\n if (!extension.configureConversation) continue;\n const contribution = await extension.configureConversation(context);\n if (contribution.config) {\n assertNoMcpConfigCollision(contribution.config, mcpServers);\n Object.assign(config, contribution.config);\n }\n if (contribution.baseInstructions !== undefined) baseInstructions = contribution.baseInstructions;\n if (contribution.developerInstructions?.trim()) {\n developerInstructions.push(contribution.developerInstructions.trim());\n }\n }\n if (createOptions.config) {\n assertNoMcpConfigCollision(createOptions.config, mcpServers);\n Object.assign(config, createOptions.config);\n }\n if (createOptions.baseInstructions !== undefined) baseInstructions = createOptions.baseInstructions;\n if (createOptions.developerInstructions?.trim()) {\n developerInstructions.push(createOptions.developerInstructions.trim());\n }\n return {\n ...(baseInstructions === undefined ? {} : { baseInstructions }),\n ...(Object.keys(config).length === 0 ? {} : { config }),\n ...(developerInstructions.length === 0\n ? {}\n : { developerInstructions: developerInstructions.join('\\n\\n') }),\n };\n }\n\n async handleDynamicToolCall(\n request: DynamicToolRequest,\n responder: CodexServerRequestResponder<'item/tool/call'>,\n ): Promise<void> {\n if (request.params.namespace !== null) {\n responder.reject({\n code: -32601,\n message: `Dynamic tool namespace '${request.params.namespace}' is not configured`,\n });\n return;\n }\n const tool = this.dynamicTools.get(request.params.tool);\n if (!tool) {\n responder.reject({ code: -32601, message: `Unknown dynamic host tool '${request.params.tool}'` });\n return;\n }\n try {\n const result = await tool.execute({\n callId: request.params.callId,\n conversationId: request.params.threadId,\n turnId: request.params.turnId,\n arguments: request.params.arguments as CodexSurfaceJsonValue,\n extensionContext: this.hostOptionsForThread(request.params.threadId)?.extensionContext,\n });\n const normalized = typeof result === 'string'\n ? { content: [{ type: 'text' as const, text: result }], success: true }\n : { content: result.content, success: result.success ?? true };\n responder.resolve({\n success: normalized.success,\n contentItems: normalized.content.map((item) => item.type === 'image'\n ? { type: 'inputImage' as const, imageUrl: item.imageUrl }\n : { type: 'inputText' as const, text: item.text }),\n });\n } catch (error) {\n responder.resolve({\n success: false,\n contentItems: [{ type: 'inputText', text: errorMessage(error) }],\n });\n }\n }\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceSnapshot,\n ListCodexConversationsOptions,\n SurfaceMessage,\n} from '@codex-app-sdk/core/surface';\nimport {\n codexTurnToSurfaceMessages,\n preserveHistoricalAttachmentPreviews,\n} from './codex-conversation-history';\nimport { normalizedConversationId, errorMessage } from './codex-surface-prompts';\nimport { threadToSummary, upsertConversation } from './codex-surface-data';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\nimport { surfaceTurn } from './codex-surface-events';\n\nconst HISTORY_INITIAL_PAGE_SIZE = 50;\nconst HISTORY_PAGE_SIZE = 25;\nconst HISTORY_MESSAGE_BATCH_SIZE = 25;\n\ntype HistoryHydrationOptions = {\n initialPageLoaded?: boolean;\n cursor?: string | null;\n restart?: boolean;\n};\n\nexport type CodexSurfaceConversationsHost = {\n emitHistoryPrepended(threadId: string, messages: readonly SurfaceMessage[], origin: 'lifecycle'): void;\n emitSummaryUpserted(\n summary: CodexConversationSummary,\n reason: 'listed' | 'updated',\n origin: 'action',\n ): void;\n ensureConnected(): Promise<void>;\n getSnapshot(): CodexSurfaceSnapshot;\n getState(): CodexSurfaceSnapshot;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n removeThread(threadId: string, reason: 'archived' | 'deleted', origin: 'action'): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n runtime(threadId: string): ThreadRuntimeState | undefined;\n schedulePluginRefresh(force: boolean): void;\n};\n\nexport class CodexSurfaceConversationsController {\n private readonly historyHydrations = new Map<string, Promise<void>>();\n private readonly historyLoads = new Map<string, Promise<{\n conversationId: string;\n messages: SurfaceMessage[];\n hasOlder: boolean;\n }>>();\n\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly conversationLimit: number | undefined,\n private readonly host: CodexSurfaceConversationsHost,\n ) {}\n\n reset(): void {\n this.historyHydrations.clear();\n this.historyLoads.clear();\n }\n\n forget(threadId: string): void {\n this.historyHydrations.delete(threadId);\n this.historyLoads.delete(threadId);\n }\n\n async refresh(): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n return this.load();\n }\n\n async load(): Promise<CodexSurfaceSnapshot> {\n const conversations = await this.requestConversations({ limit: this.conversationLimit });\n this.host.patch({ conversations });\n this.host.schedulePluginRefresh(true);\n for (const summary of conversations) this.host.emitSummaryUpserted(summary, 'listed', 'action');\n return this.host.getSnapshot();\n }\n\n async list(options: ListCodexConversationsOptions = {}): Promise<CodexConversationSummary[]> {\n await this.host.ensureConnected();\n return structuredClone(await this.requestConversations(options));\n }\n\n async readSummary(conversationId: string): Promise<CodexConversationSummary> {\n const threadId = normalizedConversationId(conversationId);\n await this.host.ensureConnected();\n const response: v2.ThreadReadResponse = await this.client.request('thread/read', {\n threadId,\n includeTurns: false,\n });\n if (response.thread.id !== threadId) {\n throw new Error(`Codex thread/read returned '${response.thread.id}' for requested thread '${threadId}'`);\n }\n const summary = this.summaryWithKnownTurnCount(response.thread);\n return structuredClone(summary);\n }\n\n async archive(conversationId: string): Promise<CodexSurfaceSnapshot> {\n const threadId = normalizedConversationId(conversationId);\n await this.host.ensureConnected();\n await this.client.request('thread/archive', { threadId });\n this.host.removeThread(threadId, 'archived', 'action');\n return this.host.getSnapshot();\n }\n\n async delete(conversationId: string): Promise<CodexSurfaceSnapshot> {\n const threadId = normalizedConversationId(conversationId);\n await this.host.ensureConnected();\n await this.client.request('thread/delete', { threadId });\n this.host.removeThread(threadId, 'deleted', 'action');\n return this.host.getSnapshot();\n }\n\n async unarchive(conversationId: string): Promise<CodexSurfaceSnapshot> {\n const threadId = normalizedConversationId(conversationId);\n await this.host.ensureConnected();\n const response = await this.client.request('thread/unarchive', { threadId });\n if (response.thread.id !== threadId) {\n throw new Error(`Codex thread/unarchive returned '${response.thread.id}' for requested thread '${threadId}'`);\n }\n const summary = this.summaryWithKnownTurnCount(response.thread);\n this.host.patch({\n conversations: upsertConversation(this.host.getState().conversations, summary),\n });\n this.host.emitSummaryUpserted(summary, 'updated', 'action');\n return this.host.getSnapshot();\n }\n\n hydrateCompleteHistory(threadId: string, options: HistoryHydrationOptions = {}): Promise<void> {\n const runtime = this.host.requireRuntime(threadId);\n if (runtime.fullHistoryHydrated && !options.restart) return Promise.resolve();\n if (options.initialPageLoaded && options.cursor === null) {\n this.host.patchRuntime(threadId, {\n historyCursor: null,\n historyHasOlder: false,\n fullHistoryHydrated: true,\n });\n return Promise.resolve();\n }\n const existing = this.historyHydrations.get(threadId);\n if (existing) return existing;\n const hydration = (async () => {\n try {\n if (options.restart) {\n const response: v2.ThreadTurnsListResponse = await this.client.request('thread/turns/list', {\n threadId,\n cursor: null,\n limit: HISTORY_INITIAL_PAGE_SIZE,\n sortDirection: 'desc',\n itemsView: 'full',\n });\n this.mergeHistoryPage(threadId, [...response.data].reverse(), new Set());\n this.host.patchRuntime(threadId, {\n historyCursor: response.nextCursor,\n historyHasOlder: response.nextCursor !== null,\n fullHistoryHydrated: response.nextCursor === null,\n });\n }\n if (options.cursor !== undefined) {\n this.host.patchRuntime(threadId, {\n historyCursor: options.cursor,\n historyHasOlder: options.cursor !== null,\n });\n }\n while (this.host.runtime(threadId)?.historyCursor !== null) {\n await this.loadOlderHistory(threadId);\n }\n if (!this.host.runtime(threadId)) return;\n this.host.patchRuntime(threadId, {\n fullHistoryHydrated: true,\n historyHasOlder: false,\n });\n } catch (error) {\n if (this.host.runtime(threadId)) {\n this.host.patchRuntime(threadId, {\n error: `Could not load complete conversation history: ${errorMessage(error)}`,\n });\n }\n throw error;\n }\n })();\n this.historyHydrations.set(threadId, hydration);\n void hydration.finally(() => {\n if (this.historyHydrations.get(threadId) === hydration) this.historyHydrations.delete(threadId);\n }).catch(() => undefined);\n return hydration;\n }\n\n loadOlderHistory(threadId: string): Promise<{\n conversationId: string;\n messages: SurfaceMessage[];\n hasOlder: boolean;\n }> {\n const runtime = this.host.requireRuntime(threadId);\n const existing = this.historyLoads.get(threadId);\n if (existing) return existing;\n if (runtime.fullHistoryHydrated || runtime.historyCursor === null) {\n return Promise.resolve({ conversationId: threadId, messages: [], hasOlder: false });\n }\n const load = (async () => {\n this.host.patchRuntime(threadId, { historyLoadingOlder: true, error: null });\n try {\n let cursor = this.host.requireRuntime(threadId).historyCursor;\n let messages: SurfaceMessage[] = [];\n const requestedCursors = new Set<string>();\n while (cursor !== null && messages.length === 0) {\n if (requestedCursors.has(cursor)) {\n throw new Error(`Codex app-server repeated a thread history cursor for '${threadId}'`);\n }\n requestedCursors.add(cursor);\n const materializedTurnIds = new Set(this.host.requireRuntime(threadId).turnIds);\n const response: v2.ThreadTurnsListResponse = await this.client.request('thread/turns/list', {\n threadId, cursor, limit: HISTORY_PAGE_SIZE, sortDirection: 'desc', itemsView: 'full',\n });\n const turns = [...response.data].reverse();\n const newTurnIds = new Set(turns\n .map((turn) => turn.id)\n .filter((turnId) => !materializedTurnIds.has(turnId)));\n messages = this.mergeHistoryPage(threadId, turns, newTurnIds);\n cursor = response.nextCursor;\n this.host.patchRuntime(threadId, {\n historyCursor: cursor,\n historyHasOlder: cursor !== null,\n fullHistoryHydrated: cursor === null,\n });\n await this.emitHistoryChunks(threadId, messages);\n }\n return {\n conversationId: threadId,\n messages,\n hasOlder: this.host.requireRuntime(threadId).historyHasOlder,\n };\n } catch (error) {\n if (this.host.runtime(threadId)) this.host.patchRuntime(threadId, { error: errorMessage(error) });\n throw error;\n } finally {\n if (this.host.runtime(threadId)) this.host.patchRuntime(threadId, { historyLoadingOlder: false });\n }\n })();\n this.historyLoads.set(threadId, load);\n void load.finally(() => {\n if (this.historyLoads.get(threadId) === load) this.historyLoads.delete(threadId);\n }).catch(() => undefined);\n return load;\n }\n\n async waitForHistoryEmission(threadId: string): Promise<void> {\n const load = this.historyLoads.get(threadId);\n if (!load) return;\n await load.then(() => undefined, () => undefined);\n }\n\n private async emitHistoryChunks(threadId: string, messages: readonly SurfaceMessage[]): Promise<void> {\n for (let index = messages.length; index > 0;) {\n const start = Math.max(0, index - HISTORY_MESSAGE_BATCH_SIZE);\n this.host.emitHistoryPrepended(threadId, messages.slice(start, index), 'lifecycle');\n await yieldToRenderer();\n index = start;\n }\n }\n\n async refreshCompleteHistory(threadId: string): Promise<void> {\n const existing = this.historyHydrations.get(threadId);\n if (existing) await existing.catch(() => undefined);\n this.host.patchRuntime(threadId, {\n fullHistoryHydrated: false,\n historyCursor: null,\n historyHasOlder: true,\n });\n await this.hydrateCompleteHistory(threadId, { restart: true });\n }\n\n private async requestConversations(\n options: ListCodexConversationsOptions = {},\n ): Promise<CodexConversationSummary[]> {\n const conversations: CodexConversationSummary[] = [];\n const totalLimit = options.limit === undefined\n ? Number.POSITIVE_INFINITY\n : Math.max(0, Math.floor(options.limit));\n let cursor: string | null | undefined = null;\n do {\n const limit = Math.min(100, totalLimit - conversations.length);\n if (limit <= 0) break;\n const response: v2.ThreadListResponse = await this.client.request('thread/list', {\n archived: options.archived ?? false,\n cursor,\n limit,\n sortDirection: 'desc',\n sortKey: 'updated_at',\n ...(options.cwd === undefined\n ? {}\n : { cwd: typeof options.cwd === 'string' ? options.cwd : [...options.cwd] }),\n ...(options.searchTerm === undefined ? {} : { searchTerm: options.searchTerm }),\n });\n conversations.push(...response.data.map((thread) => this.summaryWithKnownTurnCount(thread)));\n cursor = response.nextCursor;\n } while (cursor);\n return conversations;\n }\n\n private mergeHistoryPage(\n threadId: string,\n turns: readonly v2.Turn[],\n newTurnIds: ReadonlySet<string>,\n ): SurfaceMessage[] {\n const current = this.host.runtime(threadId);\n if (!current) return [];\n const protectedTurnIds = new Set<string>();\n if (current.activeTurnId) protectedTurnIds.add(current.activeTurnId);\n for (const turn of turns) {\n if (turn.status === 'inProgress' && current.turnIds.includes(turn.id)) protectedTurnIds.add(turn.id);\n }\n const replaceableTurnIds = new Set(turns\n .filter((turn) => !protectedTurnIds.has(turn.id))\n .map((turn) => turn.id));\n const historicalTurns = turns.filter((turn) => replaceableTurnIds.has(turn.id));\n const preservedTurnIds = current.turnIds.filter((turnId) => !replaceableTurnIds.has(turnId));\n const preservedTurns = current.turns.filter((turn) => !replaceableTurnIds.has(turn.id));\n const preservedMessages = current.messages.filter((message) => (\n message.turnId === undefined || !replaceableTurnIds.has(message.turnId)\n ));\n const historyMessages = preserveHistoricalAttachmentPreviews(\n current.messages,\n historicalTurns.flatMap((turn) => codexTurnToSurfaceMessages(threadId, turn)),\n );\n this.host.patchRuntime(threadId, {\n turnIds: [...historicalTurns.map((turn) => turn.id), ...preservedTurnIds],\n turns: [...historicalTurns.map((turn) => surfaceTurn(turn)), ...preservedTurns],\n messages: [...historyMessages, ...preservedMessages],\n });\n const turnCount = this.host.requireRuntime(threadId).turnIds.length;\n const state = this.host.getState();\n this.host.patch({\n conversations: state.conversations.map((conversation) => conversation.id === threadId\n ? { ...conversation, turnCount }\n : conversation),\n });\n const summary = this.host.getState().conversations.find((conversation) => conversation.id === threadId);\n if (summary) this.host.emitSummaryUpserted(summary, 'updated', 'action');\n return historyMessages.filter((message) => message.turnId !== undefined && newTurnIds.has(message.turnId));\n }\n\n private summaryWithKnownTurnCount(thread: v2.Thread): CodexConversationSummary {\n const summary = threadToSummary(thread);\n const runtime = this.host.runtime(thread.id);\n if (runtime?.hydrated) return { ...summary, turnCount: runtime.turnIds.length };\n const existing = this.host.getState().conversations.find((conversation) => conversation.id === thread.id);\n return existing ? { ...summary, turnCount: existing.turnCount } : summary;\n }\n}\n\nfunction yieldToRenderer(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceApprovalMode,\n CodexSurfaceApprovalPreset,\n CodexSurfacePermissionMode,\n CodexSurfaceSnapshot,\n CreateCodexConversationOptions,\n UpdateCodexConversationSettings,\n} from '@codex-app-sdk/core/surface';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport { sameValue } from './codex-surface-events';\nimport {\n approvalPresetStartParams,\n approvalPresetUpdateParams,\n collaborationMode,\n nextSelection,\n selectedModel,\n} from './codex-surface-settings';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\n\nexport type CodexSurfaceConversationSettingsHost = {\n createConversation(): Promise<void>;\n emitConversationSettings(threadId: string, origin: 'action'): void;\n emitEvent(origin: 'action', input: SurfaceEventInput): void;\n emitSummaryUpserted(summary: CodexConversationSummary, reason: 'updated', origin: 'action'): void;\n ensureConnected(): Promise<void>;\n ensureThreadReady(threadId: string): Promise<ThreadRuntimeState>;\n getSnapshot(): CodexSurfaceSnapshot;\n getState(): CodexSurfaceSnapshot;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n snapshotForRuntime(runtime: ThreadRuntimeState): CodexSurfaceSnapshot;\n};\n\nexport class CodexSurfaceConversationSettingsController {\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly defaults: {\n approvalMode?: CodexSurfaceApprovalMode;\n approvalPreset?: CodexSurfaceApprovalPreset;\n permissionMode?: CodexSurfacePermissionMode;\n },\n private readonly host: CodexSurfaceConversationSettingsHost,\n ) {}\n\n preferredApprovalPreset(): CodexSurfaceApprovalPreset | null {\n if (this.defaults.approvalPreset) return this.defaults.approvalPreset;\n if (this.defaults.approvalMode !== undefined || this.defaults.permissionMode !== undefined) {\n if (this.defaults.permissionMode === 'full-access' && this.defaults.approvalMode !== 'ask') {\n return 'full-access';\n }\n if (this.defaults.permissionMode === 'workspace-write' && this.defaults.approvalMode === 'ask') {\n return 'ask-for-approval';\n }\n return null;\n }\n return 'ask-for-approval';\n }\n\n threadStartSettings(\n options: CreateCodexConversationOptions,\n availablePresets: readonly CodexSurfaceApprovalPreset[],\n ): {\n approvalPolicy: v2.AskForApproval;\n approvalsReviewer?: v2.ApprovalsReviewer;\n permissions?: string;\n sandbox?: v2.SandboxMode;\n } {\n const preferred = this.preferredApprovalPreset();\n const preset = options.approvalPreset ?? (\n options.approvalMode === undefined && options.permissionMode === undefined\n ? (availablePresets.includes(preferred ?? 'ask-for-approval')\n ? preferred\n : availablePresets[0] ?? null)\n : null\n );\n if (preset) return approvalPresetStartParams(preset);\n const approvalMode = options.approvalMode ?? this.defaults.approvalMode;\n const permissionMode = options.permissionMode ?? this.defaults.permissionMode ?? 'read-only';\n return {\n approvalPolicy: approvalMode === 'ask' ? 'on-request' : 'never',\n sandbox: permissionMode === 'full-access' ? 'danger-full-access' : permissionMode,\n };\n }\n\n async rename(threadId: string, title: string): Promise<void> {\n await this.host.ensureThreadReady(threadId);\n const name = title.trim();\n if (!name) throw new Error('Conversation title cannot be empty');\n await this.client.request('thread/name/set', { threadId, name });\n const state = this.host.getState();\n this.host.patch({\n conversations: state.conversations.map((conversation) => conversation.id === threadId\n ? { ...conversation, title: name }\n : conversation),\n });\n const summary = this.host.getState().conversations.find((conversation) => conversation.id === threadId);\n if (summary) this.host.emitSummaryUpserted(summary, 'updated', 'action');\n }\n\n async update(settings: UpdateCodexConversationSettings): Promise<CodexSurfaceSnapshot> {\n const state = this.host.getState();\n const threadId = state.activeConversationId;\n if (!threadId) {\n const next = nextSelection(state, settings);\n if (settings.approvalPreset && !state.approvalPresets.includes(settings.approvalPreset)) {\n throw new Error(`Approval preset '${settings.approvalPreset}' is not available`);\n }\n this.host.patch(next);\n return this.host.getSnapshot();\n }\n await this.updateForThread(threadId, settings);\n return this.host.getSnapshot();\n }\n\n async updateForThread(threadId: string, settings: UpdateCodexConversationSettings): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const runtimeSnapshot = this.host.snapshotForRuntime(runtime);\n const next = nextSelection(runtimeSnapshot, settings);\n const changed = runtime.approvalPreset !== next.approvalPreset\n || runtime.selectedModelId !== next.selectedModelId\n || runtime.selectedReasoningEffort !== next.selectedReasoningEffort\n || runtime.selectedServiceTier !== next.selectedServiceTier\n || runtime.planMode !== next.planMode;\n if (settings.approvalPreset && !runtimeSnapshot.approvalPresets.includes(settings.approvalPreset)) {\n throw new Error(`Approval preset '${settings.approvalPreset}' is not available`);\n }\n const model = selectedModel(this.host.getState().models, next.selectedModelId);\n await this.client.request('thread/settings/update', {\n threadId,\n ...(settings.approvalPreset ? approvalPresetUpdateParams(settings.approvalPreset) : {}),\n ...(settings.modelId && model ? { model: model.model } : {}),\n ...(settings.reasoningEffort || settings.modelId ? { effort: next.selectedReasoningEffort } : {}),\n ...(settings.serviceTier !== undefined || settings.modelId\n ? { serviceTier: next.selectedServiceTier }\n : {}),\n ...(model && (\n typeof settings.planMode === 'boolean'\n || Boolean(settings.modelId)\n || Boolean(settings.reasoningEffort)\n ) ? { collaborationMode: collaborationMode(next.planMode, model.model, next.selectedReasoningEffort) } : {}),\n });\n this.host.patchRuntime(threadId, next);\n if (changed) this.host.emitConversationSettings(threadId, 'action');\n }\n\n async setGoal(objective: string, tokenBudget?: number | null): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n if (!this.host.getState().activeConversationId) await this.host.createConversation();\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) throw new Error('Codex did not create a conversation');\n await this.setGoalForThread(threadId, objective, tokenBudget);\n return this.host.getSnapshot();\n }\n\n async setGoalForThread(threadId: string, objective: string, tokenBudget?: number | null): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const normalizedObjective = objective.trim();\n if (!normalizedObjective) throw new Error('Goal objective cannot be empty');\n const response = await this.client.request('thread/goal/set', {\n threadId, objective: normalizedObjective, status: 'active',\n ...(tokenBudget === undefined ? {} : { tokenBudget }),\n });\n if (response.goal.threadId !== threadId) {\n throw new Error(`Codex thread/goal/set returned a goal for '${response.goal.threadId}' instead of '${threadId}'`);\n }\n const changed = !sameValue(runtime.goal, response.goal);\n this.host.patchRuntime(threadId, { goal: { ...response.goal } });\n if (changed) {\n this.host.emitEvent('action', {\n type: 'conversation.goalChanged', conversationId: threadId,\n payload: { goal: structuredClone(response.goal) },\n });\n }\n }\n\n async clearGoal(): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) return this.host.getSnapshot();\n await this.clearGoalForThread(threadId);\n return this.host.getSnapshot();\n }\n\n async clearGoalForThread(threadId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n await this.client.request('thread/goal/clear', { threadId });\n const changed = runtime.goal !== null;\n this.host.patchRuntime(threadId, { goal: null });\n if (changed) {\n this.host.emitEvent('action', {\n type: 'conversation.goalChanged', conversationId: threadId, payload: { goal: null },\n });\n }\n }\n}\n","import type { CodexAppServerClient } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceSnapshot,\n SendCodexMessageOptions,\n StartCodexReviewOptions,\n SurfaceMessage,\n} from '@codex-app-sdk/core/surface';\nimport { codexThreadToSurfaceMessages, codexTurnToSurfaceMessages } from './codex-conversation-history';\nimport {\n messageTurnIdOrNull,\n surfaceMessageAttachments,\n surfaceMessageText,\n threadToSummary,\n upsertConversation,\n} from './codex-surface-data';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport { surfaceTurn, timestampToIso, upsertSurfaceTurn } from './codex-surface-events';\nimport { errorMessage, normalizeReviewTarget } from './codex-surface-prompts';\nimport { ensureAssistantTurnMessage } from './codex-surface-message-state';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\n\nconst UNCOMMITTED_REVIEW_PROMPT = 'Review the current code changes (staged, unstaged, and untracked files) and provide prioritized findings.';\n\nexport type CodexSurfaceTurnActionsHost = {\n createConversation(): Promise<void>;\n emitConversationActivity(threadId: string, origin: 'action'): void;\n emitEvent(origin: 'action', input: SurfaceEventInput): void;\n emitHistoryReplaced(threadId: string, reason: 'rollback', origin: 'action'): void;\n emitSummaryUpserted(summary: CodexConversationSummary, reason: 'updated', origin: 'action'): void;\n ensureThreadReady(threadId: string): Promise<ThreadRuntimeState>;\n getSnapshot(): CodexSurfaceSnapshot;\n getState(): CodexSurfaceSnapshot;\n hydrateCompleteHistory(threadId: string, options?: { initialPageLoaded?: boolean; cursor?: string | null }): Promise<void>;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchConversationStatus(threadId: string, status: CodexConversationSummary['status'], origin: 'action'): void;\n patchConversationTurnCount(threadId: string, turnCount: number, origin: 'action'): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n sendMessageToThread(threadId: string, prompt: string, options?: SendCodexMessageOptions): Promise<void>;\n};\n\nexport class CodexSurfaceTurnActionsController {\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly host: CodexSurfaceTurnActionsHost,\n ) {}\n\n async compact(): Promise<CodexSurfaceSnapshot> {\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) return this.host.getSnapshot();\n await this.compactForThread(threadId);\n return this.host.getSnapshot();\n }\n\n async compactForThread(threadId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n if (runtime.busy) throw new Error('Cannot compact while Codex is responding');\n await this.client.request('thread/compact/start', { threadId });\n }\n\n async startReview(options: StartCodexReviewOptions = {}): Promise<CodexSurfaceSnapshot> {\n if (!this.host.getState().activeConversationId) await this.host.createConversation();\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) throw new Error('Codex did not create a conversation');\n await this.startReviewForThread(threadId, options);\n return this.host.getSnapshot();\n }\n\n async startReviewForThread(\n threadId: string,\n options: StartCodexReviewOptions = {},\n ): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n if (runtime.busy) throw new Error('The conversation is already responding');\n this.host.patchRuntime(threadId, { busy: true, turnStartPending: true, error: null });\n this.host.patchConversationStatus(threadId, 'active', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n try {\n const target = normalizeReviewTarget(options.target ?? { type: 'uncommittedChanges' });\n const response = await this.client.request('review/start', {\n threadId,\n target,\n delivery: 'inline',\n });\n if (response.reviewThreadId !== threadId) {\n throw new Error(\n `Codex review/start returned unexpected review thread '${response.reviewThreadId}' for inline review on thread '${threadId}'`,\n );\n }\n const wasKnownTurn = runtime.turnIds.includes(response.turn.id);\n runtime.activeTurnId = response.turn.status === 'inProgress' ? response.turn.id : null;\n if (!runtime.turnIds.includes(response.turn.id)) runtime.turnIds.push(response.turn.id);\n this.host.patchConversationTurnCount(threadId, runtime.turnIds.length, 'action');\n const responseMessages = codexTurnToSurfaceMessages(threadId, response.turn)\n .filter((message) => !runtime.messages.some((candidate) => candidate.id === message.id))\n .map((message) => message.role === 'user'\n ? {\n ...message,\n parts: target.type === 'uncommittedChanges'\n ? message.parts.map((part) => part.type === 'text' && part.text === 'current changes'\n ? { ...part, text: UNCOMMITTED_REVIEW_PROMPT }\n : part)\n : message.parts,\n metadata: { ...message.metadata, reviewPrompt: true },\n }\n : message);\n const messages = insertTurnMessages(runtime.messages, response.turn.id, responseMessages);\n this.host.patchRuntime(threadId, {\n busy: runtime.activeTurnId !== null,\n turnStartPending: false,\n turns: upsertSurfaceTurn(runtime.turns, surfaceTurn(response.turn)),\n messages: runtime.activeTurnId\n ? ensureAssistantTurnMessage(messages, threadId, response.turn.id)\n : messages,\n });\n for (const message of responseMessages) {\n this.host.emitEvent('action', {\n type: 'message.appended', conversationId: threadId, turnId: response.turn.id,\n payload: { message: structuredClone(message) },\n });\n }\n this.host.patchConversationStatus(threadId, runtime.activeTurnId ? 'active' : 'idle', 'action');\n if (runtime.activeTurnId && !wasKnownTurn) {\n this.host.emitEvent('action', {\n type: 'turn.started', conversationId: threadId, turnId: response.turn.id,\n payload: { startedAt: timestampToIso(response.turn.startedAt) },\n });\n }\n this.host.emitConversationActivity(threadId, 'action');\n } catch (error) {\n this.host.patchRuntime(threadId, { busy: false, turnStartPending: false, error: errorMessage(error) });\n this.host.patchConversationStatus(threadId, 'error', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n throw error;\n }\n }\n\n async interrupt(): Promise<CodexSurfaceSnapshot> {\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) return this.host.getSnapshot();\n await this.interruptThread(threadId);\n return this.host.getSnapshot();\n }\n\n async interruptThread(threadId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n if (!runtime.activeTurnId) return;\n await this.client.request('turn/interrupt', { threadId, turnId: runtime.activeTurnId });\n }\n\n async deleteTurn(turnId: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.deleteTurnForThread(threadId, turnId);\n return this.host.getSnapshot();\n }\n\n async deleteTurnForThread(threadId: string, turnId: string): Promise<void> {\n await this.rollbackToTurn(threadId, turnId);\n }\n\n async editTurn(turnId: string, content: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.editTurnForThread(threadId, turnId, content);\n return this.host.getSnapshot();\n }\n\n async editTurnForThread(threadId: string, turnId: string, content: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const message = runtime.messages.find((candidate) => (\n candidate.role === 'user'\n && candidate.kind !== 'steer'\n && messageTurnIdOrNull(candidate) === turnId\n ));\n if (!message) throw new Error(`Could not find the user prompt for Codex turn '${turnId}'`);\n const text = content.trim();\n if (!text) throw new Error('Cannot replace a turn prompt with empty content');\n const attachments = surfaceMessageAttachments(message);\n await this.rollbackToTurn(threadId, turnId);\n await this.host.sendMessageToThread(threadId, text, attachments.length > 0 ? { attachments } : {});\n }\n\n async retryTurn(turnId: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.retryTurnForThread(threadId, turnId);\n return this.host.getSnapshot();\n }\n\n async retryTurnForThread(threadId: string, turnId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const prompt = runtime.messages.find((candidate) => (\n candidate.role === 'user'\n && candidate.kind !== 'steer'\n && messageTurnIdOrNull(candidate) === turnId\n ));\n if (!prompt) throw new Error('Could not find the user prompt for this turn');\n const text = surfaceMessageText(prompt);\n if (!text) throw new Error('Could not find the user prompt for this turn');\n const attachments = surfaceMessageAttachments(prompt);\n await this.rollbackToTurn(threadId, turnId);\n await this.host.sendMessageToThread(threadId, text, attachments.length > 0 ? { attachments } : {});\n }\n\n async rollbackToTurn(threadId: string, turnId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n if (runtime.busy) throw new Error('Cannot roll back while Codex is responding');\n let targetIndex = runtime.turnIds.indexOf(turnId);\n if (targetIndex < 0) {\n await this.host.hydrateCompleteHistory(threadId);\n targetIndex = runtime.turnIds.indexOf(turnId);\n }\n if (targetIndex < 0) throw new Error(`Cannot roll back to unknown Codex turn '${turnId}'`);\n if (runtime.historyMode === 'paginated') {\n await this.revertPaginatedThread(threadId, turnId, targetIndex, runtime);\n return;\n }\n const response = await this.client.request('thread/rollback', {\n threadId, numTurns: runtime.turnIds.length - targetIndex,\n });\n if (response.thread.id !== threadId) {\n throw new Error(`Codex thread/rollback returned '${response.thread.id}' for requested thread '${threadId}'`);\n }\n runtime.turnIds = response.thread.turns.map((turn) => turn.id);\n runtime.turns = response.thread.turns.map((turn) => surfaceTurn(turn));\n runtime.activeTurnId = null;\n const summary = threadToSummary(response.thread);\n this.host.patch({\n conversations: upsertConversation(this.host.getState().conversations, summary),\n });\n this.host.patchRuntime(threadId, {\n messages: codexThreadToSurfaceMessages(response.thread),\n answeredClientRequestIds: [], busy: false, turnStartPending: false, error: null,\n contextUsage: null, turnGitDiff: null,\n });\n this.host.emitSummaryUpserted(summary, 'updated', 'action');\n this.host.emitHistoryReplaced(threadId, 'rollback', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n }\n\n private async revertPaginatedThread(\n threadId: string,\n turnId: string,\n targetIndex: number,\n runtime: ThreadRuntimeState,\n ): Promise<void> {\n const response = await this.client.request('thread/revert', {\n threadId,\n beforeTurnId: turnId,\n });\n if (response.thread.id !== threadId) {\n throw new Error(`Codex thread/revert returned '${response.thread.id}' for requested thread '${threadId}'`);\n }\n const retainedTurnIds = runtime.turnIds.slice(0, targetIndex);\n const retainedTurnIdSet = new Set(retainedTurnIds);\n const messages = runtime.messages.filter((message) => {\n const messageTurnId = messageTurnIdOrNull(message);\n return messageTurnId === null || retainedTurnIdSet.has(messageTurnId);\n });\n runtime.turnIds = retainedTurnIds;\n runtime.turns = runtime.turns.filter((turn) => retainedTurnIdSet.has(turn.id));\n runtime.activeTurnId = null;\n const summary = { ...threadToSummary(response.thread), turnCount: retainedTurnIds.length };\n this.host.patch({\n conversations: upsertConversation(this.host.getState().conversations, summary),\n });\n this.host.patchRuntime(threadId, {\n messages,\n answeredClientRequestIds: [],\n busy: false,\n turnStartPending: false,\n error: null,\n contextUsage: null,\n turnGitDiff: null,\n historyCursor: response.turnsBackwardsCursor,\n historyHasOlder: response.turnsBackwardsCursor !== null,\n fullHistoryHydrated: response.turnsBackwardsCursor === null,\n });\n this.host.emitSummaryUpserted(summary, 'updated', 'action');\n this.host.emitHistoryReplaced(threadId, 'rollback', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n }\n\n private requiredActiveConversation(): string {\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) throw new Error('There is no active conversation');\n return threadId;\n }\n}\n\nfunction insertTurnMessages(\n current: readonly SurfaceMessage[],\n turnId: string,\n incoming: readonly SurfaceMessage[],\n): SurfaceMessage[] {\n const firstTurnMessageIndex = current.findIndex((message) => message.turnId === turnId);\n if (firstTurnMessageIndex < 0) return [...current, ...incoming];\n return [\n ...current.slice(0, firstTurnMessageIndex),\n ...incoming,\n ...current.slice(firstTurnMessageIndex),\n ];\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n SendCodexMessageOptions,\n StartCodexReviewOptions,\n SurfaceMessage,\n UpdateCodexConversationSettings,\n} from '@codex-app-sdk/core/surface';\nimport {\n attachmentInput,\n surfaceAttachmentPart,\n validateAttachments,\n validatedSendOptions,\n} from './codex-surface-data';\nimport type { SurfaceEventInput } from './codex-surface-events';\nimport {\n createMessageId,\n createQueuedPromptId,\n surfaceTurn,\n timestampToIso,\n upsertSurfaceTurn,\n} from './codex-surface-events';\nimport {\n ensureAssistantTurnMessage,\n pruneEmptyAssistantPlaceholders,\n} from './codex-surface-message-state';\nimport {\n errorMessage,\n mergeSkillInputs,\n parseGoalSlashCommand,\n parsePlanSlashCommand,\n parseReviewSlashCommand,\n promptSkillInputsFromText,\n validateSkillInputs,\n} from './codex-surface-prompts';\nimport { turnSettings } from './codex-surface-settings';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\n\nexport type CodexSurfaceMessagesHost = {\n clearGoalForThread(threadId: string): Promise<void>;\n compactForThread(threadId: string): Promise<void>;\n createConversation(): Promise<void>;\n emitConversationActivity(threadId: string, origin: 'action'): void;\n emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void;\n ensureConnected(): Promise<void>;\n ensureThreadReady(threadId: string): Promise<ThreadRuntimeState>;\n getSnapshot(): CodexSurfaceSnapshot;\n getState(): CodexSurfaceSnapshot;\n patchConversationStatus(\n threadId: string,\n status: CodexConversationSummary['status'],\n origin: 'action',\n ): void;\n patchConversationTurnCount(threadId: string, turnCount: number, origin: 'action'): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n setGoal(objective: string): Promise<CodexSurfaceSnapshot>;\n setGoalForThread(threadId: string, objective: string): Promise<void>;\n snapshotForRuntime(runtime: ThreadRuntimeState): CodexSurfaceSnapshot;\n startReview(options: StartCodexReviewOptions): Promise<CodexSurfaceSnapshot>;\n startReviewForThread(threadId: string, options: StartCodexReviewOptions): Promise<void>;\n updateSettings(settings: UpdateCodexConversationSettings): Promise<CodexSurfaceSnapshot>;\n updateSettingsForThread(threadId: string, settings: UpdateCodexConversationSettings): Promise<void>;\n};\n\nexport class CodexSurfaceMessagesController {\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly host: CodexSurfaceMessagesHost,\n ) {}\n\n async send(prompt: string, options: SendCodexMessageOptions = {}): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n let text = prompt.trim();\n if (!text) throw new Error('Cannot send an empty message');\n if (!this.host.getState().activeConversationId) {\n const planCommand = parsePlanSlashCommand(text);\n if (planCommand) {\n await this.host.createConversation();\n await this.host.updateSettings({ planMode: true });\n if (!planCommand.prompt) return this.host.getSnapshot();\n text = planCommand.prompt;\n options = { ...options, planMode: true };\n }\n const goalCommand = parseGoalSlashCommand(text);\n if (goalCommand) {\n if (goalCommand.action === 'clear' || goalCommand.action === 'show' || goalCommand.action === 'edit') {\n return this.host.getSnapshot();\n }\n if (goalCommand.action === 'set') return this.host.setGoal(goalCommand.objective);\n throw new Error('Pausing and resuming goals is not supported by Codex app-server');\n }\n if (text === '/compact') return this.host.getSnapshot();\n const reviewCommand = parseReviewSlashCommand(text);\n if (reviewCommand) {\n await this.host.createConversation();\n return this.host.startReview({ target: reviewCommand });\n }\n if (!this.host.getState().activeConversationId) await this.host.createConversation();\n }\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) throw new Error('Codex did not create a conversation');\n await this.sendToThread(threadId, text, options);\n return this.host.getSnapshot();\n }\n\n async sendToThread(\n threadId: string,\n prompt: string,\n options: SendCodexMessageOptions = {},\n ): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n let text = prompt.trim();\n if (!text) throw new Error('Cannot send an empty message');\n const planCommand = parsePlanSlashCommand(text);\n if (planCommand) {\n await this.host.updateSettingsForThread(threadId, { planMode: true });\n if (!planCommand.prompt) return;\n text = planCommand.prompt;\n options = { ...options, planMode: true };\n }\n const goalCommand = parseGoalSlashCommand(text);\n if (goalCommand) {\n if (goalCommand.action === 'clear') return this.host.clearGoalForThread(threadId);\n if (goalCommand.action === 'set') return this.host.setGoalForThread(threadId, goalCommand.objective);\n if (goalCommand.action === 'unsupported') {\n throw new Error('Pausing and resuming goals is not supported by Codex app-server');\n }\n return;\n }\n if (text === '/compact') return this.host.compactForThread(threadId);\n const reviewCommand = parseReviewSlashCommand(text);\n if (reviewCommand) return this.host.startReviewForThread(threadId, { target: reviewCommand });\n options = {\n ...validatedSendOptions(this.host.snapshotForRuntime(runtime), options),\n ...(options.skills ? { skills: validateSkillInputs(options.skills, runtime.skills) } : {}),\n };\n await this.sendPromptToThread(threadId, text, options);\n }\n\n async continueInterruptedTurn(): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) throw new Error('There is no active conversation');\n await this.continueInterruptedTurnForThread(threadId);\n return this.host.getSnapshot();\n }\n\n async continueInterruptedTurnForThread(threadId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n if (runtime.busy || runtime.turnStartPending || runtime.activeTurnId) {\n throw new Error('Cannot continue while a turn is active');\n }\n const latestTurnId = runtime.turnIds.at(-1);\n const latestTurn = latestTurnId\n ? runtime.turns.find((turn) => turn.id === latestTurnId)\n : undefined;\n if (latestTurn?.status !== 'interrupted') {\n throw new Error('The latest turn is not interrupted');\n }\n\n this.host.patchRuntime(threadId, { busy: true, turnStartPending: true, error: null });\n this.host.patchConversationStatus(threadId, 'active', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n\n try {\n const response = await this.client.request('turn/start', {\n threadId,\n input: [],\n ...turnSettings(this.host.snapshotForRuntime(runtime), {}),\n });\n const wasKnownTurn = runtime.turnIds.includes(response.turn.id);\n runtime.activeTurnId = response.turn.status === 'inProgress' ? response.turn.id : null;\n if (!wasKnownTurn) runtime.turnIds.push(response.turn.id);\n this.host.patchConversationTurnCount(threadId, runtime.turnIds.length, 'action');\n const busy = response.turn.status === 'inProgress';\n this.host.patchRuntime(threadId, {\n busy,\n turnStartPending: false,\n turns: upsertSurfaceTurn(runtime.turns, surfaceTurn(response.turn)),\n messages: busy\n ? ensureAssistantTurnMessage(runtime.messages, threadId, response.turn.id)\n : runtime.messages,\n });\n this.host.patchConversationStatus(threadId, busy ? 'active' : 'idle', 'action');\n if (busy && !wasKnownTurn) {\n this.host.emitEvent('action', {\n type: 'turn.started', conversationId: threadId, turnId: response.turn.id,\n payload: { startedAt: timestampToIso(response.turn.startedAt) },\n });\n }\n this.host.emitConversationActivity(threadId, 'action');\n } catch (error) {\n this.host.patchRuntime(threadId, {\n busy: false, turnStartPending: false, error: errorMessage(error),\n });\n this.host.patchConversationStatus(threadId, 'error', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n throw error;\n }\n }\n\n async sendPromptToThread(\n threadId: string,\n text: string,\n options: SendCodexMessageOptions = {},\n displayText?: string,\n ): Promise<void> {\n const runtime = this.host.requireRuntime(threadId);\n const normalizedOptions = validatedSendOptions(this.host.snapshotForRuntime(runtime), options);\n const visibleText = displayText?.trim() || text;\n const skillInputs = mergeSkillInputs(\n promptSkillInputsFromText(text, runtime.skills),\n validateSkillInputs(normalizedOptions.skills ?? [], runtime.skills),\n );\n const attachments = validateAttachments(normalizedOptions.attachments ?? []);\n if (runtime.busy) {\n this.host.patchRuntime(threadId, {\n queuedPrompts: [\n ...runtime.queuedPrompts,\n {\n id: createQueuedPromptId(),\n text: visibleText,\n ...(Object.keys(normalizedOptions).length > 0 ? { options: normalizedOptions } : {}),\n },\n ],\n });\n this.emitQueuedPrompts(threadId);\n return;\n }\n\n const messageId = createMessageId();\n const optimisticMessage: SurfaceMessage = {\n id: messageId,\n role: 'user',\n status: 'complete',\n parts: [{ type: 'text', text: visibleText }, ...attachments.map(surfaceAttachmentPart)],\n createdAt: new Date().toISOString(),\n metadata: {\n conversationId: threadId,\n ...(attachments.length > 0 ? { attachments } : {}),\n },\n };\n this.host.patchRuntime(threadId, {\n busy: true, turnStartPending: true, error: null,\n messages: [...runtime.messages, optimisticMessage],\n });\n this.host.patchConversationStatus(threadId, 'active', 'action');\n this.host.emitEvent('action', {\n type: 'message.appended', conversationId: threadId,\n payload: { message: structuredClone(optimisticMessage) },\n });\n this.host.emitConversationActivity(threadId, 'action');\n\n try {\n const response = await this.client.request('turn/start', {\n threadId,\n clientUserMessageId: messageId,\n input: [\n { type: 'text', text, text_elements: [] },\n ...attachments.map(attachmentInput),\n ...skillInputs.map((skill) => ({ type: 'skill' as const, name: skill.name, path: skill.path })),\n ],\n ...turnSettings(this.host.snapshotForRuntime(runtime), normalizedOptions),\n ...(normalizedOptions.outputSchema === undefined\n ? {}\n : { outputSchema: normalizedOptions.outputSchema as v2.TurnStartParams['outputSchema'] }),\n });\n const wasKnownTurn = runtime.turnIds.includes(response.turn.id);\n runtime.activeTurnId = response.turn.status === 'inProgress' ? response.turn.id : null;\n if (!runtime.turnIds.includes(response.turn.id)) runtime.turnIds.push(response.turn.id);\n this.host.patchConversationTurnCount(threadId, runtime.turnIds.length, 'action');\n const busy = response.turn.status === 'inProgress';\n const messages = runtime.messages.map((message) => message.id === messageId\n ? { ...message, turnId: response.turn.id, metadata: { ...message.metadata, turnId: response.turn.id } }\n : message);\n this.host.patchRuntime(threadId, {\n busy,\n turnStartPending: false,\n turns: upsertSurfaceTurn(runtime.turns, surfaceTurn(response.turn)),\n messages: busy ? ensureAssistantTurnMessage(messages, threadId, response.turn.id) : messages,\n });\n this.host.patchConversationStatus(threadId, busy ? 'active' : 'idle', 'action');\n const startedMessage = messages.find((message) => message.id === messageId);\n if (startedMessage) {\n this.host.emitEvent('action', {\n type: 'message.updated', conversationId: threadId, turnId: response.turn.id,\n payload: { message: structuredClone(startedMessage) },\n });\n }\n if (busy && !wasKnownTurn) {\n this.host.emitEvent('action', {\n type: 'turn.started', conversationId: threadId, turnId: response.turn.id,\n payload: { startedAt: timestampToIso(response.turn.startedAt) },\n });\n }\n this.host.emitConversationActivity(threadId, 'action');\n } catch (error) {\n this.host.patchRuntime(threadId, {\n busy: false, turnStartPending: false, error: errorMessage(error),\n });\n this.host.patchConversationStatus(threadId, 'error', 'action');\n this.host.emitConversationActivity(threadId, 'action');\n throw error;\n }\n }\n\n async steer(\n prompt: string,\n options: SendCodexMessageOptions = {},\n ): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.steerForThread(threadId, prompt, options);\n return this.host.getSnapshot();\n }\n\n async steerForThread(\n threadId: string,\n prompt: string,\n options: SendCodexMessageOptions = {},\n displayText?: string,\n ): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const text = prompt.trim();\n const visibleText = displayText?.trim() || text;\n if (!text) throw new Error('Cannot steer with an empty message');\n if (!runtime.activeTurnId) throw new Error('There is no active turn to steer');\n const attachments = validateAttachments(options.attachments ?? []);\n const messageId = createMessageId();\n const optimisticSteer: SurfaceMessage = {\n id: messageId, kind: 'steer', role: 'user', status: 'complete',\n parts: [{ type: 'text', text: visibleText }, ...attachments.map(surfaceAttachmentPart)],\n createdAt: new Date().toISOString(),\n turnId: runtime.activeTurnId,\n metadata: {\n conversationId: threadId,\n turnId: runtime.activeTurnId,\n ...(attachments.length > 0 ? { attachments } : {}),\n },\n };\n this.host.patchRuntime(threadId, {\n error: null,\n messages: ensureAssistantTurnMessage(\n [...runtime.messages, optimisticSteer], threadId, runtime.activeTurnId, { forceSegment: true },\n ),\n });\n this.host.emitEvent('action', {\n type: 'message.appended', conversationId: threadId, turnId: runtime.activeTurnId,\n payload: { message: structuredClone(optimisticSteer) },\n });\n try {\n const response = await this.client.request('turn/steer', {\n threadId,\n expectedTurnId: runtime.activeTurnId,\n clientUserMessageId: messageId,\n input: [\n { type: 'text', text, text_elements: [] },\n ...attachments.map(attachmentInput),\n ],\n });\n const wasKnownTurn = runtime.turnIds.includes(response.turnId);\n runtime.activeTurnId = response.turnId;\n if (!runtime.turnIds.includes(response.turnId)) runtime.turnIds.push(response.turnId);\n runtime.turns = upsertSurfaceTurn(runtime.turns, {\n id: response.turnId,\n status: 'inProgress',\n error: null,\n willRetry: false,\n startedAt: null,\n completedAt: null,\n durationMs: null,\n });\n this.host.patchConversationTurnCount(threadId, runtime.turnIds.length, 'action');\n const steeredMessages = runtime.messages.map((message) => message.id === messageId\n ? { ...message, turnId: response.turnId, metadata: { ...message.metadata, turnId: response.turnId } }\n : message);\n this.host.patchRuntime(threadId, {\n messages: pruneEmptyAssistantPlaceholders(\n ensureAssistantTurnMessage(steeredMessages, threadId, response.turnId),\n threadId,\n ),\n });\n if (!wasKnownTurn) {\n this.host.emitEvent('action', {\n type: 'turn.started', conversationId: threadId, turnId: response.turnId,\n payload: { startedAt: new Date().toISOString() },\n });\n }\n } catch (error) {\n this.host.patchRuntime(threadId, { error: errorMessage(error) });\n throw error;\n }\n }\n\n async answerAsyncQuestion(threadId: string, prompt: string, displayText: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n if (runtime.activeTurnId) {\n await this.steerForThread(threadId, prompt, {}, displayText);\n return;\n }\n await this.sendPromptToThread(threadId, prompt, {}, displayText);\n }\n\n async deleteQueuedPrompt(promptId: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.deleteQueuedPromptForThread(threadId, promptId);\n return this.host.getSnapshot();\n }\n\n async deleteQueuedPromptForThread(threadId: string, promptId: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const queuedPrompts = runtime.queuedPrompts.filter((prompt) => prompt.id !== promptId);\n if (queuedPrompts.length === runtime.queuedPrompts.length) {\n throw new Error(`Unknown queued prompt '${promptId}'`);\n }\n this.host.patchRuntime(runtime.threadId, { queuedPrompts });\n this.emitQueuedPrompts(runtime.threadId);\n }\n\n async updateQueuedPrompt(promptId: string, prompt: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.updateQueuedPromptForThread(threadId, promptId, prompt);\n return this.host.getSnapshot();\n }\n\n async updateQueuedPromptForThread(threadId: string, promptId: string, prompt: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const text = prompt.trim();\n if (!text) throw new Error('Cannot update a queued prompt with empty content');\n let found = false;\n const queuedPrompts = runtime.queuedPrompts.map((candidate) => {\n if (candidate.id !== promptId) return candidate;\n found = true;\n return { ...candidate, text };\n });\n if (!found) throw new Error(`Unknown queued prompt '${promptId}'`);\n this.host.patchRuntime(runtime.threadId, { queuedPrompts });\n this.emitQueuedPrompts(runtime.threadId);\n }\n\n async steerQueuedPrompt(promptId: string, prompt?: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.requiredActiveConversation();\n await this.steerQueuedPromptForThread(threadId, promptId, prompt);\n return this.host.getSnapshot();\n }\n\n async steerQueuedPromptForThread(threadId: string, promptId: string, replacement?: string): Promise<void> {\n const runtime = await this.host.ensureThreadReady(threadId);\n const prompt = runtime.queuedPrompts.find((candidate) => candidate.id === promptId);\n if (!prompt) throw new Error(`Unknown queued prompt '${promptId}'`);\n this.host.patchRuntime(runtime.threadId, {\n queuedPrompts: runtime.queuedPrompts.filter((candidate) => candidate.id !== promptId),\n });\n this.emitQueuedPrompts(runtime.threadId);\n const text = replacement ?? prompt.text;\n if (runtime.busy) await this.steerForThread(threadId, text, prompt.options);\n else await this.sendToThread(threadId, text, prompt.options);\n }\n\n async sendNextQueuedPrompt(threadId: string): Promise<void> {\n const runtime = this.host.requireRuntime(threadId);\n if (runtime.busy || runtime.queuedPrompts.length === 0) return;\n const next = runtime.queuedPrompts[0]!;\n const queuedPrompts = runtime.queuedPrompts.slice(1);\n this.host.patchRuntime(threadId, { queuedPrompts });\n this.emitQueuedPrompts(threadId, 'notification');\n try {\n await this.sendPromptToThread(threadId, next.text, next.options);\n } catch (error) {\n this.host.patchRuntime(threadId, {\n error: errorMessage(error), queuedPrompts: [next, ...runtime.queuedPrompts],\n });\n this.emitQueuedPrompts(threadId, 'notification');\n }\n }\n\n private emitQueuedPrompts(\n threadId: string,\n origin: CodexSurfaceEventOrigin = 'action',\n ): void {\n const queuedPrompts = this.host.requireRuntime(threadId).queuedPrompts;\n this.host.emitEvent(origin, {\n type: 'conversation.queueChanged',\n conversationId: threadId,\n payload: { queuedPrompts: structuredClone(queuedPrompts) },\n });\n }\n\n private requiredActiveConversation(): string {\n const threadId = this.host.getState().activeConversationId;\n if (!threadId) throw new Error('There is no active conversation');\n return threadId;\n }\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexConversationHistory,\n CodexConversationSummary,\n CodexSurfaceEvent,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n CreateCodexConversationOptions,\n} from '@codex-app-sdk/core/surface';\nimport {\n codexThreadToSurfaceMessages,\n preserveHistoricalAttachmentPreviews,\n} from './codex-conversation-history';\nimport type {\n CodexConversationHostOptions,\n CodexConversationLoadOptions,\n CodexSurfaceOptions,\n} from './codex-surface-contracts';\nimport { CodexSurfaceCatalogController } from './codex-surface-catalog-controller';\nimport { CodexSurfaceConversationSettingsController } from './codex-surface-conversation-settings-controller';\nimport { CodexSurfaceConversationsController } from './codex-surface-conversations-controller';\nimport {\n surfaceThreadStatus,\n threadToSummary,\n upsertConversation,\n} from './codex-surface-data';\nimport { errorMessage } from './codex-surface-prompts';\nimport { CodexSurfaceExtensionsController } from './codex-surface-extensions-controller';\nimport { activeTurnId, ensureAssistantTurnMessage } from './codex-surface-message-state';\nimport { surfaceTurn } from './codex-surface-events';\nimport { normalizeMcpServers } from './codex-surface-mcp';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\nimport {\n collaborationMode,\n defaultReasoningEffort,\n validateServiceTier,\n requireCatalogModel,\n selectedModel,\n sessionSelection,\n validateReasoningEffort,\n} from './codex-surface-settings';\n\nconst CONVERSATION_HISTORY_PAGE_SIZE = 5;\n\ntype HistoryReason = Extract<\n CodexSurfaceEvent,\n { type: 'conversation.historyReplaced' }\n>['payload']['reason'];\n\nexport interface CodexSurfaceLifecycleHost {\n activateRuntime(runtime: ThreadRuntimeState): void;\n createRuntime(threadId: string, patch?: ThreadRuntimePatch): ThreadRuntimeState;\n emitConversationActivity(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitConversationPermissions(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitConversationSettings(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitConversationSkills(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitHistoryReplaced(threadId: string, reason: HistoryReason, origin: CodexSurfaceEventOrigin): void;\n emitSelected(conversationId: string): void;\n emitSummaryUpserted(\n summary: CodexConversationSummary,\n reason: 'created' | 'resumed' | 'updated',\n origin: CodexSurfaceEventOrigin,\n ): void;\n ensureConnected(): Promise<void>;\n getSnapshot(): CodexSurfaceSnapshot;\n getState(): CodexSurfaceSnapshot;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n runtime(threadId: string): ThreadRuntimeState | undefined;\n runtimeProjection(runtime: ThreadRuntimeState): Partial<CodexSurfaceSnapshot>;\n snapshotForRuntime(runtime: ThreadRuntimeState): CodexSurfaceSnapshot;\n}\n\nexport class CodexSurfaceLifecycleController {\n private readonly hydrationPromises = new Map<string, Promise<void>>();\n private readonly hostOptionsByThread = new Map<string, CodexConversationLoadOptions>();\n\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly options: Pick<CodexSurfaceOptions, 'conversationDefaults' | 'cwd' | 'loadingStrategy'>,\n private readonly catalog: CodexSurfaceCatalogController,\n private readonly extensions: CodexSurfaceExtensionsController,\n private readonly settings: CodexSurfaceConversationSettingsController,\n private readonly conversations: CodexSurfaceConversationsController,\n private readonly host: CodexSurfaceLifecycleHost,\n ) {}\n\n hostOptions(threadId: string): CodexConversationLoadOptions | undefined {\n return this.hostOptionsByThread.get(threadId);\n }\n\n rememberHostOptions(threadId: string, options: CodexConversationLoadOptions): void {\n this.hostOptionsByThread.set(threadId, options);\n }\n\n forget(threadId: string): void {\n this.hostOptionsByThread.delete(threadId);\n this.hydrationPromises.delete(threadId);\n }\n\n clear(): void {\n this.hostOptionsByThread.clear();\n this.hydrationPromises.clear();\n }\n\n resetHydrations(): void {\n this.hydrationPromises.clear();\n }\n\n async create(\n options: CreateCodexConversationOptions = {},\n hostOptions: CodexConversationHostOptions = {},\n ): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n options = { ...this.options.conversationDefaults, ...options };\n const cwd = options.cwd ?? this.options.cwd;\n const catalogs = await this.catalog.loadConversationCatalogs(cwd);\n if (options.approvalPreset && !catalogs.approvalPresets.includes(options.approvalPreset)) {\n throw new Error(`Approval preset '${options.approvalPreset}' is not available`);\n }\n const state = this.host.getState();\n const inheritedApprovalPreset = options.approvalPreset\n ?? (options.approvalMode === undefined\n && options.permissionMode === undefined\n && state.approvalPreset\n && catalogs.approvalPresets.includes(state.approvalPreset)\n ? state.approvalPreset\n : undefined);\n const settings = this.settings.threadStartSettings({\n ...options,\n ...(inheritedApprovalPreset ? { approvalPreset: inheritedApprovalPreset } : {}),\n }, catalogs.approvalPresets);\n const currentModel = selectedModel(state.models, state.selectedModelId);\n const requestedModel = options.model ? requireCatalogModel(state.models, options.model) : currentModel;\n const model = requestedModel?.model;\n const requestedReasoningEffort = options.reasoningEffort\n ?? (requestedModel?.id === currentModel?.id\n ? state.selectedReasoningEffort\n : requestedModel ? defaultReasoningEffort(requestedModel) : null)\n ?? undefined;\n const requestedServiceTier = options.serviceTier !== undefined\n ? options.serviceTier\n : requestedModel?.id === currentModel?.id\n ? (state.selectedServiceTier ?? null)\n : requestedModel?.defaultServiceTier ?? null;\n validateReasoningEffort(requestedModel, requestedReasoningEffort);\n validateServiceTier(requestedModel, requestedServiceTier);\n const mcpServers = hostOptions.mcpServers === undefined\n ? this.extensions.defaultMcpServers\n : normalizeMcpServers(hostOptions.mcpServers);\n const extension = await this.extensions.conversationExtension({\n operation: 'start',\n conversationId: null,\n cwd,\n createOptions: options,\n extensionContext: hostOptions.extensionContext,\n }, options, mcpServers);\n const response = await this.client.request('thread/start', {\n ...(cwd ? { cwd } : {}),\n ...(model ? { model } : {}),\n ...(extension.baseInstructions === undefined ? {} : { baseInstructions: extension.baseInstructions }),\n ...(extension.developerInstructions === undefined\n ? {}\n : { developerInstructions: extension.developerInstructions }),\n ...(extension.config === undefined ? {} : { config: extension.config as v2.ThreadStartParams['config'] }),\n ...(this.extensions.hasDynamicTools() ? { dynamicTools: this.extensions.dynamicToolSpecs() } : {}),\n ...settings,\n ...(requestedServiceTier === undefined ? {} : { serviceTier: requestedServiceTier }),\n ...(options.threadSource === undefined ? {} : { threadSource: options.threadSource }),\n serviceName: 'codex_app_sdk',\n });\n const selection = sessionSelection(response, state.models, state);\n if (requestedReasoningEffort) {\n await this.client.request('thread/settings/update', {\n threadId: response.thread.id,\n effort: requestedReasoningEffort,\n ...(requestedModel ? {\n collaborationMode: collaborationMode(state.planMode, requestedModel.model, requestedReasoningEffort),\n } : {}),\n });\n selection.selectedReasoningEffort = requestedReasoningEffort;\n }\n if (requestedServiceTier !== undefined) selection.selectedServiceTier = requestedServiceTier;\n if (requestedModel) selection.selectedModelId = requestedModel.id;\n if (inheritedApprovalPreset) selection.approvalPreset = inheritedApprovalPreset;\n const runtime = this.host.createRuntime(response.thread.id, {\n hydrated: true,\n historyMode: response.thread.historyMode ?? 'legacy',\n cwd: response.cwd ?? response.thread.cwd,\n activeTurnId: null,\n turnIds: [],\n messages: [],\n answeredClientRequestIds: [],\n threadStatus: surfaceThreadStatus(response.thread.status),\n ...catalogs,\n ...selection,\n });\n this.hostOptionsByThread.set(response.thread.id, {\n ...(cwd ? { cwd } : {}),\n ...hostOptions,\n mcpServers,\n });\n const summary = threadToSummary(response.thread);\n this.host.patch({\n activeConversationId: response.thread.id,\n conversations: upsertConversation(state.conversations, summary),\n ...this.host.runtimeProjection(runtime),\n });\n this.host.emitSummaryUpserted(summary, 'created', 'action');\n this.host.emitSelected(response.thread.id);\n this.emitConversationState(response.thread.id);\n return this.host.getSnapshot();\n }\n\n async select(conversationId: string): Promise<CodexSurfaceSnapshot> {\n await this.host.ensureConnected();\n const runtime = this.host.runtime(conversationId);\n if (runtime?.hydrated && (runtime.busy || runtime.activeTurnId !== null)) {\n this.host.activateRuntime(runtime);\n return this.host.getSnapshot();\n }\n return this.resume(conversationId);\n }\n\n resumeDuringBootstrap(conversationId: string): Promise<CodexSurfaceSnapshot> {\n return this.resume(conversationId);\n }\n\n async ensureReady(\n threadId: string,\n loadOptions: CodexConversationLoadOptions = {},\n ): Promise<ThreadRuntimeState> {\n await this.host.ensureConnected();\n const runtime = this.host.runtime(threadId);\n if (runtime?.hydrated && Object.keys(loadOptions).length === 0) return runtime;\n let hydration = this.hydrationPromises.get(threadId);\n if (!hydration) {\n hydration = this.resume(threadId, false, loadOptions, 'load').then(() => undefined);\n this.hydrationPromises.set(threadId, hydration);\n void hydration.finally(() => {\n if (this.hydrationPromises.get(threadId) === hydration) this.hydrationPromises.delete(threadId);\n }).catch(() => undefined);\n }\n await hydration;\n return this.host.requireRuntime(threadId);\n }\n\n async readHistory(conversationId: string): Promise<CodexConversationHistory> {\n await this.host.ensureConnected();\n if (!conversationId) throw new Error('There is no active conversation');\n const existing = await this.ensureReady(conversationId);\n if (existing.busy) return this.historySnapshot(conversationId, existing);\n const loadingRuntime = this.host.createRuntime(conversationId, { historyLoading: true, error: null });\n if (this.host.getState().activeConversationId === conversationId) this.host.activateRuntime(loadingRuntime);\n try {\n const [response] = await Promise.all([\n this.client.request('thread/read', { threadId: conversationId, includeTurns: false }),\n this.conversations.refreshCompleteHistory(conversationId),\n ]);\n if (response.thread.id !== conversationId) {\n throw new Error(`Codex thread/read returned '${response.thread.id}' for requested thread '${conversationId}'`);\n }\n const hydratedRuntime = this.host.requireRuntime(conversationId);\n const runtime = this.host.createRuntime(conversationId, {\n hydrated: true,\n historyMode: response.thread.historyMode ?? 'legacy',\n historyLoading: false,\n activeTurnId: hydratedRuntime.activeTurnId,\n turns: hydratedRuntime.turns,\n turnIds: hydratedRuntime.turnIds,\n messages: hydratedRuntime.messages,\n loadingStrategy: hydratedRuntime.loadingStrategy,\n historyCursor: null,\n historyHasOlder: false,\n historyLoadingOlder: false,\n fullHistoryHydrated: true,\n busy: Boolean(hydratedRuntime.activeTurnId),\n threadStatus: surfaceThreadStatus(response.thread.status),\n });\n const summary = { ...threadToSummary(response.thread), turnCount: runtime.turnIds.length };\n const state = this.host.getState();\n this.host.patch({\n conversations: upsertConversation(state.conversations, summary),\n ...(state.activeConversationId === conversationId ? this.host.runtimeProjection(runtime) : {}),\n });\n this.host.emitSummaryUpserted(summary, 'updated', 'action');\n this.host.emitHistoryReplaced(conversationId, 'resync', 'action');\n this.host.emitConversationActivity(conversationId, 'action');\n return this.historySnapshot(conversationId, runtime);\n } catch (error) {\n this.host.patchRuntime(conversationId, { historyLoading: false, error: errorMessage(error) });\n throw error;\n }\n }\n\n private async resume(\n conversationId: string,\n activate = true,\n loadOptions: CodexConversationLoadOptions = {},\n historyReason: 'load' | 'resume' = 'resume',\n ): Promise<CodexSurfaceSnapshot> {\n const requestedHostOptions = { ...this.hostOptionsByThread.get(conversationId), ...loadOptions };\n const hostOptions = {\n ...requestedHostOptions,\n mcpServers: requestedHostOptions.mcpServers === undefined\n ? this.extensions.defaultMcpServers\n : normalizeMcpServers(requestedHostOptions.mcpServers),\n };\n this.hostOptionsByThread.set(conversationId, hostOptions);\n const extension = await this.extensions.conversationExtension({\n operation: 'resume',\n conversationId,\n cwd: hostOptions.cwd,\n extensionContext: hostOptions.extensionContext,\n }, {}, hostOptions.mcpServers);\n const loadingRuntime = this.host.createRuntime(conversationId, { historyLoading: true, error: null });\n const initialTurns = new Map(loadingRuntime.turns.map((turn) => [turn.id, turn]));\n const initialMessages = new Map(loadingRuntime.messages.map((message) => [message.id, message]));\n const initialStatus = loadingRuntime.threadStatus;\n if (activate) this.host.activateRuntime(loadingRuntime);\n try {\n const [response, goal] = await Promise.all([\n this.client.request('thread/resume', {\n threadId: conversationId,\n excludeTurns: true,\n initialTurnsPage: {\n limit: CONVERSATION_HISTORY_PAGE_SIZE,\n sortDirection: 'desc',\n itemsView: 'full',\n },\n ...(hostOptions.cwd ? { cwd: hostOptions.cwd } : {}),\n ...(extension.baseInstructions === undefined ? {} : { baseInstructions: extension.baseInstructions }),\n ...(extension.developerInstructions === undefined\n ? {}\n : { developerInstructions: extension.developerInstructions }),\n ...(extension.config === undefined ? {} : { config: extension.config as v2.ThreadResumeParams['config'] }),\n }),\n this.client.request('thread/goal/get', { threadId: conversationId })\n .then((result) => result.goal)\n .catch(() => null),\n ]);\n if (response.thread.id !== conversationId) {\n throw new Error(`Codex thread/resume returned '${response.thread.id}' for requested thread '${conversationId}'`);\n }\n const initialPage = response.initialTurnsPage ?? await this.client.request('thread/turns/list', {\n threadId: response.thread.id,\n cursor: null,\n limit: CONVERSATION_HISTORY_PAGE_SIZE,\n sortDirection: 'desc',\n itemsView: 'full',\n });\n const turns = [...initialPage.data].reverse();\n const cwd = response.cwd ?? response.thread.cwd ?? hostOptions.cwd;\n const catalogs = await this.catalog.loadConversationCatalogs(cwd);\n const changedTurns = loadingRuntime.turns.filter((turn) => initialTurns.get(turn.id) !== turn);\n const threadStatus = loadingRuntime.threadStatus !== initialStatus && loadingRuntime.threadStatus\n ? loadingRuntime.threadStatus\n : surfaceThreadStatus(response.thread.status);\n const restoredTurns = turns.map((turn) => threadStatus.type === 'idle' && turn.status === 'inProgress'\n ? { ...turn, status: 'interrupted' as const }\n : turn);\n const projectedTurns = new Map(restoredTurns.map((turn) => [turn.id, surfaceTurn(turn)]));\n for (const turn of changedTurns) projectedTurns.set(turn.id, turn);\n const runningTurnId = changedTurns.length > 0\n ? loadingRuntime.activeTurnId\n : threadStatus.type === 'active' ? activeTurnId(turns) : null;\n const historyMessages = preserveHistoricalAttachmentPreviews(\n loadingRuntime.messages,\n codexThreadToSurfaceMessages({ ...response.thread, turns: restoredTurns }),\n );\n // Notifications received while hydration awaited RPC/catalog data are newer\n // than that response. Never replace them with the stale transcript page.\n const mergedMessages = new Map(historyMessages.map((message) => [message.id, message]));\n for (const message of loadingRuntime.messages) {\n if (initialMessages.get(message.id) !== message) mergedMessages.set(message.id, message);\n }\n const messages = runningTurnId\n ? ensureAssistantTurnMessage([...mergedMessages.values()], response.thread.id, runningTurnId)\n : [...mergedMessages.values()];\n const runtime = this.host.createRuntime(response.thread.id, {\n hydrated: true,\n historyMode: response.thread.historyMode ?? 'legacy',\n loadingStrategy: hostOptions.loadingStrategy ?? this.options.loadingStrategy ?? 'lazy',\n historyCursor: initialPage.nextCursor,\n historyHasOlder: initialPage.nextCursor !== null,\n historyLoadingOlder: false,\n fullHistoryHydrated: initialPage.nextCursor === null,\n cwd: cwd ?? null,\n historyLoading: false,\n activeTurnId: runningTurnId,\n turns: [...projectedTurns.values()],\n turnIds: [...projectedTurns.keys()],\n messages,\n busy: changedTurns.length > 0 ? loadingRuntime.busy : Boolean(runningTurnId) || threadStatus.type === 'active',\n goal: goal ? { ...goal } : null,\n threadStatus,\n ...catalogs,\n ...sessionSelection(response, this.host.getState().models, this.host.snapshotForRuntime(loadingRuntime)),\n });\n const summary = { ...threadToSummary(response.thread), turnCount: turns.length };\n const state = this.host.getState();\n this.host.patch({\n conversations: upsertConversation(state.conversations, summary),\n ...(state.activeConversationId === response.thread.id ? this.host.runtimeProjection(runtime) : {}),\n });\n this.host.emitSummaryUpserted(summary, 'resumed', 'action');\n this.host.emitHistoryReplaced(response.thread.id, historyReason, 'action');\n this.emitConversationState(response.thread.id);\n if (runtime.loadingStrategy === 'eager' && initialPage.nextCursor !== null) {\n void this.conversations.hydrateCompleteHistory(response.thread.id, {\n cursor: initialPage.nextCursor,\n initialPageLoaded: true,\n }).catch(() => undefined);\n }\n return this.host.getSnapshot();\n } catch (error) {\n this.host.patchRuntime(conversationId, { historyLoading: false, error: errorMessage(error) });\n throw error;\n }\n }\n\n private emitConversationState(threadId: string): void {\n this.host.emitConversationActivity(threadId, 'action');\n this.host.emitConversationSettings(threadId, 'action');\n this.host.emitConversationSkills(threadId, 'action');\n this.host.emitConversationPermissions(threadId, 'action');\n }\n\n private historySnapshot(\n conversationId: string,\n runtime: Pick<ThreadRuntimeState, 'messages' | 'threadStatus'>,\n ): CodexConversationHistory {\n return {\n conversationId,\n messages: structuredClone(runtime.messages),\n threadStatus: structuredClone(runtime.threadStatus),\n };\n }\n}\n","import type { ServerNotification } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceEvent,\n CodexSurfaceEventOrigin,\n CodexSurfaceJsonValue,\n CodexSurfaceSnapshot,\n} from '@codex-app-sdk/core/surface';\nimport {\n commandOutputDeltaToToolPartUpdate,\n fileChangePatchToToolPartUpdate,\n lineDiffFromUnifiedDiff,\n mcpProgressToToolPartUpdate,\n} from './codex-tool-part-adapter';\nimport { CodexSurfaceApprovalsController } from './codex-surface-approvals-controller';\nimport { CodexSurfaceAuthenticationController } from './codex-surface-authentication-controller';\nimport { CodexSurfaceCatalogController } from './codex-surface-catalog-controller';\nimport { CodexSurfaceClientRequestsController } from './codex-surface-client-requests-controller';\nimport { CodexSurfaceConversationsController } from './codex-surface-conversations-controller';\nimport {\n conversationStatus,\n mergeSurfaceRateLimits,\n surfaceContextUsage,\n surfaceThreadStatus,\n threadToSummary,\n upsertConversation,\n} from './codex-surface-data';\nimport { errorMessage } from './codex-surface-prompts';\nimport { CodexSurfaceItemsController } from './codex-surface-items-controller';\nimport { appendCompactionMarker, ensureAssistantTurnMessage } from './codex-surface-message-state';\nimport { realtimeAudioChunk } from './codex-surface-realtime';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\nimport { threadSettingsSelection } from './codex-surface-settings';\nimport {\n sameValue,\n surfaceTurn,\n surfaceTurnError,\n timestampToIso,\n upsertSurfaceTurn,\n} from './codex-surface-events';\n\ntype SurfaceEventInput = CodexSurfaceEvent extends infer Event\n ? Event extends CodexSurfaceEvent\n ? Omit<Event, 'seq' | 'occurredAt' | 'origin'>\n : never\n : never;\n\nexport interface CodexSurfaceNotificationsHost {\n clearPendingForThread(\n threadId: string,\n reason: string,\n eventReason: 'conversation_closed' | 'conversation_removed' | 'surface_disconnected',\n ): void;\n createRuntime(threadId: string, patch?: ThreadRuntimePatch): ThreadRuntimeState;\n emitConversationActivity(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitConversationPermissions(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitConversationSettings(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitConversationSkills(threadId: string, origin: CodexSurfaceEventOrigin): void;\n emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void;\n emitSummaryUpserted(\n summary: CodexConversationSummary,\n reason: Extract<CodexSurfaceEvent, { type: 'conversation.summaryUpserted' }>['payload']['reason'],\n origin: CodexSurfaceEventOrigin,\n ): void;\n getState(): CodexSurfaceSnapshot;\n markRuntimeTurnActive(runtime: ThreadRuntimeState, turnId: string): void;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n patchConversationStatus(\n threadId: string,\n status: CodexConversationSummary['status'],\n origin?: CodexSurfaceEventOrigin,\n ): void;\n patchConversationTurnCount(threadId: string, turnCount: number): void;\n patchRuntime(threadId: string, patch: ThreadRuntimePatch): void;\n removeThread(threadId: string, reason: 'archived' | 'deleted'): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n runtime(threadId: string): ThreadRuntimeState | undefined;\n runtimes(): Iterable<ThreadRuntimeState>;\n snapshotForRuntime(runtime: ThreadRuntimeState): CodexSurfaceSnapshot;\n unknownNotification(notification: ServerNotification): void;\n}\n\nexport class CodexSurfaceNotificationsController {\n constructor(\n private readonly authentication: CodexSurfaceAuthenticationController,\n private readonly approvals: CodexSurfaceApprovalsController,\n private readonly catalog: CodexSurfaceCatalogController,\n private readonly clientRequests: CodexSurfaceClientRequestsController,\n private readonly conversations: CodexSurfaceConversationsController,\n private readonly items: CodexSurfaceItemsController,\n private readonly host: CodexSurfaceNotificationsHost,\n ) {}\n\n handle(notification: ServerNotification): void {\n switch (notification.method) {\n case 'thread/started': {\n this.host.createRuntime(notification.params.thread.id, {\n historyMode: notification.params.thread.historyMode ?? 'legacy',\n threadStatus: surfaceThreadStatus(notification.params.thread.status),\n });\n const summary = threadToSummary(notification.params.thread);\n this.host.patch({\n conversations: upsertConversation(this.host.getState().conversations, summary),\n });\n this.host.emitSummaryUpserted(summary, 'started', 'notification');\n this.host.emitConversationActivity(notification.params.thread.id, 'notification');\n return;\n }\n case 'thread/status/changed': {\n const { threadId, status } = notification.params;\n const runtime = this.host.requireRuntime(threadId);\n const systemError = status.type === 'systemError';\n if (status.type === 'idle' && !runtime.turnStartPending && runtime.activeTurnId) {\n // Idle is authoritative even if the terminal turn notification was\n // missed. Settle conservatively, without inventing successful work.\n this.items.applyTurnCompleted({ threadId, turn: {\n id: runtime.activeTurnId, status: 'interrupted', items: [], itemsView: 'full',\n error: null, startedAt: null, completedAt: null, durationMs: null,\n } });\n }\n if (systemError || (status.type === 'idle' && !runtime.turnStartPending)) runtime.activeTurnId = null;\n this.host.patchRuntime(threadId, {\n threadStatus: surfaceThreadStatus(status),\n busy: systemError\n ? false\n : runtime.turnStartPending || status.type === 'active' || runtime.activeTurnId !== null,\n ...(systemError\n ? { turnStartPending: false, error: 'Codex app-server reported a system error' }\n : {}),\n });\n const state = this.host.getState();\n this.host.patch({\n conversations: state.conversations.map((conversation) => conversation.id === threadId\n ? { ...conversation, status: conversationStatus(status) }\n : conversation),\n });\n const summary = this.host.getState().conversations.find((conversation) => conversation.id === threadId);\n if (summary) this.host.emitSummaryUpserted(summary, 'updated', 'notification');\n this.host.emitConversationActivity(threadId, 'notification');\n return;\n }\n case 'thread/archived':\n case 'thread/deleted':\n this.host.removeThread(\n notification.params.threadId,\n notification.method === 'thread/archived' ? 'archived' : 'deleted',\n );\n return;\n case 'thread/unarchived':\n void this.conversations.load().catch((error) => {\n this.host.patch({ error: errorMessage(error) });\n });\n return;\n case 'thread/closed': {\n const runtime = this.host.runtime(notification.params.threadId);\n if (runtime) {\n runtime.activeTurnId = null;\n this.host.patchRuntime(notification.params.threadId, {\n busy: false,\n turnStartPending: false,\n threadStatus: { type: 'idle' },\n });\n }\n this.host.clearPendingForThread(notification.params.threadId, 'Codex thread closed', 'conversation_closed');\n this.host.patchConversationStatus(notification.params.threadId, 'idle');\n this.host.emitConversationActivity(notification.params.threadId, 'notification');\n return;\n }\n case 'skills/changed':\n void this.catalog.loadSkills(true, 'notification');\n for (const runtime of this.host.runtimes()) {\n void this.catalog.loadConversationCatalogs(runtime.cwd ?? undefined, true).then((catalogs) => {\n this.host.patchRuntime(runtime.threadId, catalogs);\n this.host.emitConversationSkills(runtime.threadId, 'notification');\n this.host.emitConversationPermissions(runtime.threadId, 'notification');\n });\n }\n return;\n case 'thread/name/updated': {\n const state = this.host.getState();\n const previous = state.conversations.find((conversation) => conversation.id === notification.params.threadId);\n const title = notification.params.threadName?.trim() || previous?.preview || 'Untitled conversation';\n if (previous?.title === title) return;\n this.host.patch({\n conversations: state.conversations.map((conversation) => conversation.id === notification.params.threadId\n ? { ...conversation, title }\n : conversation),\n });\n const summary = this.host.getState().conversations.find(\n (conversation) => conversation.id === notification.params.threadId,\n );\n if (summary) this.host.emitSummaryUpserted(summary, 'updated', 'notification');\n return;\n }\n case 'thread/settings/updated': {\n const runtime = this.host.requireRuntime(notification.params.threadId);\n const state = this.host.getState();\n const next = threadSettingsSelection(\n notification.params.threadSettings,\n state.models,\n this.host.snapshotForRuntime(runtime),\n );\n const changed = runtime.approvalPreset !== next.approvalPreset\n || runtime.selectedModelId !== next.selectedModelId\n || runtime.selectedReasoningEffort !== next.selectedReasoningEffort\n || runtime.selectedServiceTier !== next.selectedServiceTier\n || runtime.planMode !== next.planMode;\n this.host.patchRuntime(notification.params.threadId, next);\n if (changed) this.host.emitConversationSettings(notification.params.threadId, 'notification');\n return;\n }\n case 'thread/goal/updated': {\n const runtime = this.host.requireRuntime(notification.params.threadId);\n if (sameValue(runtime.goal, notification.params.goal)) return;\n this.host.patchRuntime(notification.params.threadId, { goal: { ...notification.params.goal } });\n this.host.emitEvent('notification', {\n type: 'conversation.goalChanged',\n conversationId: notification.params.threadId,\n ...(notification.params.turnId ? { turnId: notification.params.turnId } : {}),\n payload: { goal: structuredClone(notification.params.goal) },\n });\n return;\n }\n case 'thread/goal/cleared':\n if (this.host.requireRuntime(notification.params.threadId).goal === null) return;\n this.host.patchRuntime(notification.params.threadId, { goal: null });\n this.host.emitEvent('notification', {\n type: 'conversation.goalChanged',\n conversationId: notification.params.threadId,\n payload: { goal: null },\n });\n return;\n case 'thread/tokenUsage/updated': {\n const contextUsage = surfaceContextUsage(notification.params.tokenUsage);\n this.host.patchRuntime(notification.params.threadId, { contextUsage });\n this.host.emitEvent('notification', {\n type: 'conversation.contextUsageChanged',\n conversationId: notification.params.threadId,\n turnId: notification.params.turnId,\n payload: { contextUsage: structuredClone(contextUsage) },\n });\n return;\n }\n case 'turn/started': {\n const runtime = this.host.requireRuntime(notification.params.threadId);\n const alreadyActive = runtime.activeTurnId === notification.params.turn.id;\n this.host.markRuntimeTurnActive(runtime, notification.params.turn.id);\n this.host.patchConversationTurnCount(notification.params.threadId, runtime.turnIds.length);\n this.host.patchRuntime(notification.params.threadId, {\n busy: true,\n turnStartPending: false,\n error: null,\n turnGitDiff: null,\n turns: upsertSurfaceTurn(runtime.turns, surfaceTurn(notification.params.turn)),\n messages: ensureAssistantTurnMessage(\n runtime.messages,\n notification.params.threadId,\n notification.params.turn.id,\n { createdAt: timestampToIso(notification.params.turn.startedAt) },\n ),\n });\n this.host.patchConversationStatus(notification.params.threadId, 'active');\n if (!alreadyActive) {\n this.host.emitEvent('notification', {\n type: 'turn.started',\n conversationId: notification.params.threadId,\n turnId: notification.params.turn.id,\n payload: { startedAt: timestampToIso(notification.params.turn.startedAt) },\n });\n }\n this.host.emitConversationActivity(notification.params.threadId, 'notification');\n return;\n }\n case 'item/agentMessage/delta':\n this.items.applyAgentDelta(notification.params);\n return;\n case 'item/plan/delta':\n this.items.applyPlanDelta(notification.params);\n return;\n case 'item/started':\n case 'item/completed':\n this.items.applyItem(notification.params, notification.method === 'item/completed');\n return;\n case 'item/commandExecution/outputDelta':\n if (!this.items.isForwardingCommandOutput(notification.params.threadId, notification.params.itemId)) return;\n this.items.applyToolUpdate(\n notification.params.threadId,\n notification.params.turnId,\n commandOutputDeltaToToolPartUpdate(notification.params.itemId, notification.params.delta),\n );\n return;\n case 'item/fileChange/patchUpdated':\n this.items.applyToolUpdate(\n notification.params.threadId,\n notification.params.turnId,\n fileChangePatchToToolPartUpdate(notification.params.itemId, notification.params.changes),\n );\n return;\n case 'item/mcpToolCall/progress':\n this.items.applyToolUpdate(\n notification.params.threadId,\n notification.params.turnId,\n mcpProgressToToolPartUpdate(notification.params.itemId, notification.params.message),\n );\n return;\n case 'rawResponseItem/completed':\n this.items.applyRawResponseItem(notification.params);\n return;\n case 'turn/plan/updated':\n this.items.applyPlanUpdated(notification.params);\n return;\n case 'serverRequest/resolved': {\n const requestId = String(notification.params.requestId);\n this.clientRequests.handleServerResolved(requestId, notification.params.threadId);\n this.approvals.handleServerResolved(requestId);\n this.host.emitConversationActivity(notification.params.threadId, 'notification');\n return;\n }\n case 'turn/diff/updated': {\n const counts = lineDiffFromUnifiedDiff(notification.params.diff);\n this.host.patchRuntime(notification.params.threadId, {\n turnGitDiff: {\n turnId: notification.params.turnId,\n addedLines: counts.addedLines,\n removedLines: counts.removedLines,\n diff: notification.params.diff,\n updatedAt: new Date().toISOString(),\n },\n });\n this.host.emitEvent('notification', {\n type: 'conversation.diffUpdated',\n conversationId: notification.params.threadId,\n payload: { diff: structuredClone(this.host.requireRuntime(notification.params.threadId).turnGitDiff) },\n });\n return;\n }\n case 'thread/compacted': {\n const runtime = this.host.requireRuntime(notification.params.threadId);\n this.host.patchRuntime(notification.params.threadId, {\n messages: appendCompactionMarker(\n runtime.messages,\n notification.params.threadId,\n notification.params.turnId,\n 'complete',\n ),\n });\n const message = this.host.requireRuntime(notification.params.threadId).messages.find((candidate) => (\n candidate.kind === 'compaction' && candidate.metadata?.turnId === notification.params.turnId\n ))!;\n this.host.emitEvent('notification', {\n type: 'context.compactionCompleted',\n conversationId: notification.params.threadId,\n turnId: notification.params.turnId,\n payload: { itemId: null, message: structuredClone(message) },\n });\n return;\n }\n case 'turn/completed':\n this.items.applyTurnCompleted(notification.params);\n return;\n case 'error': {\n const runtime = this.host.requireRuntime(notification.params.threadId);\n const terminalCurrentTurn = !notification.params.willRetry\n && runtime.activeTurnId === notification.params.turnId;\n if (terminalCurrentTurn) runtime.activeTurnId = null;\n this.host.patchRuntime(notification.params.threadId, {\n error: notification.params.error.message,\n turns: upsertSurfaceTurn(runtime.turns, {\n ...(runtime.turns.find((turn) => turn.id === notification.params.turnId) ?? {\n id: notification.params.turnId,\n status: 'inProgress' as const,\n startedAt: null,\n completedAt: null,\n durationMs: null,\n }),\n status: terminalCurrentTurn ? 'failed' : 'inProgress',\n error: surfaceTurnError(notification.params.error),\n willRetry: notification.params.willRetry,\n }),\n ...(terminalCurrentTurn ? { busy: false, turnStartPending: false } : {}),\n });\n if (terminalCurrentTurn) this.host.patchConversationStatus(notification.params.threadId, 'error');\n this.host.emitEvent('notification', {\n type: 'turn.error',\n conversationId: notification.params.threadId,\n turnId: notification.params.turnId,\n payload: {\n error: surfaceTurnError(notification.params.error)!,\n willRetry: notification.params.willRetry,\n },\n });\n this.host.emitConversationActivity(notification.params.threadId, 'notification');\n return;\n }\n case 'account/rateLimits/updated': {\n const state = this.host.getState();\n this.host.patch({ rateLimits: mergeSurfaceRateLimits(state.rateLimits, notification.params.rateLimits) });\n this.host.emitEvent('notification', {\n type: 'rateLimits.changed',\n payload: { rateLimits: structuredClone(this.host.getState().rateLimits) },\n });\n return;\n }\n case 'account/updated':\n void this.authentication.refresh('notification').catch((error) => this.host.patch({ error: errorMessage(error) }));\n return;\n case 'account/login/completed':\n this.authentication.handleLoginCompleted(notification.params);\n return;\n case 'thread/realtime/started':\n this.host.emitEvent('notification', {\n type: 'realtime.started',\n conversationId: notification.params.threadId,\n payload: {\n realtimeSessionId: notification.params.realtimeSessionId,\n version: notification.params.version,\n },\n });\n return;\n case 'thread/realtime/itemAdded':\n this.host.emitEvent('notification', {\n type: 'realtime.itemAdded',\n conversationId: notification.params.threadId,\n payload: { item: structuredClone(notification.params.item) as CodexSurfaceJsonValue },\n });\n return;\n case 'thread/realtime/item/started':\n case 'thread/realtime/item/completed':\n this.host.emitEvent('notification', {\n type: notification.method === 'thread/realtime/item/started'\n ? 'realtime.itemStarted' : 'realtime.itemCompleted',\n conversationId: notification.params.threadId,\n payload: { item: structuredClone(notification.params.item) as CodexSurfaceJsonValue },\n });\n return;\n case 'thread/realtime/item/transcript/delta':\n this.host.emitEvent('notification', {\n type: 'realtime.itemTranscriptDelta',\n conversationId: notification.params.threadId,\n payload: { itemId: notification.params.itemId, delta: notification.params.delta },\n });\n return;\n case 'thread/realtime/transcript/delta':\n this.host.emitEvent('notification', {\n type: 'realtime.transcriptDelta',\n conversationId: notification.params.threadId,\n payload: { role: notification.params.role, delta: notification.params.delta },\n });\n return;\n case 'thread/realtime/transcript/done':\n this.host.emitEvent('notification', {\n type: 'realtime.transcriptCompleted',\n conversationId: notification.params.threadId,\n payload: { role: notification.params.role, text: notification.params.text },\n });\n return;\n case 'thread/realtime/outputAudio/delta':\n this.host.emitEvent('notification', {\n type: 'realtime.audioDelta',\n conversationId: notification.params.threadId,\n payload: { audio: realtimeAudioChunk(notification.params.audio) },\n });\n return;\n case 'thread/realtime/sdp':\n this.host.emitEvent('notification', {\n type: 'realtime.sdp',\n conversationId: notification.params.threadId,\n payload: { sdp: notification.params.sdp },\n });\n return;\n case 'thread/realtime/error':\n this.host.emitEvent('notification', {\n type: 'realtime.error',\n conversationId: notification.params.threadId,\n payload: { message: notification.params.message },\n });\n return;\n case 'thread/realtime/closed':\n this.host.emitEvent('notification', {\n type: 'realtime.closed',\n conversationId: notification.params.threadId,\n payload: { reason: notification.params.reason },\n });\n return;\n case 'hook/started':\n case 'hook/completed':\n case 'item/autoApprovalReview/started':\n case 'item/autoApprovalReview/completed':\n case 'command/exec/outputDelta':\n case 'process/outputDelta':\n case 'process/exited':\n case 'item/commandExecution/terminalInteraction':\n case 'item/fileChange/outputDelta':\n case 'mcpServer/oauthLogin/completed':\n case 'mcpServer/startupStatus/updated':\n case 'app/list/updated':\n case 'externalAgentConfig/import/progress':\n case 'externalAgentConfig/import/completed':\n case 'fs/changed':\n case 'item/reasoning/summaryTextDelta':\n case 'item/reasoning/summaryPartAdded':\n case 'item/reasoning/textDelta':\n case 'model/rerouted':\n case 'model/verification':\n case 'turn/moderationMetadata':\n case 'model/safetyBuffering/updated':\n case 'warning':\n case 'guardianWarning':\n case 'deprecationNotice':\n case 'configWarning':\n case 'fuzzyFileSearch/sessionUpdated':\n case 'fuzzyFileSearch/sessionCompleted':\n case 'windows/worldWritableWarning':\n case 'windowsSandbox/setupCompleted':\n return;\n case 'remoteControl/status/changed':\n this.host.emitEvent('notification', {\n type: 'remoteControl.statusChanged',\n payload: {\n status: {\n status: notification.params.status,\n serverName: notification.params.serverName,\n installationId: notification.params.installationId,\n environmentId: notification.params.environmentId,\n },\n },\n });\n return;\n default:\n return this.host.unknownNotification(notification);\n }\n }\n}\n","import type {\n CodexConversationSummary,\n CodexSurfaceEvent,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n SurfaceMessage,\n} from '@codex-app-sdk/core/surface';\nimport { upsertSurfaceTurn } from './codex-surface-events';\nimport { CodexSurfaceApprovalsController } from './codex-surface-approvals-controller';\nimport { CodexSurfaceClientRequestsController } from './codex-surface-client-requests-controller';\nimport {\n createThreadRuntime,\n runtimeProjection,\n type ThreadRuntimePatch,\n type ThreadRuntimeState,\n} from './codex-surface-runtime';\n\ntype SurfaceEventInput = CodexSurfaceEvent extends infer Event\n ? Event extends CodexSurfaceEvent\n ? Omit<Event, 'seq' | 'occurredAt' | 'origin'>\n : never\n : never;\n\nexport interface CodexSurfaceRuntimeHost {\n emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void;\n getState(): CodexSurfaceSnapshot;\n notifyConversationListeners(threadId: string): void;\n patch(patch: Partial<CodexSurfaceSnapshot>, conversationId?: string): void;\n schedulePluginRefresh(): void;\n}\n\nexport class CodexSurfaceRuntimeController {\n private readonly runtimes = new Map<string, ThreadRuntimeState>();\n private readonly semanticEventValues = new Map<string, string>();\n\n constructor(\n private readonly approvals: CodexSurfaceApprovalsController,\n private readonly clientRequests: CodexSurfaceClientRequestsController,\n private readonly host: CodexSurfaceRuntimeHost,\n ) {}\n\n get(threadId: string): ThreadRuntimeState | undefined {\n return this.runtimes.get(threadId);\n }\n\n values(): IterableIterator<ThreadRuntimeState> {\n return this.runtimes.values();\n }\n\n clear(): void {\n this.runtimes.clear();\n this.semanticEventValues.clear();\n }\n\n forget(threadId: string): void {\n this.runtimes.delete(threadId);\n this.semanticEventValues.delete(`summary:${threadId}`);\n this.semanticEventValues.delete(`activity:${threadId}`);\n this.semanticEventValues.delete(`settings:${threadId}`);\n }\n\n create(threadId: string, patch: ThreadRuntimePatch = {}): ThreadRuntimeState {\n const existing = this.runtimes.get(threadId);\n if (existing) {\n Object.assign(existing, patch);\n return existing;\n }\n const runtime = createThreadRuntime(threadId, this.host.getState(), patch);\n this.runtimes.set(threadId, runtime);\n return runtime;\n }\n\n require(threadId: string): ThreadRuntimeState {\n return this.runtimes.get(threadId) ?? this.create(threadId);\n }\n\n projection(runtime: ThreadRuntimeState): ReturnType<typeof runtimeProjection> {\n return runtimeProjection(\n runtime,\n this.approvals.approvalsForThread(runtime.threadId),\n this.clientRequests.requestsForThread(runtime.threadId),\n );\n }\n\n snapshot(runtime: ThreadRuntimeState): CodexSurfaceSnapshot {\n return { ...this.host.getState(), ...this.projection(runtime) };\n }\n\n activate(runtime: ThreadRuntimeState): void {\n this.host.patch({\n activeConversationId: runtime.threadId,\n ...this.projection(runtime),\n });\n this.host.emitEvent('action', {\n type: 'conversation.selected',\n payload: { conversationId: runtime.threadId },\n });\n }\n\n patch(threadId: string, patch: ThreadRuntimePatch): void {\n const runtime = this.require(threadId);\n Object.assign(runtime, patch);\n if (this.host.getState().activeConversationId === threadId) {\n this.host.patch(this.projection(runtime), threadId);\n } else {\n this.host.notifyConversationListeners(threadId);\n }\n }\n\n emitSurfaceStatus(origin: CodexSurfaceEventOrigin): void {\n const state = this.host.getState();\n this.host.emitEvent(origin, {\n type: 'surface.statusChanged',\n payload: { status: state.status, error: state.error },\n });\n }\n\n emitSummaryUpserted(\n summary: CodexConversationSummary,\n reason: Extract<CodexSurfaceEvent, { type: 'conversation.summaryUpserted' }>['payload']['reason'],\n origin: CodexSurfaceEventOrigin,\n ): void {\n this.host.schedulePluginRefresh();\n const fingerprint = JSON.stringify({\n id: summary.id,\n title: summary.title,\n preview: summary.preview,\n cwd: summary.cwd,\n status: summary.status,\n turnCount: summary.turnCount,\n createdAt: summary.createdAt,\n });\n if (this.semanticEventValues.get(`summary:${summary.id}`) === fingerprint) return;\n this.semanticEventValues.set(`summary:${summary.id}`, fingerprint);\n this.host.emitEvent(origin, {\n type: 'conversation.summaryUpserted',\n conversationId: summary.id,\n payload: { summary: structuredClone(summary), reason },\n });\n }\n\n emitConversationActivity(threadId: string, origin: CodexSurfaceEventOrigin): void {\n const runtime = this.require(threadId);\n const payload = {\n threadStatus: structuredClone(runtime.threadStatus),\n busy: runtime.busy,\n error: runtime.error,\n };\n const fingerprint = JSON.stringify(payload);\n if (this.semanticEventValues.get(`activity:${threadId}`) === fingerprint) return;\n this.semanticEventValues.set(`activity:${threadId}`, fingerprint);\n this.host.emitEvent(origin, {\n type: 'conversation.activityChanged',\n conversationId: threadId,\n payload,\n });\n }\n\n emitConversationSettings(threadId: string, origin: CodexSurfaceEventOrigin): void {\n const runtime = this.require(threadId);\n const payload = {\n approvalPreset: runtime.approvalPreset,\n selectedModelId: runtime.selectedModelId,\n selectedReasoningEffort: runtime.selectedReasoningEffort,\n selectedServiceTier: runtime.selectedServiceTier,\n planMode: runtime.planMode,\n };\n const fingerprint = JSON.stringify(payload);\n if (this.semanticEventValues.get(`settings:${threadId}`) === fingerprint) return;\n this.semanticEventValues.set(`settings:${threadId}`, fingerprint);\n this.host.emitEvent(origin, {\n type: 'conversation.settingsChanged',\n conversationId: threadId,\n payload,\n });\n }\n\n emitConversationSkills(threadId: string, origin: CodexSurfaceEventOrigin): void {\n const runtime = this.require(threadId);\n this.host.emitEvent(origin, {\n type: 'conversation.skillsChanged',\n conversationId: threadId,\n payload: {\n cwd: runtime.cwd,\n skills: structuredClone(runtime.skills),\n status: runtime.skillCatalogStatus,\n },\n });\n }\n\n emitConversationPermissions(threadId: string, origin: CodexSurfaceEventOrigin): void {\n const runtime = this.require(threadId);\n this.host.emitEvent(origin, {\n type: 'conversation.permissionsChanged',\n conversationId: threadId,\n payload: {\n cwd: runtime.cwd,\n permissionProfiles: structuredClone(runtime.permissionProfiles),\n approvalPresets: [...runtime.approvalPresets],\n },\n });\n }\n\n emitHistoryReplaced(\n threadId: string,\n reason: Extract<CodexSurfaceEvent, { type: 'conversation.historyReplaced' }>['payload']['reason'],\n origin: CodexSurfaceEventOrigin,\n ): void {\n const runtime = this.require(threadId);\n this.host.emitEvent(origin, {\n type: 'conversation.historyReplaced',\n conversationId: threadId,\n payload: {\n reason,\n messages: structuredClone(runtime.messages),\n threadStatus: structuredClone(runtime.threadStatus),\n state: historyReplacementState(runtime),\n },\n });\n }\n\n emitHistoryPrepended(\n threadId: string,\n messages: readonly SurfaceMessage[],\n origin: CodexSurfaceEventOrigin,\n ): void {\n if (messages.length === 0) return;\n const currentMessages = new Map(\n this.require(threadId).messages.map((message) => [message.id, message]),\n );\n this.host.emitEvent(origin, {\n type: 'conversation.historyPrepended',\n conversationId: threadId,\n payload: {\n messages: structuredClone(messages.map((message) => currentMessages.get(message.id) ?? message)),\n state: historyPrependState(this.require(threadId)),\n },\n });\n }\n\n messageContainingTool(threadId: string, turnId: string, itemId: string): SurfaceMessage | null {\n return this.require(threadId).messages.find((message) => (\n message.metadata?.turnId === turnId\n && message.parts.some((part) => part.type === 'tool' && part.id === itemId)\n )) ?? null;\n }\n\n assistantMessageForTurn(threadId: string, turnId: string): SurfaceMessage | null {\n return [...this.require(threadId).messages].reverse().find((message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.metadata?.turnId === turnId\n )) ?? null;\n }\n\n markTurnActive(runtime: ThreadRuntimeState, turnId: string): void {\n runtime.activeTurnId = turnId;\n runtime.busy = true;\n runtime.turnStartPending = false;\n if (!runtime.turnIds.includes(turnId)) runtime.turnIds.push(turnId);\n runtime.turns = upsertSurfaceTurn(runtime.turns, {\n id: turnId,\n status: 'inProgress',\n error: null,\n willRetry: false,\n startedAt: null,\n completedAt: null,\n durationMs: null,\n });\n }\n\n patchConversationStatus(\n threadId: string,\n status: CodexConversationSummary['status'],\n origin: CodexSurfaceEventOrigin = 'notification',\n ): void {\n const state = this.host.getState();\n this.host.patch({\n conversations: state.conversations.map((conversation) => conversation.id === threadId\n ? { ...conversation, status, updatedAt: new Date().toISOString() }\n : conversation),\n });\n const summary = this.host.getState().conversations.find((conversation) => conversation.id === threadId);\n if (summary) this.emitSummaryUpserted(summary, 'updated', origin);\n }\n\n patchConversationTurnCount(\n threadId: string,\n turnCount: number,\n origin: CodexSurfaceEventOrigin = 'notification',\n ): void {\n const state = this.host.getState();\n this.host.patch({\n conversations: state.conversations.map((conversation) => conversation.id === threadId\n ? { ...conversation, turnCount, updatedAt: new Date().toISOString() }\n : conversation),\n });\n const summary = this.host.getState().conversations.find((conversation) => conversation.id === threadId);\n if (summary) this.emitSummaryUpserted(summary, 'updated', origin);\n }\n}\n\nfunction historyReplacementState(runtime: ThreadRuntimeState) {\n return structuredClone({\n activeTurnId: runtime.activeTurnId,\n answeredClientRequestIds: runtime.answeredClientRequestIds,\n busy: runtime.busy,\n contextUsage: runtime.contextUsage,\n error: runtime.error,\n executionPlan: runtime.executionPlan,\n historyLoading: runtime.historyLoading,\n historyState: runtimeHistoryState(runtime),\n turnGitDiff: runtime.turnGitDiff,\n turnIds: runtime.turnIds,\n turns: runtime.turns,\n });\n}\n\nfunction historyPrependState(runtime: ThreadRuntimeState) {\n return structuredClone({\n historyLoading: runtime.historyLoading,\n historyState: runtimeHistoryState(runtime),\n turnIds: runtime.turnIds,\n turns: runtime.turns,\n });\n}\n\nfunction runtimeHistoryState(runtime: ThreadRuntimeState) {\n return {\n loadingStrategy: runtime.loadingStrategy,\n hasOlder: runtime.historyHasOlder,\n loadingOlder: runtime.historyLoadingOlder,\n fullyLoaded: runtime.fullHistoryHydrated,\n };\n}\n","import { RpcRemoteError } from '../codex/index';\nimport type { CodexAppServerClient, v2 } from '../codex/index';\nimport type { ExperimentalFeatureListResponse } from '../codex/generated/v2/ExperimentalFeatureListResponse';\nimport type {\n CodexSurfaceAuthentication,\n CodexSurfaceChatGptDeviceCodeLogin,\n CodexSurfaceChatGptLogin,\n CodexSurfaceEventOrigin,\n CodexSurfaceSnapshot,\n} from '@codex-app-sdk/core/surface';\nimport { CodexSurfaceApprovalsController } from './codex-surface-approvals-controller';\nimport { surfaceAuthenticationKey } from './codex-surface-authentication';\nimport { CodexSurfaceAuthenticationController } from './codex-surface-authentication-controller';\nimport { CodexSurfaceCatalogController } from './codex-surface-catalog-controller';\nimport { CodexSurfaceClientRequestsController } from './codex-surface-client-requests-controller';\nimport { CodexSurfaceConversationsController } from './codex-surface-conversations-controller';\nimport type {\n CodexSurfaceConfigRequirements,\n CodexSurfaceOptions,\n CodexSurfaceRemoteControlClientPage,\n CodexSurfaceRemoteControlPairing,\n CodexSurfaceRemoteControlPairingStatus,\n CodexSurfaceRemoteControlStatus,\n} from './codex-surface-contracts';\nimport { CodexSurfaceItemsController } from './codex-surface-items-controller';\nimport { CodexSurfaceLifecycleController } from './codex-surface-lifecycle-controller';\nimport { errorMessage } from './codex-surface-prompts';\nimport { CodexSurfaceRuntimeController } from './codex-surface-runtime-controller';\n\nexport interface CodexSurfaceConnectionHost {\n clearConversationHandles(): void;\n clearPendingForThread(\n threadId: string,\n reason: string,\n eventReason: 'surface_disconnected',\n ): void;\n closed(): boolean;\n emitAuthenticationChanged(authentication: CodexSurfaceAuthentication, origin: CodexSurfaceEventOrigin): void;\n emitSurfaceStatus(origin: CodexSurfaceEventOrigin): void;\n getSnapshot(): CodexSurfaceSnapshot;\n getState(): CodexSurfaceSnapshot;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n}\n\nconst SDK_RUNTIME_FEATURES = new Set([\n 'compaction_image_budget',\n 'default_mode_request_user_input',\n]);\n\nexport class CodexSurfaceConnectionController {\n private connectPromise: Promise<CodexSurfaceSnapshot> | null = null;\n private surfaceBootstrapPromise: Promise<void> | null = null;\n private bootstrappedAuthenticationKey: string | null = null;\n\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly options: Pick<CodexSurfaceOptions, 'autoSelectFirstConversation' | 'clientInfo'>,\n private readonly authentication: CodexSurfaceAuthenticationController,\n private readonly approvals: CodexSurfaceApprovalsController,\n private readonly catalog: CodexSurfaceCatalogController,\n private readonly clientRequests: CodexSurfaceClientRequestsController,\n private readonly conversations: CodexSurfaceConversationsController,\n private readonly items: CodexSurfaceItemsController,\n private readonly lifecycle: CodexSurfaceLifecycleController,\n private readonly runtimeState: CodexSurfaceRuntimeController,\n private readonly host: CodexSurfaceConnectionHost,\n ) {}\n\n connect(): Promise<CodexSurfaceSnapshot> {\n if (this.host.getState().status === 'ready') return Promise.resolve(this.host.getSnapshot());\n if (this.connectPromise) return this.connectPromise;\n if (this.host.closed()) return Promise.reject(new Error('Codex surface is closed'));\n\n this.host.patch({ status: 'connecting', error: null });\n this.host.emitSurfaceStatus('lifecycle');\n this.connectPromise = (async () => {\n try {\n this.bootstrappedAuthenticationKey = null;\n this.catalog.reset(true);\n this.resetAppServerSessionState();\n await this.client.start();\n const clientInfo = this.options.clientInfo ?? {\n name: 'codex_app_sdk',\n title: 'Codex Surface',\n version: '0.1.0',\n };\n await this.client.initialize({\n clientInfo: {\n name: clientInfo.name,\n title: clientInfo.title ?? null,\n version: clientInfo.version,\n },\n capabilities: { experimentalApi: true, requestAttestation: false },\n });\n await this.enableSupportedRuntimeFeatures();\n const authenticationChanged = await this.authentication.load('lifecycle');\n if (authenticationChanged || this.authentication.blocksBootstrap()) {\n await this.clearAuthenticatedSurfaceData();\n }\n if (!this.authentication.blocksBootstrap()) await this.bootstrapSurfaceData();\n this.host.patch({ status: 'ready', error: null });\n this.host.emitSurfaceStatus('lifecycle');\n if (!this.authentication.blocksBootstrap()) this.catalog.schedulePluginRefresh();\n return this.host.getSnapshot();\n } catch (error) {\n this.host.patch({ status: 'error', error: errorMessage(error) });\n this.host.emitSurfaceStatus('lifecycle');\n throw error;\n } finally {\n this.connectPromise = null;\n }\n })();\n return this.connectPromise;\n }\n\n private async enableSupportedRuntimeFeatures(): Promise<void> {\n try {\n let cursor: string | null = null;\n const enablement: Record<string, boolean> = {};\n do {\n const response: ExperimentalFeatureListResponse = await this.client.request('experimentalFeature/list', {\n cursor,\n limit: 100,\n threadId: null,\n });\n for (const feature of response.data) {\n if (SDK_RUNTIME_FEATURES.has(feature.name) && !feature.enabled) {\n enablement[feature.name] = true;\n }\n }\n cursor = response.nextCursor;\n } while (cursor);\n if (Object.keys(enablement).length > 0) {\n await this.client.request('experimentalFeature/enablement/set', { enablement });\n }\n } catch (error) {\n // Older app-server releases do not expose feature discovery. They remain\n // usable, but cannot opt into SDK-supported runtime features.\n if (error instanceof RpcRemoteError && error.code === -32601) return;\n throw error;\n }\n }\n\n async ensureConnected(): Promise<void> {\n await this.connect();\n while (true) {\n const pending = this.authentication.pendingRefresh() ?? this.surfaceBootstrapPromise;\n if (!pending) return;\n await pending;\n }\n }\n\n bootstrapSurfaceData(force = false): Promise<void> {\n const authenticationKey = surfaceAuthenticationKey(this.host.getState().authentication);\n if (!force && this.bootstrappedAuthenticationKey === authenticationKey) return Promise.resolve();\n if (this.surfaceBootstrapPromise) {\n const pending = this.surfaceBootstrapPromise;\n return pending.then(() => this.bootstrapSurfaceData(force));\n }\n const bootstrap = (async () => {\n await Promise.all([\n this.catalog.loadModels(),\n this.catalog.loadSkills(force),\n this.catalog.loadPermissionProfiles(),\n this.catalog.loadRateLimits(),\n this.conversations.load(),\n ]);\n const state = this.host.getState();\n const activeConversation = state.activeConversationId\n ? state.conversations.find((conversation) => conversation.id === state.activeConversationId)\n : undefined;\n const conversationToResume = activeConversation\n ?? (this.options.autoSelectFirstConversation === false ? undefined : state.conversations[0]);\n if (conversationToResume && !this.runtimeState.get(conversationToResume.id)?.hydrated) {\n await this.lifecycle.resumeDuringBootstrap(conversationToResume.id);\n }\n this.bootstrappedAuthenticationKey = authenticationKey;\n this.catalog.schedulePluginRefresh(force);\n })();\n this.surfaceBootstrapPromise = bootstrap;\n void bootstrap.finally(() => {\n this.surfaceBootstrapPromise = null;\n }).catch(() => undefined);\n return bootstrap;\n }\n\n async refreshAccount(): Promise<CodexSurfaceSnapshot> {\n await this.ensureConnected();\n return this.authentication.refresh('action', true);\n }\n\n async startChatGptLogin(): Promise<CodexSurfaceChatGptLogin> {\n await this.ensureConnected();\n return this.authentication.startChatGptLogin();\n }\n\n async startChatGptDeviceCodeLogin(): Promise<CodexSurfaceChatGptDeviceCodeLogin> {\n await this.ensureConnected();\n return this.authentication.startChatGptDeviceCodeLogin();\n }\n\n async cancelLogin(loginId: string): Promise<CodexSurfaceSnapshot> {\n await this.ensureConnected();\n return this.authentication.cancelLogin(loginId);\n }\n\n async logout(): Promise<CodexSurfaceSnapshot> {\n await this.ensureConnected();\n return this.authentication.logout();\n }\n\n async readRemoteControlStatus(): Promise<CodexSurfaceRemoteControlStatus> {\n await this.ensureConnected();\n return this.client.request('remoteControl/status/read', undefined);\n }\n\n async enableRemoteControl(options: v2.RemoteControlEnableParams = {}): Promise<CodexSurfaceRemoteControlStatus> {\n await this.ensureConnected();\n return this.client.request('remoteControl/enable', options);\n }\n\n async disableRemoteControl(options: v2.RemoteControlDisableParams = {}): Promise<CodexSurfaceRemoteControlStatus> {\n await this.ensureConnected();\n return this.client.request('remoteControl/disable', options);\n }\n\n async startRemoteControlPairing(\n options: v2.RemoteControlPairingStartParams = {},\n ): Promise<CodexSurfaceRemoteControlPairing> {\n await this.ensureConnected();\n return this.client.request('remoteControl/pairing/start', options);\n }\n\n async readRemoteControlPairingStatus(\n options: v2.RemoteControlPairingStatusParams = {},\n ): Promise<CodexSurfaceRemoteControlPairingStatus> {\n await this.ensureConnected();\n return this.client.request('remoteControl/pairing/status', options);\n }\n\n async listRemoteControlClients(\n options: v2.RemoteControlClientsListParams,\n ): Promise<CodexSurfaceRemoteControlClientPage> {\n await this.ensureConnected();\n return this.client.request('remoteControl/client/list', options);\n }\n\n async revokeRemoteControlClient(\n options: v2.RemoteControlClientsRevokeParams,\n ): Promise<v2.RemoteControlClientsRevokeResponse> {\n await this.ensureConnected();\n return this.client.request('remoteControl/client/revoke', options);\n }\n\n async readConfigRequirements(): Promise<CodexSurfaceConfigRequirements | null> {\n await this.ensureConnected();\n return (await this.client.request('configRequirements/read', undefined)).requirements;\n }\n\n patchAuthentication(\n patch: Partial<CodexSurfaceAuthentication>,\n origin: CodexSurfaceEventOrigin,\n ): void {\n const authentication = { ...this.host.getState().authentication, ...patch };\n this.host.patch({ authentication });\n this.host.emitAuthenticationChanged(authentication, origin);\n }\n\n handleDisconnect(error: Error): void {\n if (this.host.closed()) return;\n this.catalog.reset(false);\n for (const runtime of this.runtimeState.values()) {\n this.host.clearPendingForThread(runtime.threadId, error.message, 'surface_disconnected');\n runtime.activeTurnId = null;\n runtime.busy = false;\n runtime.turnStartPending = false;\n runtime.historyLoading = false;\n runtime.error = error.message;\n }\n this.approvals.denyAll();\n this.clientRequests.clear();\n this.host.patch({\n status: 'error',\n activeTurnId: null,\n busy: false,\n approvals: [],\n clientRequests: [],\n historyLoading: false,\n error: error.message,\n });\n this.host.emitSurfaceStatus('lifecycle');\n }\n\n private resetAppServerSessionState(): void {\n this.runtimeState.clear();\n this.lifecycle.resetHydrations();\n this.conversations.reset();\n this.items.reset();\n }\n\n async clearAuthenticatedSurfaceData(): Promise<void> {\n const pendingBootstrap = this.surfaceBootstrapPromise;\n if (pendingBootstrap) await pendingBootstrap.catch(() => undefined);\n this.approvals.denyAll();\n this.clientRequests.rejectAll('Codex account signed out');\n this.runtimeState.clear();\n this.lifecycle.clear();\n this.conversations.reset();\n this.host.clearConversationHandles();\n this.items.reset();\n this.bootstrappedAuthenticationKey = null;\n this.catalog.reset(true);\n this.host.patch({\n conversations: [],\n activeConversationId: null,\n activeTurnId: null,\n turns: [],\n messages: [],\n clientRequests: [],\n answeredClientRequestIds: [],\n approvals: [],\n models: [],\n modelCatalogStatus: 'notLoaded',\n skills: [],\n skillCatalogStatus: 'notLoaded',\n plugins: [],\n pluginCatalogStatus: 'notLoaded',\n permissionProfiles: [],\n approvalPresets: [],\n approvalPreset: null,\n selectedModelId: null,\n selectedReasoningEffort: null,\n selectedServiceTier: null,\n planMode: false,\n contextUsage: null,\n goal: null,\n turnGitDiff: null,\n threadStatus: null,\n rateLimits: null,\n queuedPrompts: [],\n busy: false,\n historyLoading: false,\n error: null,\n });\n }\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexSurfaceSnapshot,\n} from '@codex-app-sdk/core/surface';\nimport { codexThreadToSurfaceMessages } from './codex-conversation-history';\nimport { CodexSurfaceCatalogController } from './codex-surface-catalog-controller';\nimport { CodexSurfaceExtensionsController } from './codex-surface-extensions-controller';\nimport { activeTurnId, ensureAssistantTurnMessage } from './codex-surface-message-state';\nimport { normalizeMcpServers } from './codex-surface-mcp';\nimport {\n approvalPresetStartParams,\n collaborationMode,\n requireCatalogModel,\n selectedModel,\n sessionSelection,\n validateReasoningEffort,\n validateServiceTier,\n} from './codex-surface-settings';\nimport {\n surfaceThreadStatus,\n threadToSummary,\n upsertConversation,\n} from './codex-surface-data';\nimport type {\n CodexConversationLoadOptions,\n ForkCodexConversationOptions,\n} from './codex-surface-contracts';\nimport type { ThreadRuntimePatch, ThreadRuntimeState } from './codex-surface-runtime';\nimport { surfaceTurn } from './codex-surface-events';\n\nconst FORK_HISTORY_PAGE_SIZE = 5;\n\nexport type CodexSurfaceForkHost = {\n createRuntime(threadId: string, patch?: ThreadRuntimePatch): ThreadRuntimeState;\n emitConversationActivity(threadId: string): void;\n emitConversationPermissions(threadId: string): void;\n emitConversationSettings(threadId: string): void;\n emitConversationSkills(threadId: string): void;\n emitHistoryReplaced(threadId: string): void;\n emitSummaryUpserted(summary: CodexConversationSummary): void;\n getState(): CodexSurfaceSnapshot;\n hydrateCompleteHistory(threadId: string): Promise<void>;\n patch(patch: Partial<CodexSurfaceSnapshot>): void;\n rememberHostOptions(threadId: string, options: CodexConversationLoadOptions): void;\n requireRuntime(threadId: string): ThreadRuntimeState;\n snapshotForRuntime(runtime: ThreadRuntimeState): CodexSurfaceSnapshot;\n};\n\ntype CodexForkBoundary = {\n beforeTurnId?: string;\n lastTurnId?: string;\n};\n\nexport class CodexSurfaceForkController {\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly loadingStrategy: 'eager' | 'lazy' | undefined,\n private readonly catalog: CodexSurfaceCatalogController,\n private readonly extensions: CodexSurfaceExtensionsController,\n private readonly host: CodexSurfaceForkHost,\n ) {}\n\n async fork(\n sourceThreadId: string,\n options: ForkCodexConversationOptions = {},\n hostOptions: CodexConversationLoadOptions = {},\n boundary: CodexForkBoundary = {},\n ): Promise<string> {\n const sourceRuntime = this.host.requireRuntime(sourceThreadId);\n if (\n (sourceRuntime.busy || sourceRuntime.activeTurnId)\n && !boundary.beforeTurnId\n && (!boundary.lastTurnId || boundary.lastTurnId === sourceRuntime.activeTurnId)\n ) {\n throw new Error('Cannot fork a conversation while its current turn is still active');\n }\n\n const cwd = options.cwd ?? sourceRuntime.cwd ?? hostOptions.cwd;\n const catalogs = await this.catalog.loadConversationCatalogs(cwd ?? undefined);\n const state = this.host.getState();\n const requestedModel = options.model\n ? requireCatalogModel(state.models, options.model)\n : selectedModel(state.models, sourceRuntime.selectedModelId);\n validateReasoningEffort(requestedModel, options.reasoningEffort);\n validateServiceTier(requestedModel, options.serviceTier);\n\n const mcpServers = hostOptions.mcpServers === undefined\n ? this.extensions.defaultMcpServers\n : normalizeMcpServers(hostOptions.mcpServers);\n const extension = await this.extensions.conversationExtension({\n operation: 'start',\n conversationId: null,\n cwd: cwd ?? undefined,\n createOptions: options,\n extensionContext: hostOptions.extensionContext,\n }, options, mcpServers);\n const response = await this.client.request('thread/fork', {\n threadId: sourceThreadId,\n ...(boundary.beforeTurnId ? { beforeTurnId: boundary.beforeTurnId } : {}),\n ...(boundary.lastTurnId ? { lastTurnId: boundary.lastTurnId } : {}),\n excludeTurns: true,\n deferGoalContinuation: true,\n ...(options.cwd ? { cwd: options.cwd } : {}),\n ...(options.model && requestedModel ? { model: requestedModel.model } : {}),\n ...(options.serviceTier === undefined ? {} : { serviceTier: options.serviceTier }),\n ...(extension.baseInstructions === undefined ? {} : { baseInstructions: extension.baseInstructions }),\n ...(extension.developerInstructions === undefined\n ? {}\n : { developerInstructions: extension.developerInstructions }),\n ...(extension.config === undefined ? {} : { config: extension.config as v2.ThreadForkParams['config'] }),\n ...forkApprovalSettings(options, catalogs.approvalPresets),\n });\n if (!response.thread.id || response.thread.id === sourceThreadId) {\n throw new Error(`Codex thread/fork returned an invalid new thread id '${response.thread.id}'`);\n }\n if (options.reasoningEffort) {\n await this.client.request('thread/settings/update', {\n threadId: response.thread.id,\n effort: options.reasoningEffort,\n ...(requestedModel ? {\n collaborationMode: collaborationMode(\n sourceRuntime.planMode,\n requestedModel.model,\n options.reasoningEffort,\n ),\n } : {}),\n });\n }\n\n const [initialPage, goal] = await Promise.all([\n this.client.request('thread/turns/list', {\n threadId: response.thread.id,\n cursor: null,\n limit: FORK_HISTORY_PAGE_SIZE,\n sortDirection: 'desc',\n itemsView: 'full',\n }),\n this.client.request('thread/goal/get', { threadId: response.thread.id })\n .then((result) => result.goal)\n .catch(() => null),\n ]);\n const turns = [...initialPage.data].reverse();\n const runningTurnId = activeTurnId(turns);\n const historyMessages = codexThreadToSurfaceMessages({ ...response.thread, turns });\n const messages = runningTurnId\n ? ensureAssistantTurnMessage(historyMessages, response.thread.id, runningTurnId)\n : historyMessages;\n const effectiveLoadingStrategy = hostOptions.loadingStrategy ?? this.loadingStrategy ?? 'lazy';\n const runtime = this.host.createRuntime(response.thread.id, {\n hydrated: true,\n historyMode: response.thread.historyMode ?? 'legacy',\n loadingStrategy: effectiveLoadingStrategy,\n historyCursor: initialPage.nextCursor,\n historyHasOlder: initialPage.nextCursor !== null,\n historyLoadingOlder: false,\n fullHistoryHydrated: initialPage.nextCursor === null,\n cwd: response.cwd ?? response.thread.cwd ?? cwd ?? null,\n activeTurnId: runningTurnId,\n turns: turns.map((turn) => surfaceTurn(turn)),\n turnIds: turns.map((turn) => turn.id),\n messages,\n busy: Boolean(runningTurnId),\n goal: goal ? { ...goal } : null,\n threadStatus: surfaceThreadStatus(response.thread.status),\n ...catalogs,\n ...sessionSelection(response, state.models, this.host.snapshotForRuntime(sourceRuntime)),\n });\n if (options.reasoningEffort) runtime.selectedReasoningEffort = options.reasoningEffort;\n if (options.serviceTier !== undefined) runtime.selectedServiceTier = options.serviceTier;\n if (options.model && requestedModel) runtime.selectedModelId = requestedModel.id;\n\n this.host.rememberHostOptions(response.thread.id, {\n ...hostOptions,\n ...(runtime.cwd ? { cwd: runtime.cwd } : {}),\n loadingStrategy: effectiveLoadingStrategy,\n mcpServers,\n });\n const summary = { ...threadToSummary(response.thread), turnCount: turns.length };\n this.host.patch({\n conversations: upsertConversation(this.host.getState().conversations, summary),\n });\n this.host.emitSummaryUpserted(summary);\n this.host.emitHistoryReplaced(response.thread.id);\n this.host.emitConversationActivity(response.thread.id);\n this.host.emitConversationSettings(response.thread.id);\n this.host.emitConversationSkills(response.thread.id);\n this.host.emitConversationPermissions(response.thread.id);\n if (effectiveLoadingStrategy === 'eager' && initialPage.nextCursor !== null) {\n void this.host.hydrateCompleteHistory(response.thread.id).catch(() => undefined);\n }\n return response.thread.id;\n }\n\n async forkTurn(\n sourceThreadId: string,\n turnId: string,\n options: ForkCodexConversationOptions = {},\n hostOptions: CodexConversationLoadOptions = {},\n ): Promise<string> {\n const runtime = this.host.requireRuntime(sourceThreadId);\n if (!runtime.turnIds.includes(turnId)) {\n throw new Error(`Cannot fork at unknown Codex turn '${turnId}'`);\n }\n return this.fork(sourceThreadId, options, hostOptions, { lastTurnId: turnId });\n }\n}\n\nfunction forkApprovalSettings(\n options: ForkCodexConversationOptions,\n approvalPresets: readonly string[],\n): Pick<v2.ThreadForkParams, 'approvalPolicy' | 'approvalsReviewer' | 'permissions' | 'sandbox'> {\n if (options.approvalPreset) {\n if (!approvalPresets.includes(options.approvalPreset)) {\n throw new Error(`Approval preset '${options.approvalPreset}' is not available`);\n }\n return approvalPresetStartParams(options.approvalPreset);\n }\n return {\n ...(options.approvalMode === undefined\n ? {}\n : { approvalPolicy: options.approvalMode === 'ask' ? 'on-request' as const : 'never' as const }),\n ...(options.permissionMode === undefined\n ? {}\n : { sandbox: options.permissionMode === 'full-access' ? 'danger-full-access' as const : options.permissionMode }),\n };\n}\n","import { extname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { CodexAppServerClient } from '../codex/index';\nimport { codexImageDataUrl } from './codex-conversation-history';\n\ntype CodeBlockRange = { start: number; end: number };\ntype SourceReplacement = { start: number; end: number; value: string };\n\nconst markdownImageRegex = /(?<!\\[)!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+[\"']([^\"']*)[\"'])?\\)/g;\nconst supportedImageExtensions = new Set(['.avif', '.gif', '.jpeg', '.jpg', '.png', '.webp']);\n\n/**\n * Converts filesystem-backed Markdown images into renderer-safe data URLs.\n * The app-server owns the filesystem, so reading through fs/readFile works for\n * local, Electron, and remotely hosted Web surfaces without exposing paths to\n * the renderer.\n */\nexport class CodexMarkdownImageHydrator {\n constructor(private readonly client: CodexAppServerClient) {}\n\n async hydrate(content: string, cwd?: string | null): Promise<string> {\n const codeBlocks = findCodeBlocks(content);\n const replacements = await Promise.all(Array.from(content.matchAll(markdownImageRegex), async (match) => {\n const matchStart = match.index ?? 0;\n if (isInsideCodeBlock(matchStart, codeBlocks)) return null;\n const source = match[2]!;\n const path = localImagePath(source, cwd);\n if (!path) return null;\n\n try {\n const response = await this.client.request('fs/readFile', { path });\n const image = codexImageDataUrl(response.dataBase64);\n if (!image) return null;\n const sourceOffset = match[0].indexOf('](') + 2;\n return {\n start: matchStart + sourceOffset,\n end: matchStart + sourceOffset + source.length,\n value: image.url,\n } satisfies SourceReplacement;\n } catch {\n return null;\n }\n }));\n\n return applyReplacements(content, replacements.filter((item): item is SourceReplacement => item !== null));\n }\n}\n\nexport function localImagePath(source: string, cwd?: string | null): string | null {\n const value = source.trim();\n if (!value || /[\\u0000-\\u001f\\u007f]/.test(value)) return null;\n\n let path: string;\n if (value.startsWith('file://')) {\n try {\n path = fileURLToPath(value);\n } catch {\n return null;\n }\n } else if (/^[a-z][a-z\\d+.-]*:/i.test(value)) {\n return null;\n } else {\n try {\n path = decodeURIComponent(value);\n } catch {\n return null;\n }\n }\n\n if (!supportedImageExtensions.has(extname(path).toLowerCase())) return null;\n if (isAbsolute(path)) return path;\n if (!cwd || !isAbsolute(cwd)) return null;\n const absolutePath = resolve(cwd, path);\n const relativePath = relative(cwd, absolutePath);\n if (relativePath === '..' || relativePath.startsWith(`..${sep}`) || isAbsolute(relativePath)) {\n return null;\n }\n return absolutePath;\n}\n\nfunction applyReplacements(content: string, replacements: SourceReplacement[]): string {\n let hydrated = content;\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n hydrated = `${hydrated.slice(0, replacement.start)}${replacement.value}${hydrated.slice(replacement.end)}`;\n }\n return hydrated;\n}\n\nfunction findCodeBlocks(content: string): CodeBlockRange[] {\n const ranges: CodeBlockRange[] = [];\n const fenceRegex = /(^|\\n)(```|~~~)/g;\n let match: RegExpExecArray | null;\n\n while ((match = fenceRegex.exec(content)) !== null) {\n const fence = match[2]!;\n const prefix = match[1]!;\n const start = match.index + prefix.length;\n const closeRegex = new RegExp(`(^|\\\\n)${fence}`, 'g');\n closeRegex.lastIndex = start + fence.length;\n const close = closeRegex.exec(content);\n if (!close) {\n ranges.push({ start, end: content.length });\n break;\n }\n const end = close.index + close[1]!.length + fence.length;\n ranges.push({ start, end });\n fenceRegex.lastIndex = end;\n }\n\n return ranges;\n}\n\nfunction isInsideCodeBlock(index: number, ranges: CodeBlockRange[]): boolean {\n return ranges.some((range) => index >= range.start && index <= range.end);\n}\n","import type { CodexAppServerClient, v2 } from '../codex/index';\nimport type { CodexConversationPromptHistory } from '@codex-app-sdk/core/surface';\nimport { normalizedConversationId } from './codex-surface-prompts';\n\nexport const CODEX_PROMPT_HISTORY_TURN_LIMIT = 100;\n\nconst contextTagRegex = /<context>[\\s\\S]*?<\\/context>\\s*/g;\nconst inAppBrowserContextTagRegex = /<in-app-browser-context(?:\\s[^>]*)?>[\\s\\S]*?<\\/in-app-browser-context>\\s*/g;\nconst ambientRequestHeadingRegex = /^[ \\t]*## My request for Codex:[ \\t]*$/m;\n\nexport async function readPromptHistory(\n client: CodexAppServerClient,\n conversationId: string,\n): Promise<CodexConversationPromptHistory> {\n const threadId = normalizedConversationId(conversationId);\n const response = await client.request('thread/turns/list', {\n threadId,\n cursor: null,\n limit: CODEX_PROMPT_HISTORY_TURN_LIMIT,\n sortDirection: 'desc',\n itemsView: 'summary',\n });\n return {\n conversationId: threadId,\n prompts: promptsFromSummaryTurns(response.data),\n };\n}\n\n/** Extracts only visible user-authored text without retaining the turn payload. */\nexport function promptsFromSummaryTurns(turns: readonly v2.Turn[]): string[] {\n return [...turns].reverse().flatMap((turn) => turn.items.flatMap((item) => {\n if (item.type !== 'userMessage') return [];\n const text = item.content\n .flatMap((input) => input.type === 'text' ? [input.text] : [])\n .join('');\n const prompt = stripPromptContext(text);\n return prompt && prompt !== '(no user instructions)' ? [prompt] : [];\n }));\n}\n\nfunction stripPromptContext(content: string): string {\n const withoutContext = content.replace(contextTagRegex, '');\n const withoutBrowserContext = withoutContext.replace(inAppBrowserContextTagRegex, '');\n return (withoutBrowserContext === withoutContext\n ? withoutBrowserContext\n : withoutBrowserContext.replace(ambientRequestHeadingRegex, ''))\n .trim();\n}\n","import type { CodexAppServerClient, ServerNotification, v2 } from '../codex/index';\nimport type { CodexSurfaceSnapshot } from '@codex-app-sdk/core/surface';\nimport type {\n CodexGeneratedText,\n GenerateCodexTextOptions,\n} from './codex-surface-contracts';\nimport {\n defaultReasoningEffort,\n requireCatalogModel,\n selectedModel,\n validateReasoningEffort,\n validateServiceTier,\n} from './codex-surface-settings';\n\nconst DEFAULT_GENERATION_TIMEOUT_MS = 120_000;\n\ntype PendingGeneration = {\n readonly promise: Promise<CodexGeneratedText>;\n readonly resolve: (result: CodexGeneratedText) => void;\n readonly reject: (error: Error) => void;\n readonly texts: string[];\n turnId: string | null;\n};\n\nexport type CodexSurfaceTextGenerationHost = {\n ensureConnected(): Promise<void>;\n getSnapshot(): CodexSurfaceSnapshot;\n};\n\n/** Runs isolated, non-persisted text turns without projecting them into surface state. */\nexport class CodexSurfaceTextGenerationController {\n private readonly hiddenThreadIds = new Set<string>();\n private readonly pendingByThread = new Map<string, PendingGeneration>();\n\n constructor(\n private readonly client: CodexAppServerClient,\n private readonly defaultCwd: string | undefined,\n private readonly host: CodexSurfaceTextGenerationHost,\n ) {}\n\n /** Returns true when a notification belongs to an ephemeral thread and must stay hidden. */\n handleNotification(notification: ServerNotification): boolean {\n if (notification.method === 'thread/started' && notification.params.thread.ephemeral) {\n this.hiddenThreadIds.add(notification.params.thread.id);\n }\n const threadId = notificationThreadId(notification);\n if (!threadId || !this.hiddenThreadIds.has(threadId)) return false;\n\n const pending = this.pendingByThread.get(threadId);\n if (pending) this.consumeNotification(pending, notification);\n if (notification.method === 'thread/closed' || notification.method === 'thread/deleted') {\n this.hiddenThreadIds.delete(threadId);\n }\n return true;\n }\n\n async generate(prompt: string, options: GenerateCodexTextOptions = {}): Promise<CodexGeneratedText> {\n const text = prompt.trim();\n if (!text) throw new Error('Generation prompt cannot be empty');\n if (options.signal?.aborted) throw abortedError();\n await this.host.ensureConnected();\n\n const state = this.host.getSnapshot();\n const currentModel = selectedModel(state.models, state.selectedModelId);\n const requestedModel = options.model ? requireCatalogModel(state.models, options.model) : currentModel;\n const model = requestedModel?.model;\n const reasoningEffort = options.reasoningEffort\n ?? (requestedModel?.id === currentModel?.id\n ? state.selectedReasoningEffort\n : requestedModel ? defaultReasoningEffort(requestedModel) : null)\n ?? undefined;\n const serviceTier = options.serviceTier !== undefined\n ? options.serviceTier\n : requestedModel?.id === currentModel?.id\n ? state.selectedServiceTier\n : requestedModel?.defaultServiceTier ?? null;\n validateReasoningEffort(requestedModel, reasoningEffort);\n validateServiceTier(requestedModel, serviceTier);\n\n const started = await this.client.request('thread/start', {\n approvalPolicy: 'never',\n approvalsReviewer: 'user',\n ...(options.baseInstructions === undefined ? {} : { baseInstructions: options.baseInstructions }),\n ...(options.developerInstructions === undefined\n ? {}\n : { developerInstructions: options.developerInstructions }),\n cwd: options.cwd ?? this.defaultCwd,\n dynamicTools: [],\n environments: [],\n ephemeral: true,\n ...(model ? { model } : {}),\n permissions: ':read-only',\n serviceTier,\n serviceName: 'codex_app_sdk',\n threadSource: 'sdk_ephemeral_generation',\n });\n const threadId = started.thread.id;\n if (!started.thread.ephemeral) {\n await ignoreFailure(() => this.client.request('thread/delete', { threadId }));\n throw new Error('Codex app-server did not create an ephemeral generation thread');\n }\n this.hiddenThreadIds.add(threadId);\n if (options.signal?.aborted) {\n await ignoreFailure(() => this.client.request('thread/unsubscribe', { threadId }));\n this.hiddenThreadIds.delete(threadId);\n throw abortedError();\n }\n const pending = createPendingGeneration();\n this.pendingByThread.set(threadId, pending);\n let turnId: string | null = null;\n let completed = false;\n const abort = () => pending.reject(abortedError());\n options.signal?.addEventListener('abort', abort);\n const timeout = setTimeout(() => {\n pending.reject(new Error('Codex ephemeral generation timed out'));\n }, options.timeoutMs ?? DEFAULT_GENERATION_TIMEOUT_MS);\n\n try {\n const turnResponse = await this.client.request('turn/start', {\n threadId,\n input: [{ type: 'text', text, text_elements: [] }],\n environments: [],\n permissions: ':read-only',\n ...(model ? { model } : {}),\n ...(reasoningEffort ? { effort: reasoningEffort as v2.TurnStartParams['effort'] } : {}),\n serviceTier,\n ...(options.outputSchema === undefined\n ? {}\n : { outputSchema: options.outputSchema as v2.TurnStartParams['outputSchema'] }),\n });\n turnId = turnResponse.turn.id;\n pending.turnId = turnId;\n completeFromTurn(pending, turnResponse.turn);\n const result = await pending.promise;\n completed = true;\n return result;\n } finally {\n clearTimeout(timeout);\n options.signal?.removeEventListener('abort', abort);\n this.pendingByThread.delete(threadId);\n if (!completed && turnId) {\n const interruptedTurnId = turnId;\n await ignoreFailure(() => this.client.request('turn/interrupt', {\n threadId, turnId: interruptedTurnId,\n }));\n }\n await ignoreFailure(() => this.client.request('thread/unsubscribe', { threadId }));\n this.hiddenThreadIds.delete(threadId);\n }\n }\n\n close(error = new Error('Codex surface closed')): void {\n for (const pending of this.pendingByThread.values()) pending.reject(error);\n this.pendingByThread.clear();\n this.hiddenThreadIds.clear();\n }\n\n private consumeNotification(pending: PendingGeneration, notification: ServerNotification): void {\n if (notification.method === 'item/completed') {\n if (pending.turnId && notification.params.turnId !== pending.turnId) return;\n if (!pending.turnId) pending.turnId = notification.params.turnId;\n if (notification.params.item.type === 'agentMessage') {\n const text = notification.params.item.text.trim();\n if (text) pending.texts.push(text);\n }\n return;\n }\n if (notification.method === 'error') {\n if (pending.turnId && notification.params.turnId !== pending.turnId) return;\n if (!notification.params.willRetry) pending.reject(new Error(notification.params.error.message));\n return;\n }\n if (notification.method === 'turn/completed') {\n if (pending.turnId && notification.params.turn.id !== pending.turnId) return;\n completeFromTurn(pending, notification.params.turn);\n }\n }\n}\n\nasync function ignoreFailure(operation: () => Promise<unknown>): Promise<void> {\n try {\n await operation();\n } catch {\n // Best-effort cleanup must not replace the generation result or its original failure.\n }\n}\n\nfunction createPendingGeneration(): PendingGeneration {\n let resolvePromise!: (result: CodexGeneratedText) => void;\n let rejectPromise!: (error: Error) => void;\n const pending: PendingGeneration = {\n promise: new Promise<CodexGeneratedText>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }),\n resolve: (result) => {\n resolvePromise(result);\n },\n reject: (error) => {\n rejectPromise(error);\n },\n texts: [],\n turnId: null,\n };\n // The turn/start RPC may still be in flight when an abort, disconnect, or\n // timeout rejects completion. Mark the promise handled until generate awaits it.\n void pending.promise.catch(() => undefined);\n return pending;\n}\n\nfunction completeFromTurn(pending: PendingGeneration, turn: v2.Turn): void {\n for (const item of turn.items) {\n if (item.type !== 'agentMessage') continue;\n const text = item.text.trim();\n if (text) pending.texts.push(text);\n }\n if (turn.status === 'failed') {\n pending.reject(new Error(turn.error?.message ?? 'Codex ephemeral generation failed'));\n return;\n }\n if (turn.status === 'interrupted') {\n pending.reject(new Error('Codex ephemeral generation was interrupted'));\n return;\n }\n if (turn.status !== 'completed') return;\n const text = pending.texts.at(-1);\n if (!text) {\n pending.reject(new Error('Codex ephemeral generation returned no text'));\n return;\n }\n pending.resolve({ text });\n}\n\nfunction notificationThreadId(notification: ServerNotification): string | null {\n if (notification.method === 'thread/started') return notification.params.thread.id;\n const params = notification.params as { threadId?: unknown };\n return typeof params.threadId === 'string' ? params.threadId : null;\n}\n\nfunction abortedError(): Error {\n return new Error('Codex ephemeral generation was aborted');\n}\n","import {\n CodexAppServerClient,\n type ServerNotification,\n type v2,\n} from '../codex/index';\nimport type {\n CodexConversationSummary,\n CodexConversationEvent,\n CodexConversationHistory,\n CodexConversationHistoryPage,\n CodexConversationSnapshot,\n CodexSurfaceApprovalDecision,\n CodexSurfaceApprovalScope,\n CodexSurfaceChatGptDeviceCodeLogin,\n CodexSurfaceChatGptLogin,\n CodexSurfaceClientRequestResponse,\n CodexSurfaceEvent,\n CodexSurfaceEventOrigin,\n CodexSurfaceModel,\n CodexSurfaceSnapshot,\n CodexSurfaceSkill,\n CreateCodexConversationOptions,\n ListCodexConversationsOptions,\n ListCodexModelsOptions,\n SendCodexMessageOptions,\n StartCodexRealtimeOptions,\n StartCodexLiveChatOptions,\n StartCodexReviewOptions,\n SurfaceMessage,\n UpdateCodexConversationSettings,\n} from '@codex-app-sdk/core/surface';\nimport {\n CodexAppServerStdioTransport,\n} from './codex-stdio-transport';\nimport {\n CodexAppServerUnixSocketTransport,\n} from './codex-unix-socket-transport';\nimport {\n errorMessage,\n normalizedConversationId,\n} from './codex-surface-prompts';\nimport { startCodexRealtimeSession } from './codex-surface-realtime-session';\nimport type {\n CodexConversation,\n CodexConversationForkResult,\n CodexConversationHostOptions,\n CodexConversationLoadOptions,\n CodexRealtimeSession,\n CodexSurfaceConfigRequirements,\n CodexSurfaceOptions,\n CodexSurfaceRemoteControlClientPage,\n CodexSurfaceRemoteControlPairing,\n CodexSurfaceRemoteControlPairingStatus,\n CodexSurfaceRemoteControlStatus,\n CodexGeneratedText,\n ForkCodexConversationOptions,\n GenerateCodexTextOptions,\n ListCodexSkillsOptions,\n} from './codex-surface-contracts';\nimport {\n initialSurfaceSnapshot,\n type ThreadRuntimePatch,\n type ThreadRuntimeState,\n} from './codex-surface-runtime';\nimport {\n initialAuthentication,\n} from './codex-surface-authentication';\nimport {\n isUnixSocketTransportOptions,\n surfaceTransportOptions,\n} from './codex-surface-transport-options';\nimport { CodexSurfaceAuthenticationController } from './codex-surface-authentication-controller';\nimport { createCodexConversationHandle } from './codex-conversation-handle';\nimport { CodexSurfaceItemsController } from './codex-surface-items-controller';\nimport { CodexSurfaceClientRequestsController } from './codex-surface-client-requests-controller';\nimport { CodexSurfaceCatalogController } from './codex-surface-catalog-controller';\nimport { CodexSurfaceApprovalsController } from './codex-surface-approvals-controller';\nimport { CodexSurfaceExtensionsController } from './codex-surface-extensions-controller';\nimport { CodexSurfaceConversationsController } from './codex-surface-conversations-controller';\nimport { CodexSurfaceConversationSettingsController } from './codex-surface-conversation-settings-controller';\nimport { CodexSurfaceTurnActionsController } from './codex-surface-turn-actions-controller';\nimport { CodexSurfaceMessagesController } from './codex-surface-messages-controller';\nimport { CodexSurfaceLifecycleController } from './codex-surface-lifecycle-controller';\nimport { CodexSurfaceNotificationsController } from './codex-surface-notifications-controller';\nimport { CodexSurfaceRuntimeController } from './codex-surface-runtime-controller';\nimport { CodexSurfaceConnectionController } from './codex-surface-connection-controller';\nimport { CodexSurfaceForkController } from './codex-surface-fork-controller';\nimport { CodexMarkdownImageHydrator } from './codex-markdown-images';\nimport {\n readPromptHistory,\n} from './codex-surface-prompt-history';\nimport { CodexSurfaceTextGenerationController } from './codex-surface-text-generation-controller';\n\nexport type {\n CodexAppServerTransportOptions,\n CodexConversation,\n CodexConversationDefaults,\n CodexConversationForkResult,\n CodexConversationHostOptions,\n CodexConversationLoadOptions,\n CodexDynamicTool,\n CodexDynamicToolCall,\n CodexDynamicToolContent,\n CodexDynamicToolResult,\n CodexRealtimeSession,\n CodexSurfaceConfigRequirements,\n CodexSurfaceExtension,\n CodexSurfaceOptions,\n CodexSurfaceRemoteControlClient,\n CodexSurfaceRemoteControlClientPage,\n CodexSurfaceRemoteControlPairing,\n CodexSurfaceRemoteControlPairingStatus,\n CodexSurfaceRemoteControlStatus,\n CodexThreadStartExtension,\n CodexGeneratedText,\n ForkCodexConversationOptions,\n GenerateCodexTextOptions,\n ListCodexSkillsOptions,\n} from './codex-surface-contracts';\n\nexport type {\n CodexMcpServerDefinition,\n CodexMcpServerTransport,\n CodexMcpServerToolApprovalMode,\n} from './codex-surface-mcp';\n\ntype StateListener = (snapshot: CodexSurfaceSnapshot) => void;\ntype ConversationStateListener = (snapshot: CodexConversationSnapshot) => void;\ntype SurfaceEventListener = (event: CodexSurfaceEvent) => void;\ntype ConversationEventListener = (event: CodexConversationEvent) => void;\ntype SurfaceEventInput = CodexSurfaceEvent extends infer Event\n ? Event extends CodexSurfaceEvent\n ? Omit<Event, 'seq' | 'occurredAt' | 'origin'>\n : never\n : never;\n\nexport class CodexSurface {\n private readonly client: CodexAppServerClient;\n private readonly listeners = new Set<StateListener>();\n private readonly eventListeners = new Set<SurfaceEventListener>();\n private readonly conversationListeners = new Map<string, Set<ConversationStateListener>>();\n private readonly conversationHandles = new Map<string, CodexConversation>();\n private readonly extensions: CodexSurfaceExtensionsController;\n private readonly authentication: CodexSurfaceAuthenticationController;\n private readonly items: CodexSurfaceItemsController;\n private readonly clientRequests: CodexSurfaceClientRequestsController;\n private readonly catalog: CodexSurfaceCatalogController;\n private readonly approvals: CodexSurfaceApprovalsController;\n private readonly conversations: CodexSurfaceConversationsController;\n private readonly conversationSettings: CodexSurfaceConversationSettingsController;\n private readonly turnActions: CodexSurfaceTurnActionsController;\n private readonly messagesController: CodexSurfaceMessagesController;\n private readonly lifecycle: CodexSurfaceLifecycleController;\n private readonly forks: CodexSurfaceForkController;\n private readonly notifications: CodexSurfaceNotificationsController;\n private readonly runtimeState: CodexSurfaceRuntimeController;\n private readonly markdownImages: CodexMarkdownImageHydrator;\n private readonly connection: CodexSurfaceConnectionController;\n private readonly textGeneration: CodexSurfaceTextGenerationController;\n private readonly unsubscribeDisconnect: () => void;\n private readonly unsubscribeNotification: () => void;\n private readonly unsubscribeToolInputRequests: () => void;\n private readonly unsubscribeMcpElicitationRequests: () => void;\n private eventSequence = 0;\n private readonly pendingMarkdownImageHydrations = new Set<string>();\n private closed = false;\n private state: CodexSurfaceSnapshot = initialSurfaceSnapshot(initialAuthentication());\n\n constructor(private readonly options: CodexSurfaceOptions = {}) {\n this.extensions = new CodexSurfaceExtensionsController(\n options.extensions ?? [],\n options.mcpServers ?? [],\n (threadId) => this.lifecycle.hostOptions(threadId),\n );\n const transportOptions = surfaceTransportOptions(options);\n this.client = options.client ?? new CodexAppServerClient(\n isUnixSocketTransportOptions(transportOptions)\n ? new CodexAppServerUnixSocketTransport(transportOptions)\n : new CodexAppServerStdioTransport(transportOptions),\n );\n this.markdownImages = new CodexMarkdownImageHydrator(this.client);\n this.authentication = new CodexSurfaceAuthenticationController(this.client, {\n bootstrapSurfaceData: (force) => this.connection.bootstrapSurfaceData(force),\n clearAuthenticatedSurfaceData: () => this.connection.clearAuthenticatedSurfaceData(),\n getSnapshot: () => this.getSnapshot(),\n patchAuthentication: (patch, origin) => this.connection.patchAuthentication(patch, origin),\n reportError: (error) => this.patch({ error: errorMessage(error) }),\n });\n this.items = new CodexSurfaceItemsController({\n assistantMessageForTurn: (threadId, turnId) => this.assistantMessageForTurn(threadId, turnId),\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n emitSummaryUpserted: (summary, reason, origin) => this.emitSummaryUpserted(summary, reason, origin),\n getState: () => this.state,\n markRuntimeTurnActive: (runtime, turnId) => this.markRuntimeTurnActive(runtime, turnId),\n messageContainingTool: (threadId, turnId, itemId) => (\n this.messageContainingTool(threadId, turnId, itemId)\n ),\n patch: (patch) => this.patch(patch),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n sendNextQueuedPrompt: (threadId) => { void this.messagesController.sendNextQueuedPrompt(threadId); },\n });\n this.approvals = new CodexSurfaceApprovalsController(this.client, {\n activeConversationId: () => this.state.activeConversationId,\n createRuntime: (threadId, patch) => this.createRuntime(threadId, patch),\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n markRuntimeTurnActive: (runtime, turnId) => this.markRuntimeTurnActive(runtime, turnId),\n maybeClearWaitingBusy: (threadId) => this.clientRequests.maybeClearWaitingBusy(threadId),\n patch: (patch) => this.patch(patch),\n patchConversationStatus: (threadId, status) => this.patchConversationStatus(threadId, status),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n });\n this.clientRequests = new CodexSurfaceClientRequestsController({\n activeConversationId: () => this.state.activeConversationId,\n answerAsyncQuestion: (threadId, prompt, displayText) => (\n this.messagesController.answerAsyncQuestion(threadId, prompt, displayText)\n ),\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n hasPendingApproval: (threadId) => this.approvals.hasForThread(threadId),\n markRuntimeTurnActive: (runtime, turnId) => this.markRuntimeTurnActive(runtime, turnId),\n messageContainingTool: (threadId, turnId, itemId) => (\n this.messageContainingTool(threadId, turnId, itemId)\n ),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n });\n this.runtimeState = new CodexSurfaceRuntimeController(\n this.approvals,\n this.clientRequests,\n {\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n getState: () => this.state,\n notifyConversationListeners: (threadId) => this.notifyConversationListeners(threadId),\n patch: (patch, conversationId) => this.patch(patch, conversationId),\n schedulePluginRefresh: () => this.catalog.schedulePluginRefresh(),\n },\n );\n this.conversationSettings = new CodexSurfaceConversationSettingsController(\n this.client,\n {\n approvalMode: options.approvalMode,\n approvalPreset: options.approvalPreset,\n permissionMode: options.permissionMode,\n },\n {\n createConversation: async () => { await this.createConversation(); },\n emitConversationSettings: (threadId, origin) => this.emitConversationSettings(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n emitSummaryUpserted: (summary, reason, origin) => this.emitSummaryUpserted(summary, reason, origin),\n ensureConnected: () => this.ensureConnected(),\n ensureThreadReady: (threadId) => this.ensureThreadReady(threadId),\n getSnapshot: () => this.getSnapshot(),\n getState: () => this.state,\n patch: (patch) => this.patch(patch),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n snapshotForRuntime: (runtime) => this.snapshotForRuntime(runtime),\n },\n );\n this.turnActions = new CodexSurfaceTurnActionsController(this.client, {\n createConversation: async () => { await this.createConversation(); },\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n emitHistoryReplaced: (threadId, reason, origin) => this.emitHistoryReplaced(threadId, reason, origin),\n emitSummaryUpserted: (summary, reason, origin) => this.emitSummaryUpserted(summary, reason, origin),\n ensureThreadReady: (threadId) => this.ensureThreadReady(threadId),\n getSnapshot: () => this.getSnapshot(),\n getState: () => this.state,\n hydrateCompleteHistory: (threadId, options) => this.conversations.hydrateCompleteHistory(threadId, options),\n patch: (patch) => this.patch(patch),\n patchConversationStatus: (threadId, status, origin) => this.patchConversationStatus(threadId, status, origin),\n patchConversationTurnCount: (threadId, count, origin) => this.patchConversationTurnCount(threadId, count, origin),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n sendMessageToThread: (threadId, prompt, options) => this.messagesController.sendToThread(threadId, prompt, options),\n });\n this.messagesController = new CodexSurfaceMessagesController(this.client, {\n clearGoalForThread: (threadId) => this.conversationSettings.clearGoalForThread(threadId),\n compactForThread: (threadId) => this.turnActions.compactForThread(threadId),\n createConversation: async () => { await this.createConversation(); },\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n ensureConnected: () => this.ensureConnected(),\n ensureThreadReady: (threadId) => this.ensureThreadReady(threadId),\n getSnapshot: () => this.getSnapshot(),\n getState: () => this.state,\n patchConversationStatus: (threadId, status, origin) => this.patchConversationStatus(threadId, status, origin),\n patchConversationTurnCount: (threadId, count, origin) => this.patchConversationTurnCount(threadId, count, origin),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n setGoal: (objective) => this.conversationSettings.setGoal(objective),\n setGoalForThread: (threadId, objective) => this.conversationSettings.setGoalForThread(threadId, objective),\n snapshotForRuntime: (runtime) => this.snapshotForRuntime(runtime),\n startReview: (options) => this.turnActions.startReview(options),\n startReviewForThread: (threadId, options) => this.turnActions.startReviewForThread(threadId, options),\n updateSettings: (settings) => this.conversationSettings.update(settings),\n updateSettingsForThread: (threadId, settings) => this.conversationSettings.updateForThread(threadId, settings),\n });\n this.catalog = new CodexSurfaceCatalogController(this.client, options.cwd, {\n authenticationBlocksBootstrap: () => this.authentication.blocksBootstrap(),\n emitConversationSkills: (threadId, origin) => this.emitConversationSkills(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n ensureConnected: () => this.ensureConnected(),\n getState: () => this.state,\n isClosed: () => this.closed,\n patch: (patch) => this.patch(patch),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n preferredApprovalPreset: () => this.conversationSettings.preferredApprovalPreset(),\n runtimes: () => this.runtimeState.values(),\n });\n this.conversations = new CodexSurfaceConversationsController(\n this.client,\n options.conversationLimit,\n {\n emitHistoryPrepended: (threadId, messages, origin) => this.emitHistoryPrepended(threadId, messages, origin),\n emitSummaryUpserted: (summary, reason, origin) => this.emitSummaryUpserted(summary, reason, origin),\n ensureConnected: () => this.ensureConnected(),\n getSnapshot: () => this.getSnapshot(),\n getState: () => this.state,\n patch: (patch) => this.patch(patch),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n removeThread: (threadId, reason, origin) => this.removeThread(threadId, reason, origin),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n runtime: (threadId) => this.runtimeState.get(threadId),\n schedulePluginRefresh: (force) => this.catalog.schedulePluginRefresh(force),\n },\n );\n this.lifecycle = new CodexSurfaceLifecycleController(\n this.client,\n options,\n this.catalog,\n this.extensions,\n this.conversationSettings,\n this.conversations,\n {\n activateRuntime: (runtime) => this.activateRuntime(runtime),\n createRuntime: (threadId, patch) => this.createRuntime(threadId, patch),\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitConversationPermissions: (threadId, origin) => this.emitConversationPermissions(threadId, origin),\n emitConversationSettings: (threadId, origin) => this.emitConversationSettings(threadId, origin),\n emitConversationSkills: (threadId, origin) => this.emitConversationSkills(threadId, origin),\n emitHistoryReplaced: (threadId, reason, origin) => this.emitHistoryReplaced(threadId, reason, origin),\n emitSelected: (conversationId) => this.emitEvent('action', {\n type: 'conversation.selected',\n payload: { conversationId },\n }),\n emitSummaryUpserted: (summary, reason, origin) => this.emitSummaryUpserted(summary, reason, origin),\n ensureConnected: () => this.ensureConnected(),\n getSnapshot: () => this.getSnapshot(),\n getState: () => this.state,\n patch: (patch) => this.patch(patch),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n runtime: (threadId) => this.runtimeState.get(threadId),\n runtimeProjection: (runtime) => this.runtimeProjection(runtime),\n snapshotForRuntime: (runtime) => this.snapshotForRuntime(runtime),\n },\n );\n this.forks = new CodexSurfaceForkController(\n this.client,\n options.loadingStrategy,\n this.catalog,\n this.extensions,\n {\n createRuntime: (threadId, patch) => this.createRuntime(threadId, patch),\n emitConversationActivity: (threadId) => this.emitConversationActivity(threadId, 'action'),\n emitConversationPermissions: (threadId) => this.emitConversationPermissions(threadId, 'action'),\n emitConversationSettings: (threadId) => this.emitConversationSettings(threadId, 'action'),\n emitConversationSkills: (threadId) => this.emitConversationSkills(threadId, 'action'),\n emitHistoryReplaced: (threadId) => this.emitHistoryReplaced(threadId, 'fork', 'action'),\n emitSummaryUpserted: (summary) => this.emitSummaryUpserted(summary, 'created', 'action'),\n getState: () => this.state,\n hydrateCompleteHistory: (threadId) => this.conversations.hydrateCompleteHistory(threadId),\n patch: (patch) => this.patch(patch),\n rememberHostOptions: (threadId, hostOptions) => (\n this.lifecycle.rememberHostOptions(threadId, hostOptions)\n ),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n snapshotForRuntime: (runtime) => this.snapshotForRuntime(runtime),\n },\n );\n this.connection = new CodexSurfaceConnectionController(\n this.client,\n options,\n this.authentication,\n this.approvals,\n this.catalog,\n this.clientRequests,\n this.conversations,\n this.items,\n this.lifecycle,\n this.runtimeState,\n {\n clearConversationHandles: () => this.conversationHandles.clear(),\n clearPendingForThread: (threadId, reason, eventReason) => (\n this.clearPendingForThread(threadId, reason, eventReason)\n ),\n closed: () => this.closed,\n emitAuthenticationChanged: (authentication, origin) => this.emitEvent(origin, {\n type: 'authentication.changed',\n payload: { authentication: structuredClone(authentication) },\n }),\n emitSurfaceStatus: (origin) => this.emitSurfaceStatus(origin),\n getSnapshot: () => this.getSnapshot(),\n getState: () => this.state,\n patch: (patch) => this.patch(patch),\n },\n );\n this.notifications = new CodexSurfaceNotificationsController(\n this.authentication,\n this.approvals,\n this.catalog,\n this.clientRequests,\n this.conversations,\n this.items,\n {\n clearPendingForThread: (threadId, reason, eventReason) => (\n this.clearPendingForThread(threadId, reason, eventReason)\n ),\n createRuntime: (threadId, patch) => this.createRuntime(threadId, patch),\n emitConversationActivity: (threadId, origin) => this.emitConversationActivity(threadId, origin),\n emitConversationPermissions: (threadId, origin) => this.emitConversationPermissions(threadId, origin),\n emitConversationSettings: (threadId, origin) => this.emitConversationSettings(threadId, origin),\n emitConversationSkills: (threadId, origin) => this.emitConversationSkills(threadId, origin),\n emitEvent: (origin, input) => this.emitEvent(origin, input),\n emitSummaryUpserted: (summary, reason, origin) => this.emitSummaryUpserted(summary, reason, origin),\n getState: () => this.state,\n markRuntimeTurnActive: (runtime, turnId) => this.markRuntimeTurnActive(runtime, turnId),\n patch: (patch) => this.patch(patch),\n patchConversationStatus: (threadId, status, origin) => this.patchConversationStatus(threadId, status, origin),\n patchConversationTurnCount: (threadId, count) => this.patchConversationTurnCount(threadId, count),\n patchRuntime: (threadId, patch) => this.patchRuntime(threadId, patch),\n removeThread: (threadId, reason) => this.removeThread(threadId, reason),\n requireRuntime: (threadId) => this.requireRuntime(threadId),\n runtime: (threadId) => this.runtimeState.get(threadId),\n runtimes: () => this.runtimeState.values(),\n snapshotForRuntime: (runtime) => this.snapshotForRuntime(runtime),\n unknownNotification: (notification) => this.handleUnknownNotification(notification),\n },\n );\n this.textGeneration = new CodexSurfaceTextGenerationController(\n this.client,\n options.cwd,\n {\n ensureConnected: () => this.ensureConnected(),\n getSnapshot: () => this.getSnapshot(),\n },\n );\n this.unsubscribeNotification = this.client.onNotification((notification) => {\n if (!this.textGeneration.handleNotification(notification)) this.notifications.handle(notification);\n });\n this.unsubscribeDisconnect = this.client.onDisconnect((error) => {\n this.textGeneration.close(error);\n this.connection.handleDisconnect(error);\n });\n this.unsubscribeToolInputRequests = this.client.onServerRequest(\n 'item/tool/requestUserInput',\n (request, responder) => this.clientRequests.handleToolInputRequest(request, responder),\n );\n this.unsubscribeMcpElicitationRequests = this.client.onServerRequest(\n 'mcpServer/elicitation/request',\n (request, responder) => this.clientRequests.handleMcpElicitationRequest(request, responder),\n );\n this.client.onServerRequest('item/tool/call', async (request, responder) => {\n await this.extensions.handleDynamicToolCall(request, responder);\n });\n this.client.onServerRequest('account/chatgptAuthTokens/refresh', (_request, responder) => {\n responder.reject({ code: -32601, message: 'ChatGPT token refresh must be provided by the host application' });\n });\n this.client.onServerRequest('attestation/generate', (_request, responder) => {\n responder.reject({ code: -32601, message: 'Client attestation must be provided by the host application' });\n });\n this.client.onServerRequest('currentTime/read', (_request, responder) => {\n responder.resolve({ currentTimeAt: Math.floor(Date.now() / 1000) });\n });\n }\n\n connect(): Promise<CodexSurfaceSnapshot> {\n return this.connection.connect();\n }\n\n /** Runs one non-persisted Codex turn without changing visible surface state. */\n generateText(prompt: string, options: GenerateCodexTextOptions = {}): Promise<CodexGeneratedText> {\n return this.textGeneration.generate(prompt, options);\n }\n\n async refreshAccount(): Promise<CodexSurfaceSnapshot> {\n return this.connection.refreshAccount();\n }\n\n async startChatGptLogin(): Promise<CodexSurfaceChatGptLogin> {\n return this.connection.startChatGptLogin();\n }\n\n async startChatGptDeviceCodeLogin(): Promise<CodexSurfaceChatGptDeviceCodeLogin> {\n return this.connection.startChatGptDeviceCodeLogin();\n }\n\n /** Reads the app-server's current remote-control connection state. */\n async readRemoteControlStatus(): Promise<CodexSurfaceRemoteControlStatus> {\n return this.connection.readRemoteControlStatus();\n }\n\n /** Enables the app-server's official remote-control connection. */\n async enableRemoteControl(\n options: v2.RemoteControlEnableParams = {},\n ): Promise<CodexSurfaceRemoteControlStatus> {\n return this.connection.enableRemoteControl(options);\n }\n\n /** Disables the app-server's official remote-control connection. */\n async disableRemoteControl(\n options: v2.RemoteControlDisableParams = {},\n ): Promise<CodexSurfaceRemoteControlStatus> {\n return this.connection.disableRemoteControl(options);\n }\n\n /** Starts a one-time remote-control pairing flow. Treat the returned code as opaque. */\n async startRemoteControlPairing(\n options: v2.RemoteControlPairingStartParams = {},\n ): Promise<CodexSurfaceRemoteControlPairing> {\n return this.connection.startRemoteControlPairing(options);\n }\n\n /** Checks whether a remote-control pairing code has been claimed. */\n async readRemoteControlPairingStatus(\n options: v2.RemoteControlPairingStatusParams = {},\n ): Promise<CodexSurfaceRemoteControlPairingStatus> {\n return this.connection.readRemoteControlPairingStatus(options);\n }\n\n /** Lists devices paired with a remote-control environment. */\n async listRemoteControlClients(\n options: v2.RemoteControlClientsListParams,\n ): Promise<CodexSurfaceRemoteControlClientPage> {\n return this.connection.listRemoteControlClients(options);\n }\n\n /** Revokes one device from a remote-control environment. */\n async revokeRemoteControlClient(\n options: v2.RemoteControlClientsRevokeParams,\n ): Promise<v2.RemoteControlClientsRevokeResponse> {\n return this.connection.revokeRemoteControlClient(options);\n }\n\n /** Reads managed app-server requirements, including allowRemoteControl. */\n async readConfigRequirements(): Promise<CodexSurfaceConfigRequirements | null> {\n return this.connection.readConfigRequirements();\n }\n\n async cancelLogin(loginId = this.state.authentication.login.loginId ?? ''): Promise<CodexSurfaceSnapshot> {\n return this.connection.cancelLogin(loginId);\n }\n\n async logout(): Promise<CodexSurfaceSnapshot> {\n return this.connection.logout();\n }\n\n\n async refreshConversations(): Promise<CodexSurfaceSnapshot> {\n return this.conversations.refresh();\n }\n\n async listConversations(options: ListCodexConversationsOptions = {}): Promise<CodexConversationSummary[]> {\n return this.conversations.list(options);\n }\n\n /** Reads one conversation's metadata without loading its turns or runtime. */\n async readConversationSummary(conversationId: string): Promise<CodexConversationSummary> {\n return this.conversations.readSummary(conversationId);\n }\n\n async archiveConversation(conversationId: string): Promise<CodexSurfaceSnapshot> {\n return this.conversations.archive(conversationId);\n }\n\n async deleteConversation(conversationId: string): Promise<CodexSurfaceSnapshot> {\n return this.conversations.delete(conversationId);\n }\n\n async unarchiveConversation(conversationId: string): Promise<CodexSurfaceSnapshot> {\n return this.conversations.unarchive(conversationId);\n }\n\n async listModels(options: ListCodexModelsOptions = {}): Promise<CodexSurfaceModel[]> {\n return this.catalog.listModels(options);\n }\n\n async listSkills(options: ListCodexSkillsOptions = {}): Promise<CodexSurfaceSkill[]> {\n return this.catalog.listSkills(options);\n }\n\n async createConversation(\n options: CreateCodexConversationOptions = {},\n hostOptions: CodexConversationHostOptions = {},\n ): Promise<CodexSurfaceSnapshot> {\n return this.lifecycle.create(options, hostOptions);\n }\n\n /** Forks the latest completed source conversation without selecting the new conversation. */\n async forkConversation(\n sourceConversationId: string,\n options: ForkCodexConversationOptions = {},\n hostOptions: CodexConversationHostOptions = {},\n ): Promise<CodexConversationForkResult> {\n const sourceThreadId = normalizedConversationId(sourceConversationId);\n await this.ensureThreadReady(sourceThreadId);\n const inheritedHostOptions = this.lifecycle.hostOptions(sourceThreadId) ?? {};\n const conversationId = await this.forks.fork(sourceThreadId, options, {\n ...inheritedHostOptions,\n ...hostOptions,\n });\n return this.conversationForkResult(conversationId);\n }\n\n /** Forks after a completed turn without selecting the new conversation. */\n async forkConversationAtTurn(\n sourceConversationId: string,\n turnId: string,\n options: ForkCodexConversationOptions = {},\n hostOptions: CodexConversationHostOptions = {},\n ): Promise<CodexConversationForkResult> {\n const sourceThreadId = normalizedConversationId(sourceConversationId);\n await this.ensureThreadReady(sourceThreadId);\n const inheritedHostOptions = this.lifecycle.hostOptions(sourceThreadId) ?? {};\n const conversationId = await this.forks.forkTurn(sourceThreadId, turnId, options, {\n ...inheritedHostOptions,\n ...hostOptions,\n });\n return this.conversationForkResult(conversationId);\n }\n\n async selectConversation(conversationId: string): Promise<CodexSurfaceSnapshot> {\n return this.lifecycle.select(conversationId);\n }\n\n /**\n * Releases one conversation from this surface's in-memory state without\n * changing the corresponding app-server thread. The summary remains in the\n * conversation catalog; `conversation(id).load()` or `readHistory()` can\n * hydrate it again later.\n */\n forgetConversation(conversationId: string): void {\n const threadId = normalizedConversationId(conversationId);\n const wasActive = this.state.activeConversationId === threadId;\n this.runtimeState.forget(threadId);\n this.lifecycle.forget(threadId);\n this.conversations.forget(threadId);\n this.items.forget(threadId);\n this.conversationHandles.delete(threadId);\n this.conversationListeners.delete(threadId);\n if (!wasActive) return;\n this.patch({\n activeConversationId: null,\n activeTurnId: null,\n turns: [],\n messages: [],\n answeredClientRequestIds: [],\n approvals: [],\n contextUsage: null,\n goal: null,\n turnGitDiff: null,\n threadStatus: null,\n queuedPrompts: [],\n busy: false,\n historyLoading: false,\n historyState: {\n loadingStrategy: 'lazy',\n hasOlder: false,\n loadingOlder: false,\n fullyLoaded: false,\n },\n error: null,\n });\n }\n\n async readConversationHistory(conversationId = this.state.activeConversationId ?? ''): Promise<CodexConversationHistory> {\n return this.lifecycle.readHistory(conversationId);\n }\n\n /** Reads a bounded user-only prompt list without hydrating conversation history. */\n async readConversationPromptHistory(\n conversationId = this.state.activeConversationId ?? '',\n ) {\n await this.ensureConnected();\n return readPromptHistory(this.client, conversationId);\n }\n\n async loadOlderConversationHistory(\n conversationId = this.state.activeConversationId ?? '',\n ): Promise<CodexConversationHistoryPage> {\n return this.conversations.loadOlderHistory(normalizedConversationId(conversationId));\n }\n\n async renameConversation(title: string): Promise<CodexSurfaceSnapshot> {\n const threadId = this.state.activeConversationId;\n if (!threadId) throw new Error('There is no active conversation');\n await this.conversationSettings.rename(threadId, title);\n return this.getSnapshot();\n }\n\n async updateConversationSettings(settings: UpdateCodexConversationSettings): Promise<CodexSurfaceSnapshot> {\n return this.conversationSettings.update(settings);\n }\n\n async setGoal(objective: string, tokenBudget?: number | null): Promise<CodexSurfaceSnapshot> {\n return this.conversationSettings.setGoal(objective, tokenBudget);\n }\n\n async clearGoal(): Promise<CodexSurfaceSnapshot> {\n return this.conversationSettings.clearGoal();\n }\n\n async sendMessage(prompt: string, options: SendCodexMessageOptions = {}): Promise<CodexSurfaceSnapshot> {\n return this.messagesController.send(prompt, options);\n }\n\n async continueInterruptedTurn(): Promise<CodexSurfaceSnapshot> {\n return this.messagesController.continueInterruptedTurn();\n }\n\n async compactConversation(): Promise<CodexSurfaceSnapshot> {\n return this.turnActions.compact();\n }\n\n async startReview(options: StartCodexReviewOptions = {}): Promise<CodexSurfaceSnapshot> {\n return this.turnActions.startReview(options);\n }\n\n async steerMessage(\n prompt: string,\n options: SendCodexMessageOptions = {},\n ): Promise<CodexSurfaceSnapshot> {\n return this.messagesController.steer(prompt, options);\n }\n\n async interrupt(): Promise<CodexSurfaceSnapshot> {\n return this.turnActions.interrupt();\n }\n\n async deleteTurn(turnId: string): Promise<CodexSurfaceSnapshot> {\n return this.turnActions.deleteTurn(turnId);\n }\n\n async editTurn(turnId: string, content: string): Promise<CodexSurfaceSnapshot> {\n return this.turnActions.editTurn(turnId, content);\n }\n\n async retryTurn(turnId: string): Promise<CodexSurfaceSnapshot> {\n return this.turnActions.retryTurn(turnId);\n }\n\n /** Forks after an active-conversation turn and selects the new conversation. */\n async forkTurn(turnId: string): Promise<CodexSurfaceSnapshot> {\n const conversationId = this.state.activeConversationId;\n if (!conversationId) throw new Error('There is no active conversation');\n const result = await this.forkConversationAtTurn(conversationId, turnId);\n return result.conversation.select();\n }\n\n async deleteQueuedPrompt(promptId: string): Promise<CodexSurfaceSnapshot> {\n return this.messagesController.deleteQueuedPrompt(promptId);\n }\n\n async updateQueuedPrompt(promptId: string, prompt: string): Promise<CodexSurfaceSnapshot> {\n return this.messagesController.updateQueuedPrompt(promptId, prompt);\n }\n\n async steerQueuedPrompt(promptId: string, prompt?: string): Promise<CodexSurfaceSnapshot> {\n return this.messagesController.steerQueuedPrompt(promptId, prompt);\n }\n\n async respondToClientRequest(response: CodexSurfaceClientRequestResponse): Promise<CodexSurfaceSnapshot> {\n await this.clientRequests.respond(undefined, response);\n return this.getSnapshot();\n }\n\n async resolveApproval(\n approvalId: string,\n decision: CodexSurfaceApprovalDecision,\n scope: CodexSurfaceApprovalScope = 'once',\n ): Promise<CodexSurfaceSnapshot> {\n await this.approvals.resolve(undefined, approvalId, decision, scope);\n return this.getSnapshot();\n }\n\n conversation(conversationId: string): CodexConversation {\n const id = normalizedConversationId(conversationId);\n const existing = this.conversationHandles.get(id);\n if (existing) return existing;\n const handle = createCodexConversationHandle(id, {\n clearGoal: () => this.conversationSettings.clearGoalForThread(id),\n compact: () => this.turnActions.compactForThread(id),\n continueInterruptedTurn: () => this.messagesController.continueInterruptedTurnForThread(id),\n deleteTurn: (turnId) => this.turnActions.deleteTurnForThread(id, turnId),\n deleteQueuedPrompt: (promptId) => this.messagesController.deleteQueuedPromptForThread(id, promptId),\n updateQueuedPrompt: (promptId, prompt) => this.messagesController.updateQueuedPromptForThread(id, promptId, prompt),\n editTurn: (turnId, content) => this.turnActions.editTurnForThread(id, turnId, content),\n fork: (options, hostOptions) => this.forkConversation(id, options, hostOptions),\n forkTurn: (turnId, options, hostOptions) => (\n this.forkConversationAtTurn(id, turnId, options, hostOptions)\n ),\n getSnapshot: () => this.getConversationSnapshot(id),\n interrupt: () => this.turnActions.interruptThread(id),\n load: async (options) => { await this.ensureThreadReady(id, options); },\n loadOlderHistory: () => this.loadOlderConversationHistory(id),\n onEvent: (listener) => this.onConversationEvent(id, listener),\n onStateChange: (listener) => this.onConversationStateChange(id, listener),\n readHistory: () => this.readConversationHistory(id),\n readPromptHistory: () => this.readConversationPromptHistory(id),\n rename: (title) => this.conversationSettings.rename(id, title),\n resolveApproval: (approvalId, decision, scope = 'once') => (\n this.approvals.resolve(id, approvalId, decision, scope)\n ),\n respondToClientRequest: (response) => this.clientRequests.respond(id, response),\n retryTurn: (turnId) => this.turnActions.retryTurnForThread(id, turnId),\n select: async () => { await this.selectConversation(id); },\n sendMessage: (prompt, options) => this.messagesController.sendToThread(id, prompt, options),\n setGoal: (objective, tokenBudget) => this.conversationSettings.setGoalForThread(id, objective, tokenBudget),\n startRealtime: (options) => this.startRealtimeForThread(id, options),\n startReview: (options) => this.turnActions.startReviewForThread(id, options),\n steerMessage: (prompt, options) => this.messagesController.steerForThread(id, prompt, options),\n steerQueuedPrompt: (promptId, prompt) => this.messagesController.steerQueuedPromptForThread(id, promptId, prompt),\n updateSettings: (settings) => this.conversationSettings.updateForThread(id, settings),\n });\n this.conversationHandles.set(id, handle);\n return handle;\n }\n\n async startLiveChat(\n conversationId: string,\n options: StartCodexLiveChatOptions,\n ): Promise<{ sdp: string }> {\n const { sdp, ...settings } = options;\n const session = await this.startRealtimeForThread(conversationId, {\n ...settings,\n version: settings.version ?? 'v3',\n outputModality: 'audio',\n transport: { type: 'webrtc', sdp },\n });\n return { sdp: session.remoteSdp! };\n }\n\n async stopLiveChat(conversationId: string): Promise<void> {\n await this.client.request('thread/realtime/stop', { threadId: conversationId });\n }\n\n private startRealtimeForThread(\n threadId: string,\n options: StartCodexRealtimeOptions,\n ): Promise<CodexRealtimeSession> {\n return startCodexRealtimeSession({\n client: this.client,\n ensureThreadReady: async () => { await this.ensureThreadReady(threadId); },\n onConversationEvent: (listener) => this.onConversationEvent(threadId, listener),\n options,\n threadId,\n });\n }\n\n private conversationForkResult(conversationId: string): CodexConversationForkResult {\n const conversation = this.conversation(conversationId);\n return {\n conversationId,\n conversation,\n snapshot: conversation.getSnapshot(),\n };\n }\n\n getConversationSnapshot(conversationId: string): CodexConversationSnapshot {\n const runtime = this.requireRuntime(conversationId);\n return structuredClone({\n ...this.state,\n activeConversationId: conversationId,\n ...this.runtimeProjection(runtime),\n activeTurnId: runtime.activeTurnId,\n turnIds: runtime.turnIds,\n });\n }\n\n onConversationStateChange(conversationId: string, listener: ConversationStateListener): () => void {\n const listeners = this.conversationListeners.get(conversationId) ?? new Set<ConversationStateListener>();\n listeners.add(listener);\n this.conversationListeners.set(conversationId, listeners);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) this.conversationListeners.delete(conversationId);\n };\n }\n\n onConversationEvent(conversationId: string, listener: ConversationEventListener): () => void {\n return this.onEvent((event) => {\n if ('conversationId' in event && event.conversationId === conversationId) {\n listener(event as CodexConversationEvent);\n }\n });\n }\n\n getSnapshot(): CodexSurfaceSnapshot {\n return structuredClone(this.state);\n }\n\n onStateChange(listener: StateListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n onEvent(listener: SurfaceEventListener): () => void {\n this.eventListeners.add(listener);\n return () => this.eventListeners.delete(listener);\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.unsubscribeNotification();\n this.unsubscribeToolInputRequests();\n this.unsubscribeMcpElicitationRequests();\n this.unsubscribeDisconnect();\n this.approvals.close();\n this.clientRequests.clear();\n this.items.reset();\n this.catalog.reset(false);\n this.textGeneration.close();\n for (const runtime of this.runtimeState.values()) {\n runtime.activeTurnId = null;\n runtime.busy = false;\n runtime.turnStartPending = false;\n }\n await this.client.close();\n this.patch({\n status: 'idle',\n activeTurnId: null,\n busy: false,\n approvals: [],\n clientRequests: [],\n historyLoading: false,\n });\n this.emitSurfaceStatus('lifecycle');\n }\n\n private async ensureConnected(): Promise<void> {\n return this.connection.ensureConnected();\n }\n\n private async ensureThreadReady(\n threadId: string,\n loadOptions: CodexConversationLoadOptions = {},\n ): Promise<ThreadRuntimeState> {\n return this.lifecycle.ensureReady(threadId, loadOptions);\n }\n\n private createRuntime(threadId: string, patch: ThreadRuntimePatch = {}): ThreadRuntimeState {\n const runtime = this.runtimeState.create(threadId, patch);\n if (patch.messages) this.scheduleMarkdownImageHydration(threadId, patch.messages);\n return runtime;\n }\n\n private requireRuntime(threadId: string): ThreadRuntimeState {\n return this.runtimeState.require(threadId);\n }\n\n private runtimeProjection(\n runtime: ThreadRuntimeState,\n ): ReturnType<CodexSurfaceRuntimeController['projection']> {\n return this.runtimeState.projection(runtime);\n }\n\n private snapshotForRuntime(runtime: ThreadRuntimeState): CodexSurfaceSnapshot {\n return this.runtimeState.snapshot(runtime);\n }\n\n private activateRuntime(runtime: ThreadRuntimeState): void {\n this.runtimeState.activate(runtime);\n }\n\n private patchRuntime(threadId: string, patch: ThreadRuntimePatch): void {\n this.runtimeState.patch(threadId, patch);\n if (patch.messages) this.scheduleMarkdownImageHydration(threadId, patch.messages);\n }\n\n private scheduleMarkdownImageHydration(\n threadId: string,\n messages: readonly SurfaceMessage[],\n ): void {\n const cwd = this.runtimeState.get(threadId)?.cwd;\n for (const message of messages) {\n if (message.role !== 'assistant' || message.status === 'streaming') continue;\n message.parts.forEach((part, partIndex) => {\n if (part.type !== 'text' || !part.text.includes('![')) return;\n const key = `${threadId}\\u0000${message.id}\\u0000${part.itemId ?? partIndex}\\u0000${part.text}`;\n if (this.pendingMarkdownImageHydrations.has(key)) return;\n this.pendingMarkdownImageHydrations.add(key);\n void this.markdownImages.hydrate(part.text, cwd).then(async (hydratedText) => {\n if (this.closed || hydratedText === part.text) return;\n const runtime = this.runtimeState.get(threadId);\n if (!runtime) return;\n const messageIndex = runtime.messages.findIndex((candidate) => candidate.id === message.id);\n const currentMessage = runtime.messages[messageIndex];\n if (!currentMessage) return;\n const currentPart = currentMessage.parts[partIndex];\n if (currentPart?.type !== 'text' || currentPart.text !== part.text) return;\n const nextParts = [...currentMessage.parts];\n nextParts.splice(partIndex, 1, { ...currentPart, text: hydratedText });\n const hydratedMessage = { ...currentMessage, parts: nextParts };\n const nextMessages = [...runtime.messages];\n nextMessages.splice(messageIndex, 1, hydratedMessage);\n this.runtimeState.patch(threadId, { messages: nextMessages });\n\n await this.conversations.waitForHistoryEmission(threadId);\n if (this.closed) return;\n const currentRuntime = this.runtimeState.get(threadId);\n const publishedMessage = currentRuntime?.messages.find((candidate) => candidate.id === message.id);\n if (!publishedMessage) return;\n const publishedPart = publishedMessage.parts[partIndex];\n if (publishedPart?.type !== 'text' || publishedPart.text !== hydratedText) return;\n if (publishedMessage.turnId) this.emitEvent('lifecycle', {\n type: 'message.updated',\n conversationId: threadId,\n turnId: publishedMessage.turnId,\n payload: { message: structuredClone(publishedMessage) },\n });\n }).finally(() => this.pendingMarkdownImageHydrations.delete(key));\n });\n }\n }\n\n private emitSurfaceStatus(origin: CodexSurfaceEventOrigin): void {\n this.runtimeState.emitSurfaceStatus(origin);\n }\n\n private emitSummaryUpserted(\n summary: CodexConversationSummary,\n reason: Extract<CodexSurfaceEvent, { type: 'conversation.summaryUpserted' }>['payload']['reason'],\n origin: CodexSurfaceEventOrigin,\n ): void {\n this.runtimeState.emitSummaryUpserted(summary, reason, origin);\n }\n\n private emitConversationActivity(threadId: string, origin: CodexSurfaceEventOrigin): void {\n this.runtimeState.emitConversationActivity(threadId, origin);\n }\n\n private emitConversationSettings(threadId: string, origin: CodexSurfaceEventOrigin): void {\n this.runtimeState.emitConversationSettings(threadId, origin);\n }\n\n private emitConversationSkills(threadId: string, origin: CodexSurfaceEventOrigin): void {\n this.runtimeState.emitConversationSkills(threadId, origin);\n }\n\n private emitConversationPermissions(threadId: string, origin: CodexSurfaceEventOrigin): void {\n this.runtimeState.emitConversationPermissions(threadId, origin);\n }\n\n private emitHistoryReplaced(\n threadId: string,\n reason: Extract<CodexSurfaceEvent, { type: 'conversation.historyReplaced' }>['payload']['reason'],\n origin: CodexSurfaceEventOrigin,\n ): void {\n this.runtimeState.emitHistoryReplaced(threadId, reason, origin);\n }\n\n private emitHistoryPrepended(\n threadId: string,\n messages: readonly SurfaceMessage[],\n origin: CodexSurfaceEventOrigin,\n ): void {\n this.runtimeState.emitHistoryPrepended(threadId, messages, origin);\n }\n\n private messageContainingTool(threadId: string, turnId: string, itemId: string): SurfaceMessage | null {\n return this.runtimeState.messageContainingTool(threadId, turnId, itemId);\n }\n\n private assistantMessageForTurn(threadId: string, turnId: string): SurfaceMessage | null {\n return this.runtimeState.assistantMessageForTurn(threadId, turnId);\n }\n\n private notifyConversationListeners(threadId: string): void {\n const listeners = this.conversationListeners.get(threadId);\n if (!listeners) return;\n const snapshot = this.getConversationSnapshot(threadId);\n for (const listener of listeners) listener(snapshot);\n }\n\n private markRuntimeTurnActive(runtime: ThreadRuntimeState, turnId: string): void {\n this.runtimeState.markTurnActive(runtime, turnId);\n }\n\n private patchConversationStatus(\n threadId: string,\n status: CodexConversationSummary['status'],\n origin: CodexSurfaceEventOrigin = 'notification',\n ): void {\n this.runtimeState.patchConversationStatus(threadId, status, origin);\n }\n\n private patchConversationTurnCount(\n threadId: string,\n turnCount: number,\n origin: CodexSurfaceEventOrigin = 'notification',\n ): void {\n this.runtimeState.patchConversationTurnCount(threadId, turnCount, origin);\n }\n\n private clearPendingForThread(\n threadId: string,\n reason: string,\n eventReason: 'conversation_closed' | 'conversation_removed' | 'surface_disconnected',\n ): void {\n this.approvals.clearForThread(threadId, eventReason);\n this.clientRequests.clearForThread(threadId, reason, eventReason);\n }\n\n private removeThread(\n threadId: string,\n reason: 'archived' | 'deleted',\n origin: CodexSurfaceEventOrigin = 'notification',\n ): void {\n const known = this.state.conversations.some((conversation) => conversation.id === threadId)\n || this.runtimeState.get(threadId) !== undefined\n || this.approvals.hasForThread(threadId)\n || this.clientRequests.hasForThread(threadId);\n if (!known) return;\n this.clearPendingForThread(threadId, 'Codex thread is no longer available', 'conversation_removed');\n this.runtimeState.forget(threadId);\n this.lifecycle.forget(threadId);\n this.conversations.forget(threadId);\n this.conversationHandles.delete(threadId);\n const conversations = this.state.conversations.filter((conversation) => conversation.id !== threadId);\n if (this.state.activeConversationId !== threadId) {\n this.patch({ conversations });\n this.emitEvent(origin, {\n type: 'conversation.summaryRemoved',\n conversationId: threadId,\n payload: { reason },\n });\n return;\n }\n this.patch({\n conversations,\n activeConversationId: null,\n messages: [],\n answeredClientRequestIds: [],\n approvals: [],\n contextUsage: null,\n goal: null,\n turnGitDiff: null,\n threadStatus: null,\n queuedPrompts: [],\n busy: false,\n historyLoading: false,\n error: null,\n });\n this.emitEvent(origin, {\n type: 'conversation.summaryRemoved',\n conversationId: threadId,\n payload: { reason },\n });\n this.emitEvent(origin, {\n type: 'conversation.selected',\n payload: { conversationId: null },\n });\n }\n\n\n private handleUnknownNotification(notification: ServerNotification): void {\n const runtimeNotification = notification as unknown as { method: string; params?: unknown };\n this.options.onUnknownNotification?.({\n method: runtimeNotification.method,\n ...('params' in runtimeNotification ? { params: runtimeNotification.params } : {}),\n });\n }\n\n\n private emitEvent(origin: CodexSurfaceEventOrigin, input: SurfaceEventInput): void {\n const event = {\n ...input,\n seq: ++this.eventSequence,\n occurredAt: new Date().toISOString(),\n origin,\n } as CodexSurfaceEvent;\n for (const listener of this.eventListeners) listener(event);\n }\n\n private patch(patch: Partial<CodexSurfaceSnapshot>, conversationId?: string): void {\n this.state = { ...this.state, ...patch };\n if (this.listeners.size > 0) {\n const snapshot = this.getSnapshot();\n for (const listener of this.listeners) listener(snapshot);\n }\n if (conversationId) {\n this.notifyConversationListeners(conversationId);\n return;\n }\n for (const subscribedConversationId of this.conversationListeners.keys()) {\n this.notifyConversationListeners(subscribedConversationId);\n }\n }\n}\n\nexport function createCodexSurface(options: CodexSurfaceOptions = {}): CodexSurface {\n return new CodexSurface(options);\n}\n","export type CodexAppBackendTtlCacheEvictionContext = {\n readonly id: string;\n readonly lastActivityAt: number;\n readonly now: number;\n readonly idleForMs: number;\n};\n\nexport type CodexAppBackendTtlCacheRecord<Value> = {\n readonly value: Value;\n readonly lastActivityAt: number;\n};\n\nexport type CodexAppBackendTtlTimer = {\n unref?: () => void;\n};\n\nexport type CodexAppBackendTtlCacheScheduler = {\n set(callback: () => void, delayMs: number): CodexAppBackendTtlTimer;\n clear(timer: CodexAppBackendTtlTimer): void;\n};\n\nexport type CodexAppBackendTtlCacheOptions<Value> = {\n /** Time without a newer activity touch before an entry becomes eligible. */\n ttlMs: number;\n /** Enables periodic sweeps. Omit it to use manual `sweep()` calls only. */\n sweepIntervalMs?: number | null;\n identity: (value: Value) => string;\n canEvict: (value: Value, context: CodexAppBackendTtlCacheEvictionContext) => boolean | Promise<boolean>;\n onEvict: (value: Value, context: CodexAppBackendTtlCacheEvictionContext) => void | Promise<void>;\n now?: () => number;\n scheduler?: CodexAppBackendTtlCacheScheduler;\n onEvictionError?: (\n error: unknown,\n value: Value,\n context: CodexAppBackendTtlCacheEvictionContext,\n ) => void | Promise<void>;\n};\n\ntype TtlCacheRecord<Value> = {\n value: Value;\n lastActivityAt: number;\n};\n\nconst defaultScheduler: CodexAppBackendTtlCacheScheduler = {\n set(callback, delayMs) {\n return setTimeout(callback, delayMs) as unknown as CodexAppBackendTtlTimer;\n },\n clear(timer) {\n clearTimeout(timer as unknown as ReturnType<typeof setTimeout>);\n },\n};\n\n/**\n * Host-owned cache metadata with an optional, unref'd periodic eviction loop.\n * The cache never decides whether an entry is safe to remove; `canEvict` and\n * `onEvict` remain application-owned policies and storage operations.\n */\nexport class CodexAppBackendTtlCache<Value> {\n private readonly records = new Map<string, TtlCacheRecord<Value>>();\n private readonly now: () => number;\n private readonly scheduler: CodexAppBackendTtlCacheScheduler;\n private readonly sweepIntervalMs: number | null;\n private timer: CodexAppBackendTtlTimer | null = null;\n private activeSweep: Promise<readonly string[]> | null = null;\n private closePromise: Promise<void> | null = null;\n private closed = false;\n\n constructor(private readonly options: CodexAppBackendTtlCacheOptions<Value>) {\n if (!Number.isFinite(options.ttlMs) || options.ttlMs <= 0) {\n throw new Error('Codex backend cache ttlMs must be greater than zero');\n }\n if (options.sweepIntervalMs !== undefined && options.sweepIntervalMs !== null\n && (!Number.isFinite(options.sweepIntervalMs) || options.sweepIntervalMs <= 0)) {\n throw new Error('Codex backend cache sweepIntervalMs must be greater than zero');\n }\n this.now = options.now ?? Date.now;\n this.scheduler = options.scheduler ?? defaultScheduler;\n this.sweepIntervalMs = options.sweepIntervalMs ?? null;\n }\n\n get size(): number {\n return this.records.size;\n }\n\n set(value: Value, activityAt = this.now()): string {\n this.assertOpen();\n const id = this.requireIdentity(value);\n const previous = this.records.get(id);\n this.records.set(id, {\n value,\n lastActivityAt: previous ? Math.max(previous.lastActivityAt, activityAt) : activityAt,\n });\n this.schedule();\n return id;\n }\n\n get(id: string): Value | undefined {\n return this.records.get(id)?.value;\n }\n\n getRecord(id: string): CodexAppBackendTtlCacheRecord<Value> | undefined {\n const record = this.records.get(id);\n return record\n ? { value: record.value, lastActivityAt: record.lastActivityAt }\n : undefined;\n }\n\n touch(id: string, activityAt = this.now()): boolean {\n this.assertOpen();\n const record = this.records.get(id);\n if (!record) return false;\n record.lastActivityAt = Math.max(record.lastActivityAt, activityAt);\n return true;\n }\n\n delete(id: string): boolean {\n this.assertOpen();\n const deleted = this.records.delete(id);\n if (this.records.size === 0) this.clearTimer();\n return deleted;\n }\n\n async sweep(): Promise<readonly string[]> {\n if (this.closed) return [];\n if (this.activeSweep) return this.activeSweep;\n const sweep = this.evictExpired();\n this.activeSweep = sweep;\n try {\n return await sweep;\n } finally {\n this.activeSweep = null;\n this.schedule();\n }\n }\n\n async close(): Promise<void> {\n if (!this.closePromise) {\n this.closed = true;\n this.clearTimer();\n this.closePromise = Promise.resolve(this.activeSweep).then(() => undefined);\n }\n await this.closePromise;\n }\n\n private async evictExpired(): Promise<readonly string[]> {\n const now = this.now();\n const evicted: string[] = [];\n for (const [id, record] of [...this.records.entries()]) {\n const idleForMs = now - record.lastActivityAt;\n if (idleForMs < this.options.ttlMs) continue;\n const context: CodexAppBackendTtlCacheEvictionContext = {\n id,\n lastActivityAt: record.lastActivityAt,\n now,\n idleForMs,\n };\n let safeToEvict: boolean;\n try {\n safeToEvict = await this.options.canEvict(record.value, context);\n } catch (error) {\n await this.reportEvictionError(error, record.value, context);\n continue;\n }\n if (!safeToEvict || this.records.get(id) !== record) continue;\n try {\n await this.options.onEvict(record.value, context);\n } catch (error) {\n await this.reportEvictionError(error, record.value, context);\n continue;\n }\n if (this.records.get(id) === record) {\n this.records.delete(id);\n evicted.push(id);\n }\n }\n return evicted;\n }\n\n private schedule(): void {\n if (this.closed || this.timer || this.records.size === 0 || this.sweepIntervalMs === null) return;\n this.timer = this.scheduler.set(() => {\n this.timer = null;\n void this.sweep();\n }, this.sweepIntervalMs);\n this.timer.unref?.();\n }\n\n private clearTimer(): void {\n if (!this.timer) return;\n this.scheduler.clear(this.timer);\n this.timer = null;\n }\n\n private async reportEvictionError(\n error: unknown,\n value: Value,\n context: CodexAppBackendTtlCacheEvictionContext,\n ): Promise<void> {\n const onEvictionError = this.options.onEvictionError;\n if (!onEvictionError) return;\n try {\n await onEvictionError(error, value, context);\n } catch {\n // Error reporting must not strand the periodic eviction loop.\n }\n }\n\n private requireIdentity(value: Value): string {\n const id = this.options.identity(value);\n if (!id.trim()) throw new Error('Codex backend cache identities cannot be empty');\n return id;\n }\n\n private assertOpen(): void {\n if (this.closed) throw new Error('Codex backend cache is closed');\n }\n}\n","import { CodexSurface } from './codex-surface';\nimport {\n CodexAppBackendTtlCache,\n type CodexAppBackendTtlCacheOptions,\n} from './codex-app-backend-cache';\nimport type { CodexSurfaceOptions } from './codex-surface-contracts';\n\nexport type CodexAppBackendModuleContext = {\n surface: CodexSurface;\n closeBackend(): Promise<void>;\n createTtlCache<Value>(options: CodexAppBackendTtlCacheOptions<Value>): CodexAppBackendTtlCache<Value>;\n};\n\nexport type CodexAppBackendModule<Service = unknown> = {\n id: string;\n create(context: CodexAppBackendModuleContext): Service;\n};\n\nexport type CodexAppBackendOptions = {\n modules?: readonly CodexAppBackendModule[];\n surface?: CodexSurface;\n surfaceOptions?: CodexSurfaceOptions;\n};\n\n/**\n * Composable, in-process backend host for Codex applications.\n *\n * The SDK owns the product-neutral Codex runtime while modules own application\n * services such as agents, teams, or work integrations. Transport and process\n * ownership stay with the embedding application.\n */\nexport class CodexAppBackend {\n readonly surface: CodexSurface;\n private readonly moduleServices = new Map<string, unknown>();\n private readonly ttlCaches = new Set<{ close(): Promise<void> }>();\n private closePromise: Promise<void> | null = null;\n\n constructor(options: CodexAppBackendOptions = {}) {\n if (options.surface && options.surfaceOptions) {\n throw new Error('Provide either surface or surfaceOptions, not both');\n }\n const modules = (options.modules ?? []).map((module) => ({ id: module.id.trim(), module }));\n const moduleIds = new Set<string>();\n for (const { id } of modules) {\n if (!id) throw new Error('Codex backend module IDs cannot be empty');\n if (moduleIds.has(id)) throw new Error(`Duplicate Codex backend module '${id}'`);\n moduleIds.add(id);\n }\n this.surface = options.surface ?? new CodexSurface(options.surfaceOptions);\n for (const { id, module } of modules) {\n this.moduleServices.set(id, module.create({\n surface: this.surface,\n closeBackend: () => this.close(),\n createTtlCache: (cacheOptions) => this.createTtlCache(cacheOptions),\n }));\n }\n }\n\n module<Service>(id: string): Service {\n const normalizedId = id.trim();\n if (!this.moduleServices.has(normalizedId)) throw new Error(`Unknown Codex backend module '${normalizedId}'`);\n return this.moduleServices.get(normalizedId) as Service;\n }\n\n createTtlCache<Value>(options: CodexAppBackendTtlCacheOptions<Value>): CodexAppBackendTtlCache<Value> {\n if (this.closePromise) throw new Error('Cannot create a cache after the Codex backend is closed');\n const cache = new CodexAppBackendTtlCache(options);\n this.ttlCaches.add(cache);\n return cache;\n }\n\n close(): Promise<void> {\n this.closePromise ??= this.closeResources();\n return this.closePromise;\n }\n\n private async closeResources(): Promise<void> {\n await Promise.all([...this.ttlCaches].map((cache) => cache.close()));\n await this.surface.close();\n }\n}\n\nexport function createCodexAppBackend(options: CodexAppBackendOptions = {}): CodexAppBackend {\n return new CodexAppBackend(options);\n}\n","import { spawn as nodeSpawn } from 'node:child_process';\nimport { existsSync as nodeExistsSync } from 'node:fs';\nimport { promises as nodeFs } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport os from 'node:os';\nimport path from 'node:path';\n\nexport type AppleSpeechTranscriptionOptions = {\n locale?: string;\n live?: boolean;\n};\n\nexport type AppleSpeechTranscriptionResult = {\n text: string;\n error?: string;\n};\n\nexport type AppleSpeechAssetDiscoveryDependencies = {\n cwd?: () => string;\n env?: NodeJS.ProcessEnv;\n existsSync?: (filePath: string) => boolean;\n moduleUrl?: string | null;\n packageResolve?: ((specifier: string) => string) | null;\n resourcesPath?: string | null;\n};\n\ntype AppleSpeechFs = {\n chmod(filePath: string, mode: number): Promise<void>;\n copyFile(sourcePath: string, destinationPath: string): Promise<void>;\n mkdtemp(prefix: string): Promise<string>;\n readFile(filePath: string, encoding: BufferEncoding): Promise<string>;\n rm(filePath: string, options: { recursive: boolean; force: boolean }): Promise<void>;\n writeFile(filePath: string, data: Buffer): Promise<void>;\n};\n\ntype AppleSpeechChild = {\n stderr?: {\n on(event: 'data', listener: (chunk: Buffer | string) => void): unknown;\n };\n on(event: 'error', listener: (error: Error) => void): unknown;\n on(event: 'exit', listener: (code: number | null) => void): unknown;\n};\n\ntype AppleSpeechSpawn = (command: string, args: string[]) => AppleSpeechChild;\n\ntype AppleSpeechTranscriptionDeps = {\n assetsPath?: string;\n fs?: AppleSpeechFs;\n spawn?: AppleSpeechSpawn;\n tmpdir?: () => string;\n};\n\nexport async function transcribeWithAppleSpeechAnalyzer(\n audioData: Buffer,\n options: AppleSpeechTranscriptionOptions = {},\n deps: AppleSpeechTranscriptionDeps = {},\n): Promise<AppleSpeechTranscriptionResult> {\n const fs = deps.fs ?? nodeFs;\n const spawn = deps.spawn ?? nodeSpawn;\n const tmpdir = deps.tmpdir ?? os.tmpdir;\n const tempDir = await fs.mkdtemp(path.join(tmpdir(), 'codex-app-sdk-apple-stt-'));\n const inputPath = path.join(tempDir, 'input.wav');\n const outputPath = path.join(tempDir, 'output.txt');\n\n try {\n const bundledCliPath = resolveAppleSpeechAnalyzerPath(deps.assetsPath);\n const cliPath = await executableAppleSpeechPath(bundledCliPath, tempDir, fs);\n await fs.writeFile(inputPath, audioData);\n await runAppleSpeechCli(spawn, cliPath, buildAppleSpeechArgs(inputPath, outputPath, options));\n const text = await fs.readFile(outputPath, 'utf8');\n\n return { text: text.trim() };\n } catch (error) {\n return {\n text: '',\n error: error instanceof Error ? error.message : String(error),\n };\n } finally {\n await fs.rm(tempDir, { recursive: true, force: true });\n }\n}\n\nexport function resolveAppleSpeechAnalyzerPath(\n assetsPath?: string,\n dependencies: AppleSpeechAssetDiscoveryDependencies = {},\n): string {\n return path.join(assetsPath ?? defaultAssetsPath(dependencies), 'apple-speechanalyzer-cli');\n}\n\nfunction buildAppleSpeechArgs(\n inputPath: string,\n outputPath: string,\n options: AppleSpeechTranscriptionOptions,\n): string[] {\n const args = [\n '--input-audio-path',\n inputPath,\n '--output-txt-path',\n outputPath,\n ];\n\n const locale = options.locale?.trim();\n if (locale) {\n args.push('--locale', locale);\n }\n\n if (options.live) {\n args.push('--live');\n }\n\n return args;\n}\n\nfunction runAppleSpeechCli(\n spawn: AppleSpeechSpawn,\n cliPath: string,\n args: string[],\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(cliPath, args);\n let stderr = '';\n\n child.stderr?.on('data', (chunk: Buffer | string) => {\n stderr += chunk.toString();\n });\n\n child.on('error', (error: Error) => {\n reject(new Error(`Failed to spawn Apple speech CLI: ${error.message}`));\n });\n\n child.on('exit', (code) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n reject(new Error(`Apple speech CLI exited with code ${code}: ${stderr.trim()}`));\n });\n });\n}\n\nfunction defaultAssetsPath(dependencies: AppleSpeechAssetDiscoveryDependencies): string {\n const configuredAssetsPath = (dependencies.env ?? process.env).CODEX_APP_SDK_ASSETS_PATH?.trim();\n if (configuredAssetsPath) {\n return configuredAssetsPath;\n }\n\n const processResourcesPath = (process as NodeJS.Process & { resourcesPath?: string }).resourcesPath;\n const resourcesPath = dependencies.resourcesPath === undefined\n ? processResourcesPath\n : dependencies.resourcesPath ?? undefined;\n const existsSync = dependencies.existsSync ?? nodeExistsSync;\n if (resourcesPath && !resourcesPath.endsWith('.vite/build')) {\n const resourceCandidates = [\n resourcesPath,\n path.join(resourcesPath, 'assets'),\n path.join(resourcesPath, 'app.asar.unpacked/node_modules/@codex-app-sdk/backend/assets'),\n path.join(resourcesPath, 'app.asar/node_modules/@codex-app-sdk/backend/assets'),\n path.join(resourcesPath, 'app.asar.unpacked/node_modules/codex-app-sdk/assets'),\n path.join(resourcesPath, 'app.asar/node_modules/codex-app-sdk/assets'),\n ];\n const match = resourceCandidates.find((candidate) => (\n existsSync(path.join(candidate, 'apple-speechanalyzer-cli'))\n ));\n if (match) return match;\n }\n\n const defaultPackageResolver = import.meta.resolve;\n const packageResolver = dependencies.packageResolve === undefined\n ? defaultPackageResolver\n : dependencies.packageResolve ?? undefined;\n if (packageResolver) {\n try {\n const packageNodeEntry = fileURLToPath(packageResolver('@codex-app-sdk/backend'));\n const packageAssetsPath = path.resolve(path.dirname(packageNodeEntry), '../assets');\n if (existsSync(path.join(packageAssetsPath, 'apple-speechanalyzer-cli'))) {\n return packageAssetsPath;\n }\n } catch {\n // Source checkouts fall through to module-relative candidates.\n }\n }\n\n const cwd = (dependencies.cwd ?? process.cwd)();\n const cwdCandidates = [\n path.resolve(cwd, 'node_modules/@codex-app-sdk/backend/assets'),\n path.resolve(cwd, '../node_modules/@codex-app-sdk/backend/assets'),\n path.resolve(cwd, 'node_modules/codex-app-sdk/assets'),\n path.resolve(cwd, '../node_modules/codex-app-sdk/assets'),\n path.resolve(cwd, '../codex-app-sdk/assets'),\n ];\n const cwdMatch = cwdCandidates.find((candidate) => (\n existsSync(path.join(candidate, 'apple-speechanalyzer-cli'))\n ));\n if (cwdMatch) return cwdMatch;\n\n const defaultModuleUrl = import.meta.url;\n const moduleUrl = dependencies.moduleUrl === undefined\n ? defaultModuleUrl\n : dependencies.moduleUrl ?? undefined;\n const moduleDirectory = moduleUrl\n ? path.dirname(fileURLToPath(moduleUrl))\n : cwd;\n const moduleCandidates = [\n path.resolve(moduleDirectory, '../assets'),\n path.resolve(moduleDirectory, '../../assets'),\n ];\n return moduleCandidates.find((candidate) => (\n existsSync(path.join(candidate, 'apple-speechanalyzer-cli'))\n )) ?? moduleCandidates[0]!;\n}\n\nasync function executableAppleSpeechPath(\n sourcePath: string,\n tempDir: string,\n fs: AppleSpeechFs,\n): Promise<string> {\n const executablePath = path.join(tempDir, 'apple-speechanalyzer-cli');\n await fs.copyFile(sourcePath, executablePath);\n await fs.chmod(executablePath, 0o700);\n return executablePath;\n}\n"],"mappings":"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"}