@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,86 @@
1
+ /**
2
+ * `tm send` — atomic round-trip by default: send a prompt, block on the
3
+ * Stop hook (or pane-quiet fallback), print the reply to stdout.
4
+ *
5
+ * The stdout/stderr split is load-bearing for piping: status lines
6
+ * (the "sent to ..." preamble, the post-turn ctx echo) ride stderr
7
+ * exclusively.
8
+ *
9
+ * Two exported entry points keep the strangler clean:
10
+ * - `claudeSend(args, env)` — byte-exact `TmResult`, the cli dispatch
11
+ * and the conformance harness both pin to this shape.
12
+ * - the shared parser in `shared/verb-args.ts` is reused by `claudeReload`
13
+ * (which fans out by calling `claudeSend` directly).
14
+ */
15
+
16
+ import { sendKeys } from './keys'
17
+ import { probeStillAlive, waitIdleSignal, waitPaneQuiet } from './wait-signals'
18
+ import { echoCtxToStderr, printLastOrEmpty } from './post-turn'
19
+ import { die } from './tmux'
20
+ import { isNonNegativeInteger } from './clock'
21
+ import { parseSendArgs } from '../../shared/verb-args'
22
+ import type { ClaudeVerbEnv } from './env'
23
+ import { EXIT_SYNC_WAIT_EXPIRED, type TmResult } from '../../tm'
24
+
25
+ /**
26
+ * The Claude-side `tm send` body. The wrapper at the CLI layer handles
27
+ * the codex fork; this function is Claude-only.
28
+ */
29
+ export async function claudeSend(args: readonly string[], env: ClaudeVerbEnv): Promise<TmResult> {
30
+ const parsed = parseSendArgs(args)
31
+ if ('error' in parsed) return parsed.error
32
+ const { name, prompt, hasPrompt, paneQuiet, timeout } = parsed
33
+ if (name === '') {
34
+ return die(
35
+ 'tm send: missing <name>. Usage: tm send <name> --prompt "..." ' +
36
+ '[--pane-quiet] [--timeout N]',
37
+ )
38
+ }
39
+ if (!hasPrompt) {
40
+ return die(
41
+ 'tm send: missing --prompt. Usage: tm send <name> --prompt "..." ' +
42
+ '[--pane-quiet] [--timeout N]',
43
+ )
44
+ }
45
+ if (timeout !== null && !isNonNegativeInteger(timeout)) {
46
+ return die(`tm send: --timeout must be a non-negative integer (got: '${timeout}')`)
47
+ }
48
+
49
+ const sentResult = await sendKeys(name, prompt, env.runTmux, process.env)
50
+ if (sentResult.code !== 0) return sentResult
51
+
52
+ const timeoutSec = timeout === null ? 1800 : Number(timeout)
53
+ const verdict = paneQuiet
54
+ ? await waitPaneQuiet(name, timeoutSec, env.runTmux)
55
+ : await waitIdleSignal(name, timeoutSec, false, env.runTmux)
56
+ if ('code' in verdict) return verdict
57
+ if (!verdict.ok) {
58
+ // Re-probe at the timeout moment: a teammate that died mid-wait must
59
+ // NOT be reported as "still running" with code 124, or the dispatcher's
60
+ // bg classifier will (correctly per the documented 124 contract)
61
+ // decide not to respawn and silently wait forever on a corpse. Only
62
+ // promise 124 ("still running") when the session + sid are still there.
63
+ const dead = await probeStillAlive(name, env.runTmux)
64
+ if (dead !== null) {
65
+ return { ...dead, stderr: sentResult.stderr + dead.stderr }
66
+ }
67
+ const kind = paneQuiet ? 'pane-quiet' : 'Stop hook'
68
+ return {
69
+ code: EXIT_SYNC_WAIT_EXPIRED,
70
+ stdout: printLastOrEmpty(name),
71
+ stderr:
72
+ sentResult.stderr +
73
+ `tm send: sync wait expired after ${timeoutSec}s on ${name} ` +
74
+ `(no ${kind} fired; the teammate is still running — tail with ` +
75
+ `'tm wait ${name}' or check 'tm status ${name}'). exit ${EXIT_SYNC_WAIT_EXPIRED}.\n`,
76
+ }
77
+ }
78
+
79
+ let trailingStderr = ''
80
+ if (!paneQuiet) trailingStderr = echoCtxToStderr(name, env)
81
+ return {
82
+ code: 0,
83
+ stdout: printLastOrEmpty(name),
84
+ stderr: sentResult.stderr + trailingStderr,
85
+ }
86
+ }
@@ -0,0 +1,435 @@
1
+ /**
2
+ * `tm spawn` — launch a Claude teammate (optionally inside a git
3
+ * worktree), record its sid + cwd, and either return as soon as
4
+ * `SessionStart` fires or hand off to a sync `tm send` when
5
+ * `--prompt` is set.
6
+ *
7
+ * Worktree integration: when `--worktree-slug <slug>` is passed,
8
+ * `claude` itself receives `--worktree <slug>` and creates
9
+ * `<repo>/.claude/worktrees/<slug>` (a real `git worktree add` under
10
+ * the hood, branch `worktree-<slug>`, baseRef `head` per the engine
11
+ * `--settings` block). claudemux predicts the worktree path before
12
+ * launch, writes it to `/tmp/teammate-<name>.cwd` so the
13
+ * SessionStart hook's byte-match succeeds when Claude reports its
14
+ * runtime cwd, and points the tmux pane at the parent repo so
15
+ * Claude can perform the chdir itself.
16
+ *
17
+ * Repository discipline: this verb writes the `<name>.cwd` /
18
+ * `<name>.sid` markers and the empty `<sid>.last` sentinel; the
19
+ * SessionStart hook separately produces the `<name>.ready` marker
20
+ * the poll below blocks on. Tearing those apart is what makes
21
+ * `tm spawn --prompt` atomic — the pre-send sleep happens against a
22
+ * REPL that has already booted.
23
+ *
24
+ * This module is Claude-only. The engine router owns cross-engine
25
+ * dispatch.
26
+ */
27
+
28
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs'
29
+ import { dirname } from 'node:path'
30
+
31
+ import { claudeSend } from './send'
32
+ import { readLastAssistantText, transcriptFile } from './ctx'
33
+ import { clearIdle, isDirectory } from './idle'
34
+ import { newSid } from './identifiers'
35
+ import { sleepMs } from './clock'
36
+ import { dieRepoNotFound } from './repo-fs'
37
+ import { die, sessionExists } from './tmux'
38
+ import {
39
+ cwdFile,
40
+ idleDir,
41
+ lastFileFor,
42
+ readyFile,
43
+ sidFile,
44
+ tmuxSessionName,
45
+ worktreePathFor,
46
+ } from '../../persistence/paths'
47
+ import type { ClaudeVerbEnv } from './env'
48
+ import { EXIT_SYNC_WAIT_EXPIRED, type TmResult } from '../../tm'
49
+
50
+ interface ClaudeLaunchArgs {
51
+ /** Physical repo path (the parent of the worktree, or the cwd itself). */
52
+ readonly repo: string
53
+ /** Runtime cwd — equals `worktreePathFor(repo, worktreeSlug)` when set, else `repo`. */
54
+ readonly cwd: string
55
+ /** Worktree slug; `null` for `--no-worktree`. */
56
+ readonly worktreeSlug: string | null
57
+ readonly resumeSid: string
58
+ readonly continueLatest: boolean
59
+ readonly displayName: string
60
+ readonly prompt: string
61
+ readonly hasPrompt: boolean
62
+ /**
63
+ * Caller-supplied `--timeout` (seconds, decimal string) for the inner
64
+ * `tm send` handoff on the `--prompt` sync path. `null` means "use the
65
+ * `tm send` default" (1800s). MUST be honored or `tm spawn --prompt
66
+ * --timeout N` silently waits 1800s and the dispatcher's 124 classifier
67
+ * never fires inside the window it was scheduled against.
68
+ */
69
+ readonly timeout: string | null
70
+ }
71
+
72
+ /**
73
+ * Single-quote-escape a string for safe embedding in a bash command
74
+ * line. `tm`'s shell-out builds the `claude --session-id ... -n '...'`
75
+ * string and passes it to `tmux send-keys`; the native form constructs
76
+ * the same string so the running REPL's argv is byte-equal to bash's.
77
+ */
78
+ function shellSingleQuote(value: string): string {
79
+ return `'${value.replace(/'/g, `'\\''`)}'`
80
+ }
81
+
82
+ /**
83
+ * `tm`'s `teammate_launch_flags`: the flag string between
84
+ * `claude --session-id|--resume <sid>` and the optional `-n '<name>'`
85
+ * / `--worktree <slug>` extras. A bare tool name in
86
+ * `--disallowedTools` drops it from the model's context entirely.
87
+ */
88
+ function teammateLaunchFlags(mdExcludes: string): string {
89
+ return `--settings ${shellSingleQuote(mdExcludes)} --disallowedTools AskUserQuestion`
90
+ }
91
+
92
+ /**
93
+ * The settings JSON merged into every teammate launch. Two
94
+ * behaviours live here:
95
+ *
96
+ * - `claudeMdExcludes` keeps the dispatcher's CLAUDE.md /
97
+ * CLAUDE.local.md out of the teammate's context (a teammate
98
+ * inherits its own repo's CLAUDE.md, not the dispatcher's).
99
+ *
100
+ * - `worktree.baseRef = "head"` pins the worktree's base to local
101
+ * HEAD, not `origin/<default>`. Dispatchers often spawn teammates
102
+ * on top of branches with local commits not yet pushed; `fresh`
103
+ * would silently rewind that work. The block is only emitted when
104
+ * a worktree is actually requested — `--no-worktree` runs leave
105
+ * the user's global `worktree.*` settings undisturbed.
106
+ */
107
+ function teammateSettingsJson(
108
+ dispatcherDir: string,
109
+ worktreeSlug: string | null,
110
+ ): string {
111
+ const settings: Record<string, unknown> = {
112
+ claudeMdExcludes: [
113
+ `${dispatcherDir}/CLAUDE.md`,
114
+ `${dispatcherDir}/CLAUDE.local.md`,
115
+ ],
116
+ }
117
+ if (worktreeSlug !== null) {
118
+ settings['worktree'] = { baseRef: 'head' }
119
+ }
120
+ return JSON.stringify(settings)
121
+ }
122
+
123
+ /**
124
+ * Run `tm spawn`'s readiness poll: block until `<name>.ready` appears
125
+ * or 18s (60 × 0.3s) elapse. Returns the ms it took to fire, or `null`
126
+ * on timeout — the caller prints the verb's stderr accordingly.
127
+ */
128
+ async function pollReady(name: string): Promise<number | null> {
129
+ const rf = readyFile(name)
130
+ for (let i = 1; i <= 60; i++) {
131
+ if (existsSync(rf)) return i * 300
132
+ await sleepMs(300)
133
+ }
134
+ return null
135
+ }
136
+
137
+ /**
138
+ * Public Claude spawn entrypoint. Argument shape matches the engine
139
+ * router's `argv = [name, --repo R, --cwd C, --worktree-slug S,
140
+ * --resume SID, --display-name DN, --prompt P, --timeout N]`.
141
+ */
142
+ export async function claudeSpawn(
143
+ args: readonly string[],
144
+ env: ClaudeVerbEnv,
145
+ ): Promise<TmResult> {
146
+ const name = args[0] ?? ''
147
+ if (name.length === 0) {
148
+ return die('usage: tm spawn <path> [--name <id>] [--prompt "..."]')
149
+ }
150
+ const launch = parseClaudeLaunchArgs(args.slice(1))
151
+ if ('error' in launch) return launch.error
152
+ return claudeLaunch({
153
+ repo: launch.repo,
154
+ cwd: launch.cwd,
155
+ worktreeSlug: launch.worktreeSlug,
156
+ resumeSid: launch.resumeSid,
157
+ continueLatest: false,
158
+ displayName: launch.displayName,
159
+ prompt: launch.prompt,
160
+ hasPrompt: launch.hasPrompt,
161
+ timeout: launch.timeout,
162
+ }, env, name)
163
+ }
164
+
165
+ /**
166
+ * Equivalent of `claudeSpawn` for the `--continue` flavour. The
167
+ * engine router calls this from the resume verb on the Claude
168
+ * continue-latest path.
169
+ */
170
+ export async function claudeContinue(
171
+ name: string,
172
+ args: readonly string[],
173
+ env: ClaudeVerbEnv,
174
+ ): Promise<TmResult> {
175
+ const launch = parseClaudeLaunchArgs(args)
176
+ if ('error' in launch) return launch.error
177
+ return claudeLaunch({
178
+ repo: launch.repo,
179
+ cwd: launch.cwd,
180
+ worktreeSlug: launch.worktreeSlug,
181
+ resumeSid: '',
182
+ continueLatest: true,
183
+ displayName: launch.displayName,
184
+ prompt: launch.prompt,
185
+ hasPrompt: launch.hasPrompt,
186
+ timeout: launch.timeout,
187
+ }, env, name)
188
+ }
189
+
190
+ interface ParsedClaudeLaunch {
191
+ repo: string
192
+ cwd: string
193
+ worktreeSlug: string | null
194
+ resumeSid: string
195
+ displayName: string
196
+ prompt: string
197
+ hasPrompt: boolean
198
+ timeout: string | null
199
+ }
200
+
201
+ /**
202
+ * Decode the engine-router argv into a `ParsedClaudeLaunch`. The
203
+ * Claude engine's `spawn()` builds these args from the SpawnRequest
204
+ * fields the CLI dispatcher resolved; this is the matching unpack.
205
+ *
206
+ * Any flag the router does not currently emit (e.g. legacy
207
+ * `--repo-relative`) is rejected, surfaced via `parseSpawnArgs` for
208
+ * the legacy paths still exercised by `claudeSpawn` consumers.
209
+ */
210
+ function parseClaudeLaunchArgs(
211
+ args: readonly string[],
212
+ ): ParsedClaudeLaunch | { error: TmResult } {
213
+ let repo = ''
214
+ let cwd = ''
215
+ let worktreeSlug: string | null = null
216
+ let displayName = ''
217
+ let resumeSid = ''
218
+ let prompt = ''
219
+ let hasPrompt = false
220
+ let timeout: string | null = null
221
+ for (let i = 0; i < args.length; i++) {
222
+ const arg = args[i]!
223
+ const consumeValue = (): string | null => {
224
+ const next = args[i + 1]
225
+ if (next === undefined) return null
226
+ i++
227
+ return next
228
+ }
229
+ if (arg === '--repo') {
230
+ const v = consumeValue()
231
+ if (v === null) return { error: die('claude spawn: --repo requires a value') }
232
+ repo = v
233
+ } else if (arg === '--cwd') {
234
+ const v = consumeValue()
235
+ if (v === null) return { error: die('claude spawn: --cwd requires a value') }
236
+ cwd = v
237
+ } else if (arg === '--worktree-slug') {
238
+ const v = consumeValue()
239
+ if (v === null) return { error: die('claude spawn: --worktree-slug requires a value') }
240
+ worktreeSlug = v
241
+ } else if (arg === '--display-name') {
242
+ const v = consumeValue()
243
+ if (v === null) return { error: die('claude spawn: --display-name requires a value') }
244
+ displayName = v
245
+ } else if (arg === '--resume') {
246
+ const v = consumeValue()
247
+ if (v === null) return { error: die('claude spawn: --resume requires a value') }
248
+ resumeSid = v
249
+ } else if (arg === '--prompt') {
250
+ const v = consumeValue()
251
+ if (v === null) return { error: die('claude spawn: --prompt requires a value') }
252
+ prompt = v
253
+ hasPrompt = true
254
+ } else if (arg === '--timeout') {
255
+ const v = consumeValue()
256
+ if (v === null) return { error: die('claude spawn: --timeout requires a value') }
257
+ timeout = v
258
+ } else {
259
+ return { error: die(`claude spawn: unknown flag: ${arg}`) }
260
+ }
261
+ }
262
+ if (repo.length === 0) return { error: die('claude spawn: missing --repo') }
263
+ if (cwd.length === 0) cwd = repo
264
+ return { repo, cwd, worktreeSlug, resumeSid, displayName, prompt, hasPrompt, timeout }
265
+ }
266
+
267
+ async function claudeLaunch(
268
+ req: ClaudeLaunchArgs,
269
+ env: ClaudeVerbEnv,
270
+ name: string,
271
+ ): Promise<TmResult> {
272
+ const { repo, cwd, worktreeSlug, resumeSid, continueLatest, displayName, prompt, hasPrompt, timeout } = req
273
+ if (!isDirectory(repo)) return dieRepoNotFound('spawn', name, repo, env.dispatcherDir)
274
+
275
+ // The tmux pane is anchored at the repo root. When a worktree is
276
+ // requested, `claude --worktree <slug>` performs the chdir into
277
+ // `<repo>/.claude/worktrees/<slug>` itself; the recorded `.cwd`
278
+ // matches that final runtime path so the SessionStart hook's
279
+ // byte-match against the hook payload succeeds.
280
+ const paneCwd = repo
281
+ const mdExcludes = teammateSettingsJson(env.dispatcherDir, worktreeSlug)
282
+
283
+ const session = tmuxSessionName(name)
284
+ if (await sessionExists(session, env.runTmux)) {
285
+ if (hasPrompt) {
286
+ return die(
287
+ `${name} already exists (tmux=${session}) — atomic bootstrap rejected ` +
288
+ 'because the teammate is already running. Use ' +
289
+ `'tm send ${name} --prompt "…"' to drive an existing teammate, or ` +
290
+ `'tm kill ${name}' first to start over.`,
291
+ )
292
+ }
293
+ return {
294
+ code: 0,
295
+ stdout:
296
+ `${name} already exists (tmux=${session}; use 'tm status ${name}' to view, ` +
297
+ `or 'tm kill ${name}' first)\n`,
298
+ stderr: '',
299
+ }
300
+ }
301
+
302
+ // Clear the readiness signal BEFORE launching `claude`. The
303
+ // SessionStart hook re-touches the file once the REPL is up; the
304
+ // poll below blocks on it.
305
+ const rf = readyFile(name)
306
+ rmSync(rf, { force: true })
307
+
308
+ // Record the teammate's runtime cwd in place *before* spawning so
309
+ // the SessionStart hook finds it on its first attempt. The runtime
310
+ // cwd already reflects the worktree path (Claude's `--worktree`
311
+ // chdir target) when one is in use.
312
+ const cf = cwdFile(name)
313
+ mkdirSync(dirname(cf), { recursive: true })
314
+ writeFileSync(cf, `${cwd}\n`)
315
+
316
+ // `-P -F '#{session_id}'` returns the new session's internal id;
317
+ // use it as the subsequent `send-keys` target so prefix-match
318
+ // cannot wrong-route. `-e CLAUDEMUX_TEAMMATE_NAME=...` is the
319
+ // positive identity gate the on-session-start hook reads to
320
+ // discriminate "this teammate" from "the dispatcher happens to
321
+ // share the cwd".
322
+ let paneId = ''
323
+ try {
324
+ const newSession = await env.runTmux([
325
+ 'new-session',
326
+ '-d',
327
+ '-s',
328
+ session,
329
+ '-c',
330
+ paneCwd,
331
+ '-e',
332
+ `CLAUDEMUX_TEAMMATE_NAME=${name}`,
333
+ '-P',
334
+ '-F',
335
+ '#{session_id}',
336
+ ])
337
+ if (newSession.code !== 0) {
338
+ return die(`tmux new-session failed: ${newSession.stderr.trim() || newSession.stdout.trim()}`)
339
+ }
340
+ paneId = newSession.stdout.split('\n')[0] ?? ''
341
+ } catch (err) {
342
+ return die(`tmux new-session failed: ${err instanceof Error ? err.message : String(err)}`)
343
+ }
344
+ if (paneId.length === 0) return die(`tmux new-session returned no session id for ${name}`)
345
+
346
+ const sid = resumeSid.length > 0 ? resumeSid : continueLatest ? '' : newSid()
347
+ const launchFlags = teammateLaunchFlags(mdExcludes)
348
+ const nameArg =
349
+ displayName.length > 0 ? ` -n ${shellSingleQuote(displayName)}` : ` -n ${shellSingleQuote(name)}`
350
+ const worktreeArg = worktreeSlug !== null ? ` --worktree ${shellSingleQuote(worktreeSlug)}` : ''
351
+ const launchCmd =
352
+ continueLatest
353
+ ? `claude --continue ${launchFlags}${nameArg}${worktreeArg}`
354
+ : resumeSid.length > 0
355
+ ? `claude --resume ${sid} ${launchFlags}${nameArg}${worktreeArg}`
356
+ : `claude --session-id ${sid} ${launchFlags}${nameArg}${worktreeArg}`
357
+ await env.runTmux(['send-keys', '-t', paneId, launchCmd, 'Enter'])
358
+
359
+ let stderr = ''
360
+ const worktreeNote = worktreeSlug !== null ? `, worktree=${worktreePathFor(repo, worktreeSlug)}` : ''
361
+ if (continueLatest) {
362
+ stderr +=
363
+ `spawned: ${name} (tmux=${session}, cwd=${cwd}${worktreeNote}, continued latest sid=pending)\n`
364
+ } else if (resumeSid.length > 0) {
365
+ stderr += `spawned: ${name} (tmux=${session}, cwd=${cwd}${worktreeNote}, resumed sid=${sid})\n`
366
+ } else {
367
+ stderr += `spawned: ${name} (tmux=${session}, cwd=${cwd}${worktreeNote}, sid=${sid})\n`
368
+ }
369
+
370
+ if (!continueLatest) {
371
+ const sf = sidFile(name)
372
+ mkdirSync(dirname(sf), { recursive: true })
373
+ writeFileSync(sf, `${sid}\n`)
374
+ clearIdle(sid)
375
+ }
376
+
377
+ // `.last` seed. `clearIdle` above just removed the prior file;
378
+ // without a re-seed here, `tm last` / `tm send`'s "(no text
379
+ // reply…)" sentinel is the only thing the dispatcher can observe
380
+ // until the on-stop hook writes a fresh extraction — and that
381
+ // hook can return empty (tool-only turn, transcript-walk halting
382
+ // on a meta user entry) and `rm` the file, leaving the
383
+ // dispatcher with nothing.
384
+ //
385
+ // - Fresh spawn: write the empty sentinel. `tm last` reports the
386
+ // "no reply yet" state until the first real Stop.
387
+ // - Resume: extract the prior turn's assistant text from the
388
+ // existing transcript and seed `.last` with it (or the empty
389
+ // sentinel when no such text exists). The dispatcher can read the
390
+ // pre-relaunch deliverable immediately, and a hook miss on the
391
+ // next turn leaves that prior text in place rather than a
392
+ // missing file.
393
+ // - Continue-latest: sid is unknown until SessionStart fires and
394
+ // writes `.sid`, so there is nothing to key the marker by yet.
395
+ // The on-stop hook will create `.last` once it has a sid.
396
+ if (!continueLatest) {
397
+ mkdirSync(idleDir(), { recursive: true })
398
+ if (resumeSid.length === 0) {
399
+ writeFileSync(lastFileFor(sid), '')
400
+ } else {
401
+ const jsonl = transcriptFile(env.projectsDir, cwd, sid)
402
+ const prior = readLastAssistantText(jsonl)
403
+ writeFileSync(lastFileFor(sid), prior.length > 0 ? `${prior}\n` : '')
404
+ }
405
+ }
406
+
407
+ const readyAfter = await pollReady(name)
408
+ if (readyAfter !== null) {
409
+ stderr += `ready: ${name} (tmux=${session}, SessionStart fired after ~${readyAfter} ms)\n`
410
+ } else {
411
+ stderr +=
412
+ `WARN: ${name} (tmux=${session}) did not signal ready within 18s ` +
413
+ "(no SessionStart hook fire — the plugin's on-session-start.sh may not " +
414
+ 'be loaded, or claude failed to boot). Continuing, but if the REPL is ' +
415
+ "actually dead, a subsequent sync 'tm send' / 'tm spawn --prompt' / " +
416
+ "'tm compact' will block until its --timeout expires (default 1800s) " +
417
+ `and then exit ${EXIT_SYNC_WAIT_EXPIRED} (sync wait expired). ` +
418
+ `'tm status ${name}' shows the live pane if you need to verify.\n`
419
+ }
420
+
421
+ if (!hasPrompt) {
422
+ return { code: 0, stdout: '', stderr }
423
+ }
424
+
425
+ // Atomic bootstrap: settle, then hand off to `tm send`.
426
+ await sleepMs(3000)
427
+ const sendArgs: string[] = [name, '--prompt', prompt]
428
+ if (timeout !== null) sendArgs.push('--timeout', timeout)
429
+ const sendResult = await claudeSend(sendArgs, env)
430
+ return {
431
+ code: sendResult.code,
432
+ stdout: sendResult.stdout,
433
+ stderr: stderr + sendResult.stderr,
434
+ }
435
+ }
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Claude-engine state helpers — derive the per-teammate `extras` row the
3
+ * verb layer ingests for the `tm states` table.
4
+ *
5
+ * Decision multi-engine-tui-architecture §"Engines extend row shape, not the verb" puts the
6
+ * engine-private state fields on `TeammateListing.extras`. The verb
7
+ * formatter reads keys it knows; an engine that does not fill a key
8
+ * surfaces the `"-"` placeholder the legacy `tm states` produced.
9
+ *
10
+ * The keys this module writes:
11
+ *
12
+ * - `sidShort` — the 8-character prefix of the current Claude session
13
+ * id, or `"?"` when no sid file is on disk. Matches `cmd_states`'s
14
+ * `${sid:0:8}` and its `?` fallback.
15
+ * - `busy` — `"yes"` when the `<sid>.busy` marker exists, `"no"`
16
+ * otherwise. Tracks the on-busy / on-stop hook ping-pong.
17
+ * - `last` — `${size}B/${age}` when the `<sid>.last` file is present
18
+ * and non-empty, `"-"` otherwise.
19
+ * - `preview` — first non-control character line of `<sid>.last`,
20
+ * truncated to 50 code points (matching `perl -CSD substr 0 50`),
21
+ * or `"(no first line)"` when empty, or `"-"` when no `.last` file.
22
+ */
23
+
24
+ import { readFileSync, statSync, type Stats } from 'node:fs'
25
+
26
+ import { busyMarkerFor, lastFileFor, sidFile } from '../../persistence/paths'
27
+ import type { TeammateName } from '../types'
28
+
29
+ /** Trim trailing newlines without touching the rest of the string. */
30
+ function rstrip(text: string): string {
31
+ return text.replace(/\n+$/, '')
32
+ }
33
+
34
+ /** Read a file only if it exists and is non-empty (`tm`'s `[[ -s file ]]`). */
35
+ function readIfNonEmpty(path: string): string | null {
36
+ try {
37
+ if (statSync(path).size === 0) return null
38
+ return readFileSync(path, 'utf8')
39
+ } catch {
40
+ return null
41
+ }
42
+ }
43
+
44
+ /** Lookup a teammate's session id, or `null` when the marker is missing. */
45
+ export function readSid(name: TeammateName): string | null {
46
+ const raw = readIfNonEmpty(sidFile(name))
47
+ return raw === null ? null : rstrip(raw)
48
+ }
49
+
50
+ /** Whether a path is a regular file (mirrors `[[ -f file ]]`). */
51
+ function isRegularFile(path: string): boolean {
52
+ try {
53
+ return statSync(path).isFile()
54
+ } catch {
55
+ return false
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Format a second-count as a short relative age — `tm`'s `fmt_age`.
61
+ * Boundaries are exclusive on the upper end, matching the bash arithmetic
62
+ * (`(( age < 60 ))`).
63
+ */
64
+ export function fmtAge(age: number): string {
65
+ if (age < 60) return `${age}s`
66
+ if (age < 3600) return `${Math.floor(age / 60)}m`
67
+ if (age < 86400) return `${Math.floor(age / 3600)}h`
68
+ return `${Math.floor(age / 86400)}d`
69
+ }
70
+
71
+ /**
72
+ * The PREVIEW cell for one teammate — the first line of its `.last`,
73
+ * with control characters stripped, truncated to 50 characters (code
74
+ * points, as `tm`'s `perl -CSD substr` counts them). Empty after
75
+ * stripping, or the file unreadable, → `(no first line)`.
76
+ */
77
+ export function lastPreview(lastPath: string): string {
78
+ let content: string
79
+ try {
80
+ content = readFileSync(lastPath, 'utf8')
81
+ } catch {
82
+ return '(no first line)'
83
+ }
84
+ const preview = [...(content.split('\n')[0] ?? '')]
85
+ .filter((ch) => (ch.codePointAt(0) ?? 0) > 0x1f)
86
+ .slice(0, 50)
87
+ .join('')
88
+ return preview.length > 0 ? preview : '(no first line)'
89
+ }
90
+
91
+ /** The five `tm states` cells for one teammate: derived from the on-disk markers. */
92
+ export interface ClaudeListingExtras {
93
+ readonly sidShort: string
94
+ readonly busy: 'yes' | 'no'
95
+ readonly last: string
96
+ readonly preview: string
97
+ }
98
+
99
+ /**
100
+ * Compute the `states`-table cells for one teammate, sampling `now` once
101
+ * so a multi-row scan keeps a single clock reading (matching `cmd_states`).
102
+ */
103
+ export function listingExtras(name: TeammateName, now: number): ClaudeListingExtras {
104
+ const sid = readSid(name)
105
+ const sidShort = sid === null ? '?' : sid.slice(0, 8)
106
+ const busy: 'yes' | 'no' = sid !== null && isRegularFile(busyMarkerFor(sid)) ? 'yes' : 'no'
107
+ let last = '-'
108
+ let preview = '-'
109
+ if (sid !== null && sid.length > 0) {
110
+ const lf = lastFileFor(sid)
111
+ let stat: Stats | null
112
+ try {
113
+ stat = statSync(lf)
114
+ } catch {
115
+ stat = null
116
+ }
117
+ if (stat !== null && stat.size > 0) {
118
+ const age = now - Math.floor(stat.mtimeMs / 1000)
119
+ last = `${stat.size}B/${fmtAge(age)}`
120
+ preview = lastPreview(lf)
121
+ }
122
+ }
123
+ return { sidShort, busy, last, preview }
124
+ }