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,1746 +0,0 @@
1
- import { Ionicons } from '@expo/vector-icons';
2
- import { useCallback, useEffect, useMemo, useState } from 'react';
3
- import { BlurView } from 'expo-blur';
4
- import { CameraView, type BarcodeScanningResult, useCameraPermissions } from 'expo-camera';
5
- import * as Clipboard from 'expo-clipboard';
6
- import { LinearGradient } from 'expo-linear-gradient';
7
- import {
8
- ActivityIndicator,
9
- KeyboardAvoidingView,
10
- Modal,
11
- Platform,
12
- Pressable,
13
- ScrollView,
14
- StyleSheet,
15
- Text,
16
- TextInput,
17
- View,
18
- } from 'react-native';
19
- import { SafeAreaView } from 'react-native-safe-area-context';
20
-
21
- import {
22
- isInsecureRemoteUrl,
23
- normalizeBridgeUrlInput,
24
- toBridgeHealthUrl,
25
- } from '../bridgeUrl';
26
- import { HostBridgeWsClient } from '../api/ws';
27
- import { BrandMark } from '../components/BrandMark';
28
- import { colors, radius, spacing, typography } from '../theme';
29
-
30
- type OnboardingMode = 'initial' | 'edit';
31
-
32
- interface OnboardingScreenProps {
33
- mode?: OnboardingMode;
34
- initialBridgeUrl?: string | null;
35
- initialBridgeToken?: string | null;
36
- allowInsecureRemoteBridge?: boolean;
37
- allowQueryTokenAuth?: boolean;
38
- onSave: (bridgeUrl: string, bridgeToken: string | null) => void;
39
- onCancel?: () => void;
40
- }
41
-
42
- type ConnectionCheck =
43
- | { kind: 'idle' }
44
- | { kind: 'success'; message: string }
45
- | { kind: 'error'; message: string };
46
- type OnboardingStep = 'intro' | 'connect';
47
- type PairingPayload = { bridgeToken: string; bridgeUrl?: string };
48
- type IntroFeature = {
49
- icon: keyof typeof Ionicons.glyphMap;
50
- title: string;
51
- description: string;
52
- };
53
-
54
- const BRIDGE_SETUP_COMMANDS = 'npm install -g clawdex-mobile@latest\nclawdex init';
55
- const INTRO_FEATURES: IntroFeature[] = [
56
- {
57
- icon: 'pulse-outline',
58
- title: 'Start and monitor runs',
59
- description: 'Launch new Codex work from your phone and follow streaming updates as it runs.',
60
- },
61
- {
62
- icon: 'chatbubble-ellipses-outline',
63
- title: 'Resume threads',
64
- description: 'Pick up existing chats and keep active work moving without going back to desktop.',
65
- },
66
- {
67
- icon: 'shield-checkmark-outline',
68
- title: 'Review approvals',
69
- description: 'Handle clarification prompts and approve commands or file changes in-app.',
70
- },
71
- {
72
- icon: 'folder-open-outline',
73
- title: 'Browse workspaces',
74
- description: 'Open recent folders or navigate server directories before starting work.',
75
- },
76
- {
77
- icon: 'git-branch-outline',
78
- title: 'Git actions',
79
- description: 'Review diffs, commit, and push chat workspaces from the Git view.',
80
- },
81
- {
82
- icon: 'mic-outline',
83
- title: 'Voice, files, images',
84
- description: 'Use push-to-talk and attach workspace files or phone images to prompts.',
85
- },
86
- ];
87
- const SETUP_STAGES = [
88
- {
89
- title: 'Start bridge',
90
- description: 'Run the CLI on your server and wait for the pairing QR.',
91
- },
92
- {
93
- title: 'Pair bridge',
94
- description: 'Scan QR or paste the bridge URL and token.',
95
- },
96
- {
97
- title: 'Verify auth',
98
- description: 'Confirm health and authenticated RPC before continuing.',
99
- },
100
- ] as const;
101
-
102
- export function OnboardingScreen({
103
- mode = 'initial',
104
- initialBridgeUrl,
105
- initialBridgeToken,
106
- allowInsecureRemoteBridge = false,
107
- allowQueryTokenAuth = false,
108
- onSave,
109
- onCancel,
110
- }: OnboardingScreenProps) {
111
- const [onboardingStep, setOnboardingStep] = useState<OnboardingStep>(
112
- mode === 'initial' ? 'intro' : 'connect'
113
- );
114
- const [urlInput, setUrlInput] = useState(initialBridgeUrl ?? '');
115
- const [tokenInput, setTokenInput] = useState(initialBridgeToken ?? '');
116
- const [tokenHidden, setTokenHidden] = useState(true);
117
- const [formError, setFormError] = useState<string | null>(null);
118
- const [checkingConnection, setCheckingConnection] = useState(false);
119
- const [connectionCheck, setConnectionCheck] = useState<ConnectionCheck>({ kind: 'idle' });
120
- const [cameraPermission, requestCameraPermission] = useCameraPermissions();
121
- const [scannerVisible, setScannerVisible] = useState(false);
122
- const [scannerError, setScannerError] = useState<string | null>(null);
123
- const [scannerLocked, setScannerLocked] = useState(false);
124
-
125
- useEffect(() => {
126
- setOnboardingStep(mode === 'initial' ? 'intro' : 'connect');
127
- }, [mode]);
128
-
129
- useEffect(() => {
130
- setUrlInput(initialBridgeUrl ?? '');
131
- }, [initialBridgeUrl]);
132
-
133
- useEffect(() => {
134
- setTokenInput(initialBridgeToken ?? '');
135
- }, [initialBridgeToken]);
136
-
137
- const showIntroStep = mode === 'initial' && onboardingStep === 'intro';
138
- const normalizedBridgeUrl = useMemo(
139
- () => normalizeBridgeUrlInput(urlInput),
140
- [urlInput]
141
- );
142
- const insecureRemoteWarning = useMemo(() => {
143
- if (!normalizedBridgeUrl || allowInsecureRemoteBridge) {
144
- return null;
145
- }
146
-
147
- return isInsecureRemoteUrl(normalizedBridgeUrl)
148
- ? 'This is plain HTTP over a non-private host. Use HTTPS/WSS when crossing untrusted networks.'
149
- : null;
150
- }, [allowInsecureRemoteBridge, normalizedBridgeUrl]);
151
-
152
- const modeTitle = mode === 'edit' ? 'Update Bridge URL' : 'Pair Your Bridge';
153
- const modeDescription =
154
- mode === 'edit'
155
- ? 'Switch this phone to another bridge without rebuilding the app.'
156
- : 'Connect this phone to your private bridge and verify that it responds.';
157
- const normalizedTokenPreview = tokenInput.trim();
158
- const showOnboardingDock = mode === 'initial';
159
- const currentSetupStage = useMemo(() => {
160
- if (showIntroStep) {
161
- return 1;
162
- }
163
- if (connectionCheck.kind === 'success') {
164
- return 3;
165
- }
166
- if (normalizedBridgeUrl || normalizedTokenPreview) {
167
- return 2;
168
- }
169
- return 1;
170
- }, [connectionCheck.kind, normalizedBridgeUrl, normalizedTokenPreview, showIntroStep]);
171
-
172
- const validateInput = useCallback((): { bridgeUrl: string; bridgeToken: string } | null => {
173
- const normalized = normalizeBridgeUrlInput(urlInput);
174
- if (!normalized) {
175
- setFormError('Enter a valid URL. Example: http://100.101.102.103:8787');
176
- return null;
177
- }
178
-
179
- const normalizedToken = tokenInput.trim();
180
- if (!normalizedToken) {
181
- setFormError('Bridge token is required.');
182
- return null;
183
- }
184
-
185
- setFormError(null);
186
- return { bridgeUrl: normalized, bridgeToken: normalizedToken };
187
- }, [tokenInput, urlInput]);
188
-
189
- const normalizeTokenInput = useCallback((value: string): string | null => {
190
- const trimmed = value.trim();
191
- return trimmed.length > 0 ? trimmed : null;
192
- }, []);
193
-
194
- const runConnectionCheck = useCallback(
195
- async (normalized: string, token: string | null): Promise<boolean> => {
196
- setCheckingConnection(true);
197
- setConnectionCheck({ kind: 'idle' });
198
-
199
- let probeClient: HostBridgeWsClient | null = null;
200
- let healthCheckError: string | null = null;
201
- try {
202
- const headers: Record<string, string> | undefined = token
203
- ? { Authorization: `Bearer ${token}` }
204
- : undefined;
205
- const healthUrl = toBridgeHealthUrl(normalized);
206
- try {
207
- const response = await fetch(healthUrl, { method: 'GET', headers });
208
- if (response.status !== 200) {
209
- healthCheckError = `health returned ${response.status}`;
210
- }
211
- } catch (error) {
212
- healthCheckError = (error as Error).message || 'network request failed';
213
- }
214
-
215
- probeClient = new HostBridgeWsClient(normalized, {
216
- authToken: token,
217
- allowQueryTokenAuth,
218
- requestTimeoutMs: 10_000,
219
- });
220
- const rpcHealth = await probeClient.request<{ status?: string }>('bridge/health/read');
221
- if (rpcHealth?.status !== 'ok') {
222
- throw new Error('authenticated RPC probe returned unexpected response');
223
- }
224
-
225
- setConnectionCheck({
226
- kind: 'success',
227
- message: healthCheckError
228
- ? 'Connected. Authenticated RPC verified; /health endpoint did not return 200.'
229
- : 'Connected. URL and token both verified.',
230
- });
231
- return true;
232
- } catch (error) {
233
- const baseMessage = (error as Error).message || 'request failed';
234
- const hint =
235
- Platform.OS === 'android' && baseMessage.includes('Network request failed')
236
- ? ' (If using Android emulator, use http://10.0.2.2:8787 for localhost bridge.)'
237
- : '';
238
- setConnectionCheck({
239
- kind: 'error',
240
- message: `Bridge verification failed: ${baseMessage}${hint}`,
241
- });
242
- return false;
243
- } finally {
244
- probeClient?.disconnect();
245
- setCheckingConnection(false);
246
- }
247
- },
248
- [allowQueryTokenAuth]
249
- );
250
-
251
- const handleSave = useCallback(async () => {
252
- const validated = validateInput();
253
- if (!validated) {
254
- return;
255
- }
256
-
257
- const normalizedToken = normalizeTokenInput(validated.bridgeToken);
258
- const ok = await runConnectionCheck(validated.bridgeUrl, normalizedToken);
259
- if (!ok) {
260
- return;
261
- }
262
-
263
- onSave(validated.bridgeUrl, normalizedToken);
264
- }, [normalizeTokenInput, onSave, runConnectionCheck, validateInput]);
265
-
266
- const handleConnectionCheck = useCallback(async () => {
267
- const validated = validateInput();
268
- if (!validated) {
269
- setConnectionCheck({ kind: 'idle' });
270
- return;
271
- }
272
-
273
- const normalizedToken = normalizeTokenInput(validated.bridgeToken);
274
- await runConnectionCheck(validated.bridgeUrl, normalizedToken);
275
- }, [normalizeTokenInput, runConnectionCheck, validateInput]);
276
-
277
- const goToConnectStep = useCallback(() => {
278
- setOnboardingStep('connect');
279
- }, []);
280
-
281
- const closeScanner = useCallback(() => {
282
- setScannerVisible(false);
283
- setScannerLocked(false);
284
- setScannerError(null);
285
- }, []);
286
-
287
- const openScanner = useCallback(async () => {
288
- setFormError(null);
289
- setConnectionCheck({ kind: 'idle' });
290
- setScannerError(null);
291
-
292
- if (!cameraPermission?.granted) {
293
- const result = await requestCameraPermission();
294
- if (!result.granted) {
295
- setFormError('Camera permission is required to scan bridge QR.');
296
- return;
297
- }
298
- }
299
-
300
- setScannerLocked(false);
301
- setScannerVisible(true);
302
- }, [cameraPermission?.granted, requestCameraPermission]);
303
-
304
- const applyPairingPayload = useCallback((pairing: PairingPayload) => {
305
- if (pairing.bridgeUrl) {
306
- setUrlInput(pairing.bridgeUrl);
307
- }
308
- setTokenInput(pairing.bridgeToken);
309
- setFormError(null);
310
- setConnectionCheck({ kind: 'idle' });
311
- setScannerError(null);
312
- setScannerLocked(false);
313
- setScannerVisible(false);
314
- }, []);
315
-
316
- const handleBarcodeScanned = useCallback(
317
- (result: BarcodeScanningResult) => {
318
- if (scannerLocked) {
319
- return;
320
- }
321
-
322
- setScannerLocked(true);
323
- const pairing = parsePairingPayload(result.data);
324
- if (!pairing) {
325
- setScannerError('QR code is not a valid Clawdex bridge pairing code.');
326
- setTimeout(() => {
327
- setScannerLocked(false);
328
- }, 1200);
329
- return;
330
- }
331
-
332
- applyPairingPayload(pairing);
333
- },
334
- [applyPairingPayload, scannerLocked]
335
- );
336
-
337
- return (
338
- <View style={styles.container}>
339
- <LinearGradient
340
- colors={['#020304', '#05070C', '#0A0E16']}
341
- style={StyleSheet.absoluteFill}
342
- />
343
- <View pointerEvents="none" style={styles.ambientCanvas}>
344
- <LinearGradient
345
- colors={['rgba(181, 189, 204, 0.20)', 'rgba(181, 189, 204, 0.04)', 'transparent']}
346
- style={styles.ambientOrbPrimary}
347
- />
348
- <LinearGradient
349
- colors={['rgba(255, 255, 255, 0.10)', 'rgba(255, 255, 255, 0.02)', 'transparent']}
350
- style={styles.ambientOrbSecondary}
351
- />
352
- </View>
353
- <SafeAreaView style={styles.safeArea}>
354
- <KeyboardAvoidingView
355
- behavior={Platform.select({ ios: 'padding', default: undefined })}
356
- style={styles.keyboardAvoiding}
357
- >
358
- {showIntroStep ? (
359
- <View style={styles.introRoot}>
360
- <View style={styles.introHeader}>
361
- <View style={styles.introBrandRow}>
362
- <BrandMark size={24} />
363
- <Text style={styles.introBrandName}>Clawdex</Text>
364
- </View>
365
- <AmbientBadge icon="lock-closed-outline" label="Private bridge" />
366
- </View>
367
-
368
- <ScrollView
369
- style={styles.introScroll}
370
- contentContainerStyle={styles.introScrollContent}
371
- showsVerticalScrollIndicator={false}
372
- >
373
- <LinearGradient
374
- colors={[
375
- 'rgba(181, 189, 204, 0.22)',
376
- 'rgba(34, 39, 48, 0.75)',
377
- 'rgba(7, 9, 12, 0.96)',
378
- ]}
379
- start={{ x: 0, y: 0 }}
380
- end={{ x: 1, y: 1 }}
381
- style={styles.introHero}
382
- >
383
- <Text style={styles.introHeroEyebrow}>Mobile control surface</Text>
384
- <Text style={styles.introHeroTitle}>Run Codex away from your desk.</Text>
385
- <Text style={styles.introHeroDescription}>
386
- Continue threads, review work, and approve changes from a paired private
387
- bridge.
388
- </Text>
389
- </LinearGradient>
390
-
391
- <View style={styles.introSectionHeader}>
392
- <Text style={styles.introSectionTitle}>What you can do from mobile</Text>
393
- <Text style={styles.introSectionSubtitle}>
394
- The phone UI should feel like a control surface, not a read-only mirror.
395
- </Text>
396
- </View>
397
-
398
- <View style={styles.introFeatureGrid}>
399
- {INTRO_FEATURES.map((feature) => (
400
- <IntroFeatureCard
401
- key={feature.title}
402
- icon={feature.icon}
403
- title={feature.title}
404
- description={feature.description}
405
- />
406
- ))}
407
- </View>
408
-
409
- <BlurView intensity={40} tint="dark" style={styles.introContextCard}>
410
- <Text style={styles.introContextTitle}>Best on trusted networks</Text>
411
- <Text style={styles.introContextText}>
412
- Built for your own machine and private network paths. Pair over LAN nearby, or
413
- use Tailscale when the bridge lives on another device.
414
- </Text>
415
- <View style={styles.introContextPillRow}>
416
- <AmbientBadge icon="git-network-outline" label="Private network only" />
417
- <AmbientBadge icon="shield-checkmark-outline" label="Token auth required" />
418
- </View>
419
- </BlurView>
420
- </ScrollView>
421
-
422
- <View style={styles.introFooter}>
423
- {showOnboardingDock ? <OnboardingStepDock currentStage={currentSetupStage} /> : null}
424
- <Pressable
425
- onPress={goToConnectStep}
426
- style={({ pressed }) => [
427
- styles.introNextButton,
428
- pressed && styles.introNextButtonPressed,
429
- ]}
430
- >
431
- <Text style={styles.introNextButtonText}>Pair your bridge</Text>
432
- <Ionicons name="arrow-forward" size={19} color={colors.black} />
433
- </Pressable>
434
- </View>
435
- </View>
436
- ) : (
437
- <View style={styles.connectRoot}>
438
- <ScrollView
439
- style={styles.scroll}
440
- contentContainerStyle={styles.scrollContent}
441
- keyboardShouldPersistTaps="handled"
442
- showsVerticalScrollIndicator={false}
443
- >
444
- <LinearGradient
445
- colors={[
446
- 'rgba(181, 189, 204, 0.18)',
447
- 'rgba(22, 25, 31, 0.82)',
448
- 'rgba(7, 9, 12, 0.98)',
449
- ]}
450
- start={{ x: 0, y: 0 }}
451
- end={{ x: 1, y: 1 }}
452
- style={styles.connectHero}
453
- >
454
- <View style={styles.heroTopRow}>
455
- <View style={styles.heroIconWrap}>
456
- <Ionicons name="hardware-chip-outline" size={20} color={colors.textPrimary} />
457
- </View>
458
- {mode === 'edit' && onCancel ? (
459
- <Pressable
460
- onPress={onCancel}
461
- hitSlop={8}
462
- style={({ pressed }) => [styles.cancelBtn, pressed && styles.cancelBtnPressed]}
463
- >
464
- <Ionicons name="close" size={16} color={colors.textPrimary} />
465
- </Pressable>
466
- ) : null}
467
- </View>
468
- <Text style={styles.connectEyebrow}>Bridge pairing</Text>
469
- <Text style={styles.heroTitle}>{modeTitle}</Text>
470
- <Text style={styles.heroDescription}>{modeDescription}</Text>
471
- </LinearGradient>
472
-
473
- <BlurView intensity={55} tint="dark" style={styles.formCard}>
474
- <View style={styles.commandPanel}>
475
- <View style={styles.formSectionHeader}>
476
- <Text style={styles.formSectionEyebrow}>1. Start the bridge</Text>
477
- <Text style={styles.formSectionTitle}>
478
- Run these on your server first. This installs the CLI, starts the bridge,
479
- and prints the pairing QR used here.
480
- </Text>
481
- </View>
482
- <CommandSnippet
483
- label="Run on your server"
484
- command={BRIDGE_SETUP_COMMANDS}
485
- hint="After it starts, scan the pairing QR in this screen."
486
- />
487
- </View>
488
-
489
- <View style={styles.formSectionHeader}>
490
- <Text style={styles.formSectionEyebrow}>2. Pair the bridge</Text>
491
- <Text style={styles.formSectionTitle}>
492
- Scan the bridge QR first. If that is not available, enter the URL and token
493
- manually.
494
- </Text>
495
- </View>
496
-
497
- <Pressable
498
- onPress={() => {
499
- void openScanner();
500
- }}
501
- style={({ pressed }) => [
502
- styles.scanButton,
503
- pressed && styles.scanButtonPressed,
504
- ]}
505
- >
506
- <Ionicons name="qr-code-outline" size={16} color={colors.textPrimary} />
507
- <Text style={styles.scanButtonText}>Scan bridge QR</Text>
508
- </Pressable>
509
- <Text style={styles.helperText}>
510
- Recommended first. QR fills the bridge URL and token together.
511
- </Text>
512
-
513
- <View style={styles.fieldGroup}>
514
- <Text style={styles.label}>Bridge URL</Text>
515
- <View style={styles.inputRow}>
516
- <View style={styles.inputIconWrap}>
517
- <Ionicons name="globe-outline" size={16} color={colors.textSecondary} />
518
- </View>
519
- <TextInput
520
- value={urlInput}
521
- onChangeText={(value) => {
522
- setUrlInput(value);
523
- setFormError(null);
524
- setConnectionCheck({ kind: 'idle' });
525
- }}
526
- keyboardAppearance="dark"
527
- autoCapitalize="none"
528
- autoCorrect={false}
529
- keyboardType="url"
530
- placeholder="http://100.101.102.103:8787"
531
- placeholderTextColor={colors.textMuted}
532
- style={styles.inputText}
533
- returnKeyType="done"
534
- onSubmitEditing={() => {
535
- void handleSave();
536
- }}
537
- />
538
- </View>
539
- </View>
540
-
541
- <View style={styles.fieldGroup}>
542
- <View style={styles.tokenHeaderRow}>
543
- <Text style={styles.label}>Bridge Token</Text>
544
- <Text style={styles.optionalLabel}>Required</Text>
545
- </View>
546
- <View style={styles.tokenInputWrap}>
547
- <View style={styles.inputRow}>
548
- <View style={styles.inputIconWrap}>
549
- <Ionicons name="key-outline" size={16} color={colors.textSecondary} />
550
- </View>
551
- <TextInput
552
- value={tokenInput}
553
- onChangeText={(value) => {
554
- setTokenInput(value);
555
- setConnectionCheck({ kind: 'idle' });
556
- }}
557
- keyboardAppearance="dark"
558
- autoCapitalize="none"
559
- autoCorrect={false}
560
- keyboardType="default"
561
- placeholder="Paste bridge token"
562
- placeholderTextColor={colors.textMuted}
563
- style={styles.inputText}
564
- secureTextEntry={tokenHidden}
565
- returnKeyType="done"
566
- onSubmitEditing={() => {
567
- void handleSave();
568
- }}
569
- />
570
- </View>
571
- <Pressable
572
- onPress={() => setTokenHidden((prev) => !prev)}
573
- style={({ pressed }) => [
574
- styles.tokenRevealBtn,
575
- pressed && styles.tokenRevealBtnPressed,
576
- ]}
577
- >
578
- <Ionicons
579
- name={tokenHidden ? 'eye-outline' : 'eye-off-outline'}
580
- size={16}
581
- color={colors.textSecondary}
582
- />
583
- <Text style={styles.tokenRevealBtnText}>
584
- {tokenHidden ? 'Show' : 'Hide'}
585
- </Text>
586
- </Pressable>
587
- </View>
588
- </View>
589
-
590
- <Text style={styles.helperText}>
591
- URL supports `http`, `https`, `ws`, and `wss`. `/rpc` is added automatically.
592
- </Text>
593
-
594
- {normalizedBridgeUrl ? (
595
- <View style={styles.previewWrap}>
596
- <Text style={styles.previewLabel}>Normalized target</Text>
597
- <Text selectable style={styles.previewValue}>
598
- {normalizedBridgeUrl}
599
- </Text>
600
- </View>
601
- ) : null}
602
-
603
- {insecureRemoteWarning ? (
604
- <StatusBanner
605
- tone="warning"
606
- icon="warning-outline"
607
- message={insecureRemoteWarning}
608
- />
609
- ) : null}
610
-
611
- {formError ? (
612
- <StatusBanner tone="error" icon="close-circle-outline" message={formError} />
613
- ) : null}
614
- {connectionCheck.kind === 'success' ? (
615
- <StatusBanner
616
- tone="success"
617
- icon="checkmark-circle-outline"
618
- message={connectionCheck.message}
619
- />
620
- ) : null}
621
- {connectionCheck.kind === 'error' ? (
622
- <StatusBanner
623
- tone="error"
624
- icon="alert-circle-outline"
625
- message={connectionCheck.message}
626
- />
627
- ) : null}
628
-
629
- <View style={styles.formSectionHeader}>
630
- <Text style={styles.formSectionEyebrow}>3. Verify and continue</Text>
631
- <Text style={styles.formSectionTitle}>
632
- Confirm the bridge responds before saving it into the app.
633
- </Text>
634
- </View>
635
-
636
- <View style={styles.actionRow}>
637
- <Pressable
638
- onPress={() => {
639
- void handleConnectionCheck();
640
- }}
641
- disabled={checkingConnection}
642
- style={({ pressed }) => [
643
- styles.secondaryButton,
644
- pressed && !checkingConnection && styles.secondaryButtonPressed,
645
- checkingConnection && styles.secondaryButtonDisabled,
646
- ]}
647
- >
648
- {checkingConnection ? (
649
- <ActivityIndicator size="small" color={colors.textPrimary} />
650
- ) : (
651
- <Ionicons name="pulse-outline" size={16} color={colors.textPrimary} />
652
- )}
653
- <Text style={styles.secondaryButtonText}>Test Connection</Text>
654
- </Pressable>
655
- <Pressable
656
- onPress={() => {
657
- void handleSave();
658
- }}
659
- disabled={checkingConnection}
660
- style={({ pressed }) => [
661
- styles.primaryButton,
662
- pressed && !checkingConnection && styles.primaryButtonPressed,
663
- checkingConnection && styles.primaryButtonDisabled,
664
- ]}
665
- >
666
- {checkingConnection ? (
667
- <ActivityIndicator size="small" color={colors.black} />
668
- ) : (
669
- <Ionicons name="arrow-forward" size={16} color={colors.black} />
670
- )}
671
- <Text style={styles.primaryButtonText}>
672
- {mode === 'edit' ? 'Save URL' : 'Continue'}
673
- </Text>
674
- </Pressable>
675
- </View>
676
- </BlurView>
677
- </ScrollView>
678
- {showOnboardingDock ? (
679
- <View style={styles.connectFooter}>
680
- <OnboardingStepDock currentStage={currentSetupStage} />
681
- </View>
682
- ) : null}
683
- </View>
684
- )}
685
- <Modal
686
- animationType="slide"
687
- visible={scannerVisible}
688
- transparent
689
- onRequestClose={closeScanner}
690
- >
691
- <View style={styles.scannerModalRoot}>
692
- <View style={styles.scannerSheet}>
693
- <View style={styles.scannerHeader}>
694
- <Text style={styles.scannerTitle}>Scan Bridge QR</Text>
695
- <Pressable
696
- onPress={closeScanner}
697
- hitSlop={8}
698
- style={({ pressed }) => [
699
- styles.scannerCloseBtn,
700
- pressed && styles.scannerCloseBtnPressed,
701
- ]}
702
- >
703
- <Ionicons name="close" size={18} color={colors.textPrimary} />
704
- </Pressable>
705
- </View>
706
- <View style={styles.scannerCameraFrame}>
707
- {cameraPermission?.granted ? (
708
- <CameraView
709
- style={styles.scannerCamera}
710
- barcodeScannerSettings={{ barcodeTypes: ['qr'] }}
711
- onBarcodeScanned={scannerLocked ? undefined : handleBarcodeScanned}
712
- />
713
- ) : (
714
- <View style={styles.scannerPermissionWrap}>
715
- <Text style={styles.scannerPermissionText}>
716
- Camera permission is required to scan bridge QR.
717
- </Text>
718
- </View>
719
- )}
720
- </View>
721
- <Text style={styles.scannerHintText}>
722
- Scan the bridge QR to autofill URL and token (or token-only fallback).
723
- </Text>
724
- {scannerError ? <Text style={styles.errorText}>{scannerError}</Text> : null}
725
- </View>
726
- </View>
727
- </Modal>
728
- </KeyboardAvoidingView>
729
- </SafeAreaView>
730
- </View>
731
- );
732
- }
733
-
734
- function IntroFeatureCard({
735
- icon,
736
- title,
737
- description,
738
- }: {
739
- icon: keyof typeof Ionicons.glyphMap;
740
- title: string;
741
- description: string;
742
- }) {
743
- return (
744
- <View style={styles.introFeatureCard}>
745
- <View style={styles.introFeatureIconWrap}>
746
- <Ionicons name={icon} size={16} color={colors.textPrimary} />
747
- </View>
748
- <View style={styles.introFeatureTextWrap}>
749
- <Text style={styles.introFeatureTitle}>{title}</Text>
750
- <Text style={styles.introFeatureDescription}>{description}</Text>
751
- </View>
752
- </View>
753
- );
754
- }
755
-
756
- function AmbientBadge({
757
- icon,
758
- label,
759
- }: {
760
- icon: keyof typeof Ionicons.glyphMap;
761
- label: string;
762
- }) {
763
- return (
764
- <View style={styles.ambientBadge}>
765
- <Ionicons name={icon} size={13} color={colors.textSecondary} />
766
- <Text style={styles.ambientBadgeText}>{label}</Text>
767
- </View>
768
- );
769
- }
770
-
771
- function OnboardingStepDock({ currentStage }: { currentStage: number }) {
772
- return (
773
- <BlurView intensity={45} tint="dark" style={styles.stepperDock}>
774
- <View style={styles.stepperDockRow}>
775
- {SETUP_STAGES.map((stage, index) => {
776
- const stepNumber = index + 1;
777
- const isActive = stepNumber === currentStage;
778
- const isComplete = stepNumber < currentStage;
779
- return (
780
- <View
781
- key={stage.title}
782
- style={[
783
- styles.stepperPill,
784
- isActive && styles.stepperPillActive,
785
- isComplete && styles.stepperPillComplete,
786
- ]}
787
- >
788
- <View
789
- style={[
790
- styles.stepperPillIndex,
791
- isActive && styles.stepperPillIndexActive,
792
- isComplete && styles.stepperPillIndexComplete,
793
- ]}
794
- >
795
- <Text
796
- style={[
797
- styles.stepperPillIndexText,
798
- (isActive || isComplete) && styles.stepperPillIndexTextActive,
799
- ]}
800
- >
801
- {isComplete ? '✓' : String(stepNumber)}
802
- </Text>
803
- </View>
804
- <Text
805
- numberOfLines={1}
806
- style={[
807
- styles.stepperPillTitle,
808
- isActive && styles.stepperPillTitleActive,
809
- isComplete && styles.stepperPillTitleComplete,
810
- ]}
811
- >
812
- {stage.title}
813
- </Text>
814
- </View>
815
- );
816
- })}
817
- </View>
818
- </BlurView>
819
- );
820
- }
821
-
822
- function CommandSnippet({
823
- label,
824
- command,
825
- hint,
826
- }: {
827
- label: string;
828
- command: string;
829
- hint: string;
830
- }) {
831
- const [copied, setCopied] = useState(false);
832
-
833
- const handleCopy = useCallback(async () => {
834
- await Clipboard.setStringAsync(command);
835
- setCopied(true);
836
- setTimeout(() => {
837
- setCopied(false);
838
- }, 1400);
839
- }, [command]);
840
-
841
- return (
842
- <View style={styles.commandCard}>
843
- <View style={styles.commandCardHeader}>
844
- <View style={styles.commandCardHeaderLeft}>
845
- <Ionicons name="terminal-outline" size={14} color={colors.textSecondary} />
846
- <Text style={styles.commandCardLabel}>{label}</Text>
847
- </View>
848
- <Pressable
849
- onPress={() => {
850
- void handleCopy();
851
- }}
852
- style={({ pressed }) => [
853
- styles.commandCopyButton,
854
- copied && styles.commandCopyButtonCopied,
855
- pressed && styles.commandCopyButtonPressed,
856
- ]}
857
- >
858
- <Ionicons
859
- name={copied ? 'checkmark-outline' : 'copy-outline'}
860
- size={14}
861
- color={copied ? colors.black : colors.textPrimary}
862
- />
863
- <Text
864
- style={[
865
- styles.commandCopyButtonText,
866
- copied && styles.commandCopyButtonTextCopied,
867
- ]}
868
- >
869
- {copied ? 'Copied' : 'Copy'}
870
- </Text>
871
- </Pressable>
872
- </View>
873
- <View style={styles.commandCodeWrap}>
874
- <Text selectable style={styles.commandCodeText}>
875
- {command}
876
- </Text>
877
- </View>
878
- <Text style={styles.commandCardHint}>{hint}</Text>
879
- </View>
880
- );
881
- }
882
-
883
- function StatusBanner({
884
- tone,
885
- icon,
886
- message,
887
- }: {
888
- tone: 'warning' | 'error' | 'success';
889
- icon: keyof typeof Ionicons.glyphMap;
890
- message: string;
891
- }) {
892
- const iconColor =
893
- tone === 'warning' ? '#F7D27E' : tone === 'success' ? colors.statusComplete : colors.error;
894
-
895
- return (
896
- <View
897
- style={[
898
- styles.statusBanner,
899
- tone === 'warning'
900
- ? styles.statusBannerWarning
901
- : tone === 'success'
902
- ? styles.statusBannerSuccess
903
- : styles.statusBannerError,
904
- ]}
905
- >
906
- <Ionicons
907
- name={icon}
908
- size={16}
909
- color={iconColor}
910
- />
911
- <Text
912
- style={[
913
- styles.statusBannerText,
914
- tone === 'warning'
915
- ? styles.warningText
916
- : tone === 'success'
917
- ? styles.successText
918
- : styles.errorText,
919
- ]}
920
- >
921
- {message}
922
- </Text>
923
- </View>
924
- );
925
- }
926
-
927
- function parsePairingPayload(rawValue: string): PairingPayload | null {
928
- const raw = rawValue.trim();
929
- if (!raw) {
930
- return null;
931
- }
932
-
933
- try {
934
- const parsed = JSON.parse(raw) as {
935
- type?: unknown;
936
- bridgeUrl?: unknown;
937
- url?: unknown;
938
- bridgeToken?: unknown;
939
- token?: unknown;
940
- };
941
- const type = typeof parsed.type === 'string' ? parsed.type.trim().toLowerCase() : '';
942
- const bridgeUrlRaw =
943
- typeof parsed.bridgeUrl === 'string'
944
- ? parsed.bridgeUrl
945
- : typeof parsed.url === 'string'
946
- ? parsed.url
947
- : '';
948
- const bridgeTokenRaw =
949
- typeof parsed.bridgeToken === 'string'
950
- ? parsed.bridgeToken
951
- : typeof parsed.token === 'string'
952
- ? parsed.token
953
- : '';
954
- const bridgeUrl = normalizeBridgeUrlInput(bridgeUrlRaw) ?? undefined;
955
- const bridgeToken = bridgeTokenRaw.trim();
956
- if (
957
- bridgeToken &&
958
- (
959
- type === 'clawdex-bridge-pair' ||
960
- type === 'clawdex/bridge-pair' ||
961
- type === 'clawdex-bridge-token' ||
962
- type === 'clawdex/bridge-token' ||
963
- !type
964
- )
965
- ) {
966
- return bridgeUrl ? { bridgeToken, bridgeUrl } : { bridgeToken };
967
- }
968
- } catch {
969
- // Try URI form fallback below.
970
- }
971
-
972
- try {
973
- const parsed = new URL(raw);
974
- if (parsed.protocol !== 'clawdex:') {
975
- return null;
976
- }
977
- const bridgeUrl =
978
- normalizeBridgeUrlInput(
979
- parsed.searchParams.get('bridgeUrl') ?? parsed.searchParams.get('url') ?? ''
980
- ) ?? undefined;
981
- const bridgeToken = (
982
- parsed.searchParams.get('bridgeToken') ?? parsed.searchParams.get('token') ?? ''
983
- ).trim();
984
- if (!bridgeToken) {
985
- return null;
986
- }
987
- return bridgeUrl ? { bridgeToken, bridgeUrl } : { bridgeToken };
988
- } catch {
989
- return null;
990
- }
991
- }
992
-
993
- const styles = StyleSheet.create({
994
- container: {
995
- flex: 1,
996
- backgroundColor: colors.bgMain,
997
- },
998
- safeArea: {
999
- flex: 1,
1000
- },
1001
- keyboardAvoiding: {
1002
- flex: 1,
1003
- },
1004
- ambientCanvas: {
1005
- ...StyleSheet.absoluteFillObject,
1006
- overflow: 'hidden',
1007
- },
1008
- ambientOrbPrimary: {
1009
- position: 'absolute',
1010
- top: -110,
1011
- right: -70,
1012
- width: 280,
1013
- height: 280,
1014
- borderRadius: 140,
1015
- },
1016
- ambientOrbSecondary: {
1017
- position: 'absolute',
1018
- bottom: 110,
1019
- left: -90,
1020
- width: 220,
1021
- height: 220,
1022
- borderRadius: 110,
1023
- },
1024
- introRoot: {
1025
- flex: 1,
1026
- paddingHorizontal: spacing.lg,
1027
- paddingTop: spacing.md,
1028
- paddingBottom: spacing.xxl,
1029
- gap: spacing.md,
1030
- },
1031
- introHeader: {
1032
- flexDirection: 'row',
1033
- alignItems: 'center',
1034
- justifyContent: 'space-between',
1035
- gap: spacing.md,
1036
- },
1037
- introBrandRow: {
1038
- flexDirection: 'row',
1039
- alignItems: 'center',
1040
- gap: spacing.sm,
1041
- },
1042
- introBrandName: {
1043
- ...typography.headline,
1044
- color: colors.textPrimary,
1045
- fontSize: 18,
1046
- letterSpacing: -0.2,
1047
- },
1048
- introScroll: {
1049
- flex: 1,
1050
- },
1051
- introScrollContent: {
1052
- paddingBottom: spacing.lg,
1053
- gap: spacing.md,
1054
- },
1055
- introHero: {
1056
- borderRadius: 24,
1057
- borderWidth: StyleSheet.hairlineWidth,
1058
- borderColor: colors.borderHighlight,
1059
- padding: spacing.lg,
1060
- gap: spacing.sm,
1061
- overflow: 'hidden',
1062
- },
1063
- introHeroEyebrow: {
1064
- ...typography.caption,
1065
- color: colors.textSecondary,
1066
- textTransform: 'uppercase',
1067
- letterSpacing: 0.8,
1068
- },
1069
- introHeroTitle: {
1070
- ...typography.largeTitle,
1071
- fontSize: 22,
1072
- lineHeight: 26,
1073
- letterSpacing: -0.4,
1074
- },
1075
- introHeroDescription: {
1076
- ...typography.body,
1077
- color: colors.textSecondary,
1078
- fontSize: 14,
1079
- lineHeight: 19,
1080
- },
1081
- ambientBadge: {
1082
- flexDirection: 'row',
1083
- alignItems: 'center',
1084
- gap: 6,
1085
- minHeight: 30,
1086
- paddingHorizontal: spacing.sm,
1087
- borderRadius: radius.full,
1088
- backgroundColor: 'rgba(255,255,255,0.06)',
1089
- borderWidth: StyleSheet.hairlineWidth,
1090
- borderColor: colors.borderLight,
1091
- },
1092
- ambientBadgeText: {
1093
- ...typography.caption,
1094
- color: colors.textSecondary,
1095
- fontWeight: '600',
1096
- },
1097
- stepperDock: {
1098
- borderRadius: 16,
1099
- borderWidth: StyleSheet.hairlineWidth,
1100
- borderColor: colors.borderHighlight,
1101
- backgroundColor: 'rgba(12, 14, 18, 0.76)',
1102
- paddingHorizontal: spacing.sm,
1103
- paddingVertical: spacing.xs,
1104
- overflow: 'hidden',
1105
- },
1106
- stepperDockRow: {
1107
- flexDirection: 'row',
1108
- gap: spacing.xs,
1109
- },
1110
- stepperPill: {
1111
- flex: 1,
1112
- minHeight: 36,
1113
- borderRadius: radius.full,
1114
- flexDirection: 'row',
1115
- alignItems: 'center',
1116
- justifyContent: 'center',
1117
- paddingHorizontal: spacing.sm,
1118
- paddingVertical: 6,
1119
- gap: 6,
1120
- backgroundColor: 'rgba(255,255,255,0.03)',
1121
- borderWidth: StyleSheet.hairlineWidth,
1122
- borderColor: colors.borderLight,
1123
- },
1124
- stepperPillActive: {
1125
- backgroundColor: 'rgba(181, 189, 204, 0.10)',
1126
- borderColor: colors.borderHighlight,
1127
- },
1128
- stepperPillComplete: {
1129
- backgroundColor: 'rgba(198, 205, 217, 0.08)',
1130
- borderColor: 'rgba(198, 205, 217, 0.22)',
1131
- },
1132
- stepperPillIndex: {
1133
- width: 18,
1134
- height: 18,
1135
- borderRadius: 9,
1136
- alignItems: 'center',
1137
- justifyContent: 'center',
1138
- backgroundColor: colors.bgInput,
1139
- borderWidth: StyleSheet.hairlineWidth,
1140
- borderColor: colors.border,
1141
- },
1142
- stepperPillIndexActive: {
1143
- backgroundColor: colors.accent,
1144
- borderColor: colors.accent,
1145
- },
1146
- stepperPillIndexComplete: {
1147
- backgroundColor: colors.statusComplete,
1148
- borderColor: colors.statusComplete,
1149
- },
1150
- stepperPillIndexText: {
1151
- ...typography.caption,
1152
- color: colors.textPrimary,
1153
- fontWeight: '700',
1154
- fontSize: 10,
1155
- lineHeight: 12,
1156
- },
1157
- stepperPillIndexTextActive: {
1158
- color: colors.black,
1159
- },
1160
- stepperPillTitle: {
1161
- ...typography.caption,
1162
- color: colors.textSecondary,
1163
- fontWeight: '600',
1164
- fontSize: 10,
1165
- lineHeight: 12,
1166
- },
1167
- stepperPillTitleActive: {
1168
- color: colors.textPrimary,
1169
- },
1170
- stepperPillTitleComplete: {
1171
- color: colors.textPrimary,
1172
- },
1173
- introSectionHeader: {
1174
- gap: spacing.xs,
1175
- paddingHorizontal: spacing.xs,
1176
- },
1177
- introSectionTitle: {
1178
- ...typography.caption,
1179
- color: colors.textMuted,
1180
- textTransform: 'uppercase',
1181
- letterSpacing: 0.9,
1182
- },
1183
- introSectionSubtitle: {
1184
- ...typography.body,
1185
- color: colors.textSecondary,
1186
- },
1187
- introFeatureGrid: {
1188
- gap: spacing.sm,
1189
- },
1190
- introFeatureCard: {
1191
- flexDirection: 'row',
1192
- gap: spacing.md,
1193
- borderRadius: 18,
1194
- borderWidth: StyleSheet.hairlineWidth,
1195
- borderColor: colors.borderLight,
1196
- backgroundColor: 'rgba(7, 9, 12, 0.72)',
1197
- paddingHorizontal: spacing.md,
1198
- paddingVertical: spacing.md,
1199
- },
1200
- introFeatureIconWrap: {
1201
- width: 36,
1202
- height: 36,
1203
- borderRadius: 14,
1204
- alignItems: 'center',
1205
- justifyContent: 'center',
1206
- backgroundColor: 'rgba(255,255,255,0.07)',
1207
- borderWidth: StyleSheet.hairlineWidth,
1208
- borderColor: colors.borderLight,
1209
- },
1210
- introFeatureTextWrap: {
1211
- flex: 1,
1212
- gap: 2,
1213
- },
1214
- introFeatureTitle: {
1215
- ...typography.headline,
1216
- fontSize: 14,
1217
- },
1218
- introFeatureDescription: {
1219
- ...typography.caption,
1220
- color: colors.textSecondary,
1221
- lineHeight: 18,
1222
- },
1223
- introContextCard: {
1224
- borderRadius: 20,
1225
- borderWidth: StyleSheet.hairlineWidth,
1226
- borderColor: colors.borderHighlight,
1227
- backgroundColor: 'rgba(12, 14, 18, 0.76)',
1228
- padding: spacing.lg,
1229
- gap: spacing.sm,
1230
- overflow: 'hidden',
1231
- },
1232
- introContextTitle: {
1233
- ...typography.headline,
1234
- },
1235
- introContextText: {
1236
- ...typography.body,
1237
- color: colors.textSecondary,
1238
- },
1239
- introContextPillRow: {
1240
- flexDirection: 'row',
1241
- flexWrap: 'wrap',
1242
- gap: spacing.sm,
1243
- marginTop: spacing.xs,
1244
- },
1245
- introFooter: {
1246
- gap: spacing.sm,
1247
- },
1248
- introNextButton: {
1249
- borderRadius: 18,
1250
- backgroundColor: colors.accent,
1251
- minHeight: 58,
1252
- flexDirection: 'row',
1253
- alignItems: 'center',
1254
- justifyContent: 'center',
1255
- gap: spacing.sm,
1256
- },
1257
- introNextButtonPressed: {
1258
- backgroundColor: colors.accentPressed,
1259
- },
1260
- introNextButtonText: {
1261
- ...typography.headline,
1262
- color: colors.black,
1263
- fontSize: 17,
1264
- fontWeight: '700',
1265
- },
1266
- scroll: {
1267
- flex: 1,
1268
- },
1269
- scrollContent: {
1270
- paddingHorizontal: spacing.lg,
1271
- paddingTop: spacing.md,
1272
- paddingBottom: spacing.xxl,
1273
- gap: spacing.md,
1274
- },
1275
- connectRoot: {
1276
- flex: 1,
1277
- },
1278
- connectFooter: {
1279
- paddingHorizontal: spacing.lg,
1280
- paddingTop: spacing.sm,
1281
- paddingBottom: spacing.md,
1282
- },
1283
- connectHero: {
1284
- borderRadius: 22,
1285
- borderWidth: StyleSheet.hairlineWidth,
1286
- borderColor: colors.borderHighlight,
1287
- padding: spacing.lg,
1288
- gap: spacing.xs,
1289
- overflow: 'hidden',
1290
- },
1291
- heroTopRow: {
1292
- flexDirection: 'row',
1293
- justifyContent: 'space-between',
1294
- alignItems: 'center',
1295
- },
1296
- heroIconWrap: {
1297
- width: 32,
1298
- height: 32,
1299
- borderRadius: 16,
1300
- backgroundColor: 'rgba(255, 255, 255, 0.08)',
1301
- alignItems: 'center',
1302
- justifyContent: 'center',
1303
- },
1304
- cancelBtn: {
1305
- width: 30,
1306
- height: 30,
1307
- borderRadius: 15,
1308
- borderWidth: StyleSheet.hairlineWidth,
1309
- borderColor: colors.borderLight,
1310
- backgroundColor: colors.bgMain,
1311
- alignItems: 'center',
1312
- justifyContent: 'center',
1313
- },
1314
- cancelBtnPressed: {
1315
- opacity: 0.75,
1316
- },
1317
- connectEyebrow: {
1318
- ...typography.caption,
1319
- color: colors.textSecondary,
1320
- textTransform: 'uppercase',
1321
- letterSpacing: 0.8,
1322
- },
1323
- heroTitle: {
1324
- ...typography.largeTitle,
1325
- fontSize: 24,
1326
- lineHeight: 28,
1327
- letterSpacing: -0.45,
1328
- },
1329
- heroDescription: {
1330
- ...typography.body,
1331
- color: colors.textSecondary,
1332
- fontSize: 14,
1333
- lineHeight: 19,
1334
- },
1335
- formCard: {
1336
- borderRadius: 20,
1337
- borderWidth: StyleSheet.hairlineWidth,
1338
- borderColor: colors.borderHighlight,
1339
- backgroundColor: 'rgba(12, 14, 18, 0.76)',
1340
- padding: spacing.lg,
1341
- gap: spacing.md,
1342
- overflow: 'hidden',
1343
- },
1344
- formSectionHeader: {
1345
- gap: spacing.xs,
1346
- },
1347
- formSectionEyebrow: {
1348
- ...typography.caption,
1349
- color: colors.textMuted,
1350
- textTransform: 'uppercase',
1351
- letterSpacing: 0.85,
1352
- },
1353
- formSectionTitle: {
1354
- ...typography.headline,
1355
- fontSize: 15,
1356
- lineHeight: 21,
1357
- },
1358
- modeCardGrid: {
1359
- flexDirection: 'row',
1360
- gap: spacing.sm,
1361
- },
1362
- modePresetCard: {
1363
- flex: 1,
1364
- minHeight: 146,
1365
- borderRadius: 18,
1366
- borderWidth: StyleSheet.hairlineWidth,
1367
- borderColor: colors.borderLight,
1368
- backgroundColor: 'rgba(255,255,255,0.03)',
1369
- padding: spacing.md,
1370
- gap: spacing.sm,
1371
- justifyContent: 'space-between',
1372
- },
1373
- modePresetCardSelected: {
1374
- backgroundColor: 'rgba(181, 189, 204, 0.10)',
1375
- borderColor: colors.borderHighlight,
1376
- },
1377
- modePresetCardPressed: {
1378
- opacity: 0.84,
1379
- },
1380
- modePresetIconWrap: {
1381
- width: 38,
1382
- height: 38,
1383
- borderRadius: 14,
1384
- alignItems: 'center',
1385
- justifyContent: 'center',
1386
- backgroundColor: colors.bgInput,
1387
- borderWidth: StyleSheet.hairlineWidth,
1388
- borderColor: colors.borderLight,
1389
- },
1390
- modePresetIconWrapSelected: {
1391
- backgroundColor: 'rgba(181, 189, 204, 0.16)',
1392
- borderColor: colors.borderHighlight,
1393
- },
1394
- modePresetTitle: {
1395
- ...typography.headline,
1396
- fontSize: 15,
1397
- },
1398
- modePresetDescription: {
1399
- ...typography.caption,
1400
- color: colors.textSecondary,
1401
- lineHeight: 18,
1402
- },
1403
- helperText: {
1404
- ...typography.caption,
1405
- color: colors.textMuted,
1406
- lineHeight: 18,
1407
- },
1408
- commandPanel: {
1409
- gap: spacing.sm,
1410
- paddingTop: spacing.xs,
1411
- },
1412
- commandCard: {
1413
- gap: spacing.xs,
1414
- borderRadius: 16,
1415
- borderWidth: StyleSheet.hairlineWidth,
1416
- borderColor: colors.borderLight,
1417
- backgroundColor: 'rgba(255,255,255,0.03)',
1418
- padding: spacing.md,
1419
- },
1420
- commandCardHeader: {
1421
- flexDirection: 'row',
1422
- alignItems: 'center',
1423
- justifyContent: 'space-between',
1424
- gap: spacing.sm,
1425
- },
1426
- commandCardHeaderLeft: {
1427
- flexDirection: 'row',
1428
- alignItems: 'center',
1429
- gap: 6,
1430
- flex: 1,
1431
- minWidth: 0,
1432
- },
1433
- commandCardLabel: {
1434
- ...typography.caption,
1435
- color: colors.textSecondary,
1436
- fontWeight: '600',
1437
- letterSpacing: 0.2,
1438
- },
1439
- commandCopyButton: {
1440
- minHeight: 30,
1441
- paddingHorizontal: spacing.sm,
1442
- borderRadius: radius.full,
1443
- borderWidth: StyleSheet.hairlineWidth,
1444
- borderColor: colors.border,
1445
- backgroundColor: colors.bgInput,
1446
- flexDirection: 'row',
1447
- alignItems: 'center',
1448
- justifyContent: 'center',
1449
- gap: 4,
1450
- flexShrink: 0,
1451
- },
1452
- commandCopyButtonCopied: {
1453
- backgroundColor: colors.accent,
1454
- borderColor: colors.accent,
1455
- },
1456
- commandCopyButtonPressed: {
1457
- opacity: 0.84,
1458
- },
1459
- commandCopyButtonText: {
1460
- ...typography.caption,
1461
- color: colors.textPrimary,
1462
- fontWeight: '600',
1463
- },
1464
- commandCopyButtonTextCopied: {
1465
- color: colors.black,
1466
- },
1467
- commandCodeWrap: {
1468
- borderRadius: 12,
1469
- borderWidth: StyleSheet.hairlineWidth,
1470
- borderColor: colors.border,
1471
- backgroundColor: colors.bgInput,
1472
- paddingHorizontal: spacing.sm,
1473
- paddingVertical: spacing.sm,
1474
- },
1475
- commandCodeText: {
1476
- ...typography.mono,
1477
- color: colors.textPrimary,
1478
- fontSize: 12,
1479
- lineHeight: 18,
1480
- },
1481
- commandCardHint: {
1482
- ...typography.caption,
1483
- color: colors.textMuted,
1484
- lineHeight: 16,
1485
- },
1486
- fieldGroup: {
1487
- gap: spacing.sm,
1488
- },
1489
- label: {
1490
- ...typography.caption,
1491
- textTransform: 'uppercase',
1492
- letterSpacing: 0.85,
1493
- color: colors.textMuted,
1494
- },
1495
- tokenHeaderRow: {
1496
- flexDirection: 'row',
1497
- justifyContent: 'space-between',
1498
- alignItems: 'center',
1499
- gap: spacing.sm,
1500
- },
1501
- optionalLabel: {
1502
- ...typography.caption,
1503
- color: colors.textMuted,
1504
- fontSize: 11,
1505
- },
1506
- inputRow: {
1507
- flex: 1,
1508
- minWidth: 0,
1509
- flexDirection: 'row',
1510
- alignItems: 'center',
1511
- borderWidth: 1,
1512
- borderColor: colors.border,
1513
- borderRadius: 16,
1514
- backgroundColor: 'rgba(255,255,255,0.03)',
1515
- minHeight: 54,
1516
- paddingHorizontal: spacing.md,
1517
- gap: spacing.sm,
1518
- },
1519
- inputIconWrap: {
1520
- width: 24,
1521
- alignItems: 'center',
1522
- justifyContent: 'center',
1523
- },
1524
- inputText: {
1525
- flex: 1,
1526
- minWidth: 0,
1527
- ...typography.body,
1528
- color: colors.textPrimary,
1529
- paddingVertical: spacing.md,
1530
- },
1531
- tokenInputWrap: {
1532
- flexDirection: 'row',
1533
- alignItems: 'center',
1534
- gap: spacing.xs,
1535
- minWidth: 0,
1536
- },
1537
- tokenRevealBtn: {
1538
- minWidth: 74,
1539
- minHeight: 54,
1540
- flexShrink: 0,
1541
- borderRadius: 16,
1542
- borderWidth: 1,
1543
- borderColor: colors.border,
1544
- backgroundColor: colors.bgInput,
1545
- paddingHorizontal: spacing.sm,
1546
- flexDirection: 'row',
1547
- alignItems: 'center',
1548
- justifyContent: 'center',
1549
- gap: 4,
1550
- },
1551
- tokenRevealBtnPressed: {
1552
- opacity: 0.8,
1553
- },
1554
- tokenRevealBtnText: {
1555
- ...typography.caption,
1556
- color: colors.textSecondary,
1557
- fontWeight: '600',
1558
- },
1559
- scanButton: {
1560
- borderRadius: 16,
1561
- borderWidth: 1,
1562
- borderColor: colors.border,
1563
- backgroundColor: colors.bgInput,
1564
- minHeight: 50,
1565
- paddingHorizontal: spacing.md,
1566
- flexDirection: 'row',
1567
- alignItems: 'center',
1568
- justifyContent: 'center',
1569
- gap: spacing.xs,
1570
- },
1571
- scanButtonPressed: {
1572
- opacity: 0.82,
1573
- },
1574
- scanButtonText: {
1575
- ...typography.headline,
1576
- color: colors.textPrimary,
1577
- fontWeight: '700',
1578
- },
1579
- previewWrap: {
1580
- borderRadius: 16,
1581
- borderWidth: StyleSheet.hairlineWidth,
1582
- borderColor: colors.borderLight,
1583
- backgroundColor: 'rgba(255,255,255,0.03)',
1584
- paddingHorizontal: spacing.md,
1585
- paddingVertical: spacing.sm,
1586
- gap: spacing.xs,
1587
- },
1588
- previewLabel: {
1589
- ...typography.caption,
1590
- color: colors.textMuted,
1591
- },
1592
- previewValue: {
1593
- ...typography.mono,
1594
- color: colors.textPrimary,
1595
- fontSize: 13,
1596
- },
1597
- statusBanner: {
1598
- flexDirection: 'row',
1599
- alignItems: 'flex-start',
1600
- gap: spacing.sm,
1601
- borderRadius: 16,
1602
- borderWidth: StyleSheet.hairlineWidth,
1603
- paddingHorizontal: spacing.md,
1604
- paddingVertical: spacing.sm,
1605
- },
1606
- statusBannerWarning: {
1607
- backgroundColor: 'rgba(247, 210, 126, 0.08)',
1608
- borderColor: 'rgba(247, 210, 126, 0.22)',
1609
- },
1610
- statusBannerSuccess: {
1611
- backgroundColor: 'rgba(198, 205, 217, 0.10)',
1612
- borderColor: 'rgba(198, 205, 217, 0.22)',
1613
- },
1614
- statusBannerError: {
1615
- backgroundColor: colors.errorBg,
1616
- borderColor: 'rgba(239, 68, 68, 0.28)',
1617
- },
1618
- statusBannerText: {
1619
- flex: 1,
1620
- ...typography.caption,
1621
- lineHeight: 18,
1622
- },
1623
- warningText: {
1624
- ...typography.caption,
1625
- color: '#F7D27E',
1626
- },
1627
- errorText: {
1628
- ...typography.caption,
1629
- color: colors.error,
1630
- },
1631
- successText: {
1632
- ...typography.caption,
1633
- color: colors.statusComplete,
1634
- },
1635
- actionRow: {
1636
- flexDirection: 'row',
1637
- gap: spacing.sm,
1638
- },
1639
- secondaryButton: {
1640
- flex: 1,
1641
- flexDirection: 'row',
1642
- gap: spacing.xs,
1643
- alignItems: 'center',
1644
- justifyContent: 'center',
1645
- borderWidth: 1,
1646
- borderColor: colors.border,
1647
- backgroundColor: colors.bgInput,
1648
- borderRadius: 16,
1649
- minHeight: 54,
1650
- },
1651
- secondaryButtonPressed: {
1652
- opacity: 0.8,
1653
- },
1654
- secondaryButtonDisabled: {
1655
- opacity: 0.65,
1656
- },
1657
- secondaryButtonText: {
1658
- ...typography.caption,
1659
- color: colors.textPrimary,
1660
- fontWeight: '600',
1661
- },
1662
- primaryButton: {
1663
- flex: 1,
1664
- flexDirection: 'row',
1665
- gap: spacing.xs,
1666
- alignItems: 'center',
1667
- justifyContent: 'center',
1668
- backgroundColor: colors.accent,
1669
- borderRadius: 16,
1670
- minHeight: 54,
1671
- },
1672
- primaryButtonPressed: {
1673
- backgroundColor: colors.accentPressed,
1674
- },
1675
- primaryButtonDisabled: {
1676
- opacity: 0.72,
1677
- },
1678
- primaryButtonText: {
1679
- ...typography.headline,
1680
- color: colors.black,
1681
- fontWeight: '700',
1682
- },
1683
- scannerModalRoot: {
1684
- flex: 1,
1685
- backgroundColor: 'rgba(0,0,0,0.94)',
1686
- justifyContent: 'center',
1687
- paddingHorizontal: spacing.lg,
1688
- },
1689
- scannerSheet: {
1690
- borderRadius: 22,
1691
- borderWidth: StyleSheet.hairlineWidth,
1692
- borderColor: colors.borderHighlight,
1693
- backgroundColor: '#07090C',
1694
- padding: spacing.lg,
1695
- gap: spacing.md,
1696
- },
1697
- scannerHeader: {
1698
- flexDirection: 'row',
1699
- alignItems: 'center',
1700
- justifyContent: 'space-between',
1701
- },
1702
- scannerTitle: {
1703
- ...typography.headline,
1704
- color: colors.textPrimary,
1705
- },
1706
- scannerCloseBtn: {
1707
- width: 30,
1708
- height: 30,
1709
- borderRadius: 15,
1710
- borderWidth: StyleSheet.hairlineWidth,
1711
- borderColor: colors.borderLight,
1712
- backgroundColor: colors.bgMain,
1713
- alignItems: 'center',
1714
- justifyContent: 'center',
1715
- },
1716
- scannerCloseBtnPressed: {
1717
- opacity: 0.75,
1718
- },
1719
- scannerCameraFrame: {
1720
- width: '100%',
1721
- aspectRatio: 1,
1722
- borderRadius: 18,
1723
- overflow: 'hidden',
1724
- borderWidth: StyleSheet.hairlineWidth,
1725
- borderColor: colors.borderLight,
1726
- backgroundColor: colors.bgItem,
1727
- },
1728
- scannerCamera: {
1729
- flex: 1,
1730
- },
1731
- scannerPermissionWrap: {
1732
- flex: 1,
1733
- alignItems: 'center',
1734
- justifyContent: 'center',
1735
- paddingHorizontal: spacing.lg,
1736
- },
1737
- scannerPermissionText: {
1738
- ...typography.caption,
1739
- color: colors.textSecondary,
1740
- textAlign: 'center',
1741
- },
1742
- scannerHintText: {
1743
- ...typography.caption,
1744
- color: colors.textMuted,
1745
- },
1746
- });