clawdex-mobile 5.0.1 → 5.0.2

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 (576) hide show
  1. package/README.md +4 -0
  2. package/docs/setup-and-operations.md +3 -1
  3. package/docs/troubleshooting.md +1 -0
  4. package/package.json +18 -8
  5. package/scripts/setup-secure-dev.sh +26 -17
  6. package/services/rust-bridge/Cargo.lock +1 -1
  7. package/services/rust-bridge/Cargo.toml +1 -1
  8. package/vendor/bridge-binaries/darwin-arm64/codex-rust-bridge +0 -0
  9. package/vendor/bridge-binaries/darwin-x64/codex-rust-bridge +0 -0
  10. package/vendor/bridge-binaries/linux-x64/codex-rust-bridge +0 -0
  11. package/vendor/bridge-binaries/win32-x64/codex-rust-bridge.exe +0 -0
  12. package/.artifacts/bridge-binaries/bridge-binaries-darwin-arm64/codex-rust-bridge +0 -0
  13. package/.artifacts/bridge-binaries/bridge-binaries-darwin-x64/codex-rust-bridge +0 -0
  14. package/.artifacts/bridge-binaries/bridge-binaries-linux-x64/codex-rust-bridge +0 -0
  15. package/.artifacts/bridge-binaries/bridge-binaries-win32-x64/codex-rust-bridge.exe +0 -0
  16. package/.github/workflows/ci.yml +0 -80
  17. package/.github/workflows/npm-release.yml +0 -208
  18. package/.github/workflows/pages.yml +0 -41
  19. package/AGENTS.md +0 -273
  20. package/STATUS.md +0 -115
  21. package/apps/mobile/.env.example +0 -6
  22. package/apps/mobile/App.tsx +0 -943
  23. package/apps/mobile/app.json +0 -77
  24. package/apps/mobile/assets/brand/adaptive-icon.png +0 -0
  25. package/apps/mobile/assets/brand/app-icon.png +0 -0
  26. package/apps/mobile/assets/brand/favicon.png +0 -0
  27. package/apps/mobile/assets/brand/mark.png +0 -0
  28. package/apps/mobile/assets/brand/splash-icon-white.png +0 -0
  29. package/apps/mobile/assets/brand/splash-icon.png +0 -0
  30. package/apps/mobile/babel.config.js +0 -7
  31. package/apps/mobile/eas.json +0 -40
  32. package/apps/mobile/eslint.config.cjs +0 -28
  33. package/apps/mobile/index.js +0 -5
  34. package/apps/mobile/package.json +0 -57
  35. package/apps/mobile/plugins/withAndroidCleartextTraffic.js +0 -14
  36. package/apps/mobile/src/api/__tests__/chatMapping.test.ts +0 -351
  37. package/apps/mobile/src/api/__tests__/client.test.ts +0 -1494
  38. package/apps/mobile/src/api/__tests__/ws.test.ts +0 -640
  39. package/apps/mobile/src/api/account.ts +0 -47
  40. package/apps/mobile/src/api/chatMapping.ts +0 -1048
  41. package/apps/mobile/src/api/client.ts +0 -1430
  42. package/apps/mobile/src/api/rateLimits.ts +0 -143
  43. package/apps/mobile/src/api/types.ts +0 -435
  44. package/apps/mobile/src/api/ws.ts +0 -852
  45. package/apps/mobile/src/bridgeUrl.ts +0 -105
  46. package/apps/mobile/src/components/ActivityBar.tsx +0 -95
  47. package/apps/mobile/src/components/ApprovalBanner.tsx +0 -207
  48. package/apps/mobile/src/components/BrandMark.tsx +0 -43
  49. package/apps/mobile/src/components/ChatHeader.tsx +0 -107
  50. package/apps/mobile/src/components/ChatInput.tsx +0 -457
  51. package/apps/mobile/src/components/ChatMessage.tsx +0 -959
  52. package/apps/mobile/src/components/ComposerUsageLimits.tsx +0 -167
  53. package/apps/mobile/src/components/SelectionSheet.tsx +0 -466
  54. package/apps/mobile/src/components/StatusLine.tsx +0 -52
  55. package/apps/mobile/src/components/ToolBlock.tsx +0 -67
  56. package/apps/mobile/src/components/TypingIndicator.tsx +0 -64
  57. package/apps/mobile/src/components/VoiceRecordingWaveform.tsx +0 -181
  58. package/apps/mobile/src/components/WorkspacePickerModal.tsx +0 -812
  59. package/apps/mobile/src/components/__tests__/chat-input-layout.test.ts +0 -35
  60. package/apps/mobile/src/components/__tests__/chatImageSource.test.ts +0 -44
  61. package/apps/mobile/src/components/__tests__/composerUsageLimits.test.ts +0 -138
  62. package/apps/mobile/src/components/__tests__/voiceWaveform.test.ts +0 -31
  63. package/apps/mobile/src/components/chat-input-layout.ts +0 -59
  64. package/apps/mobile/src/components/chatImageSource.ts +0 -86
  65. package/apps/mobile/src/components/usageLimitBadges.ts +0 -109
  66. package/apps/mobile/src/components/voiceWaveform.ts +0 -46
  67. package/apps/mobile/src/config.ts +0 -64
  68. package/apps/mobile/src/hooks/useVoiceRecorder.ts +0 -271
  69. package/apps/mobile/src/navigation/DrawerContent.tsx +0 -1129
  70. package/apps/mobile/src/navigation/__tests__/chatThreadTree.test.ts +0 -89
  71. package/apps/mobile/src/navigation/__tests__/drawerChats.test.ts +0 -65
  72. package/apps/mobile/src/navigation/chatThreadTree.ts +0 -191
  73. package/apps/mobile/src/navigation/drawerChats.ts +0 -9
  74. package/apps/mobile/src/screens/GitScreen.tsx +0 -1489
  75. package/apps/mobile/src/screens/MainScreen.tsx +0 -10511
  76. package/apps/mobile/src/screens/OnboardingScreen.tsx +0 -1746
  77. package/apps/mobile/src/screens/PrivacyScreen.tsx +0 -196
  78. package/apps/mobile/src/screens/SettingsScreen.tsx +0 -870
  79. package/apps/mobile/src/screens/TerminalScreen.tsx +0 -248
  80. package/apps/mobile/src/screens/TermsScreen.tsx +0 -192
  81. package/apps/mobile/src/screens/__tests__/agentThreadDisplay.test.ts +0 -80
  82. package/apps/mobile/src/screens/__tests__/agentThreads.test.ts +0 -170
  83. package/apps/mobile/src/screens/__tests__/gitDiff.test.ts +0 -131
  84. package/apps/mobile/src/screens/__tests__/planCardState.test.ts +0 -88
  85. package/apps/mobile/src/screens/__tests__/subAgentTranscript.test.ts +0 -102
  86. package/apps/mobile/src/screens/__tests__/transcriptMessages.test.ts +0 -97
  87. package/apps/mobile/src/screens/agentThreadDisplay.ts +0 -261
  88. package/apps/mobile/src/screens/agentThreads.ts +0 -167
  89. package/apps/mobile/src/screens/gitDiff.ts +0 -380
  90. package/apps/mobile/src/screens/planCardState.ts +0 -40
  91. package/apps/mobile/src/screens/subAgentTranscript.ts +0 -149
  92. package/apps/mobile/src/screens/transcriptMessages.ts +0 -102
  93. package/apps/mobile/src/theme.ts +0 -106
  94. package/apps/mobile/src/types/assets.d.ts +0 -4
  95. package/apps/mobile/tsconfig.json +0 -33
  96. package/docs/app-review-notes.md +0 -116
  97. package/docs/codex-app-server-cli-gap-tracker.md +0 -90
  98. package/docs/eas-builds.md +0 -91
  99. package/docs/open-source-license-requirements.md +0 -32
  100. package/docs/plans/2026-02-20-codex-desktop-style-redesign.md +0 -190
  101. package/docs/plans/2026-02-20-codex-mobile-implementation.md +0 -1630
  102. package/docs/plans/2026-02-21-codex-ui-redesign-design.md +0 -101
  103. package/docs/plans/2026-02-21-codex-ui-redesign.md +0 -1229
  104. package/docs/privacy-policy.md +0 -54
  105. package/docs/realtime-streaming-limitations.md +0 -161
  106. package/docs/terms-of-service.md +0 -33
  107. package/docs/voice-transcription.md +0 -87
  108. package/scripts/codex-live-demo.sh +0 -69
  109. package/scripts/start-bridge-secure.sh +0 -5
  110. package/scripts/start-expo.sh +0 -176
  111. package/scripts/sync-versions.js +0 -63
  112. package/scripts/teardown.sh +0 -136
  113. package/services/mac-bridge/.env.example +0 -10
  114. package/services/mac-bridge/codex-types/AbsolutePathBuf.ts +0 -14
  115. package/services/mac-bridge/codex-types/AddConversationListenerParams.ts +0 -6
  116. package/services/mac-bridge/codex-types/AddConversationSubscriptionResponse.ts +0 -5
  117. package/services/mac-bridge/codex-types/AgentMessageContent.ts +0 -5
  118. package/services/mac-bridge/codex-types/AgentMessageContentDeltaEvent.ts +0 -5
  119. package/services/mac-bridge/codex-types/AgentMessageDeltaEvent.ts +0 -5
  120. package/services/mac-bridge/codex-types/AgentMessageEvent.ts +0 -5
  121. package/services/mac-bridge/codex-types/AgentMessageItem.ts +0 -21
  122. package/services/mac-bridge/codex-types/AgentReasoningDeltaEvent.ts +0 -5
  123. package/services/mac-bridge/codex-types/AgentReasoningEvent.ts +0 -5
  124. package/services/mac-bridge/codex-types/AgentReasoningRawContentDeltaEvent.ts +0 -5
  125. package/services/mac-bridge/codex-types/AgentReasoningRawContentEvent.ts +0 -5
  126. package/services/mac-bridge/codex-types/AgentReasoningSectionBreakEvent.ts +0 -5
  127. package/services/mac-bridge/codex-types/AgentStatus.ts +0 -8
  128. package/services/mac-bridge/codex-types/ApplyPatchApprovalParams.ts +0 -21
  129. package/services/mac-bridge/codex-types/ApplyPatchApprovalRequestEvent.ts +0 -23
  130. package/services/mac-bridge/codex-types/ApplyPatchApprovalResponse.ts +0 -6
  131. package/services/mac-bridge/codex-types/ArchiveConversationParams.ts +0 -6
  132. package/services/mac-bridge/codex-types/ArchiveConversationResponse.ts +0 -5
  133. package/services/mac-bridge/codex-types/AskForApproval.ts +0 -9
  134. package/services/mac-bridge/codex-types/AuthMode.ts +0 -8
  135. package/services/mac-bridge/codex-types/AuthStatusChangeNotification.ts +0 -9
  136. package/services/mac-bridge/codex-types/BackgroundEventEvent.ts +0 -5
  137. package/services/mac-bridge/codex-types/ByteRange.ts +0 -13
  138. package/services/mac-bridge/codex-types/CallToolResult.ts +0 -9
  139. package/services/mac-bridge/codex-types/CancelLoginChatGptParams.ts +0 -5
  140. package/services/mac-bridge/codex-types/CancelLoginChatGptResponse.ts +0 -5
  141. package/services/mac-bridge/codex-types/ClientInfo.ts +0 -5
  142. package/services/mac-bridge/codex-types/ClientNotification.ts +0 -5
  143. package/services/mac-bridge/codex-types/ClientRequest.ts +0 -60
  144. package/services/mac-bridge/codex-types/CodexErrorInfo.ts +0 -8
  145. package/services/mac-bridge/codex-types/CollabAgentInteractionBeginEvent.ts +0 -23
  146. package/services/mac-bridge/codex-types/CollabAgentInteractionEndEvent.ts +0 -28
  147. package/services/mac-bridge/codex-types/CollabAgentSpawnBeginEvent.ts +0 -19
  148. package/services/mac-bridge/codex-types/CollabAgentSpawnEndEvent.ts +0 -28
  149. package/services/mac-bridge/codex-types/CollabCloseBeginEvent.ts +0 -18
  150. package/services/mac-bridge/codex-types/CollabCloseEndEvent.ts +0 -24
  151. package/services/mac-bridge/codex-types/CollabResumeBeginEvent.ts +0 -18
  152. package/services/mac-bridge/codex-types/CollabResumeEndEvent.ts +0 -24
  153. package/services/mac-bridge/codex-types/CollabWaitingBeginEvent.ts +0 -18
  154. package/services/mac-bridge/codex-types/CollabWaitingEndEvent.ts +0 -19
  155. package/services/mac-bridge/codex-types/CollaborationMode.ts +0 -10
  156. package/services/mac-bridge/codex-types/CollaborationModeMask.ts +0 -11
  157. package/services/mac-bridge/codex-types/ContentItem.ts +0 -5
  158. package/services/mac-bridge/codex-types/ContextCompactedEvent.ts +0 -5
  159. package/services/mac-bridge/codex-types/ContextCompactionItem.ts +0 -5
  160. package/services/mac-bridge/codex-types/ConversationGitInfo.ts +0 -5
  161. package/services/mac-bridge/codex-types/ConversationSummary.ts +0 -8
  162. package/services/mac-bridge/codex-types/CreditsSnapshot.ts +0 -5
  163. package/services/mac-bridge/codex-types/CustomPrompt.ts +0 -5
  164. package/services/mac-bridge/codex-types/DeprecationNoticeEvent.ts +0 -13
  165. package/services/mac-bridge/codex-types/DynamicToolCallRequest.ts +0 -6
  166. package/services/mac-bridge/codex-types/ElicitationRequestEvent.ts +0 -5
  167. package/services/mac-bridge/codex-types/ErrorEvent.ts +0 -6
  168. package/services/mac-bridge/codex-types/EventMsg.ts +0 -78
  169. package/services/mac-bridge/codex-types/ExecApprovalRequestEvent.ts +0 -44
  170. package/services/mac-bridge/codex-types/ExecCommandApprovalParams.ts +0 -16
  171. package/services/mac-bridge/codex-types/ExecCommandApprovalResponse.ts +0 -6
  172. package/services/mac-bridge/codex-types/ExecCommandBeginEvent.ts +0 -35
  173. package/services/mac-bridge/codex-types/ExecCommandEndEvent.ts +0 -64
  174. package/services/mac-bridge/codex-types/ExecCommandOutputDeltaEvent.ts +0 -18
  175. package/services/mac-bridge/codex-types/ExecCommandSource.ts +0 -5
  176. package/services/mac-bridge/codex-types/ExecCommandStatus.ts +0 -5
  177. package/services/mac-bridge/codex-types/ExecOneOffCommandParams.ts +0 -6
  178. package/services/mac-bridge/codex-types/ExecOneOffCommandResponse.ts +0 -5
  179. package/services/mac-bridge/codex-types/ExecOutputStream.ts +0 -5
  180. package/services/mac-bridge/codex-types/ExecPolicyAmendment.ts +0 -12
  181. package/services/mac-bridge/codex-types/ExitedReviewModeEvent.ts +0 -6
  182. package/services/mac-bridge/codex-types/FileChange.ts +0 -5
  183. package/services/mac-bridge/codex-types/ForcedLoginMethod.ts +0 -5
  184. package/services/mac-bridge/codex-types/ForkConversationParams.ts +0 -7
  185. package/services/mac-bridge/codex-types/ForkConversationResponse.ts +0 -7
  186. package/services/mac-bridge/codex-types/FunctionCallOutputBody.ts +0 -6
  187. package/services/mac-bridge/codex-types/FunctionCallOutputContentItem.ts +0 -9
  188. package/services/mac-bridge/codex-types/FunctionCallOutputPayload.ts +0 -12
  189. package/services/mac-bridge/codex-types/FuzzyFileSearchParams.ts +0 -5
  190. package/services/mac-bridge/codex-types/FuzzyFileSearchResponse.ts +0 -6
  191. package/services/mac-bridge/codex-types/FuzzyFileSearchResult.ts +0 -8
  192. package/services/mac-bridge/codex-types/FuzzyFileSearchSessionCompletedNotification.ts +0 -5
  193. package/services/mac-bridge/codex-types/FuzzyFileSearchSessionUpdatedNotification.ts +0 -6
  194. package/services/mac-bridge/codex-types/GetAuthStatusParams.ts +0 -5
  195. package/services/mac-bridge/codex-types/GetAuthStatusResponse.ts +0 -6
  196. package/services/mac-bridge/codex-types/GetConversationSummaryParams.ts +0 -6
  197. package/services/mac-bridge/codex-types/GetConversationSummaryResponse.ts +0 -6
  198. package/services/mac-bridge/codex-types/GetHistoryEntryResponseEvent.ts +0 -10
  199. package/services/mac-bridge/codex-types/GetUserAgentResponse.ts +0 -5
  200. package/services/mac-bridge/codex-types/GetUserSavedConfigResponse.ts +0 -6
  201. package/services/mac-bridge/codex-types/GhostCommit.ts +0 -8
  202. package/services/mac-bridge/codex-types/GitDiffToRemoteParams.ts +0 -5
  203. package/services/mac-bridge/codex-types/GitDiffToRemoteResponse.ts +0 -6
  204. package/services/mac-bridge/codex-types/GitSha.ts +0 -5
  205. package/services/mac-bridge/codex-types/HistoryEntry.ts +0 -5
  206. package/services/mac-bridge/codex-types/InitializeCapabilities.ts +0 -17
  207. package/services/mac-bridge/codex-types/InitializeParams.ts +0 -7
  208. package/services/mac-bridge/codex-types/InitializeResponse.ts +0 -5
  209. package/services/mac-bridge/codex-types/InputItem.ts +0 -10
  210. package/services/mac-bridge/codex-types/InputModality.ts +0 -8
  211. package/services/mac-bridge/codex-types/InterruptConversationParams.ts +0 -6
  212. package/services/mac-bridge/codex-types/InterruptConversationResponse.ts +0 -6
  213. package/services/mac-bridge/codex-types/ItemCompletedEvent.ts +0 -7
  214. package/services/mac-bridge/codex-types/ItemStartedEvent.ts +0 -7
  215. package/services/mac-bridge/codex-types/ListConversationsParams.ts +0 -5
  216. package/services/mac-bridge/codex-types/ListConversationsResponse.ts +0 -6
  217. package/services/mac-bridge/codex-types/ListCustomPromptsResponseEvent.ts +0 -9
  218. package/services/mac-bridge/codex-types/ListRemoteSkillsResponseEvent.ts +0 -9
  219. package/services/mac-bridge/codex-types/ListSkillsResponseEvent.ts +0 -9
  220. package/services/mac-bridge/codex-types/LocalShellAction.ts +0 -6
  221. package/services/mac-bridge/codex-types/LocalShellExecAction.ts +0 -5
  222. package/services/mac-bridge/codex-types/LocalShellStatus.ts +0 -5
  223. package/services/mac-bridge/codex-types/LoginApiKeyParams.ts +0 -5
  224. package/services/mac-bridge/codex-types/LoginApiKeyResponse.ts +0 -5
  225. package/services/mac-bridge/codex-types/LoginChatGptCompleteNotification.ts +0 -8
  226. package/services/mac-bridge/codex-types/LoginChatGptResponse.ts +0 -5
  227. package/services/mac-bridge/codex-types/LogoutChatGptResponse.ts +0 -5
  228. package/services/mac-bridge/codex-types/McpAuthStatus.ts +0 -5
  229. package/services/mac-bridge/codex-types/McpInvocation.ts +0 -18
  230. package/services/mac-bridge/codex-types/McpListToolsResponseEvent.ts +0 -25
  231. package/services/mac-bridge/codex-types/McpStartupCompleteEvent.ts +0 -6
  232. package/services/mac-bridge/codex-types/McpStartupFailure.ts +0 -5
  233. package/services/mac-bridge/codex-types/McpStartupStatus.ts +0 -5
  234. package/services/mac-bridge/codex-types/McpStartupUpdateEvent.ts +0 -14
  235. package/services/mac-bridge/codex-types/McpToolCallBeginEvent.ts +0 -10
  236. package/services/mac-bridge/codex-types/McpToolCallEndEvent.ts +0 -15
  237. package/services/mac-bridge/codex-types/MessagePhase.ts +0 -11
  238. package/services/mac-bridge/codex-types/ModeKind.ts +0 -8
  239. package/services/mac-bridge/codex-types/ModelRerouteEvent.ts +0 -6
  240. package/services/mac-bridge/codex-types/ModelRerouteReason.ts +0 -5
  241. package/services/mac-bridge/codex-types/NetworkAccess.ts +0 -8
  242. package/services/mac-bridge/codex-types/NetworkApprovalContext.ts +0 -6
  243. package/services/mac-bridge/codex-types/NetworkApprovalProtocol.ts +0 -5
  244. package/services/mac-bridge/codex-types/NewConversationParams.ts +0 -8
  245. package/services/mac-bridge/codex-types/NewConversationResponse.ts +0 -7
  246. package/services/mac-bridge/codex-types/ParsedCommand.ts +0 -12
  247. package/services/mac-bridge/codex-types/PatchApplyBeginEvent.ts +0 -23
  248. package/services/mac-bridge/codex-types/PatchApplyEndEvent.ts +0 -36
  249. package/services/mac-bridge/codex-types/PatchApplyStatus.ts +0 -5
  250. package/services/mac-bridge/codex-types/Personality.ts +0 -5
  251. package/services/mac-bridge/codex-types/PlanDeltaEvent.ts +0 -5
  252. package/services/mac-bridge/codex-types/PlanItem.ts +0 -5
  253. package/services/mac-bridge/codex-types/PlanItemArg.ts +0 -6
  254. package/services/mac-bridge/codex-types/PlanType.ts +0 -5
  255. package/services/mac-bridge/codex-types/Profile.ts +0 -9
  256. package/services/mac-bridge/codex-types/RateLimitSnapshot.ts +0 -8
  257. package/services/mac-bridge/codex-types/RateLimitWindow.ts +0 -17
  258. package/services/mac-bridge/codex-types/RawResponseItemEvent.ts +0 -6
  259. package/services/mac-bridge/codex-types/ReadOnlyAccess.ts +0 -19
  260. package/services/mac-bridge/codex-types/ReasoningContentDeltaEvent.ts +0 -5
  261. package/services/mac-bridge/codex-types/ReasoningEffort.ts +0 -8
  262. package/services/mac-bridge/codex-types/ReasoningItem.ts +0 -5
  263. package/services/mac-bridge/codex-types/ReasoningItemContent.ts +0 -5
  264. package/services/mac-bridge/codex-types/ReasoningItemReasoningSummary.ts +0 -5
  265. package/services/mac-bridge/codex-types/ReasoningRawContentDeltaEvent.ts +0 -5
  266. package/services/mac-bridge/codex-types/ReasoningSummary.ts +0 -10
  267. package/services/mac-bridge/codex-types/RemoteSkillDownloadedEvent.ts +0 -8
  268. package/services/mac-bridge/codex-types/RemoteSkillSummary.ts +0 -5
  269. package/services/mac-bridge/codex-types/RemoveConversationListenerParams.ts +0 -5
  270. package/services/mac-bridge/codex-types/RemoveConversationSubscriptionResponse.ts +0 -5
  271. package/services/mac-bridge/codex-types/RequestId.ts +0 -5
  272. package/services/mac-bridge/codex-types/RequestUserInputEvent.ts +0 -15
  273. package/services/mac-bridge/codex-types/RequestUserInputQuestion.ts +0 -6
  274. package/services/mac-bridge/codex-types/RequestUserInputQuestionOption.ts +0 -5
  275. package/services/mac-bridge/codex-types/Resource.ts +0 -9
  276. package/services/mac-bridge/codex-types/ResourceTemplate.ts +0 -9
  277. package/services/mac-bridge/codex-types/ResponseItem.ts +0 -18
  278. package/services/mac-bridge/codex-types/ResumeConversationParams.ts +0 -8
  279. package/services/mac-bridge/codex-types/ResumeConversationResponse.ts +0 -7
  280. package/services/mac-bridge/codex-types/ReviewCodeLocation.ts +0 -9
  281. package/services/mac-bridge/codex-types/ReviewDecision.ts +0 -9
  282. package/services/mac-bridge/codex-types/ReviewFinding.ts +0 -9
  283. package/services/mac-bridge/codex-types/ReviewLineRange.ts +0 -8
  284. package/services/mac-bridge/codex-types/ReviewOutputEvent.ts +0 -9
  285. package/services/mac-bridge/codex-types/ReviewRequest.ts +0 -9
  286. package/services/mac-bridge/codex-types/ReviewTarget.ts +0 -9
  287. package/services/mac-bridge/codex-types/SandboxMode.ts +0 -5
  288. package/services/mac-bridge/codex-types/SandboxPolicy.ts +0 -44
  289. package/services/mac-bridge/codex-types/SandboxSettings.ts +0 -6
  290. package/services/mac-bridge/codex-types/SendUserMessageParams.ts +0 -7
  291. package/services/mac-bridge/codex-types/SendUserMessageResponse.ts +0 -5
  292. package/services/mac-bridge/codex-types/SendUserTurnParams.ts +0 -16
  293. package/services/mac-bridge/codex-types/SendUserTurnResponse.ts +0 -5
  294. package/services/mac-bridge/codex-types/ServerNotification.ts +0 -45
  295. package/services/mac-bridge/codex-types/ServerRequest.ts +0 -16
  296. package/services/mac-bridge/codex-types/SessionConfiguredEvent.ts +0 -57
  297. package/services/mac-bridge/codex-types/SessionConfiguredNotification.ts +0 -8
  298. package/services/mac-bridge/codex-types/SessionNetworkProxyRuntime.ts +0 -5
  299. package/services/mac-bridge/codex-types/SessionSource.ts +0 -6
  300. package/services/mac-bridge/codex-types/SetDefaultModelParams.ts +0 -6
  301. package/services/mac-bridge/codex-types/SetDefaultModelResponse.ts +0 -5
  302. package/services/mac-bridge/codex-types/Settings.ts +0 -9
  303. package/services/mac-bridge/codex-types/SkillDependencies.ts +0 -6
  304. package/services/mac-bridge/codex-types/SkillErrorInfo.ts +0 -5
  305. package/services/mac-bridge/codex-types/SkillInterface.ts +0 -5
  306. package/services/mac-bridge/codex-types/SkillMetadata.ts +0 -12
  307. package/services/mac-bridge/codex-types/SkillScope.ts +0 -5
  308. package/services/mac-bridge/codex-types/SkillToolDependency.ts +0 -5
  309. package/services/mac-bridge/codex-types/SkillsListEntry.ts +0 -7
  310. package/services/mac-bridge/codex-types/StepStatus.ts +0 -5
  311. package/services/mac-bridge/codex-types/StreamErrorEvent.ts +0 -12
  312. package/services/mac-bridge/codex-types/SubAgentSource.ts +0 -6
  313. package/services/mac-bridge/codex-types/TerminalInteractionEvent.ts +0 -17
  314. package/services/mac-bridge/codex-types/TextElement.ts +0 -14
  315. package/services/mac-bridge/codex-types/ThreadId.ts +0 -5
  316. package/services/mac-bridge/codex-types/ThreadNameUpdatedEvent.ts +0 -6
  317. package/services/mac-bridge/codex-types/ThreadRolledBackEvent.ts +0 -9
  318. package/services/mac-bridge/codex-types/TokenCountEvent.ts +0 -7
  319. package/services/mac-bridge/codex-types/TokenUsage.ts +0 -5
  320. package/services/mac-bridge/codex-types/TokenUsageInfo.ts +0 -6
  321. package/services/mac-bridge/codex-types/Tool.ts +0 -9
  322. package/services/mac-bridge/codex-types/Tools.ts +0 -5
  323. package/services/mac-bridge/codex-types/TurnAbortReason.ts +0 -5
  324. package/services/mac-bridge/codex-types/TurnAbortedEvent.ts +0 -6
  325. package/services/mac-bridge/codex-types/TurnCompleteEvent.ts +0 -5
  326. package/services/mac-bridge/codex-types/TurnDiffEvent.ts +0 -5
  327. package/services/mac-bridge/codex-types/TurnItem.ts +0 -11
  328. package/services/mac-bridge/codex-types/TurnStartedEvent.ts +0 -6
  329. package/services/mac-bridge/codex-types/UndoCompletedEvent.ts +0 -5
  330. package/services/mac-bridge/codex-types/UndoStartedEvent.ts +0 -5
  331. package/services/mac-bridge/codex-types/UpdatePlanArgs.ts +0 -10
  332. package/services/mac-bridge/codex-types/UserInfoResponse.ts +0 -5
  333. package/services/mac-bridge/codex-types/UserInput.ts +0 -16
  334. package/services/mac-bridge/codex-types/UserMessageEvent.ts +0 -22
  335. package/services/mac-bridge/codex-types/UserMessageItem.ts +0 -6
  336. package/services/mac-bridge/codex-types/UserSavedConfig.ts +0 -14
  337. package/services/mac-bridge/codex-types/Verbosity.ts +0 -9
  338. package/services/mac-bridge/codex-types/ViewImageToolCallEvent.ts +0 -13
  339. package/services/mac-bridge/codex-types/WarningEvent.ts +0 -5
  340. package/services/mac-bridge/codex-types/WebSearchAction.ts +0 -5
  341. package/services/mac-bridge/codex-types/WebSearchBeginEvent.ts +0 -5
  342. package/services/mac-bridge/codex-types/WebSearchEndEvent.ts +0 -6
  343. package/services/mac-bridge/codex-types/WebSearchItem.ts +0 -6
  344. package/services/mac-bridge/codex-types/WebSearchMode.ts +0 -5
  345. package/services/mac-bridge/codex-types/index.ts +0 -234
  346. package/services/mac-bridge/codex-types/serde_json/JsonValue.ts +0 -5
  347. package/services/mac-bridge/codex-types/v2/Account.ts +0 -6
  348. package/services/mac-bridge/codex-types/v2/AccountLoginCompletedNotification.ts +0 -5
  349. package/services/mac-bridge/codex-types/v2/AccountRateLimitsUpdatedNotification.ts +0 -6
  350. package/services/mac-bridge/codex-types/v2/AccountUpdatedNotification.ts +0 -6
  351. package/services/mac-bridge/codex-types/v2/AgentMessageDeltaNotification.ts +0 -5
  352. package/services/mac-bridge/codex-types/v2/AnalyticsConfig.ts +0 -6
  353. package/services/mac-bridge/codex-types/v2/AppBranding.ts +0 -8
  354. package/services/mac-bridge/codex-types/v2/AppDisabledReason.ts +0 -5
  355. package/services/mac-bridge/codex-types/v2/AppInfo.ts +0 -19
  356. package/services/mac-bridge/codex-types/v2/AppListUpdatedNotification.ts +0 -9
  357. package/services/mac-bridge/codex-types/v2/AppMetadata.ts +0 -7
  358. package/services/mac-bridge/codex-types/v2/AppReview.ts +0 -5
  359. package/services/mac-bridge/codex-types/v2/AppScreenshot.ts +0 -5
  360. package/services/mac-bridge/codex-types/v2/AppsConfig.ts +0 -6
  361. package/services/mac-bridge/codex-types/v2/AppsListParams.ts +0 -24
  362. package/services/mac-bridge/codex-types/v2/AppsListResponse.ts +0 -14
  363. package/services/mac-bridge/codex-types/v2/AskForApproval.ts +0 -5
  364. package/services/mac-bridge/codex-types/v2/ByteRange.ts +0 -5
  365. package/services/mac-bridge/codex-types/v2/CancelLoginAccountParams.ts +0 -5
  366. package/services/mac-bridge/codex-types/v2/CancelLoginAccountResponse.ts +0 -6
  367. package/services/mac-bridge/codex-types/v2/CancelLoginAccountStatus.ts +0 -5
  368. package/services/mac-bridge/codex-types/v2/ChatgptAuthTokensRefreshParams.ts +0 -16
  369. package/services/mac-bridge/codex-types/v2/ChatgptAuthTokensRefreshReason.ts +0 -5
  370. package/services/mac-bridge/codex-types/v2/ChatgptAuthTokensRefreshResponse.ts +0 -5
  371. package/services/mac-bridge/codex-types/v2/CodexErrorInfo.ts +0 -11
  372. package/services/mac-bridge/codex-types/v2/CollabAgentState.ts +0 -6
  373. package/services/mac-bridge/codex-types/v2/CollabAgentStatus.ts +0 -5
  374. package/services/mac-bridge/codex-types/v2/CollabAgentTool.ts +0 -5
  375. package/services/mac-bridge/codex-types/v2/CollabAgentToolCallStatus.ts +0 -5
  376. package/services/mac-bridge/codex-types/v2/CommandAction.ts +0 -5
  377. package/services/mac-bridge/codex-types/v2/CommandExecParams.ts +0 -6
  378. package/services/mac-bridge/codex-types/v2/CommandExecResponse.ts +0 -5
  379. package/services/mac-bridge/codex-types/v2/CommandExecutionApprovalDecision.ts +0 -6
  380. package/services/mac-bridge/codex-types/v2/CommandExecutionOutputDeltaNotification.ts +0 -5
  381. package/services/mac-bridge/codex-types/v2/CommandExecutionRequestApprovalParams.ts +0 -37
  382. package/services/mac-bridge/codex-types/v2/CommandExecutionRequestApprovalResponse.ts +0 -6
  383. package/services/mac-bridge/codex-types/v2/CommandExecutionStatus.ts +0 -5
  384. package/services/mac-bridge/codex-types/v2/Config.ts +0 -17
  385. package/services/mac-bridge/codex-types/v2/ConfigBatchWriteParams.ts +0 -10
  386. package/services/mac-bridge/codex-types/v2/ConfigEdit.ts +0 -7
  387. package/services/mac-bridge/codex-types/v2/ConfigLayer.ts +0 -7
  388. package/services/mac-bridge/codex-types/v2/ConfigLayerMetadata.ts +0 -6
  389. package/services/mac-bridge/codex-types/v2/ConfigLayerSource.ts +0 -16
  390. package/services/mac-bridge/codex-types/v2/ConfigReadParams.ts +0 -11
  391. package/services/mac-bridge/codex-types/v2/ConfigReadResponse.ts +0 -8
  392. package/services/mac-bridge/codex-types/v2/ConfigRequirements.ts +0 -9
  393. package/services/mac-bridge/codex-types/v2/ConfigRequirementsReadResponse.ts +0 -10
  394. package/services/mac-bridge/codex-types/v2/ConfigValueWriteParams.ts +0 -11
  395. package/services/mac-bridge/codex-types/v2/ConfigWarningNotification.ts +0 -22
  396. package/services/mac-bridge/codex-types/v2/ConfigWriteResponse.ts +0 -12
  397. package/services/mac-bridge/codex-types/v2/ContextCompactedNotification.ts +0 -8
  398. package/services/mac-bridge/codex-types/v2/CreditsSnapshot.ts +0 -5
  399. package/services/mac-bridge/codex-types/v2/DeprecationNoticeNotification.ts +0 -13
  400. package/services/mac-bridge/codex-types/v2/DynamicToolCallOutputContentItem.ts +0 -5
  401. package/services/mac-bridge/codex-types/v2/DynamicToolCallParams.ts +0 -6
  402. package/services/mac-bridge/codex-types/v2/DynamicToolCallResponse.ts +0 -6
  403. package/services/mac-bridge/codex-types/v2/DynamicToolSpec.ts +0 -6
  404. package/services/mac-bridge/codex-types/v2/ErrorNotification.ts +0 -6
  405. package/services/mac-bridge/codex-types/v2/ExecPolicyAmendment.ts +0 -5
  406. package/services/mac-bridge/codex-types/v2/ExperimentalFeature.ts +0 -37
  407. package/services/mac-bridge/codex-types/v2/ExperimentalFeatureListParams.ts +0 -13
  408. package/services/mac-bridge/codex-types/v2/ExperimentalFeatureListResponse.ts +0 -11
  409. package/services/mac-bridge/codex-types/v2/ExperimentalFeatureStage.ts +0 -5
  410. package/services/mac-bridge/codex-types/v2/FeedbackUploadParams.ts +0 -5
  411. package/services/mac-bridge/codex-types/v2/FeedbackUploadResponse.ts +0 -5
  412. package/services/mac-bridge/codex-types/v2/FileChangeApprovalDecision.ts +0 -5
  413. package/services/mac-bridge/codex-types/v2/FileChangeOutputDeltaNotification.ts +0 -5
  414. package/services/mac-bridge/codex-types/v2/FileChangeRequestApprovalParams.ts +0 -14
  415. package/services/mac-bridge/codex-types/v2/FileChangeRequestApprovalResponse.ts +0 -6
  416. package/services/mac-bridge/codex-types/v2/FileUpdateChange.ts +0 -6
  417. package/services/mac-bridge/codex-types/v2/GetAccountParams.ts +0 -13
  418. package/services/mac-bridge/codex-types/v2/GetAccountRateLimitsResponse.ts +0 -14
  419. package/services/mac-bridge/codex-types/v2/GetAccountResponse.ts +0 -6
  420. package/services/mac-bridge/codex-types/v2/GitInfo.ts +0 -5
  421. package/services/mac-bridge/codex-types/v2/HazelnutScope.ts +0 -5
  422. package/services/mac-bridge/codex-types/v2/ItemCompletedNotification.ts +0 -6
  423. package/services/mac-bridge/codex-types/v2/ItemStartedNotification.ts +0 -6
  424. package/services/mac-bridge/codex-types/v2/ListMcpServerStatusParams.ts +0 -13
  425. package/services/mac-bridge/codex-types/v2/ListMcpServerStatusResponse.ts +0 -11
  426. package/services/mac-bridge/codex-types/v2/LoginAccountParams.ts +0 -21
  427. package/services/mac-bridge/codex-types/v2/LoginAccountResponse.ts +0 -9
  428. package/services/mac-bridge/codex-types/v2/LogoutAccountResponse.ts +0 -5
  429. package/services/mac-bridge/codex-types/v2/McpAuthStatus.ts +0 -5
  430. package/services/mac-bridge/codex-types/v2/McpServerOauthLoginCompletedNotification.ts +0 -5
  431. package/services/mac-bridge/codex-types/v2/McpServerOauthLoginParams.ts +0 -5
  432. package/services/mac-bridge/codex-types/v2/McpServerOauthLoginResponse.ts +0 -5
  433. package/services/mac-bridge/codex-types/v2/McpServerRefreshResponse.ts +0 -5
  434. package/services/mac-bridge/codex-types/v2/McpServerStatus.ts +0 -9
  435. package/services/mac-bridge/codex-types/v2/McpToolCallError.ts +0 -5
  436. package/services/mac-bridge/codex-types/v2/McpToolCallProgressNotification.ts +0 -5
  437. package/services/mac-bridge/codex-types/v2/McpToolCallResult.ts +0 -6
  438. package/services/mac-bridge/codex-types/v2/McpToolCallStatus.ts +0 -5
  439. package/services/mac-bridge/codex-types/v2/MergeStrategy.ts +0 -5
  440. package/services/mac-bridge/codex-types/v2/Model.ts +0 -8
  441. package/services/mac-bridge/codex-types/v2/ModelListParams.ts +0 -17
  442. package/services/mac-bridge/codex-types/v2/ModelListResponse.ts +0 -11
  443. package/services/mac-bridge/codex-types/v2/ModelRerouteReason.ts +0 -5
  444. package/services/mac-bridge/codex-types/v2/ModelReroutedNotification.ts +0 -6
  445. package/services/mac-bridge/codex-types/v2/NetworkAccess.ts +0 -5
  446. package/services/mac-bridge/codex-types/v2/NetworkRequirements.ts +0 -5
  447. package/services/mac-bridge/codex-types/v2/OverriddenMetadata.ts +0 -7
  448. package/services/mac-bridge/codex-types/v2/PatchApplyStatus.ts +0 -5
  449. package/services/mac-bridge/codex-types/v2/PatchChangeKind.ts +0 -5
  450. package/services/mac-bridge/codex-types/v2/PlanDeltaNotification.ts +0 -9
  451. package/services/mac-bridge/codex-types/v2/ProductSurface.ts +0 -5
  452. package/services/mac-bridge/codex-types/v2/ProfileV2.ts +0 -11
  453. package/services/mac-bridge/codex-types/v2/RateLimitSnapshot.ts +0 -8
  454. package/services/mac-bridge/codex-types/v2/RateLimitWindow.ts +0 -5
  455. package/services/mac-bridge/codex-types/v2/RawResponseItemCompletedNotification.ts +0 -6
  456. package/services/mac-bridge/codex-types/v2/ReadOnlyAccess.ts +0 -6
  457. package/services/mac-bridge/codex-types/v2/ReasoningEffortOption.ts +0 -6
  458. package/services/mac-bridge/codex-types/v2/ReasoningSummaryPartAddedNotification.ts +0 -5
  459. package/services/mac-bridge/codex-types/v2/ReasoningSummaryTextDeltaNotification.ts +0 -5
  460. package/services/mac-bridge/codex-types/v2/ReasoningTextDeltaNotification.ts +0 -5
  461. package/services/mac-bridge/codex-types/v2/RemoteSkillSummary.ts +0 -5
  462. package/services/mac-bridge/codex-types/v2/ResidencyRequirement.ts +0 -5
  463. package/services/mac-bridge/codex-types/v2/ReviewDelivery.ts +0 -5
  464. package/services/mac-bridge/codex-types/v2/ReviewStartParams.ts +0 -12
  465. package/services/mac-bridge/codex-types/v2/ReviewStartResponse.ts +0 -13
  466. package/services/mac-bridge/codex-types/v2/ReviewTarget.ts +0 -9
  467. package/services/mac-bridge/codex-types/v2/SandboxMode.ts +0 -5
  468. package/services/mac-bridge/codex-types/v2/SandboxPolicy.ts +0 -8
  469. package/services/mac-bridge/codex-types/v2/SandboxWorkspaceWrite.ts +0 -5
  470. package/services/mac-bridge/codex-types/v2/SessionSource.ts +0 -6
  471. package/services/mac-bridge/codex-types/v2/SkillDependencies.ts +0 -6
  472. package/services/mac-bridge/codex-types/v2/SkillErrorInfo.ts +0 -5
  473. package/services/mac-bridge/codex-types/v2/SkillInterface.ts +0 -5
  474. package/services/mac-bridge/codex-types/v2/SkillMetadata.ts +0 -12
  475. package/services/mac-bridge/codex-types/v2/SkillScope.ts +0 -5
  476. package/services/mac-bridge/codex-types/v2/SkillToolDependency.ts +0 -5
  477. package/services/mac-bridge/codex-types/v2/SkillsConfigWriteParams.ts +0 -5
  478. package/services/mac-bridge/codex-types/v2/SkillsConfigWriteResponse.ts +0 -5
  479. package/services/mac-bridge/codex-types/v2/SkillsListEntry.ts +0 -7
  480. package/services/mac-bridge/codex-types/v2/SkillsListExtraRootsForCwd.ts +0 -5
  481. package/services/mac-bridge/codex-types/v2/SkillsListParams.ts +0 -18
  482. package/services/mac-bridge/codex-types/v2/SkillsListResponse.ts +0 -6
  483. package/services/mac-bridge/codex-types/v2/SkillsRemoteReadParams.ts +0 -7
  484. package/services/mac-bridge/codex-types/v2/SkillsRemoteReadResponse.ts +0 -6
  485. package/services/mac-bridge/codex-types/v2/SkillsRemoteWriteParams.ts +0 -5
  486. package/services/mac-bridge/codex-types/v2/SkillsRemoteWriteResponse.ts +0 -5
  487. package/services/mac-bridge/codex-types/v2/TerminalInteractionNotification.ts +0 -5
  488. package/services/mac-bridge/codex-types/v2/TextElement.ts +0 -14
  489. package/services/mac-bridge/codex-types/v2/TextPosition.ts +0 -13
  490. package/services/mac-bridge/codex-types/v2/TextRange.ts +0 -6
  491. package/services/mac-bridge/codex-types/v2/Thread.ts +0 -51
  492. package/services/mac-bridge/codex-types/v2/ThreadArchiveParams.ts +0 -5
  493. package/services/mac-bridge/codex-types/v2/ThreadArchiveResponse.ts +0 -5
  494. package/services/mac-bridge/codex-types/v2/ThreadArchivedNotification.ts +0 -5
  495. package/services/mac-bridge/codex-types/v2/ThreadCompactStartParams.ts +0 -5
  496. package/services/mac-bridge/codex-types/v2/ThreadCompactStartResponse.ts +0 -5
  497. package/services/mac-bridge/codex-types/v2/ThreadForkParams.ts +0 -28
  498. package/services/mac-bridge/codex-types/v2/ThreadForkResponse.ts +0 -9
  499. package/services/mac-bridge/codex-types/v2/ThreadItem.ts +0 -81
  500. package/services/mac-bridge/codex-types/v2/ThreadListParams.ts +0 -39
  501. package/services/mac-bridge/codex-types/v2/ThreadListResponse.ts +0 -11
  502. package/services/mac-bridge/codex-types/v2/ThreadLoadedListParams.ts +0 -13
  503. package/services/mac-bridge/codex-types/v2/ThreadLoadedListResponse.ts +0 -14
  504. package/services/mac-bridge/codex-types/v2/ThreadNameUpdatedNotification.ts +0 -5
  505. package/services/mac-bridge/codex-types/v2/ThreadReadParams.ts +0 -9
  506. package/services/mac-bridge/codex-types/v2/ThreadReadResponse.ts +0 -6
  507. package/services/mac-bridge/codex-types/v2/ThreadResumeParams.ts +0 -37
  508. package/services/mac-bridge/codex-types/v2/ThreadResumeResponse.ts +0 -9
  509. package/services/mac-bridge/codex-types/v2/ThreadRollbackParams.ts +0 -12
  510. package/services/mac-bridge/codex-types/v2/ThreadRollbackResponse.ts +0 -14
  511. package/services/mac-bridge/codex-types/v2/ThreadSetNameParams.ts +0 -5
  512. package/services/mac-bridge/codex-types/v2/ThreadSetNameResponse.ts +0 -5
  513. package/services/mac-bridge/codex-types/v2/ThreadSortKey.ts +0 -5
  514. package/services/mac-bridge/codex-types/v2/ThreadSourceKind.ts +0 -5
  515. package/services/mac-bridge/codex-types/v2/ThreadStartParams.ts +0 -17
  516. package/services/mac-bridge/codex-types/v2/ThreadStartResponse.ts +0 -9
  517. package/services/mac-bridge/codex-types/v2/ThreadStartedNotification.ts +0 -6
  518. package/services/mac-bridge/codex-types/v2/ThreadTokenUsage.ts +0 -6
  519. package/services/mac-bridge/codex-types/v2/ThreadTokenUsageUpdatedNotification.ts +0 -6
  520. package/services/mac-bridge/codex-types/v2/ThreadUnarchiveParams.ts +0 -5
  521. package/services/mac-bridge/codex-types/v2/ThreadUnarchiveResponse.ts +0 -6
  522. package/services/mac-bridge/codex-types/v2/ThreadUnarchivedNotification.ts +0 -5
  523. package/services/mac-bridge/codex-types/v2/TokenUsageBreakdown.ts +0 -5
  524. package/services/mac-bridge/codex-types/v2/ToolRequestUserInputAnswer.ts +0 -8
  525. package/services/mac-bridge/codex-types/v2/ToolRequestUserInputOption.ts +0 -8
  526. package/services/mac-bridge/codex-types/v2/ToolRequestUserInputParams.ts +0 -9
  527. package/services/mac-bridge/codex-types/v2/ToolRequestUserInputQuestion.ts +0 -9
  528. package/services/mac-bridge/codex-types/v2/ToolRequestUserInputResponse.ts +0 -9
  529. package/services/mac-bridge/codex-types/v2/ToolsV2.ts +0 -5
  530. package/services/mac-bridge/codex-types/v2/Turn.ts +0 -18
  531. package/services/mac-bridge/codex-types/v2/TurnCompletedNotification.ts +0 -6
  532. package/services/mac-bridge/codex-types/v2/TurnDiffUpdatedNotification.ts +0 -9
  533. package/services/mac-bridge/codex-types/v2/TurnError.ts +0 -6
  534. package/services/mac-bridge/codex-types/v2/TurnInterruptParams.ts +0 -5
  535. package/services/mac-bridge/codex-types/v2/TurnInterruptResponse.ts +0 -5
  536. package/services/mac-bridge/codex-types/v2/TurnPlanStep.ts +0 -6
  537. package/services/mac-bridge/codex-types/v2/TurnPlanStepStatus.ts +0 -5
  538. package/services/mac-bridge/codex-types/v2/TurnPlanUpdatedNotification.ts +0 -6
  539. package/services/mac-bridge/codex-types/v2/TurnStartParams.ts +0 -44
  540. package/services/mac-bridge/codex-types/v2/TurnStartResponse.ts +0 -6
  541. package/services/mac-bridge/codex-types/v2/TurnStartedNotification.ts +0 -6
  542. package/services/mac-bridge/codex-types/v2/TurnStatus.ts +0 -5
  543. package/services/mac-bridge/codex-types/v2/TurnSteerParams.ts +0 -11
  544. package/services/mac-bridge/codex-types/v2/TurnSteerResponse.ts +0 -5
  545. package/services/mac-bridge/codex-types/v2/UserInput.ts +0 -10
  546. package/services/mac-bridge/codex-types/v2/WebSearchAction.ts +0 -5
  547. package/services/mac-bridge/codex-types/v2/WindowsWorldWritableWarningNotification.ts +0 -5
  548. package/services/mac-bridge/codex-types/v2/WriteStatus.ts +0 -5
  549. package/services/mac-bridge/codex-types/v2/index.ts +0 -204
  550. package/services/mac-bridge/eslint.config.cjs +0 -22
  551. package/services/mac-bridge/package.json +0 -30
  552. package/services/mac-bridge/schema.ts +0 -0
  553. package/services/mac-bridge/src/index.ts +0 -18
  554. package/services/mac-bridge/src/server.ts +0 -426
  555. package/services/mac-bridge/src/services/__tests__/gitService.test.ts +0 -157
  556. package/services/mac-bridge/src/services/__tests__/realtimeHub.test.ts +0 -116
  557. package/services/mac-bridge/src/services/__tests__/terminalService.test.ts +0 -51
  558. package/services/mac-bridge/src/services/codexAppServerClient.ts +0 -507
  559. package/services/mac-bridge/src/services/codexCliAdapter.ts +0 -622
  560. package/services/mac-bridge/src/services/gitService.ts +0 -61
  561. package/services/mac-bridge/src/services/realtimeHub.ts +0 -25
  562. package/services/mac-bridge/src/services/terminalService.ts +0 -226
  563. package/services/mac-bridge/src/types.ts +0 -151
  564. package/services/mac-bridge/src/utils/__tests__/threadMapping.test.ts +0 -397
  565. package/services/mac-bridge/src/utils/threadMapping.ts +0 -176
  566. package/services/mac-bridge/tsconfig.json +0 -16
  567. package/services/mac-bridge/vitest.config.ts +0 -9
  568. package/services/rust-bridge/.env.example +0 -14
  569. package/services/rust-bridge/package.json +0 -13
  570. package/services/rust-bridge/security_best_practices_report.md +0 -24
  571. package/site/index.html +0 -54
  572. package/site/privacy/index.html +0 -80
  573. package/site/styles.css +0 -135
  574. package/site/support/index.html +0 -51
  575. package/site/terms/index.html +0 -68
  576. package/tsconfig.json +0 -4
@@ -1,1494 +0,0 @@
1
- import { HostBridgeApiClient } from '../client';
2
- import type { HostBridgeWsClient } from '../ws';
3
-
4
- function createWsMock() {
5
- type WsLike = Pick<HostBridgeWsClient, 'request' | 'waitForTurnCompletion'>;
6
- return {
7
- request: jest.fn(),
8
- waitForTurnCompletion: jest.fn().mockResolvedValue(undefined),
9
- } as jest.Mocked<WsLike>;
10
- }
11
-
12
- describe('HostBridgeApiClient', () => {
13
- it('health() calls bridge/health/read', async () => {
14
- const ws = createWsMock();
15
- ws.request.mockResolvedValue({ status: 'ok', at: '2026-01-01T00:00:00Z', uptimeSec: 10 });
16
-
17
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
18
- const result = await client.health();
19
-
20
- expect(ws.request).toHaveBeenCalledWith('bridge/health/read');
21
- expect(result.status).toBe('ok');
22
- });
23
-
24
- it('readAccountRateLimits() requests account/rateLimits/read and prefers codex bucket', async () => {
25
- const ws = createWsMock();
26
- ws.request.mockResolvedValue({
27
- rateLimitsByLimitId: {
28
- codex: {
29
- limitId: 'codex',
30
- primary: {
31
- usedPercent: 22,
32
- windowDurationMins: 300,
33
- resetsAt: 1_700_000_000,
34
- },
35
- secondary: {
36
- usedPercent: 61,
37
- windowDurationMins: 10_080,
38
- resetsAt: 1_700_000_100,
39
- },
40
- planType: 'plus',
41
- },
42
- },
43
- rateLimits: {
44
- limitId: 'legacy',
45
- primary: {
46
- usedPercent: 99,
47
- windowDurationMins: 60,
48
- resetsAt: 1_700_000_200,
49
- },
50
- },
51
- });
52
-
53
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
54
- const result = await client.readAccountRateLimits();
55
-
56
- expect(ws.request).toHaveBeenCalledWith('account/rateLimits/read');
57
- expect(result).toMatchObject({
58
- limitId: 'codex',
59
- planType: 'plus',
60
- primary: {
61
- usedPercent: 22,
62
- windowDurationMins: 300,
63
- },
64
- secondary: {
65
- usedPercent: 61,
66
- windowDurationMins: 10080,
67
- },
68
- });
69
- });
70
-
71
- it('readAccountRateLimits() falls back to first populated keyed snapshot with snake_case payloads', async () => {
72
- const ws = createWsMock();
73
- ws.request.mockResolvedValue({
74
- rate_limits_by_limit_id: {
75
- empty: {
76
- limit_id: 'empty',
77
- primary: null,
78
- secondary: null,
79
- },
80
- shared: {
81
- limit_id: 'shared',
82
- limit_name: 'Shared',
83
- primary: {
84
- used_percent: '15',
85
- window_duration_mins: '300',
86
- resets_at: '1700000000',
87
- },
88
- secondary: null,
89
- plan_type: 'team',
90
- },
91
- },
92
- });
93
-
94
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
95
- const result = await client.readAccountRateLimits();
96
-
97
- expect(result).toMatchObject({
98
- limitId: 'shared',
99
- limitName: 'Shared',
100
- planType: 'team',
101
- primary: {
102
- usedPercent: 15,
103
- windowDurationMins: 300,
104
- resetsAt: 1700000000,
105
- },
106
- secondary: null,
107
- });
108
- });
109
-
110
- it('readAccountRateLimits() falls back to top-level rate limits when keyed buckets are unavailable', async () => {
111
- const ws = createWsMock();
112
- ws.request.mockResolvedValue({
113
- rateLimitsByLimitId: {
114
- codex: {
115
- limitId: 'codex',
116
- primary: null,
117
- secondary: null,
118
- },
119
- },
120
- rate_limits: {
121
- limit_id: 'legacy',
122
- primary: {
123
- used_percent: 44,
124
- window_duration_mins: 60,
125
- resets_at: 1700001234,
126
- },
127
- secondary: null,
128
- plan_type: 'pro',
129
- },
130
- });
131
-
132
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
133
- const result = await client.readAccountRateLimits();
134
-
135
- expect(result).toMatchObject({
136
- limitId: 'legacy',
137
- planType: 'pro',
138
- primary: {
139
- usedPercent: 44,
140
- windowDurationMins: 60,
141
- resetsAt: 1700001234,
142
- },
143
- });
144
- });
145
-
146
- it('readAccount() requests account/read and maps ChatGPT account details', async () => {
147
- const ws = createWsMock();
148
- ws.request.mockResolvedValue({
149
- account: {
150
- type: 'chatgpt',
151
- email: 'mohit@example.com',
152
- planType: 'plus',
153
- },
154
- requiresOpenaiAuth: true,
155
- });
156
-
157
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
158
- const result = await client.readAccount();
159
-
160
- expect(ws.request).toHaveBeenCalledWith('account/read', { refreshToken: false });
161
- expect(result).toEqual({
162
- type: 'chatgpt',
163
- email: 'mohit@example.com',
164
- planType: 'plus',
165
- requiresOpenaiAuth: true,
166
- });
167
- });
168
-
169
- it('readAccount() maps API key auth without ChatGPT fields', async () => {
170
- const ws = createWsMock();
171
- ws.request.mockResolvedValue({
172
- account: {
173
- type: 'apiKey',
174
- },
175
- requires_openai_auth: false,
176
- });
177
-
178
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
179
- const result = await client.readAccount();
180
-
181
- expect(result).toEqual({
182
- type: 'apiKey',
183
- email: null,
184
- planType: null,
185
- requiresOpenaiAuth: false,
186
- });
187
- });
188
-
189
- it('logoutAccount() requests account/logout', async () => {
190
- const ws = createWsMock();
191
- ws.request.mockResolvedValue({});
192
-
193
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
194
- await client.logoutAccount();
195
-
196
- expect(ws.request).toHaveBeenCalledWith('account/logout');
197
- });
198
-
199
- it('listChats() maps app-server list response', async () => {
200
- const ws = createWsMock();
201
- ws.request.mockResolvedValue({
202
- data: [
203
- {
204
- id: 'thr_1',
205
- preview: 'hello world',
206
- createdAt: 1700000000,
207
- updatedAt: 1700000001,
208
- status: { type: 'active' },
209
- turns: [
210
- {
211
- status: 'completed',
212
- items: [],
213
- },
214
- ],
215
- },
216
- ],
217
- });
218
-
219
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
220
- const chats = await client.listChats();
221
-
222
- expect(ws.request).toHaveBeenCalledWith(
223
- 'thread/list',
224
- expect.objectContaining({
225
- sourceKinds: ['cli', 'vscode', 'exec', 'appServer', 'unknown'],
226
- })
227
- );
228
- expect(chats).toHaveLength(1);
229
- expect(chats[0].id).toBe('thr_1');
230
- expect(chats[0].status).toBe('complete');
231
- });
232
-
233
- it('listChats() treats idle thread status as complete even with stale inProgress turn', async () => {
234
- const ws = createWsMock();
235
- ws.request.mockResolvedValue({
236
- data: [
237
- {
238
- id: 'thr_idle_with_stale_turn',
239
- preview: 'done',
240
- createdAt: 1700000000,
241
- updatedAt: 1700000001,
242
- status: { type: 'idle' },
243
- turns: [
244
- {
245
- status: 'inProgress',
246
- items: [],
247
- },
248
- ],
249
- },
250
- ],
251
- });
252
-
253
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
254
- const chats = await client.listChats();
255
-
256
- expect(chats).toHaveLength(1);
257
- expect(chats[0].status).toBe('complete');
258
- });
259
-
260
- it('listChats() excludes sub-agent source kinds defensively', async () => {
261
- const ws = createWsMock();
262
- ws.request.mockResolvedValue({
263
- data: [
264
- {
265
- id: 'thr_root',
266
- preview: 'root chat',
267
- createdAt: 1700000000,
268
- updatedAt: 1700000001,
269
- status: { type: 'idle' },
270
- source: 'appServer',
271
- turns: [],
272
- },
273
- {
274
- id: 'thr_sub',
275
- preview: 'spawned worker',
276
- createdAt: 1700000000,
277
- updatedAt: 1700000002,
278
- status: { type: 'idle' },
279
- source: {
280
- subagent: {
281
- thread_spawn: {
282
- parent_thread_id: 'thr_root',
283
- depth: 1,
284
- },
285
- },
286
- },
287
- turns: [],
288
- },
289
- {
290
- id: 'thr_sub_legacy',
291
- preview: 'legacy sub-agent',
292
- createdAt: 1700000000,
293
- updatedAt: 1700000003,
294
- status: { type: 'idle' },
295
- source: { kind: 'subAgent' },
296
- turns: [],
297
- },
298
- ],
299
- });
300
-
301
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
302
- const chats = await client.listChats();
303
-
304
- expect(chats.map((chat) => chat.id)).toEqual(['thr_root']);
305
- });
306
-
307
- it('listChats() can include sub-agent source kinds when requested', async () => {
308
- const ws = createWsMock();
309
- ws.request.mockResolvedValue({
310
- data: [
311
- {
312
- id: 'thr_root',
313
- preview: 'root chat',
314
- createdAt: 1700000000,
315
- updatedAt: 1700000001,
316
- status: { type: 'idle' },
317
- source: 'appServer',
318
- turns: [],
319
- },
320
- {
321
- id: 'thr_sub',
322
- preview: 'spawned worker',
323
- createdAt: 1700000000,
324
- updatedAt: 1700000002,
325
- status: { type: 'idle' },
326
- source: {
327
- subAgent: {
328
- thread_spawn: {
329
- parent_thread_id: 'thr_root',
330
- depth: 1,
331
- },
332
- },
333
- },
334
- turns: [],
335
- },
336
- ],
337
- });
338
-
339
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
340
- const chats = await client.listChats({ includeSubAgents: true });
341
-
342
- expect(ws.request).toHaveBeenCalledWith('thread/list', {
343
- cursor: null,
344
- limit: 200,
345
- sortKey: null,
346
- modelProviders: null,
347
- sourceKinds: [
348
- 'cli',
349
- 'vscode',
350
- 'exec',
351
- 'appServer',
352
- 'unknown',
353
- 'subAgent',
354
- 'subAgentReview',
355
- 'subAgentCompact',
356
- 'subAgentThreadSpawn',
357
- 'subAgentOther',
358
- ],
359
- archived: false,
360
- cwd: null,
361
- });
362
- expect(chats.map((chat) => chat.id)).toEqual(['thr_sub', 'thr_root']);
363
- expect(chats[0].parentThreadId).toBe('thr_root');
364
- expect(chats[0].subAgentDepth).toBe(1);
365
- });
366
-
367
- it('listLoadedChatIds() returns loaded in-memory thread ids', async () => {
368
- const ws = createWsMock();
369
- ws.request.mockResolvedValue({
370
- data: ['thr_root', 'thr_sub', null, ''],
371
- });
372
-
373
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
374
- const ids = await client.listLoadedChatIds();
375
-
376
- expect(ws.request).toHaveBeenCalledWith('thread/loaded/list', undefined);
377
- expect(ids).toEqual(['thr_root', 'thr_sub']);
378
- });
379
-
380
- it('listWorkspaceRoots() requests bridge/workspaces/list and maps workspaces', async () => {
381
- const ws = createWsMock();
382
- ws.request.mockResolvedValue({
383
- bridgeRoot: '/Users/mohit/work',
384
- allowOutsideRootCwd: true,
385
- workspaces: [
386
- { path: '/Users/mohit/work/app', chatCount: 3, updatedAt: 1700000000 },
387
- { path: '/Users/mohit/work/docs', chatCount: '1', updatedAt: '1700001000' },
388
- { path: '', chatCount: 99, updatedAt: 1700002000 },
389
- ],
390
- });
391
-
392
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
393
- const result = await client.listWorkspaceRoots();
394
-
395
- expect(ws.request).toHaveBeenCalledWith('bridge/workspaces/list', { limit: 200 });
396
- expect(result).toEqual({
397
- bridgeRoot: '/Users/mohit/work',
398
- allowOutsideRootCwd: true,
399
- workspaces: [
400
- {
401
- path: '/Users/mohit/work/app',
402
- chatCount: 3,
403
- updatedAt: new Date(1700000000 * 1000).toISOString(),
404
- },
405
- {
406
- path: '/Users/mohit/work/docs',
407
- chatCount: 1,
408
- updatedAt: new Date(1700001000 * 1000).toISOString(),
409
- },
410
- ],
411
- });
412
- });
413
-
414
- it('listFilesystemEntries() requests bridge/fs/list with directory browsing defaults', async () => {
415
- const ws = createWsMock();
416
- ws.request.mockResolvedValue({
417
- bridgeRoot: '/Users/mohit/work',
418
- path: '/Users/mohit/work',
419
- parentPath: '/Users/mohit',
420
- entries: [
421
- {
422
- name: 'apps',
423
- path: '/Users/mohit/work/apps',
424
- kind: 'directory',
425
- hidden: false,
426
- selectable: true,
427
- isGitRepo: false,
428
- },
429
- ],
430
- });
431
-
432
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
433
- const result = await client.listFilesystemEntries({ path: '/Users/mohit/work' });
434
-
435
- expect(ws.request).toHaveBeenCalledWith('bridge/fs/list', {
436
- path: '/Users/mohit/work',
437
- includeHidden: false,
438
- directoriesOnly: true,
439
- });
440
- expect(result).toEqual({
441
- bridgeRoot: '/Users/mohit/work',
442
- path: '/Users/mohit/work',
443
- parentPath: '/Users/mohit',
444
- entries: [
445
- {
446
- name: 'apps',
447
- path: '/Users/mohit/work/apps',
448
- kind: 'directory',
449
- hidden: false,
450
- selectable: true,
451
- isGitRepo: false,
452
- },
453
- ],
454
- });
455
- });
456
-
457
- it('sendChatMessage() starts a turn without waiting for completion', async () => {
458
- const ws = createWsMock();
459
- ws.request
460
- .mockResolvedValueOnce({}) // thread/resume
461
- .mockResolvedValueOnce({ turn: { id: 'turn_1' } }) // turn/start
462
- .mockResolvedValueOnce({
463
- thread: {
464
- id: 'thr_1',
465
- preview: 'final',
466
- createdAt: 1700000000,
467
- updatedAt: 1700000002,
468
- status: { type: 'idle' },
469
- turns: [
470
- {
471
- id: 'turn_1',
472
- items: [
473
- {
474
- type: 'userMessage',
475
- id: 'u1',
476
- content: [{ type: 'text', text: 'Hello' }],
477
- },
478
- {
479
- type: 'agentMessage',
480
- id: 'a1',
481
- text: 'Hi there',
482
- },
483
- ],
484
- },
485
- ],
486
- },
487
- });
488
-
489
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
490
- const chat = await client.sendChatMessage('thr_1', { content: 'Hello' });
491
-
492
- expect(ws.request).toHaveBeenNthCalledWith(2, 'turn/start', expect.any(Object));
493
- expect(ws.waitForTurnCompletion).not.toHaveBeenCalled();
494
- expect(chat.id).toBe('thr_1');
495
- expect(chat.messages.length).toBeGreaterThan(0);
496
- });
497
-
498
- it('sendChatMessage() retries thread/read until sent user message is materialized', async () => {
499
- jest.useFakeTimers();
500
- try {
501
- const ws = createWsMock();
502
- ws.request
503
- .mockResolvedValueOnce({}) // thread/resume
504
- .mockResolvedValueOnce({ turn: { id: 'turn_retry' } }) // turn/start
505
- .mockResolvedValueOnce({
506
- thread: {
507
- id: 'thr_retry',
508
- preview: 'stale',
509
- createdAt: 1700000000,
510
- updatedAt: 1700000001,
511
- status: { type: 'idle' },
512
- turns: [],
513
- },
514
- }) // stale thread/read (missing latest user item)
515
- .mockResolvedValueOnce({
516
- thread: {
517
- id: 'thr_retry',
518
- preview: 'Hello',
519
- createdAt: 1700000000,
520
- updatedAt: 1700000002,
521
- status: { type: 'idle' },
522
- turns: [
523
- {
524
- id: 'turn_retry',
525
- items: [
526
- {
527
- type: 'userMessage',
528
- id: 'u_retry',
529
- content: [{ type: 'text', text: 'Hello' }],
530
- },
531
- ],
532
- },
533
- ],
534
- },
535
- }); // retried thread/read
536
-
537
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
538
- const chatPromise = client.sendChatMessage('thr_retry', { content: 'Hello' });
539
-
540
- await Promise.resolve();
541
- await jest.advanceTimersByTimeAsync(200);
542
- const chat = await chatPromise;
543
-
544
- expect(chat.messages.some((message) => message.role === 'user' && message.content === 'Hello')).toBe(true);
545
- expect(ws.request).toHaveBeenCalledWith(
546
- 'turn/start',
547
- expect.objectContaining({
548
- threadId: 'thr_retry',
549
- })
550
- );
551
- } finally {
552
- jest.useRealTimers();
553
- }
554
- });
555
-
556
- it('sendChatMessage() keeps a repeated user prompt when the new turn is missing from thread/read', async () => {
557
- jest.useFakeTimers();
558
- try {
559
- const ws = createWsMock();
560
- const staleReadResponse = {
561
- thread: {
562
- id: 'thr_repeat',
563
- preview: 'repeat',
564
- createdAt: 1700000000,
565
- updatedAt: 1700000002,
566
- status: { type: 'idle' },
567
- turns: [
568
- {
569
- id: 'turn_old',
570
- items: [
571
- {
572
- type: 'userMessage',
573
- id: 'u_old_repeat',
574
- content: [{ type: 'text', text: 'repeat' }],
575
- },
576
- {
577
- type: 'agentMessage',
578
- id: 'a_old_repeat',
579
- text: 'old answer',
580
- },
581
- ],
582
- },
583
- ],
584
- },
585
- };
586
-
587
- ws.request
588
- .mockResolvedValueOnce({}) // thread/resume
589
- .mockResolvedValueOnce({ turn: { id: 'turn_new_repeat' } }) // turn/start
590
- .mockResolvedValue(staleReadResponse); // thread/read retries always stale
591
-
592
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
593
- const chatPromise = client.sendChatMessage('thr_repeat', { content: 'repeat' });
594
-
595
- await Promise.resolve();
596
- await jest.advanceTimersByTimeAsync(2_000);
597
- const chat = await chatPromise;
598
-
599
- const repeatedUserMessages = chat.messages.filter(
600
- (message) => message.role === 'user' && message.content === 'repeat'
601
- );
602
- expect(repeatedUserMessages.length).toBeGreaterThanOrEqual(2);
603
- } finally {
604
- jest.useRealTimers();
605
- }
606
- });
607
-
608
- it('createChat() forwards selected model to thread/start', async () => {
609
- const ws = createWsMock();
610
- ws.request
611
- .mockResolvedValueOnce({
612
- thread: {
613
- id: 'thr_model',
614
- preview: '',
615
- createdAt: 1700000000,
616
- updatedAt: 1700000000,
617
- status: { type: 'idle' },
618
- turns: [],
619
- },
620
- })
621
- .mockResolvedValueOnce({
622
- thread: {
623
- id: 'thr_model',
624
- preview: '',
625
- createdAt: 1700000000,
626
- updatedAt: 1700000000,
627
- status: { type: 'idle' },
628
- turns: [],
629
- },
630
- });
631
-
632
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
633
- await client.createChat({ model: 'gpt-5.3-codex' });
634
-
635
- expect(ws.request).toHaveBeenCalledWith(
636
- 'thread/start',
637
- expect.objectContaining({
638
- model: 'gpt-5.3-codex',
639
- })
640
- );
641
- });
642
-
643
- it('createChat() forwards selected approval policy to thread/start', async () => {
644
- const ws = createWsMock();
645
- ws.request.mockResolvedValueOnce({
646
- thread: {
647
- id: 'thr_policy',
648
- preview: '',
649
- createdAt: 1700000000,
650
- updatedAt: 1700000000,
651
- status: { type: 'idle' },
652
- turns: [],
653
- },
654
- });
655
-
656
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
657
- await client.createChat({ approvalPolicy: 'never' });
658
-
659
- expect(ws.request).toHaveBeenCalledWith(
660
- 'thread/start',
661
- expect.objectContaining({
662
- approvalPolicy: 'never',
663
- })
664
- );
665
- });
666
-
667
- it('createChat() requests danger-full-access sandbox by default', async () => {
668
- const ws = createWsMock();
669
- ws.request.mockResolvedValueOnce({
670
- thread: {
671
- id: 'thr_sandbox',
672
- preview: '',
673
- createdAt: 1700000000,
674
- updatedAt: 1700000000,
675
- status: { type: 'idle' },
676
- turns: [],
677
- },
678
- });
679
-
680
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
681
- await client.createChat({});
682
-
683
- expect(ws.request).toHaveBeenCalledWith(
684
- 'thread/start',
685
- expect.objectContaining({
686
- sandbox: 'danger-full-access',
687
- })
688
- );
689
- });
690
-
691
- it('createChat() forwards service tier in thread/start config', async () => {
692
- const ws = createWsMock();
693
- ws.request.mockResolvedValueOnce({
694
- thread: {
695
- id: 'thr_fast',
696
- preview: '',
697
- createdAt: 1700000000,
698
- updatedAt: 1700000000,
699
- status: { type: 'idle' },
700
- turns: [],
701
- },
702
- });
703
-
704
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
705
- await client.createChat({ serviceTier: 'fast' });
706
-
707
- expect(ws.request).toHaveBeenCalledWith(
708
- 'thread/start',
709
- expect.objectContaining({
710
- config: {
711
- service_tier: 'fast',
712
- },
713
- })
714
- );
715
- });
716
-
717
- it('forkChat() forwards service tier in thread/fork config', async () => {
718
- const ws = createWsMock();
719
- ws.request.mockResolvedValueOnce({
720
- thread: {
721
- id: 'thr_fork_fast',
722
- preview: '',
723
- createdAt: 1700000000,
724
- updatedAt: 1700000000,
725
- status: { type: 'idle' },
726
- turns: [],
727
- },
728
- });
729
-
730
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
731
- await client.forkChat('thr_parent', { serviceTier: 'fast' });
732
-
733
- expect(ws.request).toHaveBeenCalledWith(
734
- 'thread/fork',
735
- expect.objectContaining({
736
- threadId: 'thr_parent',
737
- config: {
738
- service_tier: 'fast',
739
- },
740
- })
741
- );
742
- });
743
-
744
- it('forkChat() requests danger-full-access sandbox by default', async () => {
745
- const ws = createWsMock();
746
- ws.request.mockResolvedValueOnce({
747
- thread: {
748
- id: 'thr_fork_sandbox',
749
- preview: '',
750
- createdAt: 1700000000,
751
- updatedAt: 1700000000,
752
- status: { type: 'idle' },
753
- turns: [],
754
- },
755
- });
756
-
757
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
758
- await client.forkChat('thr_parent');
759
-
760
- expect(ws.request).toHaveBeenCalledWith(
761
- 'thread/fork',
762
- expect.objectContaining({
763
- threadId: 'thr_parent',
764
- sandbox: 'danger-full-access',
765
- })
766
- );
767
- });
768
-
769
- it('renameChat() retries with threadName when name payload is rejected', async () => {
770
- const ws = createWsMock();
771
- ws.request
772
- .mockRejectedValueOnce(new Error('missing field `threadName`'))
773
- .mockResolvedValueOnce({}) // thread/name/set retry with threadName
774
- .mockResolvedValueOnce({}) // explicit threadName attempt
775
- .mockResolvedValueOnce({
776
- thread: {
777
- id: 'thr_rename',
778
- preview: '',
779
- createdAt: 1700000000,
780
- updatedAt: 1700000002,
781
- status: { type: 'idle' },
782
- name: 'Renamed Chat',
783
- turns: [],
784
- },
785
- });
786
-
787
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
788
- const renamed = await client.renameChat('thr_rename', 'Renamed Chat');
789
-
790
- expect(ws.request).toHaveBeenNthCalledWith(1, 'thread/name/set', {
791
- threadId: 'thr_rename',
792
- name: 'Renamed Chat',
793
- });
794
- expect(ws.request).toHaveBeenNthCalledWith(2, 'thread/name/set', {
795
- threadId: 'thr_rename',
796
- threadName: 'Renamed Chat',
797
- });
798
- expect(ws.request).toHaveBeenNthCalledWith(3, 'thread/name/set', {
799
- threadId: 'thr_rename',
800
- threadName: 'Renamed Chat',
801
- });
802
- expect(renamed.title).toBe('Renamed Chat');
803
- });
804
-
805
- it('sendChatMessage() forwards selected model/effort to turn/start', async () => {
806
- const ws = createWsMock();
807
- ws.request
808
- .mockResolvedValueOnce({}) // thread/resume
809
- .mockResolvedValueOnce({ turn: { id: 'turn_model' } }) // turn/start
810
- .mockResolvedValueOnce({
811
- thread: {
812
- id: 'thr_model',
813
- preview: 'done',
814
- createdAt: 1700000000,
815
- updatedAt: 1700000002,
816
- status: { type: 'idle' },
817
- turns: [
818
- {
819
- id: 'turn_model',
820
- items: [
821
- {
822
- type: 'userMessage',
823
- id: 'u1',
824
- content: [{ type: 'text', text: 'hello' }],
825
- },
826
- {
827
- type: 'agentMessage',
828
- id: 'a1',
829
- text: 'ok',
830
- },
831
- ],
832
- },
833
- ],
834
- },
835
- });
836
-
837
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
838
- await client.sendChatMessage('thr_model', {
839
- content: 'hello',
840
- model: 'gpt-5.3-codex',
841
- effort: 'high',
842
- });
843
-
844
- expect(ws.request).toHaveBeenNthCalledWith(1, 'thread/resume', expect.any(Object));
845
- expect(ws.request).toHaveBeenNthCalledWith(
846
- 2,
847
- 'turn/start',
848
- expect.objectContaining({
849
- model: 'gpt-5.3-codex',
850
- effort: 'high',
851
- })
852
- );
853
- });
854
-
855
- it('sendChatMessage() forwards service tier to turn/start', async () => {
856
- const ws = createWsMock();
857
- ws.request
858
- .mockResolvedValueOnce({}) // thread/resume
859
- .mockResolvedValueOnce({ turn: { id: 'turn_fast' } }) // turn/start
860
- .mockResolvedValueOnce({
861
- thread: {
862
- id: 'thr_fast',
863
- preview: 'done',
864
- createdAt: 1700000000,
865
- updatedAt: 1700000002,
866
- status: { type: 'idle' },
867
- turns: [
868
- {
869
- id: 'turn_fast',
870
- items: [
871
- {
872
- type: 'userMessage',
873
- id: 'u_fast',
874
- content: [{ type: 'text', text: 'hello' }],
875
- },
876
- {
877
- type: 'agentMessage',
878
- id: 'a_fast',
879
- text: 'ok',
880
- },
881
- ],
882
- },
883
- ],
884
- },
885
- });
886
-
887
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
888
- await client.sendChatMessage('thr_fast', {
889
- content: 'hello',
890
- serviceTier: 'fast',
891
- });
892
-
893
- expect(ws.request).toHaveBeenNthCalledWith(1, 'thread/resume', expect.any(Object));
894
- expect(ws.request).toHaveBeenNthCalledWith(
895
- 2,
896
- 'turn/start',
897
- expect.objectContaining({
898
- serviceTier: 'fast',
899
- })
900
- );
901
- });
902
-
903
- it('steerChatTurn() forwards expected turn id and structured input', async () => {
904
- const ws = createWsMock();
905
- ws.request.mockResolvedValueOnce({});
906
-
907
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
908
- await client.steerChatTurn('thr_steer', 'turn_steer', {
909
- content: 'continue with this direction',
910
- mentions: [{ path: '/tmp/src', name: 'src' }],
911
- localImages: [{ path: '/tmp/screenshot.png' }],
912
- });
913
-
914
- expect(ws.request).toHaveBeenCalledWith(
915
- 'turn/steer',
916
- expect.objectContaining({
917
- threadId: 'thr_steer',
918
- expectedTurnId: 'turn_steer',
919
- input: [
920
- {
921
- type: 'text',
922
- text: 'continue with this direction',
923
- text_elements: [],
924
- },
925
- {
926
- type: 'mention',
927
- path: '/tmp/src',
928
- name: 'src',
929
- },
930
- {
931
- type: 'localImage',
932
- path: '/tmp/screenshot.png',
933
- },
934
- ],
935
- })
936
- );
937
- });
938
-
939
- it('sendChatMessage() forwards selected approval policy to resume and turn/start', async () => {
940
- const ws = createWsMock();
941
- ws.request
942
- .mockResolvedValueOnce({}) // thread/resume
943
- .mockResolvedValueOnce({ turn: { id: 'turn_policy' } }) // turn/start
944
- .mockResolvedValueOnce({
945
- thread: {
946
- id: 'thr_policy_turn',
947
- preview: 'done',
948
- createdAt: 1700000000,
949
- updatedAt: 1700000002,
950
- status: { type: 'idle' },
951
- turns: [
952
- {
953
- id: 'turn_policy',
954
- items: [
955
- {
956
- type: 'userMessage',
957
- id: 'u_policy',
958
- content: [{ type: 'text', text: 'hello' }],
959
- },
960
- ],
961
- },
962
- ],
963
- },
964
- });
965
-
966
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
967
- await client.sendChatMessage('thr_policy_turn', {
968
- content: 'hello',
969
- approvalPolicy: 'never',
970
- });
971
-
972
- expect(ws.request).toHaveBeenNthCalledWith(
973
- 1,
974
- 'thread/resume',
975
- expect.objectContaining({
976
- approvalPolicy: 'never',
977
- })
978
- );
979
- expect(ws.request).toHaveBeenNthCalledWith(
980
- 2,
981
- 'turn/start',
982
- expect.objectContaining({
983
- approvalPolicy: 'never',
984
- })
985
- );
986
- });
987
-
988
- it('resumeThread() retries with compatibility payload when modern resume params are rejected', async () => {
989
- const ws = createWsMock();
990
- ws.request
991
- .mockRejectedValueOnce(new Error('unknown field `experimentalRawEvents`'))
992
- .mockResolvedValueOnce({});
993
-
994
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
995
- await expect(client.resumeThread('thr_resume')).resolves.toEqual({
996
- model: null,
997
- effort: null,
998
- });
999
-
1000
- expect(ws.request).toHaveBeenNthCalledWith(
1001
- 1,
1002
- 'thread/resume',
1003
- expect.objectContaining({
1004
- threadId: 'thr_resume',
1005
- experimentalRawEvents: true,
1006
- approvalPolicy: 'untrusted',
1007
- sandbox: 'danger-full-access',
1008
- })
1009
- );
1010
- expect(ws.request).toHaveBeenNthCalledWith(
1011
- 2,
1012
- 'thread/resume',
1013
- expect.objectContaining({
1014
- threadId: 'thr_resume',
1015
- approvalPolicy: 'on-request',
1016
- developerInstructions: expect.any(String),
1017
- experimentalRawEvents: true,
1018
- sandbox: 'danger-full-access',
1019
- })
1020
- );
1021
- });
1022
-
1023
- it('resumeThread() falls back to legacy payload when compatibility retry is rejected', async () => {
1024
- const ws = createWsMock();
1025
- ws.request
1026
- .mockRejectedValueOnce(new Error('unknown field `experimentalRawEvents`'))
1027
- .mockRejectedValueOnce(new Error('invalid params for resume options'))
1028
- .mockResolvedValueOnce({});
1029
-
1030
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1031
- await expect(client.resumeThread('thr_resume_legacy')).resolves.toEqual({
1032
- model: null,
1033
- effort: null,
1034
- });
1035
-
1036
- expect(ws.request).toHaveBeenNthCalledWith(
1037
- 1,
1038
- 'thread/resume',
1039
- expect.objectContaining({
1040
- threadId: 'thr_resume_legacy',
1041
- experimentalRawEvents: true,
1042
- approvalPolicy: 'untrusted',
1043
- sandbox: 'danger-full-access',
1044
- })
1045
- );
1046
- expect(ws.request).toHaveBeenNthCalledWith(
1047
- 2,
1048
- 'thread/resume',
1049
- expect.objectContaining({
1050
- threadId: 'thr_resume_legacy',
1051
- approvalPolicy: 'on-request',
1052
- developerInstructions: expect.any(String),
1053
- experimentalRawEvents: true,
1054
- sandbox: 'danger-full-access',
1055
- })
1056
- );
1057
- expect(ws.request).toHaveBeenNthCalledWith(
1058
- 3,
1059
- 'thread/resume',
1060
- expect.objectContaining({
1061
- threadId: 'thr_resume_legacy',
1062
- approvalPolicy: 'on-request',
1063
- developerInstructions: null,
1064
- sandbox: 'danger-full-access',
1065
- })
1066
- );
1067
-
1068
- const legacyPayload = ws.request.mock.calls[2]?.[1] as Record<string, unknown>;
1069
- expect(legacyPayload).not.toHaveProperty('experimentalRawEvents');
1070
- });
1071
-
1072
- it('resumeThread() keeps never approval policy in legacy retry when explicitly requested', async () => {
1073
- const ws = createWsMock();
1074
- ws.request
1075
- .mockRejectedValueOnce(new Error('unknown field `experimentalRawEvents`'))
1076
- .mockResolvedValueOnce({});
1077
-
1078
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1079
- await expect(
1080
- client.resumeThread('thr_resume_never', { approvalPolicy: 'never' })
1081
- ).resolves.toEqual({
1082
- model: null,
1083
- effort: null,
1084
- });
1085
-
1086
- expect(ws.request).toHaveBeenNthCalledWith(
1087
- 1,
1088
- 'thread/resume',
1089
- expect.objectContaining({
1090
- threadId: 'thr_resume_never',
1091
- approvalPolicy: 'never',
1092
- sandbox: 'danger-full-access',
1093
- })
1094
- );
1095
- expect(ws.request).toHaveBeenNthCalledWith(
1096
- 2,
1097
- 'thread/resume',
1098
- expect.objectContaining({
1099
- threadId: 'thr_resume_never',
1100
- approvalPolicy: 'never',
1101
- sandbox: 'danger-full-access',
1102
- })
1103
- );
1104
- });
1105
-
1106
- it('sendChatMessage() forwards mention and local-image attachments to turn/start input', async () => {
1107
- const ws = createWsMock();
1108
- ws.request
1109
- .mockResolvedValueOnce({}) // thread/resume
1110
- .mockResolvedValueOnce({ turn: { id: 'turn_mentions' } }) // turn/start
1111
- .mockResolvedValueOnce({
1112
- thread: {
1113
- id: 'thr_mentions',
1114
- preview: 'done',
1115
- createdAt: 1700000000,
1116
- updatedAt: 1700000002,
1117
- status: { type: 'idle' },
1118
- turns: [
1119
- {
1120
- id: 'turn_mentions',
1121
- items: [
1122
- {
1123
- type: 'userMessage',
1124
- id: 'u_mentions',
1125
- content: [{ type: 'text', text: 'review these files' }],
1126
- },
1127
- ],
1128
- },
1129
- ],
1130
- },
1131
- });
1132
-
1133
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1134
- await client.sendChatMessage('thr_mentions', {
1135
- content: 'review these files',
1136
- mentions: [
1137
- { path: 'apps/mobile/src/screens/MainScreen.tsx' },
1138
- { path: 'apps/mobile/src/api/client.ts', name: 'client.ts' },
1139
- ],
1140
- localImages: [{ path: '.clawdex-mobile-attachments/example.png' }],
1141
- });
1142
-
1143
- expect(ws.request).toHaveBeenNthCalledWith(
1144
- 2,
1145
- 'turn/start',
1146
- expect.objectContaining({
1147
- input: expect.arrayContaining([
1148
- expect.objectContaining({
1149
- type: 'text',
1150
- text: 'review these files',
1151
- }),
1152
- expect.objectContaining({
1153
- type: 'mention',
1154
- path: 'apps/mobile/src/screens/MainScreen.tsx',
1155
- name: 'MainScreen.tsx',
1156
- }),
1157
- expect.objectContaining({
1158
- type: 'mention',
1159
- path: 'apps/mobile/src/api/client.ts',
1160
- name: 'client.ts',
1161
- }),
1162
- expect.objectContaining({
1163
- type: 'localImage',
1164
- path: '.clawdex-mobile-attachments/example.png',
1165
- }),
1166
- ]),
1167
- })
1168
- );
1169
- });
1170
-
1171
- it('uploadAttachment() calls bridge/attachments/upload', async () => {
1172
- const ws = createWsMock();
1173
- ws.request.mockResolvedValue({
1174
- path: '.clawdex-mobile-attachments/file.txt',
1175
- fileName: 'file.txt',
1176
- mimeType: 'text/plain',
1177
- sizeBytes: 10,
1178
- kind: 'file',
1179
- });
1180
-
1181
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1182
- const uploaded = await client.uploadAttachment({
1183
- dataBase64: 'aGVsbG8=',
1184
- fileName: 'file.txt',
1185
- mimeType: 'text/plain',
1186
- kind: 'file',
1187
- });
1188
-
1189
- expect(ws.request).toHaveBeenCalledWith('bridge/attachments/upload', {
1190
- dataBase64: 'aGVsbG8=',
1191
- fileName: 'file.txt',
1192
- mimeType: 'text/plain',
1193
- kind: 'file',
1194
- });
1195
- expect(uploaded.path).toBe('.clawdex-mobile-attachments/file.txt');
1196
- });
1197
-
1198
- it('interruptTurn() calls turn/interrupt with thread and turn id', async () => {
1199
- const ws = createWsMock();
1200
- ws.request.mockResolvedValue({});
1201
-
1202
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1203
- await client.interruptTurn('thr_stop', 'turn_stop');
1204
-
1205
- expect(ws.request).toHaveBeenCalledWith('turn/interrupt', {
1206
- threadId: 'thr_stop',
1207
- turnId: 'turn_stop',
1208
- });
1209
- });
1210
-
1211
- it('interruptLatestTurn() resolves and interrupts the latest active turn', async () => {
1212
- const ws = createWsMock();
1213
- ws.request
1214
- .mockResolvedValueOnce({
1215
- thread: {
1216
- id: 'thr_active',
1217
- preview: 'working',
1218
- createdAt: 1700000000,
1219
- updatedAt: 1700000001,
1220
- status: { type: 'active' },
1221
- turns: [
1222
- {
1223
- id: 'turn_done',
1224
- status: 'completed',
1225
- items: [],
1226
- },
1227
- {
1228
- id: 'turn_live',
1229
- status: 'inProgress',
1230
- items: [],
1231
- },
1232
- ],
1233
- },
1234
- })
1235
- .mockResolvedValueOnce({});
1236
-
1237
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1238
- const turnId = await client.interruptLatestTurn('thr_active');
1239
-
1240
- expect(turnId).toBe('turn_live');
1241
- expect(ws.request).toHaveBeenNthCalledWith(1, 'thread/read', {
1242
- threadId: 'thr_active',
1243
- includeTurns: true,
1244
- });
1245
- expect(ws.request).toHaveBeenNthCalledWith(2, 'turn/interrupt', {
1246
- threadId: 'thr_active',
1247
- turnId: 'turn_live',
1248
- });
1249
- });
1250
-
1251
- it('interruptLatestTurn() returns null when there is no active turn', async () => {
1252
- const ws = createWsMock();
1253
- ws.request.mockResolvedValueOnce({
1254
- thread: {
1255
- id: 'thr_idle',
1256
- preview: 'done',
1257
- createdAt: 1700000000,
1258
- updatedAt: 1700000001,
1259
- status: { type: 'idle' },
1260
- turns: [
1261
- {
1262
- id: 'turn_done',
1263
- status: 'completed',
1264
- items: [],
1265
- },
1266
- ],
1267
- },
1268
- });
1269
-
1270
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1271
- const turnId = await client.interruptLatestTurn('thr_idle');
1272
-
1273
- expect(turnId).toBeNull();
1274
- expect(ws.request).toHaveBeenCalledTimes(1);
1275
- expect(ws.request).toHaveBeenNthCalledWith(1, 'thread/read', {
1276
- threadId: 'thr_idle',
1277
- includeTurns: true,
1278
- });
1279
- });
1280
-
1281
- it('sendChatMessage() sends structured collaborationMode for plan mode', async () => {
1282
- const ws = createWsMock();
1283
- ws.request
1284
- .mockResolvedValueOnce({}) // thread/resume
1285
- .mockResolvedValueOnce({ turn: { id: 'turn_plan' } }) // turn/start
1286
- .mockResolvedValueOnce({
1287
- thread: {
1288
- id: 'thr_plan',
1289
- preview: 'done',
1290
- createdAt: 1700000000,
1291
- updatedAt: 1700000002,
1292
- status: { type: 'idle' },
1293
- turns: [
1294
- {
1295
- id: 'turn_plan',
1296
- items: [
1297
- {
1298
- type: 'userMessage',
1299
- id: 'u_plan',
1300
- content: [{ type: 'text', text: 'hello' }],
1301
- },
1302
- ],
1303
- },
1304
- ],
1305
- },
1306
- });
1307
-
1308
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1309
- await client.sendChatMessage('thr_plan', {
1310
- content: 'hello',
1311
- model: 'gpt-5.3-codex',
1312
- effort: 'high',
1313
- collaborationMode: 'plan',
1314
- });
1315
-
1316
- expect(ws.request).toHaveBeenNthCalledWith(
1317
- 2,
1318
- 'turn/start',
1319
- expect.objectContaining({
1320
- model: 'gpt-5.3-codex',
1321
- effort: 'high',
1322
- collaborationMode: {
1323
- mode: 'plan',
1324
- settings: {
1325
- model: 'gpt-5.3-codex',
1326
- reasoning_effort: 'high',
1327
- developer_instructions: null,
1328
- },
1329
- },
1330
- })
1331
- );
1332
- });
1333
-
1334
- it('sendChatMessage() sends structured collaborationMode for default mode using resumed thread settings', async () => {
1335
- const ws = createWsMock();
1336
- ws.request
1337
- .mockResolvedValueOnce({
1338
- model: 'gpt-5.3-codex',
1339
- reasoningEffort: 'medium',
1340
- }) // thread/resume
1341
- .mockResolvedValueOnce({ turn: { id: 'turn_default' } }) // turn/start
1342
- .mockResolvedValueOnce({
1343
- thread: {
1344
- id: 'thr_default',
1345
- preview: 'done',
1346
- createdAt: 1700000000,
1347
- updatedAt: 1700000002,
1348
- status: { type: 'idle' },
1349
- turns: [
1350
- {
1351
- id: 'turn_default',
1352
- items: [
1353
- {
1354
- type: 'userMessage',
1355
- id: 'u_default',
1356
- content: [{ type: 'text', text: 'implement it' }],
1357
- },
1358
- ],
1359
- },
1360
- ],
1361
- },
1362
- });
1363
-
1364
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1365
- await client.sendChatMessage('thr_default', {
1366
- content: 'implement it',
1367
- collaborationMode: 'default',
1368
- });
1369
-
1370
- expect(ws.request).toHaveBeenNthCalledWith(
1371
- 2,
1372
- 'turn/start',
1373
- expect.objectContaining({
1374
- model: 'gpt-5.3-codex',
1375
- effort: 'medium',
1376
- collaborationMode: {
1377
- mode: 'default',
1378
- settings: {
1379
- model: 'gpt-5.3-codex',
1380
- reasoning_effort: 'medium',
1381
- developer_instructions: null,
1382
- },
1383
- },
1384
- })
1385
- );
1386
- });
1387
-
1388
- it('sendChatMessage() resolves default model before plan mode turn when model is unset', async () => {
1389
- const ws = createWsMock();
1390
- ws.request
1391
- .mockResolvedValueOnce({}) // thread/resume
1392
- .mockResolvedValueOnce({
1393
- data: [
1394
- {
1395
- id: 'gpt-5.3-codex',
1396
- displayName: 'GPT-5.3 Codex',
1397
- isDefault: true,
1398
- },
1399
- ],
1400
- }) // model/list fallback
1401
- .mockResolvedValueOnce({ turn: { id: 'turn_plan_fallback' } }) // turn/start
1402
- .mockResolvedValueOnce({
1403
- thread: {
1404
- id: 'thr_plan_fallback',
1405
- preview: 'done',
1406
- createdAt: 1700000000,
1407
- updatedAt: 1700000002,
1408
- status: { type: 'idle' },
1409
- turns: [
1410
- {
1411
- id: 'turn_plan_fallback',
1412
- items: [
1413
- {
1414
- type: 'userMessage',
1415
- id: 'u_plan_fallback',
1416
- content: [{ type: 'text', text: 'hello' }],
1417
- },
1418
- ],
1419
- },
1420
- ],
1421
- },
1422
- });
1423
-
1424
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1425
- await client.sendChatMessage('thr_plan_fallback', {
1426
- content: 'hello',
1427
- collaborationMode: 'plan',
1428
- });
1429
-
1430
- expect(ws.request).toHaveBeenNthCalledWith(
1431
- 2,
1432
- 'model/list',
1433
- expect.objectContaining({
1434
- includeHidden: false,
1435
- })
1436
- );
1437
- expect(ws.request).toHaveBeenNthCalledWith(
1438
- 3,
1439
- 'turn/start',
1440
- expect.objectContaining({
1441
- model: 'gpt-5.3-codex',
1442
- collaborationMode: {
1443
- mode: 'plan',
1444
- settings: {
1445
- model: 'gpt-5.3-codex',
1446
- reasoning_effort: null,
1447
- developer_instructions: null,
1448
- },
1449
- },
1450
- })
1451
- );
1452
- });
1453
-
1454
- it('listModels() maps model/list response', async () => {
1455
- const ws = createWsMock();
1456
- ws.request.mockResolvedValue({
1457
- data: [
1458
- {
1459
- id: 'gpt-5.3-codex',
1460
- displayName: 'GPT-5.3 Codex',
1461
- description: 'Default coding model',
1462
- hidden: false,
1463
- supportsPersonality: true,
1464
- isDefault: true,
1465
- defaultReasoningEffort: 'medium',
1466
- supportedReasoningEfforts: [
1467
- { reasoningEffort: 'low', description: 'Lower latency' },
1468
- { reasoningEffort: 'medium', description: 'Balanced' },
1469
- { reasoningEffort: 'high', description: 'Higher depth' },
1470
- ],
1471
- },
1472
- ],
1473
- });
1474
-
1475
- const client = new HostBridgeApiClient({ ws: ws as unknown as HostBridgeWsClient });
1476
- const models = await client.listModels();
1477
-
1478
- expect(ws.request).toHaveBeenCalledWith(
1479
- 'model/list',
1480
- expect.objectContaining({
1481
- includeHidden: false,
1482
- })
1483
- );
1484
- expect(models).toHaveLength(1);
1485
- expect(models[0].id).toBe('gpt-5.3-codex');
1486
- expect(models[0].isDefault).toBe(true);
1487
- expect(models[0].defaultReasoningEffort).toBe('medium');
1488
- expect(models[0].reasoningEffort?.map((option) => option.effort)).toEqual([
1489
- 'low',
1490
- 'medium',
1491
- 'high',
1492
- ]);
1493
- });
1494
- });