@jrkropp/codex-js 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +57 -617
  3. package/dist/client/index.d.ts +2 -16
  4. package/dist/client/index.js +2522 -16
  5. package/dist/index.d.ts +2 -25
  6. package/dist/index.js +699 -20
  7. package/dist/internal/codex/app-server/src/bespoke_event_handling.d.ts +5 -0
  8. package/dist/internal/codex/app-server/src/connection_rpc_gate.d.ts +11 -0
  9. package/dist/internal/codex/app-server/src/dynamic_tools.d.ts +5 -0
  10. package/dist/internal/codex/app-server/src/message_processor.d.ts +88 -0
  11. package/dist/internal/codex/app-server/src/outgoing_message.d.ts +73 -0
  12. package/dist/internal/codex/app-server/src/request_processors/common.d.ts +25 -0
  13. package/dist/internal/codex/app-server/src/request_processors/mcp_processor.d.ts +32 -0
  14. package/dist/internal/codex/app-server/src/request_processors/request_errors.d.ts +9 -0
  15. package/dist/internal/codex/app-server/src/request_processors/thread_processor.d.ts +38 -0
  16. package/dist/internal/codex/app-server/src/request_processors/token_usage_replay.d.ts +22 -0
  17. package/dist/internal/codex/app-server/src/request_processors/turn_processor.d.ts +21 -0
  18. package/dist/internal/codex/app-server/src/request_processors.d.ts +5 -0
  19. package/dist/internal/codex/app-server/src/request_serialization.d.ts +7 -0
  20. package/dist/internal/codex/app-server/src/runtime.d.ts +96 -0
  21. package/dist/internal/codex/app-server/src/server_request_response.d.ts +30 -0
  22. package/dist/internal/codex/app-server/src/session_factory.d.ts +30 -0
  23. package/dist/internal/codex/app-server/src/session_task_runner.d.ts +44 -0
  24. package/dist/internal/codex/app-server/src/thread_state.d.ts +56 -0
  25. package/dist/internal/codex/app-server-client/src/lib.d.ts +48 -0
  26. package/dist/{index-77U_Oc-a.d.ts → internal/codex/app-server-client/src/pending_requests.d.ts} +7 -18
  27. package/dist/internal/codex/app-server-client/src/remote.d.ts +18 -0
  28. package/dist/{session-BRYzi8OT.d.ts → internal/codex/app-server-client/src/session.d.ts} +5 -9
  29. package/dist/{thread_event_store-C0zYzukG.d.ts → internal/codex/app-server-client/src/thread_event_store.d.ts} +14 -14
  30. package/dist/internal/codex/app-server-client/src/thread_projection.d.ts +9 -0
  31. package/dist/internal/codex/app-server-protocol/schema/typescript/AbsolutePathBuf.d.ts +10 -0
  32. package/dist/internal/codex/app-server-protocol/schema/typescript/AgentPath.d.ts +1 -0
  33. package/dist/internal/codex/app-server-protocol/schema/typescript/ApplyPatchApprovalParams.d.ts +22 -0
  34. package/dist/internal/codex/app-server-protocol/schema/typescript/ApplyPatchApprovalResponse.d.ts +4 -0
  35. package/dist/internal/codex/app-server-protocol/schema/typescript/AuthMode.d.ts +4 -0
  36. package/dist/internal/codex/app-server-protocol/schema/typescript/ClientInfo.d.ts +5 -0
  37. package/dist/internal/codex/app-server-protocol/schema/typescript/ClientNotification.d.ts +3 -0
  38. package/dist/internal/codex/app-server-protocol/schema/typescript/ClientRequest.d.ts +410 -0
  39. package/dist/internal/codex/app-server-protocol/schema/typescript/CollaborationMode.d.ts +9 -0
  40. package/dist/internal/codex/app-server-protocol/schema/typescript/ContentItem.d.ts +12 -0
  41. package/dist/internal/codex/app-server-protocol/schema/typescript/ConversationGitInfo.d.ts +5 -0
  42. package/dist/internal/codex/app-server-protocol/schema/typescript/ConversationSummary.d.ts +15 -0
  43. package/dist/internal/codex/app-server-protocol/schema/typescript/ExecCommandApprovalParams.d.ts +18 -0
  44. package/dist/internal/codex/app-server-protocol/schema/typescript/ExecCommandApprovalResponse.d.ts +4 -0
  45. package/dist/internal/codex/app-server-protocol/schema/typescript/ExecPolicyAmendment.d.ts +8 -0
  46. package/dist/internal/codex/app-server-protocol/schema/typescript/FileChange.d.ts +11 -0
  47. package/dist/internal/codex/app-server-protocol/schema/typescript/ForcedLoginMethod.d.ts +1 -0
  48. package/dist/internal/codex/app-server-protocol/schema/typescript/FunctionCallOutputBody.d.ts +2 -0
  49. package/dist/internal/codex/app-server-protocol/schema/typescript/FunctionCallOutputContentItem.d.ts +13 -0
  50. package/dist/internal/codex/app-server-protocol/schema/typescript/FuzzyFileSearchMatchType.d.ts +1 -0
  51. package/dist/internal/codex/app-server-protocol/schema/typescript/FuzzyFileSearchParams.d.ts +5 -0
  52. package/dist/internal/codex/app-server-protocol/schema/typescript/FuzzyFileSearchResponse.d.ts +4 -0
  53. package/dist/internal/codex/app-server-protocol/schema/typescript/FuzzyFileSearchResult.d.ts +12 -0
  54. package/dist/internal/codex/app-server-protocol/schema/typescript/FuzzyFileSearchSessionCompletedNotification.d.ts +3 -0
  55. package/dist/internal/codex/app-server-protocol/schema/typescript/FuzzyFileSearchSessionUpdatedNotification.d.ts +6 -0
  56. package/dist/internal/codex/app-server-protocol/schema/typescript/GetAuthStatusParams.d.ts +4 -0
  57. package/dist/internal/codex/app-server-protocol/schema/typescript/GetAuthStatusResponse.d.ts +6 -0
  58. package/dist/internal/codex/app-server-protocol/schema/typescript/GetConversationSummaryParams.d.ts +6 -0
  59. package/dist/internal/codex/app-server-protocol/schema/typescript/GetConversationSummaryResponse.d.ts +4 -0
  60. package/dist/internal/codex/app-server-protocol/schema/typescript/GitDiffToRemoteParams.d.ts +3 -0
  61. package/dist/internal/codex/app-server-protocol/schema/typescript/GitDiffToRemoteResponse.d.ts +5 -0
  62. package/dist/internal/codex/app-server-protocol/schema/typescript/GitSha.d.ts +1 -0
  63. package/dist/internal/codex/app-server-protocol/schema/typescript/ImageDetail.d.ts +1 -0
  64. package/dist/internal/codex/app-server-protocol/schema/typescript/InitializeCapabilities.d.ts +14 -0
  65. package/dist/internal/codex/app-server-protocol/schema/typescript/InitializeParams.d.ts +6 -0
  66. package/dist/internal/codex/app-server-protocol/schema/typescript/InitializeResponse.d.ts +18 -0
  67. package/dist/internal/codex/app-server-protocol/schema/typescript/InputModality.d.ts +4 -0
  68. package/dist/internal/codex/app-server-protocol/schema/typescript/InternalSessionSource.d.ts +1 -0
  69. package/dist/internal/codex/app-server-protocol/schema/typescript/LocalShellAction.d.ts +4 -0
  70. package/dist/internal/codex/app-server-protocol/schema/typescript/LocalShellExecAction.d.ts +9 -0
  71. package/dist/internal/codex/app-server-protocol/schema/typescript/LocalShellStatus.d.ts +1 -0
  72. package/dist/internal/codex/app-server-protocol/schema/typescript/MessagePhase.d.ts +7 -0
  73. package/dist/internal/codex/app-server-protocol/schema/typescript/ModeKind.d.ts +4 -0
  74. package/dist/internal/codex/app-server-protocol/schema/typescript/NetworkPolicyAmendment.d.ts +5 -0
  75. package/dist/internal/codex/app-server-protocol/schema/typescript/NetworkPolicyRuleAction.d.ts +1 -0
  76. package/dist/internal/codex/app-server-protocol/schema/typescript/ParsedCommand.d.ts +24 -0
  77. package/dist/internal/codex/app-server-protocol/schema/typescript/Personality.d.ts +1 -0
  78. package/dist/internal/codex/app-server-protocol/schema/typescript/PlanType.d.ts +1 -0
  79. package/dist/internal/codex/app-server-protocol/schema/typescript/RealtimeConversationVersion.d.ts +1 -0
  80. package/dist/internal/codex/app-server-protocol/schema/typescript/RealtimeOutputModality.d.ts +1 -0
  81. package/dist/internal/codex/app-server-protocol/schema/typescript/RealtimeVoice.d.ts +1 -0
  82. package/dist/internal/codex/app-server-protocol/schema/typescript/RealtimeVoicesList.d.ts +7 -0
  83. package/dist/internal/codex/app-server-protocol/schema/typescript/ReasoningEffort.d.ts +4 -0
  84. package/dist/internal/codex/app-server-protocol/schema/typescript/ReasoningItemContent.d.ts +7 -0
  85. package/dist/internal/codex/app-server-protocol/schema/typescript/ReasoningItemReasoningSummary.d.ts +4 -0
  86. package/dist/internal/codex/app-server-protocol/schema/typescript/ReasoningSummary.d.ts +6 -0
  87. package/dist/internal/codex/app-server-protocol/schema/typescript/RequestId.d.ts +1 -0
  88. package/dist/internal/codex/app-server-protocol/schema/typescript/Resource.d.ts +15 -0
  89. package/dist/internal/codex/app-server-protocol/schema/typescript/ResourceContent.d.ts +21 -0
  90. package/dist/internal/codex/app-server-protocol/schema/typescript/ResourceTemplate.d.ts +12 -0
  91. package/dist/internal/codex/app-server-protocol/schema/typescript/ResponseItem.d.ts +78 -0
  92. package/dist/internal/codex/app-server-protocol/schema/typescript/ReviewDecision.d.ts +14 -0
  93. package/dist/internal/codex/app-server-protocol/schema/typescript/ServerNotification.d.ts +260 -0
  94. package/dist/internal/codex/app-server-protocol/schema/typescript/ServerRequest.d.ts +50 -0
  95. package/dist/internal/codex/app-server-protocol/schema/typescript/SessionSource.d.ts +9 -0
  96. package/dist/internal/codex/app-server-protocol/schema/typescript/Settings.d.ts +9 -0
  97. package/dist/internal/codex/app-server-protocol/schema/typescript/SubAgentSource.d.ts +13 -0
  98. package/dist/internal/codex/app-server-protocol/schema/typescript/ThreadId.d.ts +1 -0
  99. package/dist/internal/codex/app-server-protocol/schema/typescript/ThreadMemoryMode.d.ts +1 -0
  100. package/dist/internal/codex/app-server-protocol/schema/typescript/Tool.d.ts +14 -0
  101. package/dist/internal/codex/app-server-protocol/schema/typescript/Verbosity.d.ts +5 -0
  102. package/dist/internal/codex/app-server-protocol/schema/typescript/WebSearchAction.d.ts +14 -0
  103. package/dist/internal/codex/app-server-protocol/schema/typescript/WebSearchContextSize.d.ts +1 -0
  104. package/dist/internal/codex/app-server-protocol/schema/typescript/WebSearchLocation.d.ts +6 -0
  105. package/dist/internal/codex/app-server-protocol/schema/typescript/WebSearchMode.d.ts +1 -0
  106. package/dist/internal/codex/app-server-protocol/schema/typescript/WebSearchToolConfig.d.ts +7 -0
  107. package/dist/internal/codex/app-server-protocol/schema/typescript/index.d.ts +77 -0
  108. package/dist/internal/codex/app-server-protocol/schema/typescript/serde_json/JsonValue.d.ts +3 -0
  109. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/Account.d.ts +10 -0
  110. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AccountLoginCompletedNotification.d.ts +5 -0
  111. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AccountRateLimitsUpdatedNotification.d.ts +4 -0
  112. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AccountUpdatedNotification.d.ts +6 -0
  113. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ActivePermissionProfile.d.ts +18 -0
  114. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ActivePermissionProfileModification.d.ts +5 -0
  115. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AddCreditsNudgeCreditType.d.ts +1 -0
  116. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AddCreditsNudgeEmailStatus.d.ts +1 -0
  117. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AdditionalFileSystemPermissions.d.ts +14 -0
  118. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AdditionalNetworkPermissions.d.ts +3 -0
  119. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AdditionalPermissionProfile.d.ts +9 -0
  120. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AgentMessageDeltaNotification.d.ts +6 -0
  121. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AnalyticsConfig.d.ts +8 -0
  122. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppBranding.d.ts +11 -0
  123. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppInfo.d.ts +30 -0
  124. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppListUpdatedNotification.d.ts +7 -0
  125. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppMetadata.d.ts +16 -0
  126. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppReview.d.ts +3 -0
  127. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppScreenshot.d.ts +5 -0
  128. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppSummary.d.ts +10 -0
  129. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppToolApproval.d.ts +1 -0
  130. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppToolsConfig.d.ts +7 -0
  131. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ApprovalsReviewer.d.ts +8 -0
  132. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppsConfig.d.ts +15 -0
  133. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppsDefaultConfig.d.ts +5 -0
  134. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppsListParams.d.ts +21 -0
  135. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AppsListResponse.d.ts +12 -0
  136. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AskForApproval.d.ts +9 -0
  137. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/AutoReviewDecisionSource.d.ts +4 -0
  138. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ByteRange.d.ts +4 -0
  139. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CancelLoginAccountParams.d.ts +3 -0
  140. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CancelLoginAccountResponse.d.ts +4 -0
  141. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CancelLoginAccountStatus.d.ts +1 -0
  142. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ChatgptAuthTokensRefreshParams.d.ts +14 -0
  143. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ChatgptAuthTokensRefreshReason.d.ts +1 -0
  144. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ChatgptAuthTokensRefreshResponse.d.ts +5 -0
  145. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CodexErrorInfo.d.ts +28 -0
  146. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollabAgentState.d.ts +5 -0
  147. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollabAgentStatus.d.ts +1 -0
  148. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollabAgentTool.d.ts +1 -0
  149. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollabAgentToolCallStatus.d.ts +1 -0
  150. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollaborationModeListParams.d.ts +4 -0
  151. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollaborationModeListResponse.d.ts +7 -0
  152. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CollaborationModeMask.d.ts +11 -0
  153. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandAction.d.ts +19 -0
  154. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecOutputDeltaNotification.d.ts +27 -0
  155. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecOutputStream.d.ts +4 -0
  156. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecParams.d.ts +82 -0
  157. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecResizeParams.d.ts +15 -0
  158. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecResizeResponse.d.ts +4 -0
  159. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecResponse.d.ts +21 -0
  160. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecTerminalSize.d.ts +13 -0
  161. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecTerminateParams.d.ts +10 -0
  162. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecTerminateResponse.d.ts +4 -0
  163. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecWriteParams.d.ts +19 -0
  164. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecWriteResponse.d.ts +4 -0
  165. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecutionApprovalDecision.d.ts +11 -0
  166. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecutionOutputDeltaNotification.d.ts +6 -0
  167. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.d.ts +40 -0
  168. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalResponse.d.ts +4 -0
  169. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecutionSource.d.ts +1 -0
  170. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandExecutionStatus.d.ts +1 -0
  171. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CommandMigration.d.ts +3 -0
  172. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/Config.d.ts +47 -0
  173. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigBatchWriteParams.d.ts +13 -0
  174. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigEdit.d.ts +7 -0
  175. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigLayer.d.ts +8 -0
  176. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigLayerMetadata.d.ts +5 -0
  177. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigLayerSource.d.ts +30 -0
  178. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigReadParams.d.ts +9 -0
  179. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigReadResponse.d.ts +10 -0
  180. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigRequirements.d.ts +13 -0
  181. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigRequirementsReadResponse.d.ts +7 -0
  182. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigValueWriteParams.d.ts +12 -0
  183. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigWarningNotification.d.ts +19 -0
  184. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfigWriteResponse.d.ts +12 -0
  185. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfiguredHookHandler.d.ts +11 -0
  186. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ConfiguredHookMatcherGroup.d.ts +5 -0
  187. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ContextCompactedNotification.d.ts +7 -0
  188. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/CreditsSnapshot.d.ts +5 -0
  189. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeprecationNoticeNotification.d.ts +10 -0
  190. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyAlgorithm.d.ts +4 -0
  191. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyCreateParams.d.ts +12 -0
  192. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyCreateResponse.d.ts +14 -0
  193. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyProtectionClass.d.ts +4 -0
  194. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyProtectionPolicy.d.ts +4 -0
  195. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyPublicParams.d.ts +6 -0
  196. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeyPublicResponse.d.ts +14 -0
  197. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeySignParams.d.ts +8 -0
  198. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeySignPayload.d.ts +62 -0
  199. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DeviceKeySignResponse.d.ts +16 -0
  200. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DynamicToolCallOutputContentItem.d.ts +7 -0
  201. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DynamicToolCallParams.d.ts +9 -0
  202. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DynamicToolCallResponse.d.ts +5 -0
  203. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DynamicToolCallStatus.d.ts +1 -0
  204. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/DynamicToolSpec.d.ts +8 -0
  205. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ErrorNotification.d.ts +7 -0
  206. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExecPolicyAmendment.d.ts +1 -0
  207. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExperimentalFeature.d.ts +34 -0
  208. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExperimentalFeatureEnablementSetParams.d.ts +11 -0
  209. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExperimentalFeatureEnablementSetResponse.d.ts +8 -0
  210. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExperimentalFeatureListParams.d.ts +10 -0
  211. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExperimentalFeatureListResponse.d.ts +9 -0
  212. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExperimentalFeatureStage.d.ts +1 -0
  213. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigDetectParams.d.ts +10 -0
  214. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigDetectResponse.d.ts +4 -0
  215. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigImportCompletedNotification.d.ts +1 -0
  216. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigImportParams.d.ts +4 -0
  217. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigImportResponse.d.ts +1 -0
  218. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigMigrationItem.d.ts +11 -0
  219. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ExternalAgentConfigMigrationItemType.d.ts +1 -0
  220. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FeedbackUploadParams.d.ts +10 -0
  221. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FeedbackUploadResponse.d.ts +3 -0
  222. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileChangeApprovalDecision.d.ts +1 -0
  223. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileChangeOutputDeltaNotification.d.ts +11 -0
  224. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileChangePatchUpdatedNotification.d.ts +7 -0
  225. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileChangeRequestApprovalParams.d.ts +14 -0
  226. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileChangeRequestApprovalResponse.d.ts +4 -0
  227. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileSystemAccessMode.d.ts +1 -0
  228. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileSystemPath.d.ts +12 -0
  229. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileSystemSandboxEntry.d.ts +6 -0
  230. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileSystemSpecialPath.d.ts +16 -0
  231. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FileUpdateChange.d.ts +6 -0
  232. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsChangedNotification.d.ts +14 -0
  233. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsCopyParams.d.ts +18 -0
  234. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsCopyResponse.d.ts +4 -0
  235. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsCreateDirectoryParams.d.ts +14 -0
  236. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsCreateDirectoryResponse.d.ts +4 -0
  237. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsGetMetadataParams.d.ts +10 -0
  238. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsGetMetadataResponse.d.ts +25 -0
  239. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsReadDirectoryEntry.d.ts +17 -0
  240. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsReadDirectoryParams.d.ts +10 -0
  241. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsReadDirectoryResponse.d.ts +10 -0
  242. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsReadFileParams.d.ts +10 -0
  243. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsReadFileResponse.d.ts +9 -0
  244. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsRemoveParams.d.ts +18 -0
  245. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsRemoveResponse.d.ts +4 -0
  246. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsUnwatchParams.d.ts +9 -0
  247. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsUnwatchResponse.d.ts +4 -0
  248. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsWatchParams.d.ts +14 -0
  249. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsWatchResponse.d.ts +10 -0
  250. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsWriteFileParams.d.ts +14 -0
  251. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/FsWriteFileResponse.d.ts +4 -0
  252. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GetAccountParams.d.ts +10 -0
  253. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GetAccountRateLimitsResponse.d.ts +13 -0
  254. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GetAccountResponse.d.ts +5 -0
  255. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GitInfo.d.ts +5 -0
  256. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GrantedPermissionProfile.d.ts +6 -0
  257. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianApprovalReview.d.ts +14 -0
  258. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianApprovalReviewAction.d.ts +37 -0
  259. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianApprovalReviewStatus.d.ts +4 -0
  260. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianCommandSource.d.ts +1 -0
  261. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianRiskLevel.d.ts +4 -0
  262. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianUserAuthorization.d.ts +4 -0
  263. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/GuardianWarningNotification.d.ts +10 -0
  264. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookCompletedNotification.d.ts +6 -0
  265. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookErrorInfo.d.ts +4 -0
  266. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookEventName.d.ts +1 -0
  267. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookExecutionMode.d.ts +1 -0
  268. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookHandlerType.d.ts +1 -0
  269. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookMetadata.d.ts +22 -0
  270. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookMigration.d.ts +3 -0
  271. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookOutputEntry.d.ts +5 -0
  272. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookOutputEntryKind.d.ts +1 -0
  273. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookPromptFragment.d.ts +4 -0
  274. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookRunStatus.d.ts +1 -0
  275. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookRunSummary.d.ts +24 -0
  276. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookScope.d.ts +1 -0
  277. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookSource.d.ts +1 -0
  278. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookStartedNotification.d.ts +6 -0
  279. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HookTrustStatus.d.ts +1 -0
  280. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HooksListEntry.d.ts +8 -0
  281. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HooksListParams.d.ts +6 -0
  282. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/HooksListResponse.d.ts +4 -0
  283. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ItemCompletedNotification.d.ts +10 -0
  284. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ItemGuardianApprovalReviewCompletedNotification.d.ts +32 -0
  285. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ItemGuardianApprovalReviewStartedNotification.d.ts +30 -0
  286. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ItemStartedNotification.d.ts +10 -0
  287. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ListMcpServerStatusParams.d.ts +16 -0
  288. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ListMcpServerStatusResponse.d.ts +9 -0
  289. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/LoginAccountParams.d.ts +27 -0
  290. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/LoginAccountResponse.d.ts +23 -0
  291. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/LogoutAccountResponse.d.ts +1 -0
  292. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ManagedHooksRequirements.d.ts +13 -0
  293. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceAddParams.d.ts +5 -0
  294. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceAddResponse.d.ts +6 -0
  295. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceInterface.d.ts +3 -0
  296. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceLoadErrorInfo.d.ts +5 -0
  297. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceRemoveParams.d.ts +3 -0
  298. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceRemoveResponse.d.ts +5 -0
  299. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceUpgradeErrorInfo.d.ts +4 -0
  300. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceUpgradeParams.d.ts +3 -0
  301. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MarketplaceUpgradeResponse.d.ts +7 -0
  302. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpAuthStatus.d.ts +1 -0
  303. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationArrayType.d.ts +1 -0
  304. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationBooleanSchema.d.ts +7 -0
  305. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationBooleanType.d.ts +1 -0
  306. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationConstOption.d.ts +4 -0
  307. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationEnumSchema.d.ts +4 -0
  308. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationLegacyTitledEnumSchema.d.ts +9 -0
  309. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationMultiSelectEnumSchema.d.ts +3 -0
  310. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationNumberSchema.d.ts +9 -0
  311. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationNumberType.d.ts +1 -0
  312. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationObjectType.d.ts +1 -0
  313. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationPrimitiveSchema.d.ts +5 -0
  314. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationSchema.d.ts +16 -0
  315. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationSingleSelectEnumSchema.d.ts +3 -0
  316. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationStringFormat.d.ts +1 -0
  317. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationStringSchema.d.ts +11 -0
  318. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationStringType.d.ts +1 -0
  319. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationTitledEnumItems.d.ts +4 -0
  320. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationTitledMultiSelectEnumSchema.d.ts +11 -0
  321. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationTitledSingleSelectEnumSchema.d.ts +9 -0
  322. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationUntitledEnumItems.d.ts +5 -0
  323. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationUntitledMultiSelectEnumSchema.d.ts +11 -0
  324. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpElicitationUntitledSingleSelectEnumSchema.d.ts +8 -0
  325. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpResourceReadParams.d.ts +5 -0
  326. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpResourceReadResponse.d.ts +4 -0
  327. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerElicitationAction.d.ts +1 -0
  328. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerElicitationRequestParams.d.ts +26 -0
  329. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerElicitationRequestResponse.d.ts +15 -0
  330. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerMigration.d.ts +3 -0
  331. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerOauthLoginCompletedNotification.d.ts +5 -0
  332. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerOauthLoginParams.d.ts +5 -0
  333. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerOauthLoginResponse.d.ts +3 -0
  334. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerRefreshResponse.d.ts +1 -0
  335. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerStartupState.d.ts +1 -0
  336. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerStatus.d.ts +13 -0
  337. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerStatusDetail.d.ts +1 -0
  338. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerStatusUpdatedNotification.d.ts +6 -0
  339. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerToolCallParams.d.ts +8 -0
  340. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpServerToolCallResponse.d.ts +7 -0
  341. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpToolCallError.d.ts +3 -0
  342. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpToolCallProgressNotification.d.ts +6 -0
  343. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpToolCallResult.d.ts +6 -0
  344. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/McpToolCallStatus.d.ts +1 -0
  345. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MemoryCitation.d.ts +5 -0
  346. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MemoryCitationEntry.d.ts +6 -0
  347. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MergeStrategy.d.ts +1 -0
  348. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/MigrationDetails.d.ts +14 -0
  349. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/Model.d.ts +26 -0
  350. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelAvailabilityNux.d.ts +3 -0
  351. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelListParams.d.ts +14 -0
  352. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelListResponse.d.ts +9 -0
  353. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelProviderCapabilitiesReadParams.d.ts +1 -0
  354. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelProviderCapabilitiesReadResponse.d.ts +5 -0
  355. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelRerouteReason.d.ts +1 -0
  356. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelReroutedNotification.d.ts +8 -0
  357. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelServiceTier.d.ts +5 -0
  358. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelUpgradeInfo.d.ts +6 -0
  359. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelVerification.d.ts +1 -0
  360. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ModelVerificationNotification.d.ts +6 -0
  361. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkAccess.d.ts +1 -0
  362. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkApprovalContext.d.ts +5 -0
  363. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkApprovalProtocol.d.ts +1 -0
  364. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkDomainPermission.d.ts +1 -0
  365. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkPolicyAmendment.d.ts +5 -0
  366. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkPolicyRuleAction.d.ts +1 -0
  367. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkRequirements.d.ts +40 -0
  368. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NetworkUnixSocketPermission.d.ts +1 -0
  369. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/NonSteerableTurnKind.d.ts +1 -0
  370. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/OverriddenMetadata.d.ts +7 -0
  371. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PatchApplyStatus.d.ts +1 -0
  372. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PatchChangeKind.d.ts +8 -0
  373. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionGrantScope.d.ts +1 -0
  374. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionProfile.d.ts +12 -0
  375. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionProfileFileSystemPermissions.d.ts +8 -0
  376. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionProfileModificationParams.d.ts +5 -0
  377. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionProfileNetworkPermissions.d.ts +3 -0
  378. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionProfileSelectionParams.d.ts +6 -0
  379. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionsRequestApprovalParams.d.ts +10 -0
  380. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PermissionsRequestApprovalResponse.d.ts +10 -0
  381. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PlanDeltaNotification.d.ts +10 -0
  382. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginAuthPolicy.d.ts +1 -0
  383. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginAvailability.d.ts +1 -0
  384. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginDetail.d.ts +13 -0
  385. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginInstallParams.d.ts +6 -0
  386. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginInstallPolicy.d.ts +1 -0
  387. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginInstallResponse.d.ts +6 -0
  388. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginInterface.d.ts +42 -0
  389. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginListMarketplaceKind.d.ts +1 -0
  390. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginListParams.d.ts +14 -0
  391. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginListResponse.d.ts +7 -0
  392. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginMarketplaceEntry.d.ts +13 -0
  393. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginReadParams.d.ts +6 -0
  394. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginReadResponse.d.ts +4 -0
  395. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareContext.d.ts +5 -0
  396. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareDeleteParams.d.ts +3 -0
  397. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareDeleteResponse.d.ts +1 -0
  398. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareDiscoverability.d.ts +1 -0
  399. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareListItem.d.ts +7 -0
  400. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareListParams.d.ts +1 -0
  401. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareListResponse.d.ts +4 -0
  402. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginSharePrincipal.d.ts +6 -0
  403. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginSharePrincipalType.d.ts +1 -0
  404. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareSaveParams.d.ts +9 -0
  405. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareSaveResponse.d.ts +4 -0
  406. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareTarget.d.ts +5 -0
  407. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareUpdateTargetsParams.d.ts +5 -0
  408. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginShareUpdateTargetsResponse.d.ts +4 -0
  409. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginSkillReadParams.d.ts +5 -0
  410. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginSkillReadResponse.d.ts +3 -0
  411. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginSource.d.ts +13 -0
  412. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginSummary.d.ts +25 -0
  413. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginUninstallParams.d.ts +3 -0
  414. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginUninstallResponse.d.ts +1 -0
  415. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/PluginsMigration.d.ts +4 -0
  416. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ProcessExitedNotification.d.ts +39 -0
  417. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ProcessOutputDeltaNotification.d.ts +23 -0
  418. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ProcessOutputStream.d.ts +4 -0
  419. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ProcessTerminalSize.d.ts +13 -0
  420. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ProfileV2.d.ts +29 -0
  421. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RateLimitReachedType.d.ts +1 -0
  422. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RateLimitSnapshot.d.ts +13 -0
  423. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RateLimitWindow.d.ts +5 -0
  424. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RawResponseItemCompletedNotification.d.ts +6 -0
  425. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReasoningEffortOption.d.ts +5 -0
  426. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReasoningSummaryPartAddedNotification.d.ts +6 -0
  427. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReasoningSummaryTextDeltaNotification.d.ts +7 -0
  428. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReasoningTextDeltaNotification.d.ts +7 -0
  429. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RemoteControlClientConnectionAudience.d.ts +4 -0
  430. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RemoteControlClientEnrollmentAudience.d.ts +4 -0
  431. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RemoteControlConnectionStatus.d.ts +1 -0
  432. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RemoteControlStatusChangedNotification.d.ts +8 -0
  433. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/RequestPermissionProfile.d.ts +6 -0
  434. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ResidencyRequirement.d.ts +1 -0
  435. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReviewDelivery.d.ts +1 -0
  436. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReviewStartParams.d.ts +11 -0
  437. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReviewStartResponse.d.ts +11 -0
  438. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ReviewTarget.d.ts +16 -0
  439. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SandboxMode.d.ts +1 -0
  440. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SandboxPolicy.d.ts +17 -0
  441. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SandboxWorkspaceWrite.d.ts +6 -0
  442. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SendAddCreditsNudgeEmailParams.d.ts +4 -0
  443. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SendAddCreditsNudgeEmailResponse.d.ts +4 -0
  444. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ServerRequestResolvedNotification.d.ts +5 -0
  445. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SessionMigration.d.ts +5 -0
  446. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SessionSource.d.ts +6 -0
  447. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillDependencies.d.ts +4 -0
  448. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillErrorInfo.d.ts +4 -0
  449. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillInterface.d.ts +9 -0
  450. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillMetadata.d.ts +17 -0
  451. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillScope.d.ts +1 -0
  452. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillSummary.d.ts +10 -0
  453. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillToolDependency.d.ts +8 -0
  454. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsChangedNotification.d.ts +7 -0
  455. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsConfigWriteParams.d.ts +12 -0
  456. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsConfigWriteResponse.d.ts +3 -0
  457. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsListEntry.d.ts +7 -0
  458. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsListExtraRootsForCwd.d.ts +4 -0
  459. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsListParams.d.ts +15 -0
  460. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SkillsListResponse.d.ts +4 -0
  461. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SortDirection.d.ts +1 -0
  462. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/SubagentMigration.d.ts +3 -0
  463. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TerminalInteractionNotification.d.ts +7 -0
  464. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TextElement.d.ts +11 -0
  465. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TextPosition.d.ts +10 -0
  466. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TextRange.d.ts +5 -0
  467. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/Thread.d.ts +84 -0
  468. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadActiveFlag.d.ts +1 -0
  469. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadApproveGuardianDeniedActionParams.d.ts +8 -0
  470. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadApproveGuardianDeniedActionResponse.d.ts +1 -0
  471. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadArchiveParams.d.ts +3 -0
  472. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadArchiveResponse.d.ts +1 -0
  473. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadArchivedNotification.d.ts +3 -0
  474. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadClosedNotification.d.ts +3 -0
  475. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadCompactStartParams.d.ts +3 -0
  476. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadCompactStartResponse.d.ts +1 -0
  477. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadForkParams.d.ts +38 -0
  478. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadForkResponse.d.ts +26 -0
  479. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadGoal.d.ts +11 -0
  480. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadGoalClearedNotification.d.ts +3 -0
  481. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadGoalStatus.d.ts +1 -0
  482. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadGoalUpdatedNotification.d.ts +6 -0
  483. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadInjectItemsParams.d.ts +8 -0
  484. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadInjectItemsResponse.d.ts +1 -0
  485. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadItem.d.ts +180 -0
  486. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadListParams.d.ts +51 -0
  487. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadListResponse.d.ts +16 -0
  488. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadLoadedListParams.d.ts +10 -0
  489. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadLoadedListResponse.d.ts +11 -0
  490. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadMetadataGitInfoUpdateParams.d.ts +17 -0
  491. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadMetadataUpdateParams.d.ts +10 -0
  492. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadMetadataUpdateResponse.d.ts +4 -0
  493. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadNameUpdatedNotification.d.ts +4 -0
  494. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadReadParams.d.ts +7 -0
  495. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadReadResponse.d.ts +4 -0
  496. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeAudioChunk.d.ts +10 -0
  497. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeClosedNotification.d.ts +7 -0
  498. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeErrorNotification.d.ts +7 -0
  499. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeItemAddedNotification.d.ts +8 -0
  500. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeOutputAudioDeltaNotification.d.ts +8 -0
  501. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeSdpNotification.d.ts +7 -0
  502. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartTransport.d.ts +13 -0
  503. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeStartedNotification.d.ts +9 -0
  504. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeTranscriptDeltaNotification.d.ts +12 -0
  505. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRealtimeTranscriptDoneNotification.d.ts +12 -0
  506. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadResumeParams.d.ts +37 -0
  507. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.d.ts +26 -0
  508. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRollbackParams.d.ts +10 -0
  509. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadRollbackResponse.d.ts +11 -0
  510. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadSetNameParams.d.ts +4 -0
  511. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadSetNameResponse.d.ts +1 -0
  512. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadShellCommandParams.d.ts +10 -0
  513. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadShellCommandResponse.d.ts +1 -0
  514. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadSortKey.d.ts +1 -0
  515. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadSource.d.ts +1 -0
  516. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadSourceKind.d.ts +1 -0
  517. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadStartParams.d.ts +31 -0
  518. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadStartResponse.d.ts +26 -0
  519. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadStartSource.d.ts +1 -0
  520. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadStartedNotification.d.ts +4 -0
  521. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadStatus.d.ts +11 -0
  522. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadStatusChangedNotification.d.ts +5 -0
  523. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadTokenUsage.d.ts +6 -0
  524. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadTokenUsageUpdatedNotification.d.ts +6 -0
  525. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadUnarchiveParams.d.ts +3 -0
  526. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadUnarchiveResponse.d.ts +4 -0
  527. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadUnarchivedNotification.d.ts +3 -0
  528. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadUnsubscribeParams.d.ts +3 -0
  529. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadUnsubscribeResponse.d.ts +4 -0
  530. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ThreadUnsubscribeStatus.d.ts +1 -0
  531. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TokenUsageBreakdown.d.ts +7 -0
  532. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ToolRequestUserInputAnswer.d.ts +6 -0
  533. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ToolRequestUserInputOption.d.ts +7 -0
  534. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ToolRequestUserInputParams.d.ts +10 -0
  535. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ToolRequestUserInputQuestion.d.ts +12 -0
  536. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ToolRequestUserInputResponse.d.ts +9 -0
  537. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/ToolsV2.d.ts +5 -0
  538. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/Turn.d.ts +32 -0
  539. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnCompletedNotification.d.ts +5 -0
  540. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnDiffUpdatedNotification.d.ts +9 -0
  541. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnEnvironmentParams.d.ts +5 -0
  542. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnError.d.ts +6 -0
  543. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnInterruptParams.d.ts +4 -0
  544. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnInterruptResponse.d.ts +1 -0
  545. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnItemsView.d.ts +1 -0
  546. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnPlanStep.d.ts +5 -0
  547. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnPlanStepStatus.d.ts +1 -0
  548. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnPlanUpdatedNotification.d.ts +7 -0
  549. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnStartParams.d.ts +44 -0
  550. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnStartResponse.d.ts +4 -0
  551. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnStartedNotification.d.ts +5 -0
  552. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnStatus.d.ts +1 -0
  553. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnSteerParams.d.ts +9 -0
  554. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/TurnSteerResponse.d.ts +3 -0
  555. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/UserInput.d.ts +23 -0
  556. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WarningNotification.d.ts +10 -0
  557. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WebSearchAction.d.ts +14 -0
  558. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsSandboxReadiness.d.ts +1 -0
  559. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsSandboxReadinessResponse.d.ts +4 -0
  560. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsSandboxSetupCompletedNotification.d.ts +6 -0
  561. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsSandboxSetupMode.d.ts +1 -0
  562. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsSandboxSetupStartParams.d.ts +6 -0
  563. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsSandboxSetupStartResponse.d.ts +3 -0
  564. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WindowsWorldWritableWarningNotification.d.ts +5 -0
  565. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/WriteStatus.d.ts +1 -0
  566. package/dist/internal/codex/app-server-protocol/schema/typescript/v2/index.d.ts +457 -0
  567. package/dist/internal/codex/app-server-protocol/src/protocol/common.d.ts +36 -0
  568. package/dist/internal/codex/app-server-protocol/src/protocol/event-mapping.d.ts +41 -0
  569. package/dist/internal/codex/app-server-protocol/src/protocol/index.d.ts +3 -0
  570. package/dist/internal/codex/app-server-protocol/src/protocol/thread-resume.d.ts +11 -0
  571. package/dist/internal/codex/app-server-transport/src/outgoing_message.d.ts +27 -0
  572. package/dist/internal/codex/app-server-transport/src/transport/mod.d.ts +78 -0
  573. package/dist/internal/codex/codex-api/src/common.d.ts +100 -0
  574. package/dist/internal/codex/codex-api/src/endpoint/responses.d.ts +28 -0
  575. package/dist/internal/codex/codex-api/src/endpoint/responses_websocket.d.ts +54 -0
  576. package/dist/internal/codex/codex-api/src/error.d.ts +21 -0
  577. package/dist/internal/codex/codex-api/src/index.d.ts +9 -0
  578. package/dist/internal/codex/codex-api/src/provider.d.ts +22 -0
  579. package/dist/internal/codex/codex-api/src/rate_limits.d.ts +3 -0
  580. package/dist/internal/codex/codex-api/src/requests/responses.d.ts +16 -0
  581. package/dist/internal/codex/codex-api/src/sse/responses.d.ts +13 -0
  582. package/dist/internal/codex/codex-api/src/stream_events_utils.d.ts +23 -0
  583. package/dist/internal/codex/codex-mcp/src/auth_elicitation.d.ts +41 -0
  584. package/dist/internal/codex/codex-mcp/src/codex_apps.d.ts +57 -0
  585. package/dist/internal/codex/codex-mcp/src/connection_manager.d.ts +72 -0
  586. package/dist/internal/codex/codex-mcp/src/elicitation.d.ts +77 -0
  587. package/dist/internal/codex/codex-mcp/src/mcp/auth.d.ts +64 -0
  588. package/dist/internal/codex/codex-mcp/src/mcp/mod.d.ts +16 -0
  589. package/dist/internal/codex/codex-mcp/src/rmcp_client.d.ts +221 -0
  590. package/dist/internal/codex/codex-mcp/src/tools.d.ts +37 -0
  591. package/dist/internal/codex/config/src/config_toml.d.ts +14 -0
  592. package/dist/internal/codex/config/src/index.d.ts +7 -0
  593. package/dist/internal/codex/config/src/loader/mod.d.ts +21 -0
  594. package/dist/internal/codex/config/src/merge.d.ts +22 -0
  595. package/dist/internal/codex/config/src/permissions_toml.d.ts +6 -0
  596. package/dist/internal/codex/config/src/profile_toml.d.ts +1 -0
  597. package/dist/internal/codex/config/src/thread_config.d.ts +43 -0
  598. package/dist/internal/codex/config/src/types.d.ts +121 -0
  599. package/dist/internal/codex/core/src/agent/agent_resolver.d.ts +3 -0
  600. package/dist/internal/codex/core/src/agent/control.d.ts +76 -0
  601. package/dist/internal/codex/core/src/agent/mailbox.d.ts +28 -0
  602. package/dist/internal/codex/core/src/agent/mod.d.ts +6 -0
  603. package/dist/internal/codex/core/src/agent/registry.d.ts +54 -0
  604. package/dist/internal/codex/core/src/agent/role.d.ts +19 -0
  605. package/dist/internal/codex/core/src/agent/status.d.ts +3 -0
  606. package/dist/internal/codex/core/src/auth.d.ts +65 -0
  607. package/dist/internal/codex/core/src/client.d.ts +129 -0
  608. package/dist/internal/codex/core/src/collaboration-mode-presets.d.ts +9 -0
  609. package/dist/internal/codex/core/src/compact-task-runner.d.ts +18 -0
  610. package/dist/internal/codex/core/src/compact.d.ts +12 -0
  611. package/dist/internal/codex/core/src/config/agent_roles.d.ts +6 -0
  612. package/dist/internal/codex/core/src/config/managed_features.d.ts +7 -0
  613. package/dist/internal/codex/core/src/config/mod.d.ts +9 -0
  614. package/dist/internal/codex/core/src/config/network_proxy_spec.d.ts +5 -0
  615. package/dist/internal/codex/core/src/config/permissions.d.ts +30 -0
  616. package/dist/internal/codex/core/src/config-types.d.ts +28 -0
  617. package/dist/internal/codex/core/src/context/collaboration-mode-instructions.d.ts +10 -0
  618. package/dist/internal/codex/core/src/context/context-updates.d.ts +10 -0
  619. package/dist/internal/codex/core/src/context/environment-context.d.ts +24 -0
  620. package/dist/internal/codex/core/src/context/fragment.d.ts +22 -0
  621. package/dist/internal/codex/core/src/context/permissions-instructions.d.ts +8 -0
  622. package/dist/internal/codex/core/src/context/prompt-context.d.ts +8 -0
  623. package/dist/internal/codex/core/src/context/turn-aborted.d.ts +3 -0
  624. package/dist/internal/codex/core/src/context/user-instructions.d.ts +7 -0
  625. package/dist/internal/codex/core/src/context_manager/history.d.ts +60 -0
  626. package/dist/internal/codex/core/src/context_manager/normalize.d.ts +6 -0
  627. package/dist/internal/codex/core/src/event-mapping.d.ts +9 -0
  628. package/dist/internal/codex/core/src/exec-output.d.ts +20 -0
  629. package/dist/internal/codex/core/src/goals/index.d.ts +2 -0
  630. package/dist/internal/codex/core/src/goals/runtime.d.ts +32 -0
  631. package/dist/internal/codex/core/src/goals/types.d.ts +95 -0
  632. package/dist/internal/codex/core/src/goals.d.ts +1 -0
  633. package/dist/internal/codex/core/src/hooks/dispatcher.d.ts +5 -0
  634. package/dist/internal/codex/core/src/hooks/index.d.ts +4 -0
  635. package/dist/internal/codex/core/src/hooks/output-parser.d.ts +9 -0
  636. package/dist/internal/codex/core/src/hooks/runtime.d.ts +125 -0
  637. package/dist/internal/codex/core/src/hooks/types.d.ts +40 -0
  638. package/dist/internal/codex/core/src/ids.d.ts +5 -0
  639. package/dist/internal/codex/core/src/index.d.ts +98 -0
  640. package/dist/internal/codex/core/src/items.d.ts +137 -0
  641. package/dist/internal/codex/core/src/mcp/index.d.ts +10 -0
  642. package/dist/internal/codex/core/src/mcp/manager.d.ts +73 -0
  643. package/dist/internal/codex/core/src/mcp/types.d.ts +165 -0
  644. package/dist/internal/codex/core/src/mcp.d.ts +1 -0
  645. package/dist/internal/codex/core/src/memory.d.ts +21 -0
  646. package/dist/internal/codex/core/src/model-provider.d.ts +193 -0
  647. package/dist/internal/codex/core/src/models.d.ts +158 -0
  648. package/dist/internal/codex/core/src/plan-mode.d.ts +1 -0
  649. package/dist/internal/codex/core/src/protocol/dynamic_tools.d.ts +48 -0
  650. package/dist/internal/codex/core/src/protocol/user_input.d.ts +30 -0
  651. package/dist/internal/codex/core/src/protocol.d.ts +893 -0
  652. package/dist/internal/codex/core/src/rendered-thread.d.ts +30 -0
  653. package/dist/internal/codex/core/src/request_permissions.d.ts +52 -0
  654. package/dist/internal/codex/core/src/request_user_input.d.ts +47 -0
  655. package/dist/internal/codex/core/src/session/rollout-reconstruction.d.ts +11 -0
  656. package/dist/internal/codex/core/src/session/session-settings.d.ts +29 -0
  657. package/dist/internal/codex/core/src/session/session.d.ts +226 -0
  658. package/dist/internal/codex/core/src/session/turn-context.d.ts +71 -0
  659. package/dist/internal/codex/core/src/session/turn-timing.d.ts +12 -0
  660. package/dist/internal/codex/core/src/session/turn.d.ts +35 -0
  661. package/dist/internal/codex/core/src/state/session.d.ts +40 -0
  662. package/dist/internal/codex/core/src/state/turn.d.ts +83 -0
  663. package/dist/internal/codex/core/src/stream-parser.d.ts +36 -0
  664. package/dist/internal/codex/core/src/stream_events_utils.d.ts +43 -0
  665. package/dist/internal/codex/core/src/tasks/compact.d.ts +26 -0
  666. package/dist/internal/codex/core/src/tasks/mod.d.ts +43 -0
  667. package/dist/internal/codex/core/src/tasks/regular.d.ts +27 -0
  668. package/dist/internal/codex/core/src/templates.d.ts +12 -0
  669. package/dist/{thread-history-builder-zW0zeqcS.d.ts → internal/codex/core/src/thread-history-builder.d.ts} +14 -16
  670. package/dist/internal/codex/core/src/thread-store/index.d.ts +3 -0
  671. package/dist/{live-thread-BMvlflzM.d.ts → internal/codex/core/src/thread-store/live-thread.d.ts} +7 -8
  672. package/dist/{store-AGRxhgQ3.d.ts → internal/codex/core/src/thread-store/store.d.ts} +3 -6
  673. package/dist/{types-BTeabLYr.d.ts → internal/codex/core/src/thread-store/types.d.ts} +25 -26
  674. package/dist/internal/codex/core/src/tools/code_mode/execute_handler.d.ts +7 -0
  675. package/dist/internal/codex/core/src/tools/code_mode/execute_spec.d.ts +13 -0
  676. package/dist/internal/codex/core/src/tools/code_mode/mod.d.ts +5 -0
  677. package/dist/internal/codex/core/src/tools/code_mode/response_adapter.d.ts +2 -0
  678. package/dist/internal/codex/core/src/tools/code_mode/wait_handler.d.ts +7 -0
  679. package/dist/internal/codex/core/src/tools/code_mode/wait_spec.d.ts +13 -0
  680. package/dist/internal/codex/core/src/tools/context.d.ts +155 -0
  681. package/dist/internal/codex/core/src/tools/events.d.ts +50 -0
  682. package/dist/internal/codex/core/src/tools/handlers/apply_patch.d.ts +14 -0
  683. package/dist/internal/codex/core/src/tools/handlers/apply_patch_spec.d.ts +16 -0
  684. package/dist/internal/codex/core/src/tools/handlers/dynamic.d.ts +17 -0
  685. package/dist/internal/codex/core/src/tools/handlers/goal.d.ts +20 -0
  686. package/dist/internal/codex/core/src/tools/handlers/goal_spec.d.ts +51 -0
  687. package/dist/internal/codex/core/src/tools/handlers/mcp.d.ts +23 -0
  688. package/dist/internal/codex/core/src/tools/handlers/mcp_resource.d.ts +24 -0
  689. package/dist/internal/codex/core/src/tools/handlers/mcp_resource_spec.d.ts +61 -0
  690. package/dist/internal/codex/core/src/tools/handlers/multi_agents.d.ts +50 -0
  691. package/dist/internal/codex/core/src/tools/handlers/multi_agents_common.d.ts +3 -0
  692. package/dist/internal/codex/core/src/tools/handlers/multi_agents_spec.d.ts +5 -0
  693. package/dist/internal/codex/core/src/tools/handlers/multi_agents_v2.d.ts +1 -0
  694. package/dist/internal/codex/core/src/tools/handlers/plan.d.ts +8 -0
  695. package/dist/internal/codex/core/src/tools/handlers/plan_spec.d.ts +35 -0
  696. package/dist/internal/codex/core/src/tools/handlers/request_permissions.d.ts +7 -0
  697. package/dist/internal/codex/core/src/tools/handlers/request_permissions_spec.d.ts +1 -0
  698. package/dist/internal/codex/core/src/tools/handlers/request_plugin_install.d.ts +8 -0
  699. package/dist/internal/codex/core/src/tools/handlers/request_plugin_install_spec.d.ts +12 -0
  700. package/dist/internal/codex/core/src/tools/handlers/request_user_input.d.ts +13 -0
  701. package/dist/internal/codex/core/src/tools/handlers/request_user_input_spec.d.ts +1 -0
  702. package/dist/internal/codex/core/src/tools/handlers/shell_spec.d.ts +60 -0
  703. package/dist/internal/codex/core/src/tools/handlers/test_sync.d.ts +1 -0
  704. package/dist/internal/codex/core/src/tools/handlers/test_sync_spec.d.ts +12 -0
  705. package/dist/internal/codex/core/src/tools/handlers/tool_search.d.ts +28 -0
  706. package/dist/internal/codex/core/src/tools/handlers/tool_search_spec.d.ts +21 -0
  707. package/dist/internal/codex/core/src/tools/handlers/unavailable_tool.d.ts +10 -0
  708. package/dist/internal/codex/core/src/tools/handlers/unified_exec/exec_command.d.ts +13 -0
  709. package/dist/internal/codex/core/src/tools/handlers/unified_exec/write_stdin.d.ts +8 -0
  710. package/dist/internal/codex/core/src/tools/handlers/unified_exec.d.ts +2 -0
  711. package/dist/internal/codex/core/src/tools/hook_names.d.ts +6 -0
  712. package/dist/internal/codex/core/src/tools/hosted_spec.d.ts +9 -0
  713. package/dist/internal/codex/core/src/tools/network_approval.d.ts +11 -0
  714. package/dist/internal/codex/core/src/tools/orchestrator.d.ts +28 -0
  715. package/dist/internal/codex/core/src/tools/parallel.d.ts +33 -0
  716. package/dist/internal/codex/core/src/tools/registry.d.ts +27 -0
  717. package/dist/internal/codex/core/src/tools/responses_api.d.ts +34 -0
  718. package/dist/internal/codex/core/src/tools/router.d.ts +50 -0
  719. package/dist/internal/codex/core/src/tools/runtimes/apply_patch.d.ts +2 -0
  720. package/dist/internal/codex/core/src/tools/runtimes/mod.d.ts +4 -0
  721. package/dist/internal/codex/core/src/tools/runtimes/shell.d.ts +2 -0
  722. package/dist/internal/codex/core/src/tools/runtimes/unified_exec.d.ts +2 -0
  723. package/dist/internal/codex/core/src/tools/sandboxing.d.ts +36 -0
  724. package/dist/internal/codex/core/src/tools/spec.d.ts +10 -0
  725. package/dist/internal/codex/core/src/tools/spec_plan.d.ts +2 -0
  726. package/dist/internal/codex/core/src/tools/spec_plan_types.d.ts +93 -0
  727. package/dist/internal/codex/core/src/tools/tool_dispatch_trace.d.ts +12 -0
  728. package/dist/internal/codex/core/src/tools/tool_name.d.ts +17 -0
  729. package/dist/internal/codex/core/src/tools/tool_search_entry.d.ts +35 -0
  730. package/dist/internal/codex/core/src/tools/tool_spec.d.ts +29 -0
  731. package/dist/{mod-DYVLSWO4.d.ts → internal/codex/thread-store/src/in_memory.d.ts} +8 -39
  732. package/dist/internal/codex/thread-store/src/index.d.ts +6 -0
  733. package/dist/internal/codex/thread-store/src/local/mod.d.ts +32 -0
  734. package/dist/internal/codex/utils/output-truncation/src/lib.d.ts +19 -0
  735. package/dist/internal/codex/utils/string/src/lib.d.ts +1 -0
  736. package/dist/internal/codex/utils/string/src/truncate.d.ts +5 -0
  737. package/dist/runtime/index.d.ts +47 -0
  738. package/dist/server/index.d.ts +2 -29
  739. package/dist/server/index.js +20488 -15
  740. package/dist/testing/index.d.ts +2 -9
  741. package/dist/testing/index.js +1698 -15
  742. package/package.json +9 -100
  743. package/dist/ClientNotification-B6-FhXQf.d.ts +0 -5
  744. package/dist/DynamicToolCallResponse-82DFjES2.d.ts +0 -8
  745. package/dist/DynamicToolSpec-CfnhqAYK.d.ts +0 -29
  746. package/dist/PermissionsRequestApprovalResponse-DxzPPDRb.d.ts +0 -55
  747. package/dist/ProviderStatusBanner-BlP6lzwE.d.ts +0 -441
  748. package/dist/ServerRequest-B5cKVJjr.d.ts +0 -2181
  749. package/dist/ThreadResumeResponse-DvmE1juU.d.ts +0 -1542
  750. package/dist/ToolRequestUserInputQuestion-CeZa5X1J.d.ts +0 -23
  751. package/dist/ToolRequestUserInputResponse-zcPLwbiK.d.ts +0 -17
  752. package/dist/TurnSteerResponse-0kBCfplh.d.ts +0 -209
  753. package/dist/WebSearchToolConfig-D3ep0625.d.ts +0 -18
  754. package/dist/chat-runtime-B6azJyKo.d.ts +0 -381
  755. package/dist/chunk-2DZRMCI2.js +0 -1258
  756. package/dist/chunk-2DZRMCI2.js.map +0 -1
  757. package/dist/chunk-4DPLJPB5.js +0 -396
  758. package/dist/chunk-4DPLJPB5.js.map +0 -1
  759. package/dist/chunk-5JMJ6OI5.js +0 -3
  760. package/dist/chunk-5JMJ6OI5.js.map +0 -1
  761. package/dist/chunk-6ZMJ34KE.js +0 -1153
  762. package/dist/chunk-6ZMJ34KE.js.map +0 -1
  763. package/dist/chunk-CGBS37IU.js +0 -128
  764. package/dist/chunk-CGBS37IU.js.map +0 -1
  765. package/dist/chunk-DCMKA2A6.js +0 -18
  766. package/dist/chunk-DCMKA2A6.js.map +0 -1
  767. package/dist/chunk-DYLHN3HG.js +0 -937
  768. package/dist/chunk-DYLHN3HG.js.map +0 -1
  769. package/dist/chunk-FN3SWHRH.js +0 -934
  770. package/dist/chunk-FN3SWHRH.js.map +0 -1
  771. package/dist/chunk-ILXA6HLX.js +0 -1973
  772. package/dist/chunk-ILXA6HLX.js.map +0 -1
  773. package/dist/chunk-LWQNX4LI.js +0 -13755
  774. package/dist/chunk-LWQNX4LI.js.map +0 -1
  775. package/dist/chunk-NCI4MAWZ.js +0 -7733
  776. package/dist/chunk-NCI4MAWZ.js.map +0 -1
  777. package/dist/chunk-O44XP7LH.js +0 -214
  778. package/dist/chunk-O44XP7LH.js.map +0 -1
  779. package/dist/chunk-PST3ZWX2.js +0 -555
  780. package/dist/chunk-PST3ZWX2.js.map +0 -1
  781. package/dist/chunk-SYPHCDRD.js +0 -1133
  782. package/dist/chunk-SYPHCDRD.js.map +0 -1
  783. package/dist/chunk-V4BMZWBM.js +0 -2401
  784. package/dist/chunk-V4BMZWBM.js.map +0 -1
  785. package/dist/chunk-YHVCFD2D.js +0 -117
  786. package/dist/chunk-YHVCFD2D.js.map +0 -1
  787. package/dist/chunk-Z63UPBS3.js +0 -152
  788. package/dist/chunk-Z63UPBS3.js.map +0 -1
  789. package/dist/chunk-ZX5OIIJX.js +0 -3
  790. package/dist/chunk-ZX5OIIJX.js.map +0 -1
  791. package/dist/client/index.js.map +0 -1
  792. package/dist/codex-rs/app-server/index.d.ts +0 -161
  793. package/dist/codex-rs/app-server/index.js +0 -13
  794. package/dist/codex-rs/app-server/index.js.map +0 -1
  795. package/dist/codex-rs/app-server-protocol/index.d.ts +0 -1722
  796. package/dist/codex-rs/app-server-protocol/index.js +0 -6
  797. package/dist/codex-rs/app-server-protocol/index.js.map +0 -1
  798. package/dist/codex-rs/app-server-protocol/protocol.d.ts +0 -19
  799. package/dist/codex-rs/app-server-protocol/protocol.js +0 -4
  800. package/dist/codex-rs/app-server-protocol/protocol.js.map +0 -1
  801. package/dist/codex-rs/codex-api/index.d.ts +0 -104
  802. package/dist/codex-rs/codex-api/index.js +0 -11
  803. package/dist/codex-rs/codex-api/index.js.map +0 -1
  804. package/dist/codex-rs/config/index.d.ts +0 -88
  805. package/dist/codex-rs/config/index.js +0 -4
  806. package/dist/codex-rs/config/index.js.map +0 -1
  807. package/dist/codex-rs/core/config/index.d.ts +0 -61
  808. package/dist/codex-rs/core/config/index.js +0 -5
  809. package/dist/codex-rs/core/config/index.js.map +0 -1
  810. package/dist/codex-rs/core/index.d.ts +0 -1393
  811. package/dist/codex-rs/core/index.js +0 -11
  812. package/dist/codex-rs/core/index.js.map +0 -1
  813. package/dist/codex-rs/model-provider/index.d.ts +0 -2
  814. package/dist/codex-rs/model-provider/index.js +0 -4
  815. package/dist/codex-rs/model-provider/index.js.map +0 -1
  816. package/dist/codex-rs/models-manager/index.d.ts +0 -2
  817. package/dist/codex-rs/models-manager/index.js +0 -4
  818. package/dist/codex-rs/models-manager/index.js.map +0 -1
  819. package/dist/codex-rs/parity.d.ts +0 -26
  820. package/dist/codex-rs/parity.js +0 -3
  821. package/dist/codex-rs/parity.js.map +0 -1
  822. package/dist/codex-rs/thread-store/index.d.ts +0 -5
  823. package/dist/codex-rs/thread-store/index.js +0 -4
  824. package/dist/codex-rs/thread-store/index.js.map +0 -1
  825. package/dist/codex-rs/unsupported.d.ts +0 -15
  826. package/dist/codex-rs/unsupported.js +0 -22
  827. package/dist/codex-rs/unsupported.js.map +0 -1
  828. package/dist/codex-rs/utils/output-truncation.d.ts +0 -21
  829. package/dist/codex-rs/utils/output-truncation.js +0 -4
  830. package/dist/codex-rs/utils/output-truncation.js.map +0 -1
  831. package/dist/codex-rs/utils/string.d.ts +0 -7
  832. package/dist/codex-rs/utils/string.js +0 -3
  833. package/dist/codex-rs/utils/string.js.map +0 -1
  834. package/dist/common-CTyph5x8.d.ts +0 -40
  835. package/dist/event-mapping-CbISdQ1D.d.ts +0 -43
  836. package/dist/history-CfM-4V7b.d.ts +0 -1654
  837. package/dist/index-CoDZosq0.d.ts +0 -261
  838. package/dist/index.js.map +0 -1
  839. package/dist/lib-nXlaKiS-.d.ts +0 -48
  840. package/dist/merge-B_AWVmnI.d.ts +0 -24
  841. package/dist/plan-mode-Cv6KWb_S.d.ts +0 -14
  842. package/dist/proposed-plan-DpN1ma0Y.d.ts +0 -53
  843. package/dist/protocol-mpBcYHrm.d.ts +0 -1655
  844. package/dist/react/index.d.ts +0 -41
  845. package/dist/react/index.js +0 -19
  846. package/dist/react/index.js.map +0 -1
  847. package/dist/remote-ClZbq9KN.d.ts +0 -21
  848. package/dist/rendered-thread-AOxw3V5b.d.ts +0 -29
  849. package/dist/responses_websocket-BhxSgCzK.d.ts +0 -183
  850. package/dist/runtime-Cm6ml53h.d.ts +0 -528
  851. package/dist/server/index.js.map +0 -1
  852. package/dist/shadcn/index.d.ts +0 -68
  853. package/dist/shadcn/index.js +0 -334
  854. package/dist/shadcn/index.js.map +0 -1
  855. package/dist/sidebar-DMMij22z.d.ts +0 -87
  856. package/dist/spec_plan_types-CmsJ-Tfn.d.ts +0 -260
  857. package/dist/styles.css +0 -1
  858. package/dist/t3code/apps/web/components/chat.d.ts +0 -508
  859. package/dist/t3code/apps/web/components/chat.js +0 -12
  860. package/dist/t3code/apps/web/components/chat.js.map +0 -1
  861. package/dist/t3code/apps/web/index.d.ts +0 -12
  862. package/dist/t3code/apps/web/index.js +0 -13
  863. package/dist/t3code/apps/web/index.js.map +0 -1
  864. package/dist/testing/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/upstream/t3code/apps/web/src/lib/utils.ts","../src/upstream/t3code/apps/web/src/components/ui/button.tsx","../src/upstream/t3code/apps/web/src/components/chat/ChangedFilesTree.logic.ts","../src/upstream/t3code/apps/web/src/components/chat/ChangedFilesTree.tsx","../src/upstream/t3code/apps/web/src/components/ui/dropdown-menu.tsx","../src/upstream/t3code/apps/web/src/components/ui/separator.tsx","../src/upstream/t3code/apps/web/src/pendingUserInput.ts","../src/upstream/t3code/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx","../src/upstream/t3code/apps/web/src/components/chat/mention-syntax.ts","../src/upstream/t3code/apps/web/src/components/chat/mention-bindings.ts","../src/upstream/t3code/apps/web/src/components/chat/mention-codec.ts","../src/upstream/t3code/apps/web/src/components/chat/composer-editor-mentions.ts","../src/upstream/t3code/apps/web/src/components/chat/composer-logic.ts","../src/upstream/t3code/apps/web/src/lib/searchRanking.ts","../src/upstream/t3code/apps/web/src/components/chat/composerSlashCommandSearch.ts","../src/upstream/t3code/apps/web/src/components/ui/command.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerCommandMenu.tsx","../src/upstream/t3code/apps/web/src/components/chat/composerMenuHighlight.ts","../src/upstream/t3code/apps/web/src/lib/modelSelection.ts","../src/upstream/t3code/apps/web/src/components/chat/TraitsPicker.tsx","../src/upstream/t3code/apps/web/src/components/chat/CompactComposerControlsMenu.tsx","../src/upstream/t3code/apps/web/src/components/chat/composer-footer-layout.ts","../src/upstream/t3code/apps/web/src/components/ComposerPromptEditor.tsx","../src/upstream/t3code/apps/web/src/components/chat/composer-mention-targets.ts","../src/upstream/t3code/apps/web/src/components/ui/popover.tsx","../src/upstream/t3code/apps/web/src/components/ui/tooltip.tsx","../src/upstream/t3code/apps/web/src/components/ui/input.tsx","../src/upstream/t3code/apps/web/src/components/chat/ModelListRow.tsx","../src/upstream/t3code/apps/web/src/components/chat/providerIconUtils.tsx","../src/upstream/t3code/apps/web/src/components/chat/ProviderInstanceIcon.tsx","../src/upstream/t3code/apps/web/src/components/chat/ModelPickerSidebar.tsx","../src/upstream/t3code/apps/web/src/components/chat/modelPickerSearch.ts","../src/upstream/t3code/apps/web/src/components/chat/ModelPickerContent.tsx","../src/upstream/t3code/apps/web/src/components/chat/ProviderModelPicker.tsx","../src/upstream/t3code/apps/web/src/lib/contextWindow.ts","../src/upstream/t3code/apps/web/src/components/chat/ContextWindowMeter.tsx","../src/upstream/t3code/apps/web/src/components/chat/composer-image-attachments.ts","../src/upstream/t3code/apps/web/src/components/chat/ExpandedImageDialog.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerPrimaryActions.logic.ts","../src/upstream/t3code/apps/web/src/components/chat/ComposerPrimaryActions.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerPlanFollowUpBanner.tsx","../src/upstream/t3code/apps/web/src/components/chat/composer-send-state.logic.ts","../src/upstream/t3code/apps/web/src/components/chat/composer-draft.client.ts","../src/upstream/t3code/apps/web/src/components/chat/ChatComposer.tsx","../src/upstream/t3code/apps/web/src/components/ui/alert.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerBannerStack.tsx","../src/upstream/t3code/apps/web/src/components/chat/MessagesTimeline.logic.ts","../src/upstream/t3code/apps/web/src/components/ChatMarkdown.tsx","../src/upstream/t3code/apps/web/src/components/ui/badge.tsx","../src/upstream/t3code/apps/web/src/components/chat/proposed-plan.ts","../src/upstream/t3code/apps/web/src/components/chat/ProposedPlanCard.tsx","../src/upstream/t3code/apps/web/src/components/chat/MessagesTimeline.tsx","../src/upstream/t3code/apps/web/src/components/chat/ChatView.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerPendingApprovalActions.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerPendingApprovalPanel.tsx","../src/upstream/t3code/apps/web/src/components/composerInlineChip.ts","../src/upstream/t3code/apps/web/src/components/chat/TerminalContextInlineChip.tsx","../src/upstream/t3code/apps/web/src/components/chat/ComposerPendingTerminalContexts.tsx","../src/upstream/t3code/apps/web/src/components/chat/composerProviderState.tsx","../src/upstream/t3code/apps/web/src/components/chat/composer-realtime-conversation.logic.ts","../src/upstream/t3code/apps/web/src/components/chat/ComposerRealtimeConversationControl.tsx","../src/upstream/t3code/apps/web/src/components/chat/ProviderStatusBanner.tsx"],"names":["AssistantChangedFilesSection","jsx","ChangedFilesTree","ChangedFilesTreeNode","DropdownMenuPrimitive","jsxs","SeparatorPrimitive","memo","ComposerPendingUserInputCard","useCallback","CheckIcon","lengthPenalty","CommandPrimitive","ComposerCommandMenu","useRef","useMemo","TraitsPicker","useState","CompactComposerControlsMenu","BotIcon","Fragment","ComposerPromptEditor","useEffect","PopoverPrimitive","TooltipPrimitive","ModelListRow","ProviderInstanceIcon","ModelPickerSidebar","StarIcon","ModelPickerContent","SearchIcon","ProviderModelPicker","ChevronDownIcon","ExpandedImageDialog","ChevronRightIcon","ComposerPrimaryActions","ChevronLeftIcon","ComposerPlanFollowUpBanner","LockIcon","PenLineIcon","LockOpenIcon","runtimeModeOptions","ComposerFooterModeControls","ListTodoIcon","forwardRef","ChatComposer","useLayoutEffect","useImperativeHandle","draft","XIcon","ComposerFooterPrimaryActions","cva","ChatMarkdown","Slot","ProposedPlanCard","EllipsisIcon","MessagesTimeline","TimelineRowContent","SimpleWorkEntryRow","BoxIcon","CopyIcon","ChatView","ComposerPendingApprovalActions","ComposerPendingApprovalPanel","TerminalIcon","ComposerRealtimeConversationControl","preventPointerFocus","ProviderStatusBanner"],"mappings":"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","file":"chunk-NCI4MAWZ.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"[&_svg]:-mx-0.5 relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-lg border font-medium text-base outline-none transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] border-primary bg-primary text-primary-foreground shadow-primary/24 shadow-xs [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none [:hover,[data-pressed]]:bg-primary/90\",\n outline:\n \"border-input bg-popover not-dark:bg-clip-padding text-foreground shadow-xs/5 not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-input/32 dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/2%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [:disabled,:active,[data-pressed]]:shadow-none [:hover,[data-pressed]]:bg-accent/50 dark:[:hover,[data-pressed]]:bg-input/64\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [:active,[data-pressed]]:bg-secondary/80 [:hover,[data-pressed]]:bg-secondary/90\",\n ghost:\n \"border-transparent text-foreground data-pressed:bg-accent [:hover,[data-pressed]]:bg-accent\",\n destructive:\n \"not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] border-destructive bg-destructive text-white shadow-destructive/24 shadow-xs [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none [:hover,[data-pressed]]:bg-destructive/90\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 px-[calc(--spacing(3)-1px)] sm:h-8\",\n xs: \"h-7 gap-1 rounded-md px-[calc(--spacing(2)-1px)] text-sm before:rounded-[calc(var(--radius-md)-1px)] sm:h-6 sm:text-xs [&_svg:not([class*='size-'])]:size-4 sm:[&_svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 px-[calc(--spacing(2.5)-1px)] sm:h-7\",\n lg: \"h-10 px-[calc(--spacing(3.5)-1px)] sm:h-9\",\n icon: \"size-9 sm:size-8\",\n \"icon-xs\":\n \"size-7 rounded-md before:rounded-[calc(var(--radius-md)-1px)] sm:size-6 not-in-data-[slot=input-group]:[&_svg:not([class*='size-'])]:size-4 sm:not-in-data-[slot=input-group]:[&_svg:not([class*='size-'])]:size-3.5\",\n \"icon-sm\": \"size-8 sm:size-7\",\n \"icon-lg\": \"size-10 sm:size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import type { TurnItem } from \"../../../../../../codex-rs/core/src\";\n\ntype FileChangeTurnItem = Extract<TurnItem, { type: \"FileChange\" }>;\ntype FileChange = FileChangeTurnItem[\"changes\"][string];\n\nexport type TimelineChangedFile = {\n\tadditions: number;\n\tchangeType: FileChange[\"type\"];\n\tdeletions: number;\n\tpath: string;\n};\n\nexport type TimelineChangedFileStat = {\n\tadditions: number;\n\tdeletions: number;\n};\n\nexport type TimelineChangedFileTreeNode =\n\t| {\n\t\t\tchildren: TimelineChangedFileTreeNode[];\n\t\t\tkind: \"directory\";\n\t\t\tname: string;\n\t\t\tpath: string;\n\t\t\tstat: TimelineChangedFileStat;\n\t }\n\t| {\n\t\t\tfile: TimelineChangedFile;\n\t\t\tkind: \"file\";\n\t\t\tname: string;\n\t\t\tpath: string;\n\t\t\tstat: TimelineChangedFileStat;\n\t };\n\ntype MutableDirectoryNode = {\n\tdirectories: Map<string, MutableDirectoryNode>;\n\tfiles: Extract<TimelineChangedFileTreeNode, { kind: \"file\" }>[];\n\tname: string;\n\tpath: string;\n\tstat: TimelineChangedFileStat;\n};\n\nconst SORT_LOCALE_OPTIONS: Intl.CollatorOptions = {\n\tnumeric: true,\n\tsensitivity: \"base\",\n};\n\nexport function changedFilesForFileChangeTurnItem(\n\titem: FileChangeTurnItem,\n): TimelineChangedFile[] {\n\treturn Object.entries(item.changes).map(([path, change]) => ({\n\t\tpath,\n\t\tchangeType: change.type,\n\t\t...statForFileChange(change),\n\t}));\n}\n\nexport function summarizeChangedFileStats(\n\tfiles: readonly TimelineChangedFile[],\n): TimelineChangedFileStat {\n\treturn files.reduce<TimelineChangedFileStat>(\n\t\t(total, file) => ({\n\t\t\tadditions: total.additions + file.additions,\n\t\t\tdeletions: total.deletions + file.deletions,\n\t\t}),\n\t\t{ additions: 0, deletions: 0 },\n\t);\n}\n\nexport function hasNonZeroChangedFileStat(\n\tstat: TimelineChangedFileStat,\n): boolean {\n\treturn stat.additions > 0 || stat.deletions > 0;\n}\n\nexport function buildChangedFilesTree(\n\tfiles: readonly TimelineChangedFile[],\n): TimelineChangedFileTreeNode[] {\n\tconst root: MutableDirectoryNode = {\n\t\tname: \"\",\n\t\tpath: \"\",\n\t\tstat: { additions: 0, deletions: 0 },\n\t\tdirectories: new Map(),\n\t\tfiles: [],\n\t};\n\n\tfor (const file of files) {\n\t\tconst segments = normalizePathSegments(file.path);\n\t\tif (segments.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst fileName = segments.at(-1);\n\t\tif (!fileName) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet currentDirectory = root;\n\t\tconst ancestors: MutableDirectoryNode[] = [root];\n\t\tfor (const segment of segments.slice(0, -1)) {\n\t\t\tconst nextPath = currentDirectory.path\n\t\t\t\t? `${currentDirectory.path}/${segment}`\n\t\t\t\t: segment;\n\t\t\tconst existing = currentDirectory.directories.get(segment);\n\t\t\tif (existing) {\n\t\t\t\tcurrentDirectory = existing;\n\t\t\t} else {\n\t\t\t\tconst created: MutableDirectoryNode = {\n\t\t\t\t\tname: segment,\n\t\t\t\t\tpath: nextPath,\n\t\t\t\t\tstat: { additions: 0, deletions: 0 },\n\t\t\t\t\tdirectories: new Map(),\n\t\t\t\t\tfiles: [],\n\t\t\t\t};\n\t\t\t\tcurrentDirectory.directories.set(segment, created);\n\t\t\t\tcurrentDirectory = created;\n\t\t\t}\n\t\t\tancestors.push(currentDirectory);\n\t\t}\n\n\t\tconst normalizedPath = segments.join(\"/\");\n\t\tcurrentDirectory.files.push({\n\t\t\tkind: \"file\",\n\t\t\tname: fileName,\n\t\t\tpath: normalizedPath,\n\t\t\tstat: {\n\t\t\t\tadditions: file.additions,\n\t\t\t\tdeletions: file.deletions,\n\t\t\t},\n\t\t\tfile: {\n\t\t\t\t...file,\n\t\t\t\tpath: normalizedPath,\n\t\t\t},\n\t\t});\n\n\t\tfor (const ancestor of ancestors) {\n\t\t\tancestor.stat.additions += file.additions;\n\t\t\tancestor.stat.deletions += file.deletions;\n\t\t}\n\t}\n\n\treturn toTreeNodes(root);\n}\n\nfunction normalizePathSegments(path: string): string[] {\n\treturn path\n\t\t.replaceAll(\"\\\\\", \"/\")\n\t\t.split(\"/\")\n\t\t.filter((segment) => segment.length > 0);\n}\n\nfunction compareByName(a: { name: string }, b: { name: string }): number {\n\treturn a.name.localeCompare(b.name, undefined, SORT_LOCALE_OPTIONS);\n}\n\nfunction toTreeNodes(\n\tdirectory: MutableDirectoryNode,\n): TimelineChangedFileTreeNode[] {\n\tconst directories = Array.from(directory.directories.values())\n\t\t.sort(compareByName)\n\t\t.map<TimelineChangedFileTreeNode>((subdirectory) =>\n\t\t\tcompactDirectoryNode({\n\t\t\t\tkind: \"directory\",\n\t\t\t\tname: subdirectory.name,\n\t\t\t\tpath: subdirectory.path,\n\t\t\t\tstat: {\n\t\t\t\t\tadditions: subdirectory.stat.additions,\n\t\t\t\t\tdeletions: subdirectory.stat.deletions,\n\t\t\t\t},\n\t\t\t\tchildren: toTreeNodes(subdirectory),\n\t\t\t}),\n\t\t);\n\tconst files = [...directory.files].sort(compareByName);\n\treturn [...directories, ...files];\n}\n\nfunction compactDirectoryNode(\n\tnode: Extract<TimelineChangedFileTreeNode, { kind: \"directory\" }>,\n): Extract<TimelineChangedFileTreeNode, { kind: \"directory\" }> {\n\tlet compactedNode = {\n\t\t...node,\n\t\tchildren: node.children.map((child) =>\n\t\t\tchild.kind === \"directory\" ? compactDirectoryNode(child) : child,\n\t\t),\n\t};\n\n\twhile (\n\t\tcompactedNode.children.length === 1 &&\n\t\tcompactedNode.children[0]?.kind === \"directory\"\n\t) {\n\t\tconst onlyChild = compactedNode.children[0];\n\t\tcompactedNode = {\n\t\t\tkind: \"directory\",\n\t\t\tname: `${compactedNode.name}/${onlyChild.name}`,\n\t\t\tpath: onlyChild.path,\n\t\t\tstat: onlyChild.stat,\n\t\t\tchildren: onlyChild.children,\n\t\t};\n\t}\n\n\treturn compactedNode;\n}\n\nfunction statForFileChange(change: FileChange): TimelineChangedFileStat {\n\tswitch (change.type) {\n\t\tcase \"add\":\n\t\t\treturn { additions: countContentLines(change.content), deletions: 0 };\n\t\tcase \"delete\":\n\t\t\treturn { additions: 0, deletions: countContentLines(change.content) };\n\t\tcase \"update\":\n\t\t\treturn statForUnifiedDiff(change.unified_diff);\n\t}\n}\n\nfunction countContentLines(content: string): number {\n\tif (content.length === 0) {\n\t\treturn 0;\n\t}\n\treturn content.replace(/\\r?\\n$/, \"\").split(/\\r?\\n/).length;\n}\n\nfunction statForUnifiedDiff(diff: string): TimelineChangedFileStat {\n\tlet additions = 0;\n\tlet deletions = 0;\n\tfor (const line of diff.split(/\\r?\\n/)) {\n\t\tif (line.startsWith(\"+++\") || line.startsWith(\"---\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"+\")) {\n\t\t\tadditions += 1;\n\t\t} else if (line.startsWith(\"-\")) {\n\t\t\tdeletions += 1;\n\t\t}\n\t}\n\treturn { additions, deletions };\n}\n","import {\n\tChevronRightIcon,\n\tFileIcon,\n\tFolderClosedIcon,\n\tFolderIcon,\n} from \"lucide-react\";\nimport { memo, useCallback, useMemo, useState } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../lib/utils\";\n\nimport {\n\tbuildChangedFilesTree,\n\thasNonZeroChangedFileStat,\n\tsummarizeChangedFileStats,\n\ttype TimelineChangedFile,\n\ttype TimelineChangedFileTreeNode,\n} from \"./ChangedFilesTree.logic\";\n\nconst EMPTY_DIRECTORY_OVERRIDES: Record<string, boolean> = {};\n\nexport const AssistantChangedFilesSection = memo(\n\tfunction AssistantChangedFilesSection({\n\t\tfiles,\n\t\tturnId,\n\t}: {\n\t\tfiles: readonly TimelineChangedFile[];\n\t\tturnId: string | null;\n\t}) {\n\t\tconst [allDirectoriesExpanded, setAllDirectoriesExpanded] = useState(true);\n\t\tconst summaryStat = useMemo(() => summarizeChangedFileStats(files), [files]);\n\n\t\tif (files.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"mt-2 rounded-lg border border-border/80 bg-card/45 p-2.5\"\n\t\t\t\tdata-assistant-changed-files=\"true\"\n\t\t\t\tdata-turn-id={turnId ?? undefined}\n\t\t\t>\n\t\t\t\t<div className=\"sticky top-2 z-10 mb-1.5 flex items-center justify-between gap-2 bg-background before:absolute before:inset-x-0 before:-top-2 before:h-2 before:bg-background before:content-['']\">\n\t\t\t\t\t<p className=\"text-[10px] uppercase tracking-[0.12em] text-muted-foreground/65\">\n\t\t\t\t\t\t<span>Changed files ({files.length})</span>\n\t\t\t\t\t\t{hasNonZeroChangedFileStat(summaryStat) ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<span className=\"mx-1\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t&middot;\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<DiffStatLabel\n\t\t\t\t\t\t\t\t\tadditions={summaryStat.additions}\n\t\t\t\t\t\t\t\t\tdeletions={summaryStat.deletions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</p>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tdata-scroll-anchor-ignore\n\t\t\t\t\t\tonClick={() => setAllDirectoriesExpanded((current) => !current)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{allDirectoriesExpanded ? \"Collapse all\" : \"Expand all\"}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<ChangedFilesTree\n\t\t\t\t\tkey={`changed-files-tree:${turnId ?? \"none\"}:${files.length}`}\n\t\t\t\t\tallDirectoriesExpanded={allDirectoriesExpanded}\n\t\t\t\t\tfiles={files}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nconst ChangedFilesTree = memo(function ChangedFilesTree({\n\tallDirectoriesExpanded,\n\tfiles,\n}: {\n\tallDirectoriesExpanded: boolean;\n\tfiles: readonly TimelineChangedFile[];\n}) {\n\tconst treeNodes = useMemo(() => buildChangedFilesTree(files), [files]);\n\tconst directoryPathsKey = useMemo(\n\t\t() => collectDirectoryPaths(treeNodes).join(\"\\u0000\"),\n\t\t[treeNodes],\n\t);\n\tconst expansionStateKey = `${allDirectoriesExpanded ? \"expanded\" : \"collapsed\"}\\u0000${directoryPathsKey}`;\n\tconst [directoryExpansionState, setDirectoryExpansionState] = useState<{\n\t\tkey: string;\n\t\toverrides: Record<string, boolean>;\n\t}>(() => ({\n\t\tkey: expansionStateKey,\n\t\toverrides: {},\n\t}));\n\tconst expandedDirectories =\n\t\tdirectoryExpansionState.key === expansionStateKey\n\t\t\t? directoryExpansionState.overrides\n\t\t\t: EMPTY_DIRECTORY_OVERRIDES;\n\n\tconst toggleDirectory = useCallback(\n\t\t(path: string) => {\n\t\t\tsetDirectoryExpansionState((current) => {\n\t\t\t\tconst nextOverrides =\n\t\t\t\t\tcurrent.key === expansionStateKey ? current.overrides : {};\n\t\t\t\treturn {\n\t\t\t\t\tkey: expansionStateKey,\n\t\t\t\t\toverrides: {\n\t\t\t\t\t\t...nextOverrides,\n\t\t\t\t\t\t[path]: !(nextOverrides[path] ?? allDirectoriesExpanded),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t[allDirectoriesExpanded, expansionStateKey],\n\t);\n\n\treturn (\n\t\t<div className=\"space-y-0.5\">\n\t\t\t{treeNodes.map((node) => (\n\t\t\t\t<ChangedFilesTreeNode\n\t\t\t\t\tkey={`${node.kind}:${node.path}`}\n\t\t\t\t\tallDirectoriesExpanded={allDirectoriesExpanded}\n\t\t\t\t\tdepth={0}\n\t\t\t\t\texpandedDirectories={expandedDirectories}\n\t\t\t\t\tnode={node}\n\t\t\t\t\tonToggleDirectory={toggleDirectory}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n});\n\nconst ChangedFilesTreeNode = memo(function ChangedFilesTreeNode({\n\tallDirectoriesExpanded,\n\tdepth,\n\texpandedDirectories,\n\tnode,\n\tonToggleDirectory,\n}: {\n\tallDirectoriesExpanded: boolean;\n\tdepth: number;\n\texpandedDirectories: Record<string, boolean>;\n\tnode: TimelineChangedFileTreeNode;\n\tonToggleDirectory: (path: string) => void;\n}) {\n\tconst leftPadding = 8 + depth * 14;\n\tif (node.kind === \"directory\") {\n\t\tconst isExpanded = expandedDirectories[node.path] ?? allDirectoriesExpanded;\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdata-scroll-anchor-ignore\n\t\t\t\t\tclassName=\"group flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left hover:bg-background/80\"\n\t\t\t\t\tstyle={{ paddingLeft: `${leftPadding}px` }}\n\t\t\t\t\tonClick={() => onToggleDirectory(node.path)}\n\t\t\t\t>\n\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"size-3.5 shrink-0 text-muted-foreground/70 transition-transform group-hover:text-foreground/80\",\n\t\t\t\t\t\t\tisExpanded ? \"rotate-90\" : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t\t{isExpanded ? (\n\t\t\t\t\t\t<FolderIcon className=\"size-3.5 shrink-0 text-muted-foreground/75\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FolderClosedIcon className=\"size-3.5 shrink-0 text-muted-foreground/75\" />\n\t\t\t\t\t)}\n\t\t\t\t\t<span className=\"truncate font-mono text-[11px] text-muted-foreground/90 group-hover:text-foreground/90\">\n\t\t\t\t\t\t{node.name}\n\t\t\t\t\t</span>\n\t\t\t\t\t{hasNonZeroChangedFileStat(node.stat) ? (\n\t\t\t\t\t\t<span className=\"ml-auto shrink-0 font-mono text-[10px] tabular-nums\">\n\t\t\t\t\t\t\t<DiffStatLabel\n\t\t\t\t\t\t\t\tadditions={node.stat.additions}\n\t\t\t\t\t\t\t\tdeletions={node.stat.deletions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</button>\n\t\t\t\t{isExpanded ? (\n\t\t\t\t\t<div className=\"space-y-0.5\">\n\t\t\t\t\t\t{node.children.map((child) => (\n\t\t\t\t\t\t\t<ChangedFilesTreeNode\n\t\t\t\t\t\t\t\tkey={`${child.kind}:${child.path}`}\n\t\t\t\t\t\t\t\tallDirectoriesExpanded={allDirectoriesExpanded}\n\t\t\t\t\t\t\t\tdepth={depth + 1}\n\t\t\t\t\t\t\t\texpandedDirectories={expandedDirectories}\n\t\t\t\t\t\t\t\tnode={child}\n\t\t\t\t\t\t\t\tonToggleDirectory={onToggleDirectory}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"group flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left hover:bg-background/80\"\n\t\t\tdata-changed-file-path={node.path}\n\t\t\tstyle={{ paddingLeft: `${leftPadding}px` }}\n\t\t\ttitle={node.path}\n\t\t>\n\t\t\t<span aria-hidden=\"true\" className=\"size-3.5 shrink-0\" />\n\t\t\t<FileIcon className=\"size-3.5 shrink-0 text-muted-foreground/70\" />\n\t\t\t<span className=\"truncate font-mono text-[11px] text-muted-foreground/80 group-hover:text-foreground/90\">\n\t\t\t\t{node.name}\n\t\t\t</span>\n\t\t\t{hasNonZeroChangedFileStat(node.stat) ? (\n\t\t\t\t<span className=\"ml-auto shrink-0 font-mono text-[10px] tabular-nums\">\n\t\t\t\t\t<DiffStatLabel\n\t\t\t\t\t\tadditions={node.stat.additions}\n\t\t\t\t\t\tdeletions={node.stat.deletions}\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n\nfunction DiffStatLabel({\n\tadditions,\n\tdeletions,\n}: {\n\tadditions: number;\n\tdeletions: number;\n}) {\n\treturn (\n\t\t<>\n\t\t\t<span className=\"text-success\">+{additions}</span>\n\t\t\t<span className=\"mx-0.5 text-muted-foreground/70\">/</span>\n\t\t\t<span className=\"text-destructive\">-{deletions}</span>\n\t\t</>\n\t);\n}\n\nfunction collectDirectoryPaths(\n\tnodes: readonly TimelineChangedFileTreeNode[],\n): string[] {\n\tconst paths: string[] = [];\n\tfor (const node of nodes) {\n\t\tif (node.kind !== \"directory\") {\n\t\t\tcontinue;\n\t\t}\n\t\tpaths.push(node.path);\n\t\tpaths.push(...collectDirectoryPaths(node.children));\n\t}\n\treturn paths;\n}\n","import * as React from \"react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\"z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:not-[[class^='h-']]:not-[[class*='_h-']]:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import type { RequestId } from \"../../../../codex-rs/app-server-protocol/schema/typescript\";\nimport type {\n\tToolRequestUserInputQuestion,\n\tToolRequestUserInputResponse,\n} from \"../../../../codex-rs/app-server-protocol/schema/typescript/v2\";\n\nexport type PendingUserInputQuestion = Omit<\n\tToolRequestUserInputQuestion,\n\t\"options\"\n> & {\n\toptions: NonNullable<ToolRequestUserInputQuestion[\"options\"]>;\n};\n\nexport type PendingUserInput = {\n\trequestId: RequestId;\n\tthreadId: string;\n\tturnId: string;\n\titemId: string;\n\tquestions: readonly PendingUserInputQuestion[];\n};\n\nexport interface PendingUserInputDraftAnswer {\n\tselectedOptionLabels?: string[];\n\tcustomAnswer?: string;\n}\n\nexport interface PendingUserInputProgress {\n\tactiveDraft: PendingUserInputDraftAnswer | undefined;\n\tactiveQuestion: PendingUserInputQuestion | null;\n\tansweredQuestionCount: number;\n\tcanAdvance: boolean;\n\tcustomAnswer: string;\n\tisComplete: boolean;\n\tisLastQuestion: boolean;\n\tquestionIndex: number;\n\tresolvedAnswer: string[] | null;\n\tselectedOptionLabels: string[];\n\tusingCustomAnswer: boolean;\n}\n\nexport function normalizePendingUserInputQuestion(\n\tquestion: ToolRequestUserInputQuestion,\n): PendingUserInputQuestion {\n\treturn {\n\t\t...question,\n\t\toptions: question.options ?? [],\n\t};\n}\n\nexport function derivePendingUserInputProgress(\n\tquestions: ReadonlyArray<PendingUserInputQuestion>,\n\tdraftAnswers: Record<string, PendingUserInputDraftAnswer>,\n\tquestionIndex: number,\n): PendingUserInputProgress {\n\tconst normalizedQuestionIndex =\n\t\tquestions.length === 0\n\t\t\t? 0\n\t\t\t: Math.max(0, Math.min(questionIndex, questions.length - 1));\n\tconst activeQuestion = questions[normalizedQuestionIndex] ?? null;\n\tconst activeDraft = activeQuestion\n\t\t? draftAnswers[activeQuestion.id]\n\t\t: undefined;\n\tconst selectedOptionLabels = normalizeSelectedOptionLabels(\n\t\tactiveDraft?.selectedOptionLabels,\n\t);\n\tconst customAnswer = activeDraft?.customAnswer ?? \"\";\n\tconst resolvedAnswer = activeQuestion\n\t\t? resolvePendingUserInputAnswer(activeQuestion, activeDraft)\n\t\t: null;\n\tconst answeredQuestionCount = countAnsweredPendingUserInputQuestions(\n\t\tquestions,\n\t\tdraftAnswers,\n\t);\n\tconst isLastQuestion =\n\t\tquestions.length === 0 ? true : normalizedQuestionIndex >= questions.length - 1;\n\n\treturn {\n\t\tactiveDraft,\n\t\tactiveQuestion,\n\t\tansweredQuestionCount,\n\t\tcanAdvance: Boolean(resolvedAnswer),\n\t\tcustomAnswer,\n\t\tisComplete: buildPendingUserInputAnswers(questions, draftAnswers) !== null,\n\t\tisLastQuestion,\n\t\tquestionIndex: normalizedQuestionIndex,\n\t\tresolvedAnswer,\n\t\tselectedOptionLabels,\n\t\tusingCustomAnswer: customAnswer.trim().length > 0,\n\t};\n}\n\nexport function togglePendingUserInputOptionSelection(\n\toptionLabel: string,\n): PendingUserInputDraftAnswer {\n\treturn {\n\t\tcustomAnswer: \"\",\n\t\tselectedOptionLabels: [optionLabel],\n\t};\n}\n\nexport function setPendingUserInputCustomAnswer(\n\tdraft: PendingUserInputDraftAnswer | undefined,\n\tcustomAnswer: string,\n): PendingUserInputDraftAnswer {\n\tconst selectedOptionLabels =\n\t\tcustomAnswer.trim().length > 0\n\t\t\t? undefined\n\t\t\t: normalizeSelectedOptionLabels(draft?.selectedOptionLabels);\n\n\treturn {\n\t\tcustomAnswer,\n\t\t...(selectedOptionLabels && selectedOptionLabels.length > 0\n\t\t\t? { selectedOptionLabels }\n\t\t\t: {}),\n\t};\n}\n\nexport function buildRequestUserInputResponse(\n\trequest: PendingUserInput,\n\tdraftAnswers: Record<string, PendingUserInputDraftAnswer>,\n): ToolRequestUserInputResponse {\n\treturn {\n\t\tanswers: Object.fromEntries(\n\t\t\trequest.questions.map((question) => [\n\t\t\t\tquestion.id,\n\t\t\t\t{\n\t\t\t\t\tanswers:\n\t\t\t\t\t\tresolvePendingUserInputAnswer(question, draftAnswers[question.id]) ?? [],\n\t\t\t\t},\n\t\t\t]),\n\t\t),\n\t};\n}\n\nexport function buildPendingUserInputAnswers(\n\tquestions: ReadonlyArray<PendingUserInputQuestion>,\n\tdraftAnswers: Record<string, PendingUserInputDraftAnswer>,\n): Record<string, string[]> | null {\n\tconst answers: Record<string, string[]> = {};\n\n\tfor (const question of questions) {\n\t\tconst answer = resolvePendingUserInputAnswer(\n\t\t\tquestion,\n\t\t\tdraftAnswers[question.id],\n\t\t);\n\t\tif (!answer) {\n\t\t\treturn null;\n\t\t}\n\t\tanswers[question.id] = answer;\n\t}\n\n\treturn answers;\n}\n\nexport function countAnsweredPendingUserInputQuestions(\n\tquestions: ReadonlyArray<PendingUserInputQuestion>,\n\tdraftAnswers: Record<string, PendingUserInputDraftAnswer>,\n): number {\n\treturn questions.reduce((count, question) => {\n\t\treturn resolvePendingUserInputAnswer(question, draftAnswers[question.id])\n\t\t\t? count + 1\n\t\t\t: count;\n\t}, 0);\n}\n\nexport function resolvePendingUserInputAnswer(\n\tquestion: PendingUserInputQuestion,\n\tdraft: PendingUserInputDraftAnswer | undefined,\n): string[] | null {\n\tconst customAnswer = normalizeDraftAnswer(draft?.customAnswer);\n\tif (customAnswer) {\n\t\treturn [customAnswer];\n\t}\n\n\tconst selectedOptionLabels = normalizeSelectedOptionLabels(\n\t\tdraft?.selectedOptionLabels,\n\t).filter((label) =>\n\t\tquestion.options.some((option) => option.label === label),\n\t);\n\n\treturn selectedOptionLabels.length > 0 ? selectedOptionLabels : null;\n}\n\nfunction normalizeDraftAnswer(value: string | undefined): string | null {\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeSelectedOptionLabels(value: string[] | undefined): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\n\tconst normalized = value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n\n\treturn Array.from(new Set(normalized));\n}\n","import { CheckIcon } from \"lucide-react\";\nimport { memo, useCallback, useEffect, useRef } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n\tPendingUserInput,\n\tPendingUserInputDraftAnswer,\n} from \"../../pendingUserInput\";\nexport {\n\tbuildRequestUserInputResponse,\n\tderivePendingUserInputProgress,\n\tsetPendingUserInputCustomAnswer,\n\ttogglePendingUserInputOptionSelection,\n\ttype PendingUserInputDraftAnswer,\n\ttype PendingUserInputProgress,\n} from \"../../pendingUserInput\";\nimport { derivePendingUserInputProgress } from \"../../pendingUserInput\";\n\nexport function ComposerPendingUserInputPanel({\n\tanswers,\n\tdisabled = false,\n\tisResponding = false,\n\tquestionIndex,\n\trequest,\n\tonAdvance,\n\tonDismiss,\n\tonToggleOption,\n}: {\n\tanswers: Record<string, PendingUserInputDraftAnswer>;\n\tdisabled?: boolean;\n\tisResponding?: boolean;\n\tquestionIndex: number;\n\trequest: PendingUserInput | null;\n\tonAdvance: () => void;\n\tonDismiss: () => void;\n\tonToggleOption: (questionId: string, optionLabel: string) => void;\n}) {\n\tif (!request || request.questions.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ComposerPendingUserInputCard\n\t\t\tkey={String(request.requestId)}\n\t\t\tanswers={answers}\n\t\t\tdisabled={disabled}\n\t\t\tisResponding={isResponding}\n\t\t\tquestionIndex={questionIndex}\n\t\t\trequest={request}\n\t\t\tonAdvance={onAdvance}\n\t\t\tonDismiss={onDismiss}\n\t\t\tonToggleOption={onToggleOption}\n\t\t/>\n\t);\n}\n\nconst ComposerPendingUserInputCard = memo(function ComposerPendingUserInputCard({\n\tanswers,\n\tdisabled,\n\tisResponding,\n\tquestionIndex,\n\trequest,\n\tonAdvance,\n\tonDismiss,\n\tonToggleOption,\n}: {\n\tanswers: Record<string, PendingUserInputDraftAnswer>;\n\tdisabled: boolean;\n\tisResponding: boolean;\n\tquestionIndex: number;\n\trequest: PendingUserInput;\n\tonAdvance: () => void;\n\tonDismiss: () => void;\n\tonToggleOption: (questionId: string, optionLabel: string) => void;\n}) {\n\tconst progress = derivePendingUserInputProgress(\n\t\trequest.questions,\n\t\tanswers,\n\t\tquestionIndex,\n\t);\n\tconst activeQuestion = progress.activeQuestion;\n\tconst autoAdvanceTimerRef = useRef<number | null>(null);\n\tconst onAdvanceRef = useRef(onAdvance);\n\n\tuseEffect(() => {\n\t\tonAdvanceRef.current = onAdvance;\n\t}, [onAdvance]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (autoAdvanceTimerRef.current !== null) {\n\t\t\t\twindow.clearTimeout(autoAdvanceTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst selectOption = useCallback(\n\t\t(questionId: string, optionLabel: string) => {\n\t\t\tif (disabled || isResponding) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonToggleOption(questionId, optionLabel);\n\t\t\tif (autoAdvanceTimerRef.current !== null) {\n\t\t\t\twindow.clearTimeout(autoAdvanceTimerRef.current);\n\t\t\t}\n\t\t\tautoAdvanceTimerRef.current = window.setTimeout(() => {\n\t\t\t\tautoAdvanceTimerRef.current = null;\n\t\t\t\tonAdvanceRef.current();\n\t\t\t}, 200);\n\t\t},\n\t\t[disabled, isResponding, onToggleOption],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!activeQuestion || disabled || isResponding) {\n\t\t\treturn;\n\t\t}\n\t\tconst question = activeQuestion;\n\n\t\tfunction handleKeyDown(event: KeyboardEvent) {\n\t\t\tif (event.metaKey || event.ctrlKey || event.altKey) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst target = event.target;\n\t\t\tif (\n\t\t\t\ttarget instanceof HTMLInputElement ||\n\t\t\t\ttarget instanceof HTMLTextAreaElement\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\ttarget instanceof HTMLElement &&\n\t\t\t\ttarget.closest('[contenteditable]:not([contenteditable=\"false\"])')\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst digit = Number.parseInt(event.key, 10);\n\t\t\tif (Number.isNaN(digit) || digit < 1 || digit > 9) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst optionIndex = digit - 1;\n\t\t\tconst option = question.options[optionIndex];\n\t\t\tif (!option) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tselectOption(question.id, option.label);\n\t\t}\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => document.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [activeQuestion, disabled, isResponding, selectOption]);\n\n\tif (!activeQuestion) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"border-b px-4 py-3 sm:px-5\">\n\t\t\t<div className=\"flex items-center justify-between gap-3\">\n\t\t\t\t<div className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t\t{request.questions.length > 1 ? (\n\t\t\t\t\t\t<span className=\"flex h-5 items-center rounded-md bg-muted/60 px-1.5 text-[10px] font-medium tabular-nums text-muted-foreground/60\">\n\t\t\t\t\t\t\t{progress.questionIndex + 1}/{request.questions.length}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<span className=\"truncate text-[11px] font-semibold tracking-widest text-muted-foreground/50 uppercase\">\n\t\t\t\t\t\t{activeQuestion.header}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<span className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t{progress.answeredQuestionCount} of {request.questions.length}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t\t<p className=\"mt-1.5 text-foreground/90 text-sm\">\n\t\t\t\t{activeQuestion.question}\n\t\t\t</p>\n\t\t\t<div className=\"mt-3 space-y-1\">\n\t\t\t\t{activeQuestion.options.map((option, index) => {\n\t\t\t\t\tconst isSelected = progress.selectedOptionLabels.includes(option.label);\n\t\t\t\t\tconst shortcutKey = index < 9 ? index + 1 : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={`${activeQuestion.id}:${option.label}`}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tdisabled={disabled || isResponding}\n\t\t\t\t\t\t\ttitle={option.description}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"group flex w-full items-center gap-3 rounded-lg border px-3 py-2 text-left transition-all duration-150\",\n\t\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t\t? \"border-primary/40 bg-primary/8 text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"border-transparent bg-muted/20 text-foreground/80 hover:border-border/40 hover:bg-muted/40\",\n\t\t\t\t\t\t\t\t(disabled || isResponding) && \"cursor-not-allowed opacity-50\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={() => selectOption(activeQuestion.id, option.label)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shortcutKey !== null ? (\n\t\t\t\t\t\t\t\t<kbd\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex size-5 shrink-0 items-center justify-center rounded text-[11px] font-medium tabular-nums transition-colors duration-150\",\n\t\t\t\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t\t\t\t? \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t\t\t\t\t: \"bg-muted/40 text-muted-foreground/50 group-hover:bg-muted/60 group-hover:text-muted-foreground/70\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{shortcutKey}\n\t\t\t\t\t\t\t\t</kbd>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium\">{option.label}</span>\n\t\t\t\t\t\t\t\t{option.description && option.description !== option.label ? (\n\t\t\t\t\t\t\t\t\t<span className=\"ml-2 text-muted-foreground/55 text-xs\">\n\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{isSelected ? (\n\t\t\t\t\t\t\t\t<CheckIcon className=\"size-3.5 shrink-0 text-primary\" />\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<div className=\"mt-3 flex items-center justify-end\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tdisabled={disabled || isResponding}\n\t\t\t\t\tonClick={onDismiss}\n\t\t\t\t>\n\t\t\t\t\tDismiss\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","export const PROJECT_MENTION_SIGIL = \"@\";\nexport const LEGACY_PROJECT_MENTION_SIGIL = \"$\";\nexport const SKILL_MENTION_SIGIL = \"$\";\nexport const TOOL_MENTION_SIGIL = PROJECT_MENTION_SIGIL;\nexport const PLUGIN_TEXT_MENTION_SIGIL = PROJECT_MENTION_SIGIL;\n\nexport function isMentionNameChar(byte: number): boolean {\n\treturn (\n\t\t(byte >= 0x30 && byte <= 0x39) ||\n\t\t(byte >= 0x41 && byte <= 0x5a) ||\n\t\t(byte >= 0x61 && byte <= 0x7a) ||\n\t\tbyte === 0x5f ||\n\t\tbyte === 0x2d\n\t);\n}\n\nexport function mentionToken(name: string): string {\n\treturn `${PROJECT_MENTION_SIGIL}${name}`;\n}\n\nexport function legacyMentionToken(name: string): string {\n\treturn `${LEGACY_PROJECT_MENTION_SIGIL}${name}`;\n}\n\nexport function skillToken(name: string): string {\n\treturn `${SKILL_MENTION_SIGIL}${name}`;\n}\n","import { isMentionNameChar, mentionToken } from \"./mention-syntax\";\n\nexport type MentionBinding = {\n\tmention: string;\n\tpath: string;\n};\n\nexport type MentionBindingRange = {\n\tbinding: MentionBinding;\n\trange: { end: number; start: number };\n};\n\nexport function normalizeMentionBindingsForText(\n\ttext: string,\n\tbindings: readonly MentionBinding[],\n): MentionBinding[] {\n\treturn mentionBindingRangesForText(text, bindings).map((item) => item.binding);\n}\n\nexport function mentionBindingRangesForText(\n\ttext: string,\n\tbindings: readonly MentionBinding[],\n): MentionBindingRange[] {\n\tconst ranges: MentionBindingRange[] = [];\n\tlet scanFrom = 0;\n\n\tfor (const binding of bindings) {\n\t\tconst token = mentionToken(binding.mention);\n\t\tconst range = findNextMentionTokenRange(text, token, scanFrom);\n\t\tif (!range) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tranges.push({ binding, range });\n\t\tscanFrom = range.end;\n\t}\n\n\treturn ranges;\n}\n\nexport function mentionBindingsAfterReplacement(input: {\n\tcurrentBindings: readonly MentionBinding[];\n\tinsertedBinding: MentionBinding;\n\tnextText: string;\n\treplacement: string;\n\trangeEnd: number;\n\trangeStart: number;\n\ttext: string;\n}): MentionBinding[] {\n\tconst replacedRange = {\n\t\tend: Math.max(input.rangeEnd, input.rangeStart),\n\t\tstart: input.rangeStart,\n\t};\n\tconst delta =\n\t\tinput.replacement.length - (replacedRange.end - replacedRange.start);\n\tconst ranges = mentionBindingRangesForText(\n\t\tinput.text,\n\t\tinput.currentBindings,\n\t).filter(\n\t\t(item) =>\n\t\t\titem.range.end <= replacedRange.start ||\n\t\t\titem.range.start >= replacedRange.end,\n\t);\n\tconst nextRanges = [\n\t\t...ranges.map((item) => ({\n\t\t\tbinding: item.binding,\n\t\t\tstart:\n\t\t\t\titem.range.start >= replacedRange.end\n\t\t\t\t\t? item.range.start + delta\n\t\t\t\t\t: item.range.start,\n\t\t})),\n\t\t{\n\t\t\tbinding: input.insertedBinding,\n\t\t\tstart: replacedRange.start,\n\t\t},\n\t].sort((left, right) => left.start - right.start);\n\n\treturn normalizeMentionBindingsForText(\n\t\tinput.nextText,\n\t\tnextRanges.map((item) => item.binding),\n\t);\n}\n\nexport function findNextMentionTokenRange(\n\ttext: string,\n\ttoken: string,\n\tfrom: number,\n): { end: number; start: number } | null {\n\tlet index = Math.max(0, from);\n\n\twhile (index < text.length) {\n\t\tconst start = text.indexOf(token, index);\n\t\tif (start < 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst end = start + token.length;\n\t\tif (isTokenBoundary(text, start, end)) {\n\t\t\treturn { end, start };\n\t\t}\n\n\t\tindex = end;\n\t}\n\n\treturn null;\n}\n\nfunction isTokenBoundary(text: string, start: number, end: number): boolean {\n\tconst before = start > 0 ? text.charCodeAt(start - 1) : null;\n\tconst after = end < text.length ? text.charCodeAt(end) : null;\n\n\treturn (\n\t\t(before === null || !isMentionNameChar(before)) &&\n\t\t(after === null || !isMentionNameChar(after))\n\t);\n}\n","import type { TextElement } from \"../../../../../../codex-rs/core/src\";\n\nimport {\n\tfindNextMentionTokenRange,\n\ttype MentionBinding,\n} from \"./mention-bindings\";\nimport {\n\tLEGACY_PROJECT_MENTION_SIGIL,\n\tPROJECT_MENTION_SIGIL,\n\tisMentionNameChar,\n\tmentionToken,\n} from \"./mention-syntax\";\n\nexport type LinkedMention = {\n\tmention: string;\n\tpath: string;\n};\n\nexport type DecodedHistoryText = {\n\tmentions: LinkedMention[];\n\ttext: string;\n};\n\nexport type LinkedMentionRange = {\n\tend: number;\n\tmention: string;\n\tpath: string;\n\tplaceholder: string;\n\tstart: number;\n};\n\nexport function encodeHistoryMentions(\n\ttext: string,\n\tbindings: readonly MentionBinding[],\n): string {\n\tconst ranges = mentionRangesForEncoding(text, bindings);\n\tif (ranges.length === 0) {\n\t\treturn text;\n\t}\n\n\tlet encoded = \"\";\n\tlet lastIndex = 0;\n\n\tfor (const range of ranges) {\n\t\tencoded += text.slice(lastIndex, range.start);\n\t\tencoded += `[${mentionToken(range.binding.mention)}](${range.binding.path})`;\n\t\tlastIndex = range.end;\n\t}\n\n\tencoded += text.slice(lastIndex);\n\n\treturn encoded;\n}\n\nexport function decodeHistoryMentions(text: string): DecodedHistoryText {\n\tconst mentions: LinkedMention[] = [];\n\tlet decoded = \"\";\n\tlet lastIndex = 0;\n\n\tfor (const link of findLinkedMentions(text)) {\n\t\tdecoded += text.slice(lastIndex, link.start);\n\t\tdecoded += link.placeholder;\n\t\tmentions.push({\n\t\t\tmention: link.mention,\n\t\t\tpath: link.path,\n\t\t});\n\t\tlastIndex = link.end;\n\t}\n\n\tdecoded += text.slice(lastIndex);\n\n\treturn { mentions, text: decoded };\n}\n\nexport function findLinkedMentions(text: string): LinkedMentionRange[] {\n\tconst links: LinkedMentionRange[] = [];\n\tlet cursor = 0;\n\n\twhile (cursor < text.length) {\n\t\tconst start = text.indexOf(\"[\", cursor);\n\t\tif (start < 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst link = parseLinkedToolMention(text, start);\n\t\tif (link) {\n\t\t\tlinks.push(link);\n\t\t\tcursor = link.end;\n\t\t\tcontinue;\n\t\t}\n\n\t\tcursor = start + 1;\n\t}\n\n\treturn links;\n}\n\nexport function parseLinkedToolMention(\n\ttext: string,\n\tstart: number,\n): LinkedMentionRange | null {\n\tif (text[start] !== \"[\") {\n\t\treturn null;\n\t}\n\n\tconst labelStart = start + 1;\n\t\tconst sigil = text[labelStart];\n\t\tif (\n\t\t\tsigil !== PROJECT_MENTION_SIGIL &&\n\t\t\tsigil !== LEGACY_PROJECT_MENTION_SIGIL\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\tlet labelEnd = labelStart + 1;\n\twhile (labelEnd < text.length && text[labelEnd] !== \"]\") {\n\t\tconst code = text.charCodeAt(labelEnd);\n\t\tif (!isMentionNameChar(code)) {\n\t\t\treturn null;\n\t\t}\n\t\tlabelEnd += 1;\n\t}\n\n\tif (\n\t\tlabelEnd === labelStart + 1 ||\n\t\ttext[labelEnd] !== \"]\" ||\n\t\ttext[labelEnd + 1] !== \"(\"\n\t) {\n\t\treturn null;\n\t}\n\n\tconst pathStart = labelEnd + 2;\n\tconst pathEnd = text.indexOf(\")\", pathStart);\n\tif (pathEnd < 0) {\n\t\treturn null;\n\t}\n\n\tconst path = text.slice(pathStart, pathEnd);\n\tif (!isToolMentionPath(path)) {\n\t\treturn null;\n\t}\n\n\tconst mention = text.slice(labelStart + 1, labelEnd);\n\tconst placeholder = mentionToken(mention);\n\n\treturn {\n\t\tend: pathEnd + 1,\n\t\tmention,\n\t\tpath,\n\t\tplaceholder,\n\t\tstart,\n\t};\n}\n\nexport function linkedMentionTextElements(text: string): TextElement[] {\n\treturn findLinkedMentions(text).map((link) => ({\n\t\tbyte_range: {\n\t\t\tstart: utf8ByteLength(text.slice(0, link.start)),\n\t\t\tend: utf8ByteLength(text.slice(0, link.end)),\n\t\t},\n\t\tplaceholder: link.placeholder,\n\t}));\n}\n\nfunction mentionRangesForEncoding(\n\ttext: string,\n\tbindings: readonly MentionBinding[],\n): { binding: MentionBinding; end: number; start: number }[] {\n\tconst ranges: { binding: MentionBinding; end: number; start: number }[] = [];\n\tlet scanFrom = 0;\n\n\tfor (const binding of bindings) {\n\t\tconst token = mentionToken(binding.mention);\n\t\tconst range = findNextMentionTokenRange(text, token, scanFrom);\n\t\tif (!range) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tranges.push({ binding, ...range });\n\t\tscanFrom = range.end;\n\t}\n\n\treturn ranges;\n}\n\nfunction isToolMentionPath(path: string): boolean {\n\treturn (\n\t\tpath.startsWith(\"app://\") ||\n\t\tpath.startsWith(\"mcp://\") ||\n\t\tpath.startsWith(\"plugin://\") ||\n\t\tpath.startsWith(\"skill://\") ||\n\t\tpath.endsWith(\"/SKILL.md\")\n\t);\n}\n\nfunction utf8ByteLength(text: string): number {\n\treturn new TextEncoder().encode(text).length;\n}\n","import type { UserInput } from \"../../../../../../codex-rs/core/src\";\n\nimport {\n\ttype MentionBinding,\n\tnormalizeMentionBindingsForText,\n} from \"./mention-bindings\";\nimport {\n\tdecodeHistoryMentions,\n\tencodeHistoryMentions,\n\tlinkedMentionTextElements,\n} from \"./mention-codec\";\n\nexport type ComposerPromptSnapshot = {\n\tmentionBindings: MentionBinding[];\n\ttext: string;\n\ttextElements: ReturnType<typeof linkedMentionTextElements>;\n};\n\nexport function createComposerPromptSnapshot(\n\ttext: string,\n\tmentionBindings: readonly MentionBinding[] = [],\n): ComposerPromptSnapshot {\n\tconst normalizedBindings = normalizeMentionBindingsForText(text, mentionBindings);\n\n\treturn {\n\t\tmentionBindings: normalizedBindings,\n\t\ttext,\n\t\ttextElements: linkedMentionTextElements(\n\t\t\tencodeHistoryMentions(text, normalizedBindings),\n\t\t),\n\t};\n}\n\nexport type PrefilledComposerState = {\n\tmentionBindings?: MentionBinding[];\n\tmessage: string;\n};\n\nexport function prefillComposerState(\n\tinput: PrefilledComposerState,\n): ComposerPromptSnapshot {\n\tconst decoded = decodeHistoryMentions(input.message.trim());\n\tconst mentionBindings = [\n\t\t...decoded.mentions,\n\t\t...(input.mentionBindings ?? []),\n\t];\n\n\treturn createComposerPromptSnapshot(decoded.text, mentionBindings);\n}\n\nexport function composerSnapshotUserInputItems(\n\tsnapshot: ComposerPromptSnapshot,\n): UserInput[] {\n\tconst text = snapshot.text.trim();\n\tif (!text) {\n\t\treturn [];\n\t}\n\n\tconst mentionBindings = normalizeMentionBindingsForText(\n\t\ttext,\n\t\tsnapshot.mentionBindings,\n\t);\n\tconst encodedText = encodeHistoryMentions(text, mentionBindings);\n\tconst textElements = linkedMentionTextElements(encodedText);\n\n\treturn [\n\t\t{\n\t\t\ttype: \"text\",\n\t\t\ttext: encodedText,\n\t\t\t...(textElements.length > 0 ? { text_elements: textElements } : {}),\n\t\t},\n\t];\n}\n","// Portions adapted from T3 Code's composer trigger logic.\n// T3 Code is MIT licensed, copyright (c) 2026 T3 Tools Inc.\n\nimport { PROJECT_MENTION_SIGIL, SKILL_MENTION_SIGIL } from \"./mention-syntax\";\n\nexport type ComposerTriggerKind = \"path\" | \"skill\" | \"slash-command\";\n\nexport type BuiltInComposerSlashCommand = \"default\" | \"model\" | \"plan\";\n\nexport type ComposerSlashCommand = BuiltInComposerSlashCommand | (string & {});\n\nexport type ComposerTrigger = {\n\tkind: ComposerTriggerKind;\n\tquery: string;\n\trangeEnd: number;\n\trangeStart: number;\n};\n\nfunction clampCursor(text: string, cursor: number): number {\n\tif (!Number.isFinite(cursor)) {\n\t\treturn text.length;\n\t}\n\n\treturn Math.max(0, Math.min(text.length, Math.floor(cursor)));\n}\n\nfunction isWhitespace(char: string): boolean {\n\treturn char === \" \" || char === \"\\n\" || char === \"\\t\" || char === \"\\r\";\n}\n\nfunction tokenStartForCursor(text: string, cursor: number): number {\n\tlet index = cursor - 1;\n\n\twhile (index >= 0 && !isWhitespace(text[index] ?? \"\")) {\n\t\tindex -= 1;\n\t}\n\n\treturn index + 1;\n}\n\nexport function detectComposerTrigger(\n\ttext: string,\n\tcursorInput: number,\n): ComposerTrigger | null {\n\tconst cursor = clampCursor(text, cursorInput);\n\tconst lineStart = text.lastIndexOf(\"\\n\", Math.max(0, cursor - 1)) + 1;\n\tconst linePrefix = text.slice(lineStart, cursor);\n\n\tif (linePrefix.startsWith(\"/\")) {\n\t\tconst commandMatch = /^\\/(\\S*)$/.exec(linePrefix);\n\t\tif (commandMatch) {\n\t\t\treturn {\n\t\t\t\tkind: \"slash-command\",\n\t\t\t\tquery: commandMatch[1] ?? \"\",\n\t\t\t\trangeEnd: cursor,\n\t\t\t\trangeStart: lineStart,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst tokenStart = tokenStartForCursor(text, cursor);\n\tconst token = text.slice(tokenStart, cursor);\n\n\tif (token.startsWith(SKILL_MENTION_SIGIL)) {\n\t\treturn {\n\t\t\tkind: \"skill\",\n\t\t\tquery: token.slice(SKILL_MENTION_SIGIL.length),\n\t\t\trangeEnd: cursor,\n\t\t\trangeStart: tokenStart,\n\t\t};\n\t}\n\n\tif (!token.startsWith(PROJECT_MENTION_SIGIL)) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tkind: \"path\",\n\t\tquery: token.slice(PROJECT_MENTION_SIGIL.length),\n\t\trangeEnd: cursor,\n\t\trangeStart: tokenStart,\n\t};\n}\n\nexport function replaceTextRange(\n\ttext: string,\n\trangeStart: number,\n\trangeEnd: number,\n\treplacement: string,\n): { cursor: number; text: string } {\n\tconst start = clampCursor(text, rangeStart);\n\tconst end = clampCursor(text, Math.max(rangeEnd, start));\n\tconst nextText = `${text.slice(0, start)}${replacement}${text.slice(end)}`;\n\n\treturn {\n\t\tcursor: start + replacement.length,\n\t\ttext: nextText,\n\t};\n}\n\nexport function parseStandaloneComposerSlashCommand(\n\ttext: string,\n): ComposerSlashCommand | null {\n\treturn text.trim().match(/^\\/([a-z][a-z0-9-]*)$/)?.[1] ?? null;\n}\n","export type RankedSearchResult<T> = {\n\titem: T;\n\tscore: number;\n\ttieBreaker: string;\n};\n\nexport function normalizeSearchQuery(\n\tinput: string,\n\toptions?: {\n\t\ttrimLeadingPattern?: RegExp;\n\t},\n): string {\n\tconst trimmed = input.trim();\n\tif (!trimmed) {\n\t\treturn \"\";\n\t}\n\treturn options?.trimLeadingPattern\n\t\t? trimmed.replace(options.trimLeadingPattern, \"\").toLowerCase()\n\t\t: trimmed.toLowerCase();\n}\n\nexport function scoreSubsequenceMatch(\n\tvalue: string,\n\tquery: string,\n): number | null {\n\tif (!query) {\n\t\treturn 0;\n\t}\n\n\tlet queryIndex = 0;\n\tlet firstMatchIndex = -1;\n\tlet previousMatchIndex = -1;\n\tlet gapPenalty = 0;\n\n\tfor (let valueIndex = 0; valueIndex < value.length; valueIndex += 1) {\n\t\tif (value[valueIndex] !== query[queryIndex]) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (firstMatchIndex === -1) {\n\t\t\tfirstMatchIndex = valueIndex;\n\t\t}\n\t\tif (previousMatchIndex !== -1) {\n\t\t\tgapPenalty += valueIndex - previousMatchIndex - 1;\n\t\t}\n\n\t\tpreviousMatchIndex = valueIndex;\n\t\tqueryIndex += 1;\n\t\tif (queryIndex === query.length) {\n\t\t\tconst spanPenalty = valueIndex - firstMatchIndex + 1 - query.length;\n\t\t\tconst lengthPenalty = Math.min(64, value.length - query.length);\n\t\t\treturn (\n\t\t\t\tfirstMatchIndex * 2 +\n\t\t\t\tgapPenalty * 3 +\n\t\t\t\tspanPenalty +\n\t\t\t\tlengthPenalty\n\t\t\t);\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction lengthPenalty(value: string, query: string): number {\n\treturn Math.min(64, Math.max(0, value.length - query.length));\n}\n\nfunction findBoundaryMatchIndex(\n\tvalue: string,\n\tquery: string,\n\tboundaryMarkers: readonly string[],\n): number | null {\n\tlet bestIndex: number | null = null;\n\n\tfor (const marker of boundaryMarkers) {\n\t\tconst index = value.indexOf(`${marker}${query}`);\n\t\tif (index === -1) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst matchIndex = index + marker.length;\n\t\tif (bestIndex === null || matchIndex < bestIndex) {\n\t\t\tbestIndex = matchIndex;\n\t\t}\n\t}\n\n\treturn bestIndex;\n}\n\n/**\n * Scores how well `value` matches `query` using tiered match strategies.\n *\n * Expects pre-normalized inputs: both `value` and `query` must already be\n * trimmed and lowercased via `normalizeSearchQuery`.\n */\nexport function scoreQueryMatch(input: {\n\tvalue: string;\n\tquery: string;\n\texactBase: number;\n\tprefixBase?: number;\n\tboundaryBase?: number;\n\tincludesBase?: number;\n\tfuzzyBase?: number;\n\tboundaryMarkers?: readonly string[];\n}): number | null {\n\tconst { value, query } = input;\n\n\tif (!value || !query) {\n\t\treturn null;\n\t}\n\n\tif (value === query) {\n\t\treturn input.exactBase;\n\t}\n\n\tif (input.prefixBase !== undefined && value.startsWith(query)) {\n\t\treturn input.prefixBase + lengthPenalty(value, query);\n\t}\n\n\tif (input.boundaryBase !== undefined) {\n\t\tconst boundaryIndex = findBoundaryMatchIndex(\n\t\t\tvalue,\n\t\t\tquery,\n\t\t\tinput.boundaryMarkers ?? [\" \", \"-\", \"_\", \"/\"],\n\t\t);\n\t\tif (boundaryIndex !== null) {\n\t\t\treturn input.boundaryBase + boundaryIndex * 2 + lengthPenalty(value, query);\n\t\t}\n\t}\n\n\tif (input.includesBase !== undefined) {\n\t\tconst includesIndex = value.indexOf(query);\n\t\tif (includesIndex !== -1) {\n\t\t\treturn input.includesBase + includesIndex * 2 + lengthPenalty(value, query);\n\t\t}\n\t}\n\n\tif (input.fuzzyBase !== undefined) {\n\t\tconst fuzzyScore = scoreSubsequenceMatch(value, query);\n\t\tif (fuzzyScore !== null) {\n\t\t\treturn input.fuzzyBase + fuzzyScore;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function compareRankedSearchResults<T>(\n\tleft: RankedSearchResult<T>,\n\tright: RankedSearchResult<T>,\n): number {\n\tconst scoreDelta = left.score - right.score;\n\tif (scoreDelta !== 0) {\n\t\treturn scoreDelta;\n\t}\n\treturn left.tieBreaker.localeCompare(right.tieBreaker);\n}\n\nfunction findInsertionIndex<T>(\n\trankedEntries: RankedSearchResult<T>[],\n\tcandidate: RankedSearchResult<T>,\n): number {\n\tlet low = 0;\n\tlet high = rankedEntries.length;\n\n\twhile (low < high) {\n\t\tconst middle = low + Math.floor((high - low) / 2);\n\t\tconst current = rankedEntries[middle];\n\t\tif (!current) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (compareRankedSearchResults(candidate, current) < 0) {\n\t\t\thigh = middle;\n\t\t} else {\n\t\t\tlow = middle + 1;\n\t\t}\n\t}\n\n\treturn low;\n}\n\nexport function insertRankedSearchResult<T>(\n\trankedEntries: RankedSearchResult<T>[],\n\tcandidate: RankedSearchResult<T>,\n\tlimit: number,\n): void {\n\tif (limit <= 0) {\n\t\treturn;\n\t}\n\n\tconst insertionIndex = findInsertionIndex(rankedEntries, candidate);\n\tif (insertionIndex >= limit) {\n\t\treturn;\n\t}\n\n\trankedEntries.splice(insertionIndex, 0, candidate);\n\tif (rankedEntries.length > limit) {\n\t\trankedEntries.pop();\n\t}\n}\n","import {\n\tinsertRankedSearchResult,\n\tnormalizeSearchQuery,\n\tscoreQueryMatch,\n} from \"../../lib/searchRanking\";\n\nimport type { ComposerCommandItem } from \"./ComposerCommandMenu\";\n\ntype SlashCommandItem = Extract<ComposerCommandItem, { type: \"slash-command\" }>;\n\nfunction scoreSlashCommandItem(\n\titem: SlashCommandItem,\n\tquery: string,\n): number | null {\n\tconst primaryValue = item.command.toLowerCase();\n\tconst description = item.description.toLowerCase();\n\n\tconst scores = [\n\t\tscoreQueryMatch({\n\t\t\tvalue: primaryValue,\n\t\t\tquery,\n\t\t\texactBase: 0,\n\t\t\tprefixBase: 2,\n\t\t\tboundaryBase: 4,\n\t\t\tincludesBase: 6,\n\t\t\tfuzzyBase: 100,\n\t\t\tboundaryMarkers: [\"-\", \"_\", \"/\"],\n\t\t}),\n\t\tscoreQueryMatch({\n\t\t\tvalue: description,\n\t\t\tquery,\n\t\t\texactBase: 20,\n\t\t\tprefixBase: 22,\n\t\t\tboundaryBase: 24,\n\t\t\tincludesBase: 26,\n\t\t}),\n\t].filter((score): score is number => score !== null);\n\n\tif (scores.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn Math.min(...scores);\n}\n\nexport function searchSlashCommandItems(\n\titems: ReadonlyArray<SlashCommandItem>,\n\tquery: string,\n): SlashCommandItem[] {\n\tconst normalizedQuery = normalizeSearchQuery(query, {\n\t\ttrimLeadingPattern: /^\\/+/,\n\t});\n\tif (!normalizedQuery) {\n\t\treturn [...items];\n\t}\n\n\tconst ranked: Array<{\n\t\titem: SlashCommandItem;\n\t\tscore: number;\n\t\ttieBreaker: string;\n\t}> = [];\n\n\tfor (const item of items) {\n\t\tconst score = scoreSlashCommandItem(item, normalizedQuery);\n\t\tif (score === null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tinsertRankedSearchResult(\n\t\t\tranked,\n\t\t\t{\n\t\t\t\titem,\n\t\t\t\tscore,\n\t\t\t\ttieBreaker: `0\\u0000${item.command}`,\n\t\t\t},\n\t\t\tNumber.POSITIVE_INFINITY,\n\t\t);\n\t}\n\n\treturn ranked.map((entry) => entry.item);\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { CheckIcon, SearchIcon } from \"lucide-react\"\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"flex size-full flex-col overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"top-1/3 translate-y-0 overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-10 items-center gap-2 border-b px-3\"\n >\n <SearchIcon aria-hidden=\"true\" className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"h-9 w-full bg-transparent text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn(\"py-6 text-center text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"group/command-item relative flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto opacity-0 group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n}\n","import {\n\tArchiveIcon,\n\tBotIcon,\n\tBoxIcon,\n\tMessageSquarePlusIcon,\n\tSparklesIcon,\n\tUserRoundIcon,\n} from \"lucide-react\";\nimport { memo, useLayoutEffect, useMemo, useRef } from \"react\";\n\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandGroup,\n\tCommandItem,\n\tCommandList,\n\tCommandSeparator,\n} from \"../ui/command\";\nimport { cn } from \"../../lib/utils\";\n\nimport type { ComposerSlashCommand, ComposerTriggerKind } from \"./composer-logic\";\nimport type { ComposerMentionTarget } from \"./composer-mention-targets\";\n\nexport type ComposerCommandItem =\n\t| {\n\t\t\tdescription: string;\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\tmention: ComposerMentionTarget;\n\t\t\tpath: string;\n\t\t\ttype: \"path\";\n\t }\n\t| {\n\t\t\tcommand: ComposerSlashCommand;\n\t\t\tdescription: string;\n\t\t\tdisabled?: boolean;\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\ttype: \"slash-command\";\n\t\t\tunavailableReason?: string;\n\t }\n\t| {\n\t\t\tdescription: string;\n\t\t\tdisabled?: boolean;\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\tname: string;\n\t\t\ttype: \"skill\";\n\t\t\tunavailableReason?: string;\n\t };\n\ntype ComposerCommandGroup = {\n\tid: string;\n\titems: ComposerCommandItem[];\n\tlabel: string | null;\n};\n\nexport const ComposerCommandMenu = memo(function ComposerCommandMenu(props: {\n\tactiveItemId: string | null;\n\temptyStateText?: string;\n\tisLoading?: boolean;\n\titems: ComposerCommandItem[];\n\ttriggerKind: ComposerTriggerKind | null;\n\tonHighlightedItemChange: (itemId: string | null) => void;\n\tonSelect: (item: ComposerCommandItem) => void;\n}) {\n\tconst listRef = useRef<HTMLDivElement | null>(null);\n\tconst groups = useMemo(\n\t\t() => groupCommandItems(props.items, props.triggerKind),\n\t\t[props.items, props.triggerKind],\n\t);\n\n\tuseLayoutEffect(() => {\n\t\tif (!props.activeItemId || !listRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tconst item = listRef.current.querySelector<HTMLElement>(\n\t\t\t`[data-composer-item-id=\"${CSS.escape(props.activeItemId)}\"]`,\n\t\t);\n\t\titem?.scrollIntoView({ block: \"nearest\" });\n\t}, [props.activeItemId]);\n\n\treturn (\n\t\t<Command\n\t\t\tloop\n\t\t\tshouldFilter={false}\n\t\t\tonValueChange={(value) => props.onHighlightedItemChange(value || null)}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={listRef}\n\t\t\t\tclassName=\"relative overflow-hidden rounded-xl border border-border/80 bg-popover/96 shadow-lg/8 backdrop-blur-xs\"\n\t\t\t>\n\t\t\t\t<CommandList className=\"max-h-72\">\n\t\t\t\t\t{groups.map((group, index) => (\n\t\t\t\t\t\t<div key={group.id}>\n\t\t\t\t\t\t\t{index > 0 ? <CommandSeparator className=\"my-0.5\" /> : null}\n\t\t\t\t\t\t\t<CommandGroup heading={group.label ?? undefined}>\n\t\t\t\t\t\t\t\t{group.items.map((item) => (\n\t\t\t\t\t\t\t\t\t<ComposerCommandMenuItem\n\t\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\t\tisActive={props.activeItemId === item.id}\n\t\t\t\t\t\t\t\t\t\tonHighlight={props.onHighlightedItemChange}\n\t\t\t\t\t\t\t\t\t\tonSelect={props.onSelect}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</CommandGroup>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t\t{props.items.length === 0 ? (\n\t\t\t\t\t\t<CommandEmpty>\n\t\t\t\t\t\t\t{props.isLoading\n\t\t\t\t\t\t\t\t? \"Searching...\"\n\t\t\t\t\t\t\t\t: (props.emptyStateText ?? emptyStateForTrigger(props.triggerKind))}\n\t\t\t\t\t\t</CommandEmpty>\n\t\t\t\t\t) : null}\n\t\t\t\t</CommandList>\n\t\t\t</div>\n\t\t</Command>\n\t);\n});\n\nfunction ComposerCommandMenuItem(props: {\n\tisActive: boolean;\n\titem: ComposerCommandItem;\n\tonHighlight: (itemId: string | null) => void;\n\tonSelect: (item: ComposerCommandItem) => void;\n}) {\n\tconst disabled = \"disabled\" in props.item ? Boolean(props.item.disabled) : false;\n\n\treturn (\n\t\t<CommandItem\n\t\t\tvalue={props.item.id}\n\t\t\tdata-composer-item-id={props.item.id}\n\t\t\tdata-composer-disabled={disabled ? \"true\" : undefined}\n\t\t\taria-disabled={disabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"cursor-pointer select-none gap-2 hover:bg-transparent hover:text-inherit data-selected:bg-transparent data-[selected=true]:bg-transparent\",\n\t\t\t\tprops.isActive && \"bg-accent! text-accent-foreground!\",\n\t\t\t\tdisabled && \"opacity-55\",\n\t\t\t)}\n\t\t\tonMouseMove={() => {\n\t\t\t\tif (!props.isActive) {\n\t\t\t\t\tprops.onHighlight(props.item.id);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\tonSelect={() => props.onSelect(props.item)}\n\t\t>\n\t\t\t<CommandItemIcon item={props.item} />\n\t\t\t<span className=\"flex min-w-0 flex-1 items-center gap-2\">\n\t\t\t\t<span className=\"shrink-0\">{props.item.label}</span>\n\t\t\t\t<span className=\"min-w-0 flex-1 truncate text-muted-foreground/70 text-xs\">\n\t\t\t\t\t{\"unavailableReason\" in props.item && props.item.unavailableReason\n\t\t\t\t\t\t? props.item.unavailableReason\n\t\t\t\t\t\t: props.item.description}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</CommandItem>\n\t);\n}\n\nfunction CommandItemIcon({ item }: { item: ComposerCommandItem }) {\n\tif (item.type === \"path\") {\n\t\treturn <UserRoundIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t}\n\tif (item.type === \"skill\") {\n\t\treturn <BoxIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t}\n\n\tswitch (item.command) {\n\t\tcase \"model\":\n\t\tcase \"plan\":\n\t\tcase \"default\":\n\t\t\treturn <BotIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t\tcase \"new\":\n\t\t\treturn <MessageSquarePlusIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t\tcase \"compact\":\n\t\t\treturn <ArchiveIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t\tcase \"characters\":\n\t\tcase \"realtime\":\n\t\t\treturn <SparklesIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t\tdefault:\n\t\t\treturn <BotIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground/80\" />;\n\t}\n}\n\nfunction groupCommandItems(\n\titems: ComposerCommandItem[],\n\ttriggerKind: ComposerTriggerKind | null,\n): ComposerCommandGroup[] {\n\tif (triggerKind === \"path\") {\n\t\treturn items.length > 0 ? [{ id: \"project\", items, label: \"Project\" }] : [];\n\t}\n\tif (triggerKind === \"skill\") {\n\t\treturn items.length > 0 ? [{ id: \"skills\", items, label: \"Skills\" }] : [];\n\t}\n\n\tconst commands = items.filter((item) => item.type === \"slash-command\");\n\treturn commands.length > 0\n\t\t? [{ id: \"commands\", items: commands, label: \"Commands\" }]\n\t\t: [];\n}\n\nfunction emptyStateForTrigger(triggerKind: ComposerTriggerKind | null): string {\n\tif (triggerKind === \"path\") {\n\t\treturn \"No matching project references.\";\n\t}\n\tif (triggerKind === \"skill\") {\n\t\treturn \"No skills found.\";\n\t}\n\treturn \"No matching command.\";\n}\n","export function resolveComposerMenuActiveItemId(input: {\n\tcurrentSearchKey: string | null;\n\thighlightedItemId: string | null;\n\thighlightedSearchKey: string | null;\n\titems: ReadonlyArray<{ id: string }>;\n}): string | null {\n\tif (input.items.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tinput.currentSearchKey === input.highlightedSearchKey &&\n\t\tinput.highlightedItemId &&\n\t\tinput.items.some((item) => item.id === input.highlightedItemId)\n\t) {\n\t\treturn input.highlightedItemId;\n\t}\n\n\treturn input.items[0]?.id ?? null;\n}\n","import {\n\tdefaultModelsManager,\n\tresolveReasoningEffortForModel,\n\ttype ModelPreset,\n} from \"../../../../../codex-rs/core/src\";\n\nexport type CodexModelOption = {\n\tslug: string;\n\tname: string;\n\tshortName?: string;\n\tsubProvider?: string;\n\tdescription: string;\n};\n\nexport type ProviderDriverKind = \"codex\" | (string & {});\n\nexport type ProviderInstanceId = string;\n\nexport type ProviderInstanceEntry = {\n\taccentColor?: string;\n\tcontinuationGroupKey?: string;\n\tdisplayName: string;\n\tdriverKind: ProviderDriverKind;\n\tinstanceId: ProviderInstanceId;\n\tisAvailable: boolean;\n\tsnapshot: { message?: string | null };\n\tstatus: \"ready\" | \"warning\" | \"error\" | \"disabled\" | \"loading\";\n};\n\nexport type CodexReasoningEffort = \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\nexport type CodexReasoningEffortOption = {\n\tvalue: CodexReasoningEffort;\n\tlabel: string;\n\tdescription: string;\n};\n\nexport const defaultCodexModel = \"gpt-5.5\";\nexport const defaultCodexReasoningEffort =\n\tdefaultModelsManager().default_reasoning_effort(\n\t\tdefaultCodexModel,\n\t) as CodexReasoningEffort;\n\nexport const codexModelOptions: readonly CodexModelOption[] =\n\tdefaultModelsManager()\n\t\t.list_models()\n\t\t.data.map(modelPresetToOption);\n\nexport const defaultCodexProviderInstance: ProviderInstanceEntry = {\n\tdisplayName: \"Codex\",\n\tdriverKind: \"codex\",\n\tinstanceId: \"codex\",\n\tisAvailable: true,\n\tsnapshot: {},\n\tstatus: \"ready\",\n};\n\nexport const codexReasoningEffortOptions: readonly CodexReasoningEffortOption[] = [\n\t{\n\t\tvalue: \"low\",\n\t\tlabel: \"Low\",\n\t\tdescription: \"Fast responses with lighter reasoning.\",\n\t},\n\t{\n\t\tvalue: \"medium\",\n\t\tlabel: \"Medium\",\n\t\tdescription: \"Balanced speed and reasoning depth.\",\n\t},\n\t{\n\t\tvalue: \"high\",\n\t\tlabel: \"High\",\n\t\tdescription: \"Deeper reasoning for complex planning.\",\n\t},\n\t{\n\t\tvalue: \"xhigh\",\n\t\tlabel: \"Extra high\",\n\t\tdescription: \"Maximum reasoning depth for hard tasks.\",\n\t},\n];\n\nexport function resolveCodexModelOption(model: string): CodexModelOption {\n\treturn (\n\t\tcodexModelOptions.find((option) => option.slug === model) ??\n\t\tcodexModelOptions[0] ?? {\n\t\t\tslug: model,\n\t\t\tname: model,\n\t\t\tdescription: \"Custom Codex model.\",\n\t\t}\n\t);\n}\n\nexport function resolveCodexReasoningEffortOption(\n\teffort: string,\n): CodexReasoningEffortOption {\n\treturn (\n\t\tcodexReasoningEffortOptions.find((option) => option.value === effort) ??\n\t\tcodexReasoningEffortOptions[1] ??\n\t\t({\n\t\t\tvalue: defaultCodexReasoningEffort,\n\t\t\tlabel: \"Medium\",\n\t\t\tdescription: \"Balanced speed and reasoning depth.\",\n\t\t} satisfies CodexReasoningEffortOption)\n\t);\n}\n\nexport function isCodexReasoningEffort(\n\tvalue: string,\n): value is CodexReasoningEffort {\n\treturn codexReasoningEffortOptions.some((option) => option.value === value);\n}\n\nexport function resolveCodexReasoningEffortForModel(\n\tmodel: string,\n\teffort: string | null | undefined,\n): CodexReasoningEffort {\n\treturn resolveReasoningEffortForModel(model, effort) as CodexReasoningEffort;\n}\n\nfunction modelPresetToOption(model: ModelPreset): CodexModelOption {\n\treturn {\n\t\tslug: model.model,\n\t\tname: model.display_name,\n\t\tshortName: model.display_name.replace(/^GPT-/, \"\"),\n\t\tsubProvider: \"OpenAI\",\n\t\tdescription: model.description,\n\t};\n}\n","import { ChevronDownIcon } from \"lucide-react\";\nimport { memo, useMemo, useState } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuLabel,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tcodexReasoningEffortOptions,\n\tisCodexReasoningEffort,\n\tresolveCodexReasoningEffortOption,\n\ttype CodexReasoningEffort,\n} from \"../../lib/modelSelection\";\n\nexport const TraitsPicker = memo(function TraitsPicker({\n\tclassName,\n\tdisabled = false,\n\teffort,\n\tonEffortChange,\n}: {\n\tclassName?: string;\n\tdisabled?: boolean;\n\teffort: CodexReasoningEffort;\n\tonEffortChange: (effort: CodexReasoningEffort) => void;\n}) {\n\tconst [open, setOpen] = useState(false);\n\tconst selected = useMemo(() => resolveCodexReasoningEffortOption(effort), [effort]);\n\n\treturn (\n\t\t<DropdownMenu\n\t\t\topen={open}\n\t\t\tonOpenChange={(nextOpen) => setOpen(disabled ? false : nextOpen)}\n\t\t>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0 max-w-40 shrink justify-start overflow-hidden whitespace-nowrap px-2 text-muted-foreground/70 hover:text-foreground/80 sm:max-w-48 sm:px-3\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttitle={selected.description}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"flex min-w-0 w-full items-center gap-2 overflow-hidden\">\n\t\t\t\t\t\t<span className=\"truncate\">{selected.label}</span>\n\t\t\t\t\t\t<ChevronDownIcon\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"size-3 shrink-0 opacity-60\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"start\" className=\"w-64\">\n\t\t\t\t<DropdownMenuLabel>Reasoning effort</DropdownMenuLabel>\n\t\t\t\t<DropdownMenuRadioGroup\n\t\t\t\t\tvalue={effort}\n\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\tif (isCodexReasoningEffort(value)) {\n\t\t\t\t\t\t\tonEffortChange(value);\n\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{codexReasoningEffortOptions.map((option) => (\n\t\t\t\t\t\t<DropdownMenuRadioItem key={option.value} value={option.value}>\n\t\t\t\t\t\t\t<div className=\"grid gap-0.5\">\n\t\t\t\t\t\t\t\t<span>{option.label}</span>\n\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</DropdownMenuRadioItem>\n\t\t\t\t\t))}\n\t\t\t\t</DropdownMenuRadioGroup>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n});\n","import {\n\tBotIcon,\n\tEllipsisIcon,\n\tListTodoIcon,\n\tLockIcon,\n\tLockOpenIcon,\n\tPenLineIcon,\n} from \"lucide-react\";\nimport { memo } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport type { CodexReasoningEffort } from \"../../lib/modelSelection\";\nimport type {\n\tChatComposerInteractionMode,\n\tChatComposerRuntimeMode,\n} from \"./ChatComposer\";\n\nimport { TraitsPicker } from \"./TraitsPicker\";\n\nconst runtimeModeLabels: Record<\n\tChatComposerRuntimeMode,\n\t{ description: string; icon: typeof LockIcon; label: string }\n> = {\n\t\"approval-required\": {\n\t\tdescription: \"Ask before commands and file changes.\",\n\t\ticon: LockIcon,\n\t\tlabel: \"Supervised\",\n\t},\n\t\"auto-accept-edits\": {\n\t\tdescription: \"Auto-approve edits, ask before other actions.\",\n\t\ticon: PenLineIcon,\n\t\tlabel: \"Auto-accept edits\",\n\t},\n\t\"full-access\": {\n\t\tdescription: \"Allow commands and edits without prompts.\",\n\t\ticon: LockOpenIcon,\n\t\tlabel: \"Full access\",\n\t},\n};\n\nconst runtimeModeOptions = Object.keys(\n\truntimeModeLabels,\n) as ChatComposerRuntimeMode[];\n\nfunction isRuntimeMode(value: string): value is ChatComposerRuntimeMode {\n\treturn runtimeModeOptions.includes(value as ChatComposerRuntimeMode);\n}\n\nexport const CompactComposerControlsMenu = memo(\n\tfunction CompactComposerControlsMenu({\n\t\tactivePlan = false,\n\t\tdisabled,\n\t\teffort,\n\t\tinteractionMode = \"default\",\n\t\tonRuntimeModeChange,\n\t\tonToggleInteractionMode,\n\t\tonTogglePlanSidebar,\n\t\tonEffortChange,\n\t\tplanSidebarLabel = \"Plan\",\n\t\tplanSidebarOpen = false,\n\t\truntimeMode = \"full-access\",\n\t\tshowInteractionModeToggle = true,\n\t}: {\n\t\tactivePlan?: boolean;\n\t\tdisabled?: boolean;\n\t\teffort: CodexReasoningEffort;\n\t\tinteractionMode?: ChatComposerInteractionMode;\n\t\tonEffortChange: (effort: CodexReasoningEffort) => void;\n\t\tonRuntimeModeChange?: (mode: ChatComposerRuntimeMode) => void;\n\t\tonToggleInteractionMode?: () => void;\n\t\tonTogglePlanSidebar?: () => void;\n\t\tplanSidebarLabel?: string;\n\t\tplanSidebarOpen?: boolean;\n\t\truntimeMode?: ChatComposerRuntimeMode;\n\t\tshowInteractionModeToggle?: boolean;\n\t}) {\n\t\treturn (\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\tclassName=\"shrink-0 text-muted-foreground/70 hover:text-foreground/80\"\n\t\t\t\t\t\taria-label=\"More composer controls\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<EllipsisIcon aria-hidden=\"true\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent align=\"start\" className=\"w-52\">\n\t\t\t\t\t<DropdownMenuLabel>Reasoning</DropdownMenuLabel>\n\t\t\t\t\t<div className=\"px-1.5 pb-1\">\n\t\t\t\t\t\t<TraitsPicker\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\teffort={effort}\n\t\t\t\t\t\t\tonEffortChange={onEffortChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t{showInteractionModeToggle ? (\n\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tonSelect={(event) => {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tonToggleInteractionMode?.();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<BotIcon aria-hidden=\"true\" className=\"size-4\" />\n\t\t\t\t\t\t\t{interactionMode === \"plan\" ? \"Plan\" : \"Build\"}\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<DropdownMenuLabel>Runtime mode</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuRadioGroup\n\t\t\t\t\t\tvalue={runtimeMode}\n\t\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\t\tif (isRuntimeMode(value)) {\n\t\t\t\t\t\t\t\tonRuntimeModeChange?.(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{runtimeModeOptions.map((mode) => {\n\t\t\t\t\t\t\tconst option = runtimeModeLabels[mode];\n\t\t\t\t\t\t\tconst Icon = option.icon;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<DropdownMenuRadioItem\n\t\t\t\t\t\t\t\t\tkey={mode}\n\t\t\t\t\t\t\t\t\tvalue={mode}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"grid gap-0.5\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t<Icon aria-hidden=\"true\" className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</DropdownMenuRadioItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</DropdownMenuRadioGroup>\n\t\t\t\t\t{activePlan ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonSelect={(event) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonTogglePlanSidebar?.();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ListTodoIcon aria-hidden=\"true\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t{planSidebarOpen ? \"Hide\" : \"Show\"} {planSidebarLabel}\n\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t);\n\t},\n);\n","export const COMPOSER_FOOTER_COMPACT_BREAKPOINT_PX = 620;\nexport const COMPOSER_FOOTER_WIDE_ACTIONS_COMPACT_BREAKPOINT_PX = 780;\nexport const COMPOSER_PRIMARY_ACTIONS_COMPACT_BREAKPOINT_PX =\n\tCOMPOSER_FOOTER_WIDE_ACTIONS_COMPACT_BREAKPOINT_PX;\n\nexport function shouldUseCompactComposerFooter(\n\twidth: number | null,\n\toptions?: { hasWideActions?: boolean },\n): boolean {\n\tconst breakpoint = options?.hasWideActions\n\t\t? COMPOSER_FOOTER_WIDE_ACTIONS_COMPACT_BREAKPOINT_PX\n\t\t: COMPOSER_FOOTER_COMPACT_BREAKPOINT_PX;\n\treturn width !== null && width < breakpoint;\n}\n\nexport function shouldUseCompactComposerPrimaryActions(\n\twidth: number | null,\n\toptions?: { hasWideActions?: boolean },\n): boolean {\n\tif (!options?.hasWideActions) {\n\t\treturn false;\n\t}\n\treturn (\n\t\twidth !== null && width < COMPOSER_PRIMARY_ACTIONS_COMPACT_BREAKPOINT_PX\n\t);\n}\n","import { LexicalComposer, type InitialConfigType } from \"@lexical/react/LexicalComposer\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { PlainTextPlugin } from \"@lexical/react/LexicalPlainTextPlugin\";\nimport {\n\t$applyNodeReplacement,\n\t$createLineBreakNode,\n\t$createParagraphNode,\n\t$createRangeSelection,\n\t$createTextNode,\n\t$getRoot,\n\t$getSelection,\n\t$isElementNode,\n\t$isLineBreakNode,\n\t$isRangeSelection,\n\t$isTextNode,\n\t$setSelection,\n\tCOMMAND_PRIORITY_HIGH,\n\tCOMMAND_PRIORITY_LOW,\n\tDecoratorNode,\n\tKEY_ARROW_DOWN_COMMAND,\n\tKEY_ARROW_UP_COMMAND,\n\tKEY_ENTER_COMMAND,\n\tKEY_TAB_COMMAND,\n\tSELECTION_CHANGE_COMMAND,\n\ttype EditorState,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedLexicalNode,\n\ttype Spread,\n} from \"lexical\";\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\ttype ReactElement,\n\ttype Ref,\n} from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nimport {\n\tcreateComposerPromptSnapshot,\n\ttype ComposerPromptSnapshot,\n} from \"./chat/composer-editor-mentions\";\nimport {\n\tdetectComposerTrigger,\n\treplaceTextRange,\n\ttype ComposerTrigger,\n} from \"./chat/composer-logic\";\nimport {\n\tmentionBindingRangesForText,\n\tmentionBindingsAfterReplacement,\n\tnormalizeMentionBindingsForText,\n\ttype MentionBinding,\n} from \"./chat/mention-bindings\";\nimport { mentionToken } from \"./chat/mention-syntax\";\nimport { type ComposerMentionTarget } from \"./chat/composer-mention-targets\";\n\nexport type ComposerPromptEditorHandle = {\n\tclear: () => void;\n\tfocusAt: (cursor: number) => void;\n\tfocusAtEnd: () => void;\n\tinsertTextAtCursor: (\n\t\ttext: string,\n\t\toptions?: { source?: \"manual\" | \"realtime\" },\n\t) => void;\n\tinsertMention: (\n\t\tmention: ComposerMentionTarget,\n\t\ttrigger: ComposerTrigger | null,\n\t) => void;\n\tinsertRecordingMeterPlaceholder: (text: string) => string;\n\treadSnapshot: () => ComposerPromptSnapshot;\n\tremoveRecordingMeterPlaceholder: (id: string) => void;\n\treplaceRecordingMeterPlaceholder: (id: string, text: string) => void;\n\tsetTextContentWithMentionBindings: (input: {\n\t\tmentionBindings?: MentionBinding[];\n\t\ttext: string;\n\t}) => void;\n\tupdateRecordingMeterInPlace: (id: string, text: string) => boolean;\n};\n\ntype ComposerPromptEditorProps = {\n\tariaLabel?: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n\tplaceholder?: string;\n\tonCommandKey?: (\n\t\tkey: \"ArrowDown\" | \"ArrowUp\" | \"Enter\" | \"Tab\",\n\t\tevent: KeyboardEvent,\n\t) => boolean;\n\tonSnapshotChange?: (snapshot: ComposerPromptSnapshot) => void;\n\tonSubmit?: () => void;\n\tonTriggerChange?: (trigger: ComposerTrigger | null) => void;\n};\n\ntype SerializedComposerMentionNode = Spread<\n\t{\n\t\tmention: string;\n\t\tpath: string;\n\t\ttype: \"composer-mention\";\n\t\tversion: 1;\n\t},\n\tSerializedLexicalNode\n>;\n\ntype SerializedComposerRecordingMeterNode = Spread<\n\t{\n\t\tid: string;\n\t\ttext: string;\n\t\ttype: \"composer-recording-meter\";\n\t\tversion: 1;\n\t},\n\tSerializedLexicalNode\n>;\n\nclass ComposerMentionNode extends DecoratorNode<ReactElement> {\n\t__mention: string;\n\t__path: string;\n\n\tstatic override getType(): string {\n\t\treturn \"composer-mention\";\n\t}\n\n\tstatic override clone(node: ComposerMentionNode): ComposerMentionNode {\n\t\treturn new ComposerMentionNode(node.__mention, node.__path, node.__key);\n\t}\n\n\tstatic override importJSON(\n\t\tserializedNode: SerializedComposerMentionNode,\n\t): ComposerMentionNode {\n\t\treturn $createComposerMentionNode(\n\t\t\tserializedNode.mention,\n\t\t\tserializedNode.path,\n\t\t).updateFromJSON(serializedNode);\n\t}\n\n\tconstructor(mention: string, path: string, key?: NodeKey) {\n\t\tsuper(key);\n\t\tthis.__mention = mention.startsWith(\"@\") ? mention.slice(1) : mention;\n\t\tthis.__path = path;\n\t}\n\n\toverride exportJSON(): SerializedComposerMentionNode {\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\tmention: this.__mention,\n\t\t\tpath: this.__path,\n\t\t\ttype: \"composer-mention\",\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\toverride createDOM(): HTMLElement {\n\t\tconst dom = document.createElement(\"span\");\n\t\tdom.className = \"inline-flex align-middle leading-none\";\n\t\treturn dom;\n\t}\n\n\toverride updateDOM(): false {\n\t\treturn false;\n\t}\n\n\toverride getTextContent(): string {\n\t\treturn mentionToken(this.__mention);\n\t}\n\n\toverride isInline(): true {\n\t\treturn true;\n\t}\n\n\toverride decorate(): ReactElement {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName=\"inline-flex max-w-48 select-none items-center rounded-md border border-border/70 bg-muted/60 px-1.5 py-0.5 align-middle text-[0.9em] leading-none text-foreground\"\n\t\t\t\tcontentEditable={false}\n\t\t\t\tdata-composer-mention-chip=\"true\"\n\t\t\t\ttitle={this.__path}\n\t\t\t>\n\t\t\t\t<span className=\"truncate\">{mentionToken(this.__mention)}</span>\n\t\t\t</span>\n\t\t);\n\t}\n}\n\nclass ComposerRecordingMeterNode extends DecoratorNode<ReactElement> {\n\t__id: string;\n\t__text: string;\n\n\tstatic override getType(): string {\n\t\treturn \"composer-recording-meter\";\n\t}\n\n\tstatic override clone(\n\t\tnode: ComposerRecordingMeterNode,\n\t): ComposerRecordingMeterNode {\n\t\treturn new ComposerRecordingMeterNode(node.__id, node.__text, node.__key);\n\t}\n\n\tstatic override importJSON(\n\t\tserializedNode: SerializedComposerRecordingMeterNode,\n\t): ComposerRecordingMeterNode {\n\t\treturn $createComposerRecordingMeterNode(\n\t\t\tserializedNode.id,\n\t\t\tserializedNode.text,\n\t\t).updateFromJSON(serializedNode);\n\t}\n\n\tconstructor(id: string, text: string, key?: NodeKey) {\n\t\tsuper(key);\n\t\tthis.__id = id;\n\t\tthis.__text = text;\n\t}\n\n\toverride exportJSON(): SerializedComposerRecordingMeterNode {\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\tid: this.__id,\n\t\t\ttext: this.__text,\n\t\t\ttype: \"composer-recording-meter\",\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\toverride createDOM(): HTMLElement {\n\t\tconst dom = document.createElement(\"span\");\n\t\tdom.className = \"inline-flex align-middle leading-none\";\n\t\treturn dom;\n\t}\n\n\toverride updateDOM(): false {\n\t\treturn false;\n\t}\n\n\toverride getTextContent(): string {\n\t\treturn \"\";\n\t}\n\n\toverride isInline(): true {\n\t\treturn true;\n\t}\n\n\tsetText(text: string): ComposerRecordingMeterNode {\n\t\tconst writable = this.getWritable();\n\t\twritable.__text = text;\n\t\treturn writable;\n\t}\n\n\toverride decorate(): ReactElement {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName=\"inline-flex select-none items-center rounded-md border border-border/60 bg-muted/50 px-1.5 py-0.5 align-middle font-mono text-[0.9em] leading-none text-muted-foreground\"\n\t\t\t\tcontentEditable={false}\n\t\t\t\tdata-composer-recording-meter=\"true\"\n\t\t\t\ttitle=\"Realtime voice\"\n\t\t\t>\n\t\t\t\t{this.__text}\n\t\t\t</span>\n\t\t);\n\t}\n}\n\nfunction $createComposerMentionNode(\n\tmention: string,\n\tpath: string,\n): ComposerMentionNode {\n\treturn $applyNodeReplacement(new ComposerMentionNode(mention, path));\n}\n\nfunction $createComposerRecordingMeterNode(\n\tid: string,\n\ttext: string,\n): ComposerRecordingMeterNode {\n\treturn $applyNodeReplacement(new ComposerRecordingMeterNode(id, text));\n}\n\nexport const ComposerPromptEditor = forwardRef<\n\tComposerPromptEditorHandle,\n\tComposerPromptEditorProps\n>(function ComposerPromptEditor(props, ref: Ref<ComposerPromptEditorHandle>) {\n\tconst editorConfig = useMemo<InitialConfigType>(\n\t\t() => ({\n\t\t\tnamespace: \"CodexAssistantComposer\",\n\t\t\tnodes: [ComposerMentionNode, ComposerRecordingMeterNode],\n\t\t\tonError(error) {\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\ttheme: {\n\t\t\t\tparagraph: \"m-0\",\n\t\t\t},\n\t\t}),\n\t\t[],\n\t);\n\n\treturn (\n\t\t<LexicalComposer initialConfig={editorConfig}>\n\t\t\t<ComposerPromptEditorInner {...props} editorRef={ref} />\n\t\t</LexicalComposer>\n\t);\n});\n\nfunction ComposerPromptEditorInner({\n\tariaLabel = \"Message Codex\",\n\tclassName,\n\tdisabled = false,\n\teditorRef,\n\tonCommandKey,\n\tonSnapshotChange,\n\tonSubmit,\n\tonTriggerChange,\n\tplaceholder = \"Message Codex...\",\n}: ComposerPromptEditorProps & {\n\teditorRef: Ref<ComposerPromptEditorHandle>;\n}) {\n\tconst [editor] = useLexicalComposerContext();\n\tconst snapshotRef = useRef<ComposerPromptSnapshot>(\n\t\tcreateComposerPromptSnapshot(\"\"),\n\t);\n\n\tconst publishSnapshot = useCallback(\n\t\t(snapshot: Readonly<EditorSnapshot>) => {\n\t\t\tconst composerSnapshot = createComposerPromptSnapshot(\n\t\t\t\tsnapshot.text,\n\t\t\t\tsnapshot.mentionBindings,\n\t\t\t);\n\t\t\tsnapshotRef.current = composerSnapshot;\n\t\t\tonSnapshotChange?.(composerSnapshot);\n\t\t\tonTriggerChange?.(detectComposerTrigger(snapshot.text, snapshot.cursor));\n\t\t},\n\t\t[onSnapshotChange, onTriggerChange],\n\t);\n\n\tconst replaceEditorContent = useCallback(\n\t\t(input: {\n\t\t\ttext: string;\n\t\t\tmentionBindings?: MentionBinding[];\n\t\t\tcursor?: number;\n\t\t\tfocus?: boolean;\n\t\t}) => {\n\t\t\teditor.update(() => {\n\t\t\t\t$replaceRootTextWithMentions(\n\t\t\t\t\tinput.text,\n\t\t\t\t\tinput.mentionBindings ?? [],\n\t\t\t\t\tinput.cursor ?? input.text.length,\n\t\t\t\t);\n\t\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t\t});\n\t\t\tif (input.focus) {\n\t\t\t\twindow.requestAnimationFrame(() => editor.focus());\n\t\t\t}\n\t\t},\n\t\t[editor, publishSnapshot],\n\t);\n\n\tconst focusAt = useCallback(\n\t\t(cursor: number) => {\n\t\t\teditor.update(() => {\n\t\t\t\tconst snapshot = $readEditorSnapshot();\n\t\t\t\t$setSelectionAtComposerOffset(\n\t\t\t\t\tMath.max(0, Math.min(cursor, snapshot.text.length)),\n\t\t\t\t);\n\t\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t\t});\n\t\t\twindow.requestAnimationFrame(() => editor.focus());\n\t\t},\n\t\t[editor, publishSnapshot],\n\t);\n\n\tuseImperativeHandle(\n\t\teditorRef,\n\t\t() => ({\n\t\t\tclear() {\n\t\t\t\treplaceEditorContent({ text: \"\", mentionBindings: [], cursor: 0 });\n\t\t\t},\n\t\t\tfocusAt,\n\t\t\tfocusAtEnd() {\n\t\t\t\tfocusAt(snapshotRef.current.text.length);\n\t\t\t},\n\t\t\tinsertTextAtCursor(text) {\n\t\t\t\teditor.update(() => {\n\t\t\t\t\tconst snapshot = $readEditorSnapshot();\n\t\t\t\t\tconst insertion = composerPlainTextInsertion(snapshot, text);\n\t\t\t\t\tif (!insertion) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst cursor = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.min(snapshot.cursor, snapshot.text.length),\n\t\t\t\t\t);\n\t\t\t\t\tconst next = replaceTextRange(\n\t\t\t\t\t\tsnapshot.text,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tinsertion,\n\t\t\t\t\t);\n\t\t\t\t\t$replaceRootTextWithMentions(\n\t\t\t\t\t\tnext.text,\n\t\t\t\t\t\tnormalizeMentionBindingsForText(\n\t\t\t\t\t\t\tnext.text,\n\t\t\t\t\t\t\tsnapshot.mentionBindings,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tnext.cursor,\n\t\t\t\t\t);\n\t\t\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t\t\t});\n\t\t\t\twindow.requestAnimationFrame(() => editor.focus());\n\t\t\t},\n\t\t\tinsertMention(mention, trigger) {\n\t\t\t\tconst snapshot = snapshotRef.current;\n\t\t\t\tconst range =\n\t\t\t\t\ttrigger?.kind === \"path\"\n\t\t\t\t\t\t? { end: trigger.rangeEnd, start: trigger.rangeStart }\n\t\t\t\t\t\t: { end: snapshot.text.length, start: snapshot.text.length };\n\t\t\t\tconst replacement = `${mentionToken(mention.binding.mention)} `;\n\t\t\t\tconst next = replaceTextRange(\n\t\t\t\t\tsnapshot.text,\n\t\t\t\t\trange.start,\n\t\t\t\t\trange.end,\n\t\t\t\t\treplacement,\n\t\t\t\t);\n\t\t\t\treplaceEditorContent({\n\t\t\t\t\ttext: next.text,\n\t\t\t\t\tcursor: next.cursor,\n\t\t\t\t\tfocus: true,\n\t\t\t\t\tmentionBindings: mentionBindingsAfterReplacement({\n\t\t\t\t\t\tcurrentBindings: snapshot.mentionBindings,\n\t\t\t\t\t\tinsertedBinding: mention.binding,\n\t\t\t\t\t\tnextText: next.text,\n\t\t\t\t\t\trangeEnd: range.end,\n\t\t\t\t\t\trangeStart: range.start,\n\t\t\t\t\t\treplacement,\n\t\t\t\t\t\ttext: snapshot.text,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t},\n\t\t\tinsertRecordingMeterPlaceholder(text) {\n\t\t\t\tconst id = createRecordingMeterId();\n\t\t\t\teditor.update(() => {\n\t\t\t\t\tconst node = $createComposerRecordingMeterNode(id, text);\n\t\t\t\t\tconst selection = $getSelection();\n\t\t\t\t\tif ($isRangeSelection(selection)) {\n\t\t\t\t\t\tselection.insertNodes([node]);\n\t\t\t\t\t\t$setSelectionAfterNode(node);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst root = $getRoot();\n\t\t\t\t\t\tconst existingParagraph = root.getFirstChild();\n\t\t\t\t\t\tconst paragraph = $isElementNode(existingParagraph)\n\t\t\t\t\t\t\t? existingParagraph\n\t\t\t\t\t\t\t: $createParagraphNode();\n\t\t\t\t\t\tif (paragraph !== existingParagraph) {\n\t\t\t\t\t\t\troot.clear();\n\t\t\t\t\t\t\troot.append(paragraph);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparagraph.append(node);\n\t\t\t\t\t\t$setSelectionAfterNode(node);\n\t\t\t\t\t}\n\t\t\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t\t\t});\n\t\t\t\twindow.requestAnimationFrame(() => editor.focus());\n\t\t\t\treturn id;\n\t\t\t},\n\t\t\treadSnapshot() {\n\t\t\t\treturn snapshotRef.current;\n\t\t\t},\n\t\t\tremoveRecordingMeterPlaceholder(id) {\n\t\t\t\teditor.update(() => {\n\t\t\t\t\tconst node = $findRecordingMeterNode(id);\n\t\t\t\t\tif (!node) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnode.remove();\n\t\t\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t\t\t});\n\t\t\t},\n\t\t\treplaceRecordingMeterPlaceholder(id, text) {\n\t\t\t\teditor.update(() => {\n\t\t\t\t\tconst node = $findRecordingMeterNode(id);\n\t\t\t\t\tif (!node) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst snapshot = $readEditorSnapshot();\n\t\t\t\t\tconst offset = $recordingMeterTextOffset(id) ?? snapshot.cursor;\n\t\t\t\t\tconst insertion = composerPlainTextInsertion(\n\t\t\t\t\t\t{ ...snapshot, cursor: offset },\n\t\t\t\t\t\ttext,\n\t\t\t\t\t);\n\t\t\t\t\tconst next = replaceTextRange(\n\t\t\t\t\t\tsnapshot.text,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t\tinsertion,\n\t\t\t\t\t);\n\t\t\t\t\t$replaceRootTextWithMentions(\n\t\t\t\t\t\tnext.text,\n\t\t\t\t\t\tnormalizeMentionBindingsForText(\n\t\t\t\t\t\t\tnext.text,\n\t\t\t\t\t\t\tsnapshot.mentionBindings,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tnext.cursor,\n\t\t\t\t\t);\n\t\t\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t\t\t});\n\t\t\t\twindow.requestAnimationFrame(() => editor.focus());\n\t\t\t},\n\t\t\tsetTextContentWithMentionBindings(input) {\n\t\t\t\treplaceEditorContent({\n\t\t\t\t\ttext: input.text,\n\t\t\t\t\tmentionBindings: input.mentionBindings ?? [],\n\t\t\t\t\tcursor: input.text.length,\n\t\t\t\t\tfocus: true,\n\t\t\t\t});\n\t\t\t},\n\t\t\tupdateRecordingMeterInPlace(id, text) {\n\t\t\t\tlet updated = false;\n\t\t\t\teditor.update(() => {\n\t\t\t\t\tconst node = $findRecordingMeterNode(id);\n\t\t\t\t\tif (!node) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnode.setText(text);\n\t\t\t\t\tupdated = true;\n\t\t\t\t});\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t}),\n\t\t[editor, focusAt, publishSnapshot, replaceEditorContent],\n\t);\n\n\tuseEffect(() => {\n\t\teditor.setEditable(!disabled);\n\t}, [disabled, editor]);\n\n\tuseEffect(() => {\n\t\treturn editor.registerCommand(\n\t\t\tKEY_ENTER_COMMAND,\n\t\t\t(event) => {\n\t\t\t\tif (event?.shiftKey) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (event && onCommandKey?.(\"Enter\", event)) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tevent?.preventDefault();\n\t\t\t\tonSubmit?.();\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t);\n\t}, [editor, onCommandKey, onSubmit]);\n\n\tuseEffect(() => {\n\t\treturn editor.registerCommand(\n\t\t\tKEY_ARROW_DOWN_COMMAND,\n\t\t\t(event) => {\n\t\t\t\tif (!event || !onCommandKey?.(\"ArrowDown\", event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t);\n\t}, [editor, onCommandKey]);\n\n\tuseEffect(() => {\n\t\treturn editor.registerCommand(\n\t\t\tKEY_ARROW_UP_COMMAND,\n\t\t\t(event) => {\n\t\t\t\tif (!event || !onCommandKey?.(\"ArrowUp\", event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t);\n\t}, [editor, onCommandKey]);\n\n\tuseEffect(() => {\n\t\treturn editor.registerCommand(\n\t\t\tKEY_TAB_COMMAND,\n\t\t\t(event) => {\n\t\t\t\tif (!event || !onCommandKey?.(\"Tab\", event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t);\n\t}, [editor, onCommandKey]);\n\n\tuseEffect(() => {\n\t\treturn editor.registerCommand(\n\t\t\tSELECTION_CHANGE_COMMAND,\n\t\t\t() => {\n\t\t\t\teditor.getEditorState().read(() => {\n\t\t\t\t\tconst snapshot = $readEditorSnapshot();\n\t\t\t\t\tsnapshotRef.current = createComposerPromptSnapshot(\n\t\t\t\t\t\tsnapshot.text,\n\t\t\t\t\t\tsnapshot.mentionBindings,\n\t\t\t\t\t);\n\t\t\t\t\tonTriggerChange?.(detectComposerTrigger(snapshot.text, snapshot.cursor));\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t);\n\t}, [editor, onTriggerChange]);\n\n\tfunction handleEditorChange(editorState: EditorState) {\n\t\teditorState.read(() => {\n\t\t\tpublishSnapshot($readEditorSnapshot());\n\t\t});\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative\",\n\t\t\t\tdisabled && \"cursor-not-allowed opacity-60\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={() => {\n\t\t\t\tif (!disabled) {\n\t\t\t\t\teditor.focus();\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<PlainTextPlugin\n\t\t\t\tcontentEditable={\n\t\t\t\t\t<ContentEditable\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-placeholder={placeholder}\n\t\t\t\t\t\tclassName=\"block max-h-[200px] min-h-17.5 w-full overflow-y-auto whitespace-pre-wrap wrap-break-word bg-transparent text-[16px] leading-relaxed text-foreground outline-none focus:outline-none sm:text-[14px]\"\n\t\t\t\t\t\tplaceholder={<span />}\n\t\t\t\t\t\tspellCheck\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={\n\t\t\t\t\t<div className=\"pointer-events-none absolute inset-0 text-[16px] leading-relaxed text-muted-foreground/35 sm:text-[14px]\">\n\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\tErrorBoundary={LexicalErrorBoundary}\n\t\t\t/>\n\t\t\t<HistoryPlugin />\n\t\t\t<OnChangePlugin onChange={handleEditorChange} />\n\t\t</div>\n\t);\n}\n\ntype EditorSnapshot = {\n\tcursor: number;\n\tmentionBindings: MentionBinding[];\n\ttext: string;\n};\n\nfunction $replaceRootTextWithMentions(\n\ttext: string,\n\tbindings: readonly MentionBinding[],\n\tcursor: number,\n) {\n\tconst root = $getRoot();\n\troot.clear();\n\tconst paragraph = $createParagraphNode();\n\troot.append(paragraph);\n\tconst ranges = mentionBindingRangesForText(text, bindings);\n\tlet index = 0;\n\tfor (const item of ranges) {\n\t\tappendPlainText(paragraph, text.slice(index, item.range.start));\n\t\tparagraph.append(\n\t\t\t$createComposerMentionNode(item.binding.mention, item.binding.path),\n\t\t);\n\t\tindex = item.range.end;\n\t}\n\tappendPlainText(paragraph, text.slice(index));\n\t$setSelectionAtComposerOffset(cursor);\n}\n\nfunction composerPlainTextInsertion(\n\tsnapshot: EditorSnapshot,\n\ttext: string,\n): string {\n\tconst trimmed = text.trim();\n\tif (!trimmed) {\n\t\treturn \"\";\n\t}\n\tconst cursor = Math.max(0, Math.min(snapshot.cursor, snapshot.text.length));\n\tconst before = snapshot.text.slice(0, cursor);\n\tconst after = snapshot.text.slice(cursor);\n\tconst needsLeadingSpace =\n\t\tbefore.length > 0 && !/\\s$/.test(before) && !/^\\s/.test(trimmed);\n\tconst needsTrailingSpace =\n\t\tafter.length > 0 && !/\\s$/.test(trimmed) && !/^\\s/.test(after);\n\treturn `${needsLeadingSpace ? \" \" : \"\"}${trimmed}${needsTrailingSpace ? \" \" : \"\"}`;\n}\n\nfunction appendPlainText(parent: ReturnType<typeof $createParagraphNode>, text: string) {\n\tif (!text) {\n\t\treturn;\n\t}\n\tconst parts = text.split(\"\\n\");\n\tparts.forEach((part, index) => {\n\t\tif (index > 0) {\n\t\t\tparent.append($createLineBreakNode());\n\t\t}\n\t\tif (part) {\n\t\t\tparent.append($createTextNode(part));\n\t\t}\n\t});\n}\n\nfunction $readEditorSnapshot(): EditorSnapshot {\n\tconst root = $getRoot();\n\tconst selection = $getSelection();\n\tconst selectionPoint =\n\t\t$isRangeSelection(selection) && selection.isCollapsed()\n\t\t\t? {\n\t\t\t\t\tkey: selection.anchor.key,\n\t\t\t\t\toffset: selection.anchor.offset,\n\t\t\t\t}\n\t\t\t: null;\n\tconst state = {\n\t\tcursor: 0,\n\t\tmentionBindings: [] as MentionBinding[],\n\t\tselectionOffset: null as number | null,\n\t\ttext: \"\",\n\t};\n\n\tfor (const child of root.getChildren()) {\n\t\tappendNodeSnapshot(child, state, selectionPoint);\n\t}\n\n\treturn {\n\t\tcursor: state.selectionOffset ?? state.text.length,\n\t\tmentionBindings: state.mentionBindings,\n\t\ttext: state.text,\n\t};\n}\n\nfunction appendNodeSnapshot(\n\tnode: LexicalNode,\n\tstate: {\n\t\tcursor: number;\n\t\tmentionBindings: MentionBinding[];\n\t\tselectionOffset: number | null;\n\t\ttext: string;\n\t},\n\tselectionPoint: { key: string; offset: number } | null,\n) {\n\tif ($isTextNode(node)) {\n\t\tif (selectionPoint?.key === node.getKey()) {\n\t\t\tstate.selectionOffset = state.text.length + selectionPoint.offset;\n\t\t}\n\t\tstate.text += node.getTextContent();\n\t\treturn;\n\t}\n\n\tif (node instanceof ComposerMentionNode) {\n\t\tif (selectionPoint?.key === node.getKey()) {\n\t\t\tstate.selectionOffset =\n\t\t\t\tstate.text.length +\n\t\t\t\t(selectionPoint.offset > 0 ? node.getTextContent().length : 0);\n\t\t}\n\t\tstate.mentionBindings.push({\n\t\t\tmention: node.__mention,\n\t\t\tpath: node.__path,\n\t\t});\n\t\tstate.text += node.getTextContent();\n\t\treturn;\n\t}\n\n\tif (node instanceof ComposerRecordingMeterNode) {\n\t\tif (selectionPoint?.key === node.getKey()) {\n\t\t\tstate.selectionOffset = state.text.length;\n\t\t}\n\t\treturn;\n\t}\n\n\tif ($isLineBreakNode(node)) {\n\t\tstate.text += \"\\n\";\n\t\treturn;\n\t}\n\n\tif ($isElementNode(node)) {\n\t\tconst children = node.getChildren();\n\t\tif (selectionPoint?.key === node.getKey()) {\n\t\t\tconst boundedOffset = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(selectionPoint.offset, children.length),\n\t\t\t);\n\t\t\tstate.selectionOffset =\n\t\t\t\tstate.text.length +\n\t\t\t\tchildren\n\t\t\t\t\t.slice(0, boundedOffset)\n\t\t\t\t\t.reduce((total, child) => total + composerNodeTextLength(child), 0);\n\t\t}\n\t\tchildren.forEach((child, index) => {\n\t\t\tif (index > 0 && node === $getRoot()) {\n\t\t\t\tstate.text += \"\\n\";\n\t\t\t}\n\t\t\tappendNodeSnapshot(child, state, selectionPoint);\n\t\t});\n\t}\n}\n\nfunction composerNodeTextLength(node: LexicalNode): number {\n\tif ($isTextNode(node)) {\n\t\treturn node.getTextContentSize();\n\t}\n\tif (node instanceof ComposerMentionNode) {\n\t\treturn node.getTextContent().length;\n\t}\n\tif (node instanceof ComposerRecordingMeterNode) {\n\t\treturn 0;\n\t}\n\tif ($isLineBreakNode(node)) {\n\t\treturn 1;\n\t}\n\tif ($isElementNode(node)) {\n\t\treturn node\n\t\t\t.getChildren()\n\t\t\t.reduce((total, child) => total + composerNodeTextLength(child), 0);\n\t}\n\treturn 0;\n}\n\nfunction $setSelectionAtComposerOffset(offset: number) {\n\tconst root = $getRoot();\n\tconst point = findSelectionPoint(root, { remaining: offset }) ?? {\n\t\tkey: root.getKey(),\n\t\toffset: root.getChildrenSize(),\n\t\ttype: \"element\" as const,\n\t};\n\tconst selection = $createRangeSelection();\n\tselection.anchor.set(point.key, point.offset, point.type);\n\tselection.focus.set(point.key, point.offset, point.type);\n\t$setSelection(selection);\n}\n\nfunction findSelectionPoint(\n\tnode: LexicalNode,\n\tref: { remaining: number },\n): { key: string; offset: number; type: \"element\" | \"text\" } | null {\n\tif ($isTextNode(node)) {\n\t\tconst length = node.getTextContentSize();\n\t\tif (ref.remaining <= length) {\n\t\t\treturn {\n\t\t\t\tkey: node.getKey(),\n\t\t\t\toffset: Math.max(0, ref.remaining),\n\t\t\t\ttype: \"text\",\n\t\t\t};\n\t\t}\n\t\tref.remaining -= length;\n\t\treturn null;\n\t}\n\n\tif (node instanceof ComposerMentionNode) {\n\t\tconst parent = node.getParent();\n\t\tif (!parent || !$isElementNode(parent)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst length = node.getTextContent().length;\n\t\tif (ref.remaining <= length) {\n\t\t\treturn {\n\t\t\t\tkey: parent.getKey(),\n\t\t\t\toffset: node.getIndexWithinParent() + (ref.remaining > 0 ? 1 : 0),\n\t\t\t\ttype: \"element\",\n\t\t\t};\n\t\t}\n\t\tref.remaining -= length;\n\t\treturn null;\n\t}\n\n\tif (node instanceof ComposerRecordingMeterNode) {\n\t\tif (ref.remaining <= 0) {\n\t\t\tconst parent = node.getParent();\n\t\t\tif (!$isElementNode(parent)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkey: parent.getKey(),\n\t\t\t\toffset: node.getIndexWithinParent(),\n\t\t\t\ttype: \"element\",\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\tif ($isLineBreakNode(node)) {\n\t\tconst parent = node.getParent();\n\t\tif (!parent) {\n\t\t\treturn null;\n\t\t}\n\t\tif (ref.remaining <= 1) {\n\t\t\treturn {\n\t\t\t\tkey: parent.getKey(),\n\t\t\t\toffset: node.getIndexWithinParent() + (ref.remaining > 0 ? 1 : 0),\n\t\t\t\ttype: \"element\",\n\t\t\t};\n\t\t}\n\t\tref.remaining -= 1;\n\t\treturn null;\n\t}\n\n\tif ($isElementNode(node)) {\n\t\tconst children = node.getChildren();\n\t\tfor (const child of children) {\n\t\t\tconst point = findSelectionPoint(child, ref);\n\t\t\tif (point) {\n\t\t\t\treturn point;\n\t\t\t}\n\t\t}\n\t\tif (ref.remaining === 0) {\n\t\t\treturn {\n\t\t\t\tkey: node.getKey(),\n\t\t\t\toffset: children.length,\n\t\t\t\ttype: \"element\",\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction $findRecordingMeterNode(\n\tid: string,\n\tnode: LexicalNode = $getRoot(),\n): ComposerRecordingMeterNode | null {\n\tif (node instanceof ComposerRecordingMeterNode) {\n\t\treturn node.__id === id ? node : null;\n\t}\n\tif (!$isElementNode(node)) {\n\t\treturn null;\n\t}\n\tfor (const child of node.getChildren()) {\n\t\tconst match = $findRecordingMeterNode(id, child);\n\t\tif (match) {\n\t\t\treturn match;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction $recordingMeterTextOffset(\n\tid: string,\n\tnode: LexicalNode = $getRoot(),\n\toffset = { value: 0 },\n): number | null {\n\tif (node instanceof ComposerRecordingMeterNode) {\n\t\treturn node.__id === id ? offset.value : null;\n\t}\n\tif ($isTextNode(node)) {\n\t\toffset.value += node.getTextContentSize();\n\t\treturn null;\n\t}\n\tif (node instanceof ComposerMentionNode) {\n\t\toffset.value += node.getTextContent().length;\n\t\treturn null;\n\t}\n\tif ($isLineBreakNode(node)) {\n\t\toffset.value += 1;\n\t\treturn null;\n\t}\n\tif ($isElementNode(node)) {\n\t\tfor (const child of node.getChildren()) {\n\t\t\tconst match = $recordingMeterTextOffset(id, child, offset);\n\t\t\tif (match !== null) {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction $setSelectionAfterNode(node: LexicalNode) {\n\tconst parent = node.getParent();\n\tif (!$isElementNode(parent)) {\n\t\treturn;\n\t}\n\tconst selection = $createRangeSelection();\n\tconst offset = node.getIndexWithinParent() + 1;\n\tselection.anchor.set(parent.getKey(), offset, \"element\");\n\tselection.focus.set(parent.getKey(), offset, \"element\");\n\t$setSelection(selection);\n}\n\nfunction createRecordingMeterId(): string {\n\tif (globalThis.crypto?.randomUUID) {\n\t\treturn `recording-meter:${globalThis.crypto.randomUUID()}`;\n\t}\n\treturn `recording-meter:${Date.now().toString(36)}:${Math.random()\n\t\t.toString(36)\n\t\t.slice(2)}`;\n}\n","import type { MentionBinding } from \"./mention-bindings\";\n\nexport type ComposerMentionTarget = {\n\tbinding: MentionBinding;\n\tdisplayName: string;\n\tlabel: string;\n\tmention: string;\n\tpath: string;\n};\n\nexport function searchComposerMentionTargets(input: {\n\tquery: string;\n\ttargets: readonly ComposerMentionTarget[];\n}): ComposerMentionTarget[] {\n\tconst query = input.query.trim().toLowerCase();\n\n\treturn input.targets\n\t\t.filter((target) => {\n\t\t\tif (!query) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\ttarget.displayName.toLowerCase().includes(query) ||\n\t\t\t\ttarget.mention.toLowerCase().includes(query) ||\n\t\t\t\ttarget.path.toLowerCase().includes(query)\n\t\t\t);\n\t\t})\n\t\t.slice(0, 8);\n}\n","import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-0.5 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 4,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"relative z-50 flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) text-balance rounded-md border bg-popover px-2 py-1 text-popover-foreground text-xs shadow-md/5 transition-[scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-[state=closed]:scale-98 data-[state=closed]:opacity-0 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className\n )}\n {...props}\n >\n {children}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nconst TooltipPopup = TooltipContent;\n\nexport { Tooltip, TooltipContent, TooltipPopup, TooltipProvider, TooltipTrigger }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import { CheckIcon, StarIcon } from \"lucide-react\";\nimport { memo } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../lib/utils\";\nimport type { CodexModelOption } from \"../../lib/modelSelection\";\n\nexport const ModelListRow = memo(function ModelListRow({\n\tindex,\n\tisFavorite,\n\tisSelected,\n\tmodel,\n\tonSelect,\n\tonToggleFavorite,\n}: {\n\tindex: number;\n\tisFavorite: boolean;\n\tisSelected: boolean;\n\tmodel: CodexModelOption;\n\tonSelect: () => void;\n\tonToggleFavorite: () => void;\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"group/model-row flex min-w-0 items-center gap-2 rounded-md px-2 py-2 transition-colors\",\n\t\t\t\tisSelected ? \"bg-muted text-foreground\" : \"hover:bg-muted/70\",\n\t\t\t)}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"grid min-w-0 flex-1 grid-cols-[1.5rem_minmax(0,1fr)_auto] items-center gap-2 text-left\"\n\t\t\t\tonClick={onSelect}\n\t\t\t>\n\t\t\t\t<span className=\"flex size-6 items-center justify-center rounded bg-muted/70 text-[11px] font-medium tabular-nums text-muted-foreground\">\n\t\t\t\t\t{index + 1}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"grid min-w-0 gap-0.5\">\n\t\t\t\t\t<span className=\"truncate text-sm font-medium\">{model.name}</span>\n\t\t\t\t\t<span className=\"truncate text-xs text-muted-foreground/70\">\n\t\t\t\t\t\t{model.description}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t{isSelected ? (\n\t\t\t\t\t<CheckIcon className=\"size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n\t\t\t\t) : null}\n\t\t\t</button>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tsize=\"icon-xs\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label={isFavorite ? `Unfavorite ${model.name}` : `Favorite ${model.name}`}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"opacity-60 group-hover/model-row:opacity-100\",\n\t\t\t\t\tisFavorite && \"text-primary opacity-100\",\n\t\t\t\t)}\n\t\t\t\tonClick={onToggleFavorite}\n\t\t\t>\n\t\t\t\t<StarIcon\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName={cn(isFavorite && \"fill-current\")}\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</div>\n\t);\n});\n","import type { ComponentProps } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport type { ProviderDriverKind } from \"../../lib/modelSelection\";\n\nexport type ModelEsque = {\n\tname: string;\n\tshortName?: string | undefined;\n\tslug: string;\n\tsubProvider?: string | undefined;\n};\n\nexport function OpenAIProviderIcon({\n\tclassName,\n\t...props\n}: ComponentProps<\"svg\">) {\n\treturn (\n\t\t<svg\n\t\t\t{...props}\n\t\t\tpreserveAspectRatio=\"xMidYMid\"\n\t\t\tviewBox=\"0 0 256 260\"\n\t\t\tclassName={cn(\"fill-current\", className)}\n\t\t>\n\t\t\t<path d=\"M239.184 106.203a64.716 64.716 0 0 0-5.576-53.103C219.452 28.459 191 15.784 163.213 21.74A65.586 65.586 0 0 0 52.096 45.22a64.716 64.716 0 0 0-43.23 31.36c-14.31 24.602-11.061 55.634 8.033 76.74a64.665 64.665 0 0 0 5.525 53.102c14.174 24.65 42.644 37.324 70.446 31.36a64.72 64.72 0 0 0 48.754 21.744c28.481.025 53.714-18.361 62.414-45.481a64.767 64.767 0 0 0 43.229-31.36c14.137-24.558 10.875-55.423-8.083-76.483Zm-97.56 136.338a48.397 48.397 0 0 1-31.105-11.255l1.535-.87 51.67-29.825a8.595 8.595 0 0 0 4.247-7.367v-72.85l21.845 12.636c.218.111.37.32.409.563v60.367c-.056 26.818-21.783 48.545-48.601 48.601Zm-104.466-44.61a48.345 48.345 0 0 1-5.781-32.589l1.534.921 51.722 29.826a8.339 8.339 0 0 0 8.441 0l63.181-36.425v25.221a.87.87 0 0 1-.358.665l-52.335 30.184c-23.257 13.398-52.97 5.431-66.404-17.803ZM23.549 85.38a48.499 48.499 0 0 1 25.58-21.333v61.39a8.288 8.288 0 0 0 4.195 7.316l62.874 36.272-21.845 12.636a.819.819 0 0 1-.767 0L41.353 151.53c-23.211-13.454-31.171-43.144-17.804-66.405v.256Zm179.466 41.695-63.08-36.63L161.73 77.86a.819.819 0 0 1 .768 0l52.233 30.184a48.6 48.6 0 0 1-7.316 87.635v-61.391a8.544 8.544 0 0 0-4.4-7.213Zm21.742-32.69-1.535-.922-51.619-30.081a8.39 8.39 0 0 0-8.492 0L99.98 99.808V74.587a.716.716 0 0 1 .307-.665l52.233-30.133a48.652 48.652 0 0 1 72.236 50.391v.205ZM88.061 139.097l-21.845-12.585a.87.87 0 0 1-.41-.614V65.685a48.652 48.652 0 0 1 79.757-37.346l-1.535.87-51.67 29.825a8.595 8.595 0 0 0-4.246 7.367l-.051 72.697Zm11.868-25.58 28.138-16.217 28.188 16.218v32.434l-28.086 16.218-28.188-16.218-.052-32.434Z\" />\n\t\t</svg>\n\t);\n}\n\nexport const PROVIDER_ICON_BY_PROVIDER: Partial<\n\tRecord<ProviderDriverKind, typeof OpenAIProviderIcon>\n> = {\n\tcodex: OpenAIProviderIcon,\n};\n\nexport function getDisplayModelName(\n\tmodel: ModelEsque,\n\toptions?: { preferShortName?: boolean },\n): string {\n\tif (options?.preferShortName && model.shortName) {\n\t\treturn model.shortName;\n\t}\n\treturn model.name;\n}\n\nexport function getTriggerDisplayModelName(model: ModelEsque): string {\n\treturn getDisplayModelName(model, { preferShortName: true });\n}\n\nexport function getTriggerDisplayModelLabel(model: ModelEsque): string {\n\tconst title = getTriggerDisplayModelName(model);\n\treturn model.subProvider ? `${model.subProvider} - ${title}` : title;\n}\n","import { type CSSProperties, memo } from \"react\";\n\nimport type { ProviderDriverKind } from \"../../lib/modelSelection\";\nimport { cn } from \"../../lib/utils\";\nimport { PROVIDER_ICON_BY_PROVIDER } from \"./providerIconUtils\";\n\nexport function providerInstanceInitials(label: string): string {\n\tconst words = label.replace(/[_-]+/g, \" \").split(/\\s+/u).filter(Boolean);\n\tif (words.length === 0) {\n\t\treturn \"\";\n\t}\n\tif (words.length === 1) {\n\t\treturn words[0]?.slice(0, 2).toUpperCase() ?? \"\";\n\t}\n\treturn words\n\t\t.slice(0, 2)\n\t\t.map((word) => word[0]?.toUpperCase() ?? \"\")\n\t\t.join(\"\");\n}\n\nexport const ProviderInstanceIcon = memo(function ProviderInstanceIcon(props: {\n\taccentColor?: string | undefined;\n\tbadgeClassName?: string;\n\tclassName?: string;\n\tdisplayName: string;\n\tdriverKind: ProviderDriverKind;\n\ticonClassName?: string;\n\tshowBadge?: boolean;\n\tstatusDotClassName?: string;\n}) {\n\tconst Icon = PROVIDER_ICON_BY_PROVIDER[props.driverKind] ?? null;\n\tconst accentStyle = props.accentColor\n\t\t? ({ \"--provider-accent\": props.accentColor } as CSSProperties)\n\t\t: undefined;\n\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"relative isolate inline-flex shrink-0 items-center justify-center\",\n\t\t\t\tprops.className,\n\t\t\t)}\n\t\t\tstyle={accentStyle}\n\t\t\tdata-provider-accent-color={props.accentColor}\n\t\t>\n\t\t\t{Icon ? (\n\t\t\t\t<Icon className={cn(\"size-5 shrink-0\", props.iconClassName)} aria-hidden />\n\t\t\t) : (\n\t\t\t\t<span className={cn(\"text-[10px] font-semibold leading-none\", props.iconClassName)}>\n\t\t\t\t\t{providerInstanceInitials(props.displayName)}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{props.statusDotClassName ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"pointer-events-none absolute -left-0.5 -top-0.5 size-2 rounded-full ring-2 ring-background\",\n\t\t\t\t\t\tprops.statusDotClassName,\n\t\t\t\t\t)}\n\t\t\t\t\taria-hidden\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{props.showBadge ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"pointer-events-none absolute right-0 bottom-0 flex h-3.5 min-w-3.5 items-center justify-center rounded-full border border-background px-0.5 text-[8px] font-semibold leading-none shadow-sm\",\n\t\t\t\t\t\tprops.accentColor\n\t\t\t\t\t\t\t? \"bg-[var(--provider-accent)] text-white\"\n\t\t\t\t\t\t\t: \"bg-muted text-muted-foreground\",\n\t\t\t\t\t\tprops.badgeClassName,\n\t\t\t\t\t)}\n\t\t\t\t\taria-hidden\n\t\t\t\t>\n\t\t\t\t\t{providerInstanceInitials(props.displayName)}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</span>\n\t);\n});\n","import { Clock3Icon, StarIcon } from \"lucide-react\";\nimport { memo, useMemo } from \"react\";\n\nimport type {\n\tProviderInstanceEntry,\n\tProviderInstanceId,\n} from \"../../lib/modelSelection\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { ProviderInstanceIcon } from \"./ProviderInstanceIcon\";\n\nfunction describeUnavailableInstance(entry: ProviderInstanceEntry): string {\n\tconst label = entry.displayName;\n\tif (entry.status === \"ready\") {\n\t\treturn label;\n\t}\n\tconst kind =\n\t\tentry.status === \"error\"\n\t\t\t? \"Unavailable\"\n\t\t\t: entry.status === \"warning\"\n\t\t\t\t? \"Limited\"\n\t\t\t\t: entry.status === \"disabled\"\n\t\t\t\t\t? \"Disabled in settings\"\n\t\t\t\t\t: \"Not ready\";\n\tconst msg = entry.snapshot.message?.trim();\n\treturn msg ? `${label} - ${kind}. ${msg}` : `${label} - ${kind}.`;\n}\n\nconst selectedButtonClass = \"bg-background text-foreground shadow-sm\";\nconst selectedIndicatorClass =\n\t\"pointer-events-none absolute -right-1 top-1/2 z-10 h-5 w-0.5 -translate-y-1/2 rounded-l-full bg-primary\";\nconst soonBadgeClass =\n\t\"pointer-events-none absolute -right-0.5 top-0.5 z-10 flex size-3.5 items-center justify-center rounded-full bg-transparent text-muted-foreground shadow-sm\";\n\nexport const ModelPickerSidebar = memo(function ModelPickerSidebar(props: {\n\tinstanceEntries: ReadonlyArray<ProviderInstanceEntry>;\n\tonSelectInstance: (instanceId: ProviderInstanceId | \"favorites\") => void;\n\tselectedInstanceId: ProviderInstanceId | \"favorites\";\n\tshowComingSoon?: boolean;\n\tshowFavorites?: boolean;\n}) {\n\tconst showFavorites = props.showFavorites ?? true;\n\tconst showComingSoon = props.showComingSoon ?? true;\n\tconst duplicateDriverCounts = useMemo(() => {\n\t\tconst counts = new Map<string, number>();\n\t\tfor (const entry of props.instanceEntries) {\n\t\t\tcounts.set(entry.driverKind, (counts.get(entry.driverKind) ?? 0) + 1);\n\t\t}\n\t\treturn counts;\n\t}, [props.instanceEntries]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"w-12 shrink-0 overflow-y-auto border-r bg-muted/30 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n\t\t\tdata-model-picker-sidebar=\"true\"\n\t\t>\n\t\t\t<div className=\"flex min-h-full flex-col gap-1 p-1\">\n\t\t\t\t{showFavorites ? (\n\t\t\t\t\t<div className=\"mb-1 border-b pb-1\">\n\t\t\t\t\t\t<div className=\"relative w-full\">\n\t\t\t\t\t\t\t{props.selectedInstanceId === \"favorites\" ? (\n\t\t\t\t\t\t\t\t<div className={selectedIndicatorClass} />\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"relative isolate flex aspect-square w-full cursor-pointer items-center justify-center rounded transition-colors hover:bg-muted\",\n\t\t\t\t\t\t\t\t\t\t\tprops.selectedInstanceId === \"favorites\" && selectedButtonClass,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tonClick={() => props.onSelectInstance(\"favorites\")}\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tdata-model-picker-provider=\"favorites\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Favorites\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<StarIcon className=\"size-5 shrink-0 fill-current\" aria-hidden />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t<TooltipContent side=\"left\" align=\"center\">\n\t\t\t\t\t\t\t\t\tFavorites\n\t\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\n\t\t\t\t{props.instanceEntries.map((entry) => {\n\t\t\t\t\tconst isDisabled = !entry.isAvailable || entry.status !== \"ready\";\n\t\t\t\t\tconst isSelected = props.selectedInstanceId === entry.instanceId;\n\t\t\t\t\tconst showInstanceBadge =\n\t\t\t\t\t\tBoolean(entry.accentColor) ||\n\t\t\t\t\t\t(duplicateDriverCounts.get(entry.driverKind) ?? 0) > 1;\n\t\t\t\t\tconst tooltip = isDisabled\n\t\t\t\t\t\t? describeUnavailableInstance(entry)\n\t\t\t\t\t\t: entry.displayName;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={entry.instanceId} className=\"relative w-full\">\n\t\t\t\t\t\t\t{isSelected ? <div className={selectedIndicatorClass} /> : null}\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tdata-model-picker-provider={entry.instanceId}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"relative isolate flex aspect-square w-full cursor-pointer items-center justify-center rounded transition-colors hover:bg-muted\",\n\t\t\t\t\t\t\t\t\t\t\tisSelected && selectedButtonClass,\n\t\t\t\t\t\t\t\t\t\t\tisDisabled && \"cursor-not-allowed opacity-50 hover:bg-transparent\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tdata-provider-accent-color={entry.accentColor}\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\tif (!isDisabled) {\n\t\t\t\t\t\t\t\t\t\t\t\tprops.onSelectInstance(entry.instanceId);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\taria-label={tooltip}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ProviderInstanceIcon\n\t\t\t\t\t\t\t\t\t\t\tdriverKind={entry.driverKind}\n\t\t\t\t\t\t\t\t\t\t\tdisplayName={entry.displayName}\n\t\t\t\t\t\t\t\t\t\t\taccentColor={entry.accentColor}\n\t\t\t\t\t\t\t\t\t\t\tshowBadge={showInstanceBadge}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"size-6\"\n\t\t\t\t\t\t\t\t\t\t\ticonClassName=\"size-5\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t<TooltipContent side=\"left\" align=\"center\" className=\"max-w-64 text-balance\">\n\t\t\t\t\t\t\t\t\t{tooltip}\n\t\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\n\t\t\t\t{showComingSoon ? (\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<span className=\"relative block w-full\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclassName=\"relative isolate flex aspect-square w-full cursor-not-allowed items-center justify-center rounded opacity-50 transition-colors hover:bg-transparent\"\n\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdata-model-picker-provider=\"coming-soon\"\n\t\t\t\t\t\t\t\t\taria-label=\"More providers coming soon\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Clock3Icon className=\"size-5 text-muted-foreground/85\" aria-hidden />\n\t\t\t\t\t\t\t\t\t<span className={soonBadgeClass} aria-hidden>\n\t\t\t\t\t\t\t\t\t\t<Clock3Icon className=\"size-2\" />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent side=\"left\" align=\"center\">\n\t\t\t\t\t\t\tMore providers coming soon\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","import {\n\tnormalizeSearchQuery,\n\tscoreQueryMatch,\n} from \"../../lib/searchRanking\";\n\ntype ModelPickerSearchableModel = {\n\t/** Driver kind, indexed so \"codex\" still matches a Codex Personal instance. */\n\tdriverKind: string;\n\t/**\n\t * Instance display name. Indexed as a search field so typing the\n\t * user-authored provider name matches its models directly.\n\t */\n\tproviderDisplayName: string;\n\tname: string;\n\tshortName?: string;\n\tsubProvider?: string;\n\tisFavorite?: boolean;\n};\n\nconst MODEL_PICKER_FAVORITE_SCORE_BOOST = 24;\n\nfunction getModelPickerSearchFields(\n\tmodel: ModelPickerSearchableModel,\n): string[] {\n\treturn [\n\t\tnormalizeSearchQuery(model.name),\n\t\t...(model.shortName ? [normalizeSearchQuery(model.shortName)] : []),\n\t\t...(model.subProvider ? [normalizeSearchQuery(model.subProvider)] : []),\n\t\tnormalizeSearchQuery(model.driverKind),\n\t\tnormalizeSearchQuery(model.providerDisplayName),\n\t\tbuildModelPickerSearchText(model),\n\t];\n}\n\nfunction scoreModelPickerSearchToken(\n\tfield: string,\n\ttoken: string,\n\tfieldBase: number,\n): number | null {\n\treturn scoreQueryMatch({\n\t\tvalue: field,\n\t\tquery: token,\n\t\texactBase: fieldBase,\n\t\tprefixBase: fieldBase + 2,\n\t\tboundaryBase: fieldBase + 4,\n\t\tincludesBase: fieldBase + 6,\n\t\t...(token.length >= 3 ? { fuzzyBase: fieldBase + 100 } : {}),\n\t});\n}\n\nexport function buildModelPickerSearchText(\n\tmodel: ModelPickerSearchableModel,\n): string {\n\treturn normalizeSearchQuery(\n\t\t[\n\t\t\tmodel.name,\n\t\t\tmodel.shortName,\n\t\t\tmodel.subProvider,\n\t\t\tmodel.driverKind,\n\t\t\tmodel.providerDisplayName,\n\t\t]\n\t\t\t.filter(\n\t\t\t\t(value): value is string =>\n\t\t\t\t\ttypeof value === \"string\" && value.length > 0,\n\t\t\t)\n\t\t\t.join(\" \"),\n\t);\n}\n\nexport function scoreModelPickerSearch(\n\tmodel: ModelPickerSearchableModel,\n\tquery: string,\n): number | null {\n\tconst tokens = normalizeSearchQuery(query)\n\t\t.split(/\\s+/u)\n\t\t.filter((token) => token.length > 0);\n\n\tif (tokens.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst fields = getModelPickerSearchFields(model);\n\tlet score = 0;\n\n\tfor (const token of tokens) {\n\t\tconst tokenScores = fields\n\t\t\t.map((field, index) => scoreModelPickerSearchToken(field, token, index * 10))\n\t\t\t.filter((fieldScore): fieldScore is number => fieldScore !== null);\n\n\t\tif (tokenScores.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tscore += Math.min(...tokenScores);\n\t}\n\n\treturn model.isFavorite ? score - MODEL_PICKER_FAVORITE_SCORE_BOOST : score;\n}\n","import { SearchIcon } from \"lucide-react\";\nimport { memo, useMemo, useState } from \"react\";\n\nimport { Input } from \"../ui/input\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tdefaultCodexProviderInstance,\n\ttype CodexModelOption,\n\ttype ProviderInstanceEntry,\n\ttype ProviderInstanceId,\n} from \"../../lib/modelSelection\";\n\nimport { ModelListRow } from \"./ModelListRow\";\nimport { ModelPickerSidebar } from \"./ModelPickerSidebar\";\nimport {\n\tbuildModelPickerSearchText,\n\tscoreModelPickerSearch,\n} from \"./modelPickerSearch\";\n\nexport const ModelPickerContent = memo(function ModelPickerContent({\n\tfavoriteModels,\n\tinstanceEntries = [defaultCodexProviderInstance],\n\tmodel,\n\tmodelOptions,\n\tonModelChange,\n\tonRequestClose,\n\tonToggleFavorite,\n}: {\n\tfavoriteModels: readonly string[];\n\tinstanceEntries?: ReadonlyArray<ProviderInstanceEntry>;\n\tmodel: string;\n\tmodelOptions: readonly CodexModelOption[];\n\tonModelChange: (model: string) => void;\n\tonRequestClose?: () => void;\n\tonToggleFavorite: (model: string) => void;\n}) {\n\tconst [searchQuery, setSearchQuery] = useState(\"\");\n\tconst [selectedInstanceId, setSelectedInstanceId] = useState<\n\t\tProviderInstanceId | \"favorites\"\n\t>(() => (favoriteModels.length > 0 ? \"favorites\" : instanceEntries[0]?.instanceId ?? \"codex\"));\n\tconst favoriteSet = useMemo(() => new Set(favoriteModels), [favoriteModels]);\n\tconst normalizedQuery = searchQuery.trim().toLowerCase();\n\tconst filteredModels = useMemo(() => {\n\t\treturn filterCodexModelPickerOptions({\n\t\t\tfavoriteModels: favoriteSet,\n\t\t\tmodelOptions,\n\t\t\tquery: normalizedQuery,\n\t\t});\n\t}, [favoriteSet, modelOptions, normalizedQuery]);\n\tconst visibleModels = useMemo(() => {\n\t\tif (selectedInstanceId === \"favorites\" && !normalizedQuery) {\n\t\t\treturn filteredModels.filter((option) => favoriteSet.has(option.slug));\n\t\t}\n\t\treturn filteredModels;\n\t}, [favoriteSet, filteredModels, normalizedQuery, selectedInstanceId]);\n\n\treturn (\n\t\t<div className=\"relative flex h-screen max-h-96 w-screen max-w-120 overflow-hidden rounded-lg border bg-popover text-popover-foreground shadow-lg/5\">\n\t\t\t<ModelPickerSidebar\n\t\t\t\tinstanceEntries={instanceEntries}\n\t\t\t\tselectedInstanceId={selectedInstanceId}\n\t\t\t\tonSelectInstance={setSelectedInstanceId}\n\t\t\t/>\n\t\t\t<div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n\t\t\t\t<div className=\"border-b px-3 py-2\">\n\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t<SearchIcon\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/50\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\tclassName=\"h-8 rounded-md border-0 bg-muted/45 pl-8 shadow-none focus-visible:ring-1\"\n\t\t\t\t\t\t\tplaceholder=\"Search models...\"\n\t\t\t\t\t\t\tvalue={searchQuery}\n\t\t\t\t\t\t\tonChange={(event) => setSearchQuery(event.currentTarget.value)}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\tif (event.key === \"Escape\") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonRequestClose?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n\t\t\t\t\t{visibleModels.length > 0 ? (\n\t\t\t\t\t\t<div className=\"grid gap-1\">\n\t\t\t\t\t\t\t{visibleModels.map((option, index) => (\n\t\t\t\t\t\t\t\t<ModelListRow\n\t\t\t\t\t\t\t\t\tkey={option.slug}\n\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\tisFavorite={favoriteSet.has(option.slug)}\n\t\t\t\t\t\t\t\t\tisSelected={option.slug === model}\n\t\t\t\t\t\t\t\t\tmodel={option}\n\t\t\t\t\t\t\t\t\tonSelect={() => onModelChange(option.slug)}\n\t\t\t\t\t\t\t\t\tonToggleFavorite={() => onToggleFavorite(option.slug)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"py-8 text-center text-muted-foreground text-sm\">\n\t\t\t\t\t\t\tNo models found\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"border-t px-3 py-2 text-[11px] text-muted-foreground\">\n\t\t\t\t\t<span className={cn(\"font-medium\", favoriteModels.length && \"text-foreground\")}>\n\t\t\t\t\t\t{favoriteModels.length}\n\t\t\t\t\t</span>{\" \"}\n\t\t\t\t\tfavorite{favoriteModels.length === 1 ? \"\" : \"s\"}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nexport function filterCodexModelPickerOptions(input: {\n\tfavoriteModels: ReadonlySet<string>;\n\tmodelOptions: readonly CodexModelOption[];\n\tquery: string;\n}): CodexModelOption[] {\n\tconst normalizedQuery = input.query.trim().toLowerCase();\n\tif (normalizedQuery) {\n\t\treturn input.modelOptions\n\t\t\t.map((option) => {\n\t\t\t\tconst isFavorite = input.favoriteModels.has(option.slug);\n\t\t\t\tconst searchableModel = {\n\t\t\t\t\tdriverKind: \"codex\",\n\t\t\t\t\tproviderDisplayName: \"Codex\",\n\t\t\t\t\tname: option.name,\n\t\t\t\t\t...(option.shortName ? { shortName: option.shortName } : {}),\n\t\t\t\t\tisFavorite,\n\t\t\t\t};\n\t\t\t\tconst score = scoreModelPickerSearch(searchableModel, normalizedQuery);\n\t\t\t\treturn {\n\t\t\t\t\toption,\n\t\t\t\t\tscore,\n\t\t\t\t\tisFavorite,\n\t\t\t\t\ttieBreaker: buildModelPickerSearchText(searchableModel),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\trankedModel,\n\t\t\t\t): rankedModel is {\n\t\t\t\t\toption: CodexModelOption;\n\t\t\t\t\tscore: number;\n\t\t\t\t\tisFavorite: boolean;\n\t\t\t\t\ttieBreaker: string;\n\t\t\t\t} => rankedModel.score !== null,\n\t\t\t)\n\t\t\t.sort((left, right) => {\n\t\t\t\tconst scoreDelta = left.score - right.score;\n\t\t\t\tif (scoreDelta !== 0) {\n\t\t\t\t\treturn scoreDelta;\n\t\t\t\t}\n\t\t\t\tif (left.isFavorite !== right.isFavorite) {\n\t\t\t\t\treturn left.isFavorite ? -1 : 1;\n\t\t\t\t}\n\t\t\t\treturn left.tieBreaker.localeCompare(right.tieBreaker);\n\t\t\t})\n\t\t\t.map((rankedModel) => rankedModel.option);\n\t}\n\n\tconst models = [...input.modelOptions];\n\n\treturn [...models].sort((left, right) => {\n\t\tconst leftFavorite = input.favoriteModels.has(left.slug);\n\t\tconst rightFavorite = input.favoriteModels.has(right.slug);\n\t\tif (leftFavorite !== rightFavorite) {\n\t\t\treturn leftFavorite ? -1 : 1;\n\t\t}\n\t\treturn input.modelOptions.indexOf(left) - input.modelOptions.indexOf(right);\n\t});\n}\n","import { ChevronDownIcon } from \"lucide-react\";\nimport { memo, useMemo, useState } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../ui/popover\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tcodexModelOptions,\n\tdefaultCodexProviderInstance,\n\tresolveCodexModelOption,\n\ttype CodexModelOption,\n\ttype ProviderInstanceEntry,\n} from \"../../lib/modelSelection\";\n\nimport { ModelPickerContent } from \"./ModelPickerContent\";\nimport { ProviderInstanceIcon } from \"./ProviderInstanceIcon\";\nimport { getTriggerDisplayModelLabel } from \"./providerIconUtils\";\n\nexport const ProviderModelPicker = memo(function ProviderModelPicker({\n\tclassName,\n\tcompact = false,\n\tdisabled = false,\n\tfavoriteModels,\n\tinstanceEntries = [defaultCodexProviderInstance],\n\tmodel,\n\tmodelOptions = codexModelOptions,\n\topen,\n\tonFavoriteModelsChange,\n\tonModelChange,\n\tonOpenChange,\n}: {\n\tclassName?: string;\n\tcompact?: boolean;\n\tdisabled?: boolean;\n\tfavoriteModels: readonly string[];\n\tinstanceEntries?: ReadonlyArray<ProviderInstanceEntry>;\n\tmodel: string;\n\tmodelOptions?: readonly CodexModelOption[];\n\topen?: boolean;\n\tonFavoriteModelsChange: (models: string[]) => void;\n\tonModelChange: (model: string) => void;\n\tonOpenChange?: (open: boolean) => void;\n}) {\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n\tconst isOpen = open ?? uncontrolledOpen;\n\tconst activeModel = useMemo(() => resolveCodexModelOption(model), [model]);\n\tconst activeInstance = instanceEntries[0] ?? defaultCodexProviderInstance;\n\tconst triggerTitle = getTriggerDisplayModelLabel(activeModel);\n\n\tfunction setOpen(nextOpen: boolean) {\n\t\tonOpenChange?.(nextOpen);\n\t\tif (open === undefined) {\n\t\t\tsetUncontrolledOpen(nextOpen);\n\t\t}\n\t}\n\n\tfunction toggleFavorite(modelSlug: string) {\n\t\tconst next = favoriteModels.includes(modelSlug)\n\t\t\t? favoriteModels.filter((entry) => entry !== modelSlug)\n\t\t\t: [...favoriteModels, modelSlug];\n\t\tonFavoriteModelsChange(next);\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\topen={isOpen}\n\t\t\tonOpenChange={(nextOpen) => {\n\t\t\t\tsetOpen(disabled ? false : nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tdata-chat-provider-model-picker=\"true\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0 justify-start overflow-hidden whitespace-nowrap px-2 text-muted-foreground/70 hover:text-foreground/80 [&_svg]:mx-0\",\n\t\t\t\t\t\tcompact ? \"max-w-42 shrink-0\" : \"max-w-48 shrink sm:max-w-56 sm:px-3\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex min-w-0 w-full box-border items-center gap-2 overflow-hidden\",\n\t\t\t\t\t\t\tcompact ? \"max-w-36 sm:pl-1\" : undefined,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ProviderInstanceIcon\n\t\t\t\t\t\t\tclassName=\"size-4 shrink-0\"\n\t\t\t\t\t\t\ticonClassName=\"size-4\"\n\t\t\t\t\t\t\tdriverKind={activeInstance.driverKind}\n\t\t\t\t\t\t\tdisplayName={activeInstance.displayName}\n\t\t\t\t\t\t\taccentColor={activeInstance.accentColor}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t<span className=\"min-w-0 flex-1 truncate text-left\">\n\t\t\t\t\t\t\t\t\t{triggerTitle}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t<TooltipContent side=\"top\">{triggerTitle}</TooltipContent>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t<ChevronDownIcon\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"size-3 shrink-0 opacity-60\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent\n\t\t\t\talign=\"start\"\n\t\t\t\tclassName=\"border-0 bg-transparent p-0 shadow-none ring-0\"\n\t\t\t>\n\t\t\t\t<ModelPickerContent\n\t\t\t\t\tfavoriteModels={favoriteModels}\n\t\t\t\t\tinstanceEntries={instanceEntries}\n\t\t\t\t\tmodel={model}\n\t\t\t\t\tmodelOptions={modelOptions}\n\t\t\t\t\tonRequestClose={() => setOpen(false)}\n\t\t\t\t\tonModelChange={(nextModel) => {\n\t\t\t\t\t\tonModelChange(nextModel);\n\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t}}\n\t\t\t\t\tonToggleFavorite={toggleFavorite}\n\t\t\t\t/>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n});\n","import type { ThreadTokenUsage } from \"../../../../../codex-rs/app-server-protocol/schema/typescript/v2\";\n\nexport type ContextWindowSnapshot = {\n\tcachedInputTokens: number | null;\n\tcompactsAutomatically: boolean;\n\tdurationMs: number | null;\n\tinputTokens: number | null;\n\tlastCachedInputTokens: number | null;\n\tlastInputTokens: number | null;\n\tlastOutputTokens: number | null;\n\tlastReasoningOutputTokens: number | null;\n\tlastUsedTokens: number | null;\n\tmaxTokens: number | null;\n\toutputTokens: number | null;\n\treasoningOutputTokens: number | null;\n\tremainingPercentage: number | null;\n\tremainingTokens: number | null;\n\ttoolUses: number | null;\n\ttotalProcessedTokens: number | null;\n\tupdatedAt: string;\n\tusedPercentage: number | null;\n\tusedTokens: number;\n};\n\nexport function deriveContextWindowSnapshotFromTokenUsage(input: {\n\ttokenUsage: ThreadTokenUsage | null | undefined;\n\tupdatedAt?: string | null;\n}): ContextWindowSnapshot | null {\n\tconst tokenUsage = input.tokenUsage;\n\tif (!tokenUsage || tokenUsage.total.totalTokens <= 0) {\n\t\treturn null;\n\t}\n\n\tconst usedTokens = tokenUsage.total.totalTokens;\n\tconst maxTokens = tokenUsage.modelContextWindow;\n\tconst usedPercentage =\n\t\tmaxTokens !== null && maxTokens > 0\n\t\t\t? Math.min(100, (usedTokens / maxTokens) * 100)\n\t\t\t: null;\n\tconst remainingTokens =\n\t\tmaxTokens !== null ? Math.max(0, Math.round(maxTokens - usedTokens)) : null;\n\tconst remainingPercentage =\n\t\tusedPercentage !== null ? Math.max(0, 100 - usedPercentage) : null;\n\n\treturn {\n\t\tcachedInputTokens: tokenUsage.total.cachedInputTokens,\n\t\tcompactsAutomatically: maxTokens !== null,\n\t\tdurationMs: null,\n\t\tinputTokens: tokenUsage.total.inputTokens,\n\t\tlastCachedInputTokens: tokenUsage.last.cachedInputTokens,\n\t\tlastInputTokens: tokenUsage.last.inputTokens,\n\t\tlastOutputTokens: tokenUsage.last.outputTokens,\n\t\tlastReasoningOutputTokens: tokenUsage.last.reasoningOutputTokens,\n\t\tlastUsedTokens: tokenUsage.last.totalTokens,\n\t\tmaxTokens,\n\t\toutputTokens: tokenUsage.total.outputTokens,\n\t\treasoningOutputTokens: tokenUsage.total.reasoningOutputTokens,\n\t\tremainingPercentage,\n\t\tremainingTokens,\n\t\ttoolUses: null,\n\t\ttotalProcessedTokens: null,\n\t\tupdatedAt: input.updatedAt ?? new Date().toISOString(),\n\t\tusedPercentage,\n\t\tusedTokens,\n\t};\n}\n\nexport function formatContextWindowTokens(value: number | null): string {\n\tif (value === null || !Number.isFinite(value)) {\n\t\treturn \"0\";\n\t}\n\tif (value < 1_000) {\n\t\treturn `${Math.round(value)}`;\n\t}\n\tif (value < 10_000) {\n\t\treturn `${(value / 1_000).toFixed(1).replace(/\\.0$/, \"\")}k`;\n\t}\n\tif (value < 1_000_000) {\n\t\treturn `${Math.round(value / 1_000)}k`;\n\t}\n\treturn `${(value / 1_000_000).toFixed(1).replace(/\\.0$/, \"\")}m`;\n}\n","import { cn } from \"../../lib/utils\";\nimport {\n\tformatContextWindowTokens,\n\ttype ContextWindowSnapshot,\n} from \"../../lib/contextWindow\";\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../ui/popover\";\n\nfunction formatPercentage(value: number | null): string | null {\n\tif (value === null || !Number.isFinite(value)) {\n\t\treturn null;\n\t}\n\tif (value < 10) {\n\t\treturn `${value.toFixed(1).replace(/\\.0$/, \"\")}%`;\n\t}\n\treturn `${Math.round(value)}%`;\n}\n\nexport function ContextWindowMeter(props: { usage: ContextWindowSnapshot }) {\n\tconst { usage } = props;\n\tconst usedPercentage = formatPercentage(usage.usedPercentage);\n\tconst normalizedPercentage = Math.max(0, Math.min(100, usage.usedPercentage ?? 0));\n\tconst radius = 9.75;\n\tconst circumference = 2 * Math.PI * radius;\n\tconst dashOffset = circumference - (normalizedPercentage / 100) * circumference;\n\n\treturn (\n\t\t<Popover>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"group inline-flex items-center justify-center rounded-full transition-opacity hover:opacity-85\"\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tusage.maxTokens !== null && usedPercentage\n\t\t\t\t\t\t\t? `Context window ${usedPercentage} used`\n\t\t\t\t\t\t\t: `Context window ${formatContextWindowTokens(usage.usedTokens)} tokens used`\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"relative flex h-6 w-6 items-center justify-center\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tclassName=\"-rotate-90 absolute inset-0 h-full w-full transform-gpu\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tcx=\"12\"\n\t\t\t\t\t\t\t\tcy=\"12\"\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"color-mix(in oklab, var(--color-muted) 70%, transparent)\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tcx=\"12\"\n\t\t\t\t\t\t\t\tcy=\"12\"\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"var(--color-muted-foreground)\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeDasharray={circumference}\n\t\t\t\t\t\t\t\tstrokeDashoffset={dashOffset}\n\t\t\t\t\t\t\t\tclassName=\"transition-[stroke-dashoffset] duration-500 ease-out motion-reduce:transition-none\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative flex h-[15px] w-[15px] items-center justify-center rounded-full bg-background text-[8px] font-medium\",\n\t\t\t\t\t\t\t\t\"text-muted-foreground\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{usage.usedPercentage !== null\n\t\t\t\t\t\t\t\t? Math.round(usage.usedPercentage)\n\t\t\t\t\t\t\t\t: formatContextWindowTokens(usage.usedTokens)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent side=\"top\" align=\"end\" className=\"w-max max-w-none px-3 py-2\">\n\t\t\t\t<div className=\"space-y-1.5 leading-tight\">\n\t\t\t\t\t<div className=\"text-[11px] font-medium uppercase tracking-[0.08em] text-muted-foreground\">\n\t\t\t\t\t\tContext window\n\t\t\t\t\t</div>\n\t\t\t\t\t{usage.maxTokens !== null && usedPercentage ? (\n\t\t\t\t\t\t<div className=\"whitespace-nowrap text-xs font-medium text-foreground\">\n\t\t\t\t\t\t\t<span>{usedPercentage}</span>\n\t\t\t\t\t\t\t<span className=\"mx-1\">⋅</span>\n\t\t\t\t\t\t\t<span>{formatContextWindowTokens(usage.usedTokens)}</span>\n\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t<span>{formatContextWindowTokens(usage.maxTokens)} context used</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"text-sm text-foreground\">\n\t\t\t\t\t\t\t{formatContextWindowTokens(usage.usedTokens)} tokens used so far\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{(usage.totalProcessedTokens ?? null) !== null &&\n\t\t\t\t\t(usage.totalProcessedTokens ?? 0) > usage.usedTokens ? (\n\t\t\t\t\t\t<div className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\tTotal processed: {formatContextWindowTokens(usage.totalProcessedTokens ?? null)} tokens\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{usage.compactsAutomatically ? (\n\t\t\t\t\t\t<div className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\tAutomatically compacts its context when needed.\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n","export interface ComposerImageAttachment {\n\tid: string;\n\tfile: File;\n\tname: string;\n\ttype: string;\n\tsize: number;\n\tpreviewUrl: string | null;\n}\n\nexport interface ExpandedImageItem {\n\tsrc: string;\n\tname: string;\n}\n\nexport interface ExpandedImagePreview {\n\timages: ExpandedImageItem[];\n\tindex: number;\n}\n\nexport interface PersistedComposerDraftImageAttachment {\n\tid: string;\n\tname: string;\n\ttype: string;\n\tsize: number;\n\tdataUrl: string;\n}\n\nexport interface ComposerImageValidationResult {\n\taccepted: File[];\n\terror: string | null;\n}\n\nexport const WORKSPACE_CHAT_MAX_IMAGE_ATTACHMENTS = 8;\nexport const WORKSPACE_CHAT_MAX_IMAGE_BYTES = 10 * 1024 * 1024;\n\nconst imageSizeLimitLabel = `${Math.round(WORKSPACE_CHAT_MAX_IMAGE_BYTES / (1024 * 1024))}MB`;\nconst acceptedImageTypes = new Set([\"image/png\", \"image/jpeg\", \"image/webp\"]);\n\nexport function isAcceptedComposerImageFile(file: File): boolean {\n\treturn acceptedImageTypes.has(file.type);\n}\n\nexport function validateComposerImageFiles(input: {\n\tcurrentCount?: number;\n\tfiles: Iterable<File>;\n\tmaxCount?: number;\n\tmaxSizeBytes?: number;\n}): ComposerImageValidationResult {\n\tconst maxCount = input.maxCount ?? WORKSPACE_CHAT_MAX_IMAGE_ATTACHMENTS;\n\tconst maxSizeBytes = input.maxSizeBytes ?? WORKSPACE_CHAT_MAX_IMAGE_BYTES;\n\tlet nextCount = input.currentCount ?? 0;\n\tlet error: string | null = null;\n\tconst accepted: File[] = [];\n\n\tfor (const file of input.files) {\n\t\tif (!isAcceptedComposerImageFile(file)) {\n\t\t\terror = `Unsupported file type for '${file.name || \"file\"}'. Please attach PNG, JPEG, or WebP images.`;\n\t\t\tcontinue;\n\t\t}\n\t\tif (file.size > maxSizeBytes) {\n\t\t\terror = `'${file.name || \"image\"}' exceeds the ${imageSizeLimitLabel} attachment limit.`;\n\t\t\tcontinue;\n\t\t}\n\t\tif (nextCount >= maxCount) {\n\t\t\terror = `You can attach up to ${maxCount} images per message.`;\n\t\t\tbreak;\n\t\t}\n\t\taccepted.push(file);\n\t\tnextCount += 1;\n\t}\n\n\treturn { accepted, error };\n}\n\nexport function createComposerImageAttachments(\n\tfiles: Iterable<File>,\n\toptions: {\n\t\tcreateId?: () => string;\n\t\tcreateObjectURL?: (file: File) => string;\n\t} = {},\n): ComposerImageAttachment[] {\n\tconst createId = options.createId ?? defaultAttachmentId;\n\tconst createObjectURL =\n\t\toptions.createObjectURL ??\n\t\t(typeof URL !== \"undefined\" ? URL.createObjectURL.bind(URL) : null);\n\n\treturn Array.from(files)\n\t\t.filter(isAcceptedComposerImageFile)\n\t\t.map((file) => ({\n\t\t\tid: createId(),\n\t\t\tfile,\n\t\t\tname: file.name,\n\t\t\ttype: file.type,\n\t\t\tsize: file.size,\n\t\t\tpreviewUrl: createObjectURL ? createObjectURL(file) : null,\n\t\t}));\n}\n\nexport async function persistComposerDraftAttachments(\n\tattachments: Iterable<ComposerImageAttachment>,\n\treadFileAsDataUrl: (file: File) => Promise<string> = defaultReadFileAsDataUrl,\n): Promise<PersistedComposerDraftImageAttachment[]> {\n\tconst persisted: PersistedComposerDraftImageAttachment[] = [];\n\tfor (const attachment of attachments) {\n\t\tpersisted.push({\n\t\t\tid: attachment.id,\n\t\t\tname: attachment.name,\n\t\t\ttype: attachment.type,\n\t\t\tsize: attachment.size,\n\t\t\tdataUrl: await readFileAsDataUrl(attachment.file),\n\t\t});\n\t}\n\treturn persisted;\n}\n\nexport function restoreComposerDraftAttachments(\n\tattachments: Iterable<PersistedComposerDraftImageAttachment>,\n\toptions: {\n\t\tcreateObjectURL?: (file: File) => string;\n\t} = {},\n): ComposerImageAttachment[] {\n\tconst createObjectURL =\n\t\toptions.createObjectURL ??\n\t\t(typeof URL !== \"undefined\" ? URL.createObjectURL.bind(URL) : null);\n\n\treturn Array.from(attachments).flatMap((attachment) => {\n\t\tconst file = fileFromDataUrl(attachment);\n\t\tif (!file) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tid: attachment.id,\n\t\t\t\tfile,\n\t\t\t\tname: attachment.name,\n\t\t\t\ttype: attachment.type,\n\t\t\t\tsize: attachment.size,\n\t\t\t\tpreviewUrl: createObjectURL ? createObjectURL(file) : attachment.dataUrl,\n\t\t\t},\n\t\t];\n\t});\n}\n\nexport function revokeComposerImageAttachments(\n\tattachments: Iterable<ComposerImageAttachment>,\n\trevokeObjectURL: (url: string) => void =\n\t\ttypeof URL !== \"undefined\" ? URL.revokeObjectURL.bind(URL) : () => undefined,\n) {\n\tfor (const attachment of attachments) {\n\t\tif (attachment.previewUrl) {\n\t\t\trevokeObjectURL(attachment.previewUrl);\n\t\t}\n\t}\n}\n\nexport function buildExpandedImagePreview(\n\tattachments: ReadonlyArray<ComposerImageAttachment>,\n\tselectedAttachmentId: string,\n): ExpandedImagePreview | null {\n\tconst previewable = attachments.flatMap((attachment) =>\n\t\tattachment.previewUrl\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: attachment.id,\n\t\t\t\t\t\tsrc: attachment.previewUrl,\n\t\t\t\t\t\tname: attachment.name,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: [],\n\t);\n\tif (previewable.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst selectedIndex = previewable.findIndex(\n\t\t(attachment) => attachment.id === selectedAttachmentId,\n\t);\n\tif (selectedIndex < 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\timages: previewable.map((attachment) => ({\n\t\t\tsrc: attachment.src,\n\t\t\tname: attachment.name,\n\t\t})),\n\t\tindex: selectedIndex,\n\t};\n}\n\nfunction defaultAttachmentId() {\n\tif (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn `attachment-${Date.now()}-${Math.random().toString(16).slice(2)}`;\n}\n\nfunction defaultReadFileAsDataUrl(file: File): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\t\treader.addEventListener(\"load\", () => {\n\t\t\tif (typeof reader.result === \"string\") {\n\t\t\t\tresolve(reader.result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treject(new Error(\"Could not read image data.\"));\n\t\t});\n\t\treader.addEventListener(\"error\", () => {\n\t\t\treject(reader.error ?? new Error(\"Could not read image data.\"));\n\t\t});\n\t\treader.readAsDataURL(file);\n\t});\n}\n\nfunction fileFromDataUrl(\n\tattachment: PersistedComposerDraftImageAttachment,\n): File | null {\n\tconst commaIndex = attachment.dataUrl.indexOf(\",\");\n\tif (commaIndex < 0) {\n\t\treturn null;\n\t}\n\tconst base64 = attachment.dataUrl.slice(commaIndex + 1);\n\ttry {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let index = 0; index < binary.length; index += 1) {\n\t\t\tbytes[index] = binary.charCodeAt(index);\n\t\t}\n\t\treturn new File([bytes], attachment.name || \"image\", {\n\t\t\ttype: attachment.type || \"image/png\",\n\t\t});\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import { ChevronLeftIcon, ChevronRightIcon, XIcon } from \"lucide-react\";\nimport { memo, useCallback, useEffect, useState } from \"react\";\n\nimport { Button } from \"../ui/button\";\n\nimport type { ExpandedImagePreview } from \"./composer-image-attachments\";\n\nexport const ExpandedImageDialog = memo(function ExpandedImageDialog({\n\tpreview: initialPreview,\n\tonClose,\n}: {\n\tpreview: ExpandedImagePreview;\n\tonClose: () => void;\n}) {\n\tconst [preview, setPreview] = useState(initialPreview);\n\n\tuseEffect(() => {\n\t\tsetPreview(initialPreview);\n\t}, [initialPreview]);\n\n\tconst navigateImage = useCallback((direction: -1 | 1) => {\n\t\tsetPreview((current) => {\n\t\t\tif (current.images.length <= 1) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tconst nextIndex =\n\t\t\t\t(current.index + direction + current.images.length) %\n\t\t\t\tcurrent.images.length;\n\t\t\treturn nextIndex === current.index\n\t\t\t\t? current\n\t\t\t\t: { ...current, index: nextIndex };\n\t\t});\n\t}, []);\n\n\tuseEffect(() => {\n\t\tfunction handleKeyDown(event: KeyboardEvent) {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tonClose();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (preview.images.length <= 1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === \"ArrowLeft\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tnavigateImage(-1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === \"ArrowRight\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tnavigateImage(1);\n\t\t\t}\n\t\t}\n\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [navigateImage, onClose, preview.images.length]);\n\n\tconst item = preview.images[preview.index];\n\tif (!item) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"fixed inset-0 z-50 flex items-center justify-center bg-foreground/75 px-4 py-6\"\n\t\t\trole=\"dialog\"\n\t\t\taria-modal=\"true\"\n\t\t\taria-label=\"Expanded image preview\"\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"absolute inset-0 z-0 cursor-zoom-out\"\n\t\t\t\taria-label=\"Close image preview\"\n\t\t\t\tonClick={onClose}\n\t\t\t/>\n\t\t\t{preview.images.length > 1 ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"absolute left-2 top-1/2 z-20 -translate-y-1/2 text-background/90 hover:bg-background/10 hover:text-background sm:left-6\"\n\t\t\t\t\taria-label=\"Previous image\"\n\t\t\t\t\tonClick={() => navigateImage(-1)}\n\t\t\t\t>\n\t\t\t\t\t<ChevronLeftIcon className=\"size-5\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t) : null}\n\t\t\t<div className=\"relative isolate z-10 max-h-[92vh] max-w-[92vw]\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"absolute right-2 top-2 bg-background/80 hover:bg-background/90\"\n\t\t\t\t\taria-label=\"Close image preview\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t>\n\t\t\t\t\t<XIcon aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t\t<img\n\t\t\t\t\tsrc={item.src}\n\t\t\t\t\talt={item.name}\n\t\t\t\t\tclassName=\"max-h-[86vh] max-w-[92vw] select-none rounded-lg border border-border/70 bg-background object-contain shadow-2xl\"\n\t\t\t\t\tdraggable={false}\n\t\t\t\t/>\n\t\t\t\t<p className=\"mt-2 max-w-[92vw] truncate text-center text-muted-foreground/80 text-xs\">\n\t\t\t\t\t{item.name}\n\t\t\t\t\t{preview.images.length > 1\n\t\t\t\t\t\t? ` (${preview.index + 1}/${preview.images.length})`\n\t\t\t\t\t\t: \"\"}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t{preview.images.length > 1 ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"absolute right-2 top-1/2 z-20 -translate-y-1/2 text-background/90 hover:bg-background/10 hover:text-background sm:right-6\"\n\t\t\t\t\taria-label=\"Next image\"\n\t\t\t\t\tonClick={() => navigateImage(1)}\n\t\t\t\t>\n\t\t\t\t\t<ChevronRightIcon className=\"size-5\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n","export interface PendingActionState {\n\tquestionIndex: number;\n\tisLastQuestion: boolean;\n\tcanAdvance: boolean;\n\tisResponding: boolean;\n\tisComplete: boolean;\n}\n\nexport function formatPendingPrimaryActionLabel(input: {\n\tcompact: boolean;\n\tisLastQuestion: boolean;\n\tisResponding: boolean;\n\tquestionIndex: number;\n}) {\n\tif (input.isResponding) {\n\t\treturn \"Submitting...\";\n\t}\n\tif (input.compact) {\n\t\treturn input.isLastQuestion ? \"Submit\" : \"Next\";\n\t}\n\tif (!input.isLastQuestion) {\n\t\treturn \"Next question\";\n\t}\n\treturn input.questionIndex > 0 ? \"Submit answers\" : \"Submit answer\";\n}\n","import { ChevronDownIcon, ChevronLeftIcon } from \"lucide-react\";\nimport { memo, type PointerEventHandler } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tformatPendingPrimaryActionLabel,\n\ttype PendingActionState,\n} from \"./ComposerPrimaryActions.logic\";\n\nconst preventPointerFocus: PointerEventHandler<HTMLElement> = (event) => {\n\tevent.preventDefault();\n};\n\nexport const ComposerPrimaryActions = memo(function ComposerPrimaryActions({\n\tcompact,\n\tdisabled = false,\n\thasSendableContent,\n\tisConnecting = false,\n\tisEnvironmentUnavailable = false,\n\tisRunning,\n\tisSending,\n\tpendingAction,\n\tpromptHasText = false,\n\tpreserveComposerFocusOnPointerDown = false,\n\tshowPlanFollowUpPrompt = false,\n\tonInterrupt,\n\tonImplementPlanInNewThread,\n\tonPreviousPendingQuestion,\n}: {\n\tcompact: boolean;\n\tdisabled?: boolean;\n\thasSendableContent: boolean;\n\tisConnecting?: boolean;\n\tisEnvironmentUnavailable?: boolean;\n\tisRunning: boolean;\n\tisSending: boolean;\n\tpendingAction: PendingActionState | null;\n\tpromptHasText?: boolean;\n\tpreserveComposerFocusOnPointerDown?: boolean;\n\tshowPlanFollowUpPrompt?: boolean;\n\tonInterrupt: () => void;\n\tonImplementPlanInNewThread?: () => void;\n\tonPreviousPendingQuestion: () => void;\n}) {\n\tconst pointerFocusProps = preserveComposerFocusOnPointerDown\n\t\t? { onPointerDown: preventPointerFocus }\n\t\t: undefined;\n\n\tif (pendingAction) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex items-center justify-end\", compact ? \"gap-1.5\" : \"gap-2\")}>\n\t\t\t\t{pendingAction.questionIndex > 0 ? (\n\t\t\t\t\tcompact ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\t\t\tdisabled={disabled || pendingAction.isResponding}\n\t\t\t\t\t\t\taria-label=\"Previous question\"\n\t\t\t\t\t\t\tonClick={onPreviousPendingQuestion}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronLeftIcon aria-hidden=\"true\" className=\"size-3.5\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\t\t\tdisabled={disabled || pendingAction.isResponding}\n\t\t\t\t\t\t\tonClick={onPreviousPendingQuestion}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tPrevious\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName={cn(\"rounded-full\", compact ? \"px-3\" : \"px-4\")}\n\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\tdisabled={\n\t\t\t\t\t\tdisabled ||\n\t\t\t\t\t\tisConnecting ||\n\t\t\t\t\t\tisEnvironmentUnavailable ||\n\t\t\t\t\t\tpendingAction.isResponding ||\n\t\t\t\t\t\t(pendingAction.isLastQuestion\n\t\t\t\t\t\t\t? !pendingAction.isComplete\n\t\t\t\t\t\t\t: !pendingAction.canAdvance)\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{formatPendingPrimaryActionLabel({\n\t\t\t\t\t\tcompact,\n\t\t\t\t\t\tisLastQuestion: pendingAction.isLastQuestion,\n\t\t\t\t\t\tisResponding: pendingAction.isResponding,\n\t\t\t\t\t\tquestionIndex: pendingAction.questionIndex,\n\t\t\t\t\t})}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (isRunning) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex items-center justify-end\", compact ? \"gap-1.5\" : \"gap-2\")}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"flex size-8 cursor-pointer items-center justify-center rounded-full bg-rose-500/90 text-white transition-all duration-150 hover:scale-105 hover:bg-rose-500 disabled:pointer-events-none disabled:opacity-40 sm:h-8 sm:w-8\"\n\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\tdisabled={isConnecting}\n\t\t\t\t\taria-label=\"Stop response\"\n\t\t\t\t\tonClick={onInterrupt}\n\t\t\t\t>\n\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\" aria-hidden=\"true\">\n\t\t\t\t\t\t<rect x=\"2\" y=\"2\" width=\"8\" height=\"8\" rx=\"1.5\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (showPlanFollowUpPrompt) {\n\t\tif (promptHasText) {\n\t\t\treturn (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-full\",\n\t\t\t\t\t\tcompact ? \"h-9 px-3 sm:h-8\" : \"h-9 px-4 sm:h-8\",\n\t\t\t\t\t)}\n\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\tdisabled={disabled || isSending || isConnecting || isEnvironmentUnavailable}\n\t\t\t\t>\n\t\t\t\t\t{isConnecting || isSending ? \"Sending...\" : \"Refine\"}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"flex items-center justify-end\"\n\t\t\t\tdata-chat-composer-implement-actions=\"true\"\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName=\"h-9 rounded-l-full rounded-r-none px-4 sm:h-8\"\n\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\tdisabled={disabled || isSending || isConnecting || isEnvironmentUnavailable}\n\t\t\t\t>\n\t\t\t\t\t{isConnecting || isSending ? \"Sending...\" : \"Implement\"}\n\t\t\t\t</Button>\n\t\t\t\t<DropdownMenu>\n\t\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tclassName=\"h-9 rounded-l-none rounded-r-full border-l-white/12 px-2 sm:h-8\"\n\t\t\t\t\t\t\taria-label=\"Implementation actions\"\n\t\t\t\t\t\t\t{...pointerFocusProps}\n\t\t\t\t\t\t\tdisabled={disabled || isSending || isConnecting || isEnvironmentUnavailable}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronDownIcon aria-hidden=\"true\" className=\"size-3.5\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t<DropdownMenuContent align=\"end\" side=\"top\">\n\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\tdisabled={!onImplementPlanInNewThread}\n\t\t\t\t\t\t\tonClick={() => onImplementPlanInNewThread?.()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tImplement in a new thread\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t</DropdownMenu>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-end\", compact ? \"gap-1.5\" : \"gap-2\")}>\n\t\t\t<button\n\t\t\t\ttype=\"submit\"\n\t\t\t\tclassName=\"flex h-9 w-9 items-center justify-center rounded-full bg-primary/90 text-primary-foreground transition-all duration-150 enabled:cursor-pointer hover:bg-primary enabled:hover:scale-105 disabled:pointer-events-none disabled:opacity-30 sm:h-8 sm:w-8\"\n\t\t\t\t{...pointerFocusProps}\n\t\t\t\tdisabled={\n\t\t\t\t\tdisabled ||\n\t\t\t\t\tisSending ||\n\t\t\t\t\tisConnecting ||\n\t\t\t\t\tisEnvironmentUnavailable ||\n\t\t\t\t\t!hasSendableContent\n\t\t\t\t}\n\t\t\t\taria-label={\n\t\t\t\t\tisEnvironmentUnavailable\n\t\t\t\t\t\t? \"Codex unavailable\"\n\t\t\t\t\t\t: isConnecting\n\t\t\t\t\t\t\t? \"Connecting\"\n\t\t\t\t\t\t\t: isSending\n\t\t\t\t\t\t\t\t? \"Sending\"\n\t\t\t\t\t\t\t\t: \"Send message\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{isSending ? (\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tviewBox=\"0 0 14 14\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tclassName=\"animate-spin\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"7\"\n\t\t\t\t\t\t\tcy=\"7\"\n\t\t\t\t\t\t\tr=\"5.5\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray=\"20 12\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t) : (\n\t\t\t\t\t<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M7 11.5V2.5M7 2.5L3 6.5M7 2.5L11 6.5\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.8\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</div>\n\t);\n});\n","import { memo } from \"react\";\n\nexport const ComposerPlanFollowUpBanner = memo(function ComposerPlanFollowUpBanner({\n\tplanTitle,\n}: {\n\tplanTitle: string | null;\n}) {\n\treturn (\n\t\t<div className=\"px-4 py-3.5 sm:px-5 sm:py-4\">\n\t\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t\t<span className=\"text-sm uppercase tracking-[0.2em]\">Plan ready</span>\n\t\t\t\t{planTitle ? (\n\t\t\t\t\t<span className=\"min-w-0 flex-1 truncate font-medium text-sm\">\n\t\t\t\t\t\t{planTitle}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","export interface ComposerSendState {\n\thasSendableContent: boolean;\n\tisConnecting: boolean;\n\tisEnvironmentUnavailable: boolean;\n\tisRunning: boolean;\n\tisSendBusy: boolean;\n\tsendDisabled: boolean;\n\tstopDisabled: boolean;\n}\n\nexport function deriveComposerSendState(input: {\n\tdisabled: boolean;\n\thasSendableContent: boolean;\n\tisConnecting: boolean;\n\tisEnvironmentUnavailable: boolean;\n\tisRunning: boolean;\n\tisSending: boolean;\n}): ComposerSendState {\n\tconst isSendBusy = input.isSending;\n\treturn {\n\t\thasSendableContent: input.hasSendableContent,\n\t\tisConnecting: input.isConnecting,\n\t\tisEnvironmentUnavailable: input.isEnvironmentUnavailable,\n\t\tisRunning: input.isRunning,\n\t\tisSendBusy,\n\t\tsendDisabled:\n\t\t\tinput.disabled ||\n\t\t\tinput.isConnecting ||\n\t\t\tinput.isEnvironmentUnavailable ||\n\t\t\tinput.isRunning ||\n\t\t\tisSendBusy ||\n\t\t\t!input.hasSendableContent,\n\t\tstopDisabled: !input.isRunning || input.isConnecting,\n\t};\n}\n","import { create } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\nimport {\n\tdefaultCodexModel,\n\tdefaultCodexReasoningEffort,\n\tisCodexReasoningEffort,\n\tresolveCodexModelOption,\n\tresolveCodexReasoningEffortForModel,\n\ttype CodexReasoningEffort,\n} from \"../../lib/modelSelection\";\n\nimport {\n\trestoreComposerDraftAttachments,\n\trevokeComposerImageAttachments,\n\ttype ComposerImageAttachment,\n\ttype PersistedComposerDraftImageAttachment,\n} from \"./composer-image-attachments\";\n\nexport interface ComposerDraftState {\n\tprompt: string;\n\tmodel: string | null;\n\teffort: CodexReasoningEffort | null;\n\timages: ComposerImageAttachment[];\n\tpersistedImages: PersistedComposerDraftImageAttachment[];\n}\n\nexport type ComposerDraftKey = string;\n\nexport type PersistedComposerDraftState = Omit<ComposerDraftState, \"images\">;\n\ntype ComposerDraftStorePersistedState = {\n\tdraftsByKey: Record<string, PersistedComposerDraftState>;\n\tfavoriteModels: string[];\n\tstickyEffort: CodexReasoningEffort | null;\n\tstickyModel: string | null;\n};\n\ntype LegacyComposerDraftState = {\n\ttext?: unknown;\n\tmodel?: unknown;\n\teffort?: unknown;\n\timages?: unknown;\n};\n\ntype ComposerDraftStoreState = {\n\tdraftsByKey: Record<string, ComposerDraftState>;\n\tfavoriteModels: string[];\n\tstickyEffort: CodexReasoningEffort | null;\n\tstickyModel: string | null;\n\taddImages: (key: ComposerDraftKey, images: ComposerImageAttachment[]) => void;\n\tclearComposerContent: (key: ComposerDraftKey) => void;\n\tclearDraft: (key: ComposerDraftKey) => void;\n\tensureDraft: (key: ComposerDraftKey) => ComposerDraftState;\n\tgetDraft: (key: ComposerDraftKey) => ComposerDraftState;\n\tremoveImage: (key: ComposerDraftKey, imageId: string) => void;\n\tsetEffort: (key: ComposerDraftKey, effort: CodexReasoningEffort | null) => void;\n\tsetFavoriteModels: (models: string[]) => void;\n\tsetModel: (key: ComposerDraftKey, model: string | null) => void;\n\tsetPrompt: (key: ComposerDraftKey, prompt: string) => void;\n\tsyncPersistedImages: (\n\t\tkey: ComposerDraftKey,\n\t\timages: PersistedComposerDraftImageAttachment[],\n\t) => void;\n};\n\nconst composerDraftStorageKey = \"codex-assistant:composer-drafts:v1\";\nconst composerDraftStorageVersion = 1;\nconst emptyDraft: ComposerDraftState = {\n\tprompt: \"\",\n\tmodel: null,\n\teffort: null,\n\timages: [],\n\tpersistedImages: [],\n};\n\nexport function assistantComposerDraftKey(input: {\n\tscope: string;\n\tthreadId: string | null;\n}): ComposerDraftKey {\n\treturn `codex-assistant:composer-draft:v${composerDraftStorageVersion}:${input.scope}:${input.threadId ?? \"new\"}`;\n}\n\nexport function readLegacyComposerDraft(\n\tkey: ComposerDraftKey,\n\tstorage: Storage | null = browserLocalStorage(),\n): PersistedComposerDraftState | null {\n\tif (!storage) {\n\t\treturn null;\n\t}\n\tconst raw = storage.getItem(key);\n\tif (!raw) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(raw) as LegacyComposerDraftState | null;\n\t\tif (!parsed || typeof parsed !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tprompt: typeof parsed.text === \"string\" ? parsed.text : \"\",\n\t\t\tmodel: typeof parsed.model === \"string\" ? parsed.model : null,\n\t\t\teffort:\n\t\t\t\ttypeof parsed.effort === \"string\" && isCodexReasoningEffort(parsed.effort)\n\t\t\t\t\t? parsed.effort\n\t\t\t\t\t: null,\n\t\t\tpersistedImages: Array.isArray(parsed.images)\n\t\t\t\t? parsed.images.filter(isPersistedComposerDraftImageAttachment)\n\t\t\t\t: [],\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function resolveDraftModel(draft: Pick<ComposerDraftState, \"model\">): string {\n\tconst candidate = draft.model ?? readLegacyStickyModel() ?? defaultCodexModel;\n\treturn resolveCodexModelOption(candidate).slug;\n}\n\nexport function resolveDraftEffort(\n\tdraft: Pick<ComposerDraftState, \"effort\">,\n\tmodel = defaultCodexModel,\n): CodexReasoningEffort {\n\treturn resolveCodexReasoningEffortForModel(\n\t\tmodel,\n\t\tdraft.effort ?? readLegacyStickyEffort() ?? defaultCodexReasoningEffort,\n\t);\n}\n\nexport const useComposerDraftStore = create<ComposerDraftStoreState>()(\n\tpersist(\n\t\t(set, get) => ({\n\t\t\tdraftsByKey: {},\n\t\t\tfavoriteModels: readLegacyFavoriteModels(),\n\t\t\tstickyEffort: readLegacyStickyEffort(),\n\t\t\tstickyModel: readLegacyStickyModel(),\n\t\t\taddImages: (key, images) => {\n\t\t\t\tif (images.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst draft = getDraftFromState(state, key);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: {\n\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\timages: [...draft.images, ...images],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tclearComposerContent: (key) => {\n\t\t\t\tconst draft = get().draftsByKey[key];\n\t\t\t\tif (draft) {\n\t\t\t\t\trevokeComposerImageAttachments(draft.images);\n\t\t\t\t}\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst current = getDraftFromState(state, key);\n\t\t\t\t\tconst nextDraft = {\n\t\t\t\t\t\t...current,\n\t\t\t\t\t\tprompt: \"\",\n\t\t\t\t\t\timages: [],\n\t\t\t\t\t\tpersistedImages: [],\n\t\t\t\t\t};\n\t\t\t\t\tif (\n\t\t\t\t\t\tnextDraft.model === null &&\n\t\t\t\t\t\tnextDraft.effort === null &&\n\t\t\t\t\t\tnextDraft.prompt.length === 0 &&\n\t\t\t\t\t\tnextDraft.persistedImages.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { draftsByKey: omitDraftKey(state.draftsByKey, key) };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: nextDraft,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tclearDraft: (key) => {\n\t\t\t\tconst draft = get().draftsByKey[key];\n\t\t\t\tif (draft) {\n\t\t\t\t\trevokeComposerImageAttachments(draft.images);\n\t\t\t\t}\n\t\t\t\tset((state) => {\n\t\t\t\t\treturn { draftsByKey: omitDraftKey(state.draftsByKey, key) };\n\t\t\t\t});\n\t\t\t},\n\t\t\tensureDraft: (key) => {\n\t\t\t\tconst existing = get().draftsByKey[key];\n\t\t\t\tif (existing) {\n\t\t\t\t\treturn existing;\n\t\t\t\t}\n\t\t\t\tconst legacy = readLegacyComposerDraft(key);\n\t\t\t\tconst nextDraft = legacy ? restorePersistedDraft(legacy) : createEmptyDraft();\n\t\t\t\tset((state) => ({\n\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t[key]: nextDraft,\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t\treturn nextDraft;\n\t\t\t},\n\t\t\tgetDraft: (key) => getDraftFromState(get(), key),\n\t\t\tremoveImage: (key, imageId) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst draft = getDraftFromState(state, key);\n\t\t\t\t\tconst removed = draft.images.filter((image) => image.id === imageId);\n\t\t\t\t\tif (removed.length > 0) {\n\t\t\t\t\t\trevokeComposerImageAttachments(removed);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: {\n\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\timages: draft.images.filter((image) => image.id !== imageId),\n\t\t\t\t\t\t\t\tpersistedImages: draft.persistedImages.filter(\n\t\t\t\t\t\t\t\t\t(image) => image.id !== imageId,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetEffort: (key, effort) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst draft = getDraftFromState(state, key);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: { ...draft, effort },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstickyEffort: effort ?? state.stickyEffort,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFavoriteModels: (models) => {\n\t\t\t\tset({ favoriteModels: [...new Set(models)] });\n\t\t\t},\n\t\t\tsetModel: (key, model) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst draft = getDraftFromState(state, key);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: { ...draft, model },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstickyModel: model ?? state.stickyModel,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetPrompt: (key, prompt) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst draft = getDraftFromState(state, key);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: { ...draft, prompt },\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t\tsyncPersistedImages: (key, persistedImages) => {\n\t\t\t\tset((state) => {\n\t\t\t\t\tconst draft = getDraftFromState(state, key);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdraftsByKey: {\n\t\t\t\t\t\t\t...state.draftsByKey,\n\t\t\t\t\t\t\t[key]: { ...draft, persistedImages },\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t\t{\n\t\t\tname: composerDraftStorageKey,\n\t\t\tstorage: createJSONStorage(() => browserLocalStorage() ?? createMemoryStorage()),\n\t\t\tpartialize: (state): ComposerDraftStorePersistedState => ({\n\t\t\t\tdraftsByKey: Object.fromEntries(\n\t\t\t\t\tObject.entries(state.draftsByKey).flatMap(([key, draft]) => {\n\t\t\t\t\t\tconst persistedDraft: PersistedComposerDraftState = {\n\t\t\t\t\t\t\tprompt: draft.prompt,\n\t\t\t\t\t\t\tmodel: draft.model,\n\t\t\t\t\t\t\teffort: draft.effort,\n\t\t\t\t\t\t\tpersistedImages: draft.persistedImages,\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn persistedDraftHasContent(persistedDraft)\n\t\t\t\t\t\t\t? ([[key, persistedDraft]] as const)\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\tfavoriteModels: state.favoriteModels,\n\t\t\t\tstickyEffort: state.stickyEffort,\n\t\t\t\tstickyModel: state.stickyModel,\n\t\t\t}),\n\t\t\tmerge: (persisted, current): ComposerDraftStoreState => {\n\t\t\t\tconst state = isPersistedStoreState(persisted) ? persisted : null;\n\t\t\t\tif (!state) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...current,\n\t\t\t\t\tdraftsByKey: Object.fromEntries(\n\t\t\t\t\t\tObject.entries(state.draftsByKey).map(([key, draft]) => [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\trestorePersistedDraft(draft),\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\tfavoriteModels: state.favoriteModels,\n\t\t\t\t\tstickyEffort: state.stickyEffort,\n\t\t\t\t\tstickyModel: state.stickyModel,\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t),\n);\n\nexport function useComposerThreadDraft(key: ComposerDraftKey): ComposerDraftState {\n\treturn useComposerDraftStore((state) => state.draftsByKey[key] ?? emptyDraft);\n}\n\nfunction getDraftFromState(\n\tstate: Pick<ComposerDraftStoreState, \"draftsByKey\">,\n\tkey: ComposerDraftKey,\n): ComposerDraftState {\n\treturn state.draftsByKey[key] ?? createEmptyDraft();\n}\n\nfunction omitDraftKey(\n\tdraftsByKey: Record<string, ComposerDraftState>,\n\tkey: ComposerDraftKey,\n): Record<string, ComposerDraftState> {\n\tconst next = { ...draftsByKey };\n\tdelete next[key];\n\treturn next;\n}\n\nfunction createEmptyDraft(): ComposerDraftState {\n\treturn {\n\t\tprompt: \"\",\n\t\tmodel: null,\n\t\teffort: null,\n\t\timages: [],\n\t\tpersistedImages: [],\n\t};\n}\n\nfunction restorePersistedDraft(\n\tdraft: PersistedComposerDraftState,\n): ComposerDraftState {\n\treturn {\n\t\t...draft,\n\t\timages: restoreComposerDraftAttachments(draft.persistedImages),\n\t};\n}\n\nfunction persistedDraftHasContent(draft: PersistedComposerDraftState): boolean {\n\treturn (\n\t\tdraft.prompt.trim().length > 0 ||\n\t\tdraft.persistedImages.length > 0 ||\n\t\tdraft.model !== null ||\n\t\tdraft.effort !== null\n\t);\n}\n\nfunction isPersistedStoreState(\n\tvalue: unknown,\n): value is ComposerDraftStorePersistedState {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as Partial<ComposerDraftStorePersistedState>;\n\treturn (\n\t\tcandidate.draftsByKey !== null &&\n\t\ttypeof candidate.draftsByKey === \"object\" &&\n\t\tArray.isArray(candidate.favoriteModels)\n\t);\n}\n\nfunction isPersistedComposerDraftImageAttachment(\n\tvalue: unknown,\n): value is PersistedComposerDraftImageAttachment {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as Partial<PersistedComposerDraftImageAttachment>;\n\treturn (\n\t\ttypeof candidate.id === \"string\" &&\n\t\ttypeof candidate.name === \"string\" &&\n\t\ttypeof candidate.type === \"string\" &&\n\t\ttypeof candidate.size === \"number\" &&\n\t\ttypeof candidate.dataUrl === \"string\"\n\t);\n}\n\nfunction readLegacyStickyModel(): string | null {\n\tconst storage = browserLocalStorage();\n\treturn storage?.getItem(\"codex-assistant:chat:model\") ?? null;\n}\n\nfunction readLegacyStickyEffort(): CodexReasoningEffort | null {\n\tconst storage = browserLocalStorage();\n\tconst value = storage?.getItem(\"codex-assistant:chat:effort\");\n\treturn value && isCodexReasoningEffort(value) ? value : null;\n}\n\nfunction readLegacyFavoriteModels(): string[] {\n\tconst storage = browserLocalStorage();\n\tif (!storage) {\n\t\treturn [];\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(\n\t\t\tstorage.getItem(\"codex-assistant:chat:favorite-models\") ?? \"[]\",\n\t\t);\n\t\treturn Array.isArray(parsed)\n\t\t\t? parsed.filter((entry): entry is string => typeof entry === \"string\")\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction browserLocalStorage(): Storage | null {\n\tif (typeof window === \"undefined\") {\n\t\treturn null;\n\t}\n\treturn window.localStorage;\n}\n\nfunction createMemoryStorage(): Storage {\n\tconst values = new Map<string, string>();\n\treturn {\n\t\tget length() {\n\t\t\treturn values.size;\n\t\t},\n\t\tclear: () => values.clear(),\n\t\tgetItem: (key) => values.get(key) ?? null,\n\t\tkey: (index) => Array.from(values.keys())[index] ?? null,\n\t\tremoveItem: (key) => values.delete(key),\n\t\tsetItem: (key, value) => {\n\t\t\tvalues.set(key, value);\n\t\t},\n\t};\n}\n","import {\n\tBotIcon,\n\tListTodoIcon,\n\ttype LucideIcon,\n\tLockIcon,\n\tLockOpenIcon,\n\tPenLineIcon,\n\tXIcon,\n} from \"lucide-react\";\nimport {\n\tforwardRef,\n\tmemo,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ClipboardEvent,\n\ttype DragEvent,\n\ttype MutableRefObject,\n} from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuLabel,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { Separator } from \"../ui/separator\";\nimport { cn } from \"../../lib/utils\";\nimport type { UserInput } from \"../../../../../../codex-rs/core/src\";\nimport type {\n\tCodexModelOption,\n\tCodexReasoningEffort,\n} from \"../../lib/modelSelection\";\nimport type { ToolRequestUserInputResponse } from \"../../../../../../codex-rs/app-server-protocol/schema/typescript/v2\";\n\nimport {\n\tbuildRequestUserInputResponse,\n\tderivePendingUserInputProgress,\n\tsetPendingUserInputCustomAnswer,\n\ttogglePendingUserInputOptionSelection,\n\ttype PendingUserInput,\n\ttype PendingUserInputDraftAnswer,\n} from \"../../pendingUserInput\";\nimport { ComposerPendingUserInputPanel } from \"./ComposerPendingUserInputPanel\";\nimport {\n\tcomposerSnapshotUserInputItems,\n\tcreateComposerPromptSnapshot,\n\tprefillComposerState,\n\ttype ComposerPromptSnapshot,\n} from \"./composer-editor-mentions\";\nimport {\n\treplaceTextRange,\n\ttype ComposerSlashCommand,\n\ttype ComposerTrigger,\n} from \"./composer-logic\";\nimport { searchSlashCommandItems } from \"./composerSlashCommandSearch\";\nimport {\n\tComposerCommandMenu,\n\ttype ComposerCommandItem,\n} from \"./ComposerCommandMenu\";\nimport { resolveComposerMenuActiveItemId } from \"./composerMenuHighlight\";\nimport { CompactComposerControlsMenu } from \"./CompactComposerControlsMenu\";\nimport {\n\tshouldUseCompactComposerFooter,\n\tshouldUseCompactComposerPrimaryActions,\n} from \"./composer-footer-layout\";\nimport {\n\tComposerPromptEditor,\n\ttype ComposerPromptEditorHandle,\n} from \"../ComposerPromptEditor\";\nimport type { MentionBinding } from \"./mention-bindings\";\nimport {\n\ttype ComposerMentionTarget,\n\tsearchComposerMentionTargets,\n} from \"./composer-mention-targets\";\nimport { ProviderModelPicker } from \"./ProviderModelPicker\";\nimport { TraitsPicker } from \"./TraitsPicker\";\nimport { ContextWindowMeter } from \"./ContextWindowMeter\";\nimport type { ContextWindowSnapshot } from \"../../lib/contextWindow\";\nimport {\n\tbuildExpandedImagePreview,\n\tcreateComposerImageAttachments,\n\tpersistComposerDraftAttachments,\n\tvalidateComposerImageFiles,\n\ttype ExpandedImagePreview,\n} from \"./composer-image-attachments\";\nimport { ExpandedImageDialog } from \"./ExpandedImageDialog\";\nimport { ComposerPrimaryActions } from \"./ComposerPrimaryActions\";\nimport { ComposerPlanFollowUpBanner } from \"./ComposerPlanFollowUpBanner\";\nimport type { PendingActionState } from \"./ComposerPrimaryActions.logic\";\nimport type { RealtimeConversationUiState } from \"./composer-realtime-conversation.logic\";\nimport { deriveComposerSendState } from \"./composer-send-state.logic\";\nimport {\n\tresolveDraftEffort,\n\tresolveDraftModel,\n\tuseComposerDraftStore,\n\tuseComposerThreadDraft,\n\ttype ComposerDraftKey,\n} from \"./composer-draft.client\";\n\nexport type ChatComposerSubmitPayload = {\n\tfiles: File[];\n\teffort: CodexReasoningEffort;\n\titems: UserInput[];\n\tmentionBindings: MentionBinding[];\n\tmodel: string;\n\ttext: string;\n};\n\nexport type ChatComposerInteractionMode = \"default\" | \"plan\";\n\nexport type ChatComposerRuntimeMode =\n\t| \"approval-required\"\n\t| \"auto-accept-edits\"\n\t| \"full-access\";\n\nexport type ChatComposerCommand = {\n\tdescription: string;\n\tdisabled?: boolean;\n\tgroup?: string;\n\tlabel?: string;\n\tname: ComposerSlashCommand;\n\tunavailableReason?: string;\n};\n\nexport type ChatComposerSkill = {\n\tdescription?: string;\n\tdisabled?: boolean;\n\tlabel?: string;\n\tname: string;\n\tunavailableReason?: string;\n};\n\nexport type ChatComposerHandle = {\n\tclear: () => void;\n\tfocusAt: (cursor: number) => void;\n\tfocusAtEnd: () => void;\n\tgetSendContext: () => ChatComposerSubmitPayload;\n\tinsertTextAtCursor: (\n\t\ttext: string,\n\t\toptions?: { source?: \"manual\" | \"realtime\" },\n\t) => void;\n\tinsertRecordingMeterPlaceholder: (text: string) => string;\n\treadSnapshot: () => {\n\t\tcursor: number;\n\t\texpandedCursor: number;\n\t\tvalue: string;\n\t};\n\tremoveRecordingMeterPlaceholder: (id: string) => void;\n\treplaceRecordingMeterPlaceholder: (id: string, text: string) => void;\n\tresetCursorState: (options?: {\n\t\tcursor?: number;\n\t\tdetectTrigger?: boolean;\n\t\tprompt?: string;\n\t}) => void;\n\tsetDraft: (draft: { mentionBindings?: MentionBinding[]; message: string }) => void;\n\tsubmit: () => void;\n\tupdateRecordingMeterInPlace: (id: string, text: string) => boolean;\n};\n\nconst composerFooterHasWideActions = true;\nconst defaultComposerPlaceholder =\n\t\"Ask anything, @tag files/folders, or use / to show available commands\";\n\nconst runtimeModeConfig: Record<\n\tChatComposerRuntimeMode,\n\t{ description: string; icon: LucideIcon; label: string }\n> = {\n\t\"approval-required\": {\n\t\tdescription: \"Ask before commands and file changes.\",\n\t\ticon: LockIcon,\n\t\tlabel: \"Supervised\",\n\t},\n\t\"auto-accept-edits\": {\n\t\tdescription: \"Auto-approve edits, ask before other actions.\",\n\t\ticon: PenLineIcon,\n\t\tlabel: \"Auto-accept edits\",\n\t},\n\t\"full-access\": {\n\t\tdescription: \"Allow commands and edits without prompts.\",\n\t\ticon: LockOpenIcon,\n\t\tlabel: \"Full access\",\n\t},\n};\n\nconst runtimeModeOptions = Object.keys(\n\truntimeModeConfig,\n) as ChatComposerRuntimeMode[];\n\nfunction isChatComposerRuntimeMode(\n\tvalue: string,\n): value is ChatComposerRuntimeMode {\n\treturn runtimeModeOptions.includes(value as ChatComposerRuntimeMode);\n}\n\nfunction noopAction() {}\n\nfunction noopRuntimeModeChange() {}\n\nconst ComposerFooterModeControls = memo(function ComposerFooterModeControls({\n\tinteractionMode,\n\tonRuntimeModeChange,\n\tonToggleInteractionMode,\n\tonTogglePlanSidebar,\n\tplanSidebarLabel,\n\tplanSidebarOpen,\n\truntimeMode,\n\tshowInteractionModeToggle,\n\tshowPlanToggle,\n}: {\n\tinteractionMode: ChatComposerInteractionMode;\n\tonRuntimeModeChange: (mode: ChatComposerRuntimeMode) => void;\n\tonToggleInteractionMode: () => void;\n\tonTogglePlanSidebar: () => void;\n\tplanSidebarLabel: string;\n\tplanSidebarOpen: boolean;\n\truntimeMode: ChatComposerRuntimeMode;\n\tshowInteractionModeToggle: boolean;\n\tshowPlanToggle: boolean;\n}) {\n\tconst runtimeModeOption = runtimeModeConfig[runtimeMode];\n\tconst RuntimeModeIcon = runtimeModeOption.icon;\n\n\treturn (\n\t\t<>\n\t\t\t<Separator orientation=\"vertical\" className=\"mx-0.5 hidden h-4 sm:block\" />\n\n\t\t\t{showInteractionModeToggle ? (\n\t\t\t\t<>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName=\"shrink-0 whitespace-nowrap px-2 text-muted-foreground/70 hover:text-foreground/80 sm:px-3\"\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tinteractionMode === \"plan\"\n\t\t\t\t\t\t\t\t? \"Plan mode - click to return to normal build mode\"\n\t\t\t\t\t\t\t\t: \"Default mode - click to enter plan mode\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={onToggleInteractionMode}\n\t\t\t\t\t>\n\t\t\t\t\t\t<BotIcon aria-hidden=\"true\" />\n\t\t\t\t\t\t<span className=\"sr-only sm:not-sr-only\">\n\t\t\t\t\t\t\t{interactionMode === \"plan\" ? \"Plan\" : \"Build\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\n\t\t\t\t\t<Separator\n\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\tclassName=\"mx-0.5 hidden h-4 sm:block\"\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : null}\n\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName=\"font-medium text-muted-foreground/70 hover:text-foreground/80\"\n\t\t\t\t\t\taria-label=\"Runtime mode\"\n\t\t\t\t\t\ttitle={runtimeModeOption.description}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RuntimeModeIcon className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t<span>{runtimeModeOption.label}</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent align=\"start\" className=\"w-72\">\n\t\t\t\t\t<DropdownMenuLabel>Runtime mode</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuRadioGroup\n\t\t\t\t\t\tvalue={runtimeMode}\n\t\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\t\tif (isChatComposerRuntimeMode(value)) {\n\t\t\t\t\t\t\t\tonRuntimeModeChange(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{runtimeModeOptions.map((mode) => {\n\t\t\t\t\t\t\tconst option = runtimeModeConfig[mode];\n\t\t\t\t\t\t\tconst OptionIcon = option.icon;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<DropdownMenuRadioItem key={mode} value={mode}>\n\t\t\t\t\t\t\t\t\t<div className=\"grid min-w-0 gap-0.5\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 font-medium text-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t<OptionIcon className=\"size-3.5 shrink-0 text-muted-foreground\" />\n\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-xs leading-4\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</DropdownMenuRadioItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</DropdownMenuRadioGroup>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\n\t\t\t{showPlanToggle ? (\n\t\t\t\t<>\n\t\t\t\t\t<Separator\n\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\tclassName=\"mx-0.5 hidden h-4 sm:block\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"shrink-0 whitespace-nowrap px-2 sm:px-3\",\n\t\t\t\t\t\t\tplanSidebarOpen\n\t\t\t\t\t\t\t\t? \"text-blue-400 hover:text-blue-300\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground/70 hover:text-foreground/80\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tplanSidebarOpen\n\t\t\t\t\t\t\t\t? `Hide ${planSidebarLabel.toLowerCase()} sidebar`\n\t\t\t\t\t\t\t\t: `Show ${planSidebarLabel.toLowerCase()} sidebar`\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={onTogglePlanSidebar}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ListTodoIcon aria-hidden=\"true\" />\n\t\t\t\t\t\t<span className=\"sr-only sm:not-sr-only\">{planSidebarLabel}</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</>\n\t);\n});\n\nexport const ChatComposer = forwardRef<\n\tChatComposerHandle,\n\t{\n\t\tclassName?: string;\n\t\tdisabled?: boolean;\n\t\tdraftKey: ComposerDraftKey;\n\t\teditorAriaLabel?: string;\n\t\tisConnecting?: boolean;\n\t\tisEnvironmentUnavailable?: boolean;\n\t\tisRunning?: boolean;\n\t\tisSending?: boolean;\n\t\tinteractionMode?: ChatComposerInteractionMode;\n\t\tcontextWindow?: ContextWindowSnapshot | null;\n\t\tmentionRefs: ComposerMentionTarget[];\n\t\tmodelOptions?: readonly CodexModelOption[];\n\t\tpendingUserInput?: PendingUserInput | null;\n\t\tpendingRequestDisabled?: boolean;\n\t\tplaceholder?: string;\n\t\tplanFollowUpTitle?: string | null;\n\t\tplanSidebarLabel?: string;\n\t\tplanSidebarOpen?: boolean;\n\t\trealtimeConversation?: RealtimeConversationUiState | null;\n\t\truntimeMode?: ChatComposerRuntimeMode;\n\t\tshowPlanFollowUpPrompt?: boolean;\n\t\tshowInteractionModeToggle?: boolean;\n\t\tshowPlanToggle?: boolean;\n\t\tcomposerCommands?: readonly ChatComposerCommand[];\n\t\tcomposerSkills?: readonly ChatComposerSkill[];\n\t\tonCommand?: (command: ComposerSlashCommand) => void;\n\t\tonComposerError?: (message: string) => void;\n\t\tonImplementPlanInNewThread?: () => void;\n\t\tonRuntimeModeChange?: (mode: ChatComposerRuntimeMode) => void;\n\t\tonToggleInteractionMode?: () => void;\n\t\tonTogglePlanSidebar?: () => void;\n\t\tonPendingRequestDismiss?: () => void;\n\t\tonPendingRequestSubmit?: (\n\t\t\tresponse: ToolRequestUserInputResponse,\n\t\t) => boolean | void;\n\t\tonInterrupt: () => void;\n\t\tscheduleStickToBottom?: () => void;\n\t\tshouldAutoScrollRef?: MutableRefObject<boolean>;\n\t\tonSend: () => void | Promise<void>;\n\t}\n>(function ChatComposer(\n\t{\n\t\tclassName,\n\t\tdisabled = false,\n\t\tdraftKey,\n\t\teditorAriaLabel = \"Message Codex\",\n\t\tisConnecting = false,\n\t\tisEnvironmentUnavailable = false,\n\t\tisRunning = false,\n\t\tisSending = false,\n\t\tinteractionMode = \"default\",\n\t\tcontextWindow = null,\n\t\tmentionRefs,\n\t\tmodelOptions,\n\t\tonComposerError,\n\t\tonCommand,\n\t\tonRuntimeModeChange,\n\t\tonToggleInteractionMode,\n\t\tonTogglePlanSidebar,\n\t\tonPendingRequestDismiss,\n\t\tonPendingRequestSubmit,\n\t\tonInterrupt,\n\t\tonSend,\n\t\tpendingUserInput = null,\n\t\tpendingRequestDisabled = false,\n\t\tplaceholder = defaultComposerPlaceholder,\n\t\tplanFollowUpTitle = null,\n\t\tplanSidebarLabel = \"Plan\",\n\t\tplanSidebarOpen = false,\n\t\truntimeMode = \"full-access\",\n\t\tshowPlanFollowUpPrompt = false,\n\t\tshowInteractionModeToggle = true,\n\t\tshowPlanToggle = false,\n\t\tcomposerCommands = defaultAppComposerCommands,\n\t\tcomposerSkills = [],\n\t\tscheduleStickToBottom,\n\t\tshouldAutoScrollRef,\n\t\tonImplementPlanInNewThread,\n\t},\n\tref,\n) {\n\tconst editorRef = useRef<ComposerPromptEditorHandle | null>(null);\n\tconst composerFormRef = useRef<HTMLFormElement | null>(null);\n\tconst composerSurfaceRef = useRef<HTMLDivElement | null>(null);\n\tconst composerBlurFrameRef = useRef<number | null>(null);\n\tconst composerFormHeightRef = useRef(0);\n\tconst dragDepthRef = useRef(0);\n\tconst pendingEditorSyncKeyRef = useRef<string | null>(null);\n\tconst syncedEditorDraftKeyRef = useRef<ComposerDraftKey | null>(null);\n\tconst [expandedImagePreview, setExpandedImagePreview] =\n\t\tuseState<ExpandedImagePreview | null>(null);\n\tconst [isComposerFocused, setIsComposerFocused] = useState(false);\n\tconst [isDragOverComposer, setIsDragOverComposer] = useState(false);\n\tconst [isMobileViewport, setIsMobileViewport] = useState(false);\n\tconst [isModelPickerOpen, setIsModelPickerOpen] = useState(false);\n\tconst [isComposerFooterCompact, setIsComposerFooterCompact] = useState(false);\n\tconst [\n\t\tisComposerPrimaryActionsCompact,\n\t\tsetIsComposerPrimaryActionsCompact,\n\t] = useState(false);\n\tconst [respondingPendingRequestKey, setRespondingPendingRequestKey] =\n\t\tuseState<string | null>(null);\n\tconst [snapshot, setSnapshot] = useState<ComposerPromptSnapshot>({\n\t\tmentionBindings: [],\n\t\ttext: \"\",\n\t\ttextElements: [],\n\t});\n\tconst draft = useComposerThreadDraft(draftKey);\n\tconst ensureDraft = useComposerDraftStore((store) => store.ensureDraft);\n\tconst addDraftImages = useComposerDraftStore((store) => store.addImages);\n\tconst clearComposerContent = useComposerDraftStore(\n\t\t(store) => store.clearComposerContent,\n\t);\n\tconst favoriteModels = useComposerDraftStore((store) => store.favoriteModels);\n\tconst removeDraftImage = useComposerDraftStore((store) => store.removeImage);\n\tconst setDraftEffort = useComposerDraftStore((store) => store.setEffort);\n\tconst setDraftFavoriteModels = useComposerDraftStore(\n\t\t(store) => store.setFavoriteModels,\n\t);\n\tconst setDraftModel = useComposerDraftStore((store) => store.setModel);\n\tconst setDraftPrompt = useComposerDraftStore((store) => store.setPrompt);\n\tconst syncDraftPersistedImages = useComposerDraftStore(\n\t\t(store) => store.syncPersistedImages,\n\t);\n\tconst attachments = draft.images;\n\tconst model = resolveDraftModel(draft);\n\tconst effort = resolveDraftEffort(draft, model);\n\tconst pendingUserInputKey = pendingUserInput\n\t\t? String(pendingUserInput.requestId)\n\t\t: null;\n\tconst [pendingAnswersByRequestKey, setPendingAnswersByRequestKey] = useState<\n\t\tRecord<string, Record<string, PendingUserInputDraftAnswer>>\n\t>({});\n\tconst [pendingQuestionIndexByRequestKey, setPendingQuestionIndexByRequestKey] =\n\t\tuseState<Record<string, number>>({});\n\tconst [trigger, setTrigger] = useState<ComposerTrigger | null>(null);\n\tconst items = useComposerCommandItems({\n\t\tcomposerCommands,\n\t\tcomposerSkills,\n\t\tmentionRefs,\n\t\ttrigger,\n\t});\n\tconst [highlightedItemId, setHighlightedItemId] = useState<string | null>(null);\n\tconst [highlightedSearchKey, setHighlightedSearchKey] = useState<string | null>(null);\n\tconst currentSearchKey = trigger\n\t\t? `${trigger.kind}:${trigger.query}`\n\t\t: null;\n\tconst activeItemId = resolveComposerMenuActiveItemId({\n\t\tcurrentSearchKey,\n\t\thighlightedItemId,\n\t\thighlightedSearchKey,\n\t\titems,\n\t});\n\n\tconst hasSendableContent =\n\t\tsnapshot.text.trim().length > 0 || attachments.length > 0;\n\tconst effectiveHasSendableContent =\n\t\thasSendableContent || showPlanFollowUpPrompt;\n\tconst sendState = deriveComposerSendState({\n\t\tdisabled,\n\t\thasSendableContent: effectiveHasSendableContent,\n\t\tisConnecting,\n\t\tisEnvironmentUnavailable,\n\t\tisRunning,\n\t\tisSending,\n\t});\n\tconst pendingAnswers = useMemo(\n\t\t() =>\n\t\t\tpendingUserInputKey && pendingAnswersByRequestKey[pendingUserInputKey]\n\t\t\t\t? pendingAnswersByRequestKey[pendingUserInputKey]\n\t\t\t\t: {},\n\t\t[pendingAnswersByRequestKey, pendingUserInputKey],\n\t);\n\tconst pendingQuestionIndex =\n\t\tpendingUserInputKey && pendingQuestionIndexByRequestKey[pendingUserInputKey]\n\t\t\t? pendingQuestionIndexByRequestKey[pendingUserInputKey]\n\t\t\t: 0;\n\tconst pendingInputProgress = pendingUserInput\n\t\t? derivePendingUserInputProgress(\n\t\t\t\tpendingUserInput.questions,\n\t\t\t\tpendingAnswers,\n\t\t\t\tpendingQuestionIndex,\n\t\t\t)\n\t\t: null;\n\tconst pendingAction = pendingInputProgress\n\t\t? ({\n\t\t\t\tquestionIndex: pendingInputProgress.questionIndex,\n\t\t\t\tisLastQuestion: pendingInputProgress.isLastQuestion,\n\t\t\t\tcanAdvance: pendingInputProgress.canAdvance,\n\t\t\t\tisResponding: respondingPendingRequestKey === pendingUserInputKey,\n\t\t\t\tisComplete: pendingInputProgress.isComplete,\n\t\t\t} satisfies PendingActionState)\n\t\t: null;\n\tconst activePendingQuestionId = pendingInputProgress?.activeQuestion?.id ?? null;\n\tconst isComposerCollapsedMobile = isMobileViewport && !isComposerFocused;\n\tconst showCollapsedMobilePromptRow =\n\t\tisComposerCollapsedMobile && pendingUserInput === null;\n\tconst collapsedComposerText = pendingUserInput\n\t\t? pendingInputProgress?.customAnswer ?? \"\"\n\t\t: snapshot.text.trim();\n\n\tuseEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\"(max-width: 639px)\");\n\t\tconst updateViewport = () => setIsMobileViewport(mediaQuery.matches);\n\t\tupdateViewport();\n\t\tmediaQuery.addEventListener(\"change\", updateViewport);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", updateViewport);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst ensuredDraft = ensureDraft(draftKey);\n\t\tconst timerId = window.setTimeout(() => {\n\t\t\tsetExpandedImagePreview(null);\n\t\t\tsetRespondingPendingRequestKey(null);\n\t\t\teditorRef.current?.setTextContentWithMentionBindings({\n\t\t\t\tmentionBindings: [],\n\t\t\t\ttext: ensuredDraft.prompt,\n\t\t\t});\n\t\t\tsetSnapshot(createComposerPromptSnapshot(ensuredDraft.prompt));\n\t\t\tsyncedEditorDraftKeyRef.current = draftKey;\n\t\t}, 0);\n\t\treturn () => window.clearTimeout(timerId);\n\t}, [draftKey, ensureDraft]);\n\n\tuseEffect(() => {\n\t\tif (isMobileViewport) {\n\t\t\tconst frameId = window.requestAnimationFrame(() => {\n\t\t\t\tsetIsComposerFocused(false);\n\t\t\t});\n\t\t\treturn () => window.cancelAnimationFrame(frameId);\n\t\t}\n\t}, [draftKey, isMobileViewport]);\n\n\tuseEffect(() => {\n\t\tif (syncedEditorDraftKeyRef.current !== draftKey) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancelled = false;\n\t\tvoid (async () => {\n\t\t\tconst images = await persistComposerDraftAttachments(attachments);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsyncDraftPersistedImages(draftKey, images);\n\t\t})();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [attachments, draftKey, syncDraftPersistedImages]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (composerBlurFrameRef.current !== null) {\n\t\t\t\twindow.cancelAnimationFrame(composerBlurFrameRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isMobileViewport || !isComposerFocused) {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction handlePointerDown(event: PointerEvent) {\n\t\t\tif (\n\t\t\t\tevent.target instanceof Node &&\n\t\t\t\tcomposerSurfaceRef.current?.contains(event.target)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetIsComposerFocused(false);\n\t\t}\n\n\t\tdocument.addEventListener(\"pointerdown\", handlePointerDown, true);\n\t\treturn () => document.removeEventListener(\"pointerdown\", handlePointerDown, true);\n\t}, [isComposerFocused, isMobileViewport]);\n\n\tuseEffect(() => {\n\t\tif (!pendingUserInputKey || !activePendingQuestionId) {\n\t\t\tif (!pendingUserInputKey && pendingEditorSyncKeyRef.current !== null) {\n\t\t\t\teditorRef.current?.clear();\n\t\t\t}\n\t\t\tpendingEditorSyncKeyRef.current = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst syncKey = `${pendingUserInputKey}:${activePendingQuestionId}`;\n\t\tif (pendingEditorSyncKeyRef.current === syncKey) {\n\t\t\treturn;\n\t\t}\n\t\tpendingEditorSyncKeyRef.current = syncKey;\n\t\teditorRef.current?.setTextContentWithMentionBindings({\n\t\t\tmentionBindings: [],\n\t\t\ttext: pendingInputProgress?.customAnswer ?? \"\",\n\t\t});\n\t}, [activePendingQuestionId, pendingInputProgress?.customAnswer, pendingUserInputKey]);\n\n\tuseLayoutEffect(() => {\n\t\tconst composerForm = composerFormRef.current;\n\t\tif (!composerForm) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst measureCompactness = () => {\n\t\t\tconst width = composerForm.clientWidth;\n\t\t\tconst footerCompact = shouldUseCompactComposerFooter(width, {\n\t\t\t\thasWideActions: composerFooterHasWideActions,\n\t\t\t});\n\t\t\tconst primaryActionsCompact =\n\t\t\t\tfooterCompact &&\n\t\t\t\tshouldUseCompactComposerPrimaryActions(width, {\n\t\t\t\t\thasWideActions: composerFooterHasWideActions,\n\t\t\t\t});\n\t\t\treturn { footerCompact, primaryActionsCompact };\n\t\t};\n\n\t\tconst initialCompactness = measureCompactness();\n\t\tcomposerFormHeightRef.current = composerForm.getBoundingClientRect().height;\n\t\tsetIsComposerFooterCompact(initialCompactness.footerCompact);\n\t\tsetIsComposerPrimaryActionsCompact(\n\t\t\tinitialCompactness.primaryActionsCompact,\n\t\t);\n\n\t\tif (typeof ResizeObserver === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tconst nextCompactness = measureCompactness();\n\t\t\tconst nextHeight = composerForm.getBoundingClientRect().height;\n\t\t\tconst previousHeight = composerFormHeightRef.current;\n\t\t\tcomposerFormHeightRef.current = nextHeight;\n\t\t\tsetIsComposerFooterCompact((current) =>\n\t\t\t\tcurrent === nextCompactness.footerCompact\n\t\t\t\t\t? current\n\t\t\t\t\t: nextCompactness.footerCompact,\n\t\t\t);\n\t\t\tsetIsComposerPrimaryActionsCompact((current) =>\n\t\t\t\tcurrent === nextCompactness.primaryActionsCompact\n\t\t\t\t\t? current\n\t\t\t\t\t: nextCompactness.primaryActionsCompact,\n\t\t\t);\n\t\t\tif (previousHeight > 0 && Math.abs(nextHeight - previousHeight) >= 0.5) {\n\t\t\t\tif (shouldAutoScrollRef && !shouldAutoScrollRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tscheduleStickToBottom?.();\n\t\t\t}\n\t\t});\n\t\tobserver.observe(composerForm);\n\t\treturn () => observer.disconnect();\n\t}, [\n\t\tattachments.length,\n\t\tisComposerCollapsedMobile,\n\t\tpendingAction?.isLastQuestion,\n\t\tpendingAction?.questionIndex,\n\t\tpendingUserInputKey,\n\t\tscheduleStickToBottom,\n\t\tshouldAutoScrollRef,\n\t\tsendState.isRunning,\n\t\tsendState.isSendBusy,\n\t]);\n\n\tconst advancePendingUserInput = useCallback(() => {\n\t\tif (\n\t\t\t!pendingUserInput ||\n\t\t\t!pendingUserInputKey ||\n\t\t\tpendingRequestDisabled ||\n\t\t\t!pendingInputProgress?.canAdvance\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (!pendingInputProgress.isLastQuestion) {\n\t\t\tsetPendingQuestionIndexByRequestKey((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[pendingUserInputKey]: pendingInputProgress.questionIndex + 1,\n\t\t\t}));\n\t\t\treturn;\n\t\t}\n\t\tif (!pendingInputProgress.isComplete) {\n\t\t\treturn;\n\t\t}\n\t\tsetRespondingPendingRequestKey(pendingUserInputKey);\n\t\tconst accepted = onPendingRequestSubmit?.(\n\t\t\tbuildRequestUserInputResponse(pendingUserInput, pendingAnswers),\n\t\t);\n\t\tif (accepted === false) {\n\t\t\tsetRespondingPendingRequestKey(null);\n\t\t}\n\t}, [\n\t\tonPendingRequestSubmit,\n\t\tpendingAnswers,\n\t\tpendingInputProgress,\n\t\tpendingUserInput,\n\t\tpendingRequestDisabled,\n\t\tpendingUserInputKey,\n\t]);\n\n\tconst submitComposer = useCallback(() => {\n\t\tif (pendingUserInput) {\n\t\t\tadvancePendingUserInput();\n\t\t\treturn;\n\t\t}\n\t\tif (sendState.sendDisabled) {\n\t\t\treturn;\n\t\t}\n\t\tvoid onSend();\n\t}, [advancePendingUserInput, onSend, pendingUserInput, sendState.sendDisabled]);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tclear() {\n\t\t\t\teditorRef.current?.clear();\n\t\t\t\tsetSnapshot(createComposerPromptSnapshot(\"\"));\n\t\t\t\tclearComposerContent(draftKey);\n\t\t\t\tsetExpandedImagePreview(null);\n\t\t\t},\n\t\t\tfocusAt(cursor) {\n\t\t\t\teditorRef.current?.focusAt(cursor);\n\t\t\t},\n\t\t\tfocusAtEnd() {\n\t\t\t\teditorRef.current?.focusAtEnd();\n\t\t\t},\n\t\t\tgetSendContext() {\n\t\t\t\tconst current = editorRef.current?.readSnapshot() ?? snapshot;\n\t\t\t\treturn {\n\t\t\t\t\teffort,\n\t\t\t\t\tfiles: attachments.map((attachment) => attachment.file),\n\t\t\t\t\titems: composerSnapshotUserInputItems(current),\n\t\t\t\t\tmentionBindings: current.mentionBindings,\n\t\t\t\t\tmodel,\n\t\t\t\t\ttext: current.text.trim(),\n\t\t\t\t};\n\t\t\t},\n\t\t\tinsertTextAtCursor(text, options) {\n\t\t\t\teditorRef.current?.insertTextAtCursor(text, options);\n\t\t\t\tconst current = editorRef.current?.readSnapshot();\n\t\t\t\tif (current) {\n\t\t\t\t\tsetDraftPrompt(draftKey, current.text);\n\t\t\t\t}\n\t\t\t},\n\t\t\tinsertRecordingMeterPlaceholder(text) {\n\t\t\t\treturn editorRef.current?.insertRecordingMeterPlaceholder(text) ?? \"\";\n\t\t\t},\n\t\t\treadSnapshot() {\n\t\t\t\tconst current = editorRef.current?.readSnapshot() ?? snapshot;\n\t\t\t\treturn {\n\t\t\t\t\tcursor: current.text.length,\n\t\t\t\t\texpandedCursor: current.text.length,\n\t\t\t\t\tvalue: current.text,\n\t\t\t\t};\n\t\t\t},\n\t\t\tremoveRecordingMeterPlaceholder(id) {\n\t\t\t\teditorRef.current?.removeRecordingMeterPlaceholder(id);\n\t\t\t},\n\t\t\treplaceRecordingMeterPlaceholder(id, text) {\n\t\t\t\teditorRef.current?.replaceRecordingMeterPlaceholder(id, text);\n\t\t\t\tconst current = editorRef.current?.readSnapshot();\n\t\t\t\tif (current) {\n\t\t\t\t\tsetDraftPrompt(draftKey, current.text);\n\t\t\t\t}\n\t\t\t},\n\t\t\tresetCursorState(options) {\n\t\t\t\tif (options?.prompt !== undefined) {\n\t\t\t\t\teditorRef.current?.setTextContentWithMentionBindings({\n\t\t\t\t\t\tmentionBindings: snapshot.mentionBindings,\n\t\t\t\t\t\ttext: options.prompt,\n\t\t\t\t\t});\n\t\t\t\t\tsetDraftPrompt(draftKey, options.prompt);\n\t\t\t\t}\n\t\t\t\tif (typeof options?.cursor === \"number\") {\n\t\t\t\t\teditorRef.current?.focusAt(options.cursor);\n\t\t\t\t}\n\t\t\t\tif (options?.detectTrigger === false) {\n\t\t\t\t\tsetTrigger(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetDraft(draft) {\n\t\t\t\tconst state = prefillComposerState(draft);\n\t\t\t\tsetDraftPrompt(draftKey, state.text);\n\t\t\t\teditorRef.current?.setTextContentWithMentionBindings({\n\t\t\t\t\tmentionBindings: state.mentionBindings,\n\t\t\t\t\ttext: state.text,\n\t\t\t\t});\n\t\t\t\teditorRef.current?.focusAtEnd();\n\t\t\t},\n\t\t\tsubmit: submitComposer,\n\t\t\tupdateRecordingMeterInPlace(id, text) {\n\t\t\t\treturn editorRef.current?.updateRecordingMeterInPlace(id, text) ?? false;\n\t\t\t},\n\t\t}),\n\t\t[\n\t\t\tattachments,\n\t\t\tclearComposerContent,\n\t\t\tdraftKey,\n\t\t\teffort,\n\t\t\tmodel,\n\t\t\tsetDraftPrompt,\n\t\t\tsnapshot,\n\t\t\tsubmitComposer,\n\t\t],\n\t);\n\n\tfunction addImageAttachments(files: Iterable<File>) {\n\t\tconst validation = validateComposerImageFiles({\n\t\t\tcurrentCount: attachments.length,\n\t\t\tfiles,\n\t\t});\n\t\tif (validation.error) {\n\t\t\tonComposerError?.(validation.error);\n\t\t}\n\t\tconst nextAttachments = createComposerImageAttachments(validation.accepted);\n\t\tif (nextAttachments.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\taddDraftImages(draftKey, nextAttachments);\n\t\tscheduleStickToBottom?.();\n\t}\n\n\tfunction removeImageAttachment(attachmentId: string) {\n\t\tremoveDraftImage(draftKey, attachmentId);\n\t\tsetExpandedImagePreview(null);\n\t}\n\n\tfunction expandImageAttachment(attachmentId: string) {\n\t\tconst preview = buildExpandedImagePreview(attachments, attachmentId);\n\t\tif (preview) {\n\t\t\tsetExpandedImagePreview(preview);\n\t\t}\n\t}\n\n\tfunction handleComposerDragEnter(event: DragEvent<HTMLDivElement>) {\n\t\tif (!Array.from(event.dataTransfer.types).includes(\"Files\")) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tdragDepthRef.current += 1;\n\t\tsetIsDragOverComposer(true);\n\t}\n\n\tfunction handleComposerDragOver(event: DragEvent<HTMLDivElement>) {\n\t\tif (!Array.from(event.dataTransfer.types).includes(\"Files\")) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tevent.dataTransfer.dropEffect = \"copy\";\n\t\tsetIsDragOverComposer(true);\n\t}\n\n\tfunction handleComposerDragLeave(event: DragEvent<HTMLDivElement>) {\n\t\tif (!Array.from(event.dataTransfer.types).includes(\"Files\")) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tconst nextTarget = event.relatedTarget;\n\t\tif (nextTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\n\t\t\treturn;\n\t\t}\n\t\tdragDepthRef.current = Math.max(0, dragDepthRef.current - 1);\n\t\tif (dragDepthRef.current === 0) {\n\t\t\tsetIsDragOverComposer(false);\n\t\t}\n\t}\n\n\tfunction handleComposerDrop(event: DragEvent<HTMLDivElement>) {\n\t\tif (!event.dataTransfer.files.length) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tdragDepthRef.current = 0;\n\t\tsetIsDragOverComposer(false);\n\t\taddImageAttachments(Array.from(event.dataTransfer.files));\n\t}\n\n\tfunction handleComposerPaste(event: ClipboardEvent<HTMLDivElement>) {\n\t\tconst files = Array.from(event.clipboardData.files);\n\t\tif (files.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst imageFiles = files.filter((file) => file.type.startsWith(\"image/\"));\n\t\tif (imageFiles.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\taddImageAttachments(imageFiles);\n\t}\n\n\tfunction selectCommandItem(item: ComposerCommandItem) {\n\t\tif (\"disabled\" in item && item.disabled) {\n\t\t\tonComposerError?.(\n\t\t\t\titem.unavailableReason ??\n\t\t\t\t\t`${item.label} is not available in this chat.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.type === \"path\") {\n\t\t\teditorRef.current?.insertMention(item.mention, trigger);\n\t\t\tsetTrigger(null);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.type === \"skill\") {\n\t\t\tconst current = editorRef.current?.readSnapshot() ?? snapshot;\n\t\t\tconst range =\n\t\t\t\ttrigger?.kind === \"skill\"\n\t\t\t\t\t? { end: trigger.rangeEnd, start: trigger.rangeStart }\n\t\t\t\t\t: { end: current.text.length, start: current.text.length };\n\t\t\tconst next = replaceTextRange(\n\t\t\t\tcurrent.text,\n\t\t\t\trange.start,\n\t\t\t\trange.end,\n\t\t\t\t`$${item.name} `,\n\t\t\t);\n\t\t\teditorRef.current?.setTextContentWithMentionBindings({\n\t\t\t\tmentionBindings: current.mentionBindings,\n\t\t\t\ttext: next.text,\n\t\t\t});\n\t\t\teditorRef.current?.focusAt(next.cursor);\n\t\t\tsetDraftPrompt(draftKey, next.text);\n\t\t\tsetTrigger(null);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.command === \"model\") {\n\t\t\tclearActiveCommandTrigger();\n\t\t\tsetIsModelPickerOpen(true);\n\t\t} else {\n\t\t\tclearActiveCommandTrigger();\n\t\t\tif (!onCommand) {\n\t\t\t\tonComposerError?.(`${item.label} is not handled by this chat.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonCommand(item.command);\n\t\t}\n\t}\n\n\tfunction setActiveCommandItemId(itemId: string | null) {\n\t\tsetHighlightedItemId(itemId);\n\t\tsetHighlightedSearchKey(currentSearchKey);\n\t}\n\n\tfunction clearActiveCommandTrigger() {\n\t\tconst current = editorRef.current?.readSnapshot() ?? snapshot;\n\t\tconst activeTrigger = trigger;\n\t\tif (!activeTrigger || activeTrigger.kind !== \"slash-command\") {\n\t\t\tsetTrigger(null);\n\t\t\treturn;\n\t\t}\n\t\tconst next = replaceTextRange(\n\t\t\tcurrent.text,\n\t\t\tactiveTrigger.rangeStart,\n\t\t\tactiveTrigger.rangeEnd,\n\t\t\t\"\",\n\t\t);\n\t\teditorRef.current?.setTextContentWithMentionBindings({\n\t\t\tmentionBindings: current.mentionBindings,\n\t\t\ttext: next.text,\n\t\t});\n\t\teditorRef.current?.focusAt(next.cursor);\n\t\tsetDraftPrompt(draftKey, next.text);\n\t\tsetHighlightedItemId(null);\n\t\tsetTrigger(null);\n\t}\n\n\tfunction handleEditorSubmit() {\n\t\tconst selectedItem = activeItemId\n\t\t\t? items.find((item) => item.id === activeItemId)\n\t\t\t: null;\n\t\tif (trigger && selectedItem) {\n\t\t\tselectCommandItem(selectedItem);\n\t\t\treturn;\n\t\t}\n\n\t\tsubmitComposer();\n\t}\n\n\tfunction handleEditorCommandKey(\n\t\tkey: \"ArrowDown\" | \"ArrowUp\" | \"Enter\" | \"Tab\",\n\t\tevent: KeyboardEvent,\n\t): boolean {\n\t\tif (key === \"Tab\" && event.shiftKey) {\n\t\t\tonToggleInteractionMode?.();\n\t\t\treturn Boolean(onToggleInteractionMode);\n\t\t}\n\t\tif (!trigger) {\n\t\t\tif (key === \"Enter\" && !event.shiftKey) {\n\t\t\t\tsubmitComposer();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tif (key === \"ArrowDown\" || key === \"ArrowUp\") {\n\t\t\tif (items.length === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst currentIndex = items.findIndex((item) => item.id === activeItemId);\n\t\t\tconst normalizedIndex =\n\t\t\t\tcurrentIndex >= 0 ? currentIndex : key === \"ArrowDown\" ? -1 : 0;\n\t\t\tconst offset = key === \"ArrowDown\" ? 1 : -1;\n\t\t\tconst nextIndex =\n\t\t\t\t(normalizedIndex + offset + items.length) % items.length;\n\t\t\tsetActiveCommandItemId(items[nextIndex]?.id ?? null);\n\t\t\treturn true;\n\t\t}\n\t\tif (key === \"Enter\" || key === \"Tab\") {\n\t\t\tconst selectedItem = activeItemId\n\t\t\t\t? items.find((item) => item.id === activeItemId)\n\t\t\t\t: null;\n\t\t\tif (selectedItem) {\n\t\t\t\tselectCommandItem(selectedItem);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction handleEditorSnapshotChange(nextSnapshot: ComposerPromptSnapshot) {\n\t\tsetSnapshot(nextSnapshot);\n\t\tif (!pendingUserInputKey) {\n\t\t\tsetDraftPrompt(draftKey, nextSnapshot.text);\n\t\t}\n\t\tif (!pendingUserInputKey || !activePendingQuestionId) {\n\t\t\treturn;\n\t\t}\n\t\tsetPendingAnswersByRequestKey((current) => {\n\t\t\tconst currentAnswers = current[pendingUserInputKey] ?? {};\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\t[pendingUserInputKey]: {\n\t\t\t\t\t...currentAnswers,\n\t\t\t\t\t[activePendingQuestionId]: setPendingUserInputCustomAnswer(\n\t\t\t\t\t\tcurrentAnswers[activePendingQuestionId],\n\t\t\t\t\t\tnextSnapshot.text,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tfunction previousPendingQuestion() {\n\t\tif (!pendingUserInputKey || !pendingInputProgress) {\n\t\t\treturn;\n\t\t}\n\t\tsetPendingQuestionIndexByRequestKey((current) => ({\n\t\t\t...current,\n\t\t\t[pendingUserInputKey]: Math.max(pendingInputProgress.questionIndex - 1, 0),\n\t\t}));\n\t}\n\n\tfunction expandMobileComposer() {\n\t\tsetIsComposerFocused(true);\n\t\twindow.requestAnimationFrame(() => editorRef.current?.focusAtEnd());\n\t}\n\n\tfunction scheduleComposerCollapseCheck() {\n\t\tif (composerBlurFrameRef.current !== null) {\n\t\t\twindow.cancelAnimationFrame(composerBlurFrameRef.current);\n\t\t}\n\t\tcomposerBlurFrameRef.current = window.requestAnimationFrame(() => {\n\t\t\tcomposerBlurFrameRef.current = null;\n\t\t\tif (!isMobileViewport) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst activeElement = document.activeElement;\n\t\t\tif (\n\t\t\t\tactiveElement instanceof HTMLElement &&\n\t\t\t\tcomposerSurfaceRef.current?.contains(activeElement)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetIsComposerFocused(false);\n\t\t});\n\t}\n\n\tconst togglePendingOption = useCallback((questionId: string, optionLabel: string) => {\n\t\tif (!pendingUserInputKey || pendingRequestDisabled) {\n\t\t\treturn;\n\t\t}\n\t\tsetPendingAnswersByRequestKey((current) => {\n\t\t\tconst currentAnswers = current[pendingUserInputKey] ?? {};\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\t[pendingUserInputKey]: {\n\t\t\t\t\t...currentAnswers,\n\t\t\t\t\t[questionId]: togglePendingUserInputOptionSelection(\n\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}, [pendingRequestDisabled, pendingUserInputKey]);\n\n\treturn (\n\t\t<form\n\t\t\tref={composerFormRef}\n\t\t\tclassName={cn(\"mx-auto w-full min-w-0 max-w-208\", className)}\n\t\t\tdata-chat-composer-form=\"true\"\n\t\t\tonSubmit={(event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsubmitComposer();\n\t\t\t}}\n\t\t>\n\t\t\t{trigger ? (\n\t\t\t\t<div className=\"absolute bottom-full left-3 z-20 mb-2 w-[min(34rem,calc(100vw-2rem))]\">\n\t\t\t\t\t<ComposerCommandMenu\n\t\t\t\t\t\tactiveItemId={activeItemId}\n\t\t\t\t\t\titems={items}\n\t\t\t\t\t\ttriggerKind={trigger.kind}\n\t\t\t\t\t\tonHighlightedItemChange={setActiveCommandItemId}\n\t\t\t\t\t\tonSelect={selectCommandItem}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t<div\n\t\t\t\tclassName=\"group rounded-[22px] p-px transition-colors duration-200\"\n\t\t\t\tonDragEnter={handleComposerDragEnter}\n\t\t\t\tonDragOver={handleComposerDragOver}\n\t\t\t\tonDragLeave={handleComposerDragLeave}\n\t\t\t\tonDrop={handleComposerDrop}\n\t\t\t\tonPaste={handleComposerPaste}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={composerSurfaceRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-[20px] border bg-card transition-colors duration-200 has-focus-visible:border-ring/45\",\n\t\t\t\t\t\tisDragOverComposer\n\t\t\t\t\t\t\t? \"border-primary/70 bg-accent/30\"\n\t\t\t\t\t\t\t: \"border-border\",\n\t\t\t\t\t\tdisabled && \"opacity-75\",\n\t\t\t\t\t)}\n\t\t\t\t\tdata-chat-composer-mobile-collapsed={\n\t\t\t\t\t\tisComposerCollapsedMobile ? \"true\" : \"false\"\n\t\t\t\t\t}\n\t\t\t\t\tonFocusCapture={(event) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tisComposerCollapsedMobile &&\n\t\t\t\t\t\t\tevent.target instanceof HTMLElement &&\n\t\t\t\t\t\t\tevent.target.closest('[data-chat-composer-collapsed-controls=\"true\"]')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (composerBlurFrameRef.current !== null) {\n\t\t\t\t\t\t\twindow.cancelAnimationFrame(composerBlurFrameRef.current);\n\t\t\t\t\t\t\tcomposerBlurFrameRef.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetIsComposerFocused(true);\n\t\t\t\t\t}}\n\t\t\t\t\tonBlurCapture={scheduleComposerCollapseCheck}\n\t\t\t\t>\n\t\t\t\t\t<ComposerPendingUserInputPanel\n\t\t\t\t\t\tanswers={pendingAnswers}\n\t\t\t\t\t\tdisabled={pendingRequestDisabled}\n\t\t\t\t\t\tisResponding={respondingPendingRequestKey === pendingUserInputKey}\n\t\t\t\t\t\tquestionIndex={pendingQuestionIndex}\n\t\t\t\t\t\trequest={pendingUserInput}\n\t\t\t\t\t\tonAdvance={advancePendingUserInput}\n\t\t\t\t\t\tonDismiss={() => {\n\t\t\t\t\t\t\tonPendingRequestDismiss?.();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonToggleOption={togglePendingOption}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{showPlanFollowUpPrompt && !pendingUserInput ? (\n\t\t\t\t\t\t<div className=\"rounded-t-[19px] border-b border-border/65 bg-muted/20\">\n\t\t\t\t\t\t\t<ComposerPlanFollowUpBanner planTitle={planFollowUpTitle} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t{isComposerCollapsedMobile && pendingUserInput ? (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"border-b px-3 pb-3 sm:px-4\"\n\t\t\t\t\t\t\tdata-chat-composer-collapsed-controls=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"flex min-w-0 items-center gap-2 rounded-lg border border-border/55 bg-background/55 p-1.5 pl-3 transition-colors hover:bg-background/80\"\n\t\t\t\t\t\t\t\tdata-chat-composer-mobile-pending-compact=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"min-w-0 flex-1 truncate bg-transparent py-1.5 text-left text-sm\",\n\t\t\t\t\t\t\t\t\t\tcollapsedComposerText\n\t\t\t\t\t\t\t\t\t\t\t? \"text-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-muted-foreground/60\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Write custom answer\"\n\t\t\t\t\t\t\t\t\tonPointerDown={(event) => event.preventDefault()}\n\t\t\t\t\t\t\t\t\tonClick={expandMobileComposer}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{collapsedComposerText || \"Write custom answer\"}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<div data-chat-composer-mobile-pending-actions=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<ComposerPrimaryActions\n\t\t\t\t\t\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={pendingRequestDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\thasSendableContent={false}\n\t\t\t\t\t\t\t\t\t\t\t\tisConnecting={sendState.isConnecting}\n\t\t\t\t\t\t\t\t\t\t\t\tisEnvironmentUnavailable={sendState.isEnvironmentUnavailable}\n\t\t\t\t\t\t\t\t\t\t\t\tisRunning={false}\n\t\t\t\t\t\t\t\t\t\t\t\tisSending={sendState.isSendBusy}\n\t\t\t\t\t\t\t\t\t\t\t\tpendingAction={pendingAction}\n\t\t\t\t\t\t\t\t\t\tpreserveComposerFocusOnPointerDown\n\t\t\t\t\t\t\t\t\t\t\tonInterrupt={onInterrupt}\n\t\t\t\t\t\t\t\t\t\t\tonImplementPlanInNewThread={onImplementPlanInNewThread}\n\t\t\t\t\t\t\t\t\t\tonPreviousPendingQuestion={previousPendingQuestion}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t{showCollapsedMobilePromptRow ? (\n\t\t\t\t\t\t<div className=\"flex items-center justify-between gap-2 px-3 py-2\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"min-w-0 flex-1 truncate bg-transparent p-0 text-left text-[14px] focus:outline-none\",\n\t\t\t\t\t\t\t\t\tcollapsedComposerText\n\t\t\t\t\t\t\t\t\t\t? \"text-foreground\"\n\t\t\t\t\t\t\t\t\t\t: \"text-muted-foreground/35\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label=\"Expand composer\"\n\t\t\t\t\t\t\t\tonPointerDown={(event) => event.preventDefault()}\n\t\t\t\t\t\t\t\tonClick={expandMobileComposer}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{collapsedComposerText || \"Ask anything...\"}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<ComposerPrimaryActions\n\t\t\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\thasSendableContent={sendState.hasSendableContent}\n\t\t\t\t\t\t\t\t\tisConnecting={sendState.isConnecting}\n\t\t\t\t\t\t\t\t\tisEnvironmentUnavailable={sendState.isEnvironmentUnavailable}\n\t\t\t\t\t\t\t\t\tisRunning={sendState.isRunning}\n\t\t\t\t\t\t\t\t\tisSending={sendState.isSendBusy}\n\t\t\t\t\t\t\t\tpendingAction={null}\n\t\t\t\t\t\t\t\tpreserveComposerFocusOnPointerDown\n\t\t\t\t\t\t\t\t\tonInterrupt={onInterrupt}\n\t\t\t\t\t\t\t\t\tonImplementPlanInNewThread={onImplementPlanInNewThread}\n\t\t\t\t\t\t\t\tonPreviousPendingQuestion={previousPendingQuestion}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"relative px-3 pb-2 pt-3.5 sm:px-4 sm:pt-4\",\n\t\t\t\t\t\t\tisComposerCollapsedMobile && \"hidden\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{attachments.length > 0 ? (\n\t\t\t\t\t\t\t<div className=\"mb-3 flex flex-wrap gap-2\">\n\t\t\t\t\t\t\t\t{attachments.map((attachment) => (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={attachment.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"relative h-16 w-16 overflow-hidden rounded-lg border border-border/80 bg-background\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ height: 64, position: \"relative\", width: 64 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{attachment.previewUrl ? (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-full w-full cursor-zoom-in\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ inset: 0, position: \"absolute\", zIndex: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Preview ${attachment.name}`}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => expandImageAttachment(attachment.id)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={attachment.previewUrl}\n\t\t\t\t\t\t\t\t\t\t\t\t\talt={attachment.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-full w-full object-cover\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex h-full w-full items-center justify-center px-1 text-center text-[10px] text-muted-foreground/70\">\n\t\t\t\t\t\t\t\t\t\t\t\t{attachment.name}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute right-1 top-1 z-10 bg-background/80 hover:bg-background/90\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\theight: 24,\n\t\t\t\t\t\t\t\t\t\t\t\tpointerEvents: \"auto\",\n\t\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\t\tright: 4,\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 4,\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 24,\n\t\t\t\t\t\t\t\t\t\t\t\tzIndex: 3,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\taria-label={`Remove ${attachment.name}`}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => removeImageAttachment(attachment.id)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<XIcon aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<ComposerPromptEditor\n\t\t\t\t\t\t\tref={editorRef}\n\t\t\t\t\t\t\tariaLabel={editorAriaLabel}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\t\tpendingUserInput\n\t\t\t\t\t\t\t\t\t? \"Type your own answer, or leave this blank to use the selected option\"\n\t\t\t\t\t\t\t\t\t: placeholder\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonSnapshotChange={handleEditorSnapshotChange}\n\t\t\t\t\t\t\tonCommandKey={handleEditorCommandKey}\n\t\t\t\t\t\t\tonSubmit={handleEditorSubmit}\n\t\t\t\t\t\t\tonTriggerChange={setTrigger}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{isComposerCollapsedMobile ? null : (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex min-w-0 flex-nowrap items-center justify-between gap-2 overflow-visible px-2.5 pb-2.5\",\n\t\t\t\t\t\t\t\tisComposerFooterCompact ? \"gap-1.5\" : \"gap-2 sm:gap-0\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tdata-chat-composer-footer=\"true\"\n\t\t\t\t\t\t\tdata-chat-composer-footer-compact={\n\t\t\t\t\t\t\t\tisComposerFooterCompact ? \"true\" : \"false\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"-m-1 flex min-w-0 flex-1 items-center gap-1 overflow-x-auto p-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n\t\t\t\t\t\t\t\t<ProviderModelPicker\n\t\t\t\t\t\t\t\t\tcompact={isComposerFooterCompact}\n\t\t\t\t\t\t\t\t\tdisabled={Boolean(pendingUserInput) || disabled}\n\t\t\t\t\t\t\t\t\tfavoriteModels={favoriteModels}\n\t\t\t\t\t\t\t\t\tmodel={model}\n\t\t\t\t\t\t\t\t\tmodelOptions={modelOptions}\n\t\t\t\t\t\t\t\t\topen={isModelPickerOpen}\n\t\t\t\t\t\t\t\t\tonFavoriteModelsChange={setDraftFavoriteModels}\n\t\t\t\t\t\t\t\t\tonModelChange={(nextModel) => setDraftModel(draftKey, nextModel)}\n\t\t\t\t\t\t\t\t\tonOpenChange={setIsModelPickerOpen}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{isComposerFooterCompact ? (\n\t\t\t\t\t\t\t\t\t<CompactComposerControlsMenu\n\t\t\t\t\t\t\t\t\t\tactivePlan={showPlanToggle}\n\t\t\t\t\t\t\t\t\t\tdisabled={Boolean(pendingUserInput) || disabled}\n\t\t\t\t\t\t\t\t\t\teffort={effort}\n\t\t\t\t\t\t\t\t\t\tinteractionMode={interactionMode}\n\t\t\t\t\t\t\t\t\t\tplanSidebarLabel={planSidebarLabel}\n\t\t\t\t\t\t\t\t\t\tplanSidebarOpen={planSidebarOpen}\n\t\t\t\t\t\t\t\t\t\truntimeMode={runtimeMode}\n\t\t\t\t\t\t\t\t\t\tshowInteractionModeToggle={showInteractionModeToggle}\n\t\t\t\t\t\t\t\t\t\tonEffortChange={(nextEffort) =>\n\t\t\t\t\t\t\t\t\t\t\tsetDraftEffort(draftKey, nextEffort)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonRuntimeModeChange={onRuntimeModeChange}\n\t\t\t\t\t\t\t\t\t\tonToggleInteractionMode={onToggleInteractionMode}\n\t\t\t\t\t\t\t\t\t\tonTogglePlanSidebar={onTogglePlanSidebar}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<Separator\n\t\t\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-0.5 hidden h-4 sm:block\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<TraitsPicker\n\t\t\t\t\t\t\t\t\t\t\tdisabled={Boolean(pendingUserInput) || disabled}\n\t\t\t\t\t\t\t\t\t\t\teffort={effort}\n\t\t\t\t\t\t\t\t\t\t\tonEffortChange={(nextEffort) =>\n\t\t\t\t\t\t\t\t\t\t\t\tsetDraftEffort(draftKey, nextEffort)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<ComposerFooterModeControls\n\t\t\t\t\t\t\t\t\t\t\tinteractionMode={interactionMode}\n\t\t\t\t\t\t\t\t\t\t\tplanSidebarLabel={planSidebarLabel}\n\t\t\t\t\t\t\t\t\t\t\tplanSidebarOpen={planSidebarOpen}\n\t\t\t\t\t\t\t\t\t\t\truntimeMode={runtimeMode}\n\t\t\t\t\t\t\t\t\t\t\tshowInteractionModeToggle={showInteractionModeToggle}\n\t\t\t\t\t\t\t\t\t\t\tshowPlanToggle={showPlanToggle}\n\t\t\t\t\t\t\t\t\t\t\tonRuntimeModeChange={\n\t\t\t\t\t\t\t\t\t\t\t\tonRuntimeModeChange ?? noopRuntimeModeChange\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonToggleInteractionMode={\n\t\t\t\t\t\t\t\t\t\t\t\tonToggleInteractionMode ?? noopAction\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonTogglePlanSidebar={onTogglePlanSidebar ?? noopAction}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"flex shrink-0 flex-nowrap items-center justify-end gap-2\"\n\t\t\t\t\t\t\t\tdata-chat-composer-actions=\"right\"\n\t\t\t\t\t\t\t\tdata-chat-composer-primary-actions-compact={\n\t\t\t\t\t\t\t\t\tisComposerPrimaryActionsCompact ? \"true\" : \"false\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ComposerFooterPrimaryActions\n\t\t\t\t\t\t\t\t\tcompact={isComposerPrimaryActionsCompact}\n\t\t\t\t\t\t\t\t\tcontextWindow={contextWindow}\n\t\t\t\t\t\t\t\t\tdisabled={pendingUserInput ? pendingRequestDisabled : disabled}\n\t\t\t\t\t\t\t\t\thasSendableContent={sendState.hasSendableContent}\n\t\t\t\t\t\t\t\t\tisConnecting={sendState.isConnecting}\n\t\t\t\t\t\t\t\t\tisEnvironmentUnavailable={sendState.isEnvironmentUnavailable}\n\t\t\t\t\t\t\t\t\tisRunning={sendState.isRunning}\n\t\t\t\t\t\t\t\t\tisSending={sendState.isSendBusy}\n\t\t\t\t\t\t\t\t\tpendingAction={pendingAction}\n\t\t\t\t\t\t\t\t\tpromptHasText={snapshot.text.trim().length > 0}\n\t\t\t\t\t\t\t\t\tpreserveComposerFocusOnPointerDown={isMobileViewport}\n\t\t\t\t\t\t\t\t\tshowPlanFollowUpPrompt={showPlanFollowUpPrompt}\n\t\t\t\t\t\t\t\t\tonInterrupt={onInterrupt}\n\t\t\t\t\t\t\t\t\tonImplementPlanInNewThread={onImplementPlanInNewThread}\n\t\t\t\t\t\t\t\t\tonPreviousPendingQuestion={previousPendingQuestion}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{expandedImagePreview ? (\n\t\t\t\t<ExpandedImageDialog\n\t\t\t\t\tpreview={expandedImagePreview}\n\t\t\t\t\tonClose={() => setExpandedImagePreview(null)}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</form>\n\t);\n});\n\nconst ComposerFooterPrimaryActions = memo(function ComposerFooterPrimaryActions({\n\tcompact,\n\tcontextWindow,\n\tdisabled,\n\thasSendableContent,\n\tisConnecting,\n\tisEnvironmentUnavailable,\n\tisRunning,\n\tisSending,\n\tonImplementPlanInNewThread,\n\tpendingAction,\n\tpromptHasText,\n\tpreserveComposerFocusOnPointerDown,\n\tshowPlanFollowUpPrompt,\n\tonInterrupt,\n\tonPreviousPendingQuestion,\n}: {\n\tcompact: boolean;\n\tcontextWindow: ContextWindowSnapshot | null;\n\tdisabled: boolean;\n\thasSendableContent: boolean;\n\tisConnecting: boolean;\n\tisEnvironmentUnavailable: boolean;\n\tisRunning: boolean;\n\tisSending: boolean;\n\tonImplementPlanInNewThread?: () => void;\n\tpendingAction: PendingActionState | null;\n\tpromptHasText?: boolean;\n\tpreserveComposerFocusOnPointerDown?: boolean;\n\tshowPlanFollowUpPrompt?: boolean;\n\tonInterrupt: () => void;\n\tonPreviousPendingQuestion: () => void;\n}) {\n\treturn (\n\t\t<>\n\t\t\t{contextWindow ? <ContextWindowMeter usage={contextWindow} /> : null}\n\t\t\t<ComposerPrimaryActions\n\t\t\t\tcompact={compact}\n\t\t\t\tdisabled={disabled}\n\t\t\t\thasSendableContent={hasSendableContent}\n\t\t\t\tisConnecting={isConnecting}\n\t\t\t\tisEnvironmentUnavailable={isEnvironmentUnavailable}\n\t\t\t\tisRunning={isRunning}\n\t\t\t\tisSending={isSending}\n\t\t\t\tpendingAction={pendingAction}\n\t\t\t\tpromptHasText={promptHasText}\n\t\t\t\tpreserveComposerFocusOnPointerDown={\n\t\t\t\t\tpreserveComposerFocusOnPointerDown ?? false\n\t\t\t\t}\n\t\t\t\tshowPlanFollowUpPrompt={showPlanFollowUpPrompt}\n\t\t\t\tonInterrupt={onInterrupt}\n\t\t\t\tonImplementPlanInNewThread={onImplementPlanInNewThread}\n\t\t\t\tonPreviousPendingQuestion={onPreviousPendingQuestion}\n\t\t\t/>\n\t\t</>\n\t);\n});\n\nfunction useComposerCommandItems(input: {\n\tcomposerCommands: readonly ChatComposerCommand[];\n\tcomposerSkills: readonly ChatComposerSkill[];\n\tmentionRefs: ComposerMentionTarget[];\n\ttrigger: ComposerTrigger | null;\n}): ComposerCommandItem[] {\n\treturn useMemo(() => {\n\t\tif (!input.trigger) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (input.trigger.kind === \"path\") {\n\t\t\treturn searchComposerMentionTargets({\n\t\t\t\ttargets: input.mentionRefs,\n\t\t\t\tquery: input.trigger.query,\n\t\t\t}).map((mention) => ({\n\t\t\t\tdescription: \"Add context to this chat\",\n\t\t\t\tid: mention.path,\n\t\t\t\tlabel: mention.label,\n\t\t\t\tmention,\n\t\t\t\tpath: mention.path,\n\t\t\t\ttype: \"path\" as const,\n\t\t\t}));\n\t\t}\n\n\t\tif (input.trigger.kind === \"skill\") {\n\t\t\tconst query = input.trigger.query.toLowerCase();\n\t\t\treturn skillCommandItems(input.composerSkills).filter((item) =>\n\t\t\t\titem.label.toLowerCase().includes(query) ||\n\t\t\t\titem.description.toLowerCase().includes(query),\n\t\t\t);\n\t\t}\n\n\t\treturn searchSlashCommandItems(\n\t\t\t[...builtInSlashCommandItems, ...appCommandItems(input.composerCommands)],\n\t\t\tinput.trigger.query,\n\t\t);\n\t}, [input.composerCommands, input.composerSkills, input.mentionRefs, input.trigger]);\n}\n\nconst builtInSlashCommandItems: Array<\n\tExtract<ComposerCommandItem, { type: \"slash-command\" }>\n> = [\n\t{\n\t\tcommand: \"model\",\n\t\tdescription: \"Open the model picker\",\n\t\tid: \"slash:model\",\n\t\tlabel: \"/model\",\n\t\ttype: \"slash-command\",\n\t},\n\t{\n\t\tcommand: \"plan\",\n\t\tdescription: \"Switch this thread into plan mode\",\n\t\tid: \"slash:plan\",\n\t\tlabel: \"/plan\",\n\t\ttype: \"slash-command\",\n\t},\n\t{\n\t\tcommand: \"default\",\n\t\tdescription: \"Switch this thread back to normal mode\",\n\t\tid: \"slash:default\",\n\t\tlabel: \"/default\",\n\t\ttype: \"slash-command\",\n\t},\n];\n\nfunction appCommandItems(\n\tcommands: readonly ChatComposerCommand[],\n): Array<Extract<ComposerCommandItem, { type: \"slash-command\" }>> {\n\treturn commands.map((command) => ({\n\t\tcommand: command.name,\n\t\tdescription: command.description,\n\t\tdisabled: command.disabled,\n\t\tid: `app-slash:${command.name}`,\n\t\tlabel: command.label ?? `/${command.name}`,\n\t\ttype: \"slash-command\" as const,\n\t\tunavailableReason: command.unavailableReason,\n\t}));\n}\n\nconst defaultAppComposerCommands: readonly ChatComposerCommand[] = [\n\t{\n\t\tdescription: \"Start a new chat when the host app supports it\",\n\t\tdisabled: true,\n\t\tname: \"new\",\n\t\tunavailableReason: \"New chat is controlled by the host app.\",\n\t},\n\t{\n\t\tdescription: \"Summarize this thread and compact context\",\n\t\tname: \"compact\",\n\t},\n\t{\n\t\tdescription: \"Toggle realtime voice mode when configured\",\n\t\tdisabled: true,\n\t\tname: \"realtime\",\n\t\tunavailableReason: \"Realtime is not configured for this chat.\",\n\t},\n];\n\nfunction skillCommandItems(\n\tskills: readonly ChatComposerSkill[],\n): Array<Extract<ComposerCommandItem, { type: \"skill\" }>> {\n\treturn skills.map((skill) => ({\n\t\tdescription: skill.description ?? \"Insert this skill into the prompt\",\n\t\tdisabled: skill.disabled,\n\t\tid: `skill:${skill.name}`,\n\t\tlabel: skill.label ?? `$${skill.name}`,\n\t\tname: skill.name,\n\t\ttype: \"skill\" as const,\n\t\tunavailableReason: skill.unavailableReason,\n\t}));\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n","import {\n\tAlertCircleIcon,\n\tCheckCircleIcon,\n\tInfoIcon,\n\tTriangleAlertIcon,\n\tXIcon,\n} from \"lucide-react\";\nimport {\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n\ttype ReactNode,\n} from \"react\";\n\nimport {\n\tAlert,\n\tAlertAction,\n\tAlertDescription,\n\tAlertTitle,\n} from \"../ui/alert\";\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../lib/utils\";\n\nconst DISMISS_TRANSITION_MS = 220;\nconst frontExitStyle = {\n\topacity: 0,\n\ttransform: \"translate3d(0, 4rem, 0)\",\n} satisfies CSSProperties;\nconst stackedExitStyle = {\n\topacity: 0,\n\ttransform: \"translate3d(0, 7rem, 0)\",\n} satisfies CSSProperties;\nconst restingStyle = {\n\topacity: 1,\n\ttransform: \"translate3d(0, 0, 0)\",\n} satisfies CSSProperties;\nconst exitTransitionStyle = {\n\ttransition: `transform ${DISMISS_TRANSITION_MS}ms ease-in, opacity ${DISMISS_TRANSITION_MS}ms ease-in`,\n\twillChange: \"transform, opacity\",\n} satisfies CSSProperties;\n\nexport type ComposerBannerStackItem = {\n\tid: string;\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\taction?: {\n\t\tlabel: string;\n\t\tonClick: () => void;\n\t};\n\tactions?: ReactNode;\n\tdismissLabel?: string;\n\ticon?: ReactNode;\n\tonDismiss?: () => void;\n\tvariant?: \"error\" | \"info\" | \"success\" | \"warning\";\n\ttone?: \"default\" | \"destructive\";\n};\n\nexport function ComposerBannerStack({\n\tclassName,\n\titems,\n}: {\n\tclassName?: string;\n\titems: readonly ComposerBannerStackItem[];\n}) {\n\tconst [exitingItemId, setExitingItemId] = useState<string | null>(null);\n\tconst dismissTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (dismissTimeoutRef.current) {\n\t\t\t\tclearTimeout(dismissTimeoutRef.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tif (items.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst frontItem = items[0];\n\tif (!frontItem) {\n\t\treturn null;\n\t}\n\tconst stackedItems = items.slice(1);\n\tconst hasStack = stackedItems.length > 0;\n\tconst showCollapsedStackCap = hasStack && exitingItemId !== frontItem.id;\n\n\tconst requestDismiss = (item: ComposerBannerStackItem) => {\n\t\tif (!item.onDismiss || exitingItemId) {\n\t\t\treturn;\n\t\t}\n\t\tsetExitingItemId(item.id);\n\t\tif (dismissTimeoutRef.current) {\n\t\t\tclearTimeout(dismissTimeoutRef.current);\n\t\t}\n\t\tdismissTimeoutRef.current = setTimeout(() => {\n\t\t\tdismissTimeoutRef.current = null;\n\t\t\tsetExitingItemId((current) => (current === item.id ? null : current));\n\t\t\titem.onDismiss?.();\n\t\t}, DISMISS_TRANSITION_MS);\n\t};\n\n\treturn (\n\t\t<div className={cn(\"group/banner-stack mx-auto mb-2 w-full\", className)}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative\",\n\t\t\t\t\thasStack\n\t\t\t\t\t\t? \"group-hover/banner-stack:z-50 group-focus-within/banner-stack:z-50\"\n\t\t\t\t\t\t: null,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{showCollapsedStackCap ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"pointer-events-none absolute inset-x-0 -top-3 z-0 mx-auto h-3 rounded-t-xl border border-b-0 border-border/70 bg-background/95 shadow-md shadow-foreground/5\",\n\t\t\t\t\t\t\t\"transition-opacity duration-150 ease-out group-hover/banner-stack:opacity-0 group-focus-within/banner-stack:opacity-0\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ width: \"96%\" }}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative z-10\",\n\t\t\t\t\t\texitingItemId === frontItem.id ? \"pointer-events-none\" : null,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...exitTransitionStyle,\n\t\t\t\t\t\t...(exitingItemId === frontItem.id ? frontExitStyle : restingStyle),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<ComposerBannerStackAlert\n\t\t\t\t\t\titem={frontItem}\n\t\t\t\t\t\texiting={exitingItemId === frontItem.id}\n\t\t\t\t\t\tonDismissRequest={() => requestDismiss(frontItem)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{hasStack ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"pointer-events-none absolute inset-x-0 bottom-[calc(100%+0.5rem)] z-20 space-y-2 opacity-0\",\n\t\t\t\t\t\t\t\"translate-y-1 transform-gpu transition-[opacity,transform] duration-150 ease-out will-change-[opacity,transform]\",\n\t\t\t\t\t\t\t\"group-hover/banner-stack:pointer-events-auto group-hover/banner-stack:translate-y-0 group-hover/banner-stack:opacity-100\",\n\t\t\t\t\t\t\t\"group-focus-within/banner-stack:pointer-events-auto group-focus-within/banner-stack:translate-y-0 group-focus-within/banner-stack:opacity-100\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{stackedItems.map((item) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\texitingItemId === item.id ? \"pointer-events-none\" : null,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...exitTransitionStyle,\n\t\t\t\t\t\t\t\t\t...(exitingItemId === item.id ? stackedExitStyle : restingStyle),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ComposerBannerStackAlert\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\texiting={exitingItemId === item.id}\n\t\t\t\t\t\t\t\t\tonDismissRequest={() => requestDismiss(item)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction ComposerBannerStackAlert({\n\titem,\n\texiting,\n\tonDismissRequest,\n}: {\n\titem: ComposerBannerStackItem;\n\texiting: boolean;\n\tonDismissRequest: () => void;\n}) {\n\tconst dismissOnly = item.onDismiss && !item.action && !item.actions;\n\tconst variant = resolveBannerVariant(item);\n\tconst actions =\n\t\titem.actions ??\n\t\t(item.action ? (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\tonClick={item.action.onClick}\n\t\t\t>\n\t\t\t\t{item.action.label}\n\t\t\t</Button>\n\t\t) : null);\n\n\treturn (\n\t\t<Alert\n\t\t\tvariant={variant === \"error\" ? \"destructive\" : \"default\"}\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-xl bg-card/95 shadow-sm shadow-foreground/5\",\n\t\t\t\tvariant === \"warning\" ? \"border-warning/30\" : null,\n\t\t\t\tvariant === \"success\" ? \"border-success/30\" : null,\n\t\t\t)}\n\t\t>\n\t\t\t{item.icon ?? <ComposerBannerIcon variant={variant} />}\n\t\t\t<AlertTitle>{item.title}</AlertTitle>\n\t\t\t{item.description ? (\n\t\t\t\t<AlertDescription className=\"text-xs\">{item.description}</AlertDescription>\n\t\t\t) : null}\n\t\t\t{actions || item.onDismiss ? (\n\t\t\t\t<AlertAction\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex items-center gap-1.5\",\n\t\t\t\t\t\tdismissOnly\n\t\t\t\t\t\t\t? \"max-sm:col-start-3 max-sm:row-start-1 max-sm:mt-0 max-sm:self-start\"\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{actions}\n\t\t\t\t\t{item.onDismiss ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label={item.dismissLabel ?? \"Dismiss warning\"}\n\t\t\t\t\t\t\tdisabled={exiting}\n\t\t\t\t\t\t\tonClick={onDismissRequest}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<XIcon className=\"size-3.5\" aria-hidden=\"true\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : null}\n\t\t\t\t</AlertAction>\n\t\t\t) : null}\n\t\t</Alert>\n\t);\n}\n\nfunction ComposerBannerIcon({\n\tvariant,\n}: {\n\tvariant: \"error\" | \"info\" | \"success\" | \"warning\";\n}) {\n\tconst className = \"size-4\";\n\tswitch (variant) {\n\t\tcase \"error\":\n\t\t\treturn <AlertCircleIcon aria-hidden=\"true\" className={className} />;\n\t\tcase \"success\":\n\t\t\treturn <CheckCircleIcon aria-hidden=\"true\" className={className} />;\n\t\tcase \"warning\":\n\t\t\treturn <TriangleAlertIcon aria-hidden=\"true\" className={className} />;\n\t\tcase \"info\":\n\t\t\treturn <InfoIcon aria-hidden=\"true\" className={className} />;\n\t}\n}\n\nfunction resolveBannerVariant(\n\titem: ComposerBannerStackItem,\n): \"error\" | \"info\" | \"success\" | \"warning\" {\n\tif (item.variant) {\n\t\treturn item.variant;\n\t}\n\treturn item.tone === \"destructive\" ? \"error\" : \"warning\";\n}\n","import type { Turn, TurnItem, UserInput, UserMessageTurnItem } from \"../../../../../../codex-rs/core/src\";\n\nimport {\n\tchangedFilesForFileChangeTurnItem,\n\ttype TimelineChangedFile,\n} from \"./ChangedFilesTree.logic\";\n\nexport const TIMELINE_WORKING_ROW_ID = \"working-indicator-row\";\nexport const MAX_VISIBLE_WORK_LOG_ENTRIES = 6;\n\ntype TimelineMessageItem = Extract<\n\tTurnItem,\n\t{ type: \"AgentMessage\" | \"UserMessage\" }\n>;\ntype TimelineProposedPlanItem = Extract<TurnItem, { type: \"Plan\" }>;\ntype TimelineWorkTurnItem = Exclude<\n\tTurnItem,\n\tTimelineMessageItem | TimelineProposedPlanItem\n>;\n\nexport type TimelineWorkEntryTone = \"error\" | \"info\" | \"thinking\" | \"tool\";\n\nexport type TimelineWorkEntry = {\n\tchangedFiles: string[];\n\tid: string;\n\titem: TimelineWorkTurnItem;\n\titemType: TimelineWorkTurnItem[\"type\"];\n\tlabel: string;\n\tpreview: string | null;\n\tstatus: string | null;\n\ttitle: string | null;\n\ttone: TimelineWorkEntryTone;\n};\n\nexport type MessagesTimelineRow =\n\t| { kind: \"empty\"; id: \"empty\" }\n\t| {\n\t\t\tkind: \"message\";\n\t\t\tcompletedAt: string | null;\n\t\t\tcreatedAt: string | null;\n\t\t\tdurationStart: string | null;\n\t\t\tid: string;\n\t\t\titem: TimelineMessageItem;\n\t\t\trole: \"assistant\" | \"user\";\n\t\t\tchangedFiles: TimelineChangedFile[];\n\t\t\tshowAssistantCopyButton: boolean;\n\t\t\tshowCompletionDivider: boolean;\n\t\t\tturnId: string | null;\n\t }\n\t| {\n\t\t\tkind: \"proposed-plan\";\n\t\t\tcreatedAt: string | null;\n\t\t\tid: string;\n\t\t\titem: TimelineProposedPlanItem;\n\t\t\tturnId: string | null;\n\t }\n\t| {\n\t\t\tkind: \"work\";\n\t\t\tcreatedAt: string | null;\n\t\t\tgroupedEntries: TimelineWorkEntry[];\n\t\t\tid: string;\n\t\t\tturnId: string | null;\n\t }\n\t| { kind: \"working\"; id: typeof TIMELINE_WORKING_ROW_ID; createdAt: string | null }\n\t| { kind: \"warning\"; id: string; message: string }\n\t| { kind: \"error\"; id: string; message: string };\n\nexport type StableMessagesTimelineRowsState = {\n\tbyId: Map<string, MessagesTimelineRow>;\n\tresult: MessagesTimelineRow[];\n};\n\nexport function deriveMessagesTimelineRows(input: {\n\tturns: readonly Turn[];\n\toptimisticUserMessages?: readonly UserMessageTurnItem[];\n\tisWorking?: boolean;\n\tactiveTurnStartedAt?: string | null;\n\trunning?: boolean;\n\thasPendingRequest?: boolean;\n\twarnings: string[];\n\terrors: string[];\n\truntimeError: string | null;\n}): MessagesTimelineRow[] {\n\tconst rows = deriveTurnRows(input.turns, input.optimisticUserMessages ?? []);\n\n\tconst isWorking =\n\t\tinput.isWorking ??\n\t\tshouldShowWorkingRow({\n\t\t\tturns: input.turns,\n\t\t\trunning: input.running ?? false,\n\t\t\thasPendingRequest: input.hasPendingRequest ?? false,\n\t\t});\n\n\tif (isWorking) {\n\t\trows.push({\n\t\t\tkind: \"working\",\n\t\t\tid: TIMELINE_WORKING_ROW_ID,\n\t\t\tcreatedAt: input.activeTurnStartedAt ?? null,\n\t\t});\n\t}\n\n\tfor (const [index, warning] of input.warnings.entries()) {\n\t\trows.push({\n\t\t\tkind: \"warning\",\n\t\t\tid: `warning-${index}-${hashSmall(warning)}`,\n\t\t\tmessage: warning,\n\t\t});\n\t}\n\n\tfor (const [index, error] of input.errors.entries()) {\n\t\trows.push({\n\t\t\tkind: \"error\",\n\t\t\tid: `thread-error-${index}-${hashSmall(error)}`,\n\t\t\tmessage: error,\n\t\t});\n\t}\n\n\tif (input.runtimeError) {\n\t\trows.push({\n\t\t\tkind: \"error\",\n\t\t\tid: `runtime-error-${hashSmall(input.runtimeError)}`,\n\t\t\tmessage: input.runtimeError,\n\t\t});\n\t}\n\n\treturn rows.length > 0 ? rows : [{ kind: \"empty\", id: \"empty\" }];\n}\n\nexport function computeStableMessagesTimelineRows(\n\trows: MessagesTimelineRow[],\n\tprevious: StableMessagesTimelineRowsState,\n): StableMessagesTimelineRowsState {\n\tconst next = new Map<string, MessagesTimelineRow>();\n\tlet changed = rows.length !== previous.byId.size;\n\n\tconst result = rows.map((row, index) => {\n\t\tconst previousRow = previous.byId.get(row.id);\n\t\tconst nextRow =\n\t\t\tpreviousRow && messagesTimelineRowUnchanged(previousRow, row)\n\t\t\t\t? previousRow\n\t\t\t\t: row;\n\t\tnext.set(row.id, nextRow);\n\t\tif (!changed && previous.result[index] !== nextRow) {\n\t\t\tchanged = true;\n\t\t}\n\t\treturn nextRow;\n\t});\n\n\treturn changed ? { byId: next, result } : previous;\n}\n\nexport function shouldShowWorkingRow(input: {\n\tisWorking?: boolean;\n\titems?: TurnItem[];\n\tturns?: readonly Turn[];\n\trunning?: boolean;\n\thasPendingRequest?: boolean;\n}): boolean {\n\tif (typeof input.isWorking === \"boolean\") {\n\t\treturn input.isWorking;\n\t}\n\tconst items = input.items ?? input.turns?.flatMap((turn) => turn.items) ?? [];\n\treturn Boolean(\n\t\tinput.running &&\n\t\t\t!input.hasPendingRequest &&\n\t\t\t!items.some(\n\t\t\t\t(item) => item.type === \"AgentMessage\" && item.phase === \"streaming\",\n\t\t\t),\n\t);\n}\n\nexport function buildOptimisticUserMessageTurnItem(input: {\n\tid: string;\n\timageUrls?: readonly string[];\n\titems: readonly UserInput[];\n}): UserMessageTurnItem {\n\treturn {\n\t\ttype: \"UserMessage\",\n\t\tid: input.id,\n\t\tcontent: [\n\t\t\t...input.items,\n\t\t\t...(input.imageUrls ?? []).map((imageUrl) => ({\n\t\t\t\ttype: \"image\" as const,\n\t\t\t\timage_url: imageUrl,\n\t\t\t})),\n\t\t],\n\t};\n}\n\nexport function mergeOptimisticUserMessageTurnItems(\n\titems: readonly TurnItem[],\n\toptimisticMessages: readonly UserMessageTurnItem[],\n): TurnItem[] {\n\tif (optimisticMessages.length === 0) {\n\t\treturn [...items];\n\t}\n\n\tconst serverUserMessageIds = new Set(\n\t\titems.flatMap((item) =>\n\t\t\titem.type === \"UserMessage\" ? [item.id] : [],\n\t\t),\n\t);\n\tconst pendingOptimisticMessages = optimisticMessages.filter(\n\t\t(message) => !serverUserMessageIds.has(message.id),\n\t);\n\n\treturn pendingOptimisticMessages.length > 0\n\t\t? [...pendingOptimisticMessages, ...items]\n\t\t: [...items];\n}\n\nexport function resolveAssistantMessageCopyState(input: {\n\tshowCopyButton: boolean;\n\tstreaming: boolean;\n\ttext: string | null;\n}): { text: string | null; visible: boolean } {\n\tconst text = normalizeCopyText(input.text ?? \"\");\n\n\treturn {\n\t\ttext,\n\t\tvisible: input.showCopyButton && Boolean(text) && !input.streaming,\n\t};\n}\n\nexport function timelineWorkEntryForTurnItem(\n\titem: TurnItem,\n): TimelineWorkEntry | null {\n\tswitch (item.type) {\n\t\tcase \"UserMessage\":\n\t\tcase \"AgentMessage\":\n\t\tcase \"Plan\":\n\t\t\treturn null;\n\t\tcase \"CommandExecution\": {\n\t\t\tconst command = item.command.join(\" \").trim();\n\t\t\tconst output = [item.stdout, item.stderr].filter(Boolean).join(\"\\n\").trim();\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: item.status === \"in_progress\" ? \"Running command\" : \"Command\",\n\t\t\t\tpreview: command || null,\n\t\t\t\tstatus: readableStatus(item.status),\n\t\t\t\ttitle: [command, item.cwd ? `cwd: ${item.cwd}` : null, output]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\"\\n\\n\") || null,\n\t\t\t\ttone: item.status === \"failed\" ? \"error\" : \"tool\",\n\t\t\t};\n\t\t}\n\t\tcase \"FileChange\": {\n\t\t\tconst changedFiles = Object.keys(item.changes);\n\t\t\tconst status = item.status ? readableStatus(item.status) : null;\n\t\t\treturn {\n\t\t\t\tchangedFiles,\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: `${changedFiles.length} file change${\n\t\t\t\t\tchangedFiles.length === 1 ? \"\" : \"s\"\n\t\t\t\t}`,\n\t\t\t\tpreview: changedFiles.slice(0, 2).join(\", \") || status,\n\t\t\t\tstatus,\n\t\t\t\ttitle:\n\t\t\t\t\t[changedFiles.join(\"\\n\"), item.stderr, item.stdout]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\"\\n\\n\") || null,\n\t\t\t\ttone: item.status === \"failed\" || item.status === \"declined\" ? \"error\" : \"tool\",\n\t\t\t};\n\t\t}\n\t\tcase \"DynamicToolCall\": {\n\t\t\tconst name = item.namespace ? `${item.namespace}.${item.tool}` : item.tool;\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: name,\n\t\t\t\tpreview: readableStatus(item.status),\n\t\t\t\tstatus: readableStatus(item.status),\n\t\t\t\ttitle: stringifyPreview(item.arguments),\n\t\t\t\ttone: item.status === \"failed\" ? \"error\" : \"tool\",\n\t\t\t};\n\t\t}\n\t\tcase \"McpToolCall\": {\n\t\t\tconst name = item.server ? `${item.server}.${item.tool}` : item.tool;\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: name,\n\t\t\t\tpreview: item.error?.message ?? readableStatus(item.status),\n\t\t\t\tstatus: readableStatus(item.status),\n\t\t\t\ttitle:\n\t\t\t\t\titem.error?.message ??\n\t\t\t\t\tstringifyPreview(item.result) ??\n\t\t\t\t\tstringifyPreview(item.arguments),\n\t\t\t\ttone: item.status === \"failed\" ? \"error\" : \"tool\",\n\t\t\t};\n\t\t}\n\t\tcase \"Reasoning\": {\n\t\t\tconst preview =\n\t\t\t\tfirstNonEmpty(item.summary_text) ?? firstNonEmpty(item.raw_content);\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: \"Thinking\",\n\t\t\t\tpreview,\n\t\t\t\tstatus: null,\n\t\t\t\ttitle: [...item.summary_text, ...item.raw_content].join(\"\\n\\n\") || null,\n\t\t\t\ttone: \"thinking\",\n\t\t\t};\n\t\t}\n\t\tcase \"WebSearch\":\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: \"Web search\",\n\t\t\t\tpreview: webSearchPreview(item),\n\t\t\t\tstatus: null,\n\t\t\t\ttitle: webSearchPreview(item),\n\t\t\t\ttone: \"tool\",\n\t\t\t};\n\t\tcase \"ImageView\":\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: \"Viewed image\",\n\t\t\t\tpreview: item.path,\n\t\t\t\tstatus: null,\n\t\t\t\ttitle: item.path,\n\t\t\t\ttone: \"info\",\n\t\t\t};\n\t\tcase \"ImageGeneration\":\n\t\t\treturn {\n\t\t\t\tchangedFiles: item.saved_path ? [item.saved_path] : [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: \"Image generation\",\n\t\t\t\tpreview: item.saved_path ?? item.result ?? readableStatus(item.status),\n\t\t\t\tstatus: readableStatus(item.status),\n\t\t\t\ttitle:\n\t\t\t\t\t[item.revised_prompt, item.saved_path, item.result]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\"\\n\\n\") || null,\n\t\t\t\ttone: item.status === \"failed\" ? \"error\" : \"tool\",\n\t\t\t};\n\t\tcase \"ContextCompaction\":\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: \"Compacted context\",\n\t\t\t\tpreview: null,\n\t\t\t\tstatus: null,\n\t\t\t\ttitle: null,\n\t\t\t\ttone: \"info\",\n\t\t\t};\n\t\tcase \"HookPrompt\":\n\t\t\treturn {\n\t\t\t\tchangedFiles: [],\n\t\t\t\tid: item.id,\n\t\t\t\titem,\n\t\t\t\titemType: item.type,\n\t\t\t\tlabel: \"Hook prompt\",\n\t\t\t\tpreview: firstNonEmpty(item.fragments.map((fragment) => fragment.text)),\n\t\t\t\tstatus: null,\n\t\t\t\ttitle: item.fragments.map((fragment) => fragment.text).join(\"\\n\\n\") || null,\n\t\t\t\ttone: \"info\",\n\t\t\t};\n\t}\n}\n\nexport function visibleTimelineWorkEntries(input: {\n\tentries: readonly TimelineWorkEntry[];\n\texpanded?: boolean;\n\tmaxVisible?: number;\n}): { entries: TimelineWorkEntry[]; hiddenCount: number } {\n\tconst maxVisible = input.maxVisible ?? MAX_VISIBLE_WORK_LOG_ENTRIES;\n\tif (input.expanded || input.entries.length <= maxVisible) {\n\t\treturn { entries: [...input.entries], hiddenCount: 0 };\n\t}\n\treturn {\n\t\tentries: input.entries.slice(-maxVisible),\n\t\thiddenCount: input.entries.length - maxVisible,\n\t};\n}\n\nexport function messagesTimelineFingerprint(\n\trows: readonly MessagesTimelineRow[],\n): string {\n\tconst last = rows.at(-1);\n\tif (!last) {\n\t\treturn \"empty\";\n\t}\n\tif (last.kind === \"message\" && last.item.type === \"AgentMessage\") {\n\t\tconst text = last.item.content.map((part) => part.text).join(\"\");\n\t\treturn `${rows.length}:${last.id}:${text.length}:${last.item.phase ?? \"done\"}:${\n\t\t\tlast.completedAt ?? \"\"\n\t\t}`;\n\t}\n\tif (last.kind === \"proposed-plan\") {\n\t\treturn `${rows.length}:${last.id}:${last.item.text.length}`;\n\t}\n\tif (last.kind === \"work\") {\n\t\tconst lastEntry = last.groupedEntries.at(-1);\n\t\treturn `${rows.length}:${last.id}:${last.groupedEntries.length}:${\n\t\t\tlastEntry?.status ?? \"\"\n\t\t}`;\n\t}\n\n\treturn `${rows.length}:${last.id}`;\n}\n\nexport function turnItemTextForCopy(item: TurnItem): string | null {\n\tswitch (item.type) {\n\t\tcase \"AgentMessage\":\n\t\t\treturn normalizeCopyText(item.content.map((part) => part.text).join(\"\\n\\n\"));\n\t\tcase \"Plan\":\n\t\t\treturn normalizeCopyText(item.text);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nexport function isAssistantCredentialError(message: string): boolean {\n\treturn /OpenAI API key|OpenAI platform credentials|OpenAI credential|Saved OpenAI credentials/i.test(\n\t\tmessage,\n\t);\n}\n\nfunction messagesTimelineRowUnchanged(\n\ta: MessagesTimelineRow,\n\tb: MessagesTimelineRow,\n): boolean {\n\tif (a.kind !== b.kind || a.id !== b.id) {\n\t\treturn false;\n\t}\n\n\tswitch (a.kind) {\n\t\tcase \"empty\":\n\t\t\treturn true;\n\t\tcase \"working\":\n\t\t\treturn a.createdAt === (b as typeof a).createdAt;\n\t\tcase \"message\":\n\t\t\treturn (\n\t\t\t\ta.item === (b as typeof a).item &&\n\t\t\t\ta.createdAt === (b as typeof a).createdAt &&\n\t\t\t\ta.completedAt === (b as typeof a).completedAt &&\n\t\t\t\ta.durationStart === (b as typeof a).durationStart &&\n\t\t\t\tchangedFilesUnchanged(a.changedFiles, (b as typeof a).changedFiles) &&\n\t\t\t\ta.showAssistantCopyButton === (b as typeof a).showAssistantCopyButton &&\n\t\t\t\ta.showCompletionDivider === (b as typeof a).showCompletionDivider &&\n\t\t\t\ta.turnId === (b as typeof a).turnId\n\t\t\t);\n\t\tcase \"proposed-plan\":\n\t\t\treturn (\n\t\t\t\ta.item === (b as typeof a).item &&\n\t\t\t\ta.createdAt === (b as typeof a).createdAt &&\n\t\t\t\ta.turnId === (b as typeof a).turnId\n\t\t\t);\n\t\tcase \"work\":\n\t\t\treturn (\n\t\t\t\ta.createdAt === (b as typeof a).createdAt &&\n\t\t\t\ta.turnId === (b as typeof a).turnId &&\n\t\t\t\tworkEntriesUnchanged(a.groupedEntries, (b as typeof a).groupedEntries)\n\t\t\t);\n\t\tcase \"warning\":\n\t\tcase \"error\":\n\t\t\treturn a.message === (b as typeof a).message;\n\t}\n}\n\nfunction deriveTurnRows(\n\tturns: readonly Turn[],\n\toptimisticUserMessages: readonly UserMessageTurnItem[],\n): MessagesTimelineRow[] {\n\tconst rows: MessagesTimelineRow[] = [];\n\tlet pendingWorkEntries: TimelineWorkEntry[] = [];\n\tlet pendingWorkTurnId: string | null = null;\n\tlet pendingWorkCreatedAt: string | null = null;\n\n\tconst latestCompletedTimedTurnId = latestCompletedTimedAssistantTurnId(turns);\n\tconst firstAssistantMessageIds = firstAssistantMessageIdsByTurn(turns);\n\tconst terminalAssistantMessageIdsByTurn = terminalAssistantMessageIdsByTurnId(turns);\n\tconst terminalAssistantMessageIds = new Set(terminalAssistantMessageIdsByTurn.values());\n\tconst changedFilesByTurn = changedFilesByTurnId(turns);\n\tlet unplacedOptimisticUserMessages = pendingOptimisticUserMessages(\n\t\tturns,\n\t\toptimisticUserMessages,\n\t);\n\n\tconst flushWork = () => {\n\t\tif (pendingWorkEntries.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst firstEntry = pendingWorkEntries[0];\n\t\tconst lastEntry = pendingWorkEntries.at(-1);\n\t\trows.push({\n\t\t\tkind: \"work\",\n\t\t\tcreatedAt: pendingWorkCreatedAt,\n\t\t\tgroupedEntries: pendingWorkEntries,\n\t\t\tid: `work:${pendingWorkTurnId ?? \"none\"}:${firstEntry?.id ?? \"first\"}:${\n\t\t\t\tlastEntry?.id ?? \"last\"\n\t\t\t}:${pendingWorkEntries.length}`,\n\t\t\tturnId: pendingWorkTurnId,\n\t\t});\n\t\tpendingWorkEntries = [];\n\t\tpendingWorkTurnId = null;\n\t\tpendingWorkCreatedAt = null;\n\t};\n\n\tfor (const turn of turns) {\n\t\tconst createdAt = epochMsToIso(turn.started_at);\n\t\tconst completedAt = epochMsToIso(turn.completed_at);\n\t\tconst optimisticMessagesForTurn =\n\t\t\tturn.status === \"in_progress\" &&\n\t\t\tturn.items.length > 0 &&\n\t\t\t!turn.items.some((item) => item.type === \"UserMessage\")\n\t\t\t\t? unplacedOptimisticUserMessages\n\t\t\t\t: [];\n\t\tif (optimisticMessagesForTurn.length > 0) {\n\t\t\tunplacedOptimisticUserMessages = [];\n\t\t\tfor (const item of optimisticMessagesForTurn) {\n\t\t\t\trows.push(messageRowForTurnItem({\n\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\tcreatedAt,\n\t\t\t\t\tdurationStart: null,\n\t\t\t\t\titem,\n\t\t\t\t\tturnId: turn.id,\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of turn.items) {\n\t\t\tif (item.type === \"UserMessage\" || item.type === \"AgentMessage\") {\n\t\t\t\tflushWork();\n\t\t\t\trows.push(\n\t\t\t\t\tmessageRowForTurnItem({\n\t\t\t\t\t\tcompletedAt: item.type === \"AgentMessage\" ? completedAt : null,\n\t\t\t\t\t\tcreatedAt,\n\t\t\t\t\t\tdurationStart: item.type === \"AgentMessage\" ? createdAt : null,\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tturnId: turn.id,\n\t\t\t\t\t\tchangedFiles:\n\t\t\t\t\t\t\titem.type === \"AgentMessage\" &&\n\t\t\t\t\t\t\tterminalAssistantMessageIdsByTurn.get(turn.id) === item.id\n\t\t\t\t\t\t\t\t? (changedFilesByTurn.get(turn.id) ?? [])\n\t\t\t\t\t\t\t\t: [],\n\t\t\t\t\t\tshowAssistantCopyButton:\n\t\t\t\t\t\t\titem.type === \"AgentMessage\" && terminalAssistantMessageIds.has(item.id),\n\t\t\t\t\t\tshowCompletionDivider:\n\t\t\t\t\t\t\titem.type === \"AgentMessage\" &&\n\t\t\t\t\t\t\tturn.id === latestCompletedTimedTurnId &&\n\t\t\t\t\t\t\tfirstAssistantMessageIds.get(turn.id) === item.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (item.type === \"Plan\") {\n\t\t\t\tflushWork();\n\t\t\t\trows.push({\n\t\t\t\t\tkind: \"proposed-plan\",\n\t\t\t\t\tcreatedAt,\n\t\t\t\t\tid: item.id,\n\t\t\t\t\titem,\n\t\t\t\t\tturnId: turn.id,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst entry = timelineWorkEntryForTurnItem(item);\n\t\t\tif (!entry) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pendingWorkEntries.length === 0) {\n\t\t\t\tpendingWorkTurnId = turn.id;\n\t\t\t\tpendingWorkCreatedAt = createdAt;\n\t\t\t}\n\t\t\tpendingWorkEntries.push(entry);\n\t\t}\n\t}\n\tflushWork();\n\n\tfor (const item of unplacedOptimisticUserMessages) {\n\t\trows.push(messageRowForTurnItem({\n\t\t\tcompletedAt: null,\n\t\t\tcreatedAt: null,\n\t\t\tdurationStart: null,\n\t\t\titem,\n\t\t\tturnId: null,\n\t\t}));\n\t}\n\n\treturn rows;\n}\n\nfunction messageRowForTurnItem(input: {\n\tcompletedAt: string | null;\n\tcreatedAt: string | null;\n\tdurationStart: string | null;\n\titem: TimelineMessageItem;\n\tturnId: string | null;\n\tchangedFiles?: TimelineChangedFile[];\n\tshowAssistantCopyButton?: boolean;\n\tshowCompletionDivider?: boolean;\n}): Extract<MessagesTimelineRow, { kind: \"message\" }> {\n\treturn {\n\t\tkind: \"message\",\n\t\tcompletedAt: input.completedAt,\n\t\tcreatedAt: input.createdAt,\n\t\tdurationStart: input.durationStart,\n\t\tid: input.item.id,\n\t\titem: input.item,\n\t\trole: input.item.type === \"UserMessage\" ? \"user\" : \"assistant\",\n\t\tchangedFiles: input.changedFiles ?? [],\n\t\tshowAssistantCopyButton: input.showAssistantCopyButton ?? false,\n\t\tshowCompletionDivider: input.showCompletionDivider ?? false,\n\t\tturnId: input.turnId,\n\t};\n}\n\nfunction pendingOptimisticUserMessages(\n\tturns: readonly Turn[],\n\toptimisticMessages: readonly UserMessageTurnItem[],\n): UserMessageTurnItem[] {\n\tif (optimisticMessages.length === 0) {\n\t\treturn [];\n\t}\n\tconst serverUserMessageIds = new Set(\n\t\tturns.flatMap((turn) =>\n\t\t\tturn.items.flatMap((item) =>\n\t\t\t\titem.type === \"UserMessage\" ? [item.id] : [],\n\t\t\t),\n\t\t),\n\t);\n\treturn optimisticMessages.filter(\n\t\t(message) => !serverUserMessageIds.has(message.id),\n\t);\n}\n\nfunction latestCompletedTimedAssistantTurnId(turns: readonly Turn[]): string | null {\n\tfor (let index = turns.length - 1; index >= 0; index -= 1) {\n\t\tconst turn = turns[index];\n\t\tif (\n\t\t\tturn &&\n\t\t\tturn.started_at !== null &&\n\t\t\tturn.completed_at !== null &&\n\t\t\tturn.items.some((item) => item.type === \"AgentMessage\")\n\t\t) {\n\t\t\treturn turn.id;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction firstAssistantMessageIdsByTurn(turns: readonly Turn[]): Map<string, string> {\n\tconst result = new Map<string, string>();\n\tfor (const turn of turns) {\n\t\tconst first = turn.items.find((item) => item.type === \"AgentMessage\");\n\t\tif (first) {\n\t\t\tresult.set(turn.id, first.id);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction terminalAssistantMessageIdsByTurnId(turns: readonly Turn[]): Map<string, string> {\n\tconst result = new Map<string, string>();\n\tfor (const turn of turns) {\n\t\tconst terminal = [...turn.items]\n\t\t\t.reverse()\n\t\t\t.find((item) => item.type === \"AgentMessage\");\n\t\tif (terminal) {\n\t\t\tresult.set(turn.id, terminal.id);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction changedFilesByTurnId(turns: readonly Turn[]): Map<string, TimelineChangedFile[]> {\n\tconst result = new Map<string, TimelineChangedFile[]>();\n\tfor (const turn of turns) {\n\t\tconst changedFiles = turn.items.flatMap((item) =>\n\t\t\titem.type === \"FileChange\" ? changedFilesForFileChangeTurnItem(item) : [],\n\t\t);\n\t\tif (changedFiles.length > 0) {\n\t\t\tresult.set(turn.id, changedFiles);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction epochMsToIso(value: number | null | undefined): string | null {\n\tif (value === null || value === undefined || !Number.isFinite(value)) {\n\t\treturn null;\n\t}\n\tconst milliseconds = Math.abs(value) < 10_000_000_000 ? value * 1000 : value;\n\tconst date = new Date(milliseconds);\n\treturn Number.isNaN(date.getTime()) ? null : date.toISOString();\n}\n\nfunction readableStatus(value: string | null | undefined): string | null {\n\tif (!value) {\n\t\treturn null;\n\t}\n\treturn value\n\t\t.replace(/([a-z])([A-Z])/g, \"$1 $2\")\n\t\t.replace(/[_-]+/g, \" \")\n\t\t.toLowerCase();\n}\n\nfunction firstNonEmpty(values: readonly string[]): string | null {\n\tfor (const value of values) {\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed) {\n\t\t\treturn trimmed;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction stringifyPreview(value: unknown): string | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn normalizeCopyText(value);\n\t}\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch {\n\t\treturn String(value);\n\t}\n}\n\nfunction webSearchPreview(item: Extract<TurnItem, { type: \"WebSearch\" }>): string | null {\n\tswitch (item.action.type) {\n\t\tcase \"search\":\n\t\t\treturn item.action.query ?? item.action.queries?.join(\", \") ?? item.query;\n\t\tcase \"open_page\":\n\t\t\treturn item.action.url ?? item.query;\n\t\tcase \"find_in_page\":\n\t\t\treturn [item.action.pattern, item.action.url].filter(Boolean).join(\" in \");\n\t\tcase \"other\":\n\t\t\treturn item.query || null;\n\t}\n}\n\nfunction workEntriesUnchanged(\n\ta: readonly TimelineWorkEntry[],\n\tb: readonly TimelineWorkEntry[],\n): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let index = 0; index < a.length; index += 1) {\n\t\tconst left = a[index];\n\t\tconst right = b[index];\n\t\tif (!left || !right) {\n\t\t\treturn false;\n\t\t}\n\t\tif (\n\t\t\tleft.item !== right.item ||\n\t\t\tleft.id !== right.id ||\n\t\t\tleft.itemType !== right.itemType ||\n\t\t\tleft.label !== right.label ||\n\t\t\tleft.preview !== right.preview ||\n\t\t\tleft.status !== right.status ||\n\t\t\tleft.title !== right.title ||\n\t\t\tleft.tone !== right.tone ||\n\t\t\tleft.changedFiles.length !== right.changedFiles.length ||\n\t\t\tleft.changedFiles.some((file, fileIndex) => file !== right.changedFiles[fileIndex])\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction changedFilesUnchanged(\n\ta: readonly TimelineChangedFile[],\n\tb: readonly TimelineChangedFile[],\n): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let index = 0; index < a.length; index += 1) {\n\t\tconst left = a[index];\n\t\tconst right = b[index];\n\t\tif (\n\t\t\t!left ||\n\t\t\t!right ||\n\t\t\tleft.path !== right.path ||\n\t\t\tleft.changeType !== right.changeType ||\n\t\t\tleft.additions !== right.additions ||\n\t\t\tleft.deletions !== right.deletions\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction normalizeCopyText(value: string): string | null {\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : null;\n}\n\nfunction hashSmall(value: string): string {\n\tlet hash = 0x811c9dc5;\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\thash ^= value.charCodeAt(index);\n\t\thash = Math.imul(hash, 0x01000193);\n\t}\n\treturn (hash >>> 0).toString(16);\n}\n","import { CheckIcon, CopyIcon } from \"lucide-react\";\nimport {\n\tChildren,\n\tSuspense,\n\tisValidElement,\n\tmemo,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\nimport ReactMarkdown, { defaultUrlTransform, type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport { Button } from \"./ui/button\";\nimport { cn } from \"../lib/utils\";\n\ntype ChatMarkdownProps = {\n\tcwd?: string | undefined;\n\tisStreaming?: boolean;\n\ttext: string;\n};\n\nconst CODE_FENCE_LANGUAGE_REGEX = /(?:^|\\s)language-([^\\s]+)/;\n\nfunction extractFenceLanguage(className: string | undefined): string {\n\tconst match = className?.match(CODE_FENCE_LANGUAGE_REGEX);\n\treturn match?.[1] ?? \"text\";\n}\n\nfunction nodeToPlainText(node: ReactNode): string {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\tif (Array.isArray(node)) {\n\t\treturn node.map((child) => nodeToPlainText(child)).join(\"\");\n\t}\n\tif (isValidElement<{ children?: ReactNode }>(node)) {\n\t\treturn nodeToPlainText(node.props.children);\n\t}\n\treturn \"\";\n}\n\nfunction extractCodeBlock(\n\tchildren: ReactNode,\n): { className: string | undefined; code: string } | null {\n\tconst childNodes = Children.toArray(children);\n\tif (childNodes.length !== 1) {\n\t\treturn null;\n\t}\n\n\tconst onlyChild = childNodes[0];\n\tif (!isValidElement<{ className?: string; children?: ReactNode }>(onlyChild)) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tclassName: onlyChild.props.className,\n\t\tcode: nodeToPlainText(onlyChild.props.children),\n\t};\n}\n\nfunction MarkdownCodeBlock({\n\tchildren,\n\tcode,\n\tlanguage,\n}: {\n\tchildren: ReactNode;\n\tcode: string;\n\tlanguage: string;\n}) {\n\tconst [copied, setCopied] = useState(false);\n\tconst copiedTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst handleCopy = useCallback(() => {\n\t\tif (!navigator.clipboard?.writeText) {\n\t\t\treturn;\n\t\t}\n\t\tvoid navigator.clipboard.writeText(code).then(() => {\n\t\t\tif (copiedTimerRef.current !== null) {\n\t\t\t\tclearTimeout(copiedTimerRef.current);\n\t\t\t}\n\t\t\tsetCopied(true);\n\t\t\tcopiedTimerRef.current = setTimeout(() => {\n\t\t\t\tsetCopied(false);\n\t\t\t\tcopiedTimerRef.current = null;\n\t\t\t}, 1200);\n\t\t});\n\t}, [code]);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (copiedTimerRef.current !== null) {\n\t\t\t\tclearTimeout(copiedTimerRef.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\treturn (\n\t\t<div className=\"chat-markdown-codeblock group/code relative my-3 overflow-hidden rounded-lg border bg-muted/35\">\n\t\t\t<div className=\"flex h-8 items-center justify-between border-b bg-muted/45 px-3\">\n\t\t\t\t<span className=\"truncate font-mono text-[11px] text-muted-foreground\">\n\t\t\t\t\t{language}\n\t\t\t\t</span>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\taria-label={copied ? \"Copied code\" : \"Copy code\"}\n\t\t\t\t\ttitle={copied ? \"Copied\" : \"Copy code\"}\n\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t>\n\t\t\t\t\t{copied ? <CheckIcon /> : <CopyIcon />}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nexport const ChatMarkdown = memo(function ChatMarkdown({\n\tisStreaming = false,\n\ttext,\n}: ChatMarkdownProps) {\n\tconst markdownComponents = useMemo<Components>(\n\t\t() => ({\n\t\t\ta({ href, ...props }) {\n\t\t\t\treturn (\n\t\t\t\t\t<a\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\thref={href}\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t},\n\t\t\tcode({ className, children, ...props }) {\n\t\t\t\tconst codeProps = { ...props } as typeof props & {\n\t\t\t\t\tnode?: unknown;\n\t\t\t\t};\n\t\t\t\tdelete codeProps.node;\n\t\t\t\tconst code = nodeToPlainText(children);\n\t\t\t\treturn (\n\t\t\t\t\t<code\n\t\t\t\t\t\t{...codeProps}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t\"rounded bg-muted px-1 py-0.5 font-mono text-[0.9em]\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{code}\n\t\t\t\t\t</code>\n\t\t\t\t);\n\t\t\t},\n\t\t\tpre({ children }) {\n\t\t\t\tconst block = extractCodeBlock(children);\n\t\t\t\tif (!block) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<pre className=\"my-3 overflow-x-auto rounded-lg border bg-muted/35 p-3\">\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</pre>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst language = extractFenceLanguage(block.className);\n\t\t\t\treturn (\n\t\t\t\t\t<MarkdownCodeBlock code={block.code} language={language}>\n\t\t\t\t\t\t<pre className=\"overflow-x-auto p-3 text-[13px] leading-5\">\n\t\t\t\t\t\t\t<code className={block.className}>{block.code}</code>\n\t\t\t\t\t\t</pre>\n\t\t\t\t\t</MarkdownCodeBlock>\n\t\t\t\t);\n\t\t\t},\n\t\t}),\n\t\t[],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"chat-markdown min-w-0 max-w-none text-sm leading-6\",\n\t\t\t\t\"prose prose-sm dark:prose-invert\",\n\t\t\t\t\"prose-headings:mb-2 prose-headings:mt-4 prose-headings:font-semibold\",\n\t\t\t\t\"prose-p:my-2 prose-ul:my-2 prose-ol:my-2 prose-li:my-0.5\",\n\t\t\t\t\"prose-table:my-3 prose-th:border prose-th:px-2 prose-th:py-1 prose-td:border prose-td:px-2 prose-td:py-1\",\n\t\t\t\t\"prose-a:text-primary prose-a:underline-offset-4 hover:prose-a:underline\",\n\t\t\t\tisStreaming && \"after:ml-0.5 after:animate-pulse after:content-['|']\",\n\t\t\t)}\n\t\t>\n\t\t\t<Suspense fallback={<p className=\"whitespace-pre-wrap\">{text}</p>}>\n\t\t\t\t<ReactMarkdown\n\t\t\t\t\tcomponents={markdownComponents}\n\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\turlTransform={defaultUrlTransform}\n\t\t\t\t>\n\t\t\t\t\t{text}\n\t\t\t\t</ReactMarkdown>\n\t\t\t</Suspense>\n\t\t</div>\n\t);\n});\n\nexport default ChatMarkdown;\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst badgeVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-sm border border-transparent font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-3.5 sm:[&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0 [button&,a&]:cursor-pointer [button&,a&]:pointer-coarse:after:absolute [button&,a&]:pointer-coarse:after:size-full [button&,a&]:pointer-coarse:after:min-h-11 [button&,a&]:pointer-coarse:after:min-w-11\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary: \"bg-secondary text-secondary-foreground [button&,a&]:hover:bg-secondary/90\",\n destructive: \"bg-destructive text-white [button&,a&]:hover:bg-destructive/90\",\n outline:\n \"border-input bg-background text-foreground dark:bg-input/32 [button&,a&]:hover:bg-accent/50 dark:[button&,a&]:hover:bg-input/48\",\n ghost: \"bg-secondary text-secondary-foreground [button&,a&]:hover:bg-secondary/90\",\n link: \"bg-primary text-primary-foreground [button&,a&]:hover:bg-primary/90\",\n },\n size: {\n default:\n \"h-5.5 min-w-5.5 px-[calc(--spacing(1)-1px)] text-sm sm:h-4.5 sm:min-w-4.5 sm:text-xs\",\n sm: \"h-5 min-w-5 rounded-[.25rem] px-[calc(--spacing(1)-1px)] text-xs sm:h-4 sm:min-w-4 sm:text-[.625rem]\",\n lg: \"h-6.5 min-w-6.5 px-[calc(--spacing(1.5)-1px)] text-base sm:h-5.5 sm:min-w-5.5 sm:text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","export function proposedPlanTitle(planMarkdown: string): string | null {\n\tconst heading = planMarkdown.match(/^\\s{0,3}#{1,6}\\s+(.+)$/m)?.[1]?.trim();\n\treturn heading && heading.length > 0 ? heading : null;\n}\n\nexport function stripDisplayedPlanMarkdown(planMarkdown: string): string {\n\tconst lines = planMarkdown.trimEnd().split(/\\r?\\n/);\n\tconst sourceLines =\n\t\tlines[0] && /^\\s{0,3}#{1,6}\\s+/.test(lines[0])\n\t\t\t? lines.slice(1)\n\t\t\t: [...lines];\n\twhile (sourceLines[0]?.trim().length === 0) {\n\t\tsourceLines.shift();\n\t}\n\tconst firstHeadingMatch = sourceLines[0]?.match(/^\\s{0,3}#{1,6}\\s+(.+)$/);\n\tif (firstHeadingMatch?.[1]?.trim().toLowerCase() === \"summary\") {\n\t\tsourceLines.shift();\n\t\twhile (sourceLines[0]?.trim().length === 0) {\n\t\t\tsourceLines.shift();\n\t\t}\n\t}\n\treturn sourceLines.join(\"\\n\");\n}\n\nexport function buildCollapsedProposedPlanPreviewMarkdown(\n\tplanMarkdown: string,\n\toptions?: { maxLines?: number },\n): string {\n\tconst maxLines = options?.maxLines ?? 8;\n\tconst lines = stripDisplayedPlanMarkdown(planMarkdown)\n\t\t.trimEnd()\n\t\t.split(/\\r?\\n/)\n\t\t.map((line) => line.trimEnd());\n\tconst previewLines: string[] = [];\n\tlet visibleLineCount = 0;\n\tlet hasMoreContent = false;\n\n\tfor (const line of lines) {\n\t\tconst isVisibleLine = line.trim().length > 0;\n\t\tif (isVisibleLine && visibleLineCount >= maxLines) {\n\t\t\thasMoreContent = true;\n\t\t\tbreak;\n\t\t}\n\t\tpreviewLines.push(line);\n\t\tif (isVisibleLine) {\n\t\t\tvisibleLineCount += 1;\n\t\t}\n\t}\n\n\twhile (previewLines.length > 0 && previewLines.at(-1)?.trim().length === 0) {\n\t\tpreviewLines.pop();\n\t}\n\n\tif (previewLines.length === 0) {\n\t\treturn proposedPlanTitle(planMarkdown) ?? \"Plan preview unavailable.\";\n\t}\n\n\tif (hasMoreContent) {\n\t\tpreviewLines.push(\"\", \"...\");\n\t}\n\n\treturn previewLines.join(\"\\n\");\n}\n\nfunction sanitizePlanFileSegment(input: string): string {\n\tconst sanitized = input\n\t\t.toLowerCase()\n\t\t.replace(/[`'\".,!?()[\\]{}]+/g, \"\")\n\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n\treturn sanitized.length > 0 ? sanitized : \"plan\";\n}\n\nexport function buildPlanImplementationPrompt(planMarkdown: string): string {\n\treturn `PLEASE IMPLEMENT THIS PLAN:\\n${planMarkdown.trim()}`;\n}\n\nexport function resolvePlanFollowUpSubmission(input: {\n\tdraftText: string;\n\tplanMarkdown: string;\n}): { interactionMode: \"default\" | \"plan\"; text: string } {\n\tconst trimmedDraftText = input.draftText.trim();\n\tif (trimmedDraftText.length > 0) {\n\t\treturn {\n\t\t\tinteractionMode: \"plan\",\n\t\t\ttext: trimmedDraftText,\n\t\t};\n\t}\n\n\treturn {\n\t\tinteractionMode: \"default\",\n\t\ttext: buildPlanImplementationPrompt(input.planMarkdown),\n\t};\n}\n\nexport function buildPlanImplementationThreadTitle(planMarkdown: string): string {\n\tconst title = proposedPlanTitle(planMarkdown);\n\treturn title ? `Implement ${title}` : \"Implement plan\";\n}\n\nexport function buildProposedPlanMarkdownFilename(planMarkdown: string): string {\n\tconst title = proposedPlanTitle(planMarkdown);\n\treturn `${sanitizePlanFileSegment(title ?? \"plan\")}.md`;\n}\n\nexport function normalizePlanMarkdownForExport(planMarkdown: string): string {\n\treturn `${planMarkdown.trimEnd()}\\n`;\n}\n\nexport function downloadPlanAsTextFile(filename: string, contents: string): void {\n\tconst blob = new Blob([contents], { type: \"text/markdown;charset=utf-8\" });\n\tconst url = URL.createObjectURL(blob);\n\tconst anchor = document.createElement(\"a\");\n\tanchor.href = url;\n\tanchor.download = filename;\n\tanchor.click();\n\twindow.setTimeout(() => {\n\t\tURL.revokeObjectURL(url);\n\t}, 0);\n}\n","import { EllipsisIcon } from \"lucide-react\";\nimport { memo, useState } from \"react\";\n\nimport { Badge } from \"../ui/badge\";\nimport { Button } from \"../ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { cn } from \"../../lib/utils\";\n\nimport ChatMarkdown from \"../ChatMarkdown\";\nimport {\n\tbuildCollapsedProposedPlanPreviewMarkdown,\n\tproposedPlanTitle,\n\tstripDisplayedPlanMarkdown,\n} from \"./proposed-plan\";\n\nexport const ProposedPlanCard = memo(function ProposedPlanCard({\n\tplanMarkdown,\n}: {\n\tplanMarkdown: string;\n}) {\n\tconst [expanded, setExpanded] = useState(false);\n\tconst [copied, setCopied] = useState(false);\n\tconst title = proposedPlanTitle(planMarkdown) ?? \"Proposed plan\";\n\tconst lineCount = planMarkdown.split(\"\\n\").length;\n\tconst canCollapse = planMarkdown.length > 900 || lineCount > 20;\n\tconst displayedPlanMarkdown = stripDisplayedPlanMarkdown(planMarkdown);\n\tconst collapsedPreview = canCollapse\n\t\t? buildCollapsedProposedPlanPreviewMarkdown(planMarkdown, { maxLines: 10 })\n\t\t: null;\n\n\tfunction copyPlan() {\n\t\tif (!navigator.clipboard?.writeText) {\n\t\t\treturn;\n\t\t}\n\t\tvoid navigator.clipboard.writeText(`${planMarkdown.trimEnd()}\\n`).then(() => {\n\t\t\tsetCopied(true);\n\t\t\twindow.setTimeout(() => setCopied(false), 1200);\n\t\t});\n\t}\n\n\treturn (\n\t\t<div className=\"rounded-[24px] border border-border/80 bg-card/70 p-4 sm:p-5\">\n\t\t\t<div className=\"flex flex-wrap items-center justify-between gap-3\">\n\t\t\t\t<div className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t\t<Badge variant=\"secondary\">Plan</Badge>\n\t\t\t\t\t<p className=\"truncate text-sm font-medium text-foreground\">{title}</p>\n\t\t\t\t</div>\n\t\t\t\t<DropdownMenu>\n\t\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t\t<Button aria-label=\"Plan actions\" size=\"icon-xs\" variant=\"outline\">\n\t\t\t\t\t\t\t<EllipsisIcon aria-hidden=\"true\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t<DropdownMenuContent align=\"end\" className=\"w-44\">\n\t\t\t\t\t\t<DropdownMenuItem onClick={copyPlan}>\n\t\t\t\t\t\t\t{copied ? \"Copied!\" : \"Copy to clipboard\"}\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t</DropdownMenu>\n\t\t\t</div>\n\t\t\t<div className=\"mt-4\">\n\t\t\t\t<div className={cn(\"relative\", canCollapse && !expanded && \"max-h-104 overflow-hidden\")}>\n\t\t\t\t\t<ChatMarkdown\n\t\t\t\t\t\ttext={\n\t\t\t\t\t\t\tcanCollapse && !expanded\n\t\t\t\t\t\t\t\t? (collapsedPreview ?? \"\")\n\t\t\t\t\t\t\t\t: displayedPlanMarkdown\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisStreaming={false}\n\t\t\t\t\t/>\n\t\t\t\t\t{canCollapse && !expanded ? (\n\t\t\t\t\t\t<div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-24 bg-linear-to-t from-card/95 via-card/80 to-transparent\" />\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t{canCollapse ? (\n\t\t\t\t\t<div className=\"mt-4 flex justify-center\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tonClick={() => setExpanded((value) => !value)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{expanded ? \"Collapse plan\" : \"Expand plan\"}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","import { LegendList, type LegendListRef } from \"@legendapp/list/react\";\nimport {\n\tBoxIcon,\n\tCheckIcon,\n\tCopyIcon,\n\tFileDiffIcon,\n\tGlobeIcon,\n\tImageIcon,\n\tLightbulbIcon,\n\tPaperclipIcon,\n\tSearchIcon,\n\tSettingsIcon,\n\tTerminalIcon,\n} from \"lucide-react\";\nimport {\n\tcreateContext,\n\tmemo,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from \"../ui/tooltip\";\nimport { cn } from \"../../lib/utils\";\nimport type { Turn, TurnItem, UserInput, UserMessageTurnItem } from \"../../../../../../codex-rs/core/src\";\n\nimport { decodeHistoryMentions } from \"./mention-codec\";\nimport type { ExpandedImagePreview } from \"./composer-image-attachments\";\nimport { AssistantChangedFilesSection } from \"./ChangedFilesTree\";\nimport {\n\tderiveMessagesTimelineRows,\n\tcomputeStableMessagesTimelineRows,\n\tisAssistantCredentialError,\n\tresolveAssistantMessageCopyState,\n\tvisibleTimelineWorkEntries,\n\ttype MessagesTimelineRow,\n\ttype StableMessagesTimelineRowsState,\n\ttype TimelineWorkEntry,\n} from \"./MessagesTimeline.logic\";\nimport ChatMarkdown from \"../ChatMarkdown\";\nimport { ProposedPlanCard } from \"./ProposedPlanCard\";\n\nexport type MessagesTimelineProps = {\n\tactiveTurnStartedAt: string | null;\n\terrors: string[];\n\tisWorking: boolean;\n\tlistRef: React.RefObject<LegendListRef | null>;\n\tonImageExpand: (preview: ExpandedImagePreview) => void;\n\tonIsAtEndChange: (isAtEnd: boolean) => void;\n\toptimisticUserMessages: readonly UserMessageTurnItem[];\n\truntimeError: string | null;\n\tturns: readonly Turn[];\n\twarnings: string[];\n};\n\ntype TimelineRowContextValue = {\n\tonImageExpand: (preview: ExpandedImagePreview) => void;\n};\n\nconst TimelineRowContext = createContext<TimelineRowContextValue | null>(null);\n\ntype MessageTimelineRowModel = Extract<MessagesTimelineRow, { kind: \"message\" }>;\ntype UserMessageTimelineRowModel = MessageTimelineRowModel & {\n\titem: Extract<TurnItem, { type: \"UserMessage\" }>;\n};\ntype AssistantMessageTimelineRowModel = MessageTimelineRowModel & {\n\titem: Extract<TurnItem, { type: \"AgentMessage\" }>;\n};\n\nconst TIMELINE_LIST_HEADER = <div className=\"h-3 sm:h-4\" />;\nconst TIMELINE_LIST_FOOTER = <div className=\"h-3 sm:h-4\" />;\n\nexport const MessagesTimeline = memo(function MessagesTimeline({\n\tactiveTurnStartedAt,\n\terrors,\n\tisWorking,\n\tlistRef,\n\tonImageExpand,\n\tonIsAtEndChange,\n\toptimisticUserMessages,\n\truntimeError,\n\tturns,\n\twarnings,\n}: MessagesTimelineProps) {\n\tconst rawRows = useMemo(\n\t\t() =>\n\t\t\tderiveMessagesTimelineRows({\n\t\t\t\tturns,\n\t\t\t\toptimisticUserMessages,\n\t\t\t\tisWorking,\n\t\t\t\tactiveTurnStartedAt,\n\t\t\t\twarnings,\n\t\t\t\terrors,\n\t\t\t\truntimeError,\n\t\t}),\n\t\t[\n\t\t\tactiveTurnStartedAt,\n\t\t\terrors,\n\t\t\tisWorking,\n\t\t\toptimisticUserMessages,\n\t\t\truntimeError,\n\t\t\tturns,\n\t\t\twarnings,\n\t\t],\n\t);\n\tconst rows = useStableRows(rawRows);\n\tconst showEmptyState = rows.length === 1 && rows[0]?.kind === \"empty\";\n\tconst rowContext = useMemo(() => ({ onImageExpand }), [onImageExpand]);\n\tconst handleScroll = useCallback(() => {\n\t\tconst state = listRef.current?.getState?.();\n\t\tif (state) {\n\t\t\tonIsAtEndChange(state.isAtEnd);\n\t\t}\n\t}, [listRef, onIsAtEndChange]);\n\n\tconst previousRowCountRef = useRef(rows.length);\n\tuseEffect(() => {\n\t\tconst previousRowCount = previousRowCountRef.current;\n\t\tpreviousRowCountRef.current = rows.length;\n\n\t\tif (previousRowCount > 0 || rows.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tonIsAtEndChange(true);\n\t\tconst frameId = window.requestAnimationFrame(() => {\n\t\t\tvoid listRef.current?.scrollToEnd?.({ animated: false });\n\t\t});\n\t\treturn () => window.cancelAnimationFrame(frameId);\n\t}, [listRef, onIsAtEndChange, rows.length]);\n\n\tconst renderItem = useCallback(\n\t\t({ item }: { item: MessagesTimelineRow }) => (\n\t\t\t<div\n\t\t\t\tclassName=\"mx-auto w-full min-w-0 max-w-3xl overflow-x-clip\"\n\t\t\t\tdata-timeline-root=\"true\"\n\t\t\t>\n\t\t\t\t<TimelineRowContent row={item} />\n\t\t\t</div>\n\t\t),\n\t\t[],\n\t);\n\n\tif (showEmptyState) {\n\t\treturn (\n\t\t\t<div className=\"flex h-full items-center justify-center\">\n\t\t\t\t<p className=\"text-sm text-muted-foreground/30\">\n\t\t\t\t\tSend a message to start the conversation.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TimelineRowContext.Provider value={rowContext}>\n\t\t\t<LegendList<MessagesTimelineRow>\n\t\t\t\tref={listRef}\n\t\t\t\tdata={rows}\n\t\t\t\tkeyExtractor={keyExtractor}\n\t\t\t\trenderItem={renderItem}\n\t\t\t\testimatedItemSize={90}\n\t\t\t\tinitialScrollAtEnd\n\t\t\t\tmaintainScrollAtEnd\n\t\t\t\tmaintainScrollAtEndThreshold={0.1}\n\t\t\t\tmaintainVisibleContentPosition\n\t\t\t\tonScroll={handleScroll}\n\t\t\t\tclassName=\"h-full overflow-x-hidden overscroll-y-contain px-3 sm:px-5\"\n\t\t\t\tListHeaderComponent={TIMELINE_LIST_HEADER}\n\t\t\t\tListFooterComponent={TIMELINE_LIST_FOOTER}\n\t\t\t/>\n\t\t</TimelineRowContext.Provider>\n\t);\n});\n\nfunction keyExtractor(item: MessagesTimelineRow) {\n\treturn item.id;\n}\n\nfunction useStableRows(rows: MessagesTimelineRow[]): MessagesTimelineRow[] {\n\tconst previousState = useRef<StableMessagesTimelineRowsState>({\n\t\tbyId: new Map<string, MessagesTimelineRow>(),\n\t\tresult: [],\n\t});\n\n\t/* eslint-disable react-hooks/refs */\n\treturn useMemo(() => {\n\t\t// This mirrors T3's structural-sharing hook; the ref is a render cache\n\t\t// for stable virtualized row identity, not UI state.\n\t\tconst nextState = computeStableMessagesTimelineRows(\n\t\t\trows,\n\t\t\tpreviousState.current,\n\t\t);\n\t\tpreviousState.current = nextState;\n\t\treturn nextState.result;\n\t}, [rows]);\n\t/* eslint-enable react-hooks/refs */\n}\n\nconst TimelineRowContent = memo(function TimelineRowContent({\n\trow,\n}: {\n\trow: MessagesTimelineRow;\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"pb-4\",\n\t\t\t\trow.kind === \"message\" && row.role === \"assistant\"\n\t\t\t\t\t? \"group/assistant\"\n\t\t\t\t\t: null,\n\t\t\t\trow.kind === \"message\" && row.role === \"user\" ? \"group/user\" : null,\n\t\t\t)}\n\t\t\tdata-timeline-row-id={row.id}\n\t\t\tdata-timeline-row-kind={row.kind}\n\t\t\tdata-message-id={row.kind === \"message\" ? row.item.id : undefined}\n\t\t\tdata-message-role={row.kind === \"message\" ? row.role : undefined}\n\t\t>\n\t\t\t{row.kind === \"message\" ? <MessageTimelineRow row={row} /> : null}\n\t\t\t{row.kind === \"proposed-plan\" ? (\n\t\t\t\t<ProposedPlanTimelineRow row={row} />\n\t\t\t) : null}\n\t\t\t{row.kind === \"work\" ? <WorkTimelineRow row={row} /> : null}\n\t\t\t{row.kind === \"working\" ? <WorkingTimelineRow row={row} /> : null}\n\t\t\t{row.kind === \"warning\" ? <WarningTimelineRow message={row.message} /> : null}\n\t\t\t{row.kind === \"error\" ? <ErrorTimelineRow message={row.message} /> : null}\n\t\t</div>\n\t);\n});\n\nfunction useTimelineRowContext() {\n\tconst context = useContext(TimelineRowContext);\n\tif (!context) {\n\t\tthrow new Error(\"TimelineRowContext is not available.\");\n\t}\n\treturn context;\n}\n\nfunction MessageTimelineRow({\n\trow,\n}: {\n\trow: MessageTimelineRowModel;\n}) {\n\tif (row.item.type === \"UserMessage\") {\n\t\treturn <UserTimelineRow row={row as UserMessageTimelineRowModel} />;\n\t}\n\treturn <AssistantTimelineRow row={row as AssistantMessageTimelineRowModel} />;\n}\n\nfunction UserTimelineRow({\n\trow,\n}: {\n\trow: UserMessageTimelineRowModel;\n}) {\n\tconst copyText = userInputTextForCopy(row.item.content);\n\treturn (\n\t\t<div className=\"flex justify-end\">\n\t\t\t<div className=\"group relative max-w-[80%] rounded-2xl rounded-br-sm border border-border bg-secondary px-4 py-3\">\n\t\t\t\t<UserInputContent content={row.item.content} />\n\t\t\t\t<div className=\"mt-1.5 flex items-center justify-end gap-2\">\n\t\t\t\t\t<div className=\"flex items-center gap-1.5 opacity-0 transition-opacity duration-200 group-hover:opacity-100 focus-within:opacity-100\">\n\t\t\t\t\t\t{copyText ? <MessageCopyButton compact text={copyText} /> : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t{row.createdAt ? (\n\t\t\t\t\t\t<p className=\"text-right text-muted-foreground/50 text-xs\">\n\t\t\t\t\t\t\t{formatTimestamp(row.createdAt)}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction AssistantTimelineRow({\n\trow,\n}: {\n\trow: AssistantMessageTimelineRowModel;\n}) {\n\tconst text = row.item.content.map((part) => part.text).join(\"\\n\\n\");\n\tconst messageText =\n\t\ttext.trim().length > 0 || row.item.phase === \"streaming\"\n\t\t\t? text\n\t\t\t: \"(empty response)\";\n\tconst copyState = resolveAssistantMessageCopyState({\n\t\tshowCopyButton: row.showAssistantCopyButton,\n\t\tstreaming: row.item.phase === \"streaming\",\n\t\ttext,\n\t});\n\treturn (\n\t\t<div className=\"min-w-0 px-1 py-0.5\">\n\t\t\t{row.showCompletionDivider ? (\n\t\t\t\t<AssistantCompletionDivider row={row} />\n\t\t\t) : null}\n\t\t\t<ChatMarkdown text={messageText} isStreaming={row.item.phase === \"streaming\"} />\n\t\t\t<AssistantChangedFilesSection\n\t\t\t\tfiles={row.changedFiles}\n\t\t\t\tturnId={row.turnId}\n\t\t\t/>\n\t\t\t<div className=\"mt-1.5 flex min-h-7 items-center gap-2\">\n\t\t\t\t<AssistantMessageMeta row={row} />\n\t\t\t\t{copyState.visible && copyState.text ? (\n\t\t\t\t\t<MessageCopyButton compact text={copyState.text} />\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction AssistantCompletionDivider({\n\trow,\n}: {\n\trow: Extract<MessagesTimelineRow, { kind: \"message\" }>;\n}) {\n\tconst duration =\n\t\trow.durationStart && row.completedAt\n\t\t\t? formatWorkingTimer(row.durationStart, row.completedAt)\n\t\t\t: null;\n\treturn (\n\t\t<div className=\"my-3 flex items-center gap-3\">\n\t\t\t<span className=\"h-px flex-1 bg-border\" />\n\t\t\t<span className=\"rounded-full border border-border bg-background px-2.5 py-1 text-[10px] uppercase tracking-[0.14em] text-muted-foreground/80\">\n\t\t\t\t{duration ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\tResponse <span aria-hidden=\"true\">&middot;</span> {duration}\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t\"Response\"\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t<span className=\"h-px flex-1 bg-border\" />\n\t\t</div>\n\t);\n}\n\nfunction AssistantMessageMeta({\n\trow,\n}: {\n\trow: Extract<MessagesTimelineRow, { kind: \"message\" }>;\n}) {\n\tif (!row.createdAt) {\n\t\treturn null;\n\t}\n\n\tconst durationStart = row.durationStart;\n\tconst completedAt = row.completedAt;\n\treturn (\n\t\t<p className=\"text-muted-foreground/30 text-[10px]\">\n\t\t\t{formatTimestamp(row.createdAt)}\n\t\t\t{durationStart ? (\n\t\t\t\t<>\n\t\t\t\t\t<span aria-hidden=\"true\">&nbsp;&middot;&nbsp;</span>\n\t\t\t\t\t{completedAt ? (\n\t\t\t\t\t\tformatWorkingTimer(durationStart, completedAt)\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<WorkingTimer createdAt={durationStart} />\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</p>\n\t);\n}\n\nfunction WorkTimelineRow({\n\trow,\n}: {\n\trow: Extract<MessagesTimelineRow, { kind: \"work\" }>;\n}) {\n\tconst [expanded, setExpanded] = useState(false);\n\tconst visible = visibleTimelineWorkEntries({\n\t\tentries: row.groupedEntries,\n\t\texpanded,\n\t});\n\tconst hasOverflow = row.groupedEntries.length > visible.entries.length;\n\tconst onlyToolEntries = row.groupedEntries.every((entry) => entry.tone === \"tool\");\n\tconst showHeader = hasOverflow || !onlyToolEntries;\n\tconst groupLabel = onlyToolEntries ? \"Tool calls\" : \"Work log\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"min-w-0 rounded-xl border border-border/45 bg-card/25 px-2 py-1.5\"\n\t\t\tdata-work-group=\"true\"\n\t\t\tdata-work-group-count={row.groupedEntries.length}\n\t\t>\n\t\t\t{showHeader ? (\n\t\t\t\t<div className=\"mb-1.5 flex items-center justify-between gap-2 px-0.5\">\n\t\t\t\t\t<p className=\"text-[9px] uppercase tracking-[0.16em] text-muted-foreground/55\">\n\t\t\t\t\t\t{groupLabel} ({row.groupedEntries.length})\n\t\t\t\t\t</p>\n\t\t\t\t\t{hasOverflow ? (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"text-[9px] uppercase tracking-[0.12em] text-muted-foreground/55 transition-colors duration-150 hover:text-foreground/75\"\n\t\t\t\t\t\t\tonClick={() => setExpanded((current) => !current)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{expanded ? \"Show less\" : `Show ${visible.hiddenCount} more`}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div className=\"space-y-0.5\">\n\t\t\t\t{visible.entries.map((entry) => (\n\t\t\t\t\t<SimpleWorkEntryRow key={entry.id} entry={entry} />\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst SimpleWorkEntryRow = memo(function SimpleWorkEntryRow({\n\tentry,\n}: {\n\tentry: TimelineWorkEntry;\n}) {\n\tconst heading = formatCompactToolHeading(entry.label);\n\tconst preview =\n\t\tentry.preview &&\n\t\tcompactToolLabel(entry.preview).toLowerCase() ===\n\t\t\tcompactToolLabel(heading).toLowerCase()\n\t\t\t? null\n\t\t\t: entry.preview;\n\tconst displayText = preview ? `${heading} - ${preview}` : heading;\n\tconst title = entry.title ?? displayText;\n\tconst previewIsChangedFiles =\n\t\tentry.changedFiles.length > 0 &&\n\t\tentry.itemType === \"FileChange\" &&\n\t\tBoolean(preview);\n\tconst tooltipText = title || displayText;\n\tconst tooltipIsCommand = entry.itemType === \"CommandExecution\";\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rounded-lg px-1 py-1\"\n\t\t\tdata-work-entry-id={entry.id}\n\t\t\tdata-work-entry-type={entry.itemType}\n\t\t\ttitle={title || undefined}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 items-center gap-2 transition-[opacity,translate] duration-200\">\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex size-5 shrink-0 items-center justify-center\",\n\t\t\t\t\t\ttoneClassForWork(entry.tone),\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<WorkEntryIcon entry={entry} />\n\t\t\t\t</span>\n\t\t\t\t<div className=\"min-w-0 flex-1 overflow-hidden\">\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger\n\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\taria-label={tooltipText}\n\t\t\t\t\t\t\ttitle={tooltipText}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"truncate text-left text-[11px] leading-5\",\n\t\t\t\t\t\t\t\t\ttoneClassForWork(entry.tone),\n\t\t\t\t\t\t\t\t\tpreview ? \"text-muted-foreground/70\" : null,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"text-foreground/80\",\n\t\t\t\t\t\t\t\t\t\ttoneClassForWork(entry.tone),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{heading}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{preview ? (\n\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground/55\"> - {preview}</span>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"max-w-[min(720px,calc(100vw-2rem))]\",\n\t\t\t\t\t\t\t\ttooltipIsCommand ? \"px-1.5 py-1\" : null,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tside=\"top\"\n\t\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"whitespace-pre-wrap text-xs leading-5 wrap-break-word\",\n\t\t\t\t\t\t\t\t\ttooltipIsCommand\n\t\t\t\t\t\t\t\t\t\t? \"overflow-x-auto font-mono text-[11px] leading-4\"\n\t\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tooltipText}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</div>\n\t\t\t\t{entry.status ? (\n\t\t\t\t\t<span className=\"shrink-0 text-muted-foreground/55 text-[10px]\">\n\t\t\t\t\t\t{entry.status}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t{entry.changedFiles.length > 0 && !previewIsChangedFiles ? (\n\t\t\t\t<div className=\"mt-1 flex min-w-0 flex-wrap gap-1 pl-6\">\n\t\t\t\t\t{entry.changedFiles.slice(0, 4).map((file) => (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tkey={file}\n\t\t\t\t\t\t\tclassName=\"max-w-[180px] truncate rounded-md border border-border/55 bg-background/75 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground/75\"\n\t\t\t\t\t\t\ttitle={file}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{file}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\t\t\t\t\t{entry.changedFiles.length > 4 ? (\n\t\t\t\t\t\t<span className=\"px-1 text-[10px] text-muted-foreground/55\">\n\t\t\t\t\t\t\t+{entry.changedFiles.length - 4}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n\nfunction WorkEntryIcon({ entry }: { entry: TimelineWorkEntry }) {\n\tconst className = \"size-3.5\";\n\tswitch (entry.itemType) {\n\t\tcase \"CommandExecution\":\n\t\t\treturn <TerminalIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"FileChange\":\n\t\t\treturn <FileDiffIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"DynamicToolCall\":\n\t\tcase \"McpToolCall\":\n\t\t\treturn <SettingsIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"Reasoning\":\n\t\t\treturn <LightbulbIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"WebSearch\":\n\t\t\treturn <SearchIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"ImageView\":\n\t\tcase \"ImageGeneration\":\n\t\t\treturn <ImageIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"ContextCompaction\":\n\t\t\treturn <BoxIcon className={className} aria-hidden=\"true\" />;\n\t\tcase \"HookPrompt\":\n\t\t\treturn <GlobeIcon className={className} aria-hidden=\"true\" />;\n\t}\n}\n\nfunction compactToolLabel(value: string): string {\n\treturn value.replace(/\\s+(?:complete|completed)\\s*$/i, \"\").trim();\n}\n\nfunction formatCompactToolHeading(value: string): string {\n\tconst trimmed = compactToolLabel(value);\n\tif (trimmed.length === 0) {\n\t\treturn value;\n\t}\n\treturn `${trimmed.charAt(0).toUpperCase()}${trimmed.slice(1)}`;\n}\n\nfunction toneClassForWork(tone: TimelineWorkEntry[\"tone\"]): string {\n\tif (tone === \"error\") {\n\t\treturn \"text-destructive/70\";\n\t}\n\tif (tone === \"tool\") {\n\t\treturn \"text-muted-foreground/70\";\n\t}\n\tif (tone === \"thinking\") {\n\t\treturn \"text-muted-foreground/50\";\n\t}\n\treturn \"text-muted-foreground/40\";\n}\n\nfunction ProposedPlanTimelineRow({\n\trow,\n}: {\n\trow: Extract<MessagesTimelineRow, { kind: \"proposed-plan\" }>;\n}) {\n\treturn (\n\t\t<div className=\"min-w-0 px-1 py-0.5\">\n\t\t\t<ProposedPlanCard planMarkdown={row.item.text} />\n\t\t</div>\n\t);\n}\n\nfunction UserInputContent({ content }: { content: UserInput[] }) {\n\tconst { onImageExpand } = useTimelineRowContext();\n\tconst images = content.filter(\n\t\t(item): item is Extract<UserInput, { type: \"image\" }> =>\n\t\t\titem.type === \"image\",\n\t);\n\tconst localImages = content.filter((item) => item.type === \"local_image\");\n\tconst text = content\n\t\t.filter((item) => item.type === \"text\")\n\t\t.map((item) => item.text)\n\t\t.join(\"\\n\\n\");\n\tconst displayText = decodeHistoryMentions(text).text;\n\tconst imagePreview = buildUserInputImagePreview(images);\n\n\treturn (\n\t\t<div className=\"grid gap-3\">\n\t\t\t{images.length > 0 ? (\n\t\t\t\t<div className=\"grid max-w-[420px] grid-cols-2 gap-2\">\n\t\t\t\t\t{images.map((image, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tkey={`${image.image_url}-${index}`}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden rounded-lg border border-border/80 bg-background/70 text-left transition hover:border-border hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (imagePreview) {\n\t\t\t\t\t\t\t\t\tonImageExpand({ ...imagePreview, index });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={image.image_url}\n\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\tclassName=\"block h-auto max-h-[220px] w-full object-cover\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<UserMessageBody text={displayText} />\n\t\t\t{localImages.length > 0 ? (\n\t\t\t\t<div className=\"flex items-center gap-2 rounded-lg border bg-card/80 p-2 text-muted-foreground text-xs\">\n\t\t\t\t\t<PaperclipIcon className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t{localImages.length} local image\n\t\t\t\t\t{localImages.length === 1 ? \"\" : \"s\"}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction UserMessageBody({ text }: { text: string }) {\n\tif (text.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"whitespace-pre-wrap wrap-break-word text-sm leading-relaxed text-foreground\">\n\t\t\t<UserMessageText text={text} />\n\t\t</div>\n\t);\n}\n\nfunction UserMessageText({ text }: { text: string }) {\n\tconst parts = splitMentionText(text);\n\treturn (\n\t\t<>\n\t\t\t{parts.map((part, index) =>\n\t\t\t\tpart.kind === \"mention\" ? (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={`${part.text}-${index}`}\n\t\t\t\t\t\tclassName=\"inline-flex max-w-full align-baseline font-medium text-foreground\"\n\t\t\t\t\t\tdata-mention-chip=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{part.text}\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<span key={`${part.text}-${index}`}>{part.text}</span>\n\t\t\t\t),\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nfunction WarningTimelineRow({ message }: { message: string }) {\n\treturn (\n\t\t<div className=\"rounded-lg border bg-muted/50 px-4 py-3 text-muted-foreground text-sm\">\n\t\t\t{message}\n\t\t</div>\n\t);\n}\n\nfunction ErrorTimelineRow({ message }: { message: string }) {\n\tconst credentialError = isAssistantCredentialError(message);\n\n\treturn (\n\t\t<div className=\"rounded-lg border border-destructive/30 bg-destructive/5 px-4 py-3 text-destructive text-sm\">\n\t\t\t<p>{message}</p>\n\t\t\t{credentialError ? (\n\t\t\t\t<a\n\t\t\t\t\thref=\"/settings/api-keys\"\n\t\t\t\t\tclassName=\"mt-2 inline-flex font-medium underline-offset-4 hover:underline\"\n\t\t\t\t>\n\t\t\t\t\tOpen API key settings\n\t\t\t\t</a>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction WorkingTimelineRow({\n\trow,\n}: {\n\trow: Extract<MessagesTimelineRow, { kind: \"working\" }>;\n}) {\n\treturn (\n\t\t<div className=\"py-0.5 pl-1.5\">\n\t\t\t<div className=\"flex items-center gap-2 pt-1 text-[11px] text-muted-foreground/70\">\n\t\t\t\t<span className=\"inline-flex items-center gap-[3px]\">\n\t\t\t\t\t<span className=\"h-1 w-1 animate-pulse rounded-full bg-muted-foreground/30\" />\n\t\t\t\t\t<span className=\"h-1 w-1 animate-pulse rounded-full bg-muted-foreground/30 [animation-delay:200ms]\" />\n\t\t\t\t\t<span className=\"h-1 w-1 animate-pulse rounded-full bg-muted-foreground/30 [animation-delay:400ms]\" />\n\t\t\t\t</span>\n\t\t\t\t<span>\n\t\t\t\t\t{row.createdAt ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\tWorking for <WorkingTimer createdAt={row.createdAt} />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"Working...\"\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction WorkingTimer({ createdAt }: { createdAt: string }) {\n\tconst [nowMs, setNowMs] = useState(() => Date.now());\n\tuseEffect(() => {\n\t\tconst intervalId = window.setInterval(() => setNowMs(Date.now()), 1000);\n\t\treturn () => window.clearInterval(intervalId);\n\t}, [createdAt]);\n\n\treturn <>{formatWorkingTimer(createdAt, new Date(nowMs).toISOString()) ?? \"0s\"}</>;\n}\n\nfunction formatWorkingTimer(startIso: string, endIso: string): string | null {\n\tconst startedAtMs = Date.parse(startIso);\n\tconst endedAtMs = Date.parse(endIso);\n\tif (!Number.isFinite(startedAtMs) || !Number.isFinite(endedAtMs)) {\n\t\treturn null;\n\t}\n\n\tconst elapsedSeconds = Math.max(0, Math.floor((endedAtMs - startedAtMs) / 1000));\n\tif (elapsedSeconds < 60) {\n\t\treturn `${elapsedSeconds}s`;\n\t}\n\n\tconst hours = Math.floor(elapsedSeconds / 3600);\n\tconst minutes = Math.floor((elapsedSeconds % 3600) / 60);\n\tconst seconds = elapsedSeconds % 60;\n\n\tif (hours > 0) {\n\t\treturn minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`;\n\t}\n\n\treturn seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;\n}\n\nfunction formatTimestamp(iso: string): string {\n\tconst date = new Date(iso);\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn \"\";\n\t}\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\thour: \"numeric\",\n\t\tminute: \"2-digit\",\n\t}).format(date);\n}\n\nfunction userInputTextForCopy(content: readonly UserInput[]): string | null {\n\tconst text = content\n\t\t.filter((item) => item.type === \"text\")\n\t\t.map((item) => decodeHistoryMentions(item.text).text)\n\t\t.join(\"\\n\\n\")\n\t\t.trim();\n\treturn text.length > 0 ? text : null;\n}\n\nfunction buildUserInputImagePreview(\n\timages: Extract<UserInput, { type: \"image\" }>[],\n): ExpandedImagePreview | null {\n\tif (images.length === 0) {\n\t\treturn null;\n\t}\n\treturn {\n\t\timages: images.map((image, index) => ({\n\t\t\tsrc: image.image_url,\n\t\t\tname: `Image ${index + 1}`,\n\t\t})),\n\t\tindex: 0,\n\t};\n}\n\nfunction splitMentionText(\n\ttext: string,\n): Array<{ kind: \"mention\" | \"text\"; text: string }> {\n\tconst parts: Array<{ kind: \"mention\" | \"text\"; text: string }> = [];\n\tconst mentionPattern = /@[\\p{L}\\p{N}_-]+/gu;\n\tlet lastIndex = 0;\n\tfor (const match of text.matchAll(mentionPattern)) {\n\t\tconst start = match.index ?? 0;\n\t\tif (start > lastIndex) {\n\t\t\tparts.push({ kind: \"text\", text: text.slice(lastIndex, start) });\n\t\t}\n\t\tparts.push({ kind: \"mention\", text: match[0] ?? \"\" });\n\t\tlastIndex = start + (match[0]?.length ?? 0);\n\t}\n\tif (lastIndex < text.length) {\n\t\tparts.push({ kind: \"text\", text: text.slice(lastIndex) });\n\t}\n\treturn parts.length > 0 ? parts : [{ kind: \"text\", text }];\n}\n\nfunction MessageCopyButton({\n\tcompact = false,\n\ttext,\n}: {\n\tcompact?: boolean;\n\ttext: string;\n}) {\n\tconst [copied, setCopied] = useState(false);\n\tconst timeoutRef = useRef<number | null>(null);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (timeoutRef.current !== null) {\n\t\t\t\twindow.clearTimeout(timeoutRef.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tasync function copyMessage() {\n\t\tif (!navigator.clipboard?.writeText) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(text);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tif (timeoutRef.current !== null) {\n\t\t\twindow.clearTimeout(timeoutRef.current);\n\t\t}\n\t\tsetCopied(true);\n\t\ttimeoutRef.current = window.setTimeout(() => {\n\t\t\ttimeoutRef.current = null;\n\t\t\tsetCopied(false);\n\t\t}, 1000);\n\t}\n\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize={compact ? \"icon-xs\" : \"xs\"}\n\t\t\t\t\tonClick={() => void copyMessage()}\n\t\t\t\t\taria-label=\"Copy message\"\n\t\t\t\t\tdisabled={copied}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t? \"border-border/40 bg-background/25 text-muted-foreground/55 shadow-none hover:border-border/70 hover:bg-background/55 hover:text-muted-foreground/80\"\n\t\t\t\t\t\t\t: \"mt-1.5 border-border/50 bg-background/35 text-muted-foreground/45 opacity-0 shadow-none hover:border-border/70 hover:bg-background/55 hover:text-muted-foreground/70 group-hover/assistant:opacity-100\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t<CheckIcon className=\"size-3 text-success\" aria-hidden=\"true\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<CopyIcon className=\"size-3\" aria-hidden=\"true\" />\n\t\t\t\t\t)}\n\t\t\t\t</Button>\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipContent>\n\t\t\t\t<p>{copied ? \"Copied\" : \"Copy to clipboard\"}</p>\n\t\t\t</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n","import { type LegendListRef } from \"@legendapp/list/react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport {\n\ttype ReactNode,\n\tmemo,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { ComposerBannerStack, type ComposerBannerStackItem } from \"./ComposerBannerStack\";\nimport { ExpandedImageDialog } from \"./ExpandedImageDialog\";\nimport { MessagesTimeline, type MessagesTimelineProps } from \"./MessagesTimeline\";\nimport type { ExpandedImagePreview } from \"./composer-image-attachments\";\n\nexport type ChatViewRenderComposerControls = {\n\tprepareForOptimisticAppend: () => Promise<void>;\n\tscheduleStickToBottom: () => void;\n};\n\nexport type ChatViewProps = {\n\tactions?: ReactNode;\n\tbannerItems?: readonly ComposerBannerStackItem[];\n\tclassName?: string;\n\tcomposer: ReactNode;\n\theaderLeading?: ReactNode;\n\tlistRef: React.RefObject<LegendListRef | null>;\n\tsubtitle?: ReactNode;\n\tthreadKey: string;\n\ttimeline: Omit<\n\t\tMessagesTimelineProps,\n\t\t\"listRef\" | \"onImageExpand\" | \"onIsAtEndChange\"\n\t>;\n\ttitle: ReactNode;\n\tonControlsChange?: (controls: ChatViewRenderComposerControls | null) => void;\n\tonIsAtEndChange?: (isAtEnd: boolean) => void;\n};\n\nexport const ChatView = memo(function ChatView({\n\tactions,\n\tbannerItems = [],\n\tclassName,\n\tcomposer,\n\theaderLeading,\n\tlistRef,\n\tsubtitle,\n\tthreadKey,\n\ttimeline,\n\ttitle,\n\tonControlsChange,\n\tonIsAtEndChange,\n}: ChatViewProps) {\n\tconst [showScrollToBottom, setShowScrollToBottom] = useState(false);\n\tconst [expandedImage, setExpandedImage] =\n\t\tuseState<ExpandedImagePreview | null>(null);\n\tconst isAtEndRef = useRef(true);\n\tconst showScrollDebounceTimeoutRef = useRef<number | null>(null);\n\tconst stickToBottomFrameRef = useRef<number | null>(null);\n\n\tconst cancelShowScrollDebounce = useCallback(() => {\n\t\tif (showScrollDebounceTimeoutRef.current === null) {\n\t\t\treturn;\n\t\t}\n\t\twindow.clearTimeout(showScrollDebounceTimeoutRef.current);\n\t\tshowScrollDebounceTimeoutRef.current = null;\n\t}, []);\n\n\tconst scrollToEnd = useCallback(\n\t\t(animated = false) => {\n\t\t\tlistRef.current?.scrollToEnd?.({ animated });\n\t\t},\n\t\t[listRef],\n\t);\n\n\tconst scheduleStickToBottom = useCallback(() => {\n\t\tif (!isAtEndRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tif (stickToBottomFrameRef.current !== null) {\n\t\t\twindow.cancelAnimationFrame(stickToBottomFrameRef.current);\n\t\t}\n\t\tstickToBottomFrameRef.current = window.requestAnimationFrame(() => {\n\t\t\tstickToBottomFrameRef.current = null;\n\t\t\tscrollToEnd(false);\n\t\t});\n\t}, [scrollToEnd]);\n\n\tconst prepareForOptimisticAppend = useCallback(async () => {\n\t\tisAtEndRef.current = true;\n\t\tcancelShowScrollDebounce();\n\t\tsetShowScrollToBottom(false);\n\t\tawait listRef.current?.scrollToEnd?.({ animated: false });\n\t}, [cancelShowScrollDebounce, listRef]);\n\n\tconst handleIsAtEndChange = useCallback(\n\t\t(isAtEnd: boolean) => {\n\t\t\tonIsAtEndChange?.(isAtEnd);\n\t\t\tif (isAtEndRef.current === isAtEnd) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tisAtEndRef.current = isAtEnd;\n\t\t\tif (isAtEnd) {\n\t\t\t\tcancelShowScrollDebounce();\n\t\t\t\tsetShowScrollToBottom(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (showScrollDebounceTimeoutRef.current !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshowScrollDebounceTimeoutRef.current = window.setTimeout(() => {\n\t\t\t\tshowScrollDebounceTimeoutRef.current = null;\n\t\t\t\tif (!isAtEndRef.current) {\n\t\t\t\t\tsetShowScrollToBottom(true);\n\t\t\t\t}\n\t\t\t}, 150);\n\t\t},\n\t\t[cancelShowScrollDebounce, onIsAtEndChange],\n\t);\n\n\tuseEffect(() => {\n\t\tisAtEndRef.current = true;\n\t\tcancelShowScrollDebounce();\n\t\tconst resetTimerId = window.setTimeout(() => {\n\t\t\tsetShowScrollToBottom(false);\n\t\t\tsetExpandedImage(null);\n\t\t}, 0);\n\t\tconst frameId = window.requestAnimationFrame(() => scrollToEnd(false));\n\t\treturn () => {\n\t\t\twindow.clearTimeout(resetTimerId);\n\t\t\twindow.cancelAnimationFrame(frameId);\n\t\t};\n\t}, [cancelShowScrollDebounce, scrollToEnd, threadKey]);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tcancelShowScrollDebounce();\n\t\t\tif (stickToBottomFrameRef.current !== null) {\n\t\t\t\twindow.cancelAnimationFrame(stickToBottomFrameRef.current);\n\t\t\t\tstickToBottomFrameRef.current = null;\n\t\t\t}\n\t\t},\n\t\t[cancelShowScrollDebounce],\n\t);\n\n\tconst composerControls = useMemo<ChatViewRenderComposerControls>(\n\t\t() => ({ prepareForOptimisticAppend, scheduleStickToBottom }),\n\t\t[prepareForOptimisticAppend, scheduleStickToBottom],\n\t);\n\n\tuseEffect(() => {\n\t\tonControlsChange?.(composerControls);\n\t\treturn () => onControlsChange?.(null);\n\t}, [composerControls, onControlsChange]);\n\n\treturn (\n\t\t<section\n\t\t\tclassName={cn(\n\t\t\t\t\"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden bg-background\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<header className=\"flex h-12 shrink-0 items-center gap-3 border-b bg-background/95 px-3 md:px-6\">\n\t\t\t\t<div className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t\t{headerLeading}\n\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t<h1 className=\"truncate text-sm font-semibold\">{title}</h1>\n\t\t\t\t\t\t{subtitle ? (\n\t\t\t\t\t\t\t<p className=\"truncate text-muted-foreground text-xs\">{subtitle}</p>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{actions ? (\n\t\t\t\t\t<div className=\"ml-auto flex shrink-0 items-center gap-1.5 sm:gap-2\">\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</header>\n\n\t\t\t<div className=\"flex min-h-0 min-w-0 flex-1\">\n\t\t\t\t<div className=\"flex min-h-0 min-w-0 flex-1 flex-col\">\n\t\t\t\t\t<div className=\"relative flex min-h-0 flex-1 flex-col\">\n\t\t\t\t\t\t<MessagesTimeline\n\t\t\t\t\t\t\t{...timeline}\n\t\t\t\t\t\t\tlistRef={listRef}\n\t\t\t\t\t\t\tonImageExpand={setExpandedImage}\n\t\t\t\t\t\t\tonIsAtEndChange={handleIsAtEndChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{expandedImage ? (\n\t\t\t\t\t\t\t<ExpandedImageDialog\n\t\t\t\t\t\t\t\tpreview={expandedImage}\n\t\t\t\t\t\t\t\tonClose={() => setExpandedImage(null)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{showScrollToBottom ? (\n\t\t\t\t\t\t\t<div className=\"pointer-events-none absolute bottom-1 left-1/2 z-30 flex -translate-x-1/2 justify-center py-1.5\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => scrollToEnd(true)}\n\t\t\t\t\t\t\t\t\tclassName=\"pointer-events-auto flex items-center gap-1.5 rounded-full border border-border/60 bg-card px-3 py-1 text-muted-foreground text-xs shadow-sm transition-colors hover:border-border hover:text-foreground hover:cursor-pointer\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ChevronDownIcon className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t\tScroll to bottom\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"min-w-0 overflow-x-clip pl-[calc(env(safe-area-inset-left)+0.75rem)] pr-[calc(env(safe-area-inset-right)+0.75rem)] pt-1.5 sm:pl-[calc(env(safe-area-inset-left)+1.25rem)] sm:pr-[calc(env(safe-area-inset-right)+1.25rem)] sm:pt-2 pb-[calc(env(safe-area-inset-bottom)+0.75rem)] sm:pb-[calc(env(safe-area-inset-bottom)+1rem)]\">\n\t\t\t\t\t\t<div className=\"relative isolate min-w-0\">\n\t\t\t\t\t\t\t<ComposerBannerStack className=\"relative z-0\" items={bannerItems} />\n\t\t\t\t\t\t\t<div className=\"relative z-10\">\n\t\t\t\t\t\t\t\t{composer}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n});\n","import { memo } from \"react\";\n\nimport { Button } from \"../ui/button\";\n\nexport type ApprovalRequestId = string;\n\nexport type ProviderApprovalDecision =\n\t| \"accept\"\n\t| \"acceptForSession\"\n\t| \"cancel\"\n\t| \"decline\";\n\ninterface ComposerPendingApprovalActionsProps {\n\tisResponding: boolean;\n\trequestId: ApprovalRequestId;\n\tonRespondToApproval: (\n\t\trequestId: ApprovalRequestId,\n\t\tdecision: ProviderApprovalDecision,\n\t) => Promise<void>;\n}\n\nexport const ComposerPendingApprovalActions = memo(\n\tfunction ComposerPendingApprovalActions({\n\t\tisResponding,\n\t\trequestId,\n\t\tonRespondToApproval,\n\t}: ComposerPendingApprovalActionsProps) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tdisabled={isResponding}\n\t\t\t\t\tonClick={() => void onRespondToApproval(requestId, \"cancel\")}\n\t\t\t\t>\n\t\t\t\t\tCancel turn\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\tdisabled={isResponding}\n\t\t\t\t\tonClick={() => void onRespondToApproval(requestId, \"decline\")}\n\t\t\t\t>\n\t\t\t\t\tDecline\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tdisabled={isResponding}\n\t\t\t\t\tonClick={() => void onRespondToApproval(requestId, \"acceptForSession\")}\n\t\t\t\t>\n\t\t\t\t\tAlways allow this session\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\tdisabled={isResponding}\n\t\t\t\t\tonClick={() => void onRespondToApproval(requestId, \"accept\")}\n\t\t\t\t>\n\t\t\t\t\tApprove once\n\t\t\t\t</Button>\n\t\t\t</>\n\t\t);\n\t},\n);\n","import { memo } from \"react\";\n\nexport type PendingApproval = {\n\trequestKind: \"command\" | \"file-change\" | \"file-read\";\n};\n\ninterface ComposerPendingApprovalPanelProps {\n\tapproval: PendingApproval;\n\tpendingCount: number;\n}\n\nexport const ComposerPendingApprovalPanel = memo(\n\tfunction ComposerPendingApprovalPanel({\n\t\tapproval,\n\t\tpendingCount,\n\t}: ComposerPendingApprovalPanelProps) {\n\t\tconst approvalSummary =\n\t\t\tapproval.requestKind === \"command\"\n\t\t\t\t? \"Command approval requested\"\n\t\t\t\t: approval.requestKind === \"file-read\"\n\t\t\t\t\t? \"File-read approval requested\"\n\t\t\t\t\t: \"File-change approval requested\";\n\n\t\treturn (\n\t\t\t<div className=\"px-4 py-3.5 sm:px-5 sm:py-4\">\n\t\t\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t\t\t<span className=\"text-sm uppercase tracking-[0.2em]\">\n\t\t\t\t\t\tPENDING APPROVAL\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"font-medium text-sm\">{approvalSummary}</span>\n\t\t\t\t\t{pendingCount > 1 ? (\n\t\t\t\t\t\t<span className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t1/{pendingCount}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","export const COMPOSER_INLINE_CHIP_CLASS_NAME =\n\t\"inline-flex max-w-full select-none items-center gap-1 rounded-md border border-border/70 bg-accent/40 px-1.5 py-px font-medium text-[12px] leading-[1.1] text-foreground align-middle\";\n\nexport const COMPOSER_INLINE_CHIP_ICON_CLASS_NAME =\n\t\"size-3.5 shrink-0 opacity-85\";\n\nexport const COMPOSER_INLINE_CHIP_LABEL_CLASS_NAME =\n\t\"truncate select-none leading-tight\";\n\nexport const COMPOSER_INLINE_SKILL_CHIP_CLASS_NAME =\n\t\"inline-flex max-w-full select-none items-center gap-1 rounded-md border border-fuchsia-500/25 bg-fuchsia-500/12 px-1.5 py-px font-medium text-[12px] leading-[1.1] text-fuchsia-700 align-middle dark:text-fuchsia-300\";\n\nexport const COMPOSER_INLINE_CHIP_DISMISS_BUTTON_CLASS_NAME =\n\t\"ml-0.5 inline-flex size-3.5 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground/72 transition-colors hover:bg-foreground/6 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\";\n","import { TerminalIcon } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n\tCOMPOSER_INLINE_CHIP_CLASS_NAME,\n\tCOMPOSER_INLINE_CHIP_ICON_CLASS_NAME,\n\tCOMPOSER_INLINE_CHIP_LABEL_CLASS_NAME,\n} from \"../composerInlineChip\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from \"../ui/tooltip\";\n\ninterface TerminalContextInlineChipProps {\n\texpired?: boolean;\n\tlabel: string;\n\ttooltipText: string;\n}\n\nexport function TerminalContextInlineChip(props: TerminalContextInlineChipProps) {\n\tconst { expired = false, label, tooltipText } = props;\n\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger asChild>\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tCOMPOSER_INLINE_CHIP_CLASS_NAME,\n\t\t\t\t\t\texpired && \"border-destructive/35 bg-destructive/8 text-destructive\",\n\t\t\t\t\t)}\n\t\t\t\t\tdata-terminal-context-expired={expired ? \"true\" : undefined}\n\t\t\t\t>\n\t\t\t\t\t<TerminalIcon\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tCOMPOSER_INLINE_CHIP_ICON_CLASS_NAME,\n\t\t\t\t\t\t\t\"size-3.5\",\n\t\t\t\t\t\t\texpired && \"opacity-100\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t\t<span className={COMPOSER_INLINE_CHIP_LABEL_CLASS_NAME}>{label}</span>\n\t\t\t\t</span>\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipContent className=\"max-w-80 whitespace-pre-wrap leading-tight\" side=\"top\">\n\t\t\t\t{tooltipText}\n\t\t\t</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n","import { cn } from \"../../lib/utils\";\nimport { TerminalContextInlineChip } from \"./TerminalContextInlineChip\";\n\nexport interface TerminalContextDraft {\n\texpiresAt?: number | null;\n\tid: string;\n\tlabel?: string | null;\n\ttext: string;\n}\n\ninterface ComposerPendingTerminalContextsProps {\n\tclassName?: string;\n\tcontexts: ReadonlyArray<TerminalContextDraft>;\n}\n\ninterface ComposerPendingTerminalContextChipProps {\n\tcontext: TerminalContextDraft;\n}\n\nexport function formatTerminalContextLabel(context: TerminalContextDraft): string {\n\treturn context.label?.trim() || `Terminal ${context.id}`;\n}\n\nexport function isTerminalContextExpired(context: TerminalContextDraft): boolean {\n\treturn typeof context.expiresAt === \"number\" && context.expiresAt <= Date.now();\n}\n\nexport function ComposerPendingTerminalContextChip({\n\tcontext,\n}: ComposerPendingTerminalContextChipProps) {\n\tconst label = formatTerminalContextLabel(context);\n\tconst expired = isTerminalContextExpired(context);\n\tconst tooltipText = expired\n\t\t? `Terminal context expired. Remove and re-add ${label} to include it in your message.`\n\t\t: context.text;\n\n\treturn (\n\t\t<TerminalContextInlineChip\n\t\t\texpired={expired}\n\t\t\tlabel={label}\n\t\t\ttooltipText={tooltipText}\n\t\t/>\n\t);\n}\n\nexport function ComposerPendingTerminalContexts({\n\tclassName,\n\tcontexts,\n}: ComposerPendingTerminalContextsProps) {\n\tif (contexts.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(\"flex flex-wrap gap-1.5\", className)}>\n\t\t\t{contexts.map((context) => (\n\t\t\t\t<ComposerPendingTerminalContextChip key={context.id} context={context} />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\nimport {\n\tisCodexReasoningEffort,\n\ttype CodexModelOption,\n\ttype CodexReasoningEffort,\n\ttype ProviderDriverKind,\n} from \"../../lib/modelSelection\";\nimport { TraitsPicker } from \"./TraitsPicker\";\n\nexport type ProviderOptionSelection = {\n\tname: string;\n\tvalue: string;\n};\n\nexport type ComposerProviderStateInput = {\n\tmodel: string;\n\tmodelOptions: ReadonlyArray<ProviderOptionSelection> | null | undefined;\n\tmodels: ReadonlyArray<CodexModelOption>;\n\tprompt: string;\n\tprovider: ProviderDriverKind;\n};\n\nexport type ComposerProviderState = {\n\tcomposerFrameClassName?: string;\n\tcomposerSurfaceClassName?: string;\n\tmodelPickerIconClassName?: string;\n\tmodelOptionsForDispatch: ReadonlyArray<ProviderOptionSelection> | undefined;\n\tpromptEffort: string | null;\n\tprovider: ProviderDriverKind;\n};\n\ntype TraitsRenderInput = {\n\tmodel: string;\n\tmodelOptions: ReadonlyArray<ProviderOptionSelection> | undefined;\n\tmodels: ReadonlyArray<CodexModelOption>;\n\tonEffortChange?: (effort: CodexReasoningEffort) => void;\n\tprompt: string;\n\tprovider: ProviderDriverKind;\n};\n\nexport function getComposerProviderState(\n\tinput: ComposerProviderStateInput,\n): ComposerProviderState {\n\tconst promptEffort =\n\t\tinput.modelOptions?.find((option) => option.name === \"effort\")?.value ?? null;\n\n\treturn {\n\t\tmodelOptionsForDispatch: input.modelOptions ?? undefined,\n\t\tpromptEffort,\n\t\tprovider: input.provider,\n\t};\n}\n\nexport function renderProviderTraitsMenuContent(\n\t_input: TraitsRenderInput,\n): ReactNode {\n\tvoid _input;\n\treturn null;\n}\n\nexport function renderProviderTraitsPicker(input: TraitsRenderInput): ReactNode {\n\tif (!input.onEffortChange) {\n\t\treturn null;\n\t}\n\n\tconst effortValue =\n\t\tinput.modelOptions?.find((option) => option.name === \"effort\")?.value ??\n\t\t\"medium\";\n\tconst effort: CodexReasoningEffort = isCodexReasoningEffort(effortValue)\n\t\t? effortValue\n\t\t: \"medium\";\n\treturn (\n\t\t<TraitsPicker\n\t\t\teffort={effort}\n\t\t\tonEffortChange={input.onEffortChange}\n\t\t/>\n\t);\n}\n","export type RealtimeConversationPhase =\n\t| \"Inactive\"\n\t| \"Starting\"\n\t| \"Active\"\n\t| \"Stopping\";\n\nexport type RealtimeConversationUiState = {\n\tdisabled?: boolean;\n\terror?: string | null;\n\tphase: RealtimeConversationPhase;\n\trealtimeSessionId?: string | null;\n\trequestedClose: boolean;\n\ttransport: \"webrtc\";\n\tonStart: () => void;\n\tonStop: () => void;\n};\n\nexport type RealtimeConversationControlState = {\n\taction: \"start\" | \"stop\";\n\tisActive: boolean;\n\tisBusy: boolean;\n\tlabel: string;\n\ttitle: string;\n};\n\nexport function isRealtimeConversationLive(\n\tphase: RealtimeConversationPhase,\n): boolean {\n\treturn (\n\t\tphase === \"Starting\" || phase === \"Active\" || phase === \"Stopping\"\n\t);\n}\n\nexport function getRealtimeConversationControlState(\n\trealtimeConversation: Pick<\n\t\tRealtimeConversationUiState,\n\t\t\"error\" | \"phase\" | \"requestedClose\"\n\t>,\n): RealtimeConversationControlState {\n\tswitch (realtimeConversation.phase) {\n\t\tcase \"Starting\":\n\t\t\treturn {\n\t\t\t\taction: \"start\",\n\t\t\t\tisActive: true,\n\t\t\t\tisBusy: true,\n\t\t\t\tlabel: \"Starting realtime voice\",\n\t\t\t\ttitle: \"Starting realtime voice\",\n\t\t\t};\n\t\tcase \"Active\":\n\t\t\treturn {\n\t\t\t\taction: \"stop\",\n\t\t\t\tisActive: true,\n\t\t\t\tisBusy: false,\n\t\t\t\tlabel: \"Stop realtime voice\",\n\t\t\t\ttitle: \"Stop realtime voice\",\n\t\t\t};\n\t\tcase \"Stopping\":\n\t\t\treturn {\n\t\t\t\taction: \"stop\",\n\t\t\t\tisActive: true,\n\t\t\t\tisBusy: true,\n\t\t\t\tlabel: \"Stopping realtime voice\",\n\t\t\t\ttitle: \"Stopping realtime voice\",\n\t\t\t};\n\t\tcase \"Inactive\":\n\t\tdefault: {\n\t\t\tconst title = realtimeConversation.error\n\t\t\t\t? `Start realtime voice. Last error: ${realtimeConversation.error}`\n\t\t\t\t: \"Start realtime voice\";\n\t\t\treturn {\n\t\t\t\taction: \"start\",\n\t\t\t\tisActive: false,\n\t\t\t\tisBusy: false,\n\t\t\t\tlabel: \"Start realtime voice\",\n\t\t\t\ttitle,\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport class RecordingMeterState {\n\tprivate readonly history: string[] = [\"⠤\", \"⠤\", \"⠤\", \"⠤\"];\n\tprivate env = 0;\n\tprivate noiseEma = 0.02;\n\n\tnextText(peak: number): string {\n\t\tconst symbols = [\"⠤\", \"⠴\", \"⠶\", \"⠷\", \"⡷\", \"⡿\", \"⣿\"];\n\t\tconst latestPeak = Math.max(0, Math.min(1, peak));\n\n\t\tif (latestPeak > this.env) {\n\t\t\tthis.env = 0.8 * latestPeak + 0.2 * this.env;\n\t\t} else {\n\t\t\tthis.env = 0.25 * latestPeak + 0.75 * this.env;\n\t\t}\n\n\t\tconst rmsApprox = this.env * 0.7;\n\t\tthis.noiseEma = 0.95 * this.noiseEma + 0.05 * rmsApprox;\n\t\tconst refLevel = Math.max(this.noiseEma, 0.01);\n\t\tconst fastSignal = 0.8 * latestPeak + 0.2 * this.env;\n\t\tconst raw = Math.max(0, fastSignal / (refLevel * 2));\n\t\tconst compressed = Math.min(1, Math.log1p(raw) / Math.log1p(1.6));\n\t\tconst index = Math.max(\n\t\t\t0,\n\t\t\tMath.min(\n\t\t\t\tsymbols.length - 1,\n\t\t\t\tMath.round(compressed * (symbols.length - 1)),\n\t\t\t),\n\t\t);\n\n\t\tthis.history.shift();\n\t\tthis.history.push(symbols[index] ?? \"⠤\");\n\t\treturn this.history.join(\"\");\n\t}\n}\n","import { MicIcon } from \"lucide-react\";\nimport { memo, type PointerEventHandler } from \"react\";\n\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tgetRealtimeConversationControlState,\n\ttype RealtimeConversationUiState,\n} from \"./composer-realtime-conversation.logic\";\n\nexport const ComposerRealtimeConversationControl = memo(\n\tfunction ComposerRealtimeConversationControl({\n\t\tcompact,\n\t\tdisabled = false,\n\t\tpreserveComposerFocusOnPointerDown = false,\n\t\trealtimeConversation,\n\t}: {\n\t\tcompact: boolean;\n\t\tdisabled?: boolean;\n\t\tpreserveComposerFocusOnPointerDown?: boolean;\n\t\trealtimeConversation: RealtimeConversationUiState;\n\t}) {\n\t\tconst state = getRealtimeConversationControlState(realtimeConversation);\n\t\tconst pointerFocusProps = preserveComposerFocusOnPointerDown\n\t\t\t? { onPointerDown: preventPointerFocus }\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize={compact ? \"icon-sm\" : \"sm\"}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"shrink-0 text-muted-foreground/80 hover:text-foreground\",\n\t\t\t\t\tstate.isActive && \"text-primary hover:text-primary\",\n\t\t\t\t\tstate.isBusy && \"animate-pulse\",\n\t\t\t\t)}\n\t\t\t\t{...pointerFocusProps}\n\t\t\t\taria-label={state.label}\n\t\t\t\taria-pressed={state.isActive}\n\t\t\t\tdata-realtime-conversation-phase={realtimeConversation.phase}\n\t\t\t\tdisabled={disabled || realtimeConversation.disabled || state.isBusy}\n\t\t\t\ttitle={state.title}\n\t\t\t\tonClick={\n\t\t\t\t\tstate.action === \"stop\"\n\t\t\t\t\t\t? realtimeConversation.onStop\n\t\t\t\t\t\t: realtimeConversation.onStart\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{state.isBusy ? (\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tviewBox=\"0 0 14 14\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tclassName=\"animate-spin\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"7\"\n\t\t\t\t\t\t\tcy=\"7\"\n\t\t\t\t\t\t\tr=\"5.5\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray=\"20 12\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t) : (\n\t\t\t\t\t<MicIcon aria-hidden=\"true\" />\n\t\t\t\t)}\n\t\t\t\t<span className={compact ? \"sr-only\" : \"hidden sm:inline\"}>\n\t\t\t\t\t{state.isActive ? \"Live voice\" : \"Realtime\"}\n\t\t\t\t</span>\n\t\t\t</Button>\n\t\t);\n\t},\n);\n\nconst preventPointerFocus: PointerEventHandler<HTMLElement> = (event) => {\n\tevent.preventDefault();\n};\n","import { CircleAlertIcon } from \"lucide-react\";\nimport { memo } from \"react\";\n\nimport { Alert, AlertDescription, AlertTitle } from \"../ui/alert\";\n\nexport type ProviderStatus = {\n\tdisplayName?: string | null;\n\tdriver?: string | null;\n\tmessage?: string | null;\n\tstatus: \"disabled\" | \"error\" | \"limited\" | \"ready\" | \"warning\";\n};\n\nexport const ProviderStatusBanner = memo(function ProviderStatusBanner({\n\tstatus,\n}: {\n\tstatus: ProviderStatus | null;\n}) {\n\tif (!status || status.status === \"ready\" || status.status === \"disabled\") {\n\t\treturn null;\n\t}\n\n\tconst providerLabel =\n\t\tstatus.displayName?.trim() ||\n\t\t(status.driver ? formatProviderDriverKindLabel(status.driver) : \"Codex\");\n\tconst defaultMessage =\n\t\tstatus.status === \"error\"\n\t\t\t? `${providerLabel} provider is unavailable.`\n\t\t\t: `${providerLabel} provider has limited availability.`;\n\tconst title = `${providerLabel} provider status`;\n\n\treturn (\n\t\t<div className=\"mx-auto max-w-3xl pt-3\">\n\t\t\t<Alert variant={status.status === \"error\" ? \"destructive\" : \"default\"}>\n\t\t\t\t<CircleAlertIcon aria-hidden=\"true\" />\n\t\t\t\t<AlertTitle>{title}</AlertTitle>\n\t\t\t\t<AlertDescription\n\t\t\t\t\tclassName=\"line-clamp-3\"\n\t\t\t\t\ttitle={status.message ?? defaultMessage}\n\t\t\t\t>\n\t\t\t\t\t{status.message ?? defaultMessage}\n\t\t\t\t</AlertDescription>\n\t\t\t</Alert>\n\t\t</div>\n\t);\n});\n\nfunction formatProviderDriverKindLabel(driver: string): string {\n\treturn driver\n\t\t.split(/[-_\\s]+/g)\n\t\t.filter(Boolean)\n\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t.join(\" \");\n}\n"]}