@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,40 @@
1
+ /**
2
+ * Detect whether a user-supplied checkpoint argument looks like a partial
3
+ * canonical UUID — i.e. a string that, if extended, would form a valid
4
+ * `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX` (8-4-4-4-12) id. Used by Claude
5
+ * and Codex resume to attach an actionable hint to the "no transcript" /
6
+ * "not a valid uuid" error instead of letting the caller chase the
7
+ * misleading "wrong repo" line.
8
+ *
9
+ * "Looks like a canonical prefix" means: not empty, every position is
10
+ * either lowercase hex or a `-` exactly where canonical UUIDs put one
11
+ * (positions 8, 13, 18, 23), and the input is strictly shorter than the
12
+ * 36-char canonical form. That matches the inputs `tm history`'s detail
13
+ * mode actually accepts (it does `startsWith` against canonical dashed
14
+ * ids), so the hint we emit — "Run 'tm history <repo> <input>'" — is
15
+ * always actionable.
16
+ *
17
+ * Notably rejected: the no-dash 32-hex form (history's startsWith would
18
+ * miss a dashed candidate), uppercase hex, dashes at non-canonical
19
+ * positions, and the full 36-char UUID (which the strict regex would
20
+ * have accepted upstream and never reached this helper).
21
+ */
22
+ const DASH_POSITIONS: ReadonlySet<number> = new Set([8, 13, 18, 23])
23
+
24
+ function isLowerHexChar(ch: string): boolean {
25
+ const code = ch.charCodeAt(0)
26
+ return (code >= 48 && code <= 57) || (code >= 97 && code <= 102)
27
+ }
28
+
29
+ export function looksLikeUuidPrefix(input: string): boolean {
30
+ if (input.length === 0 || input.length >= 36) return false
31
+ for (let i = 0; i < input.length; i++) {
32
+ const ch = input[i]!
33
+ if (DASH_POSITIONS.has(i)) {
34
+ if (ch !== '-') return false
35
+ } else {
36
+ if (!isLowerHexChar(ch)) return false
37
+ }
38
+ }
39
+ return true
40
+ }
package/src/main.ts ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The process entrypoint — `tm`'s `argv` → `runCli` → `process` streams + exit code.
3
+ *
4
+ * Kept separate from [`cli.ts`](./cli.ts) so the library (`runCli`,
5
+ * `productionEnv`) imports cleanly into tests and harnesses without a side
6
+ * effect at module-load time. The `bin/tm` launcher execs Node against this
7
+ * file under `--experimental-transform-types`, so there is no build step
8
+ * between source and runtime.
9
+ */
10
+
11
+ import { productionEnv, runCli, triggersHelp } from './cli'
12
+
13
+ /** Read all of stdin; `undefined` on an interactive TTY so we never block on a never-arriving EOF. */
14
+ async function readStdin(): Promise<string | undefined> {
15
+ if (process.stdin.isTTY) return undefined
16
+ const chunks: Buffer[] = []
17
+ for await (const chunk of process.stdin) chunks.push(chunk as Buffer)
18
+ return Buffer.concat(chunks).toString('utf8')
19
+ }
20
+
21
+ async function main(): Promise<void> {
22
+ const argv = process.argv.slice(2)
23
+ // `archive` is the only verb that reads stdin. Slurp it only when the
24
+ // invocation will actually reach the verb handler — `tm archive --help` /
25
+ // `tm archive -h` route to the help branch and read no stdin in bash, so
26
+ // we must skip the slurp there too or the launcher blocks indefinitely on
27
+ // any caller whose stdin is a pipe an upstream producer holds open.
28
+ const needsStdin = argv[0] === 'archive' && !triggersHelp(argv.slice(1))
29
+ const stdin = needsStdin ? await readStdin() : undefined
30
+ const result = await runCli(argv, productionEnv(), stdin)
31
+ if (result.stdout) process.stdout.write(result.stdout)
32
+ if (result.stderr) process.stderr.write(result.stderr)
33
+ process.exitCode = result.code
34
+ }
35
+
36
+ main().catch((err) => {
37
+ process.stderr.write(`[tm] ${err instanceof Error ? err.message : String(err)}\n`)
38
+ process.exitCode = 1
39
+ })
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Atomic file primitives.
3
+ *
4
+ * Decision multi-engine-tui-architecture §"TeammateRecord" gives the registry layer one rule: writes
5
+ * to `/tmp/teammate-<name>.json` are atomic, so a verb that reads the file
6
+ * mid-write never sees a half-written record. Atomic on POSIX is
7
+ * write-tmp-then-rename(2): a rename onto an existing path is a single
8
+ * dentry swap and another reader observes either the old contents or the
9
+ * new contents, never a torn write.
10
+ *
11
+ * `reserveExclusive` is the matching primitive for the spawn path: create
12
+ * the marker with `O_CREAT | O_EXCL` so a second concurrent `tm spawn` of
13
+ * the same name fails immediately. The registry layer uses this to enforce
14
+ * the "cross-engine name reuse is forbidden" rule (decision codex-engine-flag §4 carried
15
+ * forward by multi-engine-tui-architecture).
16
+ *
17
+ * Both functions go through this module rather than scattering
18
+ * `writeFileSync` calls at the use sites — the next refactor that wants to
19
+ * swap in `fs/promises` or add fsync semantics changes one file.
20
+ */
21
+
22
+ import {
23
+ closeSync,
24
+ mkdirSync,
25
+ openSync,
26
+ readFileSync,
27
+ renameSync,
28
+ rmSync,
29
+ writeFileSync,
30
+ } from 'node:fs'
31
+ import { dirname } from 'node:path'
32
+
33
+ /**
34
+ * Write `content` to `path` atomically. The path's directory is created if
35
+ * it doesn't exist. Concurrent readers see either the old contents (if any)
36
+ * or the new contents — never a partial write.
37
+ */
38
+ export function atomicWrite(path: string, content: string): void {
39
+ mkdirSync(dirname(path), { recursive: true })
40
+ const tmp = `${path}.tmp.${process.pid}.${Date.now()}`
41
+ writeFileSync(tmp, content)
42
+ renameSync(tmp, path)
43
+ }
44
+
45
+ /** Read a file; return `null` if it does not exist. Any other error throws. */
46
+ export function readIfPresent(path: string): string | null {
47
+ try {
48
+ return readFileSync(path, 'utf8')
49
+ } catch (err) {
50
+ if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null
51
+ throw err
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Create the file with content using `O_CREAT | O_EXCL` — fails with `EEXIST`
57
+ * if the file already exists. The single-step exclusive create is the
58
+ * registry layer's "reserve this name" primitive: a second concurrent spawn
59
+ * of the same teammate cannot race past this point.
60
+ */
61
+ export function reserveExclusive(path: string, content: string): void {
62
+ mkdirSync(dirname(path), { recursive: true })
63
+ const fd = openSync(path, 'wx')
64
+ try {
65
+ writeFileSync(fd, content)
66
+ } finally {
67
+ closeSync(fd)
68
+ }
69
+ }
70
+
71
+ /** Remove the file if it exists; no error if it doesn't. */
72
+ export function removeIfPresent(path: string): void {
73
+ rmSync(path, { force: true })
74
+ }
@@ -0,0 +1,294 @@
1
+ /**
2
+ * The identity store — the one place that writes and reads
3
+ * `/tmp/teammate-<name>.json`. Decision multi-engine-tui-architecture §"TeammateRecord" anchors this
4
+ * file as the single source of truth for the base `TeammateRecord`, and
5
+ * §"Enforcement against silent regression" pins the constraint: no other
6
+ * file in `plugins/claudemux/src/` may touch the JSON marker.
7
+ *
8
+ * Three surfaces matter:
9
+ *
10
+ * - `reserve(record)` is the spawn-time write. It uses `O_CREAT | O_EXCL`
11
+ * against `/tmp/teammate-<name>.json`; a second concurrent `tm spawn`
12
+ * of the same name fails with `EEXIST`, which the verb formats as a
13
+ * "name already taken" error. Decision multi-engine-tui-architecture §"Engine identity is the
14
+ * JSON's `engine` field" makes this the authoritative race winner —
15
+ * whichever engine reserves first owns the name, the loser sees
16
+ * `already-exists`. The reservation is atomic enough on POSIX rename
17
+ * semantics that a `tm spawn ... --engine claude` on one terminal
18
+ * and a `tm spawn ... --engine codex` on another in the same
19
+ * millisecond never both succeed.
20
+ *
21
+ * - `read(name)` is the per-verb identity lookup. The router calls it
22
+ * once per CLI invocation to map a teammate name to its engine kind.
23
+ * Returns `null` for "no such teammate" (the data outcome, not an
24
+ * error).
25
+ *
26
+ * - `list()` enumerates every reserved teammate by reading
27
+ * `/tmp/teammate-*.json`. Decision multi-engine-tui-architecture §"Verb is the abstraction"
28
+ * relies on this for `tm ls`'s engine-agnostic listing — the verb
29
+ * asks for "every teammate identity" without knowing per-engine
30
+ * persistence shapes.
31
+ *
32
+ * - `remove(name)` is `tm kill`'s identity bookkeeping. The verb calls
33
+ * it after a successful kill so a later `tm spawn` of the same name
34
+ * is not blocked by a stale identity file.
35
+ */
36
+
37
+ import { readdirSync, statSync } from 'node:fs'
38
+ import { join } from 'node:path'
39
+
40
+ import {
41
+ atomicWrite,
42
+ readIfPresent,
43
+ removeIfPresent,
44
+ reserveExclusive,
45
+ } from './atomic-file'
46
+ import {
47
+ TEAMMATE_RECORD_SCHEMA,
48
+ type TeammateRecordJson,
49
+ } from '../engines/teammate-record'
50
+ import type { EngineKind, TeammateName } from '../engines/types'
51
+
52
+ /**
53
+ * The directory the identity files live in. Defaults to `/tmp` (the
54
+ * cross-process protocol root); tests point this at a fresh temp
55
+ * directory via `CLAUDEMUX_IDENTITY_ROOT` so a unit test can drive
56
+ * `reserve` / `read` / `list` without colliding with real dispatcher
57
+ * state. Resolved per call so a test that sets the env var inside
58
+ * `beforeEach` is honoured by code paths that captured the module
59
+ * earlier.
60
+ */
61
+ function identityRoot(): string {
62
+ return process.env['CLAUDEMUX_IDENTITY_ROOT'] || '/tmp'
63
+ }
64
+
65
+ /** Absolute path of the identity JSON for a teammate. */
66
+ export function identityFile(name: TeammateName): string {
67
+ return `${identityRoot()}/teammate-${name}.json`
68
+ }
69
+
70
+ /**
71
+ * Directory holding archived identity records — written when `tm kill`
72
+ * tears down a teammate, so a later `tm resume <name> <sid>` or
73
+ * `tm history <name>` can look up the killed teammate's cwd / repo /
74
+ * worktreeSlug / displayName without the agent reading `/tmp` files
75
+ * by hand.
76
+ *
77
+ * Lives under `identityRoot()` so `CLAUDEMUX_IDENTITY_ROOT` covers
78
+ * both the live and archived sides for tests. The directory name has
79
+ * no `.json` suffix, so `TOP_LEVEL_FILENAME` skips it and `list()`
80
+ * never enumerates archived records as live teammates.
81
+ */
82
+ function archiveDir(): string {
83
+ return join(identityRoot(), 'teammate-archive')
84
+ }
85
+
86
+ /** Absolute path of the archived identity JSON for a teammate. */
87
+ export function archivedIdentityFile(name: TeammateName): string {
88
+ return join(archiveDir(), `${name}.json`)
89
+ }
90
+
91
+ /** Regex pinning the top-level identity-file name shape; capture group 1 is the name. */
92
+ const TOP_LEVEL_FILENAME = /^teammate-(.+)\.json$/
93
+
94
+ export type ReserveResult =
95
+ | { kind: 'reserved' }
96
+ | { kind: 'taken'; existing: TeammateRecordJson }
97
+ | { kind: 'failed'; message: string }
98
+
99
+ function sleepSync(ms: number): void {
100
+ const signal = new Int32Array(new SharedArrayBuffer(4))
101
+ Atomics.wait(signal, 0, 0, ms)
102
+ }
103
+
104
+ function readReservedRecord(name: TeammateName): TeammateRecordJson | null {
105
+ const deadline = Date.now() + 50
106
+ let existing = read(name)
107
+ while (existing === null && Date.now() < deadline) {
108
+ sleepSync(1)
109
+ existing = read(name)
110
+ }
111
+ return existing
112
+ }
113
+
114
+ /**
115
+ * Atomically reserve a teammate name. The exclusive create fails with
116
+ * `EEXIST` if the file already exists — that case is mapped to `taken` and
117
+ * the existing record is read so the verb can format an "already-exists"
118
+ * error that names which engine owns the slot.
119
+ */
120
+ export function reserve(record: TeammateRecordJson): ReserveResult {
121
+ const path = identityFile(record.name)
122
+ try {
123
+ reserveExclusive(path, `${JSON.stringify(record, null, 2)}\n`)
124
+ return { kind: 'reserved' }
125
+ } catch (err) {
126
+ if ((err as NodeJS.ErrnoException).code === 'EEXIST') {
127
+ const existing = readReservedRecord(record.name)
128
+ if (existing === null) {
129
+ return { kind: 'failed', message: 'EEXIST on identity file but record could not be read back' }
130
+ }
131
+ return { kind: 'taken', existing }
132
+ }
133
+ return { kind: 'failed', message: err instanceof Error ? err.message : String(err) }
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Rewrite an existing teammate identity record atomically — used by
139
+ * `commit` after a `reserve` when the engine wants to persist data computed
140
+ * after the reservation (Phase 2a does not need this; reserved here for the
141
+ * hook on `/clear` flow where the recorded fields stabilise post-spawn).
142
+ */
143
+ export function write(record: TeammateRecordJson): void {
144
+ atomicWrite(identityFile(record.name), `${JSON.stringify(record, null, 2)}\n`)
145
+ }
146
+
147
+ /** Read an identity record; `null` for "no such teammate". */
148
+ export function read(name: TeammateName): TeammateRecordJson | null {
149
+ const raw = readIfPresent(identityFile(name))
150
+ if (raw === null) return null
151
+ return parse(raw)
152
+ }
153
+
154
+ /** Remove the identity file; idempotent. */
155
+ export function remove(name: TeammateName): void {
156
+ removeIfPresent(identityFile(name))
157
+ }
158
+
159
+ /**
160
+ * Snapshot the live identity record to the archive directory. Called
161
+ * by `tm kill` immediately before the live record is removed; after
162
+ * this call `readArchived(name)` returns the same record that
163
+ * `read(name)` returned just before the kill.
164
+ *
165
+ * No-op when there is no live record — `tm kill` running on a name
166
+ * with only a stale tmux session leaves nothing to archive, and the
167
+ * archive directory stays as it was (carrying the previous kill's
168
+ * snapshot if any). Returns whether anything was archived, so the
169
+ * verb layer can tell apart "archived a real identity" from
170
+ * "nothing to archive".
171
+ */
172
+ export function archive(name: TeammateName): boolean {
173
+ const raw = readIfPresent(identityFile(name))
174
+ if (raw === null) return false
175
+ atomicWrite(archivedIdentityFile(name), raw)
176
+ return true
177
+ }
178
+
179
+ /**
180
+ * Read a teammate's archived record — what was on disk the last time
181
+ * `tm kill` archived this name. Returns `null` for "no such archive"
182
+ * (never killed under this scheme, or removed by `removeArchived`).
183
+ */
184
+ export function readArchived(name: TeammateName): TeammateRecordJson | null {
185
+ const raw = readIfPresent(archivedIdentityFile(name))
186
+ if (raw === null) return null
187
+ return parse(raw)
188
+ }
189
+
190
+ /** Remove the archived identity file; idempotent. */
191
+ export function removeArchived(name: TeammateName): void {
192
+ removeIfPresent(archivedIdentityFile(name))
193
+ }
194
+
195
+ /**
196
+ * Enumerate every reserved teammate. Schema 2 made names flat (no `/`),
197
+ * so only the top-level `/tmp/teammate-*.json` files need scanning.
198
+ *
199
+ * The Codex engine's per-teammate registry directory
200
+ * (`/tmp/teammate-codex/<name>/`) is a directory, not a `*.json` file,
201
+ * so it does not match `TOP_LEVEL_FILENAME` and is skipped silently.
202
+ *
203
+ * Unparseable files are skipped (the caller does not get a partial
204
+ * record). A schema=1 record on disk parses as `null` (no
205
+ * back-compat read in schema 2's one-step cut) and is treated the
206
+ * same as a missing teammate — the verb that reads it will surface
207
+ * the migration error.
208
+ */
209
+ export function list(): readonly TeammateRecordJson[] {
210
+ const out: TeammateRecordJson[] = []
211
+ let entries: string[]
212
+ try {
213
+ entries = readdirSync(identityRoot())
214
+ } catch {
215
+ return []
216
+ }
217
+ for (const entry of entries) {
218
+ const top = entry.match(TOP_LEVEL_FILENAME)
219
+ if (top === null) continue
220
+ let info: ReturnType<typeof statSync>
221
+ try {
222
+ info = statSync(join(identityRoot(), entry))
223
+ } catch {
224
+ continue
225
+ }
226
+ if (!info.isFile()) continue
227
+ const raw = readIfPresent(join(identityRoot(), entry))
228
+ if (raw === null) continue
229
+ const parsed = parse(raw)
230
+ if (parsed !== null) out.push(parsed)
231
+ }
232
+ return out
233
+ }
234
+
235
+ /**
236
+ * Parse a raw JSON file into a `TeammateRecordJson`. Returns `null` if
237
+ * the shape doesn't match the current schema. Schema 2 is the
238
+ * name/repo decoupling cut — a schema=1 record parses as `null` (no
239
+ * silent back-compat read; the user is expected to `tm kill` legacy
240
+ * teammates before upgrading).
241
+ */
242
+ function parse(raw: string): TeammateRecordJson | null {
243
+ let value: unknown
244
+ try {
245
+ value = JSON.parse(raw)
246
+ } catch {
247
+ return null
248
+ }
249
+ if (typeof value !== 'object' || value === null) return null
250
+ const obj = value as Record<string, unknown>
251
+ if (obj['schema'] !== TEAMMATE_RECORD_SCHEMA) return null
252
+ if (typeof obj['name'] !== 'string') return null
253
+ if (typeof obj['engine'] !== 'string') return null
254
+ if (typeof obj['repo'] !== 'string') return null
255
+ if (typeof obj['cwd'] !== 'string') return null
256
+ if (typeof obj['createdAt'] !== 'number') return null
257
+ const worktreeSlug = obj['worktreeSlug']
258
+ if (worktreeSlug !== null && typeof worktreeSlug !== 'string') return null
259
+ const displayName = obj['displayName']
260
+ if (displayName !== null && typeof displayName !== 'string') return null
261
+ // The engine union is not validated against EngineKind here — an unknown
262
+ // engine kind on disk is "no such teammate from this build's view"
263
+ // (the router maps it through the registry, which will return undefined
264
+ // and the verb formats it as not-found).
265
+ return {
266
+ schema: TEAMMATE_RECORD_SCHEMA,
267
+ name: obj['name'],
268
+ engine: obj['engine'] as EngineKind,
269
+ repo: obj['repo'],
270
+ cwd: obj['cwd'],
271
+ worktreeSlug: worktreeSlug as string | null,
272
+ createdAt: obj['createdAt'],
273
+ displayName: displayName as string | null,
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Read the on-disk JSON for a teammate without enforcing schema
279
+ * version. Returns the `schema` field as a number when present —
280
+ * used by the dispatch layer to detect a legacy schema=1 record and
281
+ * print a migration hint instead of silently treating it as missing.
282
+ */
283
+ export function readRawSchema(name: TeammateName): number | null {
284
+ const raw = readIfPresent(identityFile(name))
285
+ if (raw === null) return null
286
+ try {
287
+ const value = JSON.parse(raw) as unknown
288
+ if (typeof value !== 'object' || value === null) return null
289
+ const schema = (value as Record<string, unknown>)['schema']
290
+ return typeof schema === 'number' ? schema : null
291
+ } catch {
292
+ return null
293
+ }
294
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `IdentityStoreWriter` — the verb-layer-facing seam for the identity
3
+ * file. Decision multi-engine-tui-architecture §"Verb is the abstraction" pulls `VerbContext`'s
4
+ * `identity` field out as an interface so the verb code does not import
5
+ * the persistence module directly; the Phase 1 `NoopIdentityStore` lives
6
+ * in `verbs/context.ts`, and Phase 2a's production implementation lives
7
+ * here.
8
+ *
9
+ * The only mutation verbs trigger is `remove(name)` — `killVerb` calls it
10
+ * after a successful kill so a later `tm spawn` of the same name is not
11
+ * blocked by a stale record. Spawn-time `reserve` and per-verb reads go
12
+ * through `persistence/identity-store.ts` directly (the verb file owns
13
+ * the rest of the spawn flow).
14
+ */
15
+
16
+ import { archive as archiveIdentity, remove as removeIdentity } from './identity-store'
17
+ import type { IdentityStore } from '../verbs/context'
18
+ import type { TeammateName } from '../engines/types'
19
+
20
+ /** Production `IdentityStore` — archives + deletes the JSON file. Idempotent. */
21
+ export class ProductionIdentityStore implements IdentityStore {
22
+ async archive(name: TeammateName): Promise<void> {
23
+ archiveIdentity(name)
24
+ }
25
+ async remove(name: TeammateName): Promise<void> {
26
+ removeIdentity(name)
27
+ }
28
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Path builders for every cross-process file the core touches.
3
+ *
4
+ * Path-builder discipline (repo CLAUDE.md, decision cross-process-cross-platform-invariants): every path under
5
+ * `/tmp/teammate-*`, `/tmp/claude-idle/*`, and Claude Code's project-dir root
6
+ * is constructed by a named function here — never by string concatenation at
7
+ * a use site. The `/tmp` protocol is the coupling layer between `tm`, the
8
+ * Bash hooks, and this core; spreading its shape across literals turns the
9
+ * next schema change into a non-atomic multi-file sweep.
10
+ *
11
+ * The hooks are Bash and cannot import this module, so they re-declare the
12
+ * same builders inline (`hooks/on-stop.sh`, `hooks/on-busy.sh`). The shapes
13
+ * here must stay byte-for-byte identical to those — see
14
+ * `.agents/domains/cross-process-protocol.md` for the contract.
15
+ */
16
+
17
+ import { join } from 'node:path'
18
+ import type { TeammateName } from '../engines/types'
19
+
20
+ /** The root directory the Claude engine's extension files live in. */
21
+ const TEAMMATE_ROOT = '/tmp'
22
+
23
+ /** Root of the per-sid idle/busy/last markers the Claude Code hooks maintain. */
24
+ export function idleDir(): string {
25
+ return '/tmp/claude-idle'
26
+ }
27
+
28
+ /** The bare `<sid>` marker — touched by `on-stop.sh` when a turn ends. */
29
+ export function idleMarkerFor(sid: string): string {
30
+ return join(idleDir(), sid)
31
+ }
32
+
33
+ /** The `<sid>.busy` marker — present while a session is mid-turn. */
34
+ export function busyMarkerFor(sid: string): string {
35
+ return join(idleDir(), `${sid}.busy`)
36
+ }
37
+
38
+ /** The `<sid>.last` file — text of the session's last assistant turn. */
39
+ export function lastFileFor(sid: string): string {
40
+ return join(idleDir(), `${sid}.last`)
41
+ }
42
+
43
+ /** `/tmp/teammate-<name>.cwd` — written at spawn; read by SessionStart hook. */
44
+ export function cwdFile(name: TeammateName): string {
45
+ return join(TEAMMATE_ROOT, `teammate-${name}.cwd`)
46
+ }
47
+
48
+ /** `/tmp/teammate-<name>.sid` — current session id; updated by SessionStart on `/clear`. */
49
+ export function sidFile(name: TeammateName): string {
50
+ return join(TEAMMATE_ROOT, `teammate-${name}.sid`)
51
+ }
52
+
53
+ /** `/tmp/teammate-<name>.ready` — touched by SessionStart; cleared before spawn. */
54
+ export function readyFile(name: TeammateName): string {
55
+ return join(TEAMMATE_ROOT, `teammate-${name}.ready`)
56
+ }
57
+
58
+ /** `/tmp/teammate-<name>.send-at` — touched per send; read by the pane-quiet wait fallback. */
59
+ export function sendAtFile(name: TeammateName): string {
60
+ return join(TEAMMATE_ROOT, `teammate-${name}.send-at`)
61
+ }
62
+
63
+ /** The session-name prefix every tmux teammate session carries. */
64
+ export const TMUX_SESSION_PREFIX = 'teammate-'
65
+
66
+ /**
67
+ * Compose a teammate name into its tmux session name. Schema 2 made
68
+ * names flat, so the prefix is the only transformation.
69
+ *
70
+ * Example: `flow-auth-7d3a` → `teammate-flow-auth-7d3a`.
71
+ */
72
+ export function tmuxSessionName(name: TeammateName): string {
73
+ return `${TMUX_SESSION_PREFIX}${name}`
74
+ }
75
+
76
+ /**
77
+ * Recover the teammate name from a tmux session string, or `null` if
78
+ * the session does not carry the teammate prefix. Schema 2's flat
79
+ * names make this an exact round-trip.
80
+ */
81
+ export function decodeTmuxSessionName(session: string): string | null {
82
+ if (!session.startsWith(TMUX_SESSION_PREFIX)) return null
83
+ return session.slice(TMUX_SESSION_PREFIX.length)
84
+ }
85
+
86
+ /**
87
+ * The on-disk worktree path for a teammate. Mirrors Claude Code's
88
+ * `claude --worktree <slug>` layout — `<repo>/.claude/worktrees/<slug>`
89
+ * — so the Claude engine's pre-spawn `.cwd` write and the Codex
90
+ * engine's self-managed `git worktree add` use the same builder.
91
+ */
92
+ export function worktreePathFor(repo: string, slug: string): string {
93
+ return `${repo}/.claude/worktrees/${slug}`
94
+ }
95
+
96
+ /**
97
+ * The git branch name `claude --worktree <slug>` creates. Codex's
98
+ * self-managed `git worktree add -b` uses the same branch name so a
99
+ * teammate's worktree layout looks identical whichever engine owns it.
100
+ */
101
+ export function worktreeBranchFor(slug: string): string {
102
+ return `worktree-${slug}`
103
+ }
104
+
105
+ /** Per-teammate file fan-out for the Claude engine. */
106
+ export interface ClaudeTeammateExtension {
107
+ readonly cwd: string
108
+ readonly sid: string
109
+ readonly ready: string
110
+ readonly sendAt: string
111
+ }
112
+
113
+ /** Materialise the Claude engine's extension paths for one teammate name. */
114
+ export function claudeExtensionFor(name: TeammateName): ClaudeTeammateExtension {
115
+ return {
116
+ cwd: cwdFile(name),
117
+ sid: sidFile(name),
118
+ ready: readyFile(name),
119
+ sendAt: sendAtFile(name),
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Encode a filesystem path into Claude Code's project-dir segment — the name
125
+ * of the directory under `~/.claude/projects/` that holds a cwd's transcripts.
126
+ *
127
+ * Claude Code derives that name by replacing every character that is not
128
+ * ASCII-alphanumeric or `-` with `-`. The rule was probed empirically: cwds
129
+ * containing `_`, `+`, `.`, `,`, `:`, `!`, `@`, `;`, or a literal space all
130
+ * land at the same `-bar` directory; only `A-Z`, `a-z`, `0-9`, and `-` survive
131
+ * verbatim. This is an Anthropic-controlled contract, and this is its one
132
+ * source of truth on the TypeScript side (decision cross-process-cross-platform-invariants): every site that
133
+ * locates a project dir routes through here, or the same repo ends up
134
+ * addressed by two different strings.
135
+ */
136
+ export function encodeProjectDir(cwd: string): string {
137
+ return cwd.replace(/[^A-Za-z0-9-]/g, '-')
138
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `<plugin-root>/bin/tm` and `<plugin-root>/.claude-plugin/plugin.json`
3
+ * path computation, in one place.
4
+ *
5
+ * This file lives at `src/plugin-root.ts`; the single-`..` walk from its
6
+ * `import.meta.url` lands at `plugins/claudemux/` regardless of how the
7
+ * launcher invoked Node, so callers do not have to think about it.
8
+ */
9
+
10
+ import { dirname, join } from 'node:path'
11
+ import { fileURLToPath } from 'node:url'
12
+
13
+ /** Absolute path to `<plugin-root>/bin/tm`, the user-facing launcher. */
14
+ export function tmWrapperPath(): string {
15
+ return join(pluginRoot(), 'bin', 'tm')
16
+ }
17
+
18
+ /** Absolute path to `<plugin-root>/.claude-plugin/plugin.json`. */
19
+ export function pluginJsonPath(): string {
20
+ return join(pluginRoot(), '.claude-plugin', 'plugin.json')
21
+ }
22
+
23
+ function pluginRoot(): string {
24
+ const moduleDir = dirname(fileURLToPath(import.meta.url))
25
+ return join(moduleDir, '..')
26
+ }