@excitedjs/tm 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/bin/tm +76 -0
  2. package/package.json +39 -0
  3. package/resolver-register.mjs +7 -0
  4. package/resolver.mjs +86 -0
  5. package/src/cli/context.ts +63 -0
  6. package/src/cli/dispatch.ts +444 -0
  7. package/src/cli/errors.ts +45 -0
  8. package/src/cli/parse.ts +265 -0
  9. package/src/cli.ts +12 -0
  10. package/src/codex-protocol/AbsolutePathBuf.ts +14 -0
  11. package/src/codex-protocol/AgentPath.ts +5 -0
  12. package/src/codex-protocol/ApplyPatchApprovalParams.ts +21 -0
  13. package/src/codex-protocol/ApplyPatchApprovalResponse.ts +6 -0
  14. package/src/codex-protocol/AuthMode.ts +8 -0
  15. package/src/codex-protocol/AutoCompactTokenLimitScope.ts +9 -0
  16. package/src/codex-protocol/ClientInfo.ts +5 -0
  17. package/src/codex-protocol/ClientNotification.ts +5 -0
  18. package/src/codex-protocol/ClientRequest.ts +110 -0
  19. package/src/codex-protocol/CollaborationMode.ts +10 -0
  20. package/src/codex-protocol/ContentItem.ts +6 -0
  21. package/src/codex-protocol/ConversationGitInfo.ts +5 -0
  22. package/src/codex-protocol/ConversationSummary.ts +8 -0
  23. package/src/codex-protocol/ExecCommandApprovalParams.ts +16 -0
  24. package/src/codex-protocol/ExecCommandApprovalResponse.ts +6 -0
  25. package/src/codex-protocol/ExecPolicyAmendment.ts +12 -0
  26. package/src/codex-protocol/FileChange.ts +5 -0
  27. package/src/codex-protocol/ForcedLoginMethod.ts +5 -0
  28. package/src/codex-protocol/FunctionCallOutputBody.ts +6 -0
  29. package/src/codex-protocol/FunctionCallOutputContentItem.ts +10 -0
  30. package/src/codex-protocol/FuzzyFileSearchMatchType.ts +5 -0
  31. package/src/codex-protocol/FuzzyFileSearchParams.ts +5 -0
  32. package/src/codex-protocol/FuzzyFileSearchResponse.ts +6 -0
  33. package/src/codex-protocol/FuzzyFileSearchResult.ts +9 -0
  34. package/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +5 -0
  35. package/src/codex-protocol/FuzzyFileSearchSessionStartParams.ts +5 -0
  36. package/src/codex-protocol/FuzzyFileSearchSessionStartResponse.ts +5 -0
  37. package/src/codex-protocol/FuzzyFileSearchSessionStopParams.ts +5 -0
  38. package/src/codex-protocol/FuzzyFileSearchSessionStopResponse.ts +5 -0
  39. package/src/codex-protocol/FuzzyFileSearchSessionUpdateParams.ts +5 -0
  40. package/src/codex-protocol/FuzzyFileSearchSessionUpdateResponse.ts +5 -0
  41. package/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +6 -0
  42. package/src/codex-protocol/GetAuthStatusParams.ts +5 -0
  43. package/src/codex-protocol/GetAuthStatusResponse.ts +6 -0
  44. package/src/codex-protocol/GetConversationSummaryParams.ts +6 -0
  45. package/src/codex-protocol/GetConversationSummaryResponse.ts +6 -0
  46. package/src/codex-protocol/GitDiffToRemoteParams.ts +5 -0
  47. package/src/codex-protocol/GitDiffToRemoteResponse.ts +6 -0
  48. package/src/codex-protocol/GitSha.ts +5 -0
  49. package/src/codex-protocol/ImageDetail.ts +5 -0
  50. package/src/codex-protocol/InitializeCapabilities.ts +21 -0
  51. package/src/codex-protocol/InitializeParams.ts +7 -0
  52. package/src/codex-protocol/InitializeResponse.ts +20 -0
  53. package/src/codex-protocol/InputModality.ts +8 -0
  54. package/src/codex-protocol/InternalSessionSource.ts +5 -0
  55. package/src/codex-protocol/LocalShellAction.ts +6 -0
  56. package/src/codex-protocol/LocalShellExecAction.ts +5 -0
  57. package/src/codex-protocol/LocalShellStatus.ts +5 -0
  58. package/src/codex-protocol/MessagePhase.ts +11 -0
  59. package/src/codex-protocol/ModeKind.ts +8 -0
  60. package/src/codex-protocol/NetworkPolicyAmendment.ts +6 -0
  61. package/src/codex-protocol/NetworkPolicyRuleAction.ts +5 -0
  62. package/src/codex-protocol/ParsedCommand.ts +12 -0
  63. package/src/codex-protocol/Personality.ts +5 -0
  64. package/src/codex-protocol/PlanType.ts +5 -0
  65. package/src/codex-protocol/RealtimeConversationVersion.ts +5 -0
  66. package/src/codex-protocol/RealtimeOutputModality.ts +5 -0
  67. package/src/codex-protocol/RealtimeVoice.ts +5 -0
  68. package/src/codex-protocol/RealtimeVoicesList.ts +6 -0
  69. package/src/codex-protocol/ReasoningEffort.ts +8 -0
  70. package/src/codex-protocol/ReasoningItemContent.ts +5 -0
  71. package/src/codex-protocol/ReasoningItemReasoningSummary.ts +5 -0
  72. package/src/codex-protocol/ReasoningSummary.ts +10 -0
  73. package/src/codex-protocol/RequestId.ts +5 -0
  74. package/src/codex-protocol/Resource.ts +9 -0
  75. package/src/codex-protocol/ResourceContent.ts +17 -0
  76. package/src/codex-protocol/ResourceTemplate.ts +9 -0
  77. package/src/codex-protocol/ResponseItem.ts +17 -0
  78. package/src/codex-protocol/ReviewDecision.ts +10 -0
  79. package/src/codex-protocol/ServerNotification.ts +73 -0
  80. package/src/codex-protocol/ServerRequest.ts +19 -0
  81. package/src/codex-protocol/SessionSource.ts +7 -0
  82. package/src/codex-protocol/Settings.ts +9 -0
  83. package/src/codex-protocol/SubAgentSource.ts +7 -0
  84. package/src/codex-protocol/ThreadId.ts +5 -0
  85. package/src/codex-protocol/ThreadMemoryMode.ts +5 -0
  86. package/src/codex-protocol/Tool.ts +9 -0
  87. package/src/codex-protocol/Verbosity.ts +9 -0
  88. package/src/codex-protocol/WebSearchAction.ts +5 -0
  89. package/src/codex-protocol/WebSearchContextSize.ts +5 -0
  90. package/src/codex-protocol/WebSearchLocation.ts +5 -0
  91. package/src/codex-protocol/WebSearchMode.ts +5 -0
  92. package/src/codex-protocol/WebSearchToolConfig.ts +7 -0
  93. package/src/codex-protocol/index.ts +86 -0
  94. package/src/codex-protocol/serde_json/JsonValue.ts +5 -0
  95. package/src/codex-protocol/v2/Account.ts +6 -0
  96. package/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +5 -0
  97. package/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +6 -0
  98. package/src/codex-protocol/v2/AccountUpdatedNotification.ts +7 -0
  99. package/src/codex-protocol/v2/ActivePermissionProfile.ts +15 -0
  100. package/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +5 -0
  101. package/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +5 -0
  102. package/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +15 -0
  103. package/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +5 -0
  104. package/src/codex-protocol/v2/AdditionalPermissionProfile.ts +11 -0
  105. package/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +5 -0
  106. package/src/codex-protocol/v2/AnalyticsConfig.ts +6 -0
  107. package/src/codex-protocol/v2/AppBranding.ts +8 -0
  108. package/src/codex-protocol/v2/AppInfo.ts +19 -0
  109. package/src/codex-protocol/v2/AppListUpdatedNotification.ts +9 -0
  110. package/src/codex-protocol/v2/AppMetadata.ts +7 -0
  111. package/src/codex-protocol/v2/AppReview.ts +5 -0
  112. package/src/codex-protocol/v2/AppScreenshot.ts +5 -0
  113. package/src/codex-protocol/v2/AppSummary.ts +8 -0
  114. package/src/codex-protocol/v2/AppToolApproval.ts +5 -0
  115. package/src/codex-protocol/v2/AppToolsConfig.ts +6 -0
  116. package/src/codex-protocol/v2/ApprovalsReviewer.ts +12 -0
  117. package/src/codex-protocol/v2/AppsConfig.ts +8 -0
  118. package/src/codex-protocol/v2/AppsDefaultConfig.ts +5 -0
  119. package/src/codex-protocol/v2/AppsListParams.ts +24 -0
  120. package/src/codex-protocol/v2/AppsListResponse.ts +14 -0
  121. package/src/codex-protocol/v2/AskForApproval.ts +5 -0
  122. package/src/codex-protocol/v2/AttestationGenerateParams.ts +5 -0
  123. package/src/codex-protocol/v2/AttestationGenerateResponse.ts +9 -0
  124. package/src/codex-protocol/v2/AutoReviewDecisionSource.ts +8 -0
  125. package/src/codex-protocol/v2/ByteRange.ts +5 -0
  126. package/src/codex-protocol/v2/CancelLoginAccountParams.ts +5 -0
  127. package/src/codex-protocol/v2/CancelLoginAccountResponse.ts +6 -0
  128. package/src/codex-protocol/v2/CancelLoginAccountStatus.ts +5 -0
  129. package/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +16 -0
  130. package/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +5 -0
  131. package/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +5 -0
  132. package/src/codex-protocol/v2/CodexErrorInfo.ts +12 -0
  133. package/src/codex-protocol/v2/CollabAgentState.ts +6 -0
  134. package/src/codex-protocol/v2/CollabAgentStatus.ts +5 -0
  135. package/src/codex-protocol/v2/CollabAgentTool.ts +5 -0
  136. package/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +5 -0
  137. package/src/codex-protocol/v2/CollaborationModeListParams.ts +8 -0
  138. package/src/codex-protocol/v2/CollaborationModeListResponse.ts +9 -0
  139. package/src/codex-protocol/v2/CollaborationModeMask.ts +10 -0
  140. package/src/codex-protocol/v2/CommandAction.ts +6 -0
  141. package/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +30 -0
  142. package/src/codex-protocol/v2/CommandExecOutputStream.ts +8 -0
  143. package/src/codex-protocol/v2/CommandExecParams.ts +105 -0
  144. package/src/codex-protocol/v2/CommandExecResizeParams.ts +18 -0
  145. package/src/codex-protocol/v2/CommandExecResizeResponse.ts +8 -0
  146. package/src/codex-protocol/v2/CommandExecResponse.ts +24 -0
  147. package/src/codex-protocol/v2/CommandExecTerminalSize.ts +16 -0
  148. package/src/codex-protocol/v2/CommandExecTerminateParams.ts +13 -0
  149. package/src/codex-protocol/v2/CommandExecTerminateResponse.ts +8 -0
  150. package/src/codex-protocol/v2/CommandExecWriteParams.ts +22 -0
  151. package/src/codex-protocol/v2/CommandExecWriteResponse.ts +8 -0
  152. package/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +7 -0
  153. package/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +5 -0
  154. package/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +62 -0
  155. package/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +6 -0
  156. package/src/codex-protocol/v2/CommandExecutionSource.ts +5 -0
  157. package/src/codex-protocol/v2/CommandExecutionStatus.ts +5 -0
  158. package/src/codex-protocol/v2/CommandMigration.ts +5 -0
  159. package/src/codex-protocol/v2/ComputerUseRequirements.ts +5 -0
  160. package/src/codex-protocol/v2/Config.ts +26 -0
  161. package/src/codex-protocol/v2/ConfigBatchWriteParams.ts +14 -0
  162. package/src/codex-protocol/v2/ConfigEdit.ts +7 -0
  163. package/src/codex-protocol/v2/ConfigLayer.ts +7 -0
  164. package/src/codex-protocol/v2/ConfigLayerMetadata.ts +6 -0
  165. package/src/codex-protocol/v2/ConfigLayerSource.ts +21 -0
  166. package/src/codex-protocol/v2/ConfigReadParams.ts +11 -0
  167. package/src/codex-protocol/v2/ConfigReadResponse.ts +8 -0
  168. package/src/codex-protocol/v2/ConfigRequirements.ts +13 -0
  169. package/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +10 -0
  170. package/src/codex-protocol/v2/ConfigValueWriteParams.ts +11 -0
  171. package/src/codex-protocol/v2/ConfigWarningNotification.ts +22 -0
  172. package/src/codex-protocol/v2/ConfigWriteResponse.ts +12 -0
  173. package/src/codex-protocol/v2/ConfiguredHookHandler.ts +5 -0
  174. package/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +6 -0
  175. package/src/codex-protocol/v2/ContextCompactedNotification.ts +8 -0
  176. package/src/codex-protocol/v2/CreditsSnapshot.ts +5 -0
  177. package/src/codex-protocol/v2/DeprecationNoticeNotification.ts +13 -0
  178. package/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +5 -0
  179. package/src/codex-protocol/v2/DynamicToolCallParams.ts +6 -0
  180. package/src/codex-protocol/v2/DynamicToolCallResponse.ts +6 -0
  181. package/src/codex-protocol/v2/DynamicToolCallStatus.ts +5 -0
  182. package/src/codex-protocol/v2/DynamicToolSpec.ts +6 -0
  183. package/src/codex-protocol/v2/EnvironmentAddParams.ts +5 -0
  184. package/src/codex-protocol/v2/EnvironmentAddResponse.ts +5 -0
  185. package/src/codex-protocol/v2/ErrorNotification.ts +6 -0
  186. package/src/codex-protocol/v2/ExecPolicyAmendment.ts +5 -0
  187. package/src/codex-protocol/v2/ExperimentalFeature.ts +37 -0
  188. package/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +12 -0
  189. package/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +9 -0
  190. package/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +19 -0
  191. package/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +11 -0
  192. package/src/codex-protocol/v2/ExperimentalFeatureStage.ts +5 -0
  193. package/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +13 -0
  194. package/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +6 -0
  195. package/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +5 -0
  196. package/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +6 -0
  197. package/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +5 -0
  198. package/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +11 -0
  199. package/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +5 -0
  200. package/src/codex-protocol/v2/FeedbackUploadParams.ts +5 -0
  201. package/src/codex-protocol/v2/FeedbackUploadResponse.ts +5 -0
  202. package/src/codex-protocol/v2/FileChangeApprovalDecision.ts +5 -0
  203. package/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +10 -0
  204. package/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +6 -0
  205. package/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +18 -0
  206. package/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +6 -0
  207. package/src/codex-protocol/v2/FileSystemAccessMode.ts +5 -0
  208. package/src/codex-protocol/v2/FileSystemPath.ts +7 -0
  209. package/src/codex-protocol/v2/FileSystemSandboxEntry.ts +7 -0
  210. package/src/codex-protocol/v2/FileSystemSpecialPath.ts +5 -0
  211. package/src/codex-protocol/v2/FileUpdateChange.ts +6 -0
  212. package/src/codex-protocol/v2/ForcedChatgptWorkspaceIds.ts +8 -0
  213. package/src/codex-protocol/v2/FsChangedNotification.ts +17 -0
  214. package/src/codex-protocol/v2/FsCopyParams.ts +21 -0
  215. package/src/codex-protocol/v2/FsCopyResponse.ts +8 -0
  216. package/src/codex-protocol/v2/FsCreateDirectoryParams.ts +17 -0
  217. package/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +8 -0
  218. package/src/codex-protocol/v2/FsGetMetadataParams.ts +13 -0
  219. package/src/codex-protocol/v2/FsGetMetadataResponse.ts +28 -0
  220. package/src/codex-protocol/v2/FsReadDirectoryEntry.ts +20 -0
  221. package/src/codex-protocol/v2/FsReadDirectoryParams.ts +13 -0
  222. package/src/codex-protocol/v2/FsReadDirectoryResponse.ts +13 -0
  223. package/src/codex-protocol/v2/FsReadFileParams.ts +13 -0
  224. package/src/codex-protocol/v2/FsReadFileResponse.ts +12 -0
  225. package/src/codex-protocol/v2/FsRemoveParams.ts +21 -0
  226. package/src/codex-protocol/v2/FsRemoveResponse.ts +8 -0
  227. package/src/codex-protocol/v2/FsUnwatchParams.ts +12 -0
  228. package/src/codex-protocol/v2/FsUnwatchResponse.ts +8 -0
  229. package/src/codex-protocol/v2/FsWatchParams.ts +17 -0
  230. package/src/codex-protocol/v2/FsWatchResponse.ts +13 -0
  231. package/src/codex-protocol/v2/FsWriteFileParams.ts +17 -0
  232. package/src/codex-protocol/v2/FsWriteFileResponse.ts +8 -0
  233. package/src/codex-protocol/v2/GetAccountParams.ts +13 -0
  234. package/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +14 -0
  235. package/src/codex-protocol/v2/GetAccountResponse.ts +6 -0
  236. package/src/codex-protocol/v2/GitInfo.ts +5 -0
  237. package/src/codex-protocol/v2/GrantedPermissionProfile.ts +7 -0
  238. package/src/codex-protocol/v2/GuardianApprovalReview.ts +13 -0
  239. package/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +9 -0
  240. package/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +8 -0
  241. package/src/codex-protocol/v2/GuardianCommandSource.ts +5 -0
  242. package/src/codex-protocol/v2/GuardianRiskLevel.ts +8 -0
  243. package/src/codex-protocol/v2/GuardianUserAuthorization.ts +8 -0
  244. package/src/codex-protocol/v2/GuardianWarningNotification.ts +13 -0
  245. package/src/codex-protocol/v2/HookCompletedNotification.ts +6 -0
  246. package/src/codex-protocol/v2/HookErrorInfo.ts +5 -0
  247. package/src/codex-protocol/v2/HookEventName.ts +5 -0
  248. package/src/codex-protocol/v2/HookExecutionMode.ts +5 -0
  249. package/src/codex-protocol/v2/HookHandlerType.ts +5 -0
  250. package/src/codex-protocol/v2/HookMetadata.ts +10 -0
  251. package/src/codex-protocol/v2/HookMigration.ts +5 -0
  252. package/src/codex-protocol/v2/HookOutputEntry.ts +6 -0
  253. package/src/codex-protocol/v2/HookOutputEntryKind.ts +5 -0
  254. package/src/codex-protocol/v2/HookPromptFragment.ts +5 -0
  255. package/src/codex-protocol/v2/HookRunStatus.ts +5 -0
  256. package/src/codex-protocol/v2/HookRunSummary.ts +13 -0
  257. package/src/codex-protocol/v2/HookScope.ts +5 -0
  258. package/src/codex-protocol/v2/HookSource.ts +5 -0
  259. package/src/codex-protocol/v2/HookStartedNotification.ts +6 -0
  260. package/src/codex-protocol/v2/HookTrustStatus.ts +5 -0
  261. package/src/codex-protocol/v2/HooksListEntry.ts +7 -0
  262. package/src/codex-protocol/v2/HooksListParams.ts +9 -0
  263. package/src/codex-protocol/v2/HooksListResponse.ts +6 -0
  264. package/src/codex-protocol/v2/ItemCompletedNotification.ts +10 -0
  265. package/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +38 -0
  266. package/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +33 -0
  267. package/src/codex-protocol/v2/ItemStartedNotification.ts +10 -0
  268. package/src/codex-protocol/v2/ListMcpServerStatusParams.ts +19 -0
  269. package/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +11 -0
  270. package/src/codex-protocol/v2/LoginAccountParams.ts +21 -0
  271. package/src/codex-protocol/v2/LoginAccountResponse.ts +17 -0
  272. package/src/codex-protocol/v2/LogoutAccountResponse.ts +5 -0
  273. package/src/codex-protocol/v2/ManagedHooksRequirements.ts +6 -0
  274. package/src/codex-protocol/v2/MarketplaceAddParams.ts +5 -0
  275. package/src/codex-protocol/v2/MarketplaceAddResponse.ts +6 -0
  276. package/src/codex-protocol/v2/MarketplaceInterface.ts +5 -0
  277. package/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +6 -0
  278. package/src/codex-protocol/v2/MarketplaceRemoveParams.ts +5 -0
  279. package/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +6 -0
  280. package/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +5 -0
  281. package/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +5 -0
  282. package/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +7 -0
  283. package/src/codex-protocol/v2/McpAuthStatus.ts +5 -0
  284. package/src/codex-protocol/v2/McpElicitationArrayType.ts +5 -0
  285. package/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +6 -0
  286. package/src/codex-protocol/v2/McpElicitationBooleanType.ts +5 -0
  287. package/src/codex-protocol/v2/McpElicitationConstOption.ts +5 -0
  288. package/src/codex-protocol/v2/McpElicitationEnumSchema.ts +8 -0
  289. package/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +6 -0
  290. package/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +7 -0
  291. package/src/codex-protocol/v2/McpElicitationNumberSchema.ts +6 -0
  292. package/src/codex-protocol/v2/McpElicitationNumberType.ts +5 -0
  293. package/src/codex-protocol/v2/McpElicitationObjectType.ts +5 -0
  294. package/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +9 -0
  295. package/src/codex-protocol/v2/McpElicitationSchema.ts +13 -0
  296. package/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +7 -0
  297. package/src/codex-protocol/v2/McpElicitationStringFormat.ts +5 -0
  298. package/src/codex-protocol/v2/McpElicitationStringSchema.ts +7 -0
  299. package/src/codex-protocol/v2/McpElicitationStringType.ts +5 -0
  300. package/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +6 -0
  301. package/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +7 -0
  302. package/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +7 -0
  303. package/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +6 -0
  304. package/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +7 -0
  305. package/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +6 -0
  306. package/src/codex-protocol/v2/McpResourceReadParams.ts +5 -0
  307. package/src/codex-protocol/v2/McpResourceReadResponse.ts +6 -0
  308. package/src/codex-protocol/v2/McpServerElicitationAction.ts +5 -0
  309. package/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +16 -0
  310. package/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +17 -0
  311. package/src/codex-protocol/v2/McpServerMigration.ts +5 -0
  312. package/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +5 -0
  313. package/src/codex-protocol/v2/McpServerOauthLoginParams.ts +5 -0
  314. package/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +5 -0
  315. package/src/codex-protocol/v2/McpServerRefreshResponse.ts +5 -0
  316. package/src/codex-protocol/v2/McpServerStartupState.ts +5 -0
  317. package/src/codex-protocol/v2/McpServerStatus.ts +9 -0
  318. package/src/codex-protocol/v2/McpServerStatusDetail.ts +5 -0
  319. package/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +6 -0
  320. package/src/codex-protocol/v2/McpServerToolCallParams.ts +6 -0
  321. package/src/codex-protocol/v2/McpServerToolCallResponse.ts +6 -0
  322. package/src/codex-protocol/v2/McpToolCallError.ts +5 -0
  323. package/src/codex-protocol/v2/McpToolCallProgressNotification.ts +5 -0
  324. package/src/codex-protocol/v2/McpToolCallResult.ts +6 -0
  325. package/src/codex-protocol/v2/McpToolCallStatus.ts +5 -0
  326. package/src/codex-protocol/v2/MemoryCitation.ts +6 -0
  327. package/src/codex-protocol/v2/MemoryCitationEntry.ts +5 -0
  328. package/src/codex-protocol/v2/MemoryResetResponse.ts +5 -0
  329. package/src/codex-protocol/v2/MergeStrategy.ts +5 -0
  330. package/src/codex-protocol/v2/MigrationDetails.ts +11 -0
  331. package/src/codex-protocol/v2/MockExperimentalMethodParams.ts +9 -0
  332. package/src/codex-protocol/v2/MockExperimentalMethodResponse.ts +9 -0
  333. package/src/codex-protocol/v2/Model.ts +19 -0
  334. package/src/codex-protocol/v2/ModelAvailabilityNux.ts +5 -0
  335. package/src/codex-protocol/v2/ModelListParams.ts +17 -0
  336. package/src/codex-protocol/v2/ModelListResponse.ts +11 -0
  337. package/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +5 -0
  338. package/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +5 -0
  339. package/src/codex-protocol/v2/ModelRerouteReason.ts +5 -0
  340. package/src/codex-protocol/v2/ModelReroutedNotification.ts +6 -0
  341. package/src/codex-protocol/v2/ModelServiceTier.ts +5 -0
  342. package/src/codex-protocol/v2/ModelUpgradeInfo.ts +5 -0
  343. package/src/codex-protocol/v2/ModelVerification.ts +5 -0
  344. package/src/codex-protocol/v2/ModelVerificationNotification.ts +6 -0
  345. package/src/codex-protocol/v2/NetworkAccess.ts +5 -0
  346. package/src/codex-protocol/v2/NetworkApprovalContext.ts +6 -0
  347. package/src/codex-protocol/v2/NetworkApprovalProtocol.ts +5 -0
  348. package/src/codex-protocol/v2/NetworkDomainPermission.ts +5 -0
  349. package/src/codex-protocol/v2/NetworkPolicyAmendment.ts +6 -0
  350. package/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +5 -0
  351. package/src/codex-protocol/v2/NetworkRequirements.ts +32 -0
  352. package/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +5 -0
  353. package/src/codex-protocol/v2/NonSteerableTurnKind.ts +5 -0
  354. package/src/codex-protocol/v2/OverriddenMetadata.ts +7 -0
  355. package/src/codex-protocol/v2/PatchApplyStatus.ts +5 -0
  356. package/src/codex-protocol/v2/PatchChangeKind.ts +5 -0
  357. package/src/codex-protocol/v2/PermissionGrantScope.ts +5 -0
  358. package/src/codex-protocol/v2/PermissionProfileListParams.ts +17 -0
  359. package/src/codex-protocol/v2/PermissionProfileListResponse.ts +11 -0
  360. package/src/codex-protocol/v2/PermissionProfileSummary.ts +13 -0
  361. package/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +11 -0
  362. package/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +11 -0
  363. package/src/codex-protocol/v2/PlanDeltaNotification.ts +9 -0
  364. package/src/codex-protocol/v2/PluginAuthPolicy.ts +5 -0
  365. package/src/codex-protocol/v2/PluginAvailability.ts +5 -0
  366. package/src/codex-protocol/v2/PluginDetail.ts +10 -0
  367. package/src/codex-protocol/v2/PluginHookSummary.ts +6 -0
  368. package/src/codex-protocol/v2/PluginInstallParams.ts +6 -0
  369. package/src/codex-protocol/v2/PluginInstallPolicy.ts +5 -0
  370. package/src/codex-protocol/v2/PluginInstallResponse.ts +7 -0
  371. package/src/codex-protocol/v2/PluginInstalledParams.ts +15 -0
  372. package/src/codex-protocol/v2/PluginInstalledResponse.ts +7 -0
  373. package/src/codex-protocol/v2/PluginInterface.ts +35 -0
  374. package/src/codex-protocol/v2/PluginListMarketplaceKind.ts +5 -0
  375. package/src/codex-protocol/v2/PluginListParams.ts +17 -0
  376. package/src/codex-protocol/v2/PluginListResponse.ts +7 -0
  377. package/src/codex-protocol/v2/PluginMarketplaceEntry.ts +13 -0
  378. package/src/codex-protocol/v2/PluginReadParams.ts +6 -0
  379. package/src/codex-protocol/v2/PluginReadResponse.ts +6 -0
  380. package/src/codex-protocol/v2/PluginShareCheckoutParams.ts +5 -0
  381. package/src/codex-protocol/v2/PluginShareCheckoutResponse.ts +6 -0
  382. package/src/codex-protocol/v2/PluginShareContext.ts +11 -0
  383. package/src/codex-protocol/v2/PluginShareDeleteParams.ts +5 -0
  384. package/src/codex-protocol/v2/PluginShareDeleteResponse.ts +5 -0
  385. package/src/codex-protocol/v2/PluginShareDiscoverability.ts +5 -0
  386. package/src/codex-protocol/v2/PluginShareListItem.ts +7 -0
  387. package/src/codex-protocol/v2/PluginShareListParams.ts +5 -0
  388. package/src/codex-protocol/v2/PluginShareListResponse.ts +6 -0
  389. package/src/codex-protocol/v2/PluginSharePrincipal.ts +7 -0
  390. package/src/codex-protocol/v2/PluginSharePrincipalRole.ts +5 -0
  391. package/src/codex-protocol/v2/PluginSharePrincipalType.ts +5 -0
  392. package/src/codex-protocol/v2/PluginShareSaveParams.ts +8 -0
  393. package/src/codex-protocol/v2/PluginShareSaveResponse.ts +5 -0
  394. package/src/codex-protocol/v2/PluginShareTarget.ts +7 -0
  395. package/src/codex-protocol/v2/PluginShareTargetRole.ts +5 -0
  396. package/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +5 -0
  397. package/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +7 -0
  398. package/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +7 -0
  399. package/src/codex-protocol/v2/PluginSkillReadParams.ts +5 -0
  400. package/src/codex-protocol/v2/PluginSkillReadResponse.ts +5 -0
  401. package/src/codex-protocol/v2/PluginSource.ts +6 -0
  402. package/src/codex-protocol/v2/PluginSummary.ts +27 -0
  403. package/src/codex-protocol/v2/PluginUninstallParams.ts +5 -0
  404. package/src/codex-protocol/v2/PluginUninstallResponse.ts +5 -0
  405. package/src/codex-protocol/v2/PluginsMigration.ts +5 -0
  406. package/src/codex-protocol/v2/ProcessExitedNotification.ts +42 -0
  407. package/src/codex-protocol/v2/ProcessKillParams.ts +12 -0
  408. package/src/codex-protocol/v2/ProcessKillResponse.ts +8 -0
  409. package/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +26 -0
  410. package/src/codex-protocol/v2/ProcessOutputStream.ts +8 -0
  411. package/src/codex-protocol/v2/ProcessResizePtyParams.ts +17 -0
  412. package/src/codex-protocol/v2/ProcessResizePtyResponse.ts +8 -0
  413. package/src/codex-protocol/v2/ProcessSpawnParams.ts +73 -0
  414. package/src/codex-protocol/v2/ProcessSpawnResponse.ts +8 -0
  415. package/src/codex-protocol/v2/ProcessTerminalSize.ts +16 -0
  416. package/src/codex-protocol/v2/ProcessWriteStdinParams.ts +21 -0
  417. package/src/codex-protocol/v2/ProcessWriteStdinResponse.ts +8 -0
  418. package/src/codex-protocol/v2/ProfileV2.ts +19 -0
  419. package/src/codex-protocol/v2/RateLimitReachedType.ts +5 -0
  420. package/src/codex-protocol/v2/RateLimitSnapshot.ts +9 -0
  421. package/src/codex-protocol/v2/RateLimitWindow.ts +5 -0
  422. package/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +6 -0
  423. package/src/codex-protocol/v2/ReasoningEffortOption.ts +6 -0
  424. package/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +5 -0
  425. package/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +5 -0
  426. package/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +5 -0
  427. package/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +5 -0
  428. package/src/codex-protocol/v2/RemoteControlDisableResponse.ts +6 -0
  429. package/src/codex-protocol/v2/RemoteControlEnableResponse.ts +6 -0
  430. package/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +9 -0
  431. package/src/codex-protocol/v2/RemoteControlStatusReadResponse.ts +6 -0
  432. package/src/codex-protocol/v2/RequestPermissionProfile.ts +7 -0
  433. package/src/codex-protocol/v2/ResidencyRequirement.ts +5 -0
  434. package/src/codex-protocol/v2/ReviewDelivery.ts +5 -0
  435. package/src/codex-protocol/v2/ReviewStartParams.ts +12 -0
  436. package/src/codex-protocol/v2/ReviewStartResponse.ts +13 -0
  437. package/src/codex-protocol/v2/ReviewTarget.ts +9 -0
  438. package/src/codex-protocol/v2/SandboxMode.ts +5 -0
  439. package/src/codex-protocol/v2/SandboxPolicy.ts +7 -0
  440. package/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +5 -0
  441. package/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +6 -0
  442. package/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +6 -0
  443. package/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +6 -0
  444. package/src/codex-protocol/v2/SessionMigration.ts +5 -0
  445. package/src/codex-protocol/v2/SessionSource.ts +6 -0
  446. package/src/codex-protocol/v2/SkillDependencies.ts +6 -0
  447. package/src/codex-protocol/v2/SkillErrorInfo.ts +5 -0
  448. package/src/codex-protocol/v2/SkillInterface.ts +6 -0
  449. package/src/codex-protocol/v2/SkillMetadata.ts +13 -0
  450. package/src/codex-protocol/v2/SkillScope.ts +5 -0
  451. package/src/codex-protocol/v2/SkillSummary.ts +7 -0
  452. package/src/codex-protocol/v2/SkillToolDependency.ts +5 -0
  453. package/src/codex-protocol/v2/SkillsChangedNotification.ts +11 -0
  454. package/src/codex-protocol/v2/SkillsConfigWriteParams.ts +14 -0
  455. package/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +5 -0
  456. package/src/codex-protocol/v2/SkillsListEntry.ts +7 -0
  457. package/src/codex-protocol/v2/SkillsListParams.ts +13 -0
  458. package/src/codex-protocol/v2/SkillsListResponse.ts +6 -0
  459. package/src/codex-protocol/v2/SortDirection.ts +5 -0
  460. package/src/codex-protocol/v2/SubagentMigration.ts +5 -0
  461. package/src/codex-protocol/v2/TerminalInteractionNotification.ts +5 -0
  462. package/src/codex-protocol/v2/TextElement.ts +14 -0
  463. package/src/codex-protocol/v2/TextPosition.ts +13 -0
  464. package/src/codex-protocol/v2/TextRange.ts +6 -0
  465. package/src/codex-protocol/v2/Thread.ts +86 -0
  466. package/src/codex-protocol/v2/ThreadActiveFlag.ts +5 -0
  467. package/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +10 -0
  468. package/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +5 -0
  469. package/src/codex-protocol/v2/ThreadArchiveParams.ts +5 -0
  470. package/src/codex-protocol/v2/ThreadArchiveResponse.ts +5 -0
  471. package/src/codex-protocol/v2/ThreadArchivedNotification.ts +5 -0
  472. package/src/codex-protocol/v2/ThreadBackgroundTerminalsCleanParams.ts +5 -0
  473. package/src/codex-protocol/v2/ThreadBackgroundTerminalsCleanResponse.ts +5 -0
  474. package/src/codex-protocol/v2/ThreadClosedNotification.ts +5 -0
  475. package/src/codex-protocol/v2/ThreadCompactStartParams.ts +5 -0
  476. package/src/codex-protocol/v2/ThreadCompactStartResponse.ts +5 -0
  477. package/src/codex-protocol/v2/ThreadDecrementElicitationParams.ts +12 -0
  478. package/src/codex-protocol/v2/ThreadDecrementElicitationResponse.ts +16 -0
  479. package/src/codex-protocol/v2/ThreadForkParams.ts +60 -0
  480. package/src/codex-protocol/v2/ThreadForkResponse.ts +35 -0
  481. package/src/codex-protocol/v2/ThreadGoal.ts +6 -0
  482. package/src/codex-protocol/v2/ThreadGoalClearParams.ts +5 -0
  483. package/src/codex-protocol/v2/ThreadGoalClearResponse.ts +5 -0
  484. package/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +5 -0
  485. package/src/codex-protocol/v2/ThreadGoalGetParams.ts +5 -0
  486. package/src/codex-protocol/v2/ThreadGoalGetResponse.ts +6 -0
  487. package/src/codex-protocol/v2/ThreadGoalSetParams.ts +6 -0
  488. package/src/codex-protocol/v2/ThreadGoalSetResponse.ts +6 -0
  489. package/src/codex-protocol/v2/ThreadGoalStatus.ts +5 -0
  490. package/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +6 -0
  491. package/src/codex-protocol/v2/ThreadIncrementElicitationParams.ts +12 -0
  492. package/src/codex-protocol/v2/ThreadIncrementElicitationResponse.ts +16 -0
  493. package/src/codex-protocol/v2/ThreadInjectItemsParams.ts +10 -0
  494. package/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +5 -0
  495. package/src/codex-protocol/v2/ThreadItem.ts +101 -0
  496. package/src/codex-protocol/v2/ThreadListParams.ts +54 -0
  497. package/src/codex-protocol/v2/ThreadListResponse.ts +18 -0
  498. package/src/codex-protocol/v2/ThreadLoadedListParams.ts +13 -0
  499. package/src/codex-protocol/v2/ThreadLoadedListResponse.ts +14 -0
  500. package/src/codex-protocol/v2/ThreadMemoryModeSetParams.ts +6 -0
  501. package/src/codex-protocol/v2/ThreadMemoryModeSetResponse.ts +5 -0
  502. package/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +20 -0
  503. package/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +12 -0
  504. package/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +6 -0
  505. package/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +5 -0
  506. package/src/codex-protocol/v2/ThreadReadParams.ts +9 -0
  507. package/src/codex-protocol/v2/ThreadReadResponse.ts +6 -0
  508. package/src/codex-protocol/v2/ThreadRealtimeAppendAudioParams.ts +9 -0
  509. package/src/codex-protocol/v2/ThreadRealtimeAppendAudioResponse.ts +8 -0
  510. package/src/codex-protocol/v2/ThreadRealtimeAppendTextParams.ts +8 -0
  511. package/src/codex-protocol/v2/ThreadRealtimeAppendTextResponse.ts +8 -0
  512. package/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +8 -0
  513. package/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +8 -0
  514. package/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +8 -0
  515. package/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +9 -0
  516. package/src/codex-protocol/v2/ThreadRealtimeListVoicesParams.ts +8 -0
  517. package/src/codex-protocol/v2/ThreadRealtimeListVoicesResponse.ts +9 -0
  518. package/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +9 -0
  519. package/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +8 -0
  520. package/src/codex-protocol/v2/ThreadRealtimeStartParams.ts +16 -0
  521. package/src/codex-protocol/v2/ThreadRealtimeStartResponse.ts +8 -0
  522. package/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +13 -0
  523. package/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +9 -0
  524. package/src/codex-protocol/v2/ThreadRealtimeStopParams.ts +8 -0
  525. package/src/codex-protocol/v2/ThreadRealtimeStopResponse.ts +8 -0
  526. package/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +13 -0
  527. package/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +13 -0
  528. package/src/codex-protocol/v2/ThreadResumeParams.ts +71 -0
  529. package/src/codex-protocol/v2/ThreadResumeResponse.ts +35 -0
  530. package/src/codex-protocol/v2/ThreadRollbackParams.ts +12 -0
  531. package/src/codex-protocol/v2/ThreadRollbackResponse.ts +14 -0
  532. package/src/codex-protocol/v2/ThreadSetNameParams.ts +5 -0
  533. package/src/codex-protocol/v2/ThreadSetNameResponse.ts +5 -0
  534. package/src/codex-protocol/v2/ThreadSettings.ts +14 -0
  535. package/src/codex-protocol/v2/ThreadSettingsUpdateParams.ts +61 -0
  536. package/src/codex-protocol/v2/ThreadSettingsUpdateResponse.ts +5 -0
  537. package/src/codex-protocol/v2/ThreadSettingsUpdatedNotification.ts +6 -0
  538. package/src/codex-protocol/v2/ThreadShellCommandParams.ts +12 -0
  539. package/src/codex-protocol/v2/ThreadShellCommandResponse.ts +5 -0
  540. package/src/codex-protocol/v2/ThreadSortKey.ts +5 -0
  541. package/src/codex-protocol/v2/ThreadSource.ts +5 -0
  542. package/src/codex-protocol/v2/ThreadSourceKind.ts +5 -0
  543. package/src/codex-protocol/v2/ThreadStartParams.ts +57 -0
  544. package/src/codex-protocol/v2/ThreadStartResponse.ts +35 -0
  545. package/src/codex-protocol/v2/ThreadStartSource.ts +5 -0
  546. package/src/codex-protocol/v2/ThreadStartedNotification.ts +6 -0
  547. package/src/codex-protocol/v2/ThreadStatus.ts +6 -0
  548. package/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +6 -0
  549. package/src/codex-protocol/v2/ThreadTokenUsage.ts +6 -0
  550. package/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +6 -0
  551. package/src/codex-protocol/v2/ThreadTurnsItemsListParams.ts +18 -0
  552. package/src/codex-protocol/v2/ThreadTurnsItemsListResponse.ts +16 -0
  553. package/src/codex-protocol/v2/ThreadTurnsListParams.ts +23 -0
  554. package/src/codex-protocol/v2/ThreadTurnsListResponse.ts +18 -0
  555. package/src/codex-protocol/v2/ThreadUnarchiveParams.ts +5 -0
  556. package/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +6 -0
  557. package/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +5 -0
  558. package/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +5 -0
  559. package/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +6 -0
  560. package/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +5 -0
  561. package/src/codex-protocol/v2/TokenUsageBreakdown.ts +5 -0
  562. package/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +8 -0
  563. package/src/codex-protocol/v2/ToolRequestUserInputOption.ts +8 -0
  564. package/src/codex-protocol/v2/ToolRequestUserInputParams.ts +9 -0
  565. package/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +9 -0
  566. package/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +9 -0
  567. package/src/codex-protocol/v2/ToolsV2.ts +6 -0
  568. package/src/codex-protocol/v2/Turn.ts +33 -0
  569. package/src/codex-protocol/v2/TurnCompletedNotification.ts +6 -0
  570. package/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +9 -0
  571. package/src/codex-protocol/v2/TurnEnvironmentParams.ts +6 -0
  572. package/src/codex-protocol/v2/TurnError.ts +6 -0
  573. package/src/codex-protocol/v2/TurnInterruptParams.ts +5 -0
  574. package/src/codex-protocol/v2/TurnInterruptResponse.ts +5 -0
  575. package/src/codex-protocol/v2/TurnItemsView.ts +5 -0
  576. package/src/codex-protocol/v2/TurnPlanStep.ts +6 -0
  577. package/src/codex-protocol/v2/TurnPlanStepStatus.ts +5 -0
  578. package/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +6 -0
  579. package/src/codex-protocol/v2/TurnStartParams.ts +88 -0
  580. package/src/codex-protocol/v2/TurnStartResponse.ts +6 -0
  581. package/src/codex-protocol/v2/TurnStartedNotification.ts +6 -0
  582. package/src/codex-protocol/v2/TurnStatus.ts +5 -0
  583. package/src/codex-protocol/v2/TurnSteerParams.ts +15 -0
  584. package/src/codex-protocol/v2/TurnSteerResponse.ts +5 -0
  585. package/src/codex-protocol/v2/UserInput.ts +11 -0
  586. package/src/codex-protocol/v2/WarningNotification.ts +13 -0
  587. package/src/codex-protocol/v2/WebSearchAction.ts +5 -0
  588. package/src/codex-protocol/v2/WindowsSandboxReadiness.ts +5 -0
  589. package/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +6 -0
  590. package/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +6 -0
  591. package/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +5 -0
  592. package/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +7 -0
  593. package/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +5 -0
  594. package/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +5 -0
  595. package/src/codex-protocol/v2/WriteStatus.ts +5 -0
  596. package/src/codex-protocol/v2/index.ts +503 -0
  597. package/src/column.ts +44 -0
  598. package/src/engines/claude/claude-engine.ts +769 -0
  599. package/src/engines/claude/clock.ts +48 -0
  600. package/src/engines/claude/compact.ts +107 -0
  601. package/src/engines/claude/ctx.ts +239 -0
  602. package/src/engines/claude/doctor.ts +202 -0
  603. package/src/engines/claude/env.ts +16 -0
  604. package/src/engines/claude/history.ts +504 -0
  605. package/src/engines/claude/identifiers.ts +25 -0
  606. package/src/engines/claude/identity-migration.ts +16 -0
  607. package/src/engines/claude/idle.ts +91 -0
  608. package/src/engines/claude/keys.ts +163 -0
  609. package/src/engines/claude/last.ts +52 -0
  610. package/src/engines/claude/mem.ts +124 -0
  611. package/src/engines/claude/persistence.ts +41 -0
  612. package/src/engines/claude/post-turn.ts +45 -0
  613. package/src/engines/claude/reload.ts +53 -0
  614. package/src/engines/claude/repo-fs.ts +63 -0
  615. package/src/engines/claude/resume.ts +145 -0
  616. package/src/engines/claude/send.ts +86 -0
  617. package/src/engines/claude/spawn.ts +435 -0
  618. package/src/engines/claude/state.ts +124 -0
  619. package/src/engines/claude/tmux.ts +99 -0
  620. package/src/engines/claude/wait-signals.ts +128 -0
  621. package/src/engines/claude/wait.ts +59 -0
  622. package/src/engines/codex/ask.ts +69 -0
  623. package/src/engines/codex/engine.ts +1261 -0
  624. package/src/engines/codex/events.ts +106 -0
  625. package/src/engines/codex/history.ts +385 -0
  626. package/src/engines/codex/identity-migration.ts +14 -0
  627. package/src/engines/codex/ipc-bridge-process.ts +14 -0
  628. package/src/engines/codex/ipc-bridge.ts +844 -0
  629. package/src/engines/codex/persistence.ts +236 -0
  630. package/src/engines/codex/rollout.ts +384 -0
  631. package/src/engines/codex/rpc.ts +311 -0
  632. package/src/engines/codex/supervisor.ts +648 -0
  633. package/src/engines/codex/ui-ipc.ts +374 -0
  634. package/src/engines/codex/verb-common.ts +34 -0
  635. package/src/engines/codex/verb-lifecycle.ts +94 -0
  636. package/src/engines/codex/verb-state.ts +19 -0
  637. package/src/engines/codex/verb-turns.ts +49 -0
  638. package/src/engines/codex/verbs.ts +15 -0
  639. package/src/engines/engine.ts +91 -0
  640. package/src/engines/git-worktree.ts +137 -0
  641. package/src/engines/production.ts +19 -0
  642. package/src/engines/registry.ts +70 -0
  643. package/src/engines/teammate-record.ts +113 -0
  644. package/src/engines/types.ts +334 -0
  645. package/src/env.ts +29 -0
  646. package/src/grep.ts +39 -0
  647. package/src/help.ts +433 -0
  648. package/src/identity/name.ts +58 -0
  649. package/src/identity/router.ts +80 -0
  650. package/src/identity/uuid-prefix.ts +40 -0
  651. package/src/main.ts +39 -0
  652. package/src/persistence/atomic-file.ts +74 -0
  653. package/src/persistence/identity-store.ts +294 -0
  654. package/src/persistence/identity-writer.ts +28 -0
  655. package/src/persistence/paths.ts +138 -0
  656. package/src/plugin-root.ts +26 -0
  657. package/src/proc.ts +66 -0
  658. package/src/shared/verb-args.ts +331 -0
  659. package/src/tm.ts +54 -0
  660. package/src/tmux.ts +57 -0
  661. package/src/verbs/archive.ts +211 -0
  662. package/src/verbs/ask.ts +29 -0
  663. package/src/verbs/compact.ts +25 -0
  664. package/src/verbs/context.ts +68 -0
  665. package/src/verbs/ctx.ts +21 -0
  666. package/src/verbs/format.ts +213 -0
  667. package/src/verbs/history.ts +190 -0
  668. package/src/verbs/kill.ts +61 -0
  669. package/src/verbs/last.ts +34 -0
  670. package/src/verbs/ls.ts +27 -0
  671. package/src/verbs/mem.ts +40 -0
  672. package/src/verbs/poll.ts +61 -0
  673. package/src/verbs/reload.ts +17 -0
  674. package/src/verbs/resolve.ts +14 -0
  675. package/src/verbs/resume.ts +170 -0
  676. package/src/verbs/send.ts +36 -0
  677. package/src/verbs/spawn.ts +81 -0
  678. package/src/verbs/states.ts +74 -0
  679. package/src/verbs/status.ts +26 -0
  680. package/src/verbs/wait.ts +40 -0
  681. package/src/verbs.ts +56 -0
  682. package/src/ws-types.d.ts +9 -0
  683. package/third_party/ws/LICENSE +20 -0
  684. package/third_party/ws/README.md +548 -0
  685. package/third_party/ws/UPSTREAM.md +55 -0
  686. package/third_party/ws/browser.js +8 -0
  687. package/third_party/ws/index.js +22 -0
  688. package/third_party/ws/lib/buffer-util.js +131 -0
  689. package/third_party/ws/lib/constants.js +19 -0
  690. package/third_party/ws/lib/event-target.js +292 -0
  691. package/third_party/ws/lib/extension.js +203 -0
  692. package/third_party/ws/lib/limiter.js +55 -0
  693. package/third_party/ws/lib/permessage-deflate.js +528 -0
  694. package/third_party/ws/lib/receiver.js +760 -0
  695. package/third_party/ws/lib/sender.js +607 -0
  696. package/third_party/ws/lib/stream.js +161 -0
  697. package/third_party/ws/lib/subprotocol.js +62 -0
  698. package/third_party/ws/lib/validation.js +152 -0
  699. package/third_party/ws/lib/websocket-server.js +562 -0
  700. package/third_party/ws/lib/websocket.js +1407 -0
  701. package/third_party/ws/package.json +13 -0
  702. package/third_party/ws/wrapper.mjs +21 -0
@@ -0,0 +1,648 @@
1
+ /**
2
+ * Process supervision for the codex app-server daemons.
3
+ *
4
+ * Decision node-cli-orchestrator §5 puts daemon lifecycle on claudemux: the codex
5
+ * `app-server` is a long-lived process that outlives any single `tm`
6
+ * invocation, and with no resident core to hold it, `tm` owns spawning,
7
+ * liveness checking, and reaping. The state lives on the filesystem under
8
+ * `/tmp/teammate-codex/<name>/` — the path builders are in
9
+ * [`persistence.ts`](./persistence.ts), this module is the *operations* on top.
10
+ *
11
+ * What this module does **not** do:
12
+ *
13
+ * - It does not talk the protocol. The WebSocket client lives in
14
+ * [`rpc.ts`](./rpc.ts); a verb opens a connection to
15
+ * `codexSocketPath(name)` after the supervisor has reconciled the
16
+ * daemon. Lifecycle and traffic are kept on separate layers so a
17
+ * verb that fails to deliver a turn does not get confused for a
18
+ * verb whose daemon was never up.
19
+ * - It does not know about teammate semantics (one daemon per repo,
20
+ * ask-mode pool, etc.). The `name` is opaque here — the verb code
21
+ * decides what name to spawn under.
22
+ */
23
+
24
+ import {
25
+ spawn as spawnChild,
26
+ type ChildProcess,
27
+ type SpawnOptions,
28
+ } from 'node:child_process'
29
+ import { dirname, join } from 'node:path'
30
+ import { fileURLToPath } from 'node:url'
31
+ import {
32
+ closeSync,
33
+ existsSync,
34
+ mkdirSync,
35
+ openSync,
36
+ readFileSync,
37
+ readdirSync,
38
+ renameSync,
39
+ rmdirSync,
40
+ rmSync,
41
+ statSync,
42
+ writeFileSync,
43
+ writeSync,
44
+ } from 'node:fs'
45
+
46
+ import {
47
+ codexBorrowLockFile,
48
+ codexIpcBridgePidFile,
49
+ codexIpcBridgeStderrLogFile,
50
+ codexIpcBridgeStdoutLogFile,
51
+ codexLastSeenFile,
52
+ codexMetaFile,
53
+ codexPidFile,
54
+ codexRegistryRoot,
55
+ codexSocketPath,
56
+ codexStartedAtFile,
57
+ codexStderrLogFile,
58
+ codexTeammateDir,
59
+ codexThreadFile,
60
+ codexStdoutLogFile,
61
+ } from './persistence.js'
62
+ import { validateTeammateName } from '../../identity/name.js'
63
+
64
+ /** Snapshot of one daemon's on-disk state. `null` for a missing entry. */
65
+ export interface DaemonState {
66
+ name: string
67
+ pid: number
68
+ startedAt: number
69
+ socketPath: string
70
+ threadId: string | null
71
+ lastSeen: number | null
72
+ }
73
+
74
+ export class CodexDaemonSpawnInProgressError extends Error {
75
+ constructor(name: string) {
76
+ super(`codex daemon '${name}' is already being spawned`)
77
+ this.name = 'CodexDaemonSpawnInProgressError'
78
+ }
79
+ }
80
+
81
+ export class CodexDaemonAlreadyAliveError extends Error {
82
+ constructor(name: string, pid: number | string) {
83
+ super(`codex daemon '${name}' is already alive (pid ${pid}); reap it first with tm doctor / tm kill`)
84
+ this.name = 'CodexDaemonAlreadyAliveError'
85
+ }
86
+ }
87
+
88
+ export interface SpawnDaemonOptions {
89
+ /** The teammate name (the registry subdirectory name). */
90
+ name: string
91
+ /**
92
+ * The codex executable. Default `'codex'` — relies on `PATH`. Tests
93
+ * pass an absolute path to a fake binary; the live integration suite
94
+ * relies on the user's installed `codex`.
95
+ */
96
+ binPath?: string
97
+ /**
98
+ * Extra args to append after `app-server --listen unix://<socket>`.
99
+ * The supervisor itself sets `--listen`; everything else (model,
100
+ * approval policy, sandbox) is the caller's choice.
101
+ */
102
+ extraArgs?: string[]
103
+ /** Working directory for the spawned daemon. Default `process.cwd()`. */
104
+ cwd?: string
105
+ /** Environment for the spawned daemon. Default `process.env`. */
106
+ env?: NodeJS.ProcessEnv
107
+ /**
108
+ * Ready-probe timeout in milliseconds — how long the supervisor will
109
+ * wait for the daemon to bind its listen socket before treating spawn
110
+ * as a failure. Default 10000ms.
111
+ */
112
+ readyTimeoutMs?: number
113
+ /**
114
+ * JSON-serializable spawn-time configuration (model, reasoning effort,
115
+ * approval policy, …). Persisted to `meta.json` so `tm doctor` and a
116
+ * future `tm resume` can read it back. Pass `null` to skip writing.
117
+ */
118
+ meta?: unknown
119
+ }
120
+
121
+ /** Atomic write: write to a sibling .tmp file and rename into place. */
122
+ function atomicWrite(path: string, content: string): void {
123
+ const tmpPath = `${path}.tmp`
124
+ const fd = openSync(tmpPath, 'w', 0o600)
125
+ try {
126
+ writeSync(fd, content)
127
+ } finally {
128
+ closeSync(fd)
129
+ }
130
+ renameSync(tmpPath, path)
131
+ }
132
+
133
+ function readIntFile(path: string): number | null {
134
+ try {
135
+ const txt = readFileSync(path, 'utf8').trim()
136
+ if (txt === '') return null
137
+ const n = Number.parseInt(txt, 10)
138
+ return Number.isFinite(n) ? n : null
139
+ } catch {
140
+ return null
141
+ }
142
+ }
143
+
144
+ function readTextFile(path: string): string | null {
145
+ try {
146
+ return readFileSync(path, 'utf8').trim() || null
147
+ } catch {
148
+ return null
149
+ }
150
+ }
151
+
152
+ function codexIpcBridgeDisabled(env: NodeJS.ProcessEnv): boolean {
153
+ return env['CLAUDEMUX_CODEX_IPC_BRIDGE'] === '0' || env['VITEST'] !== undefined
154
+ }
155
+
156
+ const CODEX_IPC_BRIDGE_PID_RESERVATION_STALE_MS = 10000
157
+
158
+ function ipcBridgePidFileIsBusy(name: string): boolean {
159
+ const pidPath = codexIpcBridgePidFile(name)
160
+ const existingPid = readIntFile(pidPath)
161
+ if (existingPid !== null) {
162
+ if (isProcessAlive(existingPid)) return true
163
+ rmSync(pidPath, { force: true })
164
+ return false
165
+ }
166
+ if (!existsSync(pidPath)) return false
167
+ try {
168
+ const ageMs = Date.now() - statSync(pidPath).mtimeMs
169
+ if (ageMs < CODEX_IPC_BRIDGE_PID_RESERVATION_STALE_MS) return true
170
+ } catch {
171
+ return true
172
+ }
173
+ rmSync(pidPath, { force: true })
174
+ return false
175
+ }
176
+
177
+ function clearStaleBorrowLock(name: string): void {
178
+ const lockPath = codexBorrowLockFile(name)
179
+ const pid = readIntFile(lockPath)
180
+ if (pid === null) return
181
+ if (!isProcessAlive(pid)) rmSync(lockPath, { force: true })
182
+ }
183
+
184
+ function codexSpawnLockFile(name: string): string {
185
+ return `${codexTeammateDir(name)}.spawn.lock`
186
+ }
187
+
188
+ function nowSec(): number {
189
+ return Math.floor(Date.now() / 1000)
190
+ }
191
+
192
+ /** `true` if `pid` names a live process this uid can signal. */
193
+ export function isProcessAlive(pid: number): boolean {
194
+ if (!Number.isFinite(pid) || pid <= 0) return false
195
+ try {
196
+ // The 0 signal probes for the process without delivering anything;
197
+ // throws ESRCH if there is no such pid, EPERM if it exists but is
198
+ // owned by another uid (which we count as "alive but we cannot reap"
199
+ // — still a live process). The other errnos are pathological and
200
+ // counted as "not alive" to keep the caller moving.
201
+ process.kill(pid, 0)
202
+ return true
203
+ } catch (e) {
204
+ const errno = (e as NodeJS.ErrnoException).code
205
+ if (errno === 'EPERM') return true
206
+ return false
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Send `signal` to every process in the group led by `pgid`.
212
+ *
213
+ * The codex CLI is a node wrapper that `spawn`s the real rust binary
214
+ * as a child, so a spawned daemon is two pids: the wrapper (PPID == us,
215
+ * which we record) and the rust process (PPID == wrapper). Both land
216
+ * in the same process group, with the wrapper as the group leader —
217
+ * `child_process.spawn({ detached: true })` arranges this on POSIX,
218
+ * no explicit `setpgid` needed.
219
+ *
220
+ * Killing only the leader pid (the historical behaviour) left the
221
+ * child reparented to init and quietly consuming the unix socket;
222
+ * `tm doctor` would `rm -rf` the registry directory but the rust
223
+ * process would keep running until the box rebooted. The dispatcher
224
+ * found 11 leaked codex processes from a single afternoon of stage 4
225
+ * dogfooding this way.
226
+ *
227
+ * Posix `kill(-pgid, sig)` delivers to every process in the group,
228
+ * including the reparented child. Node's `process.kill` passes the
229
+ * negative pid through unchanged. ESRCH (empty group, every member
230
+ * has exited) is the expected idempotent case; EPERM (the caller's
231
+ * uid cannot signal the target — rare for processes we spawned, but
232
+ * possible if a process has setuid'd to a different uid post-spawn)
233
+ * is also swallowed as "nothing more we can do from here". Both
234
+ * count as success from this function's point of view.
235
+ */
236
+ export function killProcessGroup(pgid: number, signal: NodeJS.Signals | number): void {
237
+ if (!Number.isFinite(pgid) || pgid <= 0) return
238
+ try {
239
+ process.kill(-pgid, signal)
240
+ } catch (e) {
241
+ const errno = (e as NodeJS.ErrnoException).code
242
+ if (errno === 'ESRCH' || errno === 'EPERM') return
243
+ // Anything else (EINVAL on an unsupported signal, etc) is the
244
+ // caller's bug, not a runtime condition — let it surface.
245
+ throw e
246
+ }
247
+ }
248
+
249
+ /** Read the on-disk state for one daemon. `null` if no registry entry. */
250
+ export function readDaemonState(name: string): DaemonState | null {
251
+ const pid = readIntFile(codexPidFile(name))
252
+ const startedAt = readIntFile(codexStartedAtFile(name))
253
+ if (pid === null || startedAt === null) return null
254
+ return {
255
+ name,
256
+ pid,
257
+ startedAt,
258
+ socketPath: codexSocketPath(name),
259
+ threadId: readTextFile(codexThreadFile(name)),
260
+ lastSeen: readIntFile(codexLastSeenFile(name)),
261
+ }
262
+ }
263
+
264
+ /** Is the daemon at `name` alive right now? */
265
+ export function daemonAlive(name: string): boolean {
266
+ const state = readDaemonState(name)
267
+ if (state === null) return false
268
+ return isProcessAlive(state.pid)
269
+ }
270
+
271
+ /** Is a spawn currently reserving or starting this daemon? */
272
+ export function daemonSpawnInProgress(name: string): boolean {
273
+ const lockPath = codexSpawnLockFile(name)
274
+ const pid = readIntFile(lockPath)
275
+ if (pid === null) return existsSync(lockPath)
276
+ if (isProcessAlive(pid)) return true
277
+ rmSync(lockPath, { force: true })
278
+ return false
279
+ }
280
+
281
+ /** Names of every registry entry, alive or stale. */
282
+ export function listDaemons(): string[] {
283
+ try {
284
+ const root = codexRegistryRoot()
285
+ const names: string[] = []
286
+ const walk = (dir: string, prefix: string): void => {
287
+ if (prefix.length > 0 && existsSync(join(dir, 'pid'))) names.push(prefix)
288
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
289
+ if (!entry.isDirectory()) continue
290
+ const childPrefix = prefix.length === 0 ? entry.name : `${prefix}/${entry.name}`
291
+ walk(join(dir, entry.name), childPrefix)
292
+ }
293
+ }
294
+ walk(root, '')
295
+ return names.filter((name) => validateTeammateName(name).kind === 'ok').sort()
296
+ } catch (e) {
297
+ if ((e as NodeJS.ErrnoException).code === 'ENOENT') return []
298
+ throw e
299
+ }
300
+ }
301
+
302
+ /** Is a codex daemon currently borrowed by a direct turn (`send` / `ask`)? */
303
+ export function daemonBorrowed(name: string): boolean {
304
+ clearStaleBorrowLock(name)
305
+ return existsSync(codexBorrowLockFile(name))
306
+ }
307
+
308
+ /** Try to borrow a daemon for one direct turn. Returns false when another caller holds it. */
309
+ export function tryBorrowDaemon(name: string): boolean {
310
+ clearStaleBorrowLock(name)
311
+ try {
312
+ const fd = openSync(codexBorrowLockFile(name), 'wx', 0o600)
313
+ try {
314
+ writeSync(fd, `${process.pid}\n`)
315
+ } finally {
316
+ closeSync(fd)
317
+ }
318
+ return true
319
+ } catch {
320
+ return false
321
+ }
322
+ }
323
+
324
+ /** Release a daemon borrow lock. Idempotent. */
325
+ export function releaseDaemonBorrow(name: string): void {
326
+ rmSync(codexBorrowLockFile(name), { force: true })
327
+ }
328
+
329
+ function removeSelfRegistry(name: string): void {
330
+ for (const file of [
331
+ codexPidFile(name),
332
+ codexSocketPath(name),
333
+ codexStartedAtFile(name),
334
+ codexThreadFile(name),
335
+ codexLastSeenFile(name),
336
+ codexStdoutLogFile(name),
337
+ codexStderrLogFile(name),
338
+ codexIpcBridgePidFile(name),
339
+ codexIpcBridgeStdoutLogFile(name),
340
+ codexIpcBridgeStderrLogFile(name),
341
+ codexMetaFile(name),
342
+ codexBorrowLockFile(name),
343
+ ]) {
344
+ rmSync(file, { force: true })
345
+ }
346
+ try {
347
+ rmdirSync(codexTeammateDir(name))
348
+ } catch (e) {
349
+ const code = (e as NodeJS.ErrnoException).code
350
+ if (code !== 'ENOENT' && code !== 'ENOTEMPTY' && code !== 'EEXIST') throw e
351
+ }
352
+ }
353
+
354
+ export function ensureCodexIpcBridge(
355
+ name: string,
356
+ opts: { readonly cwd?: string; readonly env?: NodeJS.ProcessEnv } = {},
357
+ ): void {
358
+ const env = opts.env ?? process.env
359
+ if (codexIpcBridgeDisabled(env)) return
360
+ const pidPath = codexIpcBridgePidFile(name)
361
+ if (ipcBridgePidFileIsBusy(name)) return
362
+ mkdirSync(codexTeammateDir(name), { recursive: true })
363
+
364
+ let pidFd: number | null = null
365
+ let stdoutFd: number | null = null
366
+ let stderrFd: number | null = null
367
+ try {
368
+ pidFd = openSync(pidPath, 'wx', 0o600)
369
+ } catch {
370
+ return
371
+ }
372
+ try {
373
+ stdoutFd = openSync(codexIpcBridgeStdoutLogFile(name), 'a', 0o600)
374
+ stderrFd = openSync(codexIpcBridgeStderrLogFile(name), 'a', 0o600)
375
+ const scriptPath = fileURLToPath(new URL('./ipc-bridge-process.ts', import.meta.url))
376
+ const child = spawnChild(
377
+ process.execPath,
378
+ [...process.execArgv, scriptPath, name],
379
+ {
380
+ cwd: opts.cwd ?? process.cwd(),
381
+ env,
382
+ detached: true,
383
+ stdio: ['ignore', stdoutFd, stderrFd],
384
+ },
385
+ )
386
+ child.unref()
387
+ child.on('error', () => {
388
+ rmSync(pidPath, { force: true })
389
+ })
390
+ if (child.pid === undefined) throw new Error('codex IPC bridge spawned without a pid')
391
+ writeSync(pidFd, `${child.pid}\n`)
392
+ } catch {
393
+ rmSync(pidPath, { force: true })
394
+ } finally {
395
+ if (stdoutFd !== null) closeSync(stdoutFd)
396
+ if (stderrFd !== null) closeSync(stderrFd)
397
+ if (pidFd !== null) closeSync(pidFd)
398
+ }
399
+ }
400
+
401
+ function reapCodexIpcBridge(name: string): void {
402
+ const pid = readIntFile(codexIpcBridgePidFile(name))
403
+ if (pid === null) return
404
+ if (isProcessAlive(pid)) killProcessGroup(pid, 'SIGTERM')
405
+ killProcessGroup(pid, 'SIGKILL')
406
+ }
407
+
408
+ /**
409
+ * Spawn one `codex app-server` daemon, detached so it outlives this `tm`
410
+ * invocation. Resolves once the listen socket exists on disk.
411
+ *
412
+ * On failure the daemon is killed (if it managed to start) and the
413
+ * registry entry torn back down — a half-spawned daemon is worse than
414
+ * none, because subsequent `tm` calls would mistake it for live.
415
+ */
416
+ export async function spawnDaemon(opts: SpawnDaemonOptions): Promise<DaemonState> {
417
+ const { name } = opts
418
+ const dir = codexTeammateDir(name)
419
+ const socketPath = codexSocketPath(name)
420
+ const readyTimeoutMs = opts.readyTimeoutMs ?? 10000
421
+ const spawnLock = codexSpawnLockFile(name)
422
+ mkdirSync(dirname(spawnLock), { recursive: true })
423
+ let lockFd: number | null = null
424
+ try {
425
+ lockFd = openSync(spawnLock, 'wx', 0o600)
426
+ writeSync(lockFd, `${process.pid}\n`)
427
+ } catch {
428
+ throw new CodexDaemonSpawnInProgressError(name)
429
+ }
430
+
431
+ try {
432
+ if (daemonAlive(name)) {
433
+ throw new CodexDaemonAlreadyAliveError(name, readDaemonState(name)?.pid ?? '?')
434
+ }
435
+ // Stale entry — torn down first so we never carry a previous pid forward.
436
+ removeSelfRegistry(name)
437
+ mkdirSync(dir, { recursive: true })
438
+
439
+ const state = await spawnDaemonUnlocked(opts, socketPath, readyTimeoutMs)
440
+ return state
441
+ } finally {
442
+ if (lockFd !== null) closeSync(lockFd)
443
+ rmSync(spawnLock, { force: true })
444
+ }
445
+ }
446
+
447
+ async function spawnDaemonUnlocked(
448
+ opts: SpawnDaemonOptions,
449
+ socketPath: string,
450
+ readyTimeoutMs: number,
451
+ ): Promise<DaemonState> {
452
+ const { name } = opts
453
+ // Precedence: explicit `opts.binPath` (tests) > `CLAUDEMUX_CODEX_BIN`
454
+ // env override (the integration-suite seam) > the default `'codex'`
455
+ // on PATH (production). The env hook lets the live-codex suite point
456
+ // at a non-default codex install without surgery on verb code.
457
+ //
458
+ // `||` not `??` for the env step: an empty string in the env is treated
459
+ // as "unset" (matching the bash `${VAR:-default}` convention this
460
+ // codebase chose elsewhere — see cli/context.ts). `opts.binPath` keeps
461
+ // `??` because an empty explicit option from a test would be a real
462
+ // intent to disable the binary, not a default-trigger.
463
+ const binPath =
464
+ opts.binPath ?? (process.env['CLAUDEMUX_CODEX_BIN'] || 'codex')
465
+ const args = ['app-server', '--listen', `unix://${socketPath}`, ...(opts.extraArgs ?? [])]
466
+ // Daemon stdio:
467
+ // stdin → /dev/null (ignored) — codex app-server is a pure socket server.
468
+ // stdout → `<dir>/stdout.log` — diagnostic; usually empty.
469
+ // stderr → `<dir>/stderr.log` — load-bearing. The codex protocol is
470
+ // `[experimental]`; when a request bounces or a turn aborts, codex
471
+ // writes its reason to stderr. Routing this to /dev/null hid the
472
+ // reason during stage 4 turn-roundtrip debugging — leave it on disk
473
+ // under the registry directory so `tail -f /tmp/teammate-codex/<n>/stderr.log`
474
+ // is one step away. The teammate's reap removes the directory and
475
+ // the log files with it.
476
+ const stdoutLog = codexStdoutLogFile(name)
477
+ const stderrLog = codexStderrLogFile(name)
478
+ const stdoutFd = openSync(stdoutLog, 'a', 0o600)
479
+ const stderrFd = openSync(stderrLog, 'a', 0o600)
480
+ const spawnOpts: SpawnOptions = {
481
+ cwd: opts.cwd ?? process.cwd(),
482
+ env: opts.env ?? process.env,
483
+ detached: true,
484
+ stdio: ['ignore', stdoutFd, stderrFd],
485
+ }
486
+
487
+ let child: ChildProcess
488
+ try {
489
+ child = await new Promise<ChildProcess>((resolve, reject) => {
490
+ let settled = false
491
+ const c = spawnChild(binPath, args, spawnOpts)
492
+ // Listening for `error` separately is mandatory — ENOENT (bad
493
+ // binPath) and EACCES (no exec bit) reach us as an `error` event,
494
+ // not a thrown exception from spawn(). Without this listener
495
+ // they become unhandled exceptions.
496
+ c.once('error', (e) => {
497
+ if (settled) return
498
+ settled = true
499
+ reject(e instanceof Error ? e : new Error(String(e)))
500
+ })
501
+ // `spawn` fires once the child has been spawned successfully —
502
+ // after this, we know the OS handed us a real pid.
503
+ c.once('spawn', () => {
504
+ if (settled) return
505
+ settled = true
506
+ resolve(c)
507
+ })
508
+ })
509
+ } catch (e) {
510
+ closeSync(stdoutFd)
511
+ closeSync(stderrFd)
512
+ removeSelfRegistry(name)
513
+ throw new Error(
514
+ `codex daemon '${name}' failed to spawn ${binPath}: ${(e as Error).message}`,
515
+ )
516
+ }
517
+ // The child holds its own duplicated fds for stdout/stderr after spawn;
518
+ // the parent's copies can be released so they don't leak across many
519
+ // spawn calls in long-running tests.
520
+ closeSync(stdoutFd)
521
+ closeSync(stderrFd)
522
+ // `unref` releases the parent's event loop from the child — the daemon
523
+ // keeps running after this Node process exits.
524
+ child.unref()
525
+ // Future `error` emissions (post-spawn) would still be unhandled. The
526
+ // child is detached and stdio-ignored, so the only thing left that
527
+ // could emit is a kill-signal handler failing; swallow it rather than
528
+ // crash the supervisor.
529
+ child.on('error', () => { /* daemon-side error, can no longer affect this invocation */ })
530
+
531
+ const pid = child.pid
532
+ if (pid === undefined) {
533
+ removeSelfRegistry(name)
534
+ throw new Error(`codex daemon '${name}' spawned without a pid`)
535
+ }
536
+
537
+ const startedAt = nowSec()
538
+ atomicWrite(codexPidFile(name), `${pid}\n`)
539
+ atomicWrite(codexStartedAtFile(name), `${startedAt}\n`)
540
+ if (opts.meta !== undefined && opts.meta !== null) {
541
+ atomicWrite(codexMetaFile(name), JSON.stringify(opts.meta, null, 2) + '\n')
542
+ }
543
+
544
+ try {
545
+ await waitForSocket(socketPath, pid, readyTimeoutMs)
546
+ } catch (e) {
547
+ // Daemon failed its readiness probe — kill it (if alive) and tear the
548
+ // registry entry back down. We do not want a half-spawned daemon
549
+ // lingering with a pid the next `tm` call would treat as healthy.
550
+ // Group-kill, not pid-kill — the codex node wrapper has already
551
+ // spawned the rust binary by the time `waitForSocket` times out
552
+ // in some failure modes, and a leader-only kill would orphan it.
553
+ killProcessGroup(pid, 'SIGKILL')
554
+ removeSelfRegistry(name)
555
+ throw e
556
+ }
557
+
558
+ return {
559
+ name,
560
+ pid,
561
+ startedAt,
562
+ socketPath,
563
+ threadId: null,
564
+ lastSeen: null,
565
+ }
566
+ }
567
+
568
+ /**
569
+ * Wait for `path` to exist on disk while `pid` stays alive. Returns when
570
+ * the socket appears, rejects when the process dies first or the deadline
571
+ * is reached. The poll interval is 25ms — fast enough that a healthy
572
+ * daemon (cold-start is a few hundred ms) clears the wait in a few ticks.
573
+ */
574
+ async function waitForSocket(
575
+ path: string,
576
+ pid: number,
577
+ timeoutMs: number,
578
+ ): Promise<void> {
579
+ const deadline = Date.now() + timeoutMs
580
+ while (Date.now() < deadline) {
581
+ if (existsSync(path)) {
582
+ // A socket node is `S_IFSOCK`; a stale regular file at the same
583
+ // path would also pass `existsSync`. Tighten the check so we only
584
+ // resolve when the daemon actually bound.
585
+ try {
586
+ const st = statSync(path)
587
+ if (st.isSocket()) return
588
+ } catch { /* race with daemon creating it — keep polling */ }
589
+ }
590
+ if (!isProcessAlive(pid)) {
591
+ throw new Error(
592
+ `codex daemon (pid ${pid}) exited before binding ${path}`,
593
+ )
594
+ }
595
+ await new Promise<void>((res) => setTimeout(res, 25))
596
+ }
597
+ throw new Error(
598
+ `codex daemon (pid ${pid}) did not bind ${path} within ${timeoutMs}ms`,
599
+ )
600
+ }
601
+
602
+ /**
603
+ * Tear a daemon down: SIGTERM the whole process group, give it 1s to
604
+ * exit cleanly, then SIGKILL the group, then remove this teammate's
605
+ * registry files. Idempotent — a missing entry, an already-dead leader,
606
+ * or a group that no longer has any members is not an error.
607
+ *
608
+ * Group-kill (`killProcessGroup`) rather than pid-kill is load-bearing:
609
+ * the codex node wrapper `spawn`s the rust binary as a child in its
610
+ * own process group; a SIGKILL to only the leader leaves the child
611
+ * reparented to init and still serving the unix socket. See the
612
+ * `killProcessGroup` docstring for the dispatcher-found orphan
613
+ * incident this fixes.
614
+ *
615
+ * The orphan-cleanup path matters even when the registry says the
616
+ * leader is dead — the group can still have a reparented member —
617
+ * so the SIGKILL fires unconditionally before registry cleanup.
618
+ */
619
+ export async function reapDaemon(name: string): Promise<void> {
620
+ reapCodexIpcBridge(name)
621
+ const state = readDaemonState(name)
622
+ if (state !== null) {
623
+ if (isProcessAlive(state.pid)) {
624
+ killProcessGroup(state.pid, 'SIGTERM')
625
+ const deadline = Date.now() + 1000
626
+ while (Date.now() < deadline) {
627
+ if (!isProcessAlive(state.pid)) break
628
+ await new Promise<void>((res) => setTimeout(res, 25))
629
+ }
630
+ }
631
+ // Always SIGKILL the group, even if the leader is already dead —
632
+ // an orphan (the wrapper's child after the wrapper exited) shows
633
+ // up here as "leader gone, group still has members" and is the
634
+ // exact case we are guarding against.
635
+ killProcessGroup(state.pid, 'SIGKILL')
636
+ }
637
+ removeSelfRegistry(name)
638
+ }
639
+
640
+ /** Touch `last-seen` for `name` — call after a successful RPC. */
641
+ export function touchLastSeen(name: string): void {
642
+ writeFileSync(codexLastSeenFile(name), `${nowSec()}\n`)
643
+ }
644
+
645
+ /** Persist the daemon's current thread id (`tm send` writes this after `thread/start`). */
646
+ export function writeThreadId(name: string, threadId: string): void {
647
+ atomicWrite(codexThreadFile(name), `${threadId}\n`)
648
+ }